<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://svacer.ispras.ru/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=M.vinogradov</id>
	<title>Svacer Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://svacer.ispras.ru/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=M.vinogradov"/>
	<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Special:Contributions/M.vinogradov"/>
	<updated>2026-04-15T08:57:50Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.40.1</generator>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:AIAssistant&amp;diff=3424</id>
		<title>Help:XSvacer:AIAssistant</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:AIAssistant&amp;diff=3424"/>
		<updated>2025-12-01T08:59:49Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: Remove description of old (separate) AI-assistant version. Add deployment manual&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note|type=warn|text='''Disclaimer'''&lt;br /&gt;
* Это экспериментальная Proof of Concept версия, предоставляемая для ознакомления по принципу &amp;quot;как есть&amp;quot;. &lt;br /&gt;
* Данная функциональность не связана с [https://svace.pages.ispras.ru/svace-website/2025/02/21/ai-assistant.html AI-ассистентом из анализатора Svace]. Функционал AI-ассистента из анализатора Svace будет интегрирован в Svacer в будущих версиях сервера.}}&lt;br /&gt;
&lt;br /&gt;
== Поддержка ИИ-ассистента для разметки предупреждений ==&lt;br /&gt;
Данная функциональность позволяет использовать модель машинного обучения (ИИ) для помощи при разметке предупреждений.&lt;br /&gt;
&lt;br /&gt;
ИИ-ассистент предназначен для разметки предупреждений статусами &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;Confirmed&amp;lt;/code&amp;gt; и &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;False Positive&amp;lt;/code&amp;gt;, которые были предсказаны моделью машинного обучения.&lt;br /&gt;
&lt;br /&gt;
Все данные предупреждений хранятся в Svacer и получаются ИИ-ассистентом с помощью REST API.&lt;br /&gt;
&lt;br /&gt;
== Активация и запуск ИИ-ассистента ==&lt;br /&gt;
&lt;br /&gt;
ИИ-ассистент реализован в виде отдельного сервиса, взаимодействующего со Svacer по REST API. Для его работы необходимо:&lt;br /&gt;
&lt;br /&gt;
# Запустить docker-контейнер с моделью машинного обучения&lt;br /&gt;
# При необходимости: развернуть PostgreSQL-сервер для хранения базы данных ИИ-ассистента&lt;br /&gt;
# Запустить сервис ИИ-ассистента&lt;br /&gt;
# Активировать функциональность при запуске Svacer и настроить доступ к ИИ-ассистенту&lt;br /&gt;
&lt;br /&gt;
=== docker compose ===&lt;br /&gt;
Самый простой способ деплоя — развернуть всё в докер-контейнерах, воспользовавшиcь подготовленным нами [https://svacer.ispras.ru/extra/docker-compose-with-ai.yml docker-compose] файлом:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;curl -LO https://svacer.ispras.ru/extra/docker-compose-with-ai.yml&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 docker compose -f docker-compose-with-ai.yml up -d&lt;br /&gt;
&lt;br /&gt;
=== deb/rpm ===&lt;br /&gt;
Если Svacer установлен из deb/rpm пакета:&lt;br /&gt;
&lt;br /&gt;
1. Запустите docker-контейнер с моделью машинного обучения&lt;br /&gt;
&lt;br /&gt;
 docker run --rm -d --name svacerai-model -p 8000:8000 ispras/svacerai-model:latest&lt;br /&gt;
&lt;br /&gt;
2. В PostgreSQL создайте отдельную БД для ИИ-сервера, запустив psql-консоль и выполнив команды:&lt;br /&gt;
&lt;br /&gt;
 sudo su -l postgres&lt;br /&gt;
 psql&lt;br /&gt;
 postgres=# create database svacerai;&lt;br /&gt;
 postgres=# grant all privileges on database svacerai to svace;&lt;br /&gt;
&lt;br /&gt;
(предполагается, что пользователь &amp;lt;code&amp;gt;svace&amp;lt;/code&amp;gt; уже [[Help:Installation#deb/rpm|был создан]] для сервера Svacer)&lt;br /&gt;
&lt;br /&gt;
3. В конфиг-файле ИИ-сервера &amp;lt;code&amp;gt;/etc/default/svacerai&amp;lt;/code&amp;gt; укажите аргументы запуска&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# URL подключения к БД из второго шага&lt;br /&gt;
SVACERAI_PG_URL=&amp;quot;postgres://svace:svace@127.0.0.1:5432/svacerai?sslmode=disable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# адрес и порт модели из первого шага&lt;br /&gt;
SVACERAI_MODEL_URL=&amp;quot;server-status:http://localhost:8000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# интерфейс и порт, на котором будет запущен ИИ-сервер&lt;br /&gt;
SVACERAI_HOST=&amp;quot;0.0.0.0:7001&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# URL сервера Svacer, который будет подключен к ИИ-серверу&lt;br /&gt;
SVACER_HOST=&amp;quot;http://localhost:8080&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Запустите systemd-сервис ИИ-сервера&lt;br /&gt;
&lt;br /&gt;
 systemctl start svacerai&lt;br /&gt;
&lt;br /&gt;
5. В конфиг-файле сервера Svacer &amp;lt;code&amp;gt;/etc/default/svacer&amp;lt;/code&amp;gt; включите фичу ИИ-ассистента, добавив флаг &amp;lt;code&amp;gt;--xsvacer.features aiAssistant&amp;lt;/code&amp;gt; и укажите URL ИИ-сервера&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SVACER_ARGS=&amp;quot;--pg ... --store ... --xsvacer.features aiAssistant&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
# соответствует переменной SVACERAI_HOST из шага 3&lt;br /&gt;
XSVACER_AIASSISTANT_ASSISTANTHOSTURL=http://localhost:7001/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. Перезапустите сервер Svacer&lt;br /&gt;
&lt;br /&gt;
 systemctl restart svacer&lt;br /&gt;
&lt;br /&gt;
== Дополнительная конфигурация ==&lt;br /&gt;
=== Подключение к серверу ИИ-ассистента ===&lt;br /&gt;
По умолчанию Svacer будет пытаться подключиться к ИИ-ассистенту по адресу &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:8081/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. Изменить этот адрес можно одним из способов:&lt;br /&gt;
&lt;br /&gt;
# При запуске Svacer установить переменную окружения &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;XSVACER_AIASSISTANT_ASSISTANTHOSTURL=http://{адрес ИИ-ассистента}:{порт}/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# В конфигурационном файле &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; добавить раздел&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
xsvacer:&lt;br /&gt;
  ...&lt;br /&gt;
  aiAssistant:&lt;br /&gt;
    assistantHostUrl: http://{адрес ИИ-ассистента}:{порт}/&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Запуск docker-контейнера с моделью машинного обучения ====&lt;br /&gt;
При запуске докер-контейнера с ИИ-моделью, можно создать и примонтировать вольюмы для постоянного хранения базы данных и кэша:&lt;br /&gt;
&lt;br /&gt;
 docker volume create svacer-ai-cache&lt;br /&gt;
 docker volume create svacer-ai-pgdata&lt;br /&gt;
 docker run --rm -d --name svacerai-model -p 8000:8000 -v svacer-ai-pgdata:/var/lib/postgresql/data -v svacer-ai-cache:/root/.cache ispras/svacerai-model:latest&lt;br /&gt;
&lt;br /&gt;
* Вольюм &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;cache&amp;lt;/code&amp;gt; будет содержать кэш сервиса взаимодействия с моделью машинного обучения&lt;br /&gt;
* Вольюм &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;pgdata&amp;lt;/code&amp;gt; будет содержать файлы с данными встроенного в docker-образ PostgreSQL&lt;br /&gt;
&lt;br /&gt;
=== Флаги команды запуска ИИ-ассистента ===&lt;br /&gt;
&lt;br /&gt;
Глобальные флаги &amp;lt;code&amp;gt;svacerai-server help&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 NAME:&lt;br /&gt;
    svacerai-server - Svace AI server&lt;br /&gt;
 &lt;br /&gt;
 USAGE:&lt;br /&gt;
    svacerai-server [global options] command [command options] [arguments...]&lt;br /&gt;
 &lt;br /&gt;
 COMMANDS:&lt;br /&gt;
    run&lt;br /&gt;
    help, h  Shows a list of commands or help for one command&lt;br /&gt;
 &lt;br /&gt;
 GLOBAL OPTIONS:&lt;br /&gt;
    --debug            (default: false) [$SVACER_AI_DEBUG]&lt;br /&gt;
    --log-level value  Defines log level. Available: info, warn, error [$SVACER_AI_LOG_LEVEL]&lt;br /&gt;
    --log value        Defines path to log file. By default file /tmp/svacer-ai-*.log will be created.&lt;br /&gt;
    --config value     Define path to file with config in YAML format (by default svacer-ai.cfg).&lt;br /&gt;
    --help, -h         show help&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|debug&lt;br /&gt;
|bool&lt;br /&gt;
|Отладочный режим логирования&lt;br /&gt;
|-&lt;br /&gt;
|log-level&lt;br /&gt;
|string&lt;br /&gt;
|Уровень логирования&lt;br /&gt;
|-&lt;br /&gt;
|log&lt;br /&gt;
|string&lt;br /&gt;
|Путь к файлу с логами&lt;br /&gt;
|-&lt;br /&gt;
|config&lt;br /&gt;
|string&lt;br /&gt;
|Путь к [[#Конфигурация по умолчанию|конфигурационному файлу]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Флаги запуска ИИ-ассистента &amp;lt;code&amp;gt;svacerai-server run help&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 NAME:&lt;br /&gt;
    svacerai-server run&lt;br /&gt;
 &lt;br /&gt;
 USAGE:&lt;br /&gt;
    svacerai-server run [command options] [arguments...]&lt;br /&gt;
 &lt;br /&gt;
 OPTIONS:&lt;br /&gt;
    --pg value                           Defines PostgreSQL connection URL&lt;br /&gt;
    --host value                         Defines host name for the server&lt;br /&gt;
    --svacer-host value                  Defines remote Svacer host&lt;br /&gt;
    --ai-host value [ --ai-host value ]  Specify the address of the service with AI models in the format &amp;lt;nowiki&amp;gt;{host id}:{http://{host address}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
    --help, -h                           show help&lt;br /&gt;
&lt;br /&gt;
{{Note|text=С помощью флагов запуска можно переопределять наиболее часто меняющиеся [[#Конфигурация по умолчанию|параметры конфигурации]] без необходимости создания файла &amp;lt;code&amp;gt;svacer-ai.cfg&amp;lt;/code&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Формат&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 80px&amp;quot;|pg&lt;br /&gt;
|string&lt;br /&gt;
|Строка подключения к базе данных ИИ-ассистента&lt;br /&gt;
|https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING-URIS&lt;br /&gt;
|-&lt;br /&gt;
|host&lt;br /&gt;
|string&lt;br /&gt;
|Адрес сетевого интерфейса и порт, на которых будет запущен ИИ-ассистент&lt;br /&gt;
|&amp;lt;code&amp;gt;{ip адрес}:{порт}&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|svacer-host&lt;br /&gt;
|string&lt;br /&gt;
|Url сервиса Svacer, к API которого будет обращаться ИИ-ассистент&lt;br /&gt;
|https://en.wikipedia.org/wiki/URL#Syntax&lt;br /&gt;
|-&lt;br /&gt;
|ai-host&lt;br /&gt;
|[]string&lt;br /&gt;
|Список адресов сервисов с моделями машинного обучения. &amp;lt;code&amp;gt;host-id&amp;lt;/code&amp;gt; — идентификатор сервиса моделей в [[#Конфигурация по умолчанию|конфигурации]]&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{host id}:{url сервиса моделей}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note|text=При использовании [[#Конфигурация по умолчанию|конфигурации по умолчанию]], &amp;lt;code&amp;gt;{host id}&amp;lt;/code&amp;gt; должен быть равен &amp;lt;code&amp;gt;server-status&amp;lt;/code&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;svacerai-server run --pg postgres://svace:svace@127.0.0.1:5432/svacer_ai --host localhost:8095 --svacer-host http://localhost:8094 --ai-host server-status:http://localhost:7000&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация ИИ-ассистента ===&lt;br /&gt;
&lt;br /&gt;
Управление настройками ИИ-ассистента осуществляется с помощью конфигурационного yaml-файла &amp;lt;code&amp;gt;svacer-ai.cfg&amp;lt;/code&amp;gt; в рабочей директории сервиса.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
|db/url&lt;br /&gt;
|string&lt;br /&gt;
|Строка подключения к базе данных ИИ-ассистента&lt;br /&gt;
|&amp;lt;code&amp;gt;postgres://postgres:postgres@localhost:5432/svacer_ai?sslmode=disable&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|http/host&lt;br /&gt;
|string&lt;br /&gt;
|Адрес сетевого интерфейса и порт, на которых будет запущен ИИ-ассистент&lt;br /&gt;
|&amp;lt;code&amp;gt;localhost:8081&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|http/svacerHostUrl&lt;br /&gt;
&lt;br /&gt;
ai/svacerHostUrl&lt;br /&gt;
|string&lt;br /&gt;
|Url сервиса Svacer, к API которого будет обращаться ИИ-ассистент&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:8080/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|http/svacerClientTlsCfg?&lt;br /&gt;
&lt;br /&gt;
ai/svacerClientTlsCfg&lt;br /&gt;
|[https://pkg.go.dev/crypto/tls#Config *tls.Config]&lt;br /&gt;
|Настройки безопасного подключения к Svacer&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
svacerClientTlsCfg:&lt;br /&gt;
  insecureSkipVerify: true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|ai/svacerReviewCommentTemplate&lt;br /&gt;
|string&lt;br /&gt;
|Шаблон для формирования комментария к разметке выполненной с помощью ИИ-ассистента. В шаблон передаётся структура &amp;lt;code&amp;gt;processing.MarkerResult&amp;lt;/code&amp;gt;&lt;br /&gt;
|См. [[#Конфигурация по умолчанию|конфигурацию по умолчанию]]&lt;br /&gt;
|-&lt;br /&gt;
|ai/svacerReviewTags&lt;br /&gt;
|[]string&lt;br /&gt;
|Список названий меток, которые будут установлены маркерам, размеченным с помощью ИИ-ассистента&lt;br /&gt;
|&amp;lt;code&amp;gt;[AI]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|hosts&lt;br /&gt;
|map[string]object&lt;br /&gt;
|Список параметров подключения к сервисам с моделями машинного обучения, которые будет использовать ИИ-ассистент&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{id сервиса моделей}:&lt;br /&gt;
  {параметры подключения}&lt;br /&gt;
  (см. описание ниже)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Параметры подключения сервиса модели машинного обучения ===&lt;br /&gt;
&lt;br /&gt;
Параметры подключения сервисов модели задаются в виде map, ключами которой являются идентификаторы сервисов. В значении содержатся следующие параметры:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
|url&lt;br /&gt;
|string&lt;br /&gt;
|Url сервиса с моделями машинного обучения&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:7000&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|settings/requestBatchSize&lt;br /&gt;
|int&lt;br /&gt;
|Количество предупреждений, отправляемых для анализа моделью за раз&lt;br /&gt;
|&amp;lt;code&amp;gt;512&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|settings/httpMultipartParameterName&lt;br /&gt;
&lt;br /&gt;
settings/httpMultipartFileName&lt;br /&gt;
&lt;br /&gt;
settings/httpMultipartContentType&lt;br /&gt;
|string&lt;br /&gt;
|Параметра multipart-запроса вызова модели&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
httpMultipartParameterName: &amp;quot;file&amp;quot;&lt;br /&gt;
httpMultipartFileName: &amp;quot;file.csv&amp;quot;&lt;br /&gt;
httpMultipartContentType: &amp;quot;application/vnd.ms-excel&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|resources/modelList&lt;br /&gt;
&lt;br /&gt;
resources/modelInference&lt;br /&gt;
&lt;br /&gt;
resources/logs&lt;br /&gt;
|string&lt;br /&gt;
|Сопоставление названий ресурсов сервиса моделей&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
modelList: &amp;quot;/models_info&amp;quot;&lt;br /&gt;
&lt;br /&gt;
modelInference: &amp;quot;/use_model_for_file&amp;quot;&lt;br /&gt;
&lt;br /&gt;
logs: &amp;quot;/log_file&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|defaults/dataCollector/csvSeparator&lt;br /&gt;
|string&lt;br /&gt;
|Разделитель csv-файла, который отправляется в сервис моделей&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|defaults/dataCollector/additionalLineNumber&lt;br /&gt;
|int&lt;br /&gt;
|Количество строк исходного кода, которые добавляются до и после строки предупреждения при отправке в сервис моделей&lt;br /&gt;
|&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|defaults/dataCollector/csvColumns&lt;br /&gt;
|[]string&lt;br /&gt;
|Названия столбцов csv-файла, который отправляется в сервис моделей&lt;br /&gt;
|&amp;lt;code&amp;gt;[id, warnClass, code]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|defaults/interpretation/defaultValue&lt;br /&gt;
&lt;br /&gt;
defaults/interpretation/defaultValue&lt;br /&gt;
&lt;br /&gt;
defaults/interpretation/defaultValue&lt;br /&gt;
|string&lt;br /&gt;
|Названия статусов, которые присваиваются результату вызова модели&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
defaultValue: &amp;quot;Undecided&amp;quot;&lt;br /&gt;
&lt;br /&gt;
leftClassValue: &amp;quot;False Positive&amp;quot;&lt;br /&gt;
&lt;br /&gt;
rightClassValue: &amp;quot;Confirmed&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация по умолчанию ===&lt;br /&gt;
&lt;br /&gt;
Данная конфигурация применяется по умолчанию при запуске ИИ-ассистента, если отсутствует конфигурационный файл &amp;lt;code&amp;gt;svacer-ai.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Note|type=error|text=Если файл &amp;lt;code&amp;gt;svacer-ai.cfg&amp;lt;/code&amp;gt; существует, в нём должны содержаться все указанные параметры конфигурации.'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
varSvacerHostUrl: &amp;amp;svacerHostUrl &amp;quot;http://localhost:8080/&amp;quot;&lt;br /&gt;
varSvacerClientTlsCfg: &amp;amp;svacerClientTlsCfg&lt;br /&gt;
  insecureSkipVerify: true&lt;br /&gt;
db:&lt;br /&gt;
  url: &amp;quot;postgres://postgres:postgres@localhost:5432/svacer_ai?sslmode=disable&amp;quot;&lt;br /&gt;
http:&lt;br /&gt;
  host: &amp;quot;localhost:8081&amp;quot;&lt;br /&gt;
  svacerHostUrl: *svacerHostUrl&lt;br /&gt;
  svacerClientTlsCfg: *svacerClientTlsCfg&lt;br /&gt;
ai:&lt;br /&gt;
  svacerHostUrl: *svacerHostUrl&lt;br /&gt;
  svacerClientTlsCfg: *svacerClientTlsCfg&lt;br /&gt;
  svacerReviewCommentTemplate: |+&lt;br /&gt;
    `Timestamp: {{now.UTC.Format &amp;quot;2006-01-02T15:04:05Z&amp;quot;}}`&lt;br /&gt;
&lt;br /&gt;
    `AI model: {{.Pipeline.Name}}`&lt;br /&gt;
&lt;br /&gt;
    `Confidence level: {{ printf &amp;quot;%.2f&amp;quot; (index .Interpretation 0).Confidence }}`&lt;br /&gt;
&lt;br /&gt;
  svacerReviewTags:&lt;br /&gt;
    - AI&lt;br /&gt;
  hosts:&lt;br /&gt;
    server-status:&lt;br /&gt;
      url: &amp;quot;http://localhost:7000&amp;quot;&lt;br /&gt;
      settings:&lt;br /&gt;
        requestBatchSize: 512&lt;br /&gt;
        httpMultipartParameterName: &amp;quot;file&amp;quot;&lt;br /&gt;
        httpMultipartFileName: &amp;quot;file.csv&amp;quot;&lt;br /&gt;
        httpMultipartContentType: &amp;quot;application/vnd.ms-excel&amp;quot;&lt;br /&gt;
      resources:&lt;br /&gt;
        modelList: &amp;quot;/models_info&amp;quot;&lt;br /&gt;
        modelInference: &amp;quot;/use_model_for_file&amp;quot;&lt;br /&gt;
        logs: &amp;quot;/log_file&amp;quot;&lt;br /&gt;
      defaults:&lt;br /&gt;
        dataCollector:&lt;br /&gt;
          csvSeparator: &amp;quot;,&amp;quot;&lt;br /&gt;
          additionalLinesNumber: 0&lt;br /&gt;
          csvColumns:&lt;br /&gt;
            - &amp;quot;id&amp;quot;&lt;br /&gt;
            - &amp;quot;warnClass&amp;quot;&lt;br /&gt;
            - &amp;quot;code&amp;quot;&lt;br /&gt;
        interpretation: &lt;br /&gt;
          defaultValue: &amp;quot;Undecided&amp;quot;&lt;br /&gt;
          leftClassValue: &amp;quot;False Positive&amp;quot;&lt;br /&gt;
          rightClassValue: &amp;quot;Confirmed&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Описание модели xgb.joblib ИИ-ассистента ==&lt;br /&gt;
&lt;br /&gt;
Модель обучена на базе 50000+ размеченных предупреждений.&lt;br /&gt;
&lt;br /&gt;
Для предсказания статуса разметки нами используются:&lt;br /&gt;
# языковая модель codebert-base для получения эмбеддингов кода;&lt;br /&gt;
# метод градиентного бустинга (xgboost) для решения задачи классификации.&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Changelog&amp;diff=3398</id>
		<title>Changelog</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Changelog&amp;diff=3398"/>
		<updated>2025-11-27T14:14:01Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: changelog 12-0-0 add AI assistant and new Webide deployment description&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Release 12-0-0 ===&lt;br /&gt;
* API методы на fullmarkers позволяют указать фильтр с полем фильтрации по checker reliability&lt;br /&gt;
* В функциональность полнотекстового поиска добавлен поиск маркеров под id и инварианту.&lt;br /&gt;
* Промежуточное хранилище при импорте результатов командой &amp;lt;code&amp;gt;svacer import / svacer sarif2 import&amp;lt;/code&amp;gt; теперь использует новый формат представления (должно снизить использование памяти при импорте)&lt;br /&gt;
* Сериализация JSON переведена на jsonv2 библиотеку в Go&lt;br /&gt;
* Импорт SARIF теперь более устойчив к пропускам в файле (отсутствие таких полей как location)&lt;br /&gt;
* Добавлены переменные окружения &amp;lt;code&amp;gt;SVACER_TIMEOUT_IMPORT_RESULTS&amp;lt;/code&amp;gt;  для контроля таймаута на ожидание возможности начала операции импорта результатов (формат Go Duration string) и &amp;lt;code&amp;gt;SVACER_NUM_PARALLEL_IMPORTS&amp;lt;/code&amp;gt;  на ограничение числа параллельных импортов (задачи на импорт выстраиваются в очередь).  По умолчанию значения 15 минут  и  (&amp;lt;code&amp;gt;максимальное число коннектов к БД) / 2&amp;lt;/code&amp;gt;. Ограничение необходимы для предотвращения бесконечных ожиданий и зависаний при импорте данных.&lt;br /&gt;
* Убраны лишние сообщения об устаревших детекторах при старте сервера или импорте снимков&lt;br /&gt;
* В prometheus метрики добавлен ряд показателей размеров object store&lt;br /&gt;
* Размер лога сервера, показываемого в WEB интерфейсе, ограничен. Размер задается переменной окружения SVACER_TAIL_LOG_SIZE (по умолчанию 1Мб). Показывается последний кусок не более SVACER_TAIL_LOG_SIZE. Сам лог файл не ограничивается в размерах и кнопка выгрузки лога выгружает полный лог. &lt;br /&gt;
* ['''Экспериментально'''] Можно указать формат лог файла в JSON посредством параметра &amp;lt;code&amp;gt;svacer-server --log-format=json ...&amp;lt;/code&amp;gt;, так же формат может быть указан через переменную окружения &amp;lt;code&amp;gt;SVACER_LOG_FORMAT=json&amp;lt;/code&amp;gt;. Опции так же работают для CLI клиента &amp;lt;code&amp;gt;svacer&amp;lt;/code&amp;gt;&lt;br /&gt;
* При запуске сервера можно указать флаг &amp;lt;code&amp;gt;--force-invariant-refresh&amp;lt;/code&amp;gt; для принудительной регенерации инвариантов (может решить проблему с переносом разметки)&lt;br /&gt;
* Добавлена переменная окружения SVACER_INV_GEN_JOBS для контроля числа параллельных job-ов при регенарации инвариантов. При ограниченных ресурсах машины рекомендуем ставить значение 2. По умолчанию значение ставится в 70% от &amp;lt;code&amp;gt;runtime.GOMAXPROCS&amp;lt;/code&amp;gt;&lt;br /&gt;
* Добавлена функциональность по чистке object store при удалении снимков&lt;br /&gt;
* Добавлена возможность создания сложных пользовательских фильтров по условиям выраженным предикатом [[Afilters]]&lt;br /&gt;
* Проведена работа по предотвращению зависаний при исчерпывании доступных соединений с PostgreSQL сервером&lt;br /&gt;
* Добавлен файл с чексуммой бинарника сервера &amp;lt;code&amp;gt;svacer-server&amp;lt;/code&amp;gt; и проверка чексуммы при запуске&lt;br /&gt;
* Упростили [[Help:XSvacer:AIAssistant:Deploy|деплой ИИ-ассистента]]: добавили его сервис в docker-compose и deb/rpm пакеты&lt;br /&gt;
* Расширили возможности конфигурации при запуске сервера через [https://svacer.ispras.ru/extra/docker-compose.yml docker-compose]: теперь можно включить debug, указать конфиг LDAP и параметр public-url&lt;br /&gt;
* Добавлена возможность указания минимального количества снимков, которое необходимо оставлять в ветке, тип очистки и период удаления в [[Help:CLI/cleanup|автоматическом удалении снимков]]&lt;br /&gt;
* ['''Экспериментально''']  Добавлена возможность [[Edit markers (command line)|автоматически обрабатывать маркеры]] при импорте данных. Также обработка маркеров доступна через [[Help:UI manual#Работа со снимками|UI]]&lt;br /&gt;
* Добавлен флаг &amp;lt;code&amp;gt;diff-url&amp;lt;/code&amp;gt; для команды &amp;lt;code&amp;gt;quickdiff&amp;lt;/code&amp;gt; в CLI, также как и для команд &amp;lt;code&amp;gt;import&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;upload&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sarif2 import&amp;lt;/code&amp;gt; с указанием опции quick-stat. Данный флаг позволяет получать ссылку на diff снимков&lt;br /&gt;
* Добавлены предупреждения если в командах &amp;lt;code&amp;gt;import&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sarif2 import&amp;lt;/code&amp;gt; используются флаги, которые используются флагом &amp;lt;code&amp;gt;upload&amp;lt;/code&amp;gt;, но флаг &amp;lt;code&amp;gt;upload&amp;lt;/code&amp;gt; не установлен &lt;br /&gt;
* Добавлена интеграциия с внешними системами посредством механизма [[Help:Installation#Механизм интеграции с внешними системами посредством Webhook-ов|Webhook-ов]]&lt;br /&gt;
* Добавлена [[Help:Installation#Настройка защиты от перебора паролей пользователей|Защита от перебора пароля пользователя]]&lt;br /&gt;
* Добавлена возможность задать [[Help:Installation#Настройка парольной политики внутреннего механизма аутентификации Svacer|Парольную политику безопасности]] для пользователей, использующих встроенный мханизм аутентификации Svacer &lt;br /&gt;
* Добавлена возможность задать [[Help:Installation#Задание вкладки по умолчанию на странице входа в GUI Svacer (а также отключение внутренного механизма аутентификации Svacer)|вкладку по умолчанию]] для страницы входа в систему &lt;br /&gt;
* Исправлена ошибка, приводящая к разрастанию базы данных&lt;br /&gt;
* Исправлена ошибка, связанная с невозможностью в ряде случаев использовать механизм подписок&lt;br /&gt;
* Форма разметки с помощью [[Help:XSvacer:AIAssistant:Deploy|ИИ-ассистента]] реализована в основном интерфейсе Svacer&lt;br /&gt;
* [[Help:XSvacer:Webide#Запуск функциональности при использовании docker compose|Упрощён запуск функциональности Webide]] при запуске сервера через [https://svacer.ispras.ru/extra/docker-compose.yml docker-compose]&lt;br /&gt;
&lt;br /&gt;
=== Release 11-2-0 ===&lt;br /&gt;
22.07.2025&lt;br /&gt;
&lt;br /&gt;
* Исправлены зависания сервера&lt;br /&gt;
* Добавлено автоматическое удаление архивов и прочих временных файлов при импорте .svace-dir и SARIF-файлов через REST API&lt;br /&gt;
&lt;br /&gt;
=== Release 11-1-0 ===&lt;br /&gt;
08.07.2025&lt;br /&gt;
&lt;br /&gt;
* Команды  &amp;lt;code&amp;gt;--project-group, --if-no-group, --autoclean, --autoclean-svace&amp;lt;/code&amp;gt; можно использовать в REST API для импорта svace-dir&lt;br /&gt;
* При использовании REST API для импорта svace-dir сервер будет автоматически удалять директории &amp;lt;code&amp;gt;.svace-dir&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;.svacer&amp;lt;/code&amp;gt; если не указаны явные опции &amp;lt;code&amp;gt;--autoclean=false, --autoclean-svace=false&amp;lt;/code&amp;gt;&lt;br /&gt;
* Добавлена опция запуска сервера &amp;lt;code&amp;gt;--classic-inv-mode&amp;lt;/code&amp;gt; для включения режима совместимости по генерации инвариантов с версией &amp;lt;= 8.x.x&lt;br /&gt;
* Исправлены ошибки в работе &amp;lt;code&amp;gt;--quality-gate&amp;lt;/code&amp;gt;, добавлена возможность учета статусов разметки. Добавлена возможность [[Help:Import from Svace#Флаг --baseline|указания baseline]] для сравнений при использовании опции &amp;lt;code&amp;gt;--quality-gate&amp;lt;/code&amp;gt;&lt;br /&gt;
* Исправлены ошибки при подключении к PostgreSQL в SSL-режиме&lt;br /&gt;
* Исправлен ряд ошибок при работе с LDAP&lt;br /&gt;
* Команда &amp;lt;code&amp;gt;quickdiff&amp;lt;/code&amp;gt; в CLI теперь выдает информацию также о Same и Matched предупреждениях&lt;br /&gt;
&lt;br /&gt;
=== Release 11-0-0 ===&lt;br /&gt;
19.05.2025&lt;br /&gt;
&lt;br /&gt;
* Убраны излишние сообщения в логе сервера о login/logout операциях. Они будут выводиться только при запуске сервера с опцией &amp;lt;code&amp;gt;--debug&amp;lt;/code&amp;gt;&lt;br /&gt;
* Команды CLI &amp;lt;code&amp;gt;svacer sarif *&amp;lt;/code&amp;gt; были убраны, для [[Help:Sarif|импорта и экспорта]] следует использовать &amp;lt;code&amp;gt;svacer sarif2 *&amp;lt;/code&amp;gt;&lt;br /&gt;
* Экспорт SARIF теперь включает все комментарии как отдельные объекты в &amp;lt;code&amp;gt;Properties&amp;lt;/code&amp;gt;&lt;br /&gt;
* При экспорте в SARIF теперь экспортируются поля &amp;lt;code&amp;gt;Labels, Orig function&amp;lt;/code&amp;gt;&lt;br /&gt;
* Импорт SARIF теперь корректным образом учитывает relatedLocations и формирует трассу&lt;br /&gt;
* Импорт SARIF теперь автоматически импортирует исходники, если они включены в сам SARIF файл&lt;br /&gt;
* Добавлена возможность указания [[Help:Sarif#Мэппинг severity|мэппинга severity]] детекторов при импорте из SARIF&lt;br /&gt;
* Добавлен механизм указания правил резолвинга путей при импортировании исходного кода вместе с SARIF файлом&lt;br /&gt;
* Экспорт исходников из снимка будет доступен только при наличии исходников на сервере&lt;br /&gt;
* Добавлены флаги &amp;lt;code&amp;gt;--autoclean&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;--autoclean-svace&amp;lt;/code&amp;gt; в команду &amp;lt;code&amp;gt;svacer import&amp;lt;/code&amp;gt; для автоматического удаления &amp;lt;code&amp;gt;.svace-dir / .svacer-dir&amp;lt;/code&amp;gt; после успешного импорта и загрузки данных на сервер&lt;br /&gt;
* Улучшена поддержка [[OIDC]]&lt;br /&gt;
* Улучшена поддержка [[LDAP configuration|LDAP]]&lt;br /&gt;
* Добавлена интеграция с хранилищем секретов [[Infisical]]&lt;br /&gt;
* Добавлена [[Notifications|служба нотификаций]] пользователей через почтовые сообщения и мессенджер telegram&lt;br /&gt;
* Добавлен механизм аутентификации и [[Help:UI manual#Управление токенами доступа|управления]] персональными токенами доступа&lt;br /&gt;
* Добавлен механизм упоминания пользователей через специальную конструкцию @login в комментариях к разметке&lt;br /&gt;
* В разделе Статистика добавлен дашборд с [[Release notes 11-0-0#Изменения в разделе Статистика|Общей статистикой]], содержащей метрики по последним импортированным снимкам в ветках проектов&lt;br /&gt;
* В статистике по активности пользователей добавлена возможность просмотра панели с актуальной информацией о маркере и опция показа только действий с актуальной разметкой&lt;br /&gt;
* Большинство CLI команд, работающих с сервером, теперь делают явный logout после завершения&lt;br /&gt;
* Svacer при импорте результатов Svace автоматически импортирует файлы &amp;lt;code&amp;gt;*.warn, *.err&amp;lt;/code&amp;gt; с предупреждениями от самого анализатора Svace. Автоматический импорт не будет происходить при размере этих файлов более 30Мб (большой размер может свидетельствовать о проблемах в ходе анализа)&lt;br /&gt;
* Переменная окружения &amp;lt;code&amp;gt;SVACER_CACHE_DIR&amp;lt;/code&amp;gt; теперь учитывается во всех местах (ранее в ряде случаев мог неявно использоваться &amp;lt;code&amp;gt;$HOME/.cache&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Добавлена возможность [[Help:CLI/cleanup|автоматического удаления снимков]]&lt;br /&gt;
&lt;br /&gt;
=== Release 10-0-1 ===&lt;br /&gt;
17.02.2025&lt;br /&gt;
&lt;br /&gt;
* Исправлена ошибка с временной таблицей при обработке планов автомиграции разметки при импорте результатов (ERROR: relation &amp;quot;loaded_review&amp;quot; already exists)&lt;br /&gt;
&lt;br /&gt;
=== Release 10-0-0 ===&lt;br /&gt;
16.01.2025&lt;br /&gt;
&lt;br /&gt;
* Множество изменений в UI, смотрите [[Release notes 10-0-0]]&lt;br /&gt;
* Сделали [[Help:Installation#rpm|dnf/yum репозиторий]] для RPM-пакетов Svacer&lt;br /&gt;
* Реализована возможность [[Markup2|экспорта, импорта и копирования разметки посредством Public REST API и CLI]]&lt;br /&gt;
* Реализован дополнительный экспериментальный механизм [[Help:UI manual#Настройка интерфейса|генерации PDF на основе HTML]]. Генерация PDF переведена на асинхронный режим с показом нотификации пользователю&lt;br /&gt;
* Добавлена возможность очистки всей разметки и/или комментариев на ветке проекта&lt;br /&gt;
* Улучшения функциональности просмотра маркеров в встроенном IDE Theia&lt;br /&gt;
* Добавлена функциональность по [[Help:UI manual#Глобальный поиск|глобальному поиску]] маркеров, комментариев и снимков по различным атрибутам&lt;br /&gt;
* Добавлена возможность [[Help:UI manual#Просмотр статистики|получения статистики]] по маркерам и активностям пользователей при разметке&lt;br /&gt;
* В API fullmarkers добавлен параметр &amp;lt;code&amp;gt;labels: true/false&amp;lt;/code&amp;gt; для выгрузки меток маркера&lt;br /&gt;
* Реализован Public API для получения/добавления/удаления меток маркеров&lt;br /&gt;
* Настройки LDAP и прочие настройки аутентификации добавлены в единый конфигурационный файл&lt;br /&gt;
* Добавлена возможность удаления кода из снимка при частичном импорте в Svacer&lt;br /&gt;
* Добавлена опция minVersion, maxVersion для TLS при запуске сервера Svacer&lt;br /&gt;
* Добавлена поддержка групп проектов при импорте снимков в CLI&lt;br /&gt;
* При импорте снимков реализована поддержка автоматического определения пути префикса для переноса разметки&lt;br /&gt;
* Исправлен ряд ошибок в импорте и генерации [[Help:Sarif|SARIF]]&lt;br /&gt;
* Исправлены ошибки в копировании разметки между ветками, клонировании проектов и веток&lt;br /&gt;
* Добавлена возможность отключения бэкграунд задач по очистке мусора&lt;br /&gt;
* Добавлено экспериментальное CLI API для просмотра асинхронных задач на генерацию PDF&lt;br /&gt;
* Добавлена возможность визуализации производительности сервера на основе [https://github.com/arl/statsviz statsviz]&lt;br /&gt;
* Добавлена поддержка относительных путей в svres файле&lt;br /&gt;
* Добавлена возможность ожидания завершения операций по очистки мусора при выполнении операций по импорту результатов анализа&lt;br /&gt;
* Добавлена поддержка CWE таксономий при экспорте [[Help:Sarif|SARIF]]&lt;br /&gt;
* Добавлена переменная окружения SVACER_TOKEN_LIFETIME для управления временем жизни токена аутентификации&lt;br /&gt;
* Добавлена переменная окружения SVACER_RESET_ADMIN_PASSWORD для явного указания желаемого пароля при операции по сбросу пароля администратора&lt;br /&gt;
* Добавлен [[Notifications|механизм нотификаций пользователей]] о внутренних событиях Svacer (экспериментальный функционал)&lt;br /&gt;
&lt;br /&gt;
=== Release 9-0-2 ===&lt;br /&gt;
22.07.2024&lt;br /&gt;
&lt;br /&gt;
* Еще некоторые исправления, связанные с миграцией данных&lt;br /&gt;
* Исправлена проблема с навигацией по Go to Definition&lt;br /&gt;
&lt;br /&gt;
=== Release 9-0-1 ===&lt;br /&gt;
15.07.2024&lt;br /&gt;
&lt;br /&gt;
* Исправлены ошибки в клонировании проектов, приводящие к размножению записей в некоторых внутренних таблицах&lt;br /&gt;
* Различные исправления, связанные с миграцией данных&lt;br /&gt;
* Исправлена работа ряда CLI команд с включенным TLS на сервере&lt;br /&gt;
* Исправлен ряд ошибок в генерации PDF&lt;br /&gt;
&lt;br /&gt;
=== Release 9-0-0 ===&lt;br /&gt;
04.06.2024&lt;br /&gt;
&lt;br /&gt;
* Множество изменений в UI, смотрите [[Release notes 9-0-0]]&lt;br /&gt;
* Svacer разделен на два исполняемых файла: &amp;lt;code&amp;gt;svacer-server&amp;lt;/code&amp;gt; — сервер и &amp;lt;code&amp;gt;svacer&amp;lt;/code&amp;gt; — клиент&lt;br /&gt;
* {{Note}}Object store заменен на другую реализацию. Конвертация данных запускается автоматически при апгрейде и требует примерно 2х-2.2х дискового пространства, после конвертации старый object store будет удален. Время конвертации зависит от объема данных и скорости диска&lt;br /&gt;
* {{Note}}Изменен [[Help:Match|алгоритм сопоставления предупреждений]]. При старте сервера будет произведена регенерация всех инвариантов во всех ветках. Это может занять продолжительное время (зависит от мощности сервера и объемов данных)&lt;br /&gt;
* Добавлена возможность [[Help:Match#Ручное сопоставление предупреждений (экспериментальная возможность)|ручного сопоставления предупреждений]] для переноса разметки&lt;br /&gt;
* Добавлена экспериментальная поддержка [[OIDC|OpenID]] протокола для аутентификации&lt;br /&gt;
* Добавлена экспериментальная возможность [[Help:CLI#Слияние снимков из CLI (экспериментальная опция)|слияния снимков через CLI]]&lt;br /&gt;
* Исправлены баги в [[Help:Sarif|импорте Sarif]], добавлена поддержка импорта с относительными путями к файлам (флаг &amp;lt;code&amp;gt;--base-dir&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Лог сервера работает в режиме append, прежние данные не затираются&lt;br /&gt;
* Добавлена возможность передачи токена аутентификации в клиент Svacer через переменную окружения &amp;lt;code&amp;gt;SVACER_AUTH_TOKEN=token&amp;lt;/code&amp;gt;&lt;br /&gt;
* Добавлена возможность передачи логина и пароля в клиент Svacer через переменную окружения &amp;lt;code&amp;gt;SVACER_AUTH_CREDS=login:password&amp;lt;/code&amp;gt;&lt;br /&gt;
* Добавлен public REST endpoint для импорта &amp;lt;code&amp;gt;.svace-dir&amp;lt;/code&amp;gt; на стороне сервера&lt;br /&gt;
* Добавлена возможность импорта &amp;lt;code&amp;gt;.svace-dir&amp;lt;/code&amp;gt; из веб-интерфейса&lt;br /&gt;
* Добавлены [[Metrics|метрики]] для Prometheus, доступны при запуске сервера с переменной окружения &amp;lt;code&amp;gt;SVACER_TRACE_OPTIONS=prom_metrics_on&amp;lt;/code&amp;gt; на &amp;lt;code&amp;gt;/api/metrics&amp;lt;/code&amp;gt;&lt;br /&gt;
* Добавлена очистка БД от мусора с возможностью настройки периодичности данной операции через переменную окружения &amp;lt;code&amp;gt;SVACER_GC_PERIOD=val&amp;lt;/code&amp;gt; где val — duration в формате &amp;lt;code&amp;gt;hhmmss&amp;lt;/code&amp;gt; или [https://en.wikipedia.org/wiki/Cron Cron]&lt;br /&gt;
* Добавлена возможность клонирования проектов&lt;br /&gt;
* Добавлен импорт &amp;lt;code&amp;gt;*warn, *.err&amp;lt;/code&amp;gt;  файлов из &amp;lt;code&amp;gt;.svace-dir&amp;lt;/code&amp;gt;, которые содержат диагностические сообщения от Svace&lt;br /&gt;
* Добавлена возможность [[Help:CLI#Ограничение числа запросов|ограничения числа запросов]] на сервер с указанием параметров в переменной окружения &amp;lt;code&amp;gt;SVACER_SERVER_THROTTLE_PARAMS&amp;lt;/code&amp;gt;&lt;br /&gt;
* Добавлен шаблон для импорта разметки из кода на Go: &amp;lt;code&amp;gt;DEFAULT_GO&amp;lt;/code&amp;gt;&lt;br /&gt;
* Добавлена возможность [[Help:CLI#Аутентификация из файла|аутентификации из файла]]&lt;br /&gt;
* Исправлены проблемы безопасности&lt;br /&gt;
* Добавлена возможность просмотра исходного кода снимка с предупреждениями анализатора во внешней IDE собранной на базе [https://theia-ide.org/ Theia IDE]&lt;br /&gt;
* К команде automigrate add в CLI добавлен флаг &amp;lt;code&amp;gt;skip-exist&amp;lt;/code&amp;gt;, чтобы при добавлении паттерна, который уже существует, не выдавало ошибки &lt;br /&gt;
* К команде upload (import с флагом upload) с указанием флага &amp;lt;code&amp;gt;quality-gate&amp;lt;/code&amp;gt; теперь можно добавить флаг &amp;lt;code&amp;gt;quality-gate-verbose&amp;lt;/code&amp;gt;. Если его указать, то также будет выведен результат успешных проверок quality-gate&lt;br /&gt;
* Улучшения в поддержке протокола LDAP&lt;br /&gt;
&lt;br /&gt;
=== Release 8-0-1 ===&lt;br /&gt;
22.01.2024&lt;br /&gt;
&lt;br /&gt;
* Исправлена работа в изолированной от сети среде. Загрузка Web UI больше не требует доступа к публичным CDN&lt;br /&gt;
* Добавлена поддержка функций при указании пользовательского фильтра&lt;br /&gt;
* Добавлено API для управления пользовательскими фильтрами. Детали и пример использования можно найти здесь: https://gitlab.ispras.ru/svacer-public/api-go-examples/-/tree/master/api-ui-settings&lt;br /&gt;
* Исправлено отображение Checker Severity при экспорте в SARIF. Теперь Critical -&amp;gt; error; Major, Normal -&amp;gt; warning; Minor -&amp;gt; note; any other -&amp;gt; warning&lt;br /&gt;
&lt;br /&gt;
=== Release 8-0-0 ===&lt;br /&gt;
21.11.2023&lt;br /&gt;
&lt;br /&gt;
* Множество изменений в UI. Смотрите обзор в [[Release notes 8-0-0]]&lt;br /&gt;
* Добавлен новый импорт и экспорт из SARIF в command line с поддержкой исходного кода в SARIF файлах и импортом описания детекторов из SARIF&lt;br /&gt;
* Добавлены группы проектов&lt;br /&gt;
* Переделана модель ролей и доступов. Добавлен CLI для управления ролями и доступами&lt;br /&gt;
* Добавлена возможность настройки автопереноса разметки между ветками, в том числе в разных проектах&lt;br /&gt;
* Импорт/экспорт снимков включает информацию о детекторах&lt;br /&gt;
* Исправлена работа интерфейса с Undefined детекторами (т. е. детекторами, информация о которых отсутствует в Svacer)&lt;br /&gt;
* Добавлено экспериментальное API по управлению детекторами и конфигурациями детекторов&lt;br /&gt;
* Добавлена очистка исходного кода от Svacer-specific комментариев перед экспортом разметки в код&lt;br /&gt;
* Добавлена возможность включения режима обязательного комментария при разметке кода. Комментарий будет сгруппирован с операцией разметки и будет иметь ссылку на нее&lt;br /&gt;
* Утилита миграции со старого svace-сервера больше не поддерживается. При необходимости миграции используйте утилиту из прошлых релизов Svacer&lt;br /&gt;
* Добавлена Swagger документация на API&lt;br /&gt;
* Добавлено хранение истории изменений комментариев&lt;br /&gt;
* Опция &amp;lt;code&amp;gt;--pathPrefix&amp;lt;/code&amp;gt; поддерживает файлы в JSON формате вида: &amp;lt;code&amp;gt;[{ &amp;quot;prefix&amp;quot;: &amp;quot;/some/path&amp;quot;, &amp;quot;replace&amp;quot;: &amp;quot;/test&amp;quot; }, ...]&amp;lt;/code&amp;gt;&lt;br /&gt;
* При использовании операции по обновлению &amp;lt;code&amp;gt;pathPrefix&amp;lt;/code&amp;gt; на сервере, данные о прежнем &amp;lt;code&amp;gt;pathPrefix&amp;lt;/code&amp;gt; запоминаются в мета-информации о снимке&lt;br /&gt;
* Добавлена возможность переименования снимков в UI&lt;br /&gt;
* Sensitive информация (детали подключения к БД с данными аутентификации) убрана из UI и API&lt;br /&gt;
* ОС в docker-образе Svacer обновлена с Ubuntu 18 до Ubuntu 22&lt;br /&gt;
* Улучшена логика автоопределения портов и протоколов при соединении с сервером из Svacer CLI&lt;br /&gt;
&lt;br /&gt;
=== Release 7-0-1 ===&lt;br /&gt;
23.05.2023&lt;br /&gt;
&lt;br /&gt;
* Исправлена проблема с фильтрацией предупреждений для C# проектов&lt;br /&gt;
&lt;br /&gt;
=== Release 7-0-0 ===&lt;br /&gt;
16.05.2023&lt;br /&gt;
&lt;br /&gt;
* Убрана зависимость от PostgreSQL из .deb и .rpm пакетов, чтобы проще было ставить Svacer только как клиент&lt;br /&gt;
* Сделан пакет для Windows (.msi) и документация по установке и запуску на Windows&lt;br /&gt;
* Теперь, если при svacer import и svacer sarif не указан путь к проекту, им считается текущая директория&lt;br /&gt;
* Информация о разметке и блокировках теперь обновляется автоматически при изменении в другом браузере (табе) или другим пользователем&lt;br /&gt;
* UI для пользовательских фильтров улучшен и перенесен в правую верхнюю часть экрана&lt;br /&gt;
* UI для выбора проекта, ветки и снимка теперь находится на одном уровне&lt;br /&gt;
* Улучшен UI для режима сравнения снимков&lt;br /&gt;
* Добавлена возможность работать одновременно с несколькими открытыми файлами в режиме Code, это поведение можно изменить в настройках профиля пользователя&lt;br /&gt;
* В левой навигационной панели детекторы теперь по умолчанию группируются по серьезности, это поведение можно изменить в настройках профиля пользователя&lt;br /&gt;
* Профиль текущего пользователя теперь можно смотреть/редактировать только через меню в правом верхнем углу&lt;br /&gt;
* Добавлена возможность копирования в системном логе и журнале&lt;br /&gt;
* Для пользователя теперь запоминается последний контекст (проект/ветка/снимок), с которым он работал, он автоматически открывается при старте новой сессии&lt;br /&gt;
* Групповая разметка теперь делается единой транзакцией, в случае ошибок или отмены все изменения откатываются&lt;br /&gt;
* Добавлено предупреждение при использовании некорректных путей при использовании REST API с префиксом /api&lt;br /&gt;
* Поддержка указания паролей из файла или pipe-а при использование Svacer CLI&lt;br /&gt;
* Добавлена поддержка multi-tab code view для режима просмотра кода объекта сборки&lt;br /&gt;
* Добавлена поддержка сохранения информации об удаленных детекторах при загрузке информации о детекторах из новой версии Svace&lt;br /&gt;
* Исправлен импорт результатов анализа, если сборка проводилась с опцией --disable-dxr&lt;br /&gt;
* Исправлены проблемы при импорте и прикреплении нескольких файлов к снимку&lt;br /&gt;
* Исправлены ошибки с входом в систему пользователей LDAP (специальные символы в пароле, вход по атрибуту mail)&lt;br /&gt;
* Добавлена возможность использования резервных серверов LDAP&lt;br /&gt;
* Добавлена возможность автоматического назначения пользователям LDAP роли Svacer, в зависимости от принадлежности пользователя к LDAP группе&lt;br /&gt;
* Добавлены новые public запросы на получение маркеров/снимков/проектов с учетом заданных параметров фильтрации&lt;br /&gt;
* Добавлена поддержка TLS при работе сервера по протоколам HTTP и gRPC&lt;br /&gt;
* Добавлена возможность загрузки статистики по общему количеству предупреждений и по количеству размеченных предупреждений для проектов и веток через REST API&lt;br /&gt;
* Добавлена вкладка выбора проектов в расширении VSCode&lt;br /&gt;
* Убрана возможность использовать всплывающее окно в VScode для добавления/редактирования/удаления комментариев, установки ревью-статусов, локов и т.д.&lt;br /&gt;
&lt;br /&gt;
=== Release 6-0-3 ===&lt;br /&gt;
25.01.2023&lt;br /&gt;
&lt;br /&gt;
* RPM-пакет теперь при сборке упаковывается в gzip вместо zstd для обратной совместимости со старыми дистрибутивами&lt;br /&gt;
* Если short url некорректен, то Svacer теперь будет возвращать корректный http error NotFound&lt;br /&gt;
* Если путь к лог файлу явно не указан, то svacer.log будет создаваться во временной директории. Это решает проблемы при запуске Svacer из директорий с запретом на запись. Путь к лог файлу будет печататься в stdout&lt;br /&gt;
* Лог файлы не будут создаваться, когда используется опция --help&lt;br /&gt;
* Исправлены проблемы при миграции схемы данных, когда в PostgreSQL используется SSL подключение&lt;br /&gt;
* Добавлены описания детекторов из последнего релиза Svace, которые были пропущены в релизе 6-0-2&lt;br /&gt;
* Исправлена работа Svacer за proxy-сервером, где выставляется Header &amp;quot;X-Content-Type-Options nosniff&amp;quot;&lt;br /&gt;
* Добавлены кнопки для скачивания системного лога и журнала из web-интерфейса&lt;br /&gt;
* Поправлен ряд ошибок валидации схемы при экспорте в SARIF&lt;br /&gt;
* Исправлено поведение при наличии нескольких хуков в конфигурационном файле&lt;br /&gt;
* В информацию о маркере для хуков добавлены checker severity и reliability&lt;br /&gt;
* Исправлен случайный порядок URL для маркеров при использовании public API для получения URL-ов&lt;br /&gt;
* На главную страницу добавлена кнопка &amp;quot;Помощь&amp;quot;, которая открывает документацию&lt;br /&gt;
* При использовании команд навигации в режиме &amp;quot;Browse code&amp;quot; текущий файл теперь корректно подсвечивается в дереве файлов&lt;br /&gt;
* В диалоге групповой разметки убран индикатор изменений в виде кружочка, наличие изменений можно определить по активности кнопок &amp;quot;Apply&amp;quot; и &amp;quot;Reset&amp;quot;&lt;br /&gt;
* Кнопка обновления в верхнем меню теперь корректно обновляет информацию на странице Settings/Project&lt;br /&gt;
* Различные небольшие исправления в пользовательском интерфейсе&lt;br /&gt;
&lt;br /&gt;
=== Release 6-0-2 ===&lt;br /&gt;
16.12.2022&lt;br /&gt;
&lt;br /&gt;
* Исправлена проблема в UI с сохраненными пользовательскими фильтрами&lt;br /&gt;
&lt;br /&gt;
=== Release 6-0-1 === &lt;br /&gt;
13.12.2022&lt;br /&gt;
&lt;br /&gt;
* Добавлено описание ряда детекторов, которые есть в последнем релизе Svace 3.3.2 но были пропущены в Svacer&lt;br /&gt;
* Исправлено вылетание в Login Screen при удалении нотификации из панели нотификаций&lt;br /&gt;
* Исправлено появление белого экрана при клике на детектор, информация о котором отсутствует&lt;br /&gt;
* Ряд различных небольших исправлений в UI&lt;br /&gt;
* Промежуточное хранилище будет очищаться по умолчанию при использовании команды import&lt;br /&gt;
&lt;br /&gt;
=== Release 6-0-0 === &lt;br /&gt;
30.11.2022&lt;br /&gt;
&lt;br /&gt;
* Добавлено копирование комментариев при копировании разметки&lt;br /&gt;
* Комментарии добавлены к отчету в формате csv&lt;br /&gt;
* Добавлена возможность вводить пароль с клавиатуры для консольных команд&lt;br /&gt;
* Добавлена возможность импортировать разметку из объекта сборки (из ранее загруженных данных)&lt;br /&gt;
* Добавлена возможность импортировать разметку сразу после загрузки на сервер (опция для команды svacer upload)&lt;br /&gt;
* Добавлена возможность загружать исходный код не из папки .svace-dir&lt;br /&gt;
* Добавлена возможность бэкапа и восстановление объектного хранилища в сервер PostgresSQL&lt;br /&gt;
* Добавлена возможность создания отчета по проекту в формате PDF через интерфейс командной строки и посредством REST API&lt;br /&gt;
* Добавлена возможность подавления предупреждений через inline комментарии в коде&lt;br /&gt;
* Добавлена возможность подавления предупреждений по идентификатору предупреждения через command line и REST API&lt;br /&gt;
* Добавлена возможность ассоциировать организацию с пользователем и реестр организаций&lt;br /&gt;
* Добавлена фильтрация списка комментариев по пользователю в правой панели веб-интерфейса&lt;br /&gt;
* Добавлен поиск пользователей по его атрибутам в панели управления пользователями&lt;br /&gt;
* Добавлена возможность заполнения данных профиля LDAP пользователя данными, полученными от LDAP сервера&lt;br /&gt;
* Добавлена возможность прикреплять файлы к снимкам при импорте результатов (данные файлы составляют часть экспортируемых данных при экспорте снимков)&lt;br /&gt;
* Добавлена возможность ассоциировать пользовательские атрибуты типа &amp;quot;строка&amp;quot; или массив строк со снимком при импорте данных (данные атрибуты составляют часть экспортируемых данных при экспорте снимков)&lt;br /&gt;
* Добавлены command line операции по получению прикрепленных файлов и пользовательских атрибутов со снимков&lt;br /&gt;
* Добавлена возможность группового добавления комментариев&lt;br /&gt;
* Добавлена возможность указания сетевого интерфейса для работы WEB и GRPC серверов&lt;br /&gt;
* Добавлен вывод краткой статистики по загруженному снимку при команде upload. Поддерживается текстовой и JSON форматы вывода&lt;br /&gt;
* Существенно расширены возможности по интеграции Visual Studio Code с сервером Svacer&lt;br /&gt;
* Добавлен флаг --git в команду import. При наличии такого флага, ищется ближайший git репозиторий содержащий .svace-dir и при наличии такого - используется путь к гит репозиторию для замены путей на префикс .build.&lt;br /&gt;
* Portable PostgreSQL больше не входит в поставку. Вместо него поставляется docker-compose.yml файл для запуска PostgreSQL в докер-контейнере&lt;br /&gt;
* Добавлено больше данных и информации об ошибках в вывод команды svacer import&lt;br /&gt;
* Изменение Public API: добавлена точка входа /api/public/login&lt;br /&gt;
* Операции по импорту и экспорту снимков доступны теперь обычным пользователям (не администраторам) при использовании command line интерфейса&lt;br /&gt;
* Операция по экспорту снимков доступна обычному пользователю из веб-интерфейса (импорт все еще требует роль администратора для веб-интерфейса)&lt;br /&gt;
* Операции по экспорту снимков переведены на асинхронный режим. Нотификация о готовности будет показана пользователю и доступна в панели нотификаций&lt;br /&gt;
* Обновлено описание детекторов в соответствии с релизом Svace 3.3.2&lt;br /&gt;
* Исправлена ошибка обработки корневых сертификатов при подключении к LDAP серверу по протоколу ldaps&lt;br /&gt;
* Исправлено ошибочное создание дубликатов локальных учетных записей LDAP пользователей (case sensitive login)&lt;br /&gt;
* Различные исправления в пользовательском интерфейсе с целью оптимизации производительности&lt;br /&gt;
* Добавлены пропущенные проверки ролей при работе с веб-интерфейсом&lt;br /&gt;
* Svacer больше не создает временные файлы в директории с исполняемым файлом&lt;br /&gt;
* Устаранены задержки при удалении веток и проектов&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=3305</id>
		<title>Help:XSvacer:Webide</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=3305"/>
		<updated>2025-11-14T14:38:32Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: start IDE from Svacer in docker container&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note|text=Данная функциональность входит в набор расширений XSvacer}}&lt;br /&gt;
&lt;br /&gt;
= Поддержка среды разработки Theia IDE =&lt;br /&gt;
&lt;br /&gt;
Данная функциональность даёт возможность просматривать исходный код снимка с предупреждениями анализатора во внешней IDE.&lt;br /&gt;
&lt;br /&gt;
По умолчанию запускается IDE, [[#Информация_о_docker-образе_Theia_IDE|собранная]] на основе [https://theia-ide.org/ Theia IDE].&lt;br /&gt;
&lt;br /&gt;
== Активация функциональности ==&lt;br /&gt;
&lt;br /&gt;
Для активации функциональности необходимо указать флаг &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt; при запуске Svacer.&lt;br /&gt;
&lt;br /&gt;
Функциональность запуска IDE основана на управлении docker-контейнерами с IDE. Поэтому при запуске функциональности Webide также будет запущена функциональность [[Help:XSvacer:Docker|управления docker-контейнерами]].&lt;br /&gt;
&lt;br /&gt;
При активации функциональности:&lt;br /&gt;
* становится доступным REST API управления IDE для просмотра исходного кода снимков проектов&lt;br /&gt;
* в пользовательском интерфейсе на вкладке &amp;quot;Информация о снимке&amp;quot; появляется кнопка &amp;quot;Открыть в IDE&amp;quot;&lt;br /&gt;
* устанавливается подключение к хосту docker, на котором будут запускаться контейнеры с экземплярами IDE&lt;br /&gt;
&lt;br /&gt;
=== Запуск функциональности при использовании docker compose ===&lt;br /&gt;
&lt;br /&gt;
В случае запуска Svacer [[Help:Installation#docker_compose|с помощью docker compose]], функциональность Webide будет активирована по умолчанию. При этом в docker-контейнер содержащий Svacer по умолчанию будет проброшен (примонтирован) unix-сокет файл &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;/var/run/docker.sock&amp;lt;/code&amp;gt;, доступ к которому будет использоваться для управления контейнерами c IDE. При запуске контейнеры с IDE будут подключаться к docker-сети &amp;lt;code&amp;gt;svacer&amp;lt;/code&amp;gt;, которая будет создана при вызове &amp;lt;code&amp;gt;docker compose up&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Запуск функциональности в Svacer с настройками по умолчанию ===&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы начать пользоваться функциональностью запуска IDE без изменения конфигурационных параметров Svacer, нужно выполнить следующие действия:&lt;br /&gt;
# Настройка доступа к docker-хосту:&lt;br /&gt;
## Запустить docker со настройками по умолчанию (dockerd должен слушать unix-сокет &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt; — https://docs.docker.com/reference/cli/dockerd/#daemon-socket-option) на том же хосте, что и Svacer;&lt;br /&gt;
## Проверить, что у пользователя под которым будет запускаться Svacer есть доступ к unix-сокету docker-хоста &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt; — https://docs.docker.com/engine/install/linux-postinstall&lt;br /&gt;
# Настроить права доступа у пользователей, которые смогут запускать IDE: требуются разрешения на проект/ветку &amp;quot;Просмотр маркеров&amp;quot; и &amp;quot;Экспорт разметки&amp;quot;&lt;br /&gt;
# Перезапустить Svacer с флагом &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt;&lt;br /&gt;
# ''Опционально.'' Для ускорения первого запуска IDE:&lt;br /&gt;
## Скачать архив с docker-образом для соответствующей версии Svacer: [https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.11.0.0.1.tar.gz 11+], [https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.10.0.0.tar.gz 10+], [https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.tar 9+]&lt;br /&gt;
## Загрузить docker-образ из архива на docker-хост: &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker image load -i /path/to/theia-blueprint...&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого у пользователей с указанными правами должна появиться кнопка &amp;quot;Открыть в IDE&amp;quot; на панели с информацией о снимке.&lt;br /&gt;
&lt;br /&gt;
{{Note}} IDE с исходным кодом снимков будут запускаться в новых вкладках браузера. Обычно все браузеры блокируют автоматическое открытие вкладки и показывают соответствующее предупреждение.&lt;br /&gt;
&lt;br /&gt;
Например, в Firefox:&lt;br /&gt;
&lt;br /&gt;
[[File:Firefox popup notification ru.png]]&lt;br /&gt;
&lt;br /&gt;
В таком случае нужно дать разрешение на открытие вкладки с IDE:&lt;br /&gt;
&lt;br /&gt;
[[File:Firefox popup notification expanded ru.png|x150px]]&lt;br /&gt;
&lt;br /&gt;
При необходимости изменения настроек подключения к docker-хосту:&lt;br /&gt;
# Скопировать [[Help:XSvacer:Docker#Конфигурация_по_умолчанию|конфигурацию docker по умолчанию]] в раздел &amp;lt;code&amp;gt;xsvacer&amp;lt;/code&amp;gt; конфигурационного файла svacer.cfg&lt;br /&gt;
# Внести требуемые изменения в конфигурацию раздела &amp;lt;code&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При необходимости изменения настроек запуска IDE:&lt;br /&gt;
# Скопировать [[#Конфигурация_по_умолчанию|конфигурацию webide по умолчанию]] в раздел &amp;lt;code&amp;gt;xsvacer&amp;lt;/code&amp;gt; конфигурационного файла svacer.cfg&lt;br /&gt;
# Внести требуемые изменения в конфигурацию раздела &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Принцип работы ==&lt;br /&gt;
&lt;br /&gt;
Функциональность запуска IDE для просмотра исходного кода снимков становится доступной пользователю, если соблюдаются условия:&lt;br /&gt;
# Функциональность активна: при запуске Svacer указан флаг &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt;;&lt;br /&gt;
# В [[Help:XSvacer:Webide#Конфигурация|конфигурации]] функциональности &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia&amp;lt;/code&amp;gt; есть хотя бы одна активная (&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;disabled: false&amp;lt;/code&amp;gt;) конфигурация IDE&lt;br /&gt;
# У пользователя Svacer имеются разрешения &amp;quot;Просмотр маркеров&amp;quot; и &amp;quot;Экспорт разметки&amp;quot; на проект, в котором находится снимок, для которого нужно запустить IDE&lt;br /&gt;
&lt;br /&gt;
В противном случае в пользовательском интерфейсе будет отсутствовать кнопка &amp;quot;Открыть в IDE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Запуск IDE ===&lt;br /&gt;
&lt;br /&gt;
Запуск производится путём вызова http-метода &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;POST /api/snapshots/{snapshot_id}/ide&amp;lt;/code&amp;gt; с телом запроса &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;{&amp;quot;ideId&amp;quot;: &amp;quot;идентификатор IDE&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Последовательность действий, выполняемых при запуске IDE:&lt;br /&gt;
&lt;br /&gt;
# Производится проверка: была ли уже запущена указанная IDE для указанного снимка:&lt;br /&gt;
#* Если запущена: производится проверка доступности IDE (отвечает на запросы):&lt;br /&gt;
#** Если IDE доступна: действие не требуется. Процесс запуска завершается&lt;br /&gt;
#** Если IDE недоступна: продолжается процесс запуска. IDE будет перезапущена&lt;br /&gt;
# Создаётся &amp;quot;корневая папка снимка&amp;quot;, предназначенная для хранения исходного кода снимка и предупреждений анализатора с разметкой в виде sarif-файла. Название папки соответствует id снимка. Папка создаётся по пути заданному в параметре конфигурации IDE &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
# Исходный код снимка скачивается в &amp;quot;корневую папку снимка&amp;quot;&lt;br /&gt;
# Производится экспорт маркеров и разметки в виде sarif-файла в &amp;quot;корневую папку снимка&amp;quot;. Название sarif-файла формируется с помощью шаблона, заданного в параметре конфигурации IDE &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/sarif/filenametemplate&amp;lt;/code&amp;gt;&lt;br /&gt;
# Производится настройка и запуск docker-контейнера в соответствии с настройками &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker&amp;lt;/code&amp;gt;:&lt;br /&gt;
## Проверяется наличие на docker-хосте образа IDE, указанного в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker/image&amp;lt;/code&amp;gt;. Если docker-образ отсутствует, он будет загружен на хост&lt;br /&gt;
## Проверяется наличие на docker-хосте контейнера с IDE для снимка:&lt;br /&gt;
##* Если docker-контейнер не существует, то он будет создан и запущен&lt;br /&gt;
##* Если docker-контейнер существует и находится:&lt;br /&gt;
##** в статусе &amp;lt;code&amp;gt;running&amp;lt;/code&amp;gt; — процесс запуска IDE продолжается&lt;br /&gt;
##** в статусе &amp;lt;code&amp;gt;created&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;exited&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;paused&amp;lt;/code&amp;gt; — контейнер будет запущен&lt;br /&gt;
##** в других статусах — вернётся соответствующая ошибка и процесс запуска IDE прервётся&lt;br /&gt;
# После успешного запуска docker-контейнера осуществляется ожидание окончания запуска процесса IDE в контейнере в соответствии с настройками &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Если за отведённое время ответ от IDE получен — процесс запуска завершается&lt;br /&gt;
#* Если ответ не получен — вернётся ошибка &amp;lt;code&amp;gt;ide not ready&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При возникновении ошибки на одном из этапов запуска IDE артефакты, созданные на предыдущих этапах, останутся в системе. В дальнейшем они могут быть использованы при повторном запуске IDE, если причина возникновения ошибки была устранена.&lt;br /&gt;
&lt;br /&gt;
{{Note|type=reminder|text=Причиной возникновения ошибки &amp;quot;ide not ready&amp;quot; может стать высокая загруженность или недостаточная производительность docker-хоста, на котором запускается контейнер с IDE. В связи с этим процесс IDE внутри контейнера может запускаться дольше, чем указано в настойках &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck&amp;lt;/code&amp;gt;. В этом случае рекомендуется попробовать повторно запустить IDE через короткий промежуток времени}}&lt;br /&gt;
&lt;br /&gt;
Ещё одной причиной возникновения данной ошибки может стать сетевая недоступность docker-контейнера при подключении к удалённому docker-хосту. В таком случае рекомендуется проверить:&lt;br /&gt;
# Сетевую доступность docker-хоста&lt;br /&gt;
# Настройки фаервола на docker-хосте&lt;br /&gt;
# Настройки биндинга docker-контейнера c IDE&lt;br /&gt;
::&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker/container/hostconfig/portbindings&amp;lt;/code&amp;gt;&lt;br /&gt;
::Контейнер должен быть подключён к доступному сетевому интерфейсу&lt;br /&gt;
&lt;br /&gt;
=== Использование IDE: проксирование запросов ===&lt;br /&gt;
&lt;br /&gt;
После успешного запуска docker-контейнера IDE станут доступны ресурсы с префиксом &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Все запросы, направленные к ресурсам &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/*&amp;lt;/code&amp;gt;, будут проксироваться в соответствующий контейнер IDE.&lt;br /&gt;
&lt;br /&gt;
Например, если docker-контейнер c IDE &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;theia__default&amp;lt;/code&amp;gt; для снимка &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xxx&amp;lt;/code&amp;gt; запущен и слушает порт &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;35353&amp;lt;/code&amp;gt; на хосте &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker-host&amp;lt;/code&amp;gt;, то будет происходить проксирование:&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET http://docker-host:35353/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;POST http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;POST http://docker-host:35353/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET ws://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET ws://docker-host:35353/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для запуска IDE в окне браузера нужно указать адрес&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;http[s]://svacer-host/xvacer/webide/snapshots/{snapshot_id}/{ide_id}/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note}} Завершающий слеш обязателен!&lt;br /&gt;
&lt;br /&gt;
=== Перезапуск IDE ===&lt;br /&gt;
&lt;br /&gt;
В процессе работы Svacer следит за состоянием запущенных IDE. При попытке повторного запуска IDE проверяется её доступность: если IDE отвечает на запросы, то повторный запуск не производится и обработка запроса завершается.&lt;br /&gt;
&lt;br /&gt;
Также работоспособность IDE контролируется при использовании IDE в момент проксирования запросов в docker-контейнер: если IDE доступна, то запрос проксируется.&lt;br /&gt;
&lt;br /&gt;
Если IDE перестанет отвечать на запросы, то будет произведена попытка её перезапуска. В этом случае происходит та же последовательность действий, что и при [[Help:XSvacer:Webide#Запуск IDE|первоначальном запуске IDE]].&lt;br /&gt;
&lt;br /&gt;
Зачастую потеря связи обусловлена остановкой docker-контейнера с IDE. В таком случае docker-контейнер будет перезапущен.&lt;br /&gt;
&lt;br /&gt;
Если же недоступность IDE обусловлена другими причинами, то запрос на запуск/проксирование продолжит возвращать ошибку до устранения причин неработоспособности.&lt;br /&gt;
&lt;br /&gt;
=== Остановка IDE ===&lt;br /&gt;
&lt;br /&gt;
Запуск производится путём вызова http-метода&lt;br /&gt;
 DELETE /api/snapshots/{snapshot_id}/ide&lt;br /&gt;
с телом запроса &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;{&amp;quot;ideId&amp;quot;: &amp;quot;идентификатор IDE&amp;quot;}&amp;lt;/code&amp;gt;. В ходе обработки запроса останавливается docker-контейнер IDE.&lt;br /&gt;
&lt;br /&gt;
По умолчанию установлен параметр конфигурации&lt;br /&gt;
&lt;br /&gt;
 xsvacer/webide/theia/default/docker/container/hostconfig/autoremove: true&lt;br /&gt;
&lt;br /&gt;
Это означает, что после остановки docker-контейнер будет автоматически удалён.&lt;br /&gt;
&lt;br /&gt;
Чтобы изменить это поведение, настройка&lt;br /&gt;
 xsvacer/webide/theia/default/{id конфигурации}/container/hostconfig/autoremove&lt;br /&gt;
&lt;br /&gt;
должна быть установлена в &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; на момент запуска docker-контейнера IDE. Это можно сделать, например, установив значение переменной окружения&lt;br /&gt;
&lt;br /&gt;
 XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_CONTAINER_HOSTCONFIG_AUTOREMOVE=false&lt;br /&gt;
&lt;br /&gt;
{{Note|type=error|text=При использовании версии Svacer 9.0.0 установка &amp;lt;code&amp;gt;autoremove: false&amp;lt;/code&amp;gt; вызывает ошибку запуска. Исправлено в версии [[Svacer#Релизы|9.0.1]].'''}}&lt;br /&gt;
&lt;br /&gt;
При корректной остановке (например SIGTERM) Svacer автоматически остановит все запущенные docker-контейнеры IDE.&lt;br /&gt;
&lt;br /&gt;
=== Подключение к IDE после некорректного завершения Svacer ===&lt;br /&gt;
&lt;br /&gt;
При запуске Svacer осуществляет поиск запущенных docker-контейнеров IDE на доступных docker-хостах. При восстановлении связи с запущенными docker-контейнерами IDE и последующей корректной остановке Svacer все docker-контейнеры IDE будут остановлены.&lt;br /&gt;
&lt;br /&gt;
== REST API для работы с IDE ==&lt;br /&gt;
&lt;br /&gt;
{{Note|text=На этапе внедрения расширений XSvacer REST API может меняться. Следите за анонсами!}}&lt;br /&gt;
&lt;br /&gt;
После активации функциональности становятся доступны http-ресурсы для управления IDE:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | REST API управления IDE&lt;br /&gt;
|-&lt;br /&gt;
!Ресурс&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
GET /xsvacer/webide/api/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Получение списка доступных для запуска IDE.&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;order&amp;quot;: 0&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;id&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;name&amp;lt;/code&amp;gt; — название IDE&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;order&amp;lt;/code&amp;gt; — порядковый номер IDE в списке&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
GET /xsvacer/webide/api/snapshots/{snapshot_id}/ide/{ide_id}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Запрос описания экземпляра IDE, запущенного для снимка.&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; — идентификатор снимка&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ide_id&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;id&amp;quot;: {&lt;br /&gt;
    &amp;quot;ide_id&amp;quot;: {&lt;br /&gt;
      &amp;quot;ide_type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
      &amp;quot;config_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;snapshot_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;url&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;start_args&amp;quot;: {&lt;br /&gt;
    &amp;quot;snapshot_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;user&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;user_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
POST /xsvacer/webide/api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Запуск IDE для просмотра исходных кодов снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; — идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
PUT /api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Команда управления экземпляром IDE снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; — идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;action&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;action&amp;lt;/code&amp;gt; — действие&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
'''Доступные действия:'''&lt;br /&gt;
* &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;update_markup&amp;lt;/code&amp;gt; — обновление предупреждений и разметки (sarif-файла)&lt;br /&gt;
'''Ответ:''' пустой&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
DELETE /xsvacer/webide/api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Остановка экземпляра IDE снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; — идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
'''Ответ:''' пустой&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Прокси для запросов экземпляра IDE снимка&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Формат идентификатора IDE ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;{тип ide}__{идентификатор конфигурации}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например, для default-конфигурации Theia IDE: &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;theia__default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Конфигурация ==&lt;br /&gt;
&lt;br /&gt;
Управление настройками функциональности осуществляется с помощью конфигурационного yaml-файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Раздел конфигурации для управления функциональностью — &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Раздел содержит перечисление доступных конфигураций запуска экземпляров Theia IDE &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia&amp;lt;/code&amp;gt;. При наличии нескольких активных конфигураций Theia IDE пользователь сможет выбрать какую из них использовать при запуске IDE с исходными файлами снимка.&lt;br /&gt;
&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       config1:&lt;br /&gt;
         ...&lt;br /&gt;
       config2:&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
Запуск IDE основывается на запуске docker-контейнеров, содержащих соответствующие сборки IDE. Поэтому необходимо также [[Help:XSvacer:Docker|настроить доступ к docker-хосту]] в разделе &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt;, иначе функциональность WebIDE не сможет работать корректно.&lt;br /&gt;
&lt;br /&gt;
В случае отсутствия файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; или отсутствии раздела &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; будет использоваться [[Help:XSvacer:Webide#Конфигурация_по_умолчанию_используемая_в_svacer|конфигурация по умолчанию]].&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация запуска Theia IDE ===&lt;br /&gt;
&lt;br /&gt;
{{Note|text=На этапе внедрения расширений XSvacer конфигурация функциональностей может меняться. Следите за анонсами!}}&lt;br /&gt;
&lt;br /&gt;
Конфигурации запуска Theia IDE добавляются в виде полей в разделе &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;. Название поля является идентификатором конфигурации запуска. Например, идентификатор по номеру используемой версии IDE:&lt;br /&gt;
&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       1-46-0:&lt;br /&gt;
         name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
==== Базовые параметры конфигурации запуска ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
|disabled&lt;br /&gt;
|bool&lt;br /&gt;
|Конфигурация запуска неактивна. Неактивная конфигурация не доступна для запуска экземпляра IDE&lt;br /&gt;
|true (переопределяется в конфигурации default)&lt;br /&gt;
|-&lt;br /&gt;
|order&lt;br /&gt;
|int&lt;br /&gt;
|Порядковый номер в списке выбора конфигурации запуска&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|name&lt;br /&gt;
|string&lt;br /&gt;
|Название конфигурации&lt;br /&gt;
|Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
|-&lt;br /&gt;
|sourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке, содержащей исходные коды снимков на машине со Svacer&lt;br /&gt;
|${USER_CACHE_DIR}/svacer-snapshot-sources&lt;br /&gt;
|-&lt;br /&gt;
|dockerhostsourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке, содержащей исходные коды снимков на хосте docker. Нужен при использовании удалённого docker-хоста, т. к. в таком случае папка с исходными кодами скорее всего будет доступна по адресу, отличающемуся от &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|dockerhostpathseparator&lt;br /&gt;
|string&lt;br /&gt;
|Разделитель пути на хосте docker. По умолчанию &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;quot;/&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|sariffiletemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|{{Note|text=В версии 10.0.0 заменён на [[Help:XSvacer:Webide#Параметры_экспорта_sarif-файла_с_разметкой_предупреждений|sarif]]}}&lt;br /&gt;
Шаблон названия sarif-файла с предупреждениями анализатора. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|sarifFileContext]]&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;&amp;quot;{{.Context.ProjectName}}.{{.Context.BranchName}}.sarif&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры экспорта sarif-файла с разметкой предупреждений ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для настройки экспорта sarif-файлов с разметкой предупреждений, выполненной в Svacer.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
|sarif&lt;br /&gt;
|map&lt;br /&gt;
|Настройки экспорта sarif-файла&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|sarif/filenametemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон для формирования названия sarif-файла. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|sarifFileContext]]&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;&amp;quot;warnings.sarif&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|sarif/commenttemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|{{Note|text=Удалён в версии 11.0.0}}&lt;br /&gt;
Шаблон для формирования элемента списка комментариев предупреждения при экспорте в sarif-файл. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|Comment]]&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;&amp;quot;{{if trim .Text}}`[{{.CreateTs.Local.Format \&amp;quot;02.01.2006 15:04\&amp;quot;}}] {{.CreatedBy}}:`\n\n{{trim .Text}}{{end}}&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры менеджера запуска IDE ====&lt;br /&gt;
&lt;br /&gt;
Конфигурация менеджера запуска IDE. На данный момент доступен только стандартный менеджер (&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;type: default&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
|manager&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация менеджера запуска IDE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|manager/type&lt;br /&gt;
|enum: default&lt;br /&gt;
|Тип менеджера запуска IDE&lt;br /&gt;
|default&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры запуска docker-контейнеров с IDE ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для настройки запуска docker-контейнеров с IDE&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
|docker/&lt;br /&gt;
|map&lt;br /&gt;
|Настройки создания docker-контейнера с IDE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|docker/hostid&lt;br /&gt;
|string&lt;br /&gt;
|Идентификатор хоста docker, описанного в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/docker/hosts&amp;lt;/code&amp;gt;. Запуск docker-контейнера с IDE будет выполнен на этом хосте&lt;br /&gt;
|default&lt;br /&gt;
|-&lt;br /&gt;
|docker/containernametemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон для формирования названия контейнера IDE для выбранного снимка. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|TheiaDockerContainerStartContext]]&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;&amp;quot;theia-1-46-{{.StartArgs.SnapshotID}}&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|docker/containerconfiglabels&lt;br /&gt;
|[]map&lt;br /&gt;
|Список меток docker-контейнера. Дополняет список меток в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker/container/config/labels&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
- &amp;quot;com.docker.compose.project&amp;quot;: svacer&lt;br /&gt;
|-&lt;br /&gt;
|docker/image/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры docker-образа из которого будет запущен контейнер&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|docker/image/name&lt;br /&gt;
|string&lt;br /&gt;
|Название образа&lt;br /&gt;
|theia-blueprint&lt;br /&gt;
|-&lt;br /&gt;
|docker/image/tag&lt;br /&gt;
|string&lt;br /&gt;
|Тег образа&lt;br /&gt;
|Svacer 11+: 1.46.0.sarif.clang.11.0.0.1&lt;br /&gt;
Svacer 10+: 1.46.0.sarif.clang.10.0.0&lt;br /&gt;
&lt;br /&gt;
Svacer 9+: 1.46.0.sarif.clang&lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcetype&lt;br /&gt;
|enum: repository/file&lt;br /&gt;
|Тип источника для загрузки образа в docker-хост&lt;br /&gt;
* repository — будет вызван docker pull образа &amp;lt;code&amp;gt;{image/name}:{image/tag}&amp;lt;/code&amp;gt;&lt;br /&gt;
* file — будет вызван docker load с URL &amp;lt;code&amp;gt;image/sourcefileurl&amp;lt;/code&amp;gt;&lt;br /&gt;
|file&lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcefileurl&lt;br /&gt;
|url&lt;br /&gt;
|URL откуда будет загружен docker-образ если &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;image/sourcetype == &amp;quot;file&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
URL может содержать:&lt;br /&gt;
* путь к локальному файлу: схема &amp;lt;code&amp;gt;file://&amp;lt;/code&amp;gt;&lt;br /&gt;
* http/https-адрес: схема &amp;lt;code&amp;gt;http://&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;https://&amp;lt;/code&amp;gt;&lt;br /&gt;
|Svacer 11+: https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.11.0.0.1.tar.gz&lt;br /&gt;
Svacer 10+: https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.10.0.0.tar.gz&lt;br /&gt;
&lt;br /&gt;
Svacer 9+: https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.tar&lt;br /&gt;
|-&lt;br /&gt;
|docker/container/&lt;br /&gt;
|map&lt;br /&gt;
|Свойства docker-контейнера&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация контейнера. Соответствует структуре Config https://github.com/moby/moby/blob/v28.5.1/api/types/container/config.go#L44&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config/env&lt;br /&gt;
|[]string&lt;br /&gt;
|Список переменных среды, которые будут установлены в контейнере&lt;br /&gt;
|&lt;br /&gt;
- THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры хостинга контейнера. Соответствует структуре HostConfig https://github.com/moby/moby/blob/v28.5.1/api/types/container/hostconfig.go#L429&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/autoremove&lt;br /&gt;
|bool&lt;br /&gt;
|&lt;br /&gt;
|true&lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/portbindings/&lt;br /&gt;
|map&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&amp;quot;3000/tcp&amp;quot;:&lt;br /&gt;
:- hostport: 0&lt;br /&gt;
|-&lt;br /&gt;
|docker/container/networkconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Сетевые настройки контейнера. Соответствуют структуре NetworkingConfig https://github.com/moby/moby/blob/v28.5.1/api/types/network/network.go#L140&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|docker/containerhostconfigmounts/&lt;br /&gt;
|map&lt;br /&gt;
|{{Note|text=Добавлен в версии 12.0.0}}&lt;br /&gt;
Именованные настройки точек монтирования контейнера. Соответствуют структуре [[Help:XSvacer:Webide#Структуры_применяемые_в_конфигурации_функциональности|MountMap]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|docker/containernetworkingconfigendpoints/&lt;br /&gt;
|map&lt;br /&gt;
|{{Note|text=Добавлен в версии 12.0.0}}&lt;br /&gt;
Именованные настройки подключённых сетевых интерфейсов контейнера контейнера. Соответствуют структуре [[Help:XSvacer:Webide#Структуры_применяемые_в_конфигурации_функциональности|EndpointsMap]]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры проверки доступности healthcheck ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для проверки доступности IDE после запуска docker-контейнера&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
|healthcheck&lt;br /&gt;
|map&lt;br /&gt;
|Параметры проверки доступности IDE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyretries&lt;br /&gt;
|int&lt;br /&gt;
|Количества попыток проверки до ошибки доступности&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyperiod&lt;br /&gt;
|golang duration string&lt;br /&gt;
|Интервал проверки&lt;br /&gt;
|200ms&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Структуры передаваемые в поля с golang-шаблонами строк ====&lt;br /&gt;
&lt;br /&gt;
 sarifFileContext {&lt;br /&gt;
     Time    time.Time&lt;br /&gt;
     Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
 &lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 TheiaDockerContainerStartContext {&lt;br /&gt;
     IdeID: {&lt;br /&gt;
         IdeType  string&lt;br /&gt;
         ConfigID string&lt;br /&gt;
     },&lt;br /&gt;
     StartArgs: {&lt;br /&gt;
         SnapshotID string&lt;br /&gt;
         UserID     string&lt;br /&gt;
         User       string&lt;br /&gt;
     },&lt;br /&gt;
     Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
 &lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 Comment {&lt;br /&gt;
     ID               string&lt;br /&gt;
     Text             string&lt;br /&gt;
     Ref              string&lt;br /&gt;
     CreatedBy        string&lt;br /&gt;
     CreatedByID      string&lt;br /&gt;
     CreateTs         time.Time&lt;br /&gt;
     UpdateTs         *time.Time&lt;br /&gt;
     UpdatedBy        string&lt;br /&gt;
     UpdatedByID      string&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== Структуры применяемые в конфигурации функциональности ====&lt;br /&gt;
&lt;br /&gt;
 type Mount struct {&lt;br /&gt;
 	Disabled bool&lt;br /&gt;
 	mount.Mount https://github.com/moby/moby/blob/v28.5.1/api/types/mount/mount.go#L27&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 type MountMap map[string]Mount&lt;br /&gt;
 &lt;br /&gt;
 type EndpointSettings struct {&lt;br /&gt;
 	Name     string&lt;br /&gt;
 	Disabled bool&lt;br /&gt;
 	*network.EndpointSettings https://github.com/moby/moby/blob/v28.5.1/api/types/network/endpoint.go#L10&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 type EndpointsMap map[string]*EndpointSettings&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация по умолчанию ===&lt;br /&gt;
&lt;br /&gt;
Данная настройка применяется по умолчанию для запуска Theia IDE, если в конфигурационном файле svacer.cfg отсутствует раздел &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
xsvacer:&lt;br /&gt;
  webide:&lt;br /&gt;
    theia:&lt;br /&gt;
      1-46-0: &amp;amp;1-46-0&lt;br /&gt;
        disabled: true&lt;br /&gt;
        order: 0&lt;br /&gt;
        name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
        sourcesroot: ${USER_CACHE_DIR}/svacer-snapshot-sources&lt;br /&gt;
        sarif:&lt;br /&gt;
          filenametemplate: &amp;quot;warnings.sarif&amp;quot;&lt;br /&gt;
        manager:&lt;br /&gt;
          type: default&lt;br /&gt;
        docker:&lt;br /&gt;
          hostid: default # идентификатор используемого docker-хоста&lt;br /&gt;
          containernametemplate: &amp;quot;theia-1-46-&amp;lt;nowiki&amp;gt;{{.StartArgs.SnapshotID}}&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
          image:&lt;br /&gt;
            name: theia-blueprint&lt;br /&gt;
            tag: 1.46.0.sarif.clang.11.0.0.1&lt;br /&gt;
            sourcetype: file&lt;br /&gt;
            sourcefileurl: https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.11.0.0.1.tar.gz&lt;br /&gt;
          containerconfiglabels:&lt;br /&gt;
            - &amp;quot;com.docker.compose.project&amp;quot;: svacer&lt;br /&gt;
          containerhostconfigmounts:&lt;br /&gt;
            &amp;quot;projectrootbind&amp;quot;: &lt;br /&gt;
              disabled: false&lt;br /&gt;
              mount:&lt;br /&gt;
                type: bind&lt;br /&gt;
                target: &amp;quot;/home/project&amp;quot;&lt;br /&gt;
                readonly: true&lt;br /&gt;
            &amp;quot;projectrootvolume&amp;quot;: &lt;br /&gt;
              disabled: true&lt;br /&gt;
              mount:&lt;br /&gt;
                type: volume&lt;br /&gt;
                source: svacer-snapshot-sources&lt;br /&gt;
                target: &amp;quot;/home/project&amp;quot;&lt;br /&gt;
                readonly: true&lt;br /&gt;
          containernetworkingconfigendpoints:&lt;br /&gt;
            &amp;quot;svacer&amp;quot;:&lt;br /&gt;
              name: svacer&lt;br /&gt;
              disabled: true&lt;br /&gt;
          container:&lt;br /&gt;
            config:&lt;br /&gt;
              env:&lt;br /&gt;
                - THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
            hostconfig:&lt;br /&gt;
              autoremove: true&lt;br /&gt;
              portbindings:&lt;br /&gt;
                &amp;quot;3000/tcp&amp;quot;:&lt;br /&gt;
                  # - hostport: 0 # not required since version 12.0.0&lt;br /&gt;
            networkconfig:&lt;br /&gt;
        healthcheck:&lt;br /&gt;
          starttoreadyretries: 10&lt;br /&gt;
          starttoreadyperiod: 200ms&lt;br /&gt;
      default:&lt;br /&gt;
        &amp;lt;&amp;lt;: *1-46-0&lt;br /&gt;
        order: 0&lt;br /&gt;
        disabled: false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
По умолчанию используется docker-хост с идентификатором &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;. Согласно настройке этого хоста, по умолчанию предполагается взаимодействие с докером через unix-сокет &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt;. Соответственно пользователь, под которым запускается Svacer, должен иметь доступ к этому сокету (https://docs.docker.com/engine/install/linux-postinstall/).&lt;br /&gt;
&lt;br /&gt;
{{Note|text=При наличии раздела &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; в конфигурационном файле svacer.cfg будут применены только настройки из этого раздела. Настройки по умолчанию будут полностью проигнорированы}}&lt;br /&gt;
&lt;br /&gt;
=== Изменение конфигурационных параметров с помощью переменных окружения ===&lt;br /&gt;
&lt;br /&gt;
Значения атрибутов конфигурации могут быть изменены с помощью переменных окружения&lt;br /&gt;
&lt;br /&gt;
 XSVACER_WEBIDE_THEIA_{id конфигурации ide}[_параметр]={значение параметра}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например, для активации rootless-хоста &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/hosts/local&amp;lt;/code&amp;gt; и переключения запуска IDE с идентификатором &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;default&amp;lt;/code&amp;gt; на этот хост можно указать такие значения переменных окружения при запуске Svacer:&lt;br /&gt;
&lt;br /&gt;
 XSVACER_DOCKER_HOSTS_LOCAL_DISABLED=false&lt;br /&gt;
 XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_HOSTID=local&lt;br /&gt;
&lt;br /&gt;
== Очистка системы: удаление артефактов функциональности ==&lt;br /&gt;
&lt;br /&gt;
В процессе использования функциональности IDE создаются следующие артефакты:&lt;br /&gt;
# Исходные файлы снимков скачиваются в корневые папки, заданные в параметре &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
# Артефакты docker:&lt;br /&gt;
#* образы и контейнеры создаются на хостах, указанных в конфигурации docker-хостов в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/hostid&amp;lt;/code&amp;gt;&lt;br /&gt;
#* названия docker-образов будут соответствовать параметрам в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/image&amp;lt;/code&amp;gt;&lt;br /&gt;
#* названия docker-контейнеров будут соответствовать параметру &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/containernametemplate&amp;lt;/code&amp;gt;&lt;br /&gt;
#* наборы меток doker-контейнеров будут содержать:&lt;br /&gt;
#*: метки, перечисленные в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/containerconfiglabels&amp;lt;/code&amp;gt;&lt;br /&gt;
#*: метки, перечисленные в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/container/config/labels&amp;lt;/code&amp;gt;&lt;br /&gt;
#*: метки с названиями &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.service.id&amp;lt;/code&amp;gt;, &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.service.type&amp;lt;/code&amp;gt;, &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.theia.start_args&amp;lt;/code&amp;gt;&lt;br /&gt;
# При использовании rootless-хоста docker будут созданы папки согласно [[Help:XSvacer:Docker#Специфичные настройки для rootless-хоста|настройкам]]&lt;br /&gt;
&lt;br /&gt;
== Рекомендации ==&lt;br /&gt;
&lt;br /&gt;
=== Предварительная загрузка docker-образа с IDE ===&lt;br /&gt;
&lt;br /&gt;
По умолчанию параметр&lt;br /&gt;
&lt;br /&gt;
 xsvacer/webide/theia/1-46-0/docker/image/sourcefileurl&lt;br /&gt;
&lt;br /&gt;
Содержит значение&lt;br /&gt;
 &lt;br /&gt;
 Svacer 11+: https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.11.0.0.1.tar.gz&lt;br /&gt;
 Svacer 10+: https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.10.0.0.tar.gz&lt;br /&gt;
 Svacer 9+:  https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.tar&lt;br /&gt;
&lt;br /&gt;
По этому адресу находится архив с docker-образом для Theia IDE.&lt;br /&gt;
&lt;br /&gt;
Если docker-образ ещё не был загружен, то загрузка начнётся при первой попытке запуска IDE. Т. к. этот процесс занимает длительное время, то запрос запуска IDE тоже будет выполняться долго.&lt;br /&gt;
&lt;br /&gt;
Для ускорения первого запуска IDE докер образ можно загрузить на хост docker вручную. Для этого необходимо:&lt;br /&gt;
&lt;br /&gt;
# Скачать файл архива&lt;br /&gt;
# Выполнить команду &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker image load -i /path/to/theia-blueprint...&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Информация о docker-образе Theia IDE ==&lt;br /&gt;
&lt;br /&gt;
Docker-образ, используемый по умолчанию, построен на базе [https://theia-ide.org/ Eclipse Theia IDE] версии [https://github.com/eclipse-theia/theia-blueprint/tree/v1.46.0 1.46.0].&lt;br /&gt;
&lt;br /&gt;
При этом была изменена компоновка расширений Theia. Результат выполнения &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
diff --git a/browser.Dockerfile b/browser.Dockerfile&lt;br /&gt;
index efe591e..a4ebb6a 100644&lt;br /&gt;
--- a/browser.Dockerfile&lt;br /&gt;
+++ b/browser.Dockerfile&lt;br /&gt;
@@ -42,7 +42,7 @@ RUN chmod g+rw /home &amp;amp;&amp;amp; \&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y wget apt-transport-https &amp;amp;&amp;amp; \&lt;br /&gt;
     wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | tee /usr/share/keyrings/adoptium.asc &amp;amp;&amp;amp; \&lt;br /&gt;
     echo &amp;quot;deb [signed-by=/usr/share/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main&amp;quot; | tee /etc/apt/sources.list.d/adoptium.list &amp;amp;&amp;amp; \&lt;br /&gt;
-    apt-get update &amp;amp;&amp;amp; apt-get install -y git openssh-client openssh-server bash libsecret-1-0 temurin-17-jdk maven &amp;amp;&amp;amp; \&lt;br /&gt;
+    apt-get update &amp;amp;&amp;amp; apt-get install -y git openssh-client openssh-server bash libsecret-1-0 clangd &amp;amp;&amp;amp; \&lt;br /&gt;
     apt-get purge -y wget &amp;amp;&amp;amp; \&lt;br /&gt;
     apt-get clean&lt;br /&gt;
&lt;br /&gt;
diff --git a/package.json b/package.json&lt;br /&gt;
index 9044595..9d0dcc8 100644&lt;br /&gt;
--- a/package.json&lt;br /&gt;
+++ b/package.json&lt;br /&gt;
@@ -54,10 +54,8 @@&lt;br /&gt;
   &amp;quot;theiaPluginsDir&amp;quot;: &amp;quot;plugins&amp;quot;,&lt;br /&gt;
   &amp;quot;theiaPlugins&amp;quot;: {&lt;br /&gt;
     &amp;quot;eclipse-theia.builtin-extension-pack&amp;quot;: &amp;quot;https://open-vsx.org/api/eclipse-theia/builtin-extension-pack/1.83.1/file/eclipse-theia.builtin-extension-pack-1.83.1.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;ms-vscode.js-debug&amp;quot;: &amp;quot;https://open-vsx.org/api/ms-vscode/js-debug/1.83.1/file/ms-vscode.js-debug-1.83.1.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;ms-vscode.js-debug-companion&amp;quot;: &amp;quot;https://open-vsx.org/api/ms-vscode/js-debug-companion/1.1.2/file/ms-vscode.js-debug-companion-1.1.2.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;vscjava.vscode-java-pack&amp;quot;: &amp;quot;https://open-vsx.org/api/vscjava/vscode-java-pack/0.25.11/file/vscjava.vscode-java-pack-0.25.11.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;vscjava.vscode-java-dependency&amp;quot;: &amp;quot;https://open-vsx.org/api/vscjava/vscode-java-dependency/0.21.2/file/vscjava.vscode-java-dependency-0.21.2.vsix&amp;quot;&lt;br /&gt;
+    &amp;quot;llvm-vs-code-extensions.vscode-clangd&amp;quot;: &amp;quot;https://open-vsx.org/api/llvm-vs-code-extensions/vscode-clangd/0.1.26/file/llvm-vs-code-extensions.vscode-clangd-0.1.26.vsix&amp;quot;,&lt;br /&gt;
+    &amp;quot;ms-sarifvscode.sarif-viewer&amp;quot;: &amp;quot;https://open-vsx.org/api/MS-SarifVSCode/sarif-viewer/3.4.4/file/MS-SarifVSCode.sarif-viewer-3.4.4.vsix&amp;quot;&lt;br /&gt;
   },&lt;br /&gt;
   &amp;quot;theiaPluginsExcludeIds&amp;quot;: [&lt;br /&gt;
     &amp;quot;ms-vscode.js-debug-companion&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Команда построения docker-образа:&lt;br /&gt;
 docker build -t theia-blueprint:1.46.0.sarif.clang... -f browser.Dockerfile .&lt;br /&gt;
&lt;br /&gt;
Команда экспорта docker-образа:&lt;br /&gt;
 docker image save theia-blueprint:1.46.0.sarif.clang... | gzip &amp;gt; /path/to/tar/theia-blueprint.1.46.0.sarif.clang....tar.gz&lt;br /&gt;
&lt;br /&gt;
== Известные проблемы ==&lt;br /&gt;
&lt;br /&gt;
=== При открытии sarif-файла в IDE открывается пустая панель &amp;quot;SARIF Results&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Для просмотра sarif-файла, содержащего предупреждения анализатора и разметку, используется плагин [https://open-vsx.org/extension/MS-SarifVSCode/sarif-viewer SARIF Viewer]. При просмотре sarif-файла открывается webview плагина со списком предупреждений анализатора.&lt;br /&gt;
&lt;br /&gt;
В Theia IDE для открытия webview применяется [https://developer.mozilla.org/en_US/docs/Web/API/Service_Worker_API Service Worker API]. В целях обеспечения безопасности применение Service Worker API [https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#setting_up_to_play_with_service_workers требует], чтобы доступ к web-приложению осуществлялся по HTTPS, либо приложение размещалось на localhost.&lt;br /&gt;
&lt;br /&gt;
Поэтому для решения данной проблемы Svacer должен открываться по HTTPS или быть доступен по адресу &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:AIAssistant:Deploy&amp;diff=3023</id>
		<title>Help:XSvacer:AIAssistant:Deploy</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:AIAssistant:Deploy&amp;diff=3023"/>
		<updated>2025-06-23T11:46:25Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: --ai-host description improvement&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Активация и запуск функциональности ==&lt;br /&gt;
&lt;br /&gt;
ИИ-ассистент реализован в виде отдельного сервиса, взаимодействующего со Svacer по REST API. Для его запуска необходимо:&lt;br /&gt;
&lt;br /&gt;
# Активировать функциональность при запуске Svacer и настроить доступ к ИИ-ассистенту;&lt;br /&gt;
# Развернуть и запустить сервис ИИ-ассистента;&lt;br /&gt;
&lt;br /&gt;
=== Активация функциональности &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer&amp;lt;/code&amp;gt; при запуске Svacer ===&lt;br /&gt;
&lt;br /&gt;
Для активации функциональности необходимо указать флаг &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features aiAssistant&amp;lt;/code&amp;gt; при запуске Svacer.&lt;br /&gt;
&lt;br /&gt;
==== Настройка доступа к ИИ-ассистенту в Svacer ====&lt;br /&gt;
&lt;br /&gt;
По умолчанию Svacer будет пытаться подключиться к ИИ-ассистенту по адресу &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:8081/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить адрес, по которому Svacer будет подключаться к ИИ-ассистенту, можно одним из способов:&lt;br /&gt;
&lt;br /&gt;
# При запуске Svacer установить переменную окружения &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;XSVACER_AIASSISTANT_ASSISTANTHOSTURL=http://{адрес ИИ-ассистента}:{порт}/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# В конфигурационном файле &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; добавить раздел&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
xsvacer:&lt;br /&gt;
  ...&lt;br /&gt;
  aiAssistant:&lt;br /&gt;
    assistantHostUrl: http://{адрес ИИ-ассистента}:{порт}/&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Настройка значения флага &amp;lt;code&amp;gt;--public-url&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
В связи с тем, что ИИ-ассистент использует REST API Svacer, необходимо добавить url ИИ-ассистента в список публичных url Svacer. Это можно сделать, добавив при запуске Svacer флаг:&lt;br /&gt;
&lt;br /&gt;
 --public-url {url ИИ-ассистента}&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;--xsvacer.features aiAssistant --public-url https://svacer-ai-demo.ispras.ru&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note|text=Данная настройка связана с функциональностью генерации коротких ссылок}}&lt;br /&gt;
&lt;br /&gt;
=== Развёртывание и запуск ИИ-ассистента ===&lt;br /&gt;
&lt;br /&gt;
При развёртывании ИИ-ассистента необходимо выполнить следующие действия:&lt;br /&gt;
&lt;br /&gt;
# Запустить docker-контейнер с моделью машинного обучения;&lt;br /&gt;
# При необходимости: развернуть postresql-сервер для хранения базы данных ИИ-ассистента;&lt;br /&gt;
# Запустить сервис ИИ-ассистента.&lt;br /&gt;
&lt;br /&gt;
==== Запуск docker-контейнера с моделью машинного обучения ====&lt;br /&gt;
&lt;br /&gt;
Docker-образ контейнера с моделью можно скачать по ссылке: https://svacer.ispras.ru/docker/images/svacer-ai-model-host.1.0.0.tar.gz (3.3GB)&lt;br /&gt;
&lt;br /&gt;
Далее docker-образ необходимо загрузить на docker-хост с помощью команды&lt;br /&gt;
&lt;br /&gt;
 docker image load -i /path/to/svacer-ai-model-host.1.0.0.tar.gz&lt;br /&gt;
&lt;br /&gt;
После этого docker-контейнер может быть запущен следующей командой&lt;br /&gt;
&lt;br /&gt;
 docker volume create svacer-ai-cache&lt;br /&gt;
 docker volume create svacer-ai-pgdata&lt;br /&gt;
 docker run -d --name svacer-ai-model-host -p 7000:8000 -v svacer-ai-pgdata:/var/lib/postgresql/data -v svacer-ai-cache:/root/.cache svacer-ai-model-host:1.0.0&lt;br /&gt;
&lt;br /&gt;
Том &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;cache&amp;lt;/code&amp;gt; будет содержать кэш сервиса взаимодействия с моделью машинного обучения.&lt;br /&gt;
&lt;br /&gt;
Том &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;pgdata&amp;lt;/code&amp;gt; будет содержать файлы с данными встроенного в docker-образ postgres'а.&lt;br /&gt;
&lt;br /&gt;
Порт &amp;lt;code&amp;gt;7000&amp;lt;/code&amp;gt; будет использоваться по умолчанию, если не были изменены [[#Параметры подключения сервиса модели машинного обучения|параметры подключения сервиса машинного обучения]]&lt;br /&gt;
&lt;br /&gt;
==== Запуск ИИ-ассистента ====&lt;br /&gt;
&lt;br /&gt;
Исполняемый файл ИИ-ассистента можно скачать по ссылке: https://svacer.ispras.ru/releases/svacer-ai/svacer-ai-1-0-0-linux.tar.gz (53MB)&lt;br /&gt;
&lt;br /&gt;
После этого ИИ-ассистент может быть запущен командой &amp;lt;code&amp;gt;svacerai-server run&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Флаги команды запуска ИИ-ассистента =====&lt;br /&gt;
&lt;br /&gt;
Глобальные флаги &amp;lt;code&amp;gt;svacerai-server help&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 NAME:&lt;br /&gt;
    svacerai-server - Svace AI server&lt;br /&gt;
 &lt;br /&gt;
 USAGE:&lt;br /&gt;
    svacerai-server [global options] command [command options] [arguments...]&lt;br /&gt;
 &lt;br /&gt;
 COMMANDS:&lt;br /&gt;
    run&lt;br /&gt;
    help, h  Shows a list of commands or help for one command&lt;br /&gt;
 &lt;br /&gt;
 GLOBAL OPTIONS:&lt;br /&gt;
    --debug            (default: false) [$SVACER_AI_DEBUG]&lt;br /&gt;
    --log-level value  Defines log level. Available: info, warn, error [$SVACER_AI_LOG_LEVEL]&lt;br /&gt;
    --log value        Defines path to log file. By default file /tmp/svacer-ai-*.log will be created.&lt;br /&gt;
    --config value     Define path to file with config in YAML format (by default svacer-ai.cfg).&lt;br /&gt;
    --help, -h         show help&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|debug&lt;br /&gt;
|bool&lt;br /&gt;
|Отладочный режим логирования&lt;br /&gt;
|-&lt;br /&gt;
|log-level&lt;br /&gt;
|string&lt;br /&gt;
|Уровень логирования&lt;br /&gt;
|-&lt;br /&gt;
|log&lt;br /&gt;
|string&lt;br /&gt;
|Путь к файлу с логами&lt;br /&gt;
|-&lt;br /&gt;
|config&lt;br /&gt;
|string&lt;br /&gt;
|Путь к [[#Конфигурация по умолчанию|конфигурационному файлу]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Флаги запуска ИИ-ассистента &amp;lt;code&amp;gt;svacerai-server run help&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 NAME:&lt;br /&gt;
    svacerai-server run&lt;br /&gt;
 &lt;br /&gt;
 USAGE:&lt;br /&gt;
    svacerai-server run [command options] [arguments...]&lt;br /&gt;
 &lt;br /&gt;
 OPTIONS:&lt;br /&gt;
    --pg value                           Defines PostgreSQL connection URL&lt;br /&gt;
    --host value                         Defines host name for the server&lt;br /&gt;
    --svacer-host value                  Defines remote Svacer host&lt;br /&gt;
    --ai-host value [ --ai-host value ]  Specify the address of the service with AI models in the format &amp;lt;nowiki&amp;gt;{host id}:{http://{host address}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
    --help, -h                           show help&lt;br /&gt;
&lt;br /&gt;
{{Note|text=С помощью флагов запуска можно переопределять наиболее часто меняющиеся [[#Конфигурация по умолчанию|параметры конфигурации]] без необходимости создания файла &amp;lt;code&amp;gt;svacer-ai.cfg&amp;lt;/code&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Формат&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 80px&amp;quot;|pg&lt;br /&gt;
|string&lt;br /&gt;
|Строка подключения к базе данных ИИ-ассистента&lt;br /&gt;
|https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING-URIS&lt;br /&gt;
|-&lt;br /&gt;
|host&lt;br /&gt;
|string&lt;br /&gt;
|Адрес сетевого интерфейса и порт, на которых будет запущен ИИ-ассистент&lt;br /&gt;
|&amp;lt;code&amp;gt;{ip адрес}:{порт}&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|svacer-host&lt;br /&gt;
|string&lt;br /&gt;
|Url сервиса Svacer, к API которого будет обращаться ИИ-ассистент&lt;br /&gt;
|https://en.wikipedia.org/wiki/URL#Syntax&lt;br /&gt;
|-&lt;br /&gt;
|ai-host&lt;br /&gt;
|[]string&lt;br /&gt;
|Список адресов сервисов с моделями машинного обучения. &amp;lt;code&amp;gt;host-id&amp;lt;/code&amp;gt; - идентификатор сервиса моделей в [[#Конфигурация по умолчанию|конфигурации]]&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{host id}:{url сервиса моделей}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note|text=При использовании [[#Конфигурация по умолчанию|конфигурации по умолчанию]], &amp;lt;code&amp;gt;{host id}&amp;lt;/code&amp;gt; должен быть равен &amp;lt;code&amp;gt;server-status&amp;lt;/code&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;svacerai-server run --pg postgres://svace:svace@127.0.0.1:5432/svacer_ai --host localhost:8095 --svacer-host http://localhost:8094 --ai-host server-status:http://localhost:7000&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация ИИ-ассистента ===&lt;br /&gt;
&lt;br /&gt;
Управление настройками ИИ-ассистента осуществляется с помощью конфигурационного yaml-файла &amp;lt;code&amp;gt;svacer-ai.cfg&amp;lt;/code&amp;gt; в рабочей директории сервиса.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
|db/url&lt;br /&gt;
|string&lt;br /&gt;
|Строка подключения к базе данных ИИ-ассистента&lt;br /&gt;
|&amp;lt;code&amp;gt;postgres://postgres:postgres@localhost:5432/svacer_ai?sslmode=disable&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|http/host&lt;br /&gt;
|string&lt;br /&gt;
|Адрес сетевого интерфейса и порт, на которых будет запущен ИИ-ассистент&lt;br /&gt;
|&amp;lt;code&amp;gt;localhost:8081&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|http/svacerHostUrl&lt;br /&gt;
&lt;br /&gt;
ai/svacerHostUrl&lt;br /&gt;
|string&lt;br /&gt;
|Url сервиса Svacer, к API которого будет обращаться ИИ-ассистент&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:8080/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|http/svacerClientTlsCfg?&lt;br /&gt;
&lt;br /&gt;
ai/svacerClientTlsCfg&lt;br /&gt;
|[https://pkg.go.dev/crypto/tls#Config *tls.Config]&lt;br /&gt;
|Настройки безопасного подключения к Svacer&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
svacerClientTlsCfg:&lt;br /&gt;
  insecureSkipVerify: true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|ai/svacerReviewCommentTemplate&lt;br /&gt;
|string&lt;br /&gt;
|Шаблон для формирования комментария к разметке выполненной с помощью ИИ-ассистента. В шаблон передаётся структура &amp;lt;code&amp;gt;processing.MarkerResult&amp;lt;/code&amp;gt;&lt;br /&gt;
|См. [[#Конфигурация по умолчанию|конфигурацию по умолчанию]]&lt;br /&gt;
|-&lt;br /&gt;
|ai/svacerReviewTags&lt;br /&gt;
|[]string&lt;br /&gt;
|Список названий меток, которые будут установлены маркерам, размеченным с помощью ИИ-ассистента&lt;br /&gt;
|&amp;lt;code&amp;gt;[AI]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|hosts&lt;br /&gt;
|map[string]object&lt;br /&gt;
|Список параметров подключения к сервисам с моделями машинного обучения, которые будет использовать ИИ-ассистент&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{id сервиса моделей}:&lt;br /&gt;
  {параметры подключения}&lt;br /&gt;
  (см. описание ниже)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры подключения сервиса модели машинного обучения ====&lt;br /&gt;
&lt;br /&gt;
Параметры подключения сервисов модели задаются в виде map, ключами которой являются идентификаторы сервисов. В значении содержатся следующие параметры:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
|url&lt;br /&gt;
|string&lt;br /&gt;
|Url сервиса с моделями машинного обучения&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:7000&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|settings/requestBatchSize&lt;br /&gt;
|int&lt;br /&gt;
|Количество предупреждений, отправляемых для анализа моделью за раз&lt;br /&gt;
|&amp;lt;code&amp;gt;512&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|settings/httpMultipartParameterName&lt;br /&gt;
&lt;br /&gt;
settings/httpMultipartFileName&lt;br /&gt;
&lt;br /&gt;
settings/httpMultipartContentType&lt;br /&gt;
|string&lt;br /&gt;
|Параметра multipart-запроса вызова модели&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
httpMultipartParameterName: &amp;quot;file&amp;quot;&lt;br /&gt;
httpMultipartFileName: &amp;quot;file.csv&amp;quot;&lt;br /&gt;
httpMultipartContentType: &amp;quot;application/vnd.ms-excel&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|resources/modelList&lt;br /&gt;
&lt;br /&gt;
resources/modelInference&lt;br /&gt;
&lt;br /&gt;
resources/logs&lt;br /&gt;
|string&lt;br /&gt;
|Сопоставление названий ресурсов сервиса моделей&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
modelList: &amp;quot;/models_info&amp;quot;&lt;br /&gt;
&lt;br /&gt;
modelInference: &amp;quot;/use_model_for_file&amp;quot;&lt;br /&gt;
&lt;br /&gt;
logs: &amp;quot;/log_file&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|defaults/dataCollector/csvSeparator&lt;br /&gt;
|string&lt;br /&gt;
|Разделитель csv-файла, который отправляется в сервис моделей&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|defaults/dataCollector/additionalLineNumber&lt;br /&gt;
|int&lt;br /&gt;
|Количество строк исходного кода, которые добавляются до и после строки предупреждения при отправке в сервис моделей&lt;br /&gt;
|&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|defaults/dataCollector/csvColumns&lt;br /&gt;
|[]string&lt;br /&gt;
|Названия столбцов csv-файла, который отправляется в сервис моделей&lt;br /&gt;
|&amp;lt;code&amp;gt;[id, warnClass, code]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|defaults/interpretation/defaultValue&lt;br /&gt;
&lt;br /&gt;
defaults/interpretation/defaultValue&lt;br /&gt;
&lt;br /&gt;
defaults/interpretation/defaultValue&lt;br /&gt;
|string&lt;br /&gt;
|Названия статусов, которые присваиваются результату вызова модели&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
defaultValue: &amp;quot;Undecided&amp;quot;&lt;br /&gt;
&lt;br /&gt;
leftClassValue: &amp;quot;False Positive&amp;quot;&lt;br /&gt;
&lt;br /&gt;
rightClassValue: &amp;quot;Confirmed&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация по умолчанию ===&lt;br /&gt;
&lt;br /&gt;
Данная конфигурация применяется по умолчанию при запуске ИИ-ассистента, если отсутствует конфигурационный файл &amp;lt;code&amp;gt;svacer-ai.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Note|type=error|text=Если файл &amp;lt;code&amp;gt;svacer-ai.cfg&amp;lt;/code&amp;gt; существует, в нём должны содержаться все указанные параметры конфигурации.'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
varSvacerHostUrl: &amp;amp;svacerHostUrl &amp;quot;http://localhost:8080/&amp;quot;&lt;br /&gt;
varSvacerClientTlsCfg: &amp;amp;svacerClientTlsCfg&lt;br /&gt;
  insecureSkipVerify: true&lt;br /&gt;
db:&lt;br /&gt;
  url: &amp;quot;postgres://postgres:postgres@localhost:5432/svacer_ai?sslmode=disable&amp;quot;&lt;br /&gt;
http:&lt;br /&gt;
  host: &amp;quot;localhost:8081&amp;quot;&lt;br /&gt;
  svacerHostUrl: *svacerHostUrl&lt;br /&gt;
  svacerClientTlsCfg: *svacerClientTlsCfg&lt;br /&gt;
ai:&lt;br /&gt;
  svacerHostUrl: *svacerHostUrl&lt;br /&gt;
  svacerClientTlsCfg: *svacerClientTlsCfg&lt;br /&gt;
  svacerReviewCommentTemplate: |+&lt;br /&gt;
    `Timestamp: {{now.UTC.Format &amp;quot;2006-01-02T15:04:05Z&amp;quot;}}`&lt;br /&gt;
&lt;br /&gt;
    `AI model: {{.Pipeline.Name}}`&lt;br /&gt;
&lt;br /&gt;
    `Confidence level: {{ printf &amp;quot;%.2f&amp;quot; (index .Interpretation 0).Confidence }}`&lt;br /&gt;
&lt;br /&gt;
  svacerReviewTags:&lt;br /&gt;
    - AI&lt;br /&gt;
  hosts:&lt;br /&gt;
    server-status:&lt;br /&gt;
      url: &amp;quot;http://localhost:7000&amp;quot;&lt;br /&gt;
      settings:&lt;br /&gt;
        requestBatchSize: 512&lt;br /&gt;
        httpMultipartParameterName: &amp;quot;file&amp;quot;&lt;br /&gt;
        httpMultipartFileName: &amp;quot;file.csv&amp;quot;&lt;br /&gt;
        httpMultipartContentType: &amp;quot;application/vnd.ms-excel&amp;quot;&lt;br /&gt;
      resources:&lt;br /&gt;
        modelList: &amp;quot;/models_info&amp;quot;&lt;br /&gt;
        modelInference: &amp;quot;/use_model_for_file&amp;quot;&lt;br /&gt;
        logs: &amp;quot;/log_file&amp;quot;&lt;br /&gt;
      defaults:&lt;br /&gt;
        dataCollector:&lt;br /&gt;
          csvSeparator: &amp;quot;,&amp;quot;&lt;br /&gt;
          additionalLinesNumber: 0&lt;br /&gt;
          csvColumns:&lt;br /&gt;
            - &amp;quot;id&amp;quot;&lt;br /&gt;
            - &amp;quot;warnClass&amp;quot;&lt;br /&gt;
            - &amp;quot;code&amp;quot;&lt;br /&gt;
        interpretation: &lt;br /&gt;
          defaultValue: &amp;quot;Undecided&amp;quot;&lt;br /&gt;
          leftClassValue: &amp;quot;False Positive&amp;quot;&lt;br /&gt;
          rightClassValue: &amp;quot;Confirmed&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer&amp;diff=3011</id>
		<title>Help:XSvacer</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer&amp;diff=3011"/>
		<updated>2025-06-04T12:42:24Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: Add AI assistant link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= XSvacer — расширение функциональности Svacer =&lt;br /&gt;
{{Note|text=На данный момент расширенные функции находятся на стадии внедрения. В последующих релизах возможно изменение форматов конфигурации и API взаимодействия с указанными функциями}}&lt;br /&gt;
&lt;br /&gt;
Начиная с релиза [[Changelog#Release_9-0-0|9.0.0]] в Svacer появились расширенные функции, которые могут быть активированы по требованию. По умолчанию данные функции неактивны.&lt;br /&gt;
&lt;br /&gt;
Доступные функции:&lt;br /&gt;
* [[Help:XSvacer:Webide|Webide]] — среда разработки на базе [https://theia-ide.org/ Theia IDE], с помощью которой можно просматривать исходный код снимка, предупреждения анализатора и разметку.&lt;br /&gt;
* [[Help:XSvacer:AIAssistant|AIAssistant]] — ИИ-ассистент, позволяющий использовать модель машинного обучения для помощи при разметке предупреждений.&lt;br /&gt;
&lt;br /&gt;
== Активация функций ==&lt;br /&gt;
&lt;br /&gt;
Активировать функции можно, указав флаг &amp;lt;code&amp;gt;--xsvacer.features feature_name&amp;lt;/code&amp;gt; при запуске Svacer. Флаг можно указать несколько раз, чтобы активировать несколько функций.&lt;br /&gt;
&lt;br /&gt;
Также список активных функций можно настроить в конфигурационном yaml-файле &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; в разделе &amp;lt;code&amp;gt;xsvacer.features&amp;lt;/code&amp;gt;.&lt;br /&gt;
Значением данного ключа является список строк с названиями активируемых функций:&lt;br /&gt;
 ...&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   features:&lt;br /&gt;
     - webide&lt;br /&gt;
     - aiAssistant&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
При установке флага &amp;lt;code&amp;gt;--xsvacer.features&amp;lt;/code&amp;gt; список функций, указанный в конфигурационном файле &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;, будет проигнорирован.&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:AIAssistant&amp;diff=3010</id>
		<title>Help:XSvacer:AIAssistant</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:AIAssistant&amp;diff=3010"/>
		<updated>2025-06-04T05:48:16Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: AI-model short description&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note|text=Данная функциональность входит в набор расширений XSvacer}}&lt;br /&gt;
&lt;br /&gt;
== Поддержка ИИ-ассистента для разметки предупреждений ==&lt;br /&gt;
&lt;br /&gt;
Данная функциональность позволяет использовать модель машинного обучения (ИИ) для помощи при разметке предупреждений.&lt;br /&gt;
&lt;br /&gt;
ИИ-ассистент предназначен для разметки предупреждений статусами &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;Confirmed&amp;lt;/code&amp;gt; и &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;False Positive&amp;lt;/code&amp;gt;, которые были предсказаны моделью машинного обучения.&lt;br /&gt;
&lt;br /&gt;
Все данные предупреждений хранятся в Svacer и получаются ИИ-ассистентом с помощью REST API.&lt;br /&gt;
&lt;br /&gt;
{{Note|text=[[Help:XSvacer:AIAssistant:Deploy|Инструкция по активации и запуску функциональности]] ИИ-ассистента}}&lt;br /&gt;
&lt;br /&gt;
== Описание интерфейса ИИ-ассистента==&lt;br /&gt;
=== Разметка одного маркера ===&lt;br /&gt;
Чтобы разметить один маркер с помощью ИИ-ассистента:&lt;br /&gt;
:1. Нажмите кнопку [[File:Icon AI.png|25px]] [[Help:UI manual#Функции правой панели|на правой панели]] или в виджете маркера на [[Help:UI manual#Вкладка с исходным кодом|вкладке с исходным кодом]].&lt;br /&gt;
:[[File:221 Правая панель. Переход к ИИ-разметке.png|thumb|none|x200px|Правая панель. Переход к ИИ-разметке]]&lt;br /&gt;
:[[File:222 Виджет элемента трассы. Переход к ИИ-разметке.png|thumb|none|x150px|Виджет маркера на вкладке с исходным кодом. Переход к ИИ-разметке]]&lt;br /&gt;
:2. В открывшемся окне разметки:&lt;br /&gt;
::а) Выберите модель AI, с помощью которой ИИ-ассистент рассчитает статус разметки.&lt;br /&gt;
::Спрогнозированный статус и уровень доверия прогнозу отобразятся в этом же окне. &lt;br /&gt;
::Если маркер уже размечен и его статус совпадает с прогнозным, то в окне отобразится сообщение об этом и дальнейшая разметка станет недоступна.&lt;br /&gt;
::б) Введите комментарий.&lt;br /&gt;
::в) Нажмите кнопку '''Применить'''.&lt;br /&gt;
:&amp;lt;gallery mode=&amp;quot;packed&amp;quot; heights=&amp;quot;250px&amp;quot; style=&amp;quot;float:left; clear:right; margin-right:1em; margin-left:1em&amp;quot;&amp;gt;&lt;br /&gt;
  223 Окно ИИ-разметки.png|Окно ИИ-разметки&lt;br /&gt;
  224 Окно ИИ-разметки. Статус совпадает.png|Окно ИИ-разметки. Прогнозный статус совпадает с существующим&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
:Статус, установленный с помощью ИИ-ассистента, отобразится в верхней части правой панели и в виджете маркера на вкладке с исходным кодом с отметкой [[File:Icon AI 2.png|15px]]. Также этой иконкой будет отмечен статус в комментарии, добавленном при разметке, который дополнительно содержит информацию о проведенной разметке: время, имя модели машинного обучения, уровень доверия прогнозу.&lt;br /&gt;
:Дополнительная информация также отображается при наведении курсора на иконку [[File:Icon AI 2.png|15px]].&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot; heights=&amp;quot;250px&amp;quot; style=&amp;quot;float:left; clear:right; margin-right:1em; margin-left:1em&amp;quot;&amp;gt;&lt;br /&gt;
  225 Правая панель. Результат ИИ-разметки.png|Правая панель. Результат ИИ-разметки&lt;br /&gt;
  227 Правая панель. Комментарий об ИИ-разметке.png|Правая панель. Комментарий об ИИ-разметке&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
[[File:226 Виджет элемента трассы. Результат ИИ-разметки.png|thumb|none|x150px|Виджет элемента трассы. Результат ИИ-разметки]]&lt;br /&gt;
&lt;br /&gt;
=== Групповая разметка маркеров ===&lt;br /&gt;
Чтобы разметить несколько маркеров с помощью ИИ-ассистента одновременно:&lt;br /&gt;
:1. Если планируется разметить большое количество маркеров, то для ускорения составления прогноза запустите предварительный рассчет (опционально) – на вкладке [[Help:UI manual#Вкладка «Информация о снимке»|'''Информация о снимке''']] [[Help:UI manual#Функции центральной панели|центральной панели]] нажмите кнопку '''Проанализировать с AI'''.&lt;br /&gt;
:Расчет прогнозируемого статуса для каждого маркера запустится в фоновом режиме. В это время на месте кнопки будет отображаться анимированная иконка ожидания.&lt;br /&gt;
:[[File:228 Информация о снимке. Предварительный расчет.png|thumb|none|x200px|Информация о снимке. Кнопка перехода к предварительному расчету статусов маркеров]]&lt;br /&gt;
:2. Выберите маркеры для разметки – установите флажки в строках [[Help:UI manual#Таблица маркеров|таблицы]].&lt;br /&gt;
:3. Нажмите кнопку [[File:Icon AI.png|25px]] (доступна, если выбраны маркеры в таблице).&lt;br /&gt;
:4. В открывшемся окне разметки:&lt;br /&gt;
::а) Выберите модель AI, с помощью которой ИИ-ассистент рассчитает статус разметки.&lt;br /&gt;
::Спрогнозированные статусы и уровни доверия прогнозу отобразятся в этом же окне в таблице маркеров. При этом размеченные ранее маркеры окрашены в цвет, соответствующий выставленному статусу. &lt;br /&gt;
::В таблице доступна сортировка значений в столбцах '''Детектор''', '''Файл''', '''Строка''' и '''Уровень доверия''', а в столбце '''Статус разметки''' доступна фильтрация по значению прогнозируемого статуса.&lt;br /&gt;
::б) Введите комментарий.&lt;br /&gt;
::в) Выберите маркеры, которые требуется разметить, – установите флажки в столбце '''Статус разметки'''.&lt;br /&gt;
::Если маркер уже размечен и его статус совпадает с прогнозным, то он недоступен для установки флажка.&lt;br /&gt;
::г) Нажмите кнопку '''Применить'''.&lt;br /&gt;
:[[File:229 Окно групповой ИИ-разметки.png|thumb|none|x300px|Окно групповой ИИ-разметки]]&lt;br /&gt;
:Прогресс разметки отображается в соответствующем окне. Запущенный процесс можно полностью отменить нажатием кнопки '''Отмена'''.&lt;br /&gt;
:[[File:56 Окно прогресса разметки.png|thumb|none|x100px|Окно прогресса разметки]]&lt;br /&gt;
=== Фильтрация маркеров по режиму разметки ===&lt;br /&gt;
По умолчанию в [[Help:UI manual#Таблица маркеров|таблице маркеров]] отображаются все маркеры: как размеченные вручную, так и размеченные с помощью ИИ-ассистента.&lt;br /&gt;
Чтобы отобразить маркеры только с одним режимом разметки, воспользуйтесь [[Help:UI manual#Настройка и использование пользовательских фильтров|пользовательскими фильтрами]]:&lt;br /&gt;
* для отображения только маркеров, размеченных вручную, выберите фильтр '''Режим разметки''' – '''Вручную''';&lt;br /&gt;
* для отображения только маркеров, размеченных с помощью ИИ-ассистента, выберите фильтр '''Режим разметки''' – '''С помощью ИИ'''.&lt;br /&gt;
[[File:230 Пользовательские фильтры. Режимы разметки.png|thumb|none|x400px|Пользовательские фильтры. Режимы разметки]]&lt;br /&gt;
&lt;br /&gt;
== Описание модели xgb.joblib ИИ-ассистента ==&lt;br /&gt;
&lt;br /&gt;
Модель обучена на базе 50000+ размеченных предупреждений.&lt;br /&gt;
&lt;br /&gt;
Для предсказания статуса разметки нами используются:&lt;br /&gt;
# языковая модель codebert-base для получения эмбеддингов кода;&lt;br /&gt;
# метод градиентного бустинга (xgboost) для решения задачи классификации.&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:AIAssistant&amp;diff=2989</id>
		<title>Help:XSvacer:AIAssistant</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:AIAssistant&amp;diff=2989"/>
		<updated>2025-05-30T07:30:31Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: Separate deployment manual from common description&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note|text=Данная функциональность входит в набор расширений XSvacer}}&lt;br /&gt;
&lt;br /&gt;
== Поддержка ИИ-ассистента для разметки предупреждений ==&lt;br /&gt;
&lt;br /&gt;
Данная функциональность позволяет использовать модель машинного обучения (ИИ) для помощи при разметке предупреждений.&lt;br /&gt;
&lt;br /&gt;
ИИ-ассистент предназначен для разметки предупреждений статусами &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;Confirmed&amp;lt;/code&amp;gt; и &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;False Positive&amp;lt;/code&amp;gt;, которые были предсказаны моделью машинного обучения.&lt;br /&gt;
&lt;br /&gt;
Все данные предупреждений хранятся в Svacer и получаются ИИ-ассистентом с помощью REST API.&lt;br /&gt;
&lt;br /&gt;
{{Note|text=[[Help:XSvacer:AIAssistant:Deploy|Инструкция по активации и запуску функциональности]] ИИ-ассистента}}&lt;br /&gt;
&lt;br /&gt;
== Описание интерфейса ИИ-ассистента==&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:AIAssistant:Deploy&amp;diff=2988</id>
		<title>Help:XSvacer:AIAssistant:Deploy</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:AIAssistant:Deploy&amp;diff=2988"/>
		<updated>2025-05-30T07:27:08Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: Separate deployment manual from common description&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Активация и запуск функциональности ==&lt;br /&gt;
&lt;br /&gt;
ИИ-ассистент реализован в виде отдельного сервиса, взаимодействующего со Svacer по REST API. Для его запуска необходимо:&lt;br /&gt;
&lt;br /&gt;
# Активировать функциональность при запуске Svacer и настроить доступ к ИИ-ассистенту;&lt;br /&gt;
# Развернуть и запустить сервис ИИ-ассистента;&lt;br /&gt;
&lt;br /&gt;
=== Активация функциональности &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer&amp;lt;/code&amp;gt; при запуске Svacer ===&lt;br /&gt;
&lt;br /&gt;
Для активации функциональности необходимо указать флаг &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features aiAssistant&amp;lt;/code&amp;gt; при запуске Svacer.&lt;br /&gt;
&lt;br /&gt;
==== Настройка доступа к ИИ-ассистенту в Svacer ====&lt;br /&gt;
&lt;br /&gt;
По умолчанию Svacer будет пытаться подключиться к ИИ-ассистенту по адресу &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:8081/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить адрес, по которому Svacer будет подключаться к ИИ-ассистенту, можно одним из способов:&lt;br /&gt;
&lt;br /&gt;
# При запуске Svacer установить переменную окружения &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;XSVACER_AIASSISTANT_ASSISTANTHOSTURL=http://{адрес ИИ-ассистента}:{порт}/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# В конфигурационном файле &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; добавить раздел&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
xsvacer:&lt;br /&gt;
  ...&lt;br /&gt;
  aiAssistant:&lt;br /&gt;
    assistantHostUrl: http://{адрес ИИ-ассистента}:{порт}/&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Настройка значения флага &amp;lt;code&amp;gt;--public-url&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
В связи с тем, что ИИ-ассистент использует REST API Svacer, необходимо добавить url ИИ-ассистента в список публичных url Svacer. Это можно сделать, добавив при запуске Svacer флаг:&lt;br /&gt;
&lt;br /&gt;
 --public-url {url ИИ-ассистента}&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;--xsvacer.features aiAssistant --public-url https://svacer-ai-demo.ispras.ru&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note|text=Данная настройка связана с функциональностью генерации коротких ссылок}}&lt;br /&gt;
&lt;br /&gt;
=== Развёртывание и запуск ИИ-ассистента ===&lt;br /&gt;
&lt;br /&gt;
При развёртывании ИИ-ассистента необходимо выполнить следующие действия:&lt;br /&gt;
&lt;br /&gt;
# Запустить docker-контейнер с моделью машинного обучения;&lt;br /&gt;
# При необходимости: развернуть postresql-сервер для хранения базы данных ИИ-ассистента;&lt;br /&gt;
# Запустить сервис ИИ-ассистента.&lt;br /&gt;
&lt;br /&gt;
==== Запуск docker-контейнера с моделью машинного обучения ====&lt;br /&gt;
&lt;br /&gt;
Docker-образ контейнера с моделью можно скачать по ссылке: https://svacer.ispras.ru/docker/images/svacer-ai-model-host.1.0.0.tar.gz (3.3GB)&lt;br /&gt;
&lt;br /&gt;
Далее docker-образ необходимо загрузить на docker-хост с помощью команды&lt;br /&gt;
&lt;br /&gt;
 docker image load -i /path/to/svacer-ai-model-host.1.0.0.tar.gz&lt;br /&gt;
&lt;br /&gt;
После этого docker-контейнер может быть запущен следующей командой&lt;br /&gt;
&lt;br /&gt;
 docker volume create svacer-ai-cache&lt;br /&gt;
 docker volume create svacer-ai-pgdata&lt;br /&gt;
 docker run -d --name svacer-ai-model-host -p 7000:8000 -v svacer-ai-pgdata:/var/lib/postgresql/data -v svacer-ai-cache:/root/.cache svacer-ai-model-host:1.0.0&lt;br /&gt;
&lt;br /&gt;
Том &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;cache&amp;lt;/code&amp;gt; будет содержать кэш сервиса взаимодействия с моделью машинного обучения.&lt;br /&gt;
&lt;br /&gt;
Том &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;pgdata&amp;lt;/code&amp;gt; будет содержать файлы с данными встроенного в docker-образ postgres'а.&lt;br /&gt;
&lt;br /&gt;
Порт &amp;lt;code&amp;gt;7000&amp;lt;/code&amp;gt; будет использоваться по умолчанию, если не были изменены [[#Параметры подключения сервиса модели машинного обучения|параметры подключения сервиса машинного обучения]]&lt;br /&gt;
&lt;br /&gt;
==== Запуск ИИ-ассистента ====&lt;br /&gt;
&lt;br /&gt;
Исполняемый файл ИИ-ассистента можно скачать по ссылке: https://svacer.ispras.ru/releases/svacer-ai/svacer-ai-1-0-0-linux.tar.gz (53MB)&lt;br /&gt;
&lt;br /&gt;
После этого ИИ-ассистент может быть запущен командой &amp;lt;code&amp;gt;svacerai-server run&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Флаги команды запуска ИИ-ассистента =====&lt;br /&gt;
&lt;br /&gt;
Глобальные флаги &amp;lt;code&amp;gt;svacerai-server help&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 NAME:&lt;br /&gt;
    svacerai-server - Svace AI server&lt;br /&gt;
 &lt;br /&gt;
 USAGE:&lt;br /&gt;
    svacerai-server [global options] command [command options] [arguments...]&lt;br /&gt;
 &lt;br /&gt;
 COMMANDS:&lt;br /&gt;
    run&lt;br /&gt;
    help, h  Shows a list of commands or help for one command&lt;br /&gt;
 &lt;br /&gt;
 GLOBAL OPTIONS:&lt;br /&gt;
    --debug            (default: false) [$SVACER_AI_DEBUG]&lt;br /&gt;
    --log-level value  Defines log level. Available: info, warn, error [$SVACER_AI_LOG_LEVEL]&lt;br /&gt;
    --log value        Defines path to log file. By default file /tmp/svacer-ai-*.log will be created.&lt;br /&gt;
    --config value     Define path to file with config in YAML format (by default svacer-ai.cfg).&lt;br /&gt;
    --help, -h         show help&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|debug&lt;br /&gt;
|bool&lt;br /&gt;
|Отладочный режим логирования&lt;br /&gt;
|-&lt;br /&gt;
|log-level&lt;br /&gt;
|string&lt;br /&gt;
|Уровень логирования&lt;br /&gt;
|-&lt;br /&gt;
|log&lt;br /&gt;
|string&lt;br /&gt;
|Путь к файлу с логами&lt;br /&gt;
|-&lt;br /&gt;
|config&lt;br /&gt;
|string&lt;br /&gt;
|Путь к [[#Конфигурация по умолчанию|конфигурационному файлу]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Флаги запуска ИИ-ассистента &amp;lt;code&amp;gt;svacerai-server run help&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 NAME:&lt;br /&gt;
    svacerai-server run&lt;br /&gt;
 &lt;br /&gt;
 USAGE:&lt;br /&gt;
    svacerai-server run [command options] [arguments...]&lt;br /&gt;
 &lt;br /&gt;
 OPTIONS:&lt;br /&gt;
    --pg value                           Defines PostgreSQL connection URL&lt;br /&gt;
    --host value                         Defines host name for the server&lt;br /&gt;
    --svacer-host value                  Defines remote Svacer host&lt;br /&gt;
    --ai-host value [ --ai-host value ]  Specify the address of the service with AI models in the format &amp;lt;nowiki&amp;gt;{host id}:{http://{host address}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
    --help, -h                           show help&lt;br /&gt;
&lt;br /&gt;
{{Note|text=С помощью флагов запуска можно переопределять наиболее часто меняющиеся [[#Конфигурация по умолчанию|параметры конфигурации]] без необходимости создания файла &amp;lt;code&amp;gt;svacer-ai.cfg&amp;lt;/code&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Формат&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 80px&amp;quot;|pg&lt;br /&gt;
|string&lt;br /&gt;
|Строка подключения к базе данных ИИ-ассистента&lt;br /&gt;
|https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING-URIS&lt;br /&gt;
|-&lt;br /&gt;
|host&lt;br /&gt;
|string&lt;br /&gt;
|Адрес сетевого интерфейса и порт, на которых будет запущен ИИ-ассистент&lt;br /&gt;
|&amp;lt;code&amp;gt;{ip адрес}:{порт}&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|svacer-host&lt;br /&gt;
|string&lt;br /&gt;
|Url сервиса Svacer, к API которого будет обращаться ИИ-ассистент&lt;br /&gt;
|https://en.wikipedia.org/wiki/URL#Syntax&lt;br /&gt;
|-&lt;br /&gt;
|ai-host&lt;br /&gt;
|[]string&lt;br /&gt;
|Url сервиса с моделями машинного обучения&lt;br /&gt;
|https://en.wikipedia.org/wiki/URL#Syntax&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;svacerai-server run --pg postgres://svace:svace@127.0.0.1:5432/svacer_ai --host localhost:8095 --svacer-host http://localhost:8094&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация ИИ-ассистента ===&lt;br /&gt;
&lt;br /&gt;
Управление настройками ИИ-ассистента осуществляется с помощью конфигурационного yaml-файла &amp;lt;code&amp;gt;svacer-ai.cfg&amp;lt;/code&amp;gt; в рабочей директории сервиса.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
|db/url&lt;br /&gt;
|string&lt;br /&gt;
|Строка подключения к базе данных ИИ-ассистента&lt;br /&gt;
|&amp;lt;code&amp;gt;postgres://postgres:postgres@localhost:5432/svacer_ai?sslmode=disable&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|http/host&lt;br /&gt;
|string&lt;br /&gt;
|Адрес сетевого интерфейса и порт, на которых будет запущен ИИ-ассистент&lt;br /&gt;
|&amp;lt;code&amp;gt;localhost:8081&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|http/svacerHostUrl&lt;br /&gt;
&lt;br /&gt;
ai/svacerHostUrl&lt;br /&gt;
|string&lt;br /&gt;
|Url сервиса Svacer, к API которого будет обращаться ИИ-ассистент&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:8080/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|http/svacerClientTlsCfg?&lt;br /&gt;
&lt;br /&gt;
ai/svacerClientTlsCfg&lt;br /&gt;
|[https://pkg.go.dev/crypto/tls#Config *tls.Config]&lt;br /&gt;
|Настройки безопасного подключения к Svacer&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
svacerClientTlsCfg:&lt;br /&gt;
  insecureSkipVerify: true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|ai/svacerReviewCommentTemplate&lt;br /&gt;
|string&lt;br /&gt;
|Шаблон для формирования комментария к разметке выполненной с помощью ИИ-ассистента. В шаблон передаётся структура &amp;lt;code&amp;gt;processing.MarkerResult&amp;lt;/code&amp;gt;&lt;br /&gt;
|См. [[#Конфигурация по умолчанию|конфигурацию по умолчанию]]&lt;br /&gt;
|-&lt;br /&gt;
|ai/svacerReviewTags&lt;br /&gt;
|[]string&lt;br /&gt;
|Список названий меток, которые будут установлены маркерам, размеченным с помощью ИИ-ассистента&lt;br /&gt;
|&amp;lt;code&amp;gt;[AI]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|hosts&lt;br /&gt;
|map[string]object&lt;br /&gt;
|Список параметров подключения к сервисам с моделями машинного обучения, которые будет использовать ИИ-ассистент&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{id сервиса}:&lt;br /&gt;
  {параметры подключения}&lt;br /&gt;
  (см. описание ниже)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры подключения сервиса модели машинного обучения ====&lt;br /&gt;
&lt;br /&gt;
Параметры подключения сервисов модели задаются в виде map, ключами которой являются идентификаторы сервисов. В значении содержатся следующие параметры:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
|url&lt;br /&gt;
|string&lt;br /&gt;
|Url сервиса с моделями машинного обучения&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:7000&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|settings/requestBatchSize&lt;br /&gt;
|int&lt;br /&gt;
|Количество предупреждений, отправляемых для анализа моделью за раз&lt;br /&gt;
|&amp;lt;code&amp;gt;512&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|settings/httpMultipartParameterName&lt;br /&gt;
&lt;br /&gt;
settings/httpMultipartFileName&lt;br /&gt;
&lt;br /&gt;
settings/httpMultipartContentType&lt;br /&gt;
|string&lt;br /&gt;
|Параметра multipart-запроса вызова модели&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
httpMultipartParameterName: &amp;quot;file&amp;quot;&lt;br /&gt;
httpMultipartFileName: &amp;quot;file.csv&amp;quot;&lt;br /&gt;
httpMultipartContentType: &amp;quot;application/vnd.ms-excel&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|resources/modelList&lt;br /&gt;
&lt;br /&gt;
resources/modelInference&lt;br /&gt;
&lt;br /&gt;
resources/logs&lt;br /&gt;
|string&lt;br /&gt;
|Сопоставление названий ресурсов сервиса моделей&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
modelList: &amp;quot;/models_info&amp;quot;&lt;br /&gt;
&lt;br /&gt;
modelInference: &amp;quot;/use_model_for_file&amp;quot;&lt;br /&gt;
&lt;br /&gt;
logs: &amp;quot;/log_file&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|defaults/dataCollector/csvSeparator&lt;br /&gt;
|string&lt;br /&gt;
|Разделитель csv-файла, который отправляется в сервис моделей&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|defaults/dataCollector/additionalLineNumber&lt;br /&gt;
|int&lt;br /&gt;
|Количество строк исходного кода, которые добавляются до и после строки предупреждения при отправке в сервис моделей&lt;br /&gt;
|&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|defaults/dataCollector/csvColumns&lt;br /&gt;
|[]string&lt;br /&gt;
|Названия столбцов csv-файла, который отправляется в сервис моделей&lt;br /&gt;
|&amp;lt;code&amp;gt;[id, warnClass, code]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|defaults/interpretation/defaultValue&lt;br /&gt;
&lt;br /&gt;
defaults/interpretation/defaultValue&lt;br /&gt;
&lt;br /&gt;
defaults/interpretation/defaultValue&lt;br /&gt;
|string&lt;br /&gt;
|Названия статусов, которые присваиваются результату вызова модели&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
defaultValue: &amp;quot;Undecided&amp;quot;&lt;br /&gt;
&lt;br /&gt;
leftClassValue: &amp;quot;False Positive&amp;quot;&lt;br /&gt;
&lt;br /&gt;
rightClassValue: &amp;quot;Confirmed&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация по умолчанию ===&lt;br /&gt;
&lt;br /&gt;
Данная конфигурация применяется по умолчанию при запуске ИИ-ассистента, если отсутствует конфигурационный файл &amp;lt;code&amp;gt;svacer-ai.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Note|type=error|text=Если файл &amp;lt;code&amp;gt;svacer-ai.cfg&amp;lt;/code&amp;gt; существует, в нём должны содержаться все указанные параметры конфигурации.'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
varSvacerHostUrl: &amp;amp;svacerHostUrl &amp;quot;http://localhost:8080/&amp;quot;&lt;br /&gt;
varSvacerClientTlsCfg: &amp;amp;svacerClientTlsCfg&lt;br /&gt;
  insecureSkipVerify: true&lt;br /&gt;
db:&lt;br /&gt;
  url: &amp;quot;postgres://postgres:postgres@localhost:5432/svacer_ai?sslmode=disable&amp;quot;&lt;br /&gt;
http:&lt;br /&gt;
  host: &amp;quot;localhost:8081&amp;quot;&lt;br /&gt;
  svacerHostUrl: *svacerHostUrl&lt;br /&gt;
  svacerClientTlsCfg: *svacerClientTlsCfg&lt;br /&gt;
ai:&lt;br /&gt;
  svacerHostUrl: *svacerHostUrl&lt;br /&gt;
  svacerClientTlsCfg: *svacerClientTlsCfg&lt;br /&gt;
  svacerReviewCommentTemplate: |+&lt;br /&gt;
    `Timestamp: {{now.UTC.Format &amp;quot;2006-01-02T15:04:05Z&amp;quot;}}`&lt;br /&gt;
&lt;br /&gt;
    `AI model: {{.Pipeline.Name}}`&lt;br /&gt;
&lt;br /&gt;
    `Confidence level: {{ printf &amp;quot;%.2f&amp;quot; (index .Interpretation 0).Confidence }}`&lt;br /&gt;
&lt;br /&gt;
  svacerReviewTags:&lt;br /&gt;
    - AI&lt;br /&gt;
  hosts:&lt;br /&gt;
    server-status:&lt;br /&gt;
      url: &amp;quot;http://localhost:7000&amp;quot;&lt;br /&gt;
      settings:&lt;br /&gt;
        requestBatchSize: 512&lt;br /&gt;
        httpMultipartParameterName: &amp;quot;file&amp;quot;&lt;br /&gt;
        httpMultipartFileName: &amp;quot;file.csv&amp;quot;&lt;br /&gt;
        httpMultipartContentType: &amp;quot;application/vnd.ms-excel&amp;quot;&lt;br /&gt;
      resources:&lt;br /&gt;
        modelList: &amp;quot;/models_info&amp;quot;&lt;br /&gt;
        modelInference: &amp;quot;/use_model_for_file&amp;quot;&lt;br /&gt;
        logs: &amp;quot;/log_file&amp;quot;&lt;br /&gt;
      defaults:&lt;br /&gt;
        dataCollector:&lt;br /&gt;
          csvSeparator: &amp;quot;,&amp;quot;&lt;br /&gt;
          additionalLinesNumber: 0&lt;br /&gt;
          csvColumns:&lt;br /&gt;
            - &amp;quot;id&amp;quot;&lt;br /&gt;
            - &amp;quot;warnClass&amp;quot;&lt;br /&gt;
            - &amp;quot;code&amp;quot;&lt;br /&gt;
        interpretation: &lt;br /&gt;
          defaultValue: &amp;quot;Undecided&amp;quot;&lt;br /&gt;
          leftClassValue: &amp;quot;False Positive&amp;quot;&lt;br /&gt;
          rightClassValue: &amp;quot;Confirmed&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:AIAssistant&amp;diff=2984</id>
		<title>Help:XSvacer:AIAssistant</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:AIAssistant&amp;diff=2984"/>
		<updated>2025-05-27T09:49:14Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: --public-url description&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note|text=Данная функциональность входит в набор расширений XSvacer}}&lt;br /&gt;
&lt;br /&gt;
== Поддержка ИИ-ассистента для разметки предупреждений ==&lt;br /&gt;
&lt;br /&gt;
Данная функциональность позволяет использовать модель машинного обучения (ИИ) для помощи при разметке предупреждений.&lt;br /&gt;
&lt;br /&gt;
ИИ-ассистент предназначен для разметки предупреждений статусами &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;Confirmed&amp;lt;/code&amp;gt; и &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;False Positive&amp;lt;/code&amp;gt;, которые были предсказаны моделью машинного обучения.&lt;br /&gt;
&lt;br /&gt;
Все данные предупреждений хранятся в Svacer и получаются ИИ-ассистентом с помощью REST API.&lt;br /&gt;
&lt;br /&gt;
== Активация и запуск функциональности ==&lt;br /&gt;
&lt;br /&gt;
ИИ-ассистент реализован в виде отдельного сервиса, взаимодействующего со Svacer по REST API. Для его запуска необходимо:&lt;br /&gt;
&lt;br /&gt;
# Активировать функциональность при запуске Svacer и настроить доступ к ИИ-ассистенту;&lt;br /&gt;
# Развернуть и запустить сервис ИИ-ассистента;&lt;br /&gt;
&lt;br /&gt;
=== Активация функциональности &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer&amp;lt;/code&amp;gt; при запуске Svacer ===&lt;br /&gt;
&lt;br /&gt;
Для активации функциональности необходимо указать флаг &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features aiAssistant&amp;lt;/code&amp;gt; при запуске Svacer.&lt;br /&gt;
&lt;br /&gt;
==== Настройка доступа к ИИ-ассистенту в Svacer ====&lt;br /&gt;
&lt;br /&gt;
По умолчанию Svacer будет пытаться подключиться к ИИ-ассистенту по адресу &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:8081/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить адрес, по которому Svacer будет подключаться к ИИ-ассистенту, можно одним из способов:&lt;br /&gt;
&lt;br /&gt;
# При запуске Svacer установить переменную окружения &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;XSVACER_AIASSISTANT_ASSISTANTHOSTURL=http://{адрес ИИ-ассистента}:{порт}/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# В конфигурационном файле &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; добавить раздел&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
xsvacer:&lt;br /&gt;
  ...&lt;br /&gt;
  aiAssistant:&lt;br /&gt;
    assistantHostUrl: http://{адрес ИИ-ассистента}:{порт}/&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Настройка значения флага &amp;lt;code&amp;gt;--public-url&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
В связи с тем, что ИИ-ассистент использует REST API Svacer, необходимо добавить url ИИ-ассистента в список публичных url Svacer. Это можно сделать, добавив при запуске Svacer флаг &amp;lt;code&amp;gt;--public-url {url ИИ-ассистента}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Note|text=Данная настройка связана с функциональностью генерации коротких ссылок}}&lt;br /&gt;
&lt;br /&gt;
=== Развёртывание и запуск ИИ-ассистента ===&lt;br /&gt;
&lt;br /&gt;
При развёртывании ИИ-ассистента необходимо выполнить следующие действия:&lt;br /&gt;
&lt;br /&gt;
# Запустить docker-контейнер с моделью машинного обучения;&lt;br /&gt;
# При необходимости: развернуть postresql-сервер для хранения базы данных ИИ-ассистента;&lt;br /&gt;
# Запустить сервис ИИ-ассистента.&lt;br /&gt;
&lt;br /&gt;
==== Запуск docker-контейнера с моделью машинного обучения ====&lt;br /&gt;
&lt;br /&gt;
Docker-образ контейнера с моделью можно скачать по ссылке: https://svacer.ispras.ru/docker/images/svacer-ai-model-host.1.0.0.tar.gz (3.3GB)&lt;br /&gt;
&lt;br /&gt;
Далее docker-образ необходимо загрузить на docker-хост с помощью команды&lt;br /&gt;
&lt;br /&gt;
 docker image load -i /path/to/svacer-ai-model-host.1.0.0.tar.gz&lt;br /&gt;
&lt;br /&gt;
После этого docker-контейнер может быть запущен следующей командой&lt;br /&gt;
&lt;br /&gt;
 docker volume create svacer-ai-cache&lt;br /&gt;
 docker volume create svacer-ai-pgdata&lt;br /&gt;
 docker run -d --name svacer-ai-model-host -p 7000:8000 -v svacer-ai-pgdata:/var/lib/postgresql/data -v svacer-ai-cache:/root/.cache svacer-ai-model-host:1.0.0&lt;br /&gt;
&lt;br /&gt;
Том &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;cache&amp;lt;/code&amp;gt; будет содержать кэш сервиса взаимодействия с моделью машинного обучения.&lt;br /&gt;
&lt;br /&gt;
Том &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;pgdata&amp;lt;/code&amp;gt; будет содержать файлы с данными встроенного в docker-образ postgres'а.&lt;br /&gt;
&lt;br /&gt;
Порт &amp;lt;code&amp;gt;7000&amp;lt;/code&amp;gt; будет использоваться по умолчанию, если не были изменены [[#Параметры подключения сервиса модели машинного обучения|параметры подключения сервиса машинного обучения]]&lt;br /&gt;
&lt;br /&gt;
==== Запуск ИИ-ассистента ====&lt;br /&gt;
&lt;br /&gt;
Исполняемый файл ИИ-ассистента можно скачать по ссылке: https://svacer.ispras.ru/releases/svacer-ai/svacer-ai-1-0-0-linux.tar.gz (53MB)&lt;br /&gt;
&lt;br /&gt;
После этого ИИ-ассистент может быть запущен командой &amp;lt;code&amp;gt;svacerai-server run&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Флаги команды запуска ИИ-ассистента =====&lt;br /&gt;
&lt;br /&gt;
Глобальные флаги &amp;lt;code&amp;gt;svacerai-server help&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 NAME:&lt;br /&gt;
    svacerai-server - Svace AI server&lt;br /&gt;
 &lt;br /&gt;
 USAGE:&lt;br /&gt;
    svacerai-server [global options] command [command options] [arguments...]&lt;br /&gt;
 &lt;br /&gt;
 COMMANDS:&lt;br /&gt;
    run&lt;br /&gt;
    help, h  Shows a list of commands or help for one command&lt;br /&gt;
 &lt;br /&gt;
 GLOBAL OPTIONS:&lt;br /&gt;
    --debug            (default: false) [$SVACER_AI_DEBUG]&lt;br /&gt;
    --log-level value  Defines log level. Available: info, warn, error [$SVACER_AI_LOG_LEVEL]&lt;br /&gt;
    --log value        Defines path to log file. By default file /tmp/svacer-ai-*.log will be created.&lt;br /&gt;
    --config value     Define path to file with config in YAML format (by default svacer-ai.cfg).&lt;br /&gt;
    --help, -h         show help&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|debug&lt;br /&gt;
|bool&lt;br /&gt;
|Отладочный режим логирования&lt;br /&gt;
|-&lt;br /&gt;
|log-level&lt;br /&gt;
|string&lt;br /&gt;
|Уровень логирования&lt;br /&gt;
|-&lt;br /&gt;
|log&lt;br /&gt;
|string&lt;br /&gt;
|Путь к файлу с логами&lt;br /&gt;
|-&lt;br /&gt;
|config&lt;br /&gt;
|string&lt;br /&gt;
|Путь к [[#Конфигурация по умолчанию|конфигурационному файлу]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Флаги запуска ИИ-ассистента &amp;lt;code&amp;gt;svacerai-server run help&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 NAME:&lt;br /&gt;
    svacerai-server run&lt;br /&gt;
 &lt;br /&gt;
 USAGE:&lt;br /&gt;
    svacerai-server run [command options] [arguments...]&lt;br /&gt;
 &lt;br /&gt;
 OPTIONS:&lt;br /&gt;
    --pg value                           Defines PostgreSQL connection URL&lt;br /&gt;
    --host value                         Defines host name for the server&lt;br /&gt;
    --svacer-host value                  Defines remote Svacer host&lt;br /&gt;
    --ai-host value [ --ai-host value ]  Specify the address of the service with AI models in the format &amp;lt;nowiki&amp;gt;{host id}:{http://{host address}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
    --help, -h                           show help&lt;br /&gt;
&lt;br /&gt;
{{Note|text=С помощью флагов запуска можно переопределять наиболее часто меняющиеся [[#Конфигурация по умолчанию|параметры конфигурации]] без необходимости создания файла &amp;lt;code&amp;gt;svacer-ai.cfg&amp;lt;/code&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Формат&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width: 80px&amp;quot;|pg&lt;br /&gt;
|string&lt;br /&gt;
|Строка подключения к базе данных ИИ-ассистента&lt;br /&gt;
|https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING-URIS&lt;br /&gt;
|-&lt;br /&gt;
|host&lt;br /&gt;
|string&lt;br /&gt;
|Адрес сетевого интерфейса и порт, на которых будет запущен ИИ-ассистент&lt;br /&gt;
|&amp;lt;code&amp;gt;{ip адрес}:{порт}&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|svacer-host&lt;br /&gt;
|string&lt;br /&gt;
|Url сервиса Svacer, к API которого будет обращаться ИИ-ассистент&lt;br /&gt;
|https://en.wikipedia.org/wiki/URL#Syntax&lt;br /&gt;
|-&lt;br /&gt;
|ai-host&lt;br /&gt;
|[]string&lt;br /&gt;
|Url сервиса с моделями машинного обучения&lt;br /&gt;
|https://en.wikipedia.org/wiki/URL#Syntax&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация ИИ-ассистента ===&lt;br /&gt;
&lt;br /&gt;
Управление настройками ИИ-ассистента осуществляется с помощью конфигурационного yaml-файла &amp;lt;code&amp;gt;svacer-ai.cfg&amp;lt;/code&amp;gt; в рабочей директории сервиса.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
|db/url&lt;br /&gt;
|string&lt;br /&gt;
|Строка подключения к базе данных ИИ-ассистента&lt;br /&gt;
|&amp;lt;code&amp;gt;postgres://postgres:postgres@localhost:5432/svacer_ai?sslmode=disable&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|http/host&lt;br /&gt;
|string&lt;br /&gt;
|Адрес сетевого интерфейса и порт, на которых будет запущен ИИ-ассистент&lt;br /&gt;
|&amp;lt;code&amp;gt;localhost:8081&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|http/svacerHostUrl&lt;br /&gt;
&lt;br /&gt;
ai/svacerHostUrl&lt;br /&gt;
|string&lt;br /&gt;
|Url сервиса Svacer, к API которого будет обращаться ИИ-ассистент&lt;br /&gt;
|http://localhost:8080/&lt;br /&gt;
|-&lt;br /&gt;
|http/svacerClientTlsCfg?&lt;br /&gt;
&lt;br /&gt;
ai/svacerClientTlsCfg&lt;br /&gt;
|[https://pkg.go.dev/crypto/tls#Config *tls.Config]&lt;br /&gt;
|Настройки безопасного подключения к Svacer&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
svacerClientTlsCfg:&lt;br /&gt;
  insecureSkipVerify: true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|ai/svacerReviewCommentTemplate&lt;br /&gt;
|string&lt;br /&gt;
|Шаблон для формирования комментария к разметке выполненной с помощью ИИ-ассистента. В шаблон передаётся структура &amp;lt;code&amp;gt;processing.MarkerResult&amp;lt;/code&amp;gt;&lt;br /&gt;
|См. [[#Конфигурация по умолчанию|конфигурацию по умолчанию]]&lt;br /&gt;
|-&lt;br /&gt;
|ai/svacerReviewTags&lt;br /&gt;
|[]string&lt;br /&gt;
|Список названий меток, которые будут установлены маркерам, размеченным с помощью ИИ-ассистента&lt;br /&gt;
|&amp;lt;code&amp;gt;[AI]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|hosts&lt;br /&gt;
|map[string]object&lt;br /&gt;
|Список параметров подключения к сервисам с моделями машинного обучения, которые будет использовать ИИ-ассистент&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{id сервиса}:&lt;br /&gt;
  {параметры подключения}&lt;br /&gt;
  (см. описание ниже)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры подключения сервиса модели машинного обучения ====&lt;br /&gt;
&lt;br /&gt;
Параметры подключения сервисов модели задаются в виде map, ключами которой являются идентификаторы сервисов. В значении содержатся следующие параметры:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
|url&lt;br /&gt;
|string&lt;br /&gt;
|Url сервиса с моделями машинного обучения&lt;br /&gt;
|&amp;lt;code&amp;gt;http://localhost:7000&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|settings/requestBatchSize&lt;br /&gt;
|int&lt;br /&gt;
|Количество предупреждений, отправляемых для анализа моделью за раз&lt;br /&gt;
|&amp;lt;code&amp;gt;512&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|settings/httpMultipartParameterName&lt;br /&gt;
&lt;br /&gt;
settings/httpMultipartFileName&lt;br /&gt;
&lt;br /&gt;
settings/httpMultipartContentType&lt;br /&gt;
|string&lt;br /&gt;
|Параметра multipart-запроса вызова модели&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
httpMultipartParameterName: &amp;quot;file&amp;quot;&lt;br /&gt;
httpMultipartFileName: &amp;quot;file.csv&amp;quot;&lt;br /&gt;
httpMultipartContentType: &amp;quot;application/vnd.ms-excel&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|resources/modelList&lt;br /&gt;
&lt;br /&gt;
resources/modelInference&lt;br /&gt;
&lt;br /&gt;
resources/logs&lt;br /&gt;
|string&lt;br /&gt;
|Сопоставление названий ресурсов сервиса моделей&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
modelList: &amp;quot;/models_info&amp;quot;&lt;br /&gt;
&lt;br /&gt;
modelInference: &amp;quot;/use_model_for_file&amp;quot;&lt;br /&gt;
&lt;br /&gt;
logs: &amp;quot;/log_file&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|defaults/dataCollector/csvSeparator&lt;br /&gt;
|string&lt;br /&gt;
|Разделитель csv-файла, который отправляется в сервис моделей&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;,&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|defaults/dataCollector/additionalLineNumber&lt;br /&gt;
|int&lt;br /&gt;
|Количество строк исходного кода, которые добавляются до и после строки предупреждения при отправке в сервис моделей&lt;br /&gt;
|&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|defaults/dataCollector/csvColumns&lt;br /&gt;
|[]string&lt;br /&gt;
|Названия столбцов csv-файла, который отправляется в сервис моделей&lt;br /&gt;
|&amp;lt;code&amp;gt;[id, warnClass, code]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|defaults/interpretation/defaultValue&lt;br /&gt;
&lt;br /&gt;
defaults/interpretation/defaultValue&lt;br /&gt;
&lt;br /&gt;
defaults/interpretation/defaultValue&lt;br /&gt;
|string&lt;br /&gt;
|Названия статусов, которые присваиваются результату вызова модели&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
defaultValue: &amp;quot;Undecided&amp;quot;&lt;br /&gt;
&lt;br /&gt;
leftClassValue: &amp;quot;False Positive&amp;quot;&lt;br /&gt;
&lt;br /&gt;
rightClassValue: &amp;quot;Confirmed&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация по умолчанию ===&lt;br /&gt;
&lt;br /&gt;
Данная конфигурация применяется по умолчанию при запуске ИИ-ассистента, если отсутствует конфигурационный файл &amp;lt;code&amp;gt;svacer-ai.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Note|type=error|text=Если файл &amp;lt;code&amp;gt;svacer-ai.cfg&amp;lt;/code&amp;gt; существует, в нём должны содержаться все указанные параметры конфигурации.'''}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
varSvacerHostUrl: &amp;amp;svacerHostUrl &amp;quot;http://localhost:8080/&amp;quot;&lt;br /&gt;
varSvacerClientTlsCfg: &amp;amp;svacerClientTlsCfg&lt;br /&gt;
  insecureSkipVerify: true&lt;br /&gt;
db:&lt;br /&gt;
  url: &amp;quot;postgres://postgres:postgres@localhost:5432/svacer_ai?sslmode=disable&amp;quot;&lt;br /&gt;
http:&lt;br /&gt;
  host: &amp;quot;localhost:8081&amp;quot;&lt;br /&gt;
  svacerHostUrl: *svacerHostUrl&lt;br /&gt;
  svacerClientTlsCfg: *svacerClientTlsCfg&lt;br /&gt;
ai:&lt;br /&gt;
  svacerHostUrl: *svacerHostUrl&lt;br /&gt;
  svacerClientTlsCfg: *svacerClientTlsCfg&lt;br /&gt;
  svacerReviewCommentTemplate: |+&lt;br /&gt;
    `Timestamp: {{now.UTC.Format &amp;quot;2006-01-02T15:04:05Z&amp;quot;}}`&lt;br /&gt;
&lt;br /&gt;
    `AI model: {{.Pipeline.Name}}`&lt;br /&gt;
&lt;br /&gt;
    `Confidence level: {{ printf &amp;quot;%.2f&amp;quot; (index .Interpretation 0).Confidence }}`&lt;br /&gt;
&lt;br /&gt;
  svacerReviewTags:&lt;br /&gt;
    - AI&lt;br /&gt;
  hosts:&lt;br /&gt;
    server-status:&lt;br /&gt;
      url: &amp;quot;http://localhost:7000&amp;quot;&lt;br /&gt;
      settings:&lt;br /&gt;
        requestBatchSize: 512&lt;br /&gt;
        httpMultipartParameterName: &amp;quot;file&amp;quot;&lt;br /&gt;
        httpMultipartFileName: &amp;quot;file.csv&amp;quot;&lt;br /&gt;
        httpMultipartContentType: &amp;quot;application/vnd.ms-excel&amp;quot;&lt;br /&gt;
      resources:&lt;br /&gt;
        modelList: &amp;quot;/models_info&amp;quot;&lt;br /&gt;
        modelInference: &amp;quot;/use_model_for_file&amp;quot;&lt;br /&gt;
        logs: &amp;quot;/log_file&amp;quot;&lt;br /&gt;
      defaults:&lt;br /&gt;
        dataCollector:&lt;br /&gt;
          csvSeparator: &amp;quot;,&amp;quot;&lt;br /&gt;
          additionalLinesNumber: 0&lt;br /&gt;
          csvColumns:&lt;br /&gt;
            - &amp;quot;id&amp;quot;&lt;br /&gt;
            - &amp;quot;warnClass&amp;quot;&lt;br /&gt;
            - &amp;quot;code&amp;quot;&lt;br /&gt;
        interpretation: &lt;br /&gt;
          defaultValue: &amp;quot;Undecided&amp;quot;&lt;br /&gt;
          leftClassValue: &amp;quot;False Positive&amp;quot;&lt;br /&gt;
          rightClassValue: &amp;quot;Confirmed&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:AIAssistant&amp;diff=2973</id>
		<title>Help:XSvacer:AIAssistant</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:AIAssistant&amp;diff=2973"/>
		<updated>2025-05-26T09:02:28Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: port 7000 description&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note|text=Данная функциональность входит в набор расширений XSvacer}}&lt;br /&gt;
&lt;br /&gt;
= Поддержка ИИ-ассистента для разметки предупреждений =&lt;br /&gt;
&lt;br /&gt;
Данная функциональность позволяет использовать модель машинного обучения (ИИ) для помощи при разметке предупреждений.&lt;br /&gt;
&lt;br /&gt;
ИИ-ассистент предназначен для разметки предупреждений статусами &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;Confirmed&amp;lt;/code&amp;gt; и &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;False Positive&amp;lt;/code&amp;gt;, которые были предсказаны моделью машинного обучения.&lt;br /&gt;
&lt;br /&gt;
Все данные предупреждений хранятся в Svacer и получаются ИИ-ассистентом с помощью REST API.&lt;br /&gt;
&lt;br /&gt;
= Активация и запуск функциональности =&lt;br /&gt;
&lt;br /&gt;
ИИ-ассистент реализован в виде отдельного сервиса, взаимодействующего со Svacer по REST API. Для его запуска необходимо:&lt;br /&gt;
&lt;br /&gt;
# Активировать функциональность при запуске Svacer и настроить доступ к ИИ-асстистенту;&lt;br /&gt;
# Развернуть и запустить сервис ИИ-ассистента;&lt;br /&gt;
&lt;br /&gt;
== Активация функциональности &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer&amp;lt;/code&amp;gt; при запуске Svacer ==&lt;br /&gt;
&lt;br /&gt;
Для активации функциональности необходимо указать флаг &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features aiAssistant&amp;lt;/code&amp;gt; при запуске Svacer.&lt;br /&gt;
&lt;br /&gt;
=== Настройка доступа к ИИ-ассистенту в Svacer ===&lt;br /&gt;
&lt;br /&gt;
По умолчанию Svacer будет пытаться подключиться к ИИ-ассистенту по адресу &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:8081/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить адрес по которому Svacer будет подключаться к ИИ-ассистенту можно сделать одним из способов:&lt;br /&gt;
&lt;br /&gt;
# При запуске Svacer установить переменную окружения &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;XSVACER_AIASSISTANT_ASSISTANTHOSTURL=http://{адрес ИИ-ассистена}:{порт}/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# В конфигурационном файле &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; добавить раздел&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
xsvacer:&lt;br /&gt;
  ...&lt;br /&gt;
  aiAssistant:&lt;br /&gt;
    assistantHostUrl: http://{адрес ИИ-ассистена}:{порт}/&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Развёртывание и запуск ИИ-ассистента ==&lt;br /&gt;
&lt;br /&gt;
При развёртывании ИИ-ассистента необходимо выполнить следующие действия:&lt;br /&gt;
&lt;br /&gt;
# Запустить docker-контейнер с моделью машинного обучения;&lt;br /&gt;
# При необходимости: развернуть postresql-сервер для хранения базы данных ИИ-ассистента;&lt;br /&gt;
# Запустить сервис ИИ-ассистента.&lt;br /&gt;
&lt;br /&gt;
=== Запуск docker-контейнера с моделью машинного обучения ===&lt;br /&gt;
&lt;br /&gt;
Docker-образ контейнера с моделью можно скачать по ссылке - https://svacer.ispras.ru/docker/images/svacer-ai-model-host.1.0.0.tar.gz (3.3GB)&lt;br /&gt;
&lt;br /&gt;
Далее docker-образ необходимо загрузить на docker-хост с помощью команды&lt;br /&gt;
&lt;br /&gt;
 docker image load -i /path/to/svacer-ai-model-host.1.0.0.tar.gz&lt;br /&gt;
&lt;br /&gt;
После этого docker-контейнер может быть запущен следующей командой&lt;br /&gt;
&lt;br /&gt;
 docker volume create svacer-ai-cache&lt;br /&gt;
 docker volume create svacer-ai-pgdata&lt;br /&gt;
 docker run -d --name svacer-ai-model-host -p 7000:8000 -v svacer-ai-pgdata:/var/lib/postgresql/data -v svacer-ai-cache:/root/.cache svacer-ai-model-host:1.0.0&lt;br /&gt;
&lt;br /&gt;
Том &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;cache&amp;lt;/code&amp;gt; будет содержать кеш сервиса взаимодействия с моделью машинного обучения.&lt;br /&gt;
&lt;br /&gt;
Том &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;pgdata&amp;lt;/code&amp;gt; будет содержать файлы с данными встроенного в docker-образ postgres'а.&lt;br /&gt;
&lt;br /&gt;
Порт &amp;lt;code&amp;gt;7000&amp;lt;/code&amp;gt; будет использоваться по умолчанию, если не были изменены [[#Параметры подключения сервиса модели машинного обучения|параметры подключения сервиса машинного обучения]]&lt;br /&gt;
&lt;br /&gt;
=== Запуск ИИ-ассистента ===&lt;br /&gt;
&lt;br /&gt;
Исполняемый файл ИИ-ассистента можно скачать по ссылке - https://svacer.ispras.ru/releases/svacer-ai/svacer-ai-1-0-0-linux.tar.gz (53MB)&lt;br /&gt;
&lt;br /&gt;
После этого ИИ-ассистент может быть запущен командой &amp;lt;code&amp;gt;svacerai-server run&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Флаги команды запуска ИИ-ассистента ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Глобальные&amp;quot; флаги &amp;lt;code&amp;gt;svacerai-server help&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 NAME:&lt;br /&gt;
    svacerai-server - Svace AI server&lt;br /&gt;
 &lt;br /&gt;
 USAGE:&lt;br /&gt;
    svacerai-server [global options] command [command options] [arguments...]&lt;br /&gt;
 &lt;br /&gt;
 COMMANDS:&lt;br /&gt;
    run&lt;br /&gt;
    help, h  Shows a list of commands or help for one command&lt;br /&gt;
 &lt;br /&gt;
 GLOBAL OPTIONS:&lt;br /&gt;
    --debug            (default: false) [$SVACER_AI_DEBUG]&lt;br /&gt;
    --log-level value  Defines log level. Available: info, warn, error [$SVACER_AI_LOG_LEVEL]&lt;br /&gt;
    --log value        Defines path to log file. By default file /tmp/svacer-ai-*.log will be created.&lt;br /&gt;
    --config value     Define path to file with config in YAML format (by default svacer-ai.cfg).&lt;br /&gt;
    --help, -h         show help&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|debug&lt;br /&gt;
|bool&lt;br /&gt;
|Отладочный режим логирования&lt;br /&gt;
|-&lt;br /&gt;
|log-level&lt;br /&gt;
|string&lt;br /&gt;
|Уровень логирования&lt;br /&gt;
|-&lt;br /&gt;
|log&lt;br /&gt;
|string&lt;br /&gt;
|Путь к файлу с логами&lt;br /&gt;
|-&lt;br /&gt;
|config&lt;br /&gt;
|string&lt;br /&gt;
|Путь к [[#Конфигурация по молчанию|конфигурационному файлу]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Флаги запуска ИИ-ассистента &amp;lt;code&amp;gt;svacerai-server run help&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 NAME:&lt;br /&gt;
    svacerai-server run&lt;br /&gt;
 &lt;br /&gt;
 USAGE:&lt;br /&gt;
    svacerai-server run [command options] [arguments...]&lt;br /&gt;
 &lt;br /&gt;
 OPTIONS:&lt;br /&gt;
    --pg value                           Defines PostgreSQL connection URL&lt;br /&gt;
    --host value                         Defines host name for the server&lt;br /&gt;
    --svacer-host value                  Defines remote Svacer host&lt;br /&gt;
    --ai-host value [ --ai-host value ]  Specify the address of the service with AI models in the format &amp;lt;nowiki&amp;gt;{host id}:{http://{host address}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
    --help, -h                           show help&lt;br /&gt;
&lt;br /&gt;
{{Note|text=С помощью флагов запуска можно переопределять наиболее часто меняющиеся [[#Конфигурация по умолчанию|параметры конфигурации]] без необходимости создания файла &amp;lt;code&amp;gt;svacer-ai.cfg&amp;lt;/code&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|pg&lt;br /&gt;
|string&lt;br /&gt;
|Строка подключения к базе данных ИИ-ассистента&lt;br /&gt;
|-&lt;br /&gt;
|host&lt;br /&gt;
|string&lt;br /&gt;
|Адрес сетевого интерфейса и порт на которых будет запущен ИИ-ассистент&lt;br /&gt;
|-&lt;br /&gt;
|svacer-host&lt;br /&gt;
|string&lt;br /&gt;
|Адрес сервиса Svacer к API которого будет обращаться ИИ-ассистент&lt;br /&gt;
|-&lt;br /&gt;
|ai-host&lt;br /&gt;
|[]string&lt;br /&gt;
|Адреса сервиса с моделями машинного обучения&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Конфигурация ИИ-ассистента ==&lt;br /&gt;
&lt;br /&gt;
Управление настройками ИИ-ассистента осуществляется с помощью конфигурационного yaml-файла &amp;lt;code&amp;gt;svacer-ai.cfg&amp;lt;/code&amp;gt; в рабочей директории сервиса.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
|db/url&lt;br /&gt;
|string&lt;br /&gt;
|Строка подключения к базе данных ИИ-ассистента&lt;br /&gt;
|postgres://postgres:postgres@localhost:5432/svacer_ai?sslmode=disable&lt;br /&gt;
|-&lt;br /&gt;
|http/host&lt;br /&gt;
|string&lt;br /&gt;
|Адрес сетевого интерфейса и порт на которых будет запущен ИИ-ассистент&lt;br /&gt;
|localhost:8081&lt;br /&gt;
|-&lt;br /&gt;
|http/svacerHostUrl&lt;br /&gt;
&lt;br /&gt;
ai/svacerHostUrl&lt;br /&gt;
|string&lt;br /&gt;
|Адрес сервиса Svacer к API которого будет обращаться ИИ-ассистент&lt;br /&gt;
|http://localhost:8080/&lt;br /&gt;
|-&lt;br /&gt;
|http/svacerClientTlsCfg?&lt;br /&gt;
&lt;br /&gt;
ai/svacerClientTlsCfg&lt;br /&gt;
|[https://pkg.go.dev/crypto/tls#Config *tls.Config]&lt;br /&gt;
|Настройки безопасного подключения к Svacer&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
svacerClientTlsCfg:&lt;br /&gt;
  insecureSkipVerify: true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|ai/svacerReviewCommentTemplate&lt;br /&gt;
|string&lt;br /&gt;
|Шаблон для формирования комментария к разметке выполненной с помощью ИИ-ассистента. В шаблон передаётся структура &amp;lt;code&amp;gt;processing.MarkerResult&amp;lt;/code&amp;gt;&lt;br /&gt;
|См. [[#Конфигурация по умолчанию|конфигурацию по умолчанию]]&lt;br /&gt;
|-&lt;br /&gt;
|ai/svacerReviewTags&lt;br /&gt;
|[]string&lt;br /&gt;
|Список названий меток, которые будут установлены маркерам, размеченным с помощью ИИ-ассистента&lt;br /&gt;
|[AI]&lt;br /&gt;
|-&lt;br /&gt;
|hosts&lt;br /&gt;
|map[string]object&lt;br /&gt;
|Список параметров подключения к сервисам с моделями машинного обучения, которые будет использовать ИИ-ассистент&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{id сервиса}:&lt;br /&gt;
  {параметры подключения}&lt;br /&gt;
  (см. описание ниже)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Параметры подключения сервиса модели машинного обучения ===&lt;br /&gt;
&lt;br /&gt;
Параметры подключения сервисов модели задаются в виде map, ключами которой являются идентификаторы сервисов. В значении содержатся следующие параметры:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
|url&lt;br /&gt;
|string&lt;br /&gt;
|Адрес сервиса с моделями машинного обучения&lt;br /&gt;
|http://localhost:7000&lt;br /&gt;
|-&lt;br /&gt;
|settings/requestBatchSize&lt;br /&gt;
|int&lt;br /&gt;
|Количество предупреждений отправляемых для анализа моделью за раз&lt;br /&gt;
|512&lt;br /&gt;
|-&lt;br /&gt;
|settings/httpMultipartParameterName&lt;br /&gt;
&lt;br /&gt;
settings/httpMultipartFileName&lt;br /&gt;
&lt;br /&gt;
settings/httpMultipartContentType&lt;br /&gt;
|string&lt;br /&gt;
|Параметра multipart-запроса вызова модели&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
httpMultipartParameterName: &amp;quot;file&amp;quot;&lt;br /&gt;
httpMultipartFileName: &amp;quot;file.csv&amp;quot;&lt;br /&gt;
httpMultipartContentType: &amp;quot;application/vnd.ms-excel&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|resources/modelList&lt;br /&gt;
&lt;br /&gt;
resources/modelInference&lt;br /&gt;
&lt;br /&gt;
resources/logs&lt;br /&gt;
|string&lt;br /&gt;
|Сопоставление названий ресурсов сервиса моделей&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
modelList: &amp;quot;/models_info&amp;quot;&lt;br /&gt;
&lt;br /&gt;
modelInference: &amp;quot;/use_model_for_file&amp;quot;&lt;br /&gt;
&lt;br /&gt;
logs: &amp;quot;/log_file&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|defaults/dataCollector/csvSeparator&lt;br /&gt;
|string&lt;br /&gt;
|Разделитель csv-файла, который отправляется в сервис моделей&lt;br /&gt;
|&amp;quot;,&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|defaults/dataCollector/additionalLineNumber&lt;br /&gt;
|int&lt;br /&gt;
|Количество строк исходного кода, которые добавляются до и после строки предупреждения при отправке в сервис моделей&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|defaults/dataCollector/csvColumns&lt;br /&gt;
|[]string&lt;br /&gt;
|Названия столбцов csv-файла, который отправляется в сервис моделей&lt;br /&gt;
|[id, warnClass, code]&lt;br /&gt;
|-&lt;br /&gt;
|defaults/interpretation/defaultValue&lt;br /&gt;
&lt;br /&gt;
defaults/interpretation/defaultValue&lt;br /&gt;
&lt;br /&gt;
defaults/interpretation/defaultValue&lt;br /&gt;
|string&lt;br /&gt;
|Названия статусов, которые присваиваются результату вызова модели&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
defaultValue: &amp;quot;Undecided&amp;quot;&lt;br /&gt;
&lt;br /&gt;
leftClassValue: &amp;quot;False Positive&amp;quot;&lt;br /&gt;
&lt;br /&gt;
rightClassValue: &amp;quot;Confirmed&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Конфигурация по умолчанию ==&lt;br /&gt;
&lt;br /&gt;
Данная конфигурация применяется по умолчанию при запуске ИИ-ассистента, если отсутствует конфигурационный файл &amp;lt;code&amp;gt;svacer-ai.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Note|type=error|text=Если файл &amp;lt;code&amp;gt;svacer-ai.cfg&amp;lt;/code&amp;gt; существует, в нём должны содержаться все указанные параметры конфигурации.'''}}&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
varSvacerHostUrl: &amp;amp;svacerHostUrl &amp;quot;http://localhost:8080/&amp;quot;&lt;br /&gt;
varSvacerClientTlsCfg: &amp;amp;svacerClientTlsCfg&lt;br /&gt;
  insecureSkipVerify: true&lt;br /&gt;
db:&lt;br /&gt;
  url: &amp;quot;postgres://postgres:postgres@localhost:5432/svacer_ai?sslmode=disable&amp;quot;&lt;br /&gt;
http:&lt;br /&gt;
  host: &amp;quot;localhost:8081&amp;quot;&lt;br /&gt;
  svacerHostUrl: *svacerHostUrl&lt;br /&gt;
  svacerClientTlsCfg: *svacerClientTlsCfg&lt;br /&gt;
ai:&lt;br /&gt;
  svacerHostUrl: *svacerHostUrl&lt;br /&gt;
  svacerClientTlsCfg: *svacerClientTlsCfg&lt;br /&gt;
  svacerReviewCommentTemplate: |+&lt;br /&gt;
    `Timestamp: {{now.UTC.Format &amp;quot;2006-01-02T15:04:05Z&amp;quot;}}`&lt;br /&gt;
&lt;br /&gt;
    `AI model: {{.Pipeline.Name}}`&lt;br /&gt;
&lt;br /&gt;
    `Confidence level: {{ printf &amp;quot;%.2f&amp;quot; (index .Interpretation 0).Confidence }}`&lt;br /&gt;
&lt;br /&gt;
  svacerReviewTags:&lt;br /&gt;
    - AI&lt;br /&gt;
  hosts:&lt;br /&gt;
    server-status:&lt;br /&gt;
      url: &amp;quot;http://localhost:7000&amp;quot;&lt;br /&gt;
      settings:&lt;br /&gt;
        requestBatchSize: 512&lt;br /&gt;
        httpMultipartParameterName: &amp;quot;file&amp;quot;&lt;br /&gt;
        httpMultipartFileName: &amp;quot;file.csv&amp;quot;&lt;br /&gt;
        httpMultipartContentType: &amp;quot;application/vnd.ms-excel&amp;quot;&lt;br /&gt;
      resources:&lt;br /&gt;
        modelList: &amp;quot;/models_info&amp;quot;&lt;br /&gt;
        modelInference: &amp;quot;/use_model_for_file&amp;quot;&lt;br /&gt;
        logs: &amp;quot;/log_file&amp;quot;&lt;br /&gt;
      defaults:&lt;br /&gt;
        dataCollector:&lt;br /&gt;
          csvSeparator: &amp;quot;,&amp;quot;&lt;br /&gt;
          additionalLinesNumber: 0&lt;br /&gt;
          csvColumns:&lt;br /&gt;
            - &amp;quot;id&amp;quot;&lt;br /&gt;
            - &amp;quot;warnClass&amp;quot;&lt;br /&gt;
            - &amp;quot;code&amp;quot;&lt;br /&gt;
        interpretation: &lt;br /&gt;
          defaultValue: &amp;quot;Undecided&amp;quot;&lt;br /&gt;
          leftClassValue: &amp;quot;False Positive&amp;quot;&lt;br /&gt;
          rightClassValue: &amp;quot;Confirmed&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:AIAssistant&amp;diff=2971</id>
		<title>Help:XSvacer:AIAssistant</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:AIAssistant&amp;diff=2971"/>
		<updated>2025-05-26T08:29:20Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: svacer-ai-1.0.0-linux.tar.gz link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note|text=Данная функциональность входит в набор расширений XSvacer}}&lt;br /&gt;
&lt;br /&gt;
= Поддержка ИИ-ассистента для разметки предупреждений =&lt;br /&gt;
&lt;br /&gt;
Данная функциональность позволяет использовать модель машинного обучения (ИИ) для помощи при разметке предупреждений.&lt;br /&gt;
&lt;br /&gt;
ИИ-ассистент предназначен для разметки предупреждений статусами &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;Confirmed&amp;lt;/code&amp;gt; и &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;False Positive&amp;lt;/code&amp;gt;, которые были предсказаны моделью машинного обучения.&lt;br /&gt;
&lt;br /&gt;
Все данные предупреждений хранятся в Svacer и получаются ИИ-ассистентом с помощью REST API.&lt;br /&gt;
&lt;br /&gt;
= Активация и запуск функциональности =&lt;br /&gt;
&lt;br /&gt;
ИИ-ассистент реализован в виде отдельного сервиса, взаимодействующего со Svacer по REST API. Для его запуска необходимо:&lt;br /&gt;
&lt;br /&gt;
# Активировать функциональность при запуске Svacer и настроить доступ к ИИ-асстистенту;&lt;br /&gt;
# Развернуть и запустить сервис ИИ-ассистента;&lt;br /&gt;
&lt;br /&gt;
== Активация функциональности &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer&amp;lt;/code&amp;gt; при запуске Svacer ==&lt;br /&gt;
&lt;br /&gt;
Для активации функциональности необходимо указать флаг &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features aiAssistant&amp;lt;/code&amp;gt; при запуске Svacer.&lt;br /&gt;
&lt;br /&gt;
=== Настройка доступа к ИИ-ассистенту в Svacer ===&lt;br /&gt;
&lt;br /&gt;
По умолчанию Svacer будет пытаться подключиться к ИИ-ассистенту по адресу &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:8081/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить адрес по которому Svacer будет подключаться к ИИ-ассистенту можно сделать одним из способов:&lt;br /&gt;
&lt;br /&gt;
# При запуске Svacer установить переменную окружения &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;XSVACER_AIASSISTANT_ASSISTANTHOSTURL=http://{адрес ИИ-ассистена}:{порт}/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# В конфигурационном файле &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; добавить раздел&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
xsvacer:&lt;br /&gt;
  ...&lt;br /&gt;
  aiAssistant:&lt;br /&gt;
    assistantHostUrl: http://{адрес ИИ-ассистена}:{порт}/&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Развёртывание и запуск ИИ-ассистента ==&lt;br /&gt;
&lt;br /&gt;
При развёртывании ИИ-ассистента необходимо выполнить следующие действия:&lt;br /&gt;
&lt;br /&gt;
# Запустить docker-контейнер с моделью машинного обучения;&lt;br /&gt;
# При необходимости: развернуть postresql-сервер для хранения базы данных ИИ-ассистента;&lt;br /&gt;
# Запустить сервис ИИ-ассистента.&lt;br /&gt;
&lt;br /&gt;
=== Запуск docker-контейнера с моделью машинного обучения ===&lt;br /&gt;
&lt;br /&gt;
Docker-образ контейнера с моделью можно скачать по ссылке - https://svacer.ispras.ru/docker/images/svacer-ai-model-host.1.0.0.tar.gz (3.3GB)&lt;br /&gt;
&lt;br /&gt;
Далее docker-образ необходимо загрузить на docker-хост с помощью команды&lt;br /&gt;
&lt;br /&gt;
 docker image load -i /path/to/svacer-ai-model-host.1.0.0.tar.gz&lt;br /&gt;
&lt;br /&gt;
После этого docker-контейнер может быть запущен следующей командой&lt;br /&gt;
&lt;br /&gt;
 docker volume create svacer-ai-cache&lt;br /&gt;
 docker volume create svacer-ai-pgdata&lt;br /&gt;
 docker run -d --name svacer-ai-model-host -p 7000:8000 -v svacer-ai-pgdata:/var/lib/postgresql/data -v svacer-ai-cache:/root/.cache svacer-ai-model-host:1.0.0&lt;br /&gt;
&lt;br /&gt;
Том &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;cache&amp;lt;/code&amp;gt; будет содержать кеш сервиса взаимодействия с моделью машинного обучения.&lt;br /&gt;
&lt;br /&gt;
Том &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;pgdata&amp;lt;/code&amp;gt; будет содержать файлы с данными встроенного в docker-образ postgres'а.&lt;br /&gt;
&lt;br /&gt;
=== Запуск ИИ-ассистента ===&lt;br /&gt;
&lt;br /&gt;
Исполняемый файл ИИ-ассистента можно скачать по ссылке - https://svacer.ispras.ru/releases/svacer-ai/svacer-ai-1-0-0-linux.tar.gz&lt;br /&gt;
&lt;br /&gt;
После этого ИИ-ассистент может быть запущен командой &amp;lt;code&amp;gt;svacerai-server run&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Флаги команды запуска ИИ-ассистента ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Глобальные&amp;quot; флаги &amp;lt;code&amp;gt;svacerai-server help&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 NAME:&lt;br /&gt;
    svacerai-server - Svace AI server&lt;br /&gt;
 &lt;br /&gt;
 USAGE:&lt;br /&gt;
    svacerai-server [global options] command [command options] [arguments...]&lt;br /&gt;
 &lt;br /&gt;
 COMMANDS:&lt;br /&gt;
    run&lt;br /&gt;
    help, h  Shows a list of commands or help for one command&lt;br /&gt;
 &lt;br /&gt;
 GLOBAL OPTIONS:&lt;br /&gt;
    --debug            (default: false) [$SVACER_AI_DEBUG]&lt;br /&gt;
    --log-level value  Defines log level. Available: info, warn, error [$SVACER_AI_LOG_LEVEL]&lt;br /&gt;
    --log value        Defines path to log file. By default file /tmp/svacer-ai-*.log will be created.&lt;br /&gt;
    --config value     Define path to file with config in YAML format (by default svacer-ai.cfg).&lt;br /&gt;
    --help, -h         show help&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|debug&lt;br /&gt;
|bool&lt;br /&gt;
|Отладочный режим логирования&lt;br /&gt;
|-&lt;br /&gt;
|log-level&lt;br /&gt;
|string&lt;br /&gt;
|Уровень логирования&lt;br /&gt;
|-&lt;br /&gt;
|log&lt;br /&gt;
|string&lt;br /&gt;
|Путь к файлу с логами&lt;br /&gt;
|-&lt;br /&gt;
|config&lt;br /&gt;
|string&lt;br /&gt;
|Путь к [[#Конфигурация по молчанию|конфигурационному файлу]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Флаги запуска ИИ-ассистента &amp;lt;code&amp;gt;svacerai-server run help&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 NAME:&lt;br /&gt;
    svacerai-server run&lt;br /&gt;
 &lt;br /&gt;
 USAGE:&lt;br /&gt;
    svacerai-server run [command options] [arguments...]&lt;br /&gt;
 &lt;br /&gt;
 OPTIONS:&lt;br /&gt;
    --pg value                           Defines PostgreSQL connection URL&lt;br /&gt;
    --host value                         Defines host name for the server&lt;br /&gt;
    --svacer-host value                  Defines remote Svacer host&lt;br /&gt;
    --ai-host value [ --ai-host value ]  Specify the address of the service with AI models in the format &amp;lt;nowiki&amp;gt;{host id}:{http://{host address}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
    --help, -h                           show help&lt;br /&gt;
&lt;br /&gt;
{{Note|text=С помощью флагов запуска можно переопределять наиболее часто меняющиеся [[#Конфигурация по умолчанию|параметры конфигурации]] без необходимости создания файла &amp;lt;code&amp;gt;svacer-ai.cfg&amp;lt;/code&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|pg&lt;br /&gt;
|string&lt;br /&gt;
|Строка подключения к базе данных ИИ-ассистента&lt;br /&gt;
|-&lt;br /&gt;
|host&lt;br /&gt;
|string&lt;br /&gt;
|Адрес сетевого интерфейса и порт на которых будет запущен ИИ-ассистент&lt;br /&gt;
|-&lt;br /&gt;
|svacer-host&lt;br /&gt;
|string&lt;br /&gt;
|Адрес сервиса Svacer к API которого будет обращаться ИИ-ассистент&lt;br /&gt;
|-&lt;br /&gt;
|ai-host&lt;br /&gt;
|[]string&lt;br /&gt;
|Адреса сервиса с моделями машинного обучения&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Конфигурация ИИ-ассистента ==&lt;br /&gt;
&lt;br /&gt;
Управление настройками ИИ-ассистента осуществляется с помощью конфигурационного yaml-файла &amp;lt;code&amp;gt;svacer-ai.cfg&amp;lt;/code&amp;gt; в рабочей директории сервиса.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
|db/url&lt;br /&gt;
|string&lt;br /&gt;
|Строка подключения к базе данных ИИ-ассистента&lt;br /&gt;
|postgres://postgres:postgres@localhost:5432/svacer_ai?sslmode=disable&lt;br /&gt;
|-&lt;br /&gt;
|http/host&lt;br /&gt;
|string&lt;br /&gt;
|Адрес сетевого интерфейса и порт на которых будет запущен ИИ-ассистент&lt;br /&gt;
|localhost:8081&lt;br /&gt;
|-&lt;br /&gt;
|http/svacerHostUrl&lt;br /&gt;
&lt;br /&gt;
ai/svacerHostUrl&lt;br /&gt;
|string&lt;br /&gt;
|Адрес сервиса Svacer к API которого будет обращаться ИИ-ассистент&lt;br /&gt;
|http://localhost:8080/&lt;br /&gt;
|-&lt;br /&gt;
|http/svacerClientTlsCfg?&lt;br /&gt;
&lt;br /&gt;
ai/svacerClientTlsCfg&lt;br /&gt;
|[https://pkg.go.dev/crypto/tls#Config *tls.Config]&lt;br /&gt;
|Настройки безопасного подключения к Svacer&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
svacerClientTlsCfg:&lt;br /&gt;
  insecureSkipVerify: true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|ai/svacerReviewCommentTemplate&lt;br /&gt;
|string&lt;br /&gt;
|Шаблон для формирования комментария к разметке выполненной с помощью ИИ-ассистента. В шаблон передаётся структура &amp;lt;code&amp;gt;processing.MarkerResult&amp;lt;/code&amp;gt;&lt;br /&gt;
|См. [[#Конфигурация по умолчанию|конфигурацию по умолчанию]]&lt;br /&gt;
|-&lt;br /&gt;
|ai/svacerReviewTags&lt;br /&gt;
|[]string&lt;br /&gt;
|Список названий меток, которые будут установлены маркерам, размеченным с помощью ИИ-ассистента&lt;br /&gt;
|[AI]&lt;br /&gt;
|-&lt;br /&gt;
|hosts&lt;br /&gt;
|map[string]object&lt;br /&gt;
|Список параметров подключения к сервисам с моделями машинного обучения, которые будет использовать ИИ-ассистент&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{id сервиса}:&lt;br /&gt;
  {параметры подключения}&lt;br /&gt;
  (см. описание ниже)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Параметры подключения сервиса модели машинного обучения ===&lt;br /&gt;
&lt;br /&gt;
Параметры подключения сервисов модели задаются в виде map, ключами которой являются идентификаторы сервисов. В значении содержатся следующие параметры:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
|url&lt;br /&gt;
|string&lt;br /&gt;
|Адрес сервиса с моделями машинного обучения&lt;br /&gt;
|http://localhost:7000&lt;br /&gt;
|-&lt;br /&gt;
|settings/requestBatchSize&lt;br /&gt;
|int&lt;br /&gt;
|Количество предупреждений отправляемых для анализа моделью за раз&lt;br /&gt;
|512&lt;br /&gt;
|-&lt;br /&gt;
|settings/httpMultipartParameterName&lt;br /&gt;
&lt;br /&gt;
settings/httpMultipartFileName&lt;br /&gt;
&lt;br /&gt;
settings/httpMultipartContentType&lt;br /&gt;
|string&lt;br /&gt;
|Параметра multipart-запроса вызова модели&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
httpMultipartParameterName: &amp;quot;file&amp;quot;&lt;br /&gt;
httpMultipartFileName: &amp;quot;file.csv&amp;quot;&lt;br /&gt;
httpMultipartContentType: &amp;quot;application/vnd.ms-excel&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|resources/modelList&lt;br /&gt;
&lt;br /&gt;
resources/modelInference&lt;br /&gt;
&lt;br /&gt;
resources/logs&lt;br /&gt;
|string&lt;br /&gt;
|Сопоставление названий ресурсов сервиса моделей&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
modelList: &amp;quot;/models_info&amp;quot;&lt;br /&gt;
&lt;br /&gt;
modelInference: &amp;quot;/use_model_for_file&amp;quot;&lt;br /&gt;
&lt;br /&gt;
logs: &amp;quot;/log_file&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|defaults/dataCollector/csvSeparator&lt;br /&gt;
|string&lt;br /&gt;
|Разделитель csv-файла, который отправляется в сервис моделей&lt;br /&gt;
|&amp;quot;,&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|defaults/dataCollector/additionalLineNumber&lt;br /&gt;
|int&lt;br /&gt;
|Количество строк исходного кода, которые добавляются до и после строки предупреждения при отправке в сервис моделей&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|defaults/dataCollector/csvColumns&lt;br /&gt;
|[]string&lt;br /&gt;
|Названия столбцов csv-файла, который отправляется в сервис моделей&lt;br /&gt;
|[id, warnClass, code]&lt;br /&gt;
|-&lt;br /&gt;
|defaults/interpretation/defaultValue&lt;br /&gt;
&lt;br /&gt;
defaults/interpretation/defaultValue&lt;br /&gt;
&lt;br /&gt;
defaults/interpretation/defaultValue&lt;br /&gt;
|string&lt;br /&gt;
|Названия статусов, которые присваиваются результату вызова модели&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
defaultValue: &amp;quot;Undecided&amp;quot;&lt;br /&gt;
&lt;br /&gt;
leftClassValue: &amp;quot;False Positive&amp;quot;&lt;br /&gt;
&lt;br /&gt;
rightClassValue: &amp;quot;Confirmed&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Конфигурация по умолчанию ==&lt;br /&gt;
&lt;br /&gt;
Данная конфигурация применяется по умолчанию при запуске ИИ-ассистента, если отсутствует конфигурационный файл &amp;lt;code&amp;gt;svacer-ai.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Note|type=error|text=Если файл &amp;lt;code&amp;gt;svacer-ai.cfg&amp;lt;/code&amp;gt; существует, в нём должны содержаться все указанные параметры конфигурации.'''}}&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
varSvacerHostUrl: &amp;amp;svacerHostUrl &amp;quot;http://localhost:8080/&amp;quot;&lt;br /&gt;
varSvacerClientTlsCfg: &amp;amp;svacerClientTlsCfg&lt;br /&gt;
  insecureSkipVerify: true&lt;br /&gt;
db:&lt;br /&gt;
  url: &amp;quot;postgres://postgres:postgres@localhost:5432/svacer_ai?sslmode=disable&amp;quot;&lt;br /&gt;
http:&lt;br /&gt;
  host: &amp;quot;localhost:8081&amp;quot;&lt;br /&gt;
  svacerHostUrl: *svacerHostUrl&lt;br /&gt;
  svacerClientTlsCfg: *svacerClientTlsCfg&lt;br /&gt;
ai:&lt;br /&gt;
  svacerHostUrl: *svacerHostUrl&lt;br /&gt;
  svacerClientTlsCfg: *svacerClientTlsCfg&lt;br /&gt;
  svacerReviewCommentTemplate: |+&lt;br /&gt;
    `Timestamp: {{now.UTC.Format &amp;quot;2006-01-02T15:04:05Z&amp;quot;}}`&lt;br /&gt;
&lt;br /&gt;
    `AI model: {{.Pipeline.Name}}`&lt;br /&gt;
&lt;br /&gt;
    `Confidence level: {{ printf &amp;quot;%.2f&amp;quot; (index .Interpretation 0).Confidence }}`&lt;br /&gt;
&lt;br /&gt;
  svacerReviewTags:&lt;br /&gt;
    - AI&lt;br /&gt;
  hosts:&lt;br /&gt;
    server-status:&lt;br /&gt;
      url: &amp;quot;http://localhost:7000&amp;quot;&lt;br /&gt;
      settings:&lt;br /&gt;
        requestBatchSize: 512&lt;br /&gt;
        httpMultipartParameterName: &amp;quot;file&amp;quot;&lt;br /&gt;
        httpMultipartFileName: &amp;quot;file.csv&amp;quot;&lt;br /&gt;
        httpMultipartContentType: &amp;quot;application/vnd.ms-excel&amp;quot;&lt;br /&gt;
      resources:&lt;br /&gt;
        modelList: &amp;quot;/models_info&amp;quot;&lt;br /&gt;
        modelInference: &amp;quot;/use_model_for_file&amp;quot;&lt;br /&gt;
        logs: &amp;quot;/log_file&amp;quot;&lt;br /&gt;
      defaults:&lt;br /&gt;
        dataCollector:&lt;br /&gt;
          csvSeparator: &amp;quot;,&amp;quot;&lt;br /&gt;
          additionalLinesNumber: 0&lt;br /&gt;
          csvColumns:&lt;br /&gt;
            - &amp;quot;id&amp;quot;&lt;br /&gt;
            - &amp;quot;warnClass&amp;quot;&lt;br /&gt;
            - &amp;quot;code&amp;quot;&lt;br /&gt;
        interpretation: &lt;br /&gt;
          defaultValue: &amp;quot;Undecided&amp;quot;&lt;br /&gt;
          leftClassValue: &amp;quot;False Positive&amp;quot;&lt;br /&gt;
          rightClassValue: &amp;quot;Confirmed&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:AIAssistant&amp;diff=2968</id>
		<title>Help:XSvacer:AIAssistant</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:AIAssistant&amp;diff=2968"/>
		<updated>2025-05-25T20:43:29Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: initialization&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note|text=Данная функциональность входит в набор расширений XSvacer}}&lt;br /&gt;
&lt;br /&gt;
= Поддержка ИИ-ассистента для разметки предупреждений =&lt;br /&gt;
&lt;br /&gt;
Данная функциональность позволяет использовать модель машинного обучения (ИИ) для помощи при разметке предупреждений.&lt;br /&gt;
&lt;br /&gt;
ИИ-ассистент предназначен для разметки предупреждений статусами &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;Confirmed&amp;lt;/code&amp;gt; и &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;False Positive&amp;lt;/code&amp;gt;, которые были предсказаны моделью машинного обучения.&lt;br /&gt;
&lt;br /&gt;
Все данные предупреждений хранятся в Svacer и получаются ИИ-ассистентом с помощью REST API.&lt;br /&gt;
&lt;br /&gt;
= Активация и запуск функциональности =&lt;br /&gt;
&lt;br /&gt;
ИИ-ассистент реализован в виде отдельного сервиса, взаимодействующего со Svacer по REST API. Для его запуска необходимо:&lt;br /&gt;
&lt;br /&gt;
# Активировать функциональность при запуске Svacer и настроить доступ к ИИ-асстистенту;&lt;br /&gt;
# Развернуть и запустить сервис ИИ-ассистента;&lt;br /&gt;
&lt;br /&gt;
== Активация функциональности &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer&amp;lt;/code&amp;gt; при запуске Svacer ==&lt;br /&gt;
&lt;br /&gt;
Для активации функциональности необходимо указать флаг &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features aiAssistant&amp;lt;/code&amp;gt; при запуске Svacer.&lt;br /&gt;
&lt;br /&gt;
=== Настройка доступа к ИИ-ассистенту в Svacer ===&lt;br /&gt;
&lt;br /&gt;
По умолчанию Svacer будет пытаться подключиться к ИИ-ассистенту по адресу &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:8081/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Изменить адрес по которому Svacer будет подключаться к ИИ-ассистенту можно сделать одним из способов:&lt;br /&gt;
&lt;br /&gt;
# При запуске Svacer установить переменную окружения &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;XSVACER_AIASSISTANT_ASSISTANTHOSTURL=http://{адрес ИИ-ассистена}:{порт}/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# В конфигурационном файле &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; добавить раздел&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
xsvacer:&lt;br /&gt;
  ...&lt;br /&gt;
  aiAssistant:&lt;br /&gt;
    assistantHostUrl: http://{адрес ИИ-ассистена}:{порт}/&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Развёртывание и запуск ИИ-ассистента ==&lt;br /&gt;
&lt;br /&gt;
При развёртывании ИИ-ассистента необходимо выполнить следующие действия:&lt;br /&gt;
&lt;br /&gt;
# Запустить docker-контейнер с моделью машинного обучения;&lt;br /&gt;
# При необходимости: развернуть postresql-сервер для хранения базы данных ИИ-ассистента;&lt;br /&gt;
# Запустить сервис ИИ-ассистента.&lt;br /&gt;
&lt;br /&gt;
=== Запуск docker-контейнера с моделью машинного обучения ===&lt;br /&gt;
&lt;br /&gt;
Docker-образ контейнера с моделью можно скачать по ссылке - https://svacer.ispras.ru/docker/images/svacer-ai-model-host.1.0.0.tar.gz (3.3GB)&lt;br /&gt;
&lt;br /&gt;
Далее docker-образ необходимо загрузить на docker-хост с помощью команды&lt;br /&gt;
&lt;br /&gt;
 docker image load -i /path/to/svacer-ai-model-host.1.0.0.tar.gz&lt;br /&gt;
&lt;br /&gt;
После этого docker-контейнер может быть запущен следующей командой&lt;br /&gt;
&lt;br /&gt;
 docker volume create svacer-ai-cache&lt;br /&gt;
 docker volume create svacer-ai-pgdata&lt;br /&gt;
 docker run -d --name svacer-ai-model-host -p 7000:8000 -v svacer-ai-pgdata:/var/lib/postgresql/data -v svacer-ai-cache:/root/.cache svacer-ai-model-host:1.0.0&lt;br /&gt;
&lt;br /&gt;
Том &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;cache&amp;lt;/code&amp;gt; будет содержать кеш сервиса взаимодействия с моделью машинного обучения.&lt;br /&gt;
&lt;br /&gt;
Том &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;pgdata&amp;lt;/code&amp;gt; будет содержать файлы с данными встроенного в docker-образ postgres'а.&lt;br /&gt;
&lt;br /&gt;
=== Запуск ИИ-ассистента ===&lt;br /&gt;
&lt;br /&gt;
Исполняемый файл ИИ-ассистента можно скачать по ссылке - TODO&lt;br /&gt;
&lt;br /&gt;
После этого ИИ-ассистент может быть запущен командой &amp;lt;code&amp;gt;svacerai-server run&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Флаги команды запуска ИИ-ассистента ====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Глобальные&amp;quot; флаги &amp;lt;code&amp;gt;svacerai-server help&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 NAME:&lt;br /&gt;
    svacerai-server - Svace AI server&lt;br /&gt;
 &lt;br /&gt;
 USAGE:&lt;br /&gt;
    svacerai-server [global options] command [command options] [arguments...]&lt;br /&gt;
 &lt;br /&gt;
 COMMANDS:&lt;br /&gt;
    run&lt;br /&gt;
    help, h  Shows a list of commands or help for one command&lt;br /&gt;
 &lt;br /&gt;
 GLOBAL OPTIONS:&lt;br /&gt;
    --debug            (default: false) [$SVACER_AI_DEBUG]&lt;br /&gt;
    --log-level value  Defines log level. Available: info, warn, error [$SVACER_AI_LOG_LEVEL]&lt;br /&gt;
    --log value        Defines path to log file. By default file /tmp/svacer-ai-*.log will be created.&lt;br /&gt;
    --config value     Define path to file with config in YAML format (by default svacer-ai.cfg).&lt;br /&gt;
    --help, -h         show help&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|debug&lt;br /&gt;
|bool&lt;br /&gt;
|Отладочный режим логирования&lt;br /&gt;
|-&lt;br /&gt;
|log-level&lt;br /&gt;
|string&lt;br /&gt;
|Уровень логирования&lt;br /&gt;
|-&lt;br /&gt;
|log&lt;br /&gt;
|string&lt;br /&gt;
|Путь к файлу с логами&lt;br /&gt;
|-&lt;br /&gt;
|config&lt;br /&gt;
|string&lt;br /&gt;
|Путь к [[#Конфигурация по молчанию|конфигурационному файлу]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Флаги запуска ИИ-ассистента &amp;lt;code&amp;gt;svacerai-server run help&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 NAME:&lt;br /&gt;
    svacerai-server run&lt;br /&gt;
 &lt;br /&gt;
 USAGE:&lt;br /&gt;
    svacerai-server run [command options] [arguments...]&lt;br /&gt;
 &lt;br /&gt;
 OPTIONS:&lt;br /&gt;
    --pg value                           Defines PostgreSQL connection URL&lt;br /&gt;
    --host value                         Defines host name for the server&lt;br /&gt;
    --svacer-host value                  Defines remote Svacer host&lt;br /&gt;
    --ai-host value [ --ai-host value ]  Specify the address of the service with AI models in the format &amp;lt;nowiki&amp;gt;{host id}:{http://{host address}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
    --help, -h                           show help&lt;br /&gt;
&lt;br /&gt;
{{Note|text=С помощью флагов запуска можно переопределять наиболее часто меняющиеся [[#Конфигурация по умолчанию|параметры конфигурации]] без необходимости создания файла &amp;lt;code&amp;gt;svacer-ai.cfg&amp;lt;/code&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|pg&lt;br /&gt;
|string&lt;br /&gt;
|Строка подключения к базе данных ИИ-ассистента&lt;br /&gt;
|-&lt;br /&gt;
|host&lt;br /&gt;
|string&lt;br /&gt;
|Адрес сетевого интерфейса и порт на которых будет запущен ИИ-ассистент&lt;br /&gt;
|-&lt;br /&gt;
|svacer-host&lt;br /&gt;
|string&lt;br /&gt;
|Адрес сервиса Svacer к API которого будет обращаться ИИ-ассистент&lt;br /&gt;
|-&lt;br /&gt;
|ai-host&lt;br /&gt;
|[]string&lt;br /&gt;
|Адреса сервиса с моделями машинного обучения&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Конфигурация ИИ-ассистента ==&lt;br /&gt;
&lt;br /&gt;
Управление настройками ИИ-ассистента осуществляется с помощью конфигурационного yaml-файла &amp;lt;code&amp;gt;svacer-ai.cfg&amp;lt;/code&amp;gt; в рабочей директории сервиса.j&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
|db/url&lt;br /&gt;
|string&lt;br /&gt;
|Строка подключения к базе данных ИИ-ассистента&lt;br /&gt;
|postgres://postgres:postgres@localhost:5432/svacer_ai?sslmode=disable&lt;br /&gt;
|-&lt;br /&gt;
|http/host&lt;br /&gt;
|string&lt;br /&gt;
|Адрес сетевого интерфейса и порт на которых будет запущен ИИ-ассистент&lt;br /&gt;
|localhost:8081&lt;br /&gt;
|-&lt;br /&gt;
|http/svacerHostUrl&lt;br /&gt;
&lt;br /&gt;
ai/svacerHostUrl&lt;br /&gt;
|string&lt;br /&gt;
|Адрес сервиса Svacer к API которого будет обращаться ИИ-ассистент&lt;br /&gt;
|http://localhost:8080/&lt;br /&gt;
|-&lt;br /&gt;
|http/svacerClientTlsCfg?&lt;br /&gt;
&lt;br /&gt;
ai/svacerClientTlsCfg&lt;br /&gt;
|[https://pkg.go.dev/crypto/tls#Config *tls.Config]&lt;br /&gt;
|Настройки безопасного подключения к Svacer&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
svacerClientTlsCfg:&lt;br /&gt;
  insecureSkipVerify: true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|ai/svacerReviewCommentTemplate&lt;br /&gt;
|string&lt;br /&gt;
|Шаблон для формирования комментария к разметке выполненной с помощью ИИ-ассистента. В шаблон передаётся структура &amp;lt;code&amp;gt;processing.MarkerResult&amp;lt;/code&amp;gt;&lt;br /&gt;
|См. [[#Конфигурация по умолчанию|конфигурацию по умолчанию]]&lt;br /&gt;
|-&lt;br /&gt;
|ai/svacerReviewTags&lt;br /&gt;
|[]string&lt;br /&gt;
|Список названий меток, которые будут установлены маркерам, размеченным с помощью ИИ-ассистента&lt;br /&gt;
|[AI]&lt;br /&gt;
|-&lt;br /&gt;
|hosts&lt;br /&gt;
|map[string]object&lt;br /&gt;
|Список параметров подключения к сервисам с моделями машинного обучения, которые будет использовать ИИ-ассистент&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{id сервиса}:&lt;br /&gt;
  {параметры подключения}&lt;br /&gt;
  (см. описание ниже)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Параметры подключения сервиса модели машинного обучения ===&lt;br /&gt;
&lt;br /&gt;
Параметры подключения сервисов модели задаются в виде map'ы, ключами которой являются идентификаторы сервисов. В значении содержатся следующие параметры:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
|url&lt;br /&gt;
|string&lt;br /&gt;
|Адрес сервиса с моделями машинного обучения&lt;br /&gt;
|http://localhost:7000&lt;br /&gt;
|-&lt;br /&gt;
|settings/requestBatchSize&lt;br /&gt;
|int&lt;br /&gt;
|Количество предупреждений отправляемых для анализа моделью за раз&lt;br /&gt;
|512&lt;br /&gt;
|-&lt;br /&gt;
|settings/httpMultipartParameterName&lt;br /&gt;
&lt;br /&gt;
settings/httpMultipartFileName&lt;br /&gt;
&lt;br /&gt;
settings/httpMultipartContentType&lt;br /&gt;
|string&lt;br /&gt;
|Параметра multipart-запроса вызова модели&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
httpMultipartParameterName: &amp;quot;file&amp;quot;&lt;br /&gt;
httpMultipartFileName: &amp;quot;file.csv&amp;quot;&lt;br /&gt;
httpMultipartContentType: &amp;quot;application/vnd.ms-excel&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|resources/modelList&lt;br /&gt;
&lt;br /&gt;
resources/modelInference&lt;br /&gt;
&lt;br /&gt;
resources/logs&lt;br /&gt;
|string&lt;br /&gt;
|Сопоставление названий ресурсов сервиса моделей&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
modelList: &amp;quot;/models_info&amp;quot;&lt;br /&gt;
&lt;br /&gt;
modelInference: &amp;quot;/use_model_for_file&amp;quot;&lt;br /&gt;
&lt;br /&gt;
logs: &amp;quot;/log_file&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|defaults/dataCollector/csvSeparator&lt;br /&gt;
|string&lt;br /&gt;
|Разделитель csv-файла, который отправляется в сервис моделей&lt;br /&gt;
|&amp;quot;,&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|defaults/dataCollector/additionalLineNumber&lt;br /&gt;
|int&lt;br /&gt;
|Количество строк исходного кода, которые добавляются до и после строки предупреждения при отправке в сервис моделей&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|defaults/dataCollector/csvColumns&lt;br /&gt;
|[]string&lt;br /&gt;
|Названия столбцов csv-файла, который отправляется в сервис моделей&lt;br /&gt;
|[id, warnClass, code]&lt;br /&gt;
|-&lt;br /&gt;
|defaults/interpretation/defaultValue&lt;br /&gt;
&lt;br /&gt;
defaults/interpretation/defaultValue&lt;br /&gt;
&lt;br /&gt;
defaults/interpretation/defaultValue&lt;br /&gt;
|string&lt;br /&gt;
|Названия статусов, которые присваиваются результату вызова модели&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
defaultValue: &amp;quot;Undecided&amp;quot;&lt;br /&gt;
&lt;br /&gt;
leftClassValue: &amp;quot;False Positive&amp;quot;&lt;br /&gt;
&lt;br /&gt;
rightClassValue: &amp;quot;Confirmed&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Конфигурация по умолчанию ==&lt;br /&gt;
&lt;br /&gt;
Данная конфигурация применяется по умолчанию при запуске ИИ-ассистента, если отсутствует конфигурационный файл &amp;lt;code&amp;gt;svacer-ai.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Note|type=error|text=Если файл &amp;lt;code&amp;gt;svacer-ai.cfg&amp;lt;/code&amp;gt; существует, в нём должны содержаться все указанные параметры конфигурации.'''}}&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
varSvacerHostUrl: &amp;amp;svacerHostUrl &amp;quot;http://localhost:8080/&amp;quot;&lt;br /&gt;
varSvacerClientTlsCfg: &amp;amp;svacerClientTlsCfg&lt;br /&gt;
  insecureSkipVerify: true&lt;br /&gt;
db:&lt;br /&gt;
  url: &amp;quot;postgres://postgres:postgres@localhost:5432/svacer_ai?sslmode=disable&amp;quot;&lt;br /&gt;
http:&lt;br /&gt;
  host: &amp;quot;localhost:8081&amp;quot;&lt;br /&gt;
  svacerHostUrl: *svacerHostUrl&lt;br /&gt;
  svacerClientTlsCfg: *svacerClientTlsCfg&lt;br /&gt;
ai:&lt;br /&gt;
  svacerHostUrl: *svacerHostUrl&lt;br /&gt;
  svacerClientTlsCfg: *svacerClientTlsCfg&lt;br /&gt;
  svacerReviewCommentTemplate: |+&lt;br /&gt;
    `Timestamp: {{now.UTC.Format &amp;quot;2006-01-02T15:04:05Z&amp;quot;}}`&lt;br /&gt;
&lt;br /&gt;
    `AI model: {{.Pipeline.Name}}`&lt;br /&gt;
&lt;br /&gt;
    `Confidence level: {{ printf &amp;quot;%.2f&amp;quot; (index .Interpretation 0).Confidence }}`&lt;br /&gt;
&lt;br /&gt;
  svacerReviewTags:&lt;br /&gt;
    - AI&lt;br /&gt;
  hosts:&lt;br /&gt;
    server-status:&lt;br /&gt;
      url: &amp;quot;http://localhost:7000&amp;quot;&lt;br /&gt;
      settings:&lt;br /&gt;
        requestBatchSize: 512&lt;br /&gt;
        httpMultipartParameterName: &amp;quot;file&amp;quot;&lt;br /&gt;
        httpMultipartFileName: &amp;quot;file.csv&amp;quot;&lt;br /&gt;
        httpMultipartContentType: &amp;quot;application/vnd.ms-excel&amp;quot;&lt;br /&gt;
      resources:&lt;br /&gt;
        modelList: &amp;quot;/models_info&amp;quot;&lt;br /&gt;
        modelInference: &amp;quot;/use_model_for_file&amp;quot;&lt;br /&gt;
        logs: &amp;quot;/log_file&amp;quot;&lt;br /&gt;
      defaults:&lt;br /&gt;
        dataCollector:&lt;br /&gt;
          csvSeparator: &amp;quot;,&amp;quot;&lt;br /&gt;
          additionalLinesNumber: 0&lt;br /&gt;
          csvColumns:&lt;br /&gt;
            - &amp;quot;id&amp;quot;&lt;br /&gt;
            - &amp;quot;warnClass&amp;quot;&lt;br /&gt;
            - &amp;quot;code&amp;quot;&lt;br /&gt;
        interpretation: &lt;br /&gt;
          defaultValue: &amp;quot;Undecided&amp;quot;&lt;br /&gt;
          leftClassValue: &amp;quot;False Positive&amp;quot;&lt;br /&gt;
          rightClassValue: &amp;quot;Confirmed&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=2960</id>
		<title>Help:XSvacer:Webide</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=2960"/>
		<updated>2025-05-20T07:53:16Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: Релиз 11. Удалена настройка шаблона комментария sarif/commenttemplate&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note|text=Данная функциональность входит в набор расширений XSvacer}}&lt;br /&gt;
&lt;br /&gt;
= Поддержка среды разработки Theia IDE =&lt;br /&gt;
&lt;br /&gt;
Данная функциональность даёт возможность просматривать исходный код снимка с предупреждениями анализатора во внешней IDE.&lt;br /&gt;
&lt;br /&gt;
По умолчанию запускается IDE, [[#Информация_о_docker-образе_Theia_IDE|собранная]] на основе [https://theia-ide.org/ Theia IDE].&lt;br /&gt;
&lt;br /&gt;
== Активация функциональности ==&lt;br /&gt;
Для активации функциональности необходимо указать флаг &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt; при запуске Svacer.&lt;br /&gt;
&lt;br /&gt;
При запуске функциональности Webide также будет запущена функциональность [[Help:XSvacer:Docker|docker]].&lt;br /&gt;
&lt;br /&gt;
При активации функциональности:&lt;br /&gt;
* становится доступным REST API управления IDE для просмотра исходного кода снимков проектов&lt;br /&gt;
* в пользовательском интерфейсе на вкладке &amp;quot;Информация о снимке&amp;quot; появляется кнопка &amp;quot;Открыть в IDE&amp;quot;&lt;br /&gt;
* устанавливается подключение к хосту docker, на котором будут запускаться контейнеры с экземплярами IDE&lt;br /&gt;
&lt;br /&gt;
=== Быстрый запуск функциональности с настройками по умолчанию ===&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы начать пользоваться функциональностью запуска IDE без изменения конфигурационных параметров, нужно выполнить следующие действия:&lt;br /&gt;
# Настройка доступа к docker-хосту:&lt;br /&gt;
## Запустить docker со настройками по умолчанию (dockerd должен слушать unix-сокет &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt; — https://docs.docker.com/reference/cli/dockerd/#daemon-socket-option)&lt;br /&gt;
## Проверить, что у пользователя под которым будет запускаться Svacer есть доступ к unix-сокету docker-хоста &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt; — https://docs.docker.com/engine/install/linux-postinstall&lt;br /&gt;
# Настроить права доступа у пользователей, которые смогут запускать IDE: требуются разрешения на проект/ветку &amp;quot;Просмотр маркеров&amp;quot; и &amp;quot;Экспорт разметки&amp;quot;&lt;br /&gt;
# Перезапустить Svacer с флагом &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt;&lt;br /&gt;
# ''Опционально.'' Для ускорения первого запуска IDE:&lt;br /&gt;
## Скачать архив с docker-образом для соответствующей версии Svacer: [https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.11.0.0.1.tar.gz 11+], [https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.10.0.0.tar.gz 10+], [https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.tar 9+]&lt;br /&gt;
## Загрузить docker-образ из архива на docker-хост: &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker image load -i /path/to/theia-blueprint...&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого у пользователей с указанными правами должна появиться кнопка &amp;quot;Открыть в IDE&amp;quot; на панели с информацией о снимке.&lt;br /&gt;
&lt;br /&gt;
{{Note}} IDE с исходным кодом снимков будут запускаться в новых вкладках браузера. Обычно все браузеры блокируют автоматическое открытие вкладки и показывают соответствующее предупреждение.&lt;br /&gt;
&lt;br /&gt;
Например, в Firefox:&lt;br /&gt;
&lt;br /&gt;
[[File:Firefox popup notification ru.png]]&lt;br /&gt;
&lt;br /&gt;
В таком случае нужно дать разрешение на открытие вкладки с IDE:&lt;br /&gt;
&lt;br /&gt;
[[File:Firefox popup notification expanded ru.png|x150px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При необходимости изменения настроек подключения к docker-хосту:&lt;br /&gt;
# Скопировать [[Help:XSvacer:Docker#Конфигурация_по_умолчанию|конфигурацию docker по умолчанию]] в раздел &amp;lt;code&amp;gt;xsvacer&amp;lt;/code&amp;gt; конфигурационного файла svacer.cfg&lt;br /&gt;
# Внести требуемые изменения в конфигурацию раздела &amp;lt;code&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При необходимости изменения настроек запуска IDE:&lt;br /&gt;
# Скопировать [[#Конфигурация_по_умолчанию|конфигурацию webide по умолчанию]] в раздел &amp;lt;code&amp;gt;xsvacer&amp;lt;/code&amp;gt; конфигурационного файла svacer.cfg&lt;br /&gt;
# Внести требуемые изменения в конфигурацию раздела &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Принцип работы ==&lt;br /&gt;
&lt;br /&gt;
Функциональность запуска IDE для просмотра исходного кода снимков становится доступной пользователю, если соблюдаются условия:&lt;br /&gt;
# Функциональность активна: при запуске Svacer указан флаг &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt;;&lt;br /&gt;
# В [[Help:XSvacer:Webide#Конфигурация|конфигурации]] функциональности &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia&amp;lt;/code&amp;gt; есть хотя бы одна активная (&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;disabled: false&amp;lt;/code&amp;gt;) конфигурация IDE&lt;br /&gt;
# У пользователя Svacer имеются разрешения &amp;quot;Просмотр маркеров&amp;quot; и &amp;quot;Экспорт разметки&amp;quot; на проект, в котором находится снимок, для которого нужно запустить IDE&lt;br /&gt;
&lt;br /&gt;
В противном случае в пользовательском интерфейсе будет отсутствовать кнопка &amp;quot;Открыть в IDE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Запуск IDE ===&lt;br /&gt;
&lt;br /&gt;
Запуск производится путём вызова http-метода &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;POST /api/snapshots/{snapshot_id}/ide&amp;lt;/code&amp;gt; с телом запроса &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;{&amp;quot;ideId&amp;quot;: &amp;quot;идентификатор IDE&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Последовательность действий, выполняемых при запуске IDE:&lt;br /&gt;
&lt;br /&gt;
# Производится проверка: была ли уже запущена указанная IDE для указанного снимка:&lt;br /&gt;
#* Если запущена: производится проверка доступности IDE (отвечает на запросы):&lt;br /&gt;
#** Если IDE доступна: действие не требуется. Процесс запуска завершается&lt;br /&gt;
#** Если IDE недоступна: продолжается процесс запуска. IDE будет перезапущена&lt;br /&gt;
# Создаётся &amp;quot;корневая папка снимка&amp;quot;, предназначенная для хранения исходного кода снимка и предупреждений анализатора с разметкой в виде sarif-файла. Название папки соответствует id снимка. Папка создаётся по пути заданному в параметре конфигурации IDE &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
# Исходный код снимка скачивается в &amp;quot;корневую папку снимка&amp;quot;&lt;br /&gt;
# Производится экспорт маркеров и разметки в виде sarif-файла в &amp;quot;корневую папку снимка&amp;quot;. Название sarif-файла формируется с помощью шаблона, заданного в параметре конфигурации IDE &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/sarif/filenametemplate&amp;lt;/code&amp;gt;&lt;br /&gt;
# Производится настройка и запуск docker-контейнера в соответствии с настройками &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker&amp;lt;/code&amp;gt;:&lt;br /&gt;
## Проверяется наличие на docker-хосте образа IDE, указанного в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker/image&amp;lt;/code&amp;gt;. Если docker-образ отсутствует, он будет загружен на хост&lt;br /&gt;
## Проверяется наличие на docker-хосте контейнера с IDE для снимка:&lt;br /&gt;
##* Если docker-контейнер не существует, то он будет создан и запущен&lt;br /&gt;
##* Если docker-контейнер существует и находится:&lt;br /&gt;
##** в статусе &amp;lt;code&amp;gt;running&amp;lt;/code&amp;gt; — процесс запуска IDE продолжается&lt;br /&gt;
##** в статусе &amp;lt;code&amp;gt;created&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;exited&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;paused&amp;lt;/code&amp;gt; — контейнер будет запущен&lt;br /&gt;
##** в других статусах — вернётся соответствующая ошибка и процесс запуска IDE прервётся&lt;br /&gt;
# После успешного запуска docker-контейнера осуществляется ожидание окончания запуска процесса IDE в контейнере в соответствии с настройками &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Если за отведённое время ответ от IDE получен — процесс запуска завершается&lt;br /&gt;
#* Если ответ не получен — вернётся ошибка &amp;lt;code&amp;gt;ide not ready&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При возникновении ошибки на одном из этапов запуска IDE артефакты, созданные на предыдущих этапах, останутся в системе. В дальнейшем они могут быть использованы при повторном запуске IDE, если причина возникновения ошибки была устранена.&lt;br /&gt;
&lt;br /&gt;
{{Note|type=reminder|text=Причиной возникновения ошибки &amp;quot;ide not ready&amp;quot; может стать высокая загруженность или недостаточная производительность docker-хоста, на котором запускается контейнер с IDE. В связи с этим процесс IDE внутри контейнера может запускаться дольше, чем указано в настойках &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck&amp;lt;/code&amp;gt;. В этом случае рекомендуется попробовать повторно запустить IDE через короткий промежуток времени}}&lt;br /&gt;
&lt;br /&gt;
Ещё одной причиной возникновения данной ошибки может стать сетевая недоступность docker-контейнера при подключении к удалённому docker-хосту. В таком случае рекомендуется проверить:&lt;br /&gt;
# Сетевую доступность docker-хоста&lt;br /&gt;
# Настройки фаервола на docker-хосте&lt;br /&gt;
# Настройки биндинга docker-контейнера c IDE&lt;br /&gt;
::&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker/container/hostconfig/portbindings&amp;lt;/code&amp;gt;&lt;br /&gt;
::Контейнер должен быть подключён к доступному сетевому интерфейсу&lt;br /&gt;
&lt;br /&gt;
=== Использование IDE: проксирование запросов ===&lt;br /&gt;
&lt;br /&gt;
После успешного запуска docker-контейнера IDE станут доступны ресурсы с префиксом &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Все запросы, направленные к ресурсам &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/*&amp;lt;/code&amp;gt;, будут проксироваться в соответствующий контейнер IDE.&lt;br /&gt;
&lt;br /&gt;
Например, если docker-контейнер c IDE &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;theia__default&amp;lt;/code&amp;gt; для снимка &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xxx&amp;lt;/code&amp;gt; запущен и слушает порт &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;35353&amp;lt;/code&amp;gt; на хосте &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker-host&amp;lt;/code&amp;gt;, то будет происходить проксирование:&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET http://docker-host:35353/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;POST http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;POST http://docker-host:35353/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET ws://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET ws://docker-host:35353/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для запуска IDE в окне браузера нужно указать адрес&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;http[s]://svacer-host/xvacer/webide/snapshots/{snapshot_id}/{ide_id}/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note}} Завершающий слеш обязателен!&lt;br /&gt;
&lt;br /&gt;
=== Перезапуск IDE ===&lt;br /&gt;
&lt;br /&gt;
В процессе работы Svacer следит за состоянием запущенных IDE. При попытке повторного запуска IDE проверяется её доступность: если IDE отвечает на запросы, то повторный запуск не производится и обработка запроса завершается.&lt;br /&gt;
&lt;br /&gt;
Также работоспособность IDE контролируется при использовании IDE в момент проксирования запросов в docker-контейнер: если IDE доступна, то запрос проксируется.&lt;br /&gt;
&lt;br /&gt;
Если IDE перестанет отвечать на запросы, то будет произведена попытка её перезапуска. В этом случае происходит та же последовательность действий, что и при [[Help:XSvacer:Webide#Запуск IDE|первоначальном запуске IDE]].&lt;br /&gt;
&lt;br /&gt;
Зачастую потеря связи обусловлена остановкой docker-контейнера с IDE. В таком случае docker-контейнер будет перезапущен.&lt;br /&gt;
&lt;br /&gt;
Если же недоступность IDE обусловлена другими причинами, то запрос на запуск/проксирование продолжит возвращать ошибку до устранения причин неработоспособности.&lt;br /&gt;
&lt;br /&gt;
=== Остановка IDE ===&lt;br /&gt;
&lt;br /&gt;
Запуск производится путём вызова http-метода&lt;br /&gt;
 DELETE /api/snapshots/{snapshot_id}/ide&lt;br /&gt;
с телом запроса &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;{&amp;quot;ideId&amp;quot;: &amp;quot;идентификатор IDE&amp;quot;}&amp;lt;/code&amp;gt;. В ходе обработки запроса останавливается docker-контейнер IDE.&lt;br /&gt;
&lt;br /&gt;
По умолчанию установлен параметр конфигурации&lt;br /&gt;
&lt;br /&gt;
 xsvacer/webide/theia/default/docker/container/hostconfig/autoremove: true&lt;br /&gt;
&lt;br /&gt;
Это означает, что после остановки docker-контейнер будет автоматически удалён.&lt;br /&gt;
&lt;br /&gt;
Чтобы изменить это поведение, настройка&lt;br /&gt;
 xsvacer/webide/theia/default/{id конфигурации}/container/hostconfig/autoremove&lt;br /&gt;
&lt;br /&gt;
должна быть установлена в &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; на момент запуска docker-контейнера IDE. Это можно сделать, например, установив значение переменной окружения&lt;br /&gt;
&lt;br /&gt;
 XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_CONTAINER_HOSTCONFIG_AUTOREMOVE=false&lt;br /&gt;
&lt;br /&gt;
{{Note|type=error|text=При использовании версии Svacer 9.0.0 установка &amp;lt;code&amp;gt;autoremove: false&amp;lt;/code&amp;gt; вызывает ошибку запуска. Исправлено в версии [[Svacer#Релизы|9.0.1]].'''}}&lt;br /&gt;
&lt;br /&gt;
При корректной остановке (например SIGTERM) Svacer автоматически остановит все запущенные docker-контейнеры IDE.&lt;br /&gt;
&lt;br /&gt;
=== Подключение к IDE после некорректного завершения Svacer ===&lt;br /&gt;
&lt;br /&gt;
При запуске Svacer осуществляет поиск запущенных docker-контейнеров IDE на доступных docker-хостах. При восстановлении связи с запущенными docker-контейнерами IDE и последующей корректной остановке Svacer все docker-контейнеры IDE будут остановлены.&lt;br /&gt;
&lt;br /&gt;
== REST API для работы с IDE ==&lt;br /&gt;
&lt;br /&gt;
{{Note|text=На этапе внедрения расширений XSvacer REST API может меняться. Следите за анонсами!}}&lt;br /&gt;
&lt;br /&gt;
После активации функциональности становятся доступны http-ресурсы для управления IDE:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | REST API управления IDE&lt;br /&gt;
|-&lt;br /&gt;
!Ресурс&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
GET /xsvacer/webide/api/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Получение списка доступных для запуска IDE.&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;order&amp;quot;: 0&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;id&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;name&amp;lt;/code&amp;gt; — название IDE&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;order&amp;lt;/code&amp;gt; — порядковый номер IDE в списке&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
GET /xsvacer/webide/api/snapshots/{snapshot_id}/ide/{ide_id}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Запрос описания экземпляра IDE, запущенного для снимка.&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; — идентификатор снимка&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ide_id&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;id&amp;quot;: {&lt;br /&gt;
    &amp;quot;ide_id&amp;quot;: {&lt;br /&gt;
      &amp;quot;ide_type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
      &amp;quot;config_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;snapshot_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;url&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;start_args&amp;quot;: {&lt;br /&gt;
    &amp;quot;snapshot_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;user&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;user_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
POST /xsvacer/webide/api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Запуск IDE для просмотра исходных кодов снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; — идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
PUT /api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Команда управления экземпляром IDE снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; — идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;action&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;action&amp;lt;/code&amp;gt; — действие&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
'''Доступные действия:'''&lt;br /&gt;
* &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;update_markup&amp;lt;/code&amp;gt; — обновление предупреждений и разметки (sarif-файла)&lt;br /&gt;
'''Ответ:''' пустой&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
DELETE /xsvacer/webide/api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Остановка экземпляра IDE снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; — идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
'''Ответ:''' пустой&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Прокси для запросов экземпляра IDE снимка&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Формат идентификатора IDE ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;{тип ide}__{идентификатор конфигурации}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например, для default-конфигурации Theia IDE: &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;theia__default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Конфигурация ==&lt;br /&gt;
&lt;br /&gt;
Управление настройками функциональности осуществляется с помощью конфигурационного yaml-файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Раздел конфигурации для управления функциональностью — &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Раздел содержит перечисление доступных конфигураций запуска экземпляров Theia IDE &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia&amp;lt;/code&amp;gt;. При наличии нескольких активных конфигураций Theia IDE пользователь сможет выбрать какую из них использовать при запуске IDE с исходными файлами снимка.&lt;br /&gt;
&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       config1:&lt;br /&gt;
         ...&lt;br /&gt;
       config2:&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
Запуск IDE основывается на запуске docker-контейнеров, содержащих соответствующие сборки IDE. Поэтому необходимо также [[Help:XSvacer:Docker|настроить доступ к docker-хосту]] в разделе &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt;, иначе функциональность WebIDE не сможет работать корректно.&lt;br /&gt;
&lt;br /&gt;
В случае отсутствия файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; или отсутствии раздела &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; будет использоваться [[Help:XSvacer:Webide#Конфигурация_по_умолчанию_используемая_в_svacer|конфигурация по умолчанию]].&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация запуска Theia IDE ===&lt;br /&gt;
&lt;br /&gt;
{{Note|text=На этапе внедрения расширений XSvacer конфигурация функциональностей может меняться. Следите за анонсами!}}&lt;br /&gt;
&lt;br /&gt;
Конфигурации запуска Theia IDE добавляются в виде полей в разделе &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;. Название поля является идентификатором конфигурации запуска. Например, идентификатор по номеру используемой версии IDE:&lt;br /&gt;
&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       1-46-0:&lt;br /&gt;
         name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
==== Базовые параметры конфигурации запуска ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
|disabled&lt;br /&gt;
|bool&lt;br /&gt;
|Конфигурация запуска неактивна. Неактивная конфигурация не доступна для запуска экземпляра IDE&lt;br /&gt;
|true (переопределяется в конфигурации default)&lt;br /&gt;
|-&lt;br /&gt;
|order&lt;br /&gt;
|int&lt;br /&gt;
|Порядковый номер в списке выбора конфигурации запуска&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|name&lt;br /&gt;
|string&lt;br /&gt;
|Название конфигурации&lt;br /&gt;
|Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
|-&lt;br /&gt;
|sourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке, содержащей исходные коды снимков на машине со Svacer&lt;br /&gt;
|${USER_CACHE_DIR}/svacer-snapshot-sources&lt;br /&gt;
|-&lt;br /&gt;
|dockerhostsourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке, содержащей исходные коды снимков на хосте docker. Нужен при использовании удалённого docker-хоста, т. к. в таком случае папка с исходными кодами скорее всего будет доступна по адресу, отличающемуся от &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|dockerhostpathseparator&lt;br /&gt;
|string&lt;br /&gt;
|Разделитель пути на хосте docker. По умолчанию &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;quot;/&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|sariffiletemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|{{Note|text=В версии 10.0.0 заменён на [[Help:XSvacer:Webide#Параметры_экспорта_sarif-файла_с_разметкой_предупреждений|sarif]]}}&lt;br /&gt;
Шаблон названия sarif-файла с предупреждениями анализатора. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|sarifFileContext]]&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;&amp;quot;{{.Context.ProjectName}}.{{.Context.BranchName}}.sarif&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры экспорта sarif-файла с разметкой предупреждений ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для настройки экспорта sarif-файлов с разметкой предупреждений, выполненной в Svacer.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
|sarif&lt;br /&gt;
|map&lt;br /&gt;
|Настройки экспорта sarif-файла&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|sarif/filenametemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон для формирования названия sarif-файла. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|sarifFileContext]]&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;&amp;quot;warnings.sarif&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|sarif/commenttemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|{{Note|text=Удалён в версии 11.0.0}}&lt;br /&gt;
Шаблон для формирования элемента списка комментариев предупреждения при экспорте в sarif-файл. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|Comment]]&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;&amp;quot;{{if trim .Text}}`[{{.CreateTs.Local.Format \&amp;quot;02.01.2006 15:04\&amp;quot;}}] {{.CreatedBy}}:`\n\n{{trim .Text}}{{end}}&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры менеджера запуска IDE ====&lt;br /&gt;
&lt;br /&gt;
Конфигурация менеджера запуска IDE. На данный момент доступен только стандартный менеджер (&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;type: default&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
|manager&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация менеджера запуска IDE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|manager/type&lt;br /&gt;
|enum: default&lt;br /&gt;
|Тип менеджера запуска IDE&lt;br /&gt;
|default&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры запуска docker-контейнеров с IDE ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для настройки запуска docker-контейнеров с IDE&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
|docker/&lt;br /&gt;
|map&lt;br /&gt;
|Настройки создания docker-контейнера с IDE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|docker/hostid&lt;br /&gt;
|string&lt;br /&gt;
|Идентификатор хоста docker, описанного в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/docker/hosts&amp;lt;/code&amp;gt;. Запуск docker-контейнера с IDE будет выполнен на этом хосте&lt;br /&gt;
|default&lt;br /&gt;
|-&lt;br /&gt;
|docker/containernametemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон для формирования названия контейнера IDE для выбранного снимка. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|TheiaDockerContainerStartContext]]&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;&amp;quot;theia-1-46-{{.StartArgs.SnapshotID}}&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|docker/containerconfiglabels&lt;br /&gt;
|[]map&lt;br /&gt;
|Список меток docker-контейнера. Дополняет список меток в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker/container/config/labels&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
- &amp;quot;com.docker.compose.project&amp;quot;: svacer&lt;br /&gt;
|-&lt;br /&gt;
|docker/image/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры docker-образа из которого будет запущен контейнер&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|docker/image/name&lt;br /&gt;
|string&lt;br /&gt;
|Название образа&lt;br /&gt;
|theia-blueprint&lt;br /&gt;
|-&lt;br /&gt;
|docker/image/tag&lt;br /&gt;
|string&lt;br /&gt;
|Тег образа&lt;br /&gt;
|Svacer 11+: 1.46.0.sarif.clang.11.0.0.1&lt;br /&gt;
Svacer 10+: 1.46.0.sarif.clang.10.0.0&lt;br /&gt;
&lt;br /&gt;
Svacer 9+: 1.46.0.sarif.clang&lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcetype&lt;br /&gt;
|enum: repository/file&lt;br /&gt;
|Тип источника для загрузки образа в docker-хост&lt;br /&gt;
* repository — будет вызван docker pull образа &amp;lt;code&amp;gt;{image/name}:{image/tag}&amp;lt;/code&amp;gt;&lt;br /&gt;
* file — будет вызван docker load с URL &amp;lt;code&amp;gt;image/sourcefileurl&amp;lt;/code&amp;gt;&lt;br /&gt;
|file&lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcefileurl&lt;br /&gt;
|url&lt;br /&gt;
|URL откуда будет загружен docker-образ если &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;image/sourcetype == &amp;quot;file&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
URL может содержать:&lt;br /&gt;
* путь к локальному файлу: схема &amp;lt;code&amp;gt;file://&amp;lt;/code&amp;gt;&lt;br /&gt;
* http/https-адрес: схема &amp;lt;code&amp;gt;http://&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;https://&amp;lt;/code&amp;gt;&lt;br /&gt;
|Svacer 11+: https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.11.0.0.1.tar.gz&lt;br /&gt;
Svacer 10+: https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.10.0.0.tar.gz&lt;br /&gt;
&lt;br /&gt;
Svacer 9+: https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.tar&lt;br /&gt;
|-&lt;br /&gt;
|docker/container/&lt;br /&gt;
|map&lt;br /&gt;
|Свойства docker-контейнера&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/config.go#L70&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config/env&lt;br /&gt;
|[]string&lt;br /&gt;
|Список переменных среды, которые будут установлены в контейнере&lt;br /&gt;
|&lt;br /&gt;
- THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры хостинга контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/hostconfig.go#L379&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/autoremove&lt;br /&gt;
|bool&lt;br /&gt;
|&lt;br /&gt;
|true&lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/portbindings&lt;br /&gt;
|map&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&amp;quot;3000/tcp&amp;quot;:&lt;br /&gt;
:- hostport: 0&lt;br /&gt;
|-&lt;br /&gt;
|docker/container/networkconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Сетевые настройки контейнера. Соответствуют структуре https://github.com/moby/moby/blob/v24.0.7/api/types/network/network.go#L104&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры проверки доступности healthcheck ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для проверки доступности IDE после запуска docker-контейнера&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
|healthcheck&lt;br /&gt;
|map&lt;br /&gt;
|Параметры проверки доступности IDE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyretries&lt;br /&gt;
|int&lt;br /&gt;
|Количества попыток проверки до ошибки доступности&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyperiod&lt;br /&gt;
|golang duration string&lt;br /&gt;
|Интервал проверки&lt;br /&gt;
|200ms&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Структуры передаваемые в поля с golang-шаблонами строк ====&lt;br /&gt;
&lt;br /&gt;
 sarifFileContext {&lt;br /&gt;
     Time    time.Time&lt;br /&gt;
     Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
&lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 TheiaDockerContainerStartContext {&lt;br /&gt;
     IdeID: {&lt;br /&gt;
         IdeType  string&lt;br /&gt;
         ConfigID string&lt;br /&gt;
     },&lt;br /&gt;
     StartArgs: {&lt;br /&gt;
         SnapshotID string&lt;br /&gt;
         UserID     string&lt;br /&gt;
         User       string&lt;br /&gt;
     },&lt;br /&gt;
     Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
&lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 Comment {&lt;br /&gt;
     ID               string&lt;br /&gt;
     Text             string&lt;br /&gt;
     Ref              string&lt;br /&gt;
     CreatedBy        string&lt;br /&gt;
     CreatedByID      string&lt;br /&gt;
     CreateTs         time.Time&lt;br /&gt;
     UpdateTs         *time.Time&lt;br /&gt;
     UpdatedBy        string&lt;br /&gt;
     UpdatedByID      string&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация по умолчанию ===&lt;br /&gt;
&lt;br /&gt;
Данная настройка применяется по умолчанию для запуска Theia IDE, если в конфигурационном файле svacer.cfg отсутствует раздел &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
xsvacer:&lt;br /&gt;
  webide:&lt;br /&gt;
    theia:&lt;br /&gt;
      1-46-0: &amp;amp;1-46-0&lt;br /&gt;
        disabled: true&lt;br /&gt;
        order: 0&lt;br /&gt;
        name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
        sourcesroot: ${USER_CACHE_DIR}/svacer-snapshot-sources&lt;br /&gt;
        sarif:&lt;br /&gt;
            filenametemplate: &amp;quot;warnings.sarif&amp;quot;&lt;br /&gt;
        manager:&lt;br /&gt;
          type: default&lt;br /&gt;
        docker:&lt;br /&gt;
          hostid: default # идентификатор используемого docker-хоста&lt;br /&gt;
          containernametemplate: &amp;quot;theia-1-46-&amp;lt;nowiki&amp;gt;{{.StartArgs.SnapshotID}}&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
          image:&lt;br /&gt;
            name: theia-blueprint&lt;br /&gt;
            tag: 1.46.0.sarif.clang.11.0.0.1&lt;br /&gt;
            sourcetype: file&lt;br /&gt;
            sourcefileurl: https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.11.0.0.1.tar.gz&lt;br /&gt;
          containerconfiglabels:&lt;br /&gt;
            - &amp;quot;com.docker.compose.project&amp;quot;: svacer&lt;br /&gt;
          container:&lt;br /&gt;
            config:&lt;br /&gt;
              env:&lt;br /&gt;
                - THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
            hostconfig:&lt;br /&gt;
              autoremove: true&lt;br /&gt;
              portbindings:&lt;br /&gt;
                &amp;quot;3000/tcp&amp;quot;:&lt;br /&gt;
                  - hostport: 0&lt;br /&gt;
            networkconfig:&lt;br /&gt;
        healthcheck:&lt;br /&gt;
          starttoreadyretries: 10&lt;br /&gt;
          starttoreadyperiod: 200ms&lt;br /&gt;
      default:&lt;br /&gt;
        &amp;lt;&amp;lt;: *1-46-0&lt;br /&gt;
        order: 0&lt;br /&gt;
        disabled: false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
По умолчанию используется docker-хост с идентификатором &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;. Согласно настройке этого хоста, по умолчанию предполагается взаимодействие с докером через unix-сокет &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt;. Соответственно пользователь, под которым запускается Svacer, должен иметь доступ к этому сокету (https://docs.docker.com/engine/install/linux-postinstall/).&lt;br /&gt;
&lt;br /&gt;
{{Note|text=При наличии раздела &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; в конфигурационном файле svacer.cfg будут применены только настройки из этого раздела. Настройки по умолчанию будут полностью проигнорированы}}&lt;br /&gt;
&lt;br /&gt;
=== Изменение конфигурационных параметров с помощью переменных окружения ===&lt;br /&gt;
&lt;br /&gt;
Значения атрибутов конфигурации могут быть изменены с помощью переменных окружения&lt;br /&gt;
&lt;br /&gt;
 XSVACER_WEBIDE_THEIA_{id конфигурации ide}[_параметр]={значение параметра}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например, для активации rootless-хоста &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/hosts/local&amp;lt;/code&amp;gt; и переключения запуска IDE с идентификатором &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;default&amp;lt;/code&amp;gt; на этот хост можно указать такие значения переменных окружения при запуске Svacer:&lt;br /&gt;
&lt;br /&gt;
 XSVACER_DOCKER_HOSTS_LOCAL_DISABLED=false&lt;br /&gt;
 XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_HOSTID=local&lt;br /&gt;
&lt;br /&gt;
== Очистка системы: удаление артефактов функциональности ==&lt;br /&gt;
&lt;br /&gt;
В процессе использования функциональности IDE создаются следующие артефакты:&lt;br /&gt;
# Исходные файлы снимков скачиваются в корневые папки, заданные в параметре &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
# Артефакты docker:&lt;br /&gt;
#* образы и контейнеры создаются на хостах, указанных в конфигурации docker-хостов в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/hostid&amp;lt;/code&amp;gt;&lt;br /&gt;
#* названия docker-образов будут соответствовать параметрам в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/image&amp;lt;/code&amp;gt;&lt;br /&gt;
#* названия docker-контейнеров будут соответствовать параметру &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/containernametemplate&amp;lt;/code&amp;gt;&lt;br /&gt;
#* наборы меток doker-контейнеров будут содержать:&lt;br /&gt;
#*: метки, перечисленные в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/containerconfiglabels&amp;lt;/code&amp;gt;&lt;br /&gt;
#*: метки, перечисленные в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/container/config/labels&amp;lt;/code&amp;gt;&lt;br /&gt;
#*: метки с названиями &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.service.id&amp;lt;/code&amp;gt;, &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.service.type&amp;lt;/code&amp;gt;, &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.theia.start_args&amp;lt;/code&amp;gt;&lt;br /&gt;
# При использовании rootless-хоста docker будут созданы папки согласно [[Help:XSvacer:Docker#Специфичные настройки для rootless-хоста|настройкам]]&lt;br /&gt;
&lt;br /&gt;
== Рекомендации ==&lt;br /&gt;
&lt;br /&gt;
=== Предварительная загрузка docker-образа с IDE ===&lt;br /&gt;
&lt;br /&gt;
По умолчанию параметр&lt;br /&gt;
&lt;br /&gt;
 xsvacer/webide/theia/1-46-0/docker/image/sourcefileurl&lt;br /&gt;
&lt;br /&gt;
Содержит значение&lt;br /&gt;
 &lt;br /&gt;
 Svacer 11+: https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.11.0.0.1.tar.gz&lt;br /&gt;
 Svacer 10+: https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.10.0.0.tar.gz&lt;br /&gt;
 Svacer 9+:  https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.tar&lt;br /&gt;
&lt;br /&gt;
По этому адресу находится архив с docker-образом для Theia IDE.&lt;br /&gt;
&lt;br /&gt;
Если docker-образ ещё не был загружен, то загрузка начнётся при первой попытке запуска IDE. Т. к. этот процесс занимает длительное время, то запрос запуска IDE тоже будет выполняться долго.&lt;br /&gt;
&lt;br /&gt;
Для ускорения первого запуска IDE докер образ можно загрузить на хост docker вручную. Для этого необходимо:&lt;br /&gt;
&lt;br /&gt;
# Скачать файл архива&lt;br /&gt;
# Выполнить команду &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker image load -i /path/to/theia-blueprint...&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Информация о docker-образе Theia IDE ==&lt;br /&gt;
&lt;br /&gt;
Docker-образ, используемый по умолчанию, построен на базе [https://theia-ide.org/ Eclipse Theia IDE] версии [https://github.com/eclipse-theia/theia-blueprint/tree/v1.46.0 1.46.0].&lt;br /&gt;
&lt;br /&gt;
При этом была изменена компоновка расширений Theia. Результат выполнения &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
diff --git a/browser.Dockerfile b/browser.Dockerfile&lt;br /&gt;
index efe591e..a4ebb6a 100644&lt;br /&gt;
--- a/browser.Dockerfile&lt;br /&gt;
+++ b/browser.Dockerfile&lt;br /&gt;
@@ -42,7 +42,7 @@ RUN chmod g+rw /home &amp;amp;&amp;amp; \&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y wget apt-transport-https &amp;amp;&amp;amp; \&lt;br /&gt;
     wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | tee /usr/share/keyrings/adoptium.asc &amp;amp;&amp;amp; \&lt;br /&gt;
     echo &amp;quot;deb [signed-by=/usr/share/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main&amp;quot; | tee /etc/apt/sources.list.d/adoptium.list &amp;amp;&amp;amp; \&lt;br /&gt;
-    apt-get update &amp;amp;&amp;amp; apt-get install -y git openssh-client openssh-server bash libsecret-1-0 temurin-17-jdk maven &amp;amp;&amp;amp; \&lt;br /&gt;
+    apt-get update &amp;amp;&amp;amp; apt-get install -y git openssh-client openssh-server bash libsecret-1-0 clangd &amp;amp;&amp;amp; \&lt;br /&gt;
     apt-get purge -y wget &amp;amp;&amp;amp; \&lt;br /&gt;
     apt-get clean&lt;br /&gt;
&lt;br /&gt;
diff --git a/package.json b/package.json&lt;br /&gt;
index 9044595..9d0dcc8 100644&lt;br /&gt;
--- a/package.json&lt;br /&gt;
+++ b/package.json&lt;br /&gt;
@@ -54,10 +54,8 @@&lt;br /&gt;
   &amp;quot;theiaPluginsDir&amp;quot;: &amp;quot;plugins&amp;quot;,&lt;br /&gt;
   &amp;quot;theiaPlugins&amp;quot;: {&lt;br /&gt;
     &amp;quot;eclipse-theia.builtin-extension-pack&amp;quot;: &amp;quot;https://open-vsx.org/api/eclipse-theia/builtin-extension-pack/1.83.1/file/eclipse-theia.builtin-extension-pack-1.83.1.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;ms-vscode.js-debug&amp;quot;: &amp;quot;https://open-vsx.org/api/ms-vscode/js-debug/1.83.1/file/ms-vscode.js-debug-1.83.1.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;ms-vscode.js-debug-companion&amp;quot;: &amp;quot;https://open-vsx.org/api/ms-vscode/js-debug-companion/1.1.2/file/ms-vscode.js-debug-companion-1.1.2.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;vscjava.vscode-java-pack&amp;quot;: &amp;quot;https://open-vsx.org/api/vscjava/vscode-java-pack/0.25.11/file/vscjava.vscode-java-pack-0.25.11.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;vscjava.vscode-java-dependency&amp;quot;: &amp;quot;https://open-vsx.org/api/vscjava/vscode-java-dependency/0.21.2/file/vscjava.vscode-java-dependency-0.21.2.vsix&amp;quot;&lt;br /&gt;
+    &amp;quot;llvm-vs-code-extensions.vscode-clangd&amp;quot;: &amp;quot;https://open-vsx.org/api/llvm-vs-code-extensions/vscode-clangd/0.1.26/file/llvm-vs-code-extensions.vscode-clangd-0.1.26.vsix&amp;quot;,&lt;br /&gt;
+    &amp;quot;ms-sarifvscode.sarif-viewer&amp;quot;: &amp;quot;https://open-vsx.org/api/MS-SarifVSCode/sarif-viewer/3.4.4/file/MS-SarifVSCode.sarif-viewer-3.4.4.vsix&amp;quot;&lt;br /&gt;
   },&lt;br /&gt;
   &amp;quot;theiaPluginsExcludeIds&amp;quot;: [&lt;br /&gt;
     &amp;quot;ms-vscode.js-debug-companion&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Команда построения docker-образа:&lt;br /&gt;
 docker build -t theia-blueprint:1.46.0.sarif.clang... -f browser.Dockerfile .&lt;br /&gt;
&lt;br /&gt;
Команда экспорта docker-образа:&lt;br /&gt;
 docker image save theia-blueprint:1.46.0.sarif.clang... | gzip &amp;gt; /path/to/tar/theia-blueprint.1.46.0.sarif.clang....tar.gz&lt;br /&gt;
&lt;br /&gt;
== Известные проблемы ==&lt;br /&gt;
&lt;br /&gt;
=== При открытии sarif-файла в IDE открывается пустая панель &amp;quot;SARIF Results&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Для просмотра sarif-файла, содержащего предупреждения анализатора и разметку, используется плагин [https://open-vsx.org/extension/MS-SarifVSCode/sarif-viewer SARIF Viewer]. При просмотре sarif-файла открывается webview плагина со списком предупреждений анализатора.&lt;br /&gt;
&lt;br /&gt;
В Theia IDE для открытия webview применяется [https://developer.mozilla.org/en_US/docs/Web/API/Service_Worker_API Service Worker API]. В целях обеспечения безопасности применение Service Worker API [https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#setting_up_to_play_with_service_workers требует], чтобы доступ к web-приложению осуществлялся по HTTPS, либо приложение размещалось на localhost.&lt;br /&gt;
&lt;br /&gt;
Поэтому для решения данной проблемы Svacer должен открываться по HTTPS или быть доступен по адресу &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide:SvacerAsDockerContainer&amp;diff=2561</id>
		<title>Help:XSvacer:Webide:SvacerAsDockerContainer</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide:SvacerAsDockerContainer&amp;diff=2561"/>
		<updated>2025-03-12T09:41:32Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Поддержка функциональности [https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide webide] когда Svacer развёрнут в docker-контейнере =&lt;br /&gt;
&lt;br /&gt;
На данный момент функциональность запуска Theia IDE по умолчанию настроена на запуск Svacer с помощью исполняемого файла, &amp;quot;рядом&amp;quot; с docker'ом.&lt;br /&gt;
&lt;br /&gt;
Для поддержки функциональности &amp;lt;code&amp;gt;webide&amp;lt;/code&amp;gt; когда Svacer развёрнут в docker-контейнере необходимо решить следующие задачи:&lt;br /&gt;
&lt;br /&gt;
# Предоставить docker-контейнеру Svacer доступ к управлению контейнерами IDE;&lt;br /&gt;
# Активация функциональности &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;webide&amp;lt;/code&amp;gt; в docker-контейнере Svacer;&lt;br /&gt;
# Организация сетевого доступа между контейнером Svacer и контейнерами IDE;&lt;br /&gt;
# Настройка доступа к общему хранилищу с исходными файлами для контейнера Svacer и контейнеров IDE;&lt;br /&gt;
&lt;br /&gt;
Детали каждой задачи и варианты решения приведены ниже.&lt;br /&gt;
&lt;br /&gt;
{{Note|type=info|text=Приведённые решения основаны на развёртывании Svacer с помощью файла [https://svacer.ispras.ru/extra/docker-compose.yml docker-compose.yml]}}&lt;br /&gt;
&lt;br /&gt;
== Предоставление контейнеру Svacer доступа к управлению контейнерами IDE ==&lt;br /&gt;
&lt;br /&gt;
Функциональность запуска IDE основана на том, что Svacer управляет контейнерами IDE с помощью API docker'а. Поэтому необходимо предоставить доступ к API docker'а из docker-контейнера Svacer.&lt;br /&gt;
&lt;br /&gt;
=== Решение ===&lt;br /&gt;
&lt;br /&gt;
Один из способов подключения к API docker'а является использование socket-файла &amp;lt;code&amp;gt;/var/run/docker.sock&amp;lt;/code&amp;gt;. Чтобы Svacer получил доступ к этому файлу, его необходимо примонтировать к docker-контейнеру:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  ...&lt;br /&gt;
  svacer:&lt;br /&gt;
    ...&lt;br /&gt;
    volumes:&lt;br /&gt;
      ...&lt;br /&gt;
      - /var/run/docker.sock:/var/run/docker.sock:ro&lt;br /&gt;
      ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Изменение настроек Svacer - &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Дальнейшие шаги связаны с изменением настроек Svacer. В случае, когда Svacer развёрнут в docker-контейнере, это можно сделать следующим образом:&lt;br /&gt;
# Создать конфигурационный файл &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;;&lt;br /&gt;
# Перенести настройки функциональности &amp;lt;code&amp;gt;webide&amp;lt;/code&amp;gt;;&lt;br /&gt;
# Примонтировать файл к рабочей директории docker-контейнера Svacer;&lt;br /&gt;
# Перезапустить контейнер Svacer;&lt;br /&gt;
&lt;br /&gt;
Чтобы примонтировать &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; к контейнеру Svacer нужно в файл &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; добавить строку:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  ...&lt;br /&gt;
  svacer:&lt;br /&gt;
    ...&lt;br /&gt;
    volumes:&lt;br /&gt;
      ...&lt;br /&gt;
      - /path/to/svacer.cfg:/svacer/bin/svacer.cfg:ro&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Перенос настроек функциональности &amp;lt;code&amp;gt;webide&amp;lt;/code&amp;gt; в &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Скопировать секцию с [https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide#.D0.9A.D0.BE.D0.BD.D1.84.D0.B8.D0.B3.D1.83.D1.80.D0.B0.D1.86.D0.B8.D1.8F_.D0.BF.D0.BE_.D1.83.D0.BC.D0.BE.D0.BB.D1.87.D0.B0.D0.BD.D0.B8.D1.8E настройками по умолчанию] в &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Активация функциональности &amp;lt;code&amp;gt;webide&amp;lt;/code&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Варианты активации функциональности &amp;lt;code&amp;gt;webide&amp;lt;/code&amp;gt;:&lt;br /&gt;
# указать флаг &amp;lt;code&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt; при запуске Svacer;&lt;br /&gt;
# в конфигурационном файле (&amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;) добавить значение &amp;lt;code&amp;gt;webide&amp;lt;/code&amp;gt; в список &amp;lt;code&amp;gt;/xsvacer/features&amp;lt;/code&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
=== Решение ===&lt;br /&gt;
&lt;br /&gt;
Второй вариант активации функциональности является более предпочтительным. В &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; необходимо добавить следующую настройку:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
xsvacer:&lt;br /&gt;
  features:&lt;br /&gt;
    - webide # активация функциональности webide&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight:bold;line-height:1.6;&amp;quot;&amp;gt;Альтернативное решение с использованием флага &amp;lt;code&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
В [https://svacer.ispras.ru/extra/docker-compose.yml docker-compose.yml] используется docker-образ Svacer, собранный на основе [[Dockerfile]]. В данном файле содержится инструкция запуска Svacer&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
CMD /svacer/bin/svacer-server --memsettings=${MEMSETTINGS} run --store $STORE --pg $SVACER_PG_URL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для активации функциональности IDE необходимо переопределить аргументы инструкции &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;CMD&amp;lt;/code&amp;gt; в файле &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  ...&lt;br /&gt;
  svacer:&lt;br /&gt;
    ...&lt;br /&gt;
    command: /bin/sh -c '/svacer/bin/svacer-server --memsettings=$${MEMSETTINGS} run --store $$STORE --pg $${SVACER_PG_URL} --xsvacer.features webide'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note|type=info|text=Проверить актуальные значения аргументов инструкции &amp;lt;code&amp;gt;CMD&amp;lt;/code&amp;gt; docker-образа можно с помощью команды &amp;lt;code&amp;gt;docker image inspect {имя образа}&amp;lt;/code&amp;gt;}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Организация сетевого доступа между контейнером Svacer и контейнерами IDE ==&lt;br /&gt;
&lt;br /&gt;
В текущей реализации при запуске docker-контейнер IDE публикует внутренний порт web-приложения Theia IDE на случайный порт всех сетевых интерфейсов (0.0.0.0) docker-хоста. Svacer хранит информацию на каком порте хоста развёрнуты соответствующие инстансы IDE и проксирует запросы к ним.&lt;br /&gt;
&lt;br /&gt;
Необходимо организовать доступ контейнера Svacer к портам docker-хоста, на которых опубликованы контейнеры IDE.&lt;br /&gt;
&lt;br /&gt;
=== Решение ===&lt;br /&gt;
&lt;br /&gt;
Чтобы предоставить доступ контейнера Svacer к контейнеру IDE нужно:&lt;br /&gt;
# Определить ip-адрес интерфейса docker-хоста &amp;lt;code&amp;gt;docker0&amp;lt;/code&amp;gt;;&lt;br /&gt;
# Изменить настройку публикации портов контейнеров IDE на значение ip-адреса &amp;lt;code&amp;gt;docker0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''' Определение ip-адреса &amp;lt;code&amp;gt;docker0&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
На docker-хосте выполнить команду &amp;lt;code&amp;gt;ip a&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
$ ip a&lt;br /&gt;
...&lt;br /&gt;
6: docker0: &amp;lt;NO-CARRIER,BROADCAST,MULTICAST,UP&amp;gt; mtu 1500 qdisc noqueue state DOWN group default&lt;br /&gt;
    link/ether 82:70:b5:24:50:e4 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0&lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В данном случае искомый ip-адрес - &amp;lt;code&amp;gt;172.17.0.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Изменение настроек публикации портов контейнеров IDE '''&lt;br /&gt;
&lt;br /&gt;
Настройки публикации порта контейнера IDE заданы в [https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide#.D0.9A.D0.BE.D0.BD.D1.84.D0.B8.D0.B3.D1.83.D1.80.D0.B0.D1.86.D0.B8.D1.8F_.D0.B7.D0.B0.D0.BF.D1.83.D1.81.D0.BA.D0.B0_Theia_IDE конфигурации запуска IDE]. Настройки по умолчанию должны быть предварительно [https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide:SvacerAsDockerContainer&amp;amp;action=submit#.D0.9F.D0.B5.D1.80.D0.B5.D0.BD.D0.BE.D1.81_.D0.BD.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B5.D0.BA_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.BE.D0.BD.D0.B0.D0.BB.D1.8C.D0.BD.D0.BE.D1.81.D1.82.D0.B8_webide_.D0.B2_svacer.cfg перенесены в &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
В файле &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; нужно добавить параметр &amp;lt;code&amp;gt;hostip&amp;lt;/code&amp;gt; со значением ip-адреса интерфейса &amp;lt;code&amp;gt;docker0&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
xsvacer:&lt;br /&gt;
  webide:&lt;br /&gt;
    theia:&lt;br /&gt;
      1-46-0: &amp;amp;1-46-0&lt;br /&gt;
        ...&lt;br /&gt;
        docker:&lt;br /&gt;
          ...&lt;br /&gt;
          container:&lt;br /&gt;
            ...&lt;br /&gt;
            hostconfig:&lt;br /&gt;
              ...&lt;br /&gt;
              portbindings:&lt;br /&gt;
                &amp;quot;3000/tcp&amp;quot;:&lt;br /&gt;
                  - hostport: 0&lt;br /&gt;
                    hostip: 172.17.0.1 # новый параметр&lt;br /&gt;
            ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Настройка доступа к общему хранилищу с исходными файлами для контейнера Svacer и контейнеров IDE ==&lt;br /&gt;
&lt;br /&gt;
При запуске IDE для просмотра снимка, Svacer экспортирует исходный код снимка в папку на docker-хосте. Далее эта папка монтируется к контейнеру IDE, к пути &amp;lt;code&amp;gt;/home/project&amp;lt;/code&amp;gt;, который использует Theia IDE в качестве папки проекта.&lt;br /&gt;
&lt;br /&gt;
При развёртывании Svacer в docker-контейнере необходимо настроить экспорт исходников в папку, которая может быть примонтирована к контейнеру IDE.&lt;br /&gt;
&lt;br /&gt;
=== Решение ===&lt;br /&gt;
&lt;br /&gt;
Путь к корневой папке, в которую будут экспортироваться исходники снимков, задаётся в конфигурационном параметре [https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide#.D0.91.D0.B0.D0.B7.D0.BE.D0.B2.D1.8B.D0.B5_.D0.BF.D0.B0.D1.80.D0.B0.D0.BC.D0.B5.D1.82.D1.80.D1.8B_.D0.BA.D0.BE.D0.BD.D1.84.D0.B8.D0.B3.D1.83.D1.80.D0.B0.D1.86.D0.B8.D0.B8_.D0.B7.D0.B0.D0.BF.D1.83.D1.81.D0.BA.D0.B0 &amp;lt;code&amp;gt;sourcesroot&amp;lt;/code&amp;gt;]. Так как этот же параметр используется для настройки пути к корневой папке на docker-хосте, которая будет примонтирована к контейнеру IDE, то пути к папке с исходным кодом снимков должны совпадать в контейнере Svacer и на docker-хосте.&lt;br /&gt;
&lt;br /&gt;
''' Пример конфигурации '''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
xsvacer:&lt;br /&gt;
  webide:&lt;br /&gt;
    theia:&lt;br /&gt;
      1-46-0: &amp;amp;1-46-0&lt;br /&gt;
        ...&lt;br /&gt;
        sourcesroot: /data/snapshot-sources&lt;br /&gt;
        ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  ...&lt;br /&gt;
  svacer:&lt;br /&gt;
    ...&lt;br /&gt;
    volumes:&lt;br /&gt;
      ...&lt;br /&gt;
      - /data/snapshot-sources:/data/snapshot-sources # привязка с разрешением на запись&lt;br /&gt;
      ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Примеры файлов с описанными изменениями ==&lt;br /&gt;
&lt;br /&gt;
Ниже приведены версии конфигурационных файлов, с изменениями которые были описаны выше. Изменённые строки содежат комментарии.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight:bold;line-height:1.6;&amp;quot;&amp;gt;&amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
{{Note|type=info|text=Ниже приведён файл &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; содержащий только секцию &amp;lt;code&amp;gt;xsvacer&amp;lt;/code&amp;gt;. Если файл &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; создан и содержит другие настройки, то приведённые ниже настройки должны быть перенесены в существующий файл}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
xsvacer:&lt;br /&gt;
  features:&lt;br /&gt;
    - webide # активация функциональности webide&lt;br /&gt;
  webide:&lt;br /&gt;
    theia:&lt;br /&gt;
      1-46-0: &amp;amp;1-46-0&lt;br /&gt;
        disabled: true&lt;br /&gt;
        order: 0&lt;br /&gt;
        name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
        sourcesroot: /data/snapshot-sources # путь к базовой папке с исходным кодом снимков&lt;br /&gt;
        sarif:&lt;br /&gt;
          filenametemplate: &amp;quot;warnings.sarif&amp;quot;&lt;br /&gt;
          commenttemplate: &amp;quot;{{if trim .Text}}`[{{.CreateTs.Local.Format \&amp;quot;02.01.2006 15:04\&amp;quot;}}] {{.CreatedBy}}:`\n\n{{trim .Text}}{{end}}&amp;quot;&lt;br /&gt;
        healthcheck:&lt;br /&gt;
          starttoreadyretries: 10&lt;br /&gt;
          starttoreadyperiod: 200ms&lt;br /&gt;
        docker:&lt;br /&gt;
          hostid: default&lt;br /&gt;
          containernametemplate: &amp;quot;theia-1-46-{{.StartArgs.SnapshotID}}&amp;quot;&lt;br /&gt;
          image:&lt;br /&gt;
            name: theia-blueprint&lt;br /&gt;
            tag: 1.46.0.sarif.clang.10.0.0&lt;br /&gt;
            sourcetype: file&lt;br /&gt;
            sourcefileurl: https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.10.0.0.tar.gz&lt;br /&gt;
          containerconfiglabels:&lt;br /&gt;
            - &amp;quot;com.docker.compose.project&amp;quot;: svacer&lt;br /&gt;
          container:&lt;br /&gt;
            config:&lt;br /&gt;
              env:&lt;br /&gt;
                - THEIA_WEBVIEW_EXTERNAL_ENDPOINT={{hostname}}&lt;br /&gt;
            hostconfig:&lt;br /&gt;
              autoremove: true&lt;br /&gt;
              portbindings:&lt;br /&gt;
                &amp;quot;3000/tcp&amp;quot;:&lt;br /&gt;
                  - hostport: 0&lt;br /&gt;
                    hostip: 172.17.0.1 # ip-адрес интерфейса хоста docker0&lt;br /&gt;
        manager:&lt;br /&gt;
          type: default&lt;br /&gt;
      default:&lt;br /&gt;
        &amp;lt;&amp;lt;: *1-46-0&lt;br /&gt;
        order: 0&lt;br /&gt;
        disabled: false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note|type=info|text=Проверить актуальные значения аргументов инструкции &amp;lt;code&amp;gt;CMD&amp;lt;/code&amp;gt; docker-образа можно с помощью команды &amp;lt;code&amp;gt;docker image inspect {имя образа}&amp;lt;/code&amp;gt;}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight:bold;line-height:1.6;&amp;quot;&amp;gt;&amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
{{Note|type=info|text=Изменены внесены в файл [https://svacer.ispras.ru/extra/docker-compose.yml docker-compose.yml]}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  postgresql:&lt;br /&gt;
    image: postgres:17.0-bullseye&lt;br /&gt;
    container_name: svacer-postgres&lt;br /&gt;
    restart: always&lt;br /&gt;
    shm_size: 1g&lt;br /&gt;
    environment:&lt;br /&gt;
      - POSTGRES_DB=svace&lt;br /&gt;
      - POSTGRES_USER=svace&lt;br /&gt;
      - POSTGRES_PASSWORD=svace&lt;br /&gt;
      - POSTGRES_ROOT_PASSWORD=svace&lt;br /&gt;
    volumes:&lt;br /&gt;
      - svacer-postgres:/var/lib/postgresql/data&lt;br /&gt;
    networks:&lt;br /&gt;
      svacer:&lt;br /&gt;
    healthcheck:&lt;br /&gt;
      test: pg_isready -U svace&lt;br /&gt;
      interval: 8s&lt;br /&gt;
      start_period: 16s&lt;br /&gt;
      timeout: 4s&lt;br /&gt;
      retries: 4&lt;br /&gt;
&lt;br /&gt;
  svacer:&lt;br /&gt;
    image: ispras/svacer:10-0-0&lt;br /&gt;
    container_name: svacer&lt;br /&gt;
    restart: always&lt;br /&gt;
    shm_size: 1g&lt;br /&gt;
    depends_on:&lt;br /&gt;
      postgresql:&lt;br /&gt;
        condition: service_healthy&lt;br /&gt;
    ports:&lt;br /&gt;
      - &amp;quot;3002:3002&amp;quot;&lt;br /&gt;
      - &amp;quot;8080:8080&amp;quot;&lt;br /&gt;
    environment:&lt;br /&gt;
      - SVACER_PG_URL=postgres://svace:svace@postgresql:5432/svace&lt;br /&gt;
      - STORE=/data/store&lt;br /&gt;
    volumes:&lt;br /&gt;
      - svacer-object-store:/data/store&lt;br /&gt;
      - /var/run/docker.sock:/var/run/docker.sock:ro # доступ к API docker'а из контейнера Svacer&lt;br /&gt;
      - ./svacer.cfg:/svacer/bin/svacer.cfg:ro # привязка конфигурационного файла svacer.cfg&lt;br /&gt;
      - /data/snapshot-sources:/data/snapshot-sources # writable привязка коневой папки с исходниками снимков. Пути до и после &amp;quot;:&amp;quot; должны совпадать.&lt;br /&gt;
    networks:&lt;br /&gt;
      svacer:&lt;br /&gt;
    healthcheck:&lt;br /&gt;
      test: curl --fail http://localhost:8080/api/health || exit 1&lt;br /&gt;
      interval: 8s&lt;br /&gt;
      start_period: 16s&lt;br /&gt;
      timeout: 4s&lt;br /&gt;
      retries: 4&lt;br /&gt;
&lt;br /&gt;
volumes:&lt;br /&gt;
  svacer-postgres:&lt;br /&gt;
  svacer-object-store:&lt;br /&gt;
&lt;br /&gt;
networks:&lt;br /&gt;
  svacer:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Схемы компонентов ==&lt;br /&gt;
&lt;br /&gt;
Ниже приведены концептуальные схемы компонентов, на базе которых основана функциональность запуска IDE. Данные схемы могут быть использованы для поиска других решений приведённых выше задач.&lt;br /&gt;
&lt;br /&gt;
=== Стандартный запуск Svacer в виде сервиса ===&lt;br /&gt;
&lt;br /&gt;
[[File:Comp-svacer-webide-default-hosting.png]]&lt;br /&gt;
&lt;br /&gt;
=== Запуск Svacer внутри docker-контейнера ===&lt;br /&gt;
&lt;br /&gt;
[[File:Comp-svacer-in-container-webide-hosting.png]]&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:Comp-svacer-in-container-webide-hosting.png&amp;diff=2560</id>
		<title>File:Comp-svacer-in-container-webide-hosting.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:Comp-svacer-in-container-webide-hosting.png&amp;diff=2560"/>
		<updated>2025-03-11T11:12:39Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: M.vinogradov uploaded a new version of File:Comp-svacer-in-container-webide-hosting.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Диаграмма развёртывания компонентов функциональности запуска IDE если Svacer запущен в docker-контейнере&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide:SvacerAsDockerContainer&amp;diff=2559</id>
		<title>Help:XSvacer:Webide:SvacerAsDockerContainer</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide:SvacerAsDockerContainer&amp;diff=2559"/>
		<updated>2025-03-11T11:10:08Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Поддержка функциональности [https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide webide] когда Svacer развёрнут в docker-контейнере =&lt;br /&gt;
&lt;br /&gt;
На данный момент функциональность запуска Theia IDE по умолчанию настроена на запуск Svacer с помощью исполняемого файла, &amp;quot;рядом&amp;quot; с docker'ом.&lt;br /&gt;
&lt;br /&gt;
Для поддержки функциональности &amp;lt;code&amp;gt;webide&amp;lt;/code&amp;gt; когда Svacer развёрнут в docker-контейнере необходимо решить следующие задачи:&lt;br /&gt;
&lt;br /&gt;
# Предоставить docker-контейнеру Svacer доступ к управлению контейнерами IDE;&lt;br /&gt;
# Активация функциональности &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;webide&amp;lt;/code&amp;gt; в docker-контейнере Svacer;&lt;br /&gt;
# Организация сетевого доступа между контейнером Svacer и контейнерами IDE;&lt;br /&gt;
# Настройка доступа к общему хранилищу с исходными файлами для контейнера Svacer и контейнеров IDE;&lt;br /&gt;
&lt;br /&gt;
Детали каждой задачи и варианты решения приведены ниже.&lt;br /&gt;
&lt;br /&gt;
{{Note|type=info|text=Приведённые решения основаны на развёртывании Svacer с помощью файла [https://svacer.ispras.ru/extra/docker-compose.yml docker-compose.yml]}}&lt;br /&gt;
&lt;br /&gt;
== Предоставление контейнеру Svacer доступа к управлению контейнерами IDE ==&lt;br /&gt;
&lt;br /&gt;
Функциональность запуска IDE основана на том, что Svacer управляет контейнерами IDE с помощью API docker'а. Поэтому необходимо предоставить доступ к API docker'а из docker-контейнера Svacer.&lt;br /&gt;
&lt;br /&gt;
=== Решение ===&lt;br /&gt;
&lt;br /&gt;
Один из способов подключения к API docker'а является использование socket-файла &amp;lt;code&amp;gt;/var/run/docker.sock&amp;lt;/code&amp;gt;. Чтобы Svacer получил доступ к этому файлу, его необходимо примонтировать к docker-контейнеру:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  ...&lt;br /&gt;
  svacer:&lt;br /&gt;
    ...&lt;br /&gt;
    volumes:&lt;br /&gt;
      ...&lt;br /&gt;
      - /var/run/docker.sock:/var/run/docker.sock:ro&lt;br /&gt;
      ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Изменение настроек Svacer - &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Дальнейшие шаги связаны с изменением настроек Svacer. В случае, когда Svacer развёрнут в docker-контейнере, это можно сделать следующим образом:&lt;br /&gt;
# Создать конфигурационный файл &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;;&lt;br /&gt;
# Перенести настройки функциональности &amp;lt;code&amp;gt;webide&amp;lt;/code&amp;gt;;&lt;br /&gt;
# Примонтировать файл к рабочей директории docker-контейнера Svacer;&lt;br /&gt;
# Перезапустить контейнер Svacer;&lt;br /&gt;
&lt;br /&gt;
Чтобы примонтировать &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; к контейнеру Svacer нужно в файл &amp;lt;code&amp;gt;docker-compose.yaml&amp;lt;/code&amp;gt; добавить строку:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  ...&lt;br /&gt;
  svacer:&lt;br /&gt;
    ...&lt;br /&gt;
    volumes:&lt;br /&gt;
      ...&lt;br /&gt;
      - /path/to/svacer.cfg:/svacer/bin/svacer.cfg:ro&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Перенос настроек функциональности &amp;lt;code&amp;gt;webide&amp;lt;/code&amp;gt; в &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Скопировать секцию с [https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide#.D0.9A.D0.BE.D0.BD.D1.84.D0.B8.D0.B3.D1.83.D1.80.D0.B0.D1.86.D0.B8.D1.8F_.D0.BF.D0.BE_.D1.83.D0.BC.D0.BE.D0.BB.D1.87.D0.B0.D0.BD.D0.B8.D1.8E настройками по умолчанию] в &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Активация функциональности &amp;lt;code&amp;gt;webide&amp;lt;/code&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Варианты активации функциональности &amp;lt;code&amp;gt;webide&amp;lt;/code&amp;gt;:&lt;br /&gt;
# указать флаг &amp;lt;code&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt; при запуске Svacer;&lt;br /&gt;
# в конфигурационном файле (&amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;) добавить значение &amp;lt;code&amp;gt;webide&amp;lt;/code&amp;gt; в список &amp;lt;code&amp;gt;/xsvacer/features&amp;lt;/code&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
=== Решение ===&lt;br /&gt;
&lt;br /&gt;
Второй вариант активации функциональности является более предпочтительным. В &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; необходимо добавить следующую настройку:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
xsvacer:&lt;br /&gt;
  features:&lt;br /&gt;
    - webide # активация функциональности webide&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight:bold;line-height:1.6;&amp;quot;&amp;gt;Альтернативное решение с использованием флага &amp;lt;code&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
В [https://svacer.ispras.ru/extra/docker-compose.yml docker-compose.yml] используется docker-образ Svacer, собранный на основе [[Dockerfile]]. В данном файле содержится инструкция запуска Svacer&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
CMD /svacer/bin/svacer-server --memsettings=${MEMSETTINGS} run --store $STORE --pg $SVACER_PG_URL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для активации функциональности IDE необходимо переопределить аргументы инструкции &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;CMD&amp;lt;/code&amp;gt; в файле &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  ...&lt;br /&gt;
  svacer:&lt;br /&gt;
    ...&lt;br /&gt;
    command: /bin/sh -c '/svacer/bin/svacer-server --memsettings=$${MEMSETTINGS} run --store $$STORE --pg $${SVACER_PG_URL} --xsvacer.features webide'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note|type=info|text=Проверить актуальные значения аргументов инструкции &amp;lt;code&amp;gt;CMD&amp;lt;/code&amp;gt; docker-образа можно с помощью команды &amp;lt;code&amp;gt;docker image inspect {имя образа}&amp;lt;/code&amp;gt;}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Организация сетевого доступа между контейнером Svacer и контейнерами IDE ==&lt;br /&gt;
&lt;br /&gt;
В текущей реализации при запуске docker-контейнер IDE публикует внутренний порт web-приложения Theia IDE на случайный порт всех сетевых интерфейсов (0.0.0.0) docker-хоста. Svacer хранит информацию на каком порте хоста развёрнуты соответствующие инстансы IDE и проксирует запросы к ним.&lt;br /&gt;
&lt;br /&gt;
Необходимо организовать доступ контейнера Svacer к портам docker-хоста, на которых опубликованы контейнеры IDE.&lt;br /&gt;
&lt;br /&gt;
=== Решение ===&lt;br /&gt;
&lt;br /&gt;
Чтобы предоставить доступ контейнера Svacer к контейнеру IDE нужно:&lt;br /&gt;
# Определить ip-адрес интерфейса docker-хоста &amp;lt;code&amp;gt;docker0&amp;lt;/code&amp;gt;;&lt;br /&gt;
# Изменить настройку публикации портов контейнеров IDE на значение ip-адреса &amp;lt;code&amp;gt;docker0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''' Определение ip-адреса &amp;lt;code&amp;gt;docker0&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
На docker-хосте выполнить команду &amp;lt;code&amp;gt;ip a&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
$ ip a&lt;br /&gt;
...&lt;br /&gt;
6: docker0: &amp;lt;NO-CARRIER,BROADCAST,MULTICAST,UP&amp;gt; mtu 1500 qdisc noqueue state DOWN group default&lt;br /&gt;
    link/ether 82:70:b5:24:50:e4 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0&lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В данном случае искомый ip-адрес - &amp;lt;code&amp;gt;172.17.0.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Изменение настроек публикации портов контейнеров IDE '''&lt;br /&gt;
&lt;br /&gt;
Настройки публикации порта контейнера IDE заданы в [https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide#.D0.9A.D0.BE.D0.BD.D1.84.D0.B8.D0.B3.D1.83.D1.80.D0.B0.D1.86.D0.B8.D1.8F_.D0.B7.D0.B0.D0.BF.D1.83.D1.81.D0.BA.D0.B0_Theia_IDE конфигурации запуска IDE]. Настройки по умолчанию должны быть предварительно [https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide:SvacerAsDockerContainer&amp;amp;action=submit#.D0.9F.D0.B5.D1.80.D0.B5.D0.BD.D0.BE.D1.81_.D0.BD.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B5.D0.BA_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.BE.D0.BD.D0.B0.D0.BB.D1.8C.D0.BD.D0.BE.D1.81.D1.82.D0.B8_webide_.D0.B2_svacer.cfg перенесены в &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
В файле &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; нужно добавить параметр &amp;lt;code&amp;gt;hostip&amp;lt;/code&amp;gt; со значением ip-адреса интерфейса &amp;lt;code&amp;gt;docker0&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
xsvacer:&lt;br /&gt;
  webide:&lt;br /&gt;
    theia:&lt;br /&gt;
      1-46-0: &amp;amp;1-46-0&lt;br /&gt;
        ...&lt;br /&gt;
        docker:&lt;br /&gt;
          ...&lt;br /&gt;
          container:&lt;br /&gt;
            ...&lt;br /&gt;
            hostconfig:&lt;br /&gt;
              ...&lt;br /&gt;
              portbindings:&lt;br /&gt;
                &amp;quot;3000/tcp&amp;quot;:&lt;br /&gt;
                  - hostport: 0&lt;br /&gt;
                    hostip: 172.17.0.1 # новый параметр&lt;br /&gt;
            ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Настройка доступа к общему хранилищу с исходными файлами для контейнера Svacer и контейнеров IDE ==&lt;br /&gt;
&lt;br /&gt;
При запуске IDE для просмотра снимка, Svacer экспортирует исходный код снимка в папку на docker-хосте. Далее эта папка монтируется к контейнеру IDE, к пути &amp;lt;code&amp;gt;/home/project&amp;lt;/code&amp;gt;, который использует Theia IDE в качестве папки проекта.&lt;br /&gt;
&lt;br /&gt;
При развёртывании Svacer в docker-контейнере необходимо настроить экспорт исходников в папку, которая может быть примонтирована к контейнеру IDE.&lt;br /&gt;
&lt;br /&gt;
=== Решение ===&lt;br /&gt;
&lt;br /&gt;
Путь к корневой папке, в которую будут экспортироваться исходники снимков, задаётся в конфигурационном параметре [https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide#.D0.91.D0.B0.D0.B7.D0.BE.D0.B2.D1.8B.D0.B5_.D0.BF.D0.B0.D1.80.D0.B0.D0.BC.D0.B5.D1.82.D1.80.D1.8B_.D0.BA.D0.BE.D0.BD.D1.84.D0.B8.D0.B3.D1.83.D1.80.D0.B0.D1.86.D0.B8.D0.B8_.D0.B7.D0.B0.D0.BF.D1.83.D1.81.D0.BA.D0.B0 &amp;lt;code&amp;gt;sourcesroot&amp;lt;/code&amp;gt;]. Так как этот же параметр используется для настройки пути к корневой папке на docker-хосте, которая будет примонтирована к контейнеру IDE, то пути к папке с исходным кодом снимков должны совпадать в контейнере Svacer и на docker-хосте.&lt;br /&gt;
&lt;br /&gt;
''' Пример конфигурации '''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
xsvacer:&lt;br /&gt;
  webide:&lt;br /&gt;
    theia:&lt;br /&gt;
      1-46-0: &amp;amp;1-46-0&lt;br /&gt;
        ...&lt;br /&gt;
        sourcesroot: /data/snapshot-sources&lt;br /&gt;
        ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose.yaml&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  ...&lt;br /&gt;
  svacer:&lt;br /&gt;
    ...&lt;br /&gt;
    volumes:&lt;br /&gt;
      ...&lt;br /&gt;
      - /data/snapshot-sources:/data/snapshot-sources # привязка с разрешением на запись&lt;br /&gt;
      ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Примеры файлов с описанными изменениями ==&lt;br /&gt;
&lt;br /&gt;
Ниже приведены версии конфигурационных файлов, с изменениями которые были описаны выше. Изменённые строки содежат комментарии.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight:bold;line-height:1.6;&amp;quot;&amp;gt;&amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
{{Note|type=info|text=Ниже приведён файл &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; содержащий только секцию &amp;lt;code&amp;gt;xsvacer&amp;lt;/code&amp;gt;. Если файл &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; создан и содержит другие настройки, то приведённые ниже настройки должны быть перенесены в существующий файл}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
xsvacer:&lt;br /&gt;
  features:&lt;br /&gt;
    - webide # активация функциональности webide&lt;br /&gt;
  webide:&lt;br /&gt;
    theia:&lt;br /&gt;
      1-46-0: &amp;amp;1-46-0&lt;br /&gt;
        disabled: true&lt;br /&gt;
        order: 0&lt;br /&gt;
        name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
        sourcesroot: /data/snapshot-sources # путь к базовой папке с исходным кодом снимков&lt;br /&gt;
        sarif:&lt;br /&gt;
          filenametemplate: &amp;quot;warnings.sarif&amp;quot;&lt;br /&gt;
          commenttemplate: &amp;quot;{{if trim .Text}}`[{{.CreateTs.Local.Format \&amp;quot;02.01.2006 15:04\&amp;quot;}}] {{.CreatedBy}}:`\n\n{{trim .Text}}{{end}}&amp;quot;&lt;br /&gt;
        healthcheck:&lt;br /&gt;
          starttoreadyretries: 10&lt;br /&gt;
          starttoreadyperiod: 200ms&lt;br /&gt;
        docker:&lt;br /&gt;
          hostid: default&lt;br /&gt;
          containernametemplate: &amp;quot;theia-1-46-{{.StartArgs.SnapshotID}}&amp;quot;&lt;br /&gt;
          image:&lt;br /&gt;
            name: theia-blueprint&lt;br /&gt;
            tag: 1.46.0.sarif.clang.10.0.0&lt;br /&gt;
            sourcetype: file&lt;br /&gt;
            sourcefileurl: https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.10.0.0.tar.gz&lt;br /&gt;
          containerconfiglabels:&lt;br /&gt;
            - &amp;quot;com.docker.compose.project&amp;quot;: svacer&lt;br /&gt;
          container:&lt;br /&gt;
            config:&lt;br /&gt;
              env:&lt;br /&gt;
                - THEIA_WEBVIEW_EXTERNAL_ENDPOINT={{hostname}}&lt;br /&gt;
            hostconfig:&lt;br /&gt;
              autoremove: true&lt;br /&gt;
              portbindings:&lt;br /&gt;
                &amp;quot;3000/tcp&amp;quot;:&lt;br /&gt;
                  - hostport: 0&lt;br /&gt;
                    hostip: 172.17.0.1 # ip-адрес интерфейса хоста docker0&lt;br /&gt;
        manager:&lt;br /&gt;
          type: default&lt;br /&gt;
      default:&lt;br /&gt;
        &amp;lt;&amp;lt;: *1-46-0&lt;br /&gt;
        order: 0&lt;br /&gt;
        disabled: false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note|type=info|text=Проверить актуальные значения аргументов инструкции &amp;lt;code&amp;gt;CMD&amp;lt;/code&amp;gt; docker-образа можно с помощью команды &amp;lt;code&amp;gt;docker image inspect {имя образа}&amp;lt;/code&amp;gt;}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-weight:bold;line-height:1.6;&amp;quot;&amp;gt;&amp;lt;code&amp;gt;docker-compose.yaml&amp;lt;/code&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
{{Note|type=info|text=Изменены внесены в файл [https://svacer.ispras.ru/extra/docker-compose.yml docker-compose.yml]}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  postgresql:&lt;br /&gt;
    image: postgres:17.0-bullseye&lt;br /&gt;
    container_name: svacer-postgres&lt;br /&gt;
    restart: always&lt;br /&gt;
    shm_size: 1g&lt;br /&gt;
    environment:&lt;br /&gt;
      - POSTGRES_DB=svace&lt;br /&gt;
      - POSTGRES_USER=svace&lt;br /&gt;
      - POSTGRES_PASSWORD=svace&lt;br /&gt;
      - POSTGRES_ROOT_PASSWORD=svace&lt;br /&gt;
    volumes:&lt;br /&gt;
      - svacer-postgres:/var/lib/postgresql/data&lt;br /&gt;
    networks:&lt;br /&gt;
      svacer:&lt;br /&gt;
    healthcheck:&lt;br /&gt;
      test: pg_isready -U svace&lt;br /&gt;
      interval: 8s&lt;br /&gt;
      start_period: 16s&lt;br /&gt;
      timeout: 4s&lt;br /&gt;
      retries: 4&lt;br /&gt;
&lt;br /&gt;
  svacer:&lt;br /&gt;
    image: ispras/svacer:10-0-0&lt;br /&gt;
    container_name: svacer&lt;br /&gt;
    restart: always&lt;br /&gt;
    shm_size: 1g&lt;br /&gt;
    depends_on:&lt;br /&gt;
      postgresql:&lt;br /&gt;
        condition: service_healthy&lt;br /&gt;
    ports:&lt;br /&gt;
      - &amp;quot;3002:3002&amp;quot;&lt;br /&gt;
      - &amp;quot;8080:8080&amp;quot;&lt;br /&gt;
    environment:&lt;br /&gt;
      - SVACER_PG_URL=postgres://svace:svace@postgresql:5432/svace&lt;br /&gt;
      - STORE=/data/store&lt;br /&gt;
    volumes:&lt;br /&gt;
      - svacer-object-store:/data/store&lt;br /&gt;
      - /var/run/docker.sock:/var/run/docker.sock:ro # доступ к API docker'а из контейнера Svacer&lt;br /&gt;
      - ./svacer.cfg:/svacer/bin/svacer.cfg:ro # привязка конфигурационного файла svacer.cfg&lt;br /&gt;
      - /data/snapshot-sources:/data/snapshot-sources # writable привязка коневой папки с исходниками снимков. Пути до и после &amp;quot;:&amp;quot; должны совпадать.&lt;br /&gt;
    networks:&lt;br /&gt;
      svacer:&lt;br /&gt;
    healthcheck:&lt;br /&gt;
      test: curl --fail http://localhost:8080/api/health || exit 1&lt;br /&gt;
      interval: 8s&lt;br /&gt;
      start_period: 16s&lt;br /&gt;
      timeout: 4s&lt;br /&gt;
      retries: 4&lt;br /&gt;
&lt;br /&gt;
volumes:&lt;br /&gt;
  svacer-postgres:&lt;br /&gt;
  svacer-object-store:&lt;br /&gt;
&lt;br /&gt;
networks:&lt;br /&gt;
  svacer:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Схемы компонентов ==&lt;br /&gt;
&lt;br /&gt;
Ниже приведены концептуальные схемы компонентов, на базе которых основана функциональность запуска IDE. Данные схемы могут быть использованы для поиска других решений приведённых выше задач.&lt;br /&gt;
&lt;br /&gt;
=== Стандартный запуск Svacer в виде сервиса ===&lt;br /&gt;
&lt;br /&gt;
[[File:Comp-svacer-webide-default-hosting.png]]&lt;br /&gt;
&lt;br /&gt;
=== Запуск Svacer внутри docker-контейнера ===&lt;br /&gt;
&lt;br /&gt;
[[File:Comp-svacer-in-container-webide-hosting.png]]&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide:SvacerAsDockerContainer&amp;diff=2558</id>
		<title>Help:XSvacer:Webide:SvacerAsDockerContainer</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide:SvacerAsDockerContainer&amp;diff=2558"/>
		<updated>2025-03-11T08:24:08Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Поддержка функциональности [https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide webide] когда Svacer развёрнут в docker-контейнере =&lt;br /&gt;
&lt;br /&gt;
На данный момент функциональность запуска Theia IDE по умолчанию настроена на запуск Svacer с помощью исполняемого файла, &amp;quot;рядом&amp;quot; с docker'ом.&lt;br /&gt;
&lt;br /&gt;
Для поддержки функциональности &amp;lt;code&amp;gt;webide&amp;lt;/code&amp;gt; когда Svacer развёрнут в docker-контейнере необходимо решить следующие задачи:&lt;br /&gt;
&lt;br /&gt;
# Активация функциональности &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;webide&amp;lt;/code&amp;gt; в docker-контейнере Svacer;&lt;br /&gt;
# Предоставить docker-контейнеру Svacer доступ к управлению контейнерами IDE;&lt;br /&gt;
# Организация сетевого доступа между контейнером Svacer и контейнерами IDE;&lt;br /&gt;
# Настройка доступа к общему хранилищу с исходными файлами для контейнера Svacer и контейнеров IDE;&lt;br /&gt;
&lt;br /&gt;
Детали каждой задачи и варианты решения приведены ниже.&lt;br /&gt;
&lt;br /&gt;
{{Note|type=info|text=Приведённые решения основаны на развёртывании Svacer с помощью файла [https://svacer.ispras.ru/extra/docker-compose.yml docker-compose.yml]}}&lt;br /&gt;
&lt;br /&gt;
== Активация функциональности &amp;lt;code&amp;gt;webide&amp;lt;/code&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Для активации функциональности &amp;lt;code&amp;gt;webide&amp;lt;/code&amp;gt; необходимо при запуске Svacer указать флаг &amp;lt;code&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Решение ===&lt;br /&gt;
&lt;br /&gt;
В [https://svacer.ispras.ru/extra/docker-compose.yml docker-compose.yml] используется docker-образ Svacer, собранный на основе [[Dockerfile]]. В данном файле содержится инструкция запуска Svacer&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
CMD /svacer/bin/svacer-server --memsettings=${MEMSETTINGS} run --store $STORE --pg $SVACER_PG_URL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для активации функциональности IDE необходимо переопределить аргументы инструкции &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;CMD&amp;lt;/code&amp;gt; в файле &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  ...&lt;br /&gt;
  svacer:&lt;br /&gt;
    ...&lt;br /&gt;
    command: /bin/sh -c '/svacer/bin/svacer-server --memsettings=$${MEMSETTINGS} run --store $$STORE --pg $${SVACER_PG_URL} --xsvacer.features webide'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note|type=info|text=Проверить актуальные значения аргументов инструкции &amp;lt;code&amp;gt;CMD&amp;lt;/code&amp;gt; docker-образа можно с помощью команды &amp;lt;code&amp;gt;docker image inspect {имя образа}&amp;lt;/code&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
== Предоставление контейнеру Svacer доступа к управлению контейнерами IDE ==&lt;br /&gt;
&lt;br /&gt;
Функциональность запуска IDE основана на том, что Svacer управляет контейнерами IDE с помощью API docker'а. Поэтому необходимо предоставить доступ к API docker'а из docker-контейнера Svacer.&lt;br /&gt;
&lt;br /&gt;
=== Решение ===&lt;br /&gt;
&lt;br /&gt;
Один из способов подключения к API docker'а является использование socket-файла &amp;lt;code&amp;gt;/var/run/docker.sock&amp;lt;/code&amp;gt;. Чтобы Svacer получил доступ к этому файлу, его необходимо примонтировать к docker-контейнеру:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  ...&lt;br /&gt;
  svacer:&lt;br /&gt;
    ...&lt;br /&gt;
    volumes:&lt;br /&gt;
      ...&lt;br /&gt;
      - /var/run/docker.sock:/var/run/docker.sock:ro&lt;br /&gt;
      ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Изменение настроек Svacer - &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Дальнейшие шаги связаны с изменением настроек Svacer. В случае, когда Svacer развёрнут в docker-контейнере, это можно сделать следующим образом:&lt;br /&gt;
# Создать конфигурационный файл &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;;&lt;br /&gt;
# Примонтировать файл к рабочей директории docker-контейнера Svacer;&lt;br /&gt;
# Перезапустить контейнер Svacer;&lt;br /&gt;
&lt;br /&gt;
Чтобы примонтировать &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; к контейнеру Svacer нужно в файл &amp;lt;code&amp;gt;docker-compose.yaml&amp;lt;/code&amp;gt; добавить строку:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  ...&lt;br /&gt;
  svacer:&lt;br /&gt;
    ...&lt;br /&gt;
    volumes:&lt;br /&gt;
      ...&lt;br /&gt;
      - /path/to/svacer.cfg:/svacer/bin/svacer.cfg:ro&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Перенос настроек функциональности &amp;lt;code&amp;gt;webide&amp;lt;/code&amp;gt; в &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Скопировать секцию с [https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide#.D0.9A.D0.BE.D0.BD.D1.84.D0.B8.D0.B3.D1.83.D1.80.D0.B0.D1.86.D0.B8.D1.8F_.D0.BF.D0.BE_.D1.83.D0.BC.D0.BE.D0.BB.D1.87.D0.B0.D0.BD.D0.B8.D1.8E настройками по умолчанию] в &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Организация сетевого доступа между контейнером Svacer и контейнерами IDE ==&lt;br /&gt;
&lt;br /&gt;
В текущей реализации при запуске docker-контейнер IDE публикует внутренний порт web-приложения Theia IDE на случайный порт всех сетевых интерфейсов (0.0.0.0) docker-хоста. Svacer хранит информацию на каком порте хоста развёрнуты соответствующие инстансы IDE и проксирует запросы к ним.&lt;br /&gt;
&lt;br /&gt;
Необходимо организовать доступ контейнера Svacer к портам docker-хоста, на которых опубликованы контейнеры IDE.&lt;br /&gt;
&lt;br /&gt;
=== Решение ===&lt;br /&gt;
&lt;br /&gt;
Чтобы предоставить доступ контейнера Svacer к контейнеру IDE нужно:&lt;br /&gt;
# Определить ip-адрес интерфейса docker-хоста &amp;lt;code&amp;gt;docker0&amp;lt;/code&amp;gt;;&lt;br /&gt;
# Изменить настройку публикации портов контейнеров IDE на значение ip-адреса &amp;lt;code&amp;gt;docker0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''' Определение ip-адреса &amp;lt;code&amp;gt;docker0&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
На docker-хосте выполнить команду &amp;lt;code&amp;gt;ip a&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
$ ip a&lt;br /&gt;
...&lt;br /&gt;
6: docker0: &amp;lt;NO-CARRIER,BROADCAST,MULTICAST,UP&amp;gt; mtu 1500 qdisc noqueue state DOWN group default&lt;br /&gt;
    link/ether 82:70:b5:24:50:e4 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0&lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В данном случае искомый ip-адрес - &amp;lt;code&amp;gt;172.17.0.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Изменение настроек публикации портов контейнеров IDE '''&lt;br /&gt;
&lt;br /&gt;
Настройки публикации порта контейнера IDE заданы в [https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide#.D0.9A.D0.BE.D0.BD.D1.84.D0.B8.D0.B3.D1.83.D1.80.D0.B0.D1.86.D0.B8.D1.8F_.D0.B7.D0.B0.D0.BF.D1.83.D1.81.D0.BA.D0.B0_Theia_IDE конфигурации запуска IDE]. Настройки по умолчанию должны быть предварительно [https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide:SvacerAsDockerContainer&amp;amp;action=submit#.D0.9F.D0.B5.D1.80.D0.B5.D0.BD.D0.BE.D1.81_.D0.BD.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B5.D0.BA_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.BE.D0.BD.D0.B0.D0.BB.D1.8C.D0.BD.D0.BE.D1.81.D1.82.D0.B8_webide_.D0.B2_svacer.cfg перенесены в &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
В файле &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; нужно добавить параметр &amp;lt;code&amp;gt;hostip&amp;lt;/code&amp;gt; со значением ip-адреса интерфейса &amp;lt;code&amp;gt;docker0&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
xsvacer:&lt;br /&gt;
  webide:&lt;br /&gt;
    theia:&lt;br /&gt;
      1-46-0: &amp;amp;1-46-0&lt;br /&gt;
        ...&lt;br /&gt;
        docker:&lt;br /&gt;
          ...&lt;br /&gt;
          container:&lt;br /&gt;
            ...&lt;br /&gt;
            hostconfig:&lt;br /&gt;
              ...&lt;br /&gt;
              portbindings:&lt;br /&gt;
                &amp;quot;3000/tcp&amp;quot;:&lt;br /&gt;
                  - hostport: 0&lt;br /&gt;
                    hostip: 172.17.0.1 # новый параметр&lt;br /&gt;
            ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Настройка доступа к общему хранилищу с исходными файлами для контейнера Svacer и контейнеров IDE ==&lt;br /&gt;
&lt;br /&gt;
При запуске IDE для просмотра снимка, Svacer экспортирует исходный код снимка в папку на docker-хосте. Далее эта папка монтируется к контейнеру IDE, к пути &amp;lt;code&amp;gt;/home/project&amp;lt;/code&amp;gt;, который использует Theia IDE в качестве папки проекта.&lt;br /&gt;
&lt;br /&gt;
При развёртывании Svacer в docker-контейнере необходимо настроить экспорт исходников в папку, которая может быть примонтирована к контейнеру IDE.&lt;br /&gt;
&lt;br /&gt;
=== Решение ===&lt;br /&gt;
&lt;br /&gt;
Путь к корневой папке, в которую будут экспортироваться исходники снимков, задаётся в конфигурационном параметре [https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide#.D0.91.D0.B0.D0.B7.D0.BE.D0.B2.D1.8B.D0.B5_.D0.BF.D0.B0.D1.80.D0.B0.D0.BC.D0.B5.D1.82.D1.80.D1.8B_.D0.BA.D0.BE.D0.BD.D1.84.D0.B8.D0.B3.D1.83.D1.80.D0.B0.D1.86.D0.B8.D0.B8_.D0.B7.D0.B0.D0.BF.D1.83.D1.81.D0.BA.D0.B0 &amp;lt;code&amp;gt;sourcesroot&amp;lt;/code&amp;gt;]. Так как этот же параметр используется для настройки пути к корневой папке на docker-хосте, которая будет примонтирована к контейнеру IDE, то пути к папке с исходным кодом снимков должны совпадать в контейнере Svacer и на docker-хосте.&lt;br /&gt;
&lt;br /&gt;
''' Пример конфигурации '''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
xsvacer:&lt;br /&gt;
  webide:&lt;br /&gt;
    theia:&lt;br /&gt;
      1-46-0: &amp;amp;1-46-0&lt;br /&gt;
        ...&lt;br /&gt;
        sourcesroot: /data/snapshot-sources&lt;br /&gt;
        ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose.yaml&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  ...&lt;br /&gt;
  svacer:&lt;br /&gt;
    ...&lt;br /&gt;
    volumes:&lt;br /&gt;
      ...&lt;br /&gt;
      - /data/snapshot-sources:/data/snapshot-sources&lt;br /&gt;
      ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Схемы компонентов ==&lt;br /&gt;
&lt;br /&gt;
Ниже приведены концептуальные схемы компонентов, на базе которых основана функциональность запуска IDE. Данные схемы могут быть использованы для поиска других решений приведённых выше задач.&lt;br /&gt;
&lt;br /&gt;
=== Стандартный запуск Svacer в виде сервиса ===&lt;br /&gt;
&lt;br /&gt;
[[File:Comp-svacer-webide-default-hosting.png]]&lt;br /&gt;
&lt;br /&gt;
=== Запуск Svacer внутри docker-контейнера ===&lt;br /&gt;
&lt;br /&gt;
[[File:Comp-svacer-in-container-webide-hosting.png]]&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:Comp-svacer-in-container-webide-hosting.png&amp;diff=2557</id>
		<title>File:Comp-svacer-in-container-webide-hosting.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:Comp-svacer-in-container-webide-hosting.png&amp;diff=2557"/>
		<updated>2025-03-11T08:22:06Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: M.vinogradov uploaded a new version of File:Comp-svacer-in-container-webide-hosting.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Диаграмма развёртывания компонентов функциональности запуска IDE если Svacer запущен в docker-контейнере&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:Comp-svacer-webide-default-hosting.png&amp;diff=2556</id>
		<title>File:Comp-svacer-webide-default-hosting.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:Comp-svacer-webide-default-hosting.png&amp;diff=2556"/>
		<updated>2025-03-11T08:21:46Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: M.vinogradov uploaded a new version of File:Comp-svacer-webide-default-hosting.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Диаграмма стандартного развёртывания компонентов функциональности запуска IDE&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:Comp-svacer-in-container-webide-hosting.png&amp;diff=2555</id>
		<title>File:Comp-svacer-in-container-webide-hosting.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:Comp-svacer-in-container-webide-hosting.png&amp;diff=2555"/>
		<updated>2025-03-11T08:15:30Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Диаграмма развёртывания компонентов функциональности запуска IDE если Svacer запущен в docker-контейнере&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:Comp-svacer-webide-default-hosting.png&amp;diff=2554</id>
		<title>File:Comp-svacer-webide-default-hosting.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:Comp-svacer-webide-default-hosting.png&amp;diff=2554"/>
		<updated>2025-03-11T08:10:50Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Диаграмма стандартного развёртывания компонентов функциональности запуска IDE&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide:SvacerAsDockerContainer&amp;diff=2553</id>
		<title>Help:XSvacer:Webide:SvacerAsDockerContainer</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide:SvacerAsDockerContainer&amp;diff=2553"/>
		<updated>2025-03-11T07:16:53Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Поддержка функциональности [https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide webide] когда Svacer развёрнут в docker-контейнере =&lt;br /&gt;
&lt;br /&gt;
На данный момент функциональность запуска Theia IDE по умолчанию настроена на запуск Svacer с помощью исполняемого файла, &amp;quot;рядом&amp;quot; с docker'ом.&lt;br /&gt;
&lt;br /&gt;
Для поддержки функциональности &amp;lt;code&amp;gt;webide&amp;lt;/code&amp;gt; когда Svacer развёрнут в docker-контейнере необходимо решить следующие задачи:&lt;br /&gt;
&lt;br /&gt;
# Активация функциональности &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;webide&amp;lt;/code&amp;gt; в docker-контейнере Svacer;&lt;br /&gt;
# Предоставить docker-контейнеру Svacer доступ к управлению контейнерами IDE;&lt;br /&gt;
# Организация сетевого доступа между контейнером Svacer и контейнерами IDE;&lt;br /&gt;
# Настройка доступа к общему хранилищу с исходными файлами для контейнера Svacer и контейнеров IDE;&lt;br /&gt;
&lt;br /&gt;
Детали каждой задачи и варианты решения приведены ниже.&lt;br /&gt;
&lt;br /&gt;
{{Note|type=info|text=Приведённые решения основаны на развёртывании Svacer с помощью файла [https://svacer.ispras.ru/extra/docker-compose.yml docker-compose.yml]}}&lt;br /&gt;
&lt;br /&gt;
== Активация функциональности &amp;lt;code&amp;gt;webide&amp;lt;/code&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Для активации функциональности &amp;lt;code&amp;gt;webide&amp;lt;/code&amp;gt; необходимо при запуске Svacer указать флаг &amp;lt;code&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Решение ===&lt;br /&gt;
&lt;br /&gt;
В [https://svacer.ispras.ru/extra/docker-compose.yml docker-compose.yml] используется docker-образ Svacer, собранный на основе [[Dockerfile]]. В данном файле содержится инструкция запуска Svacer&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
CMD /svacer/bin/svacer-server --memsettings=${MEMSETTINGS} run --store $STORE --pg $SVACER_PG_URL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для активации функциональности IDE необходимо переопределить аргументы инструкции &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;CMD&amp;lt;/code&amp;gt; в файле &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  ...&lt;br /&gt;
  svacer:&lt;br /&gt;
    ...&lt;br /&gt;
    command: /bin/sh -c '/svacer/bin/svacer-server --memsettings=$${MEMSETTINGS} run --store $$STORE --pg $${SVACER_PG_URL} --xsvacer.features webide'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note|type=info|text=Проверить актуальные значения аргументов инструкции &amp;lt;code&amp;gt;CMD&amp;lt;/code&amp;gt; docker-образа можно с помощью команды &amp;lt;code&amp;gt;docker image inspect {имя образа}&amp;lt;/code&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
== Предоставление контейнеру Svacer доступа к управлению контейнерами IDE ==&lt;br /&gt;
&lt;br /&gt;
Функциональность запуска IDE основана на том, что Svacer управляет контейнерами IDE с помощью API docker'а. Поэтому необходимо предоставить доступ к API docker'а из docker-контейнера Svacer.&lt;br /&gt;
&lt;br /&gt;
=== Решение ===&lt;br /&gt;
&lt;br /&gt;
Один из способов подключения к API docker'а является использование socket-файла &amp;lt;code&amp;gt;/var/run/docker.sock&amp;lt;/code&amp;gt;. Чтобы Svacer получил доступ к этому файлу, его необходимо примонтировать к docker-контейнеру:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  ...&lt;br /&gt;
  svacer:&lt;br /&gt;
    ...&lt;br /&gt;
    volumes:&lt;br /&gt;
      ...&lt;br /&gt;
      - /var/run/docker.sock:/var/run/docker.sock:ro&lt;br /&gt;
      ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Изменение настроек Svacer - &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Дальнейшие шаги связаны с изменением настроек Svacer. В случае, когда Svacer развёрнут в docker-контейнере, это можно сделать следующим образом:&lt;br /&gt;
# Создать конфигурационный файл &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;;&lt;br /&gt;
# Примонтировать файл к рабочей директории docker-контейнера Svacer;&lt;br /&gt;
# Перезапустить контейнер Svacer;&lt;br /&gt;
&lt;br /&gt;
Чтобы примонтировать &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; к контейнеру Svacer нужно в файл &amp;lt;code&amp;gt;docker-compose.yaml&amp;lt;/code&amp;gt; добавить строку:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  ...&lt;br /&gt;
  svacer:&lt;br /&gt;
    ...&lt;br /&gt;
    volumes:&lt;br /&gt;
      ...&lt;br /&gt;
      - /path/to/svacer.cfg:/svacer/bin/svacer.cfg:ro&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Перенос настроек функциональности &amp;lt;code&amp;gt;webide&amp;lt;/code&amp;gt; в &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Скопировать секцию с [https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide#.D0.9A.D0.BE.D0.BD.D1.84.D0.B8.D0.B3.D1.83.D1.80.D0.B0.D1.86.D0.B8.D1.8F_.D0.BF.D0.BE_.D1.83.D0.BC.D0.BE.D0.BB.D1.87.D0.B0.D0.BD.D0.B8.D1.8E настройками по умолчанию] в &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Организация сетевого доступа между контейнером Svacer и контейнерами IDE ==&lt;br /&gt;
&lt;br /&gt;
В текущей реализации при запуске docker-контейнер IDE публикует внутренний порт web-приложения Theia IDE на случайный порт всех сетевых интерфейсов (0.0.0.0) docker-хоста. Svacer хранит информацию на каком порте хоста развёрнуты соответствующие инстансы IDE и проксирует запросы к ним.&lt;br /&gt;
&lt;br /&gt;
Необходимо организовать доступ контейнера Svacer к портам docker-хоста, на которых опубликованы контейнеры IDE.&lt;br /&gt;
&lt;br /&gt;
=== Решение ===&lt;br /&gt;
&lt;br /&gt;
Чтобы предоставить доступ контейнера Svacer к контейнеру IDE нужно:&lt;br /&gt;
# Определить ip-адрес интерфейса docker-хоста &amp;lt;code&amp;gt;docker0&amp;lt;/code&amp;gt;;&lt;br /&gt;
# Изменить настройку публикации портов контейнеров IDE на значение ip-адреса &amp;lt;code&amp;gt;docker0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''' Определение ip-адреса &amp;lt;code&amp;gt;docker0&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
На docker-хосте выполнить команду &amp;lt;code&amp;gt;ip a&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
$ ip a&lt;br /&gt;
...&lt;br /&gt;
6: docker0: &amp;lt;NO-CARRIER,BROADCAST,MULTICAST,UP&amp;gt; mtu 1500 qdisc noqueue state DOWN group default&lt;br /&gt;
    link/ether 82:70:b5:24:50:e4 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0&lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В данном случае искомый ip-адрес - &amp;lt;code&amp;gt;172.17.0.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Изменение настроек публикации портов контейнеров IDE '''&lt;br /&gt;
&lt;br /&gt;
Настройки публикации порта контейнера IDE заданы в [https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide#.D0.9A.D0.BE.D0.BD.D1.84.D0.B8.D0.B3.D1.83.D1.80.D0.B0.D1.86.D0.B8.D1.8F_.D0.B7.D0.B0.D0.BF.D1.83.D1.81.D0.BA.D0.B0_Theia_IDE конфигурации запуска IDE]. Настройки по умолчанию должны быть предварительно [https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide:SvacerAsDockerContainer&amp;amp;action=submit#.D0.9F.D0.B5.D1.80.D0.B5.D0.BD.D0.BE.D1.81_.D0.BD.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B5.D0.BA_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.BE.D0.BD.D0.B0.D0.BB.D1.8C.D0.BD.D0.BE.D1.81.D1.82.D0.B8_webide_.D0.B2_svacer.cfg перенесены в &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
В файле &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; нужно добавить параметр &amp;lt;code&amp;gt;hostip&amp;lt;/code&amp;gt; со значением ip-адреса интерфейса &amp;lt;code&amp;gt;docker0&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
xsvacer:&lt;br /&gt;
  webide:&lt;br /&gt;
    theia:&lt;br /&gt;
      1-46-0: &amp;amp;1-46-0&lt;br /&gt;
        ...&lt;br /&gt;
        docker:&lt;br /&gt;
          ...&lt;br /&gt;
          container:&lt;br /&gt;
            ...&lt;br /&gt;
            hostconfig:&lt;br /&gt;
              ...&lt;br /&gt;
              portbindings:&lt;br /&gt;
                &amp;quot;3000/tcp&amp;quot;:&lt;br /&gt;
                  - hostport: 0&lt;br /&gt;
                    hostip: 172.17.0.1 # новый параметр&lt;br /&gt;
            ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Настройка доступа к общему хранилищу с исходными файлами для контейнера Svacer и контейнеров IDE ==&lt;br /&gt;
&lt;br /&gt;
При запуске IDE для просмотра снимка, Svacer экспортирует исходный код снимка в папку на docker-хосте. Далее эта папка монтируется к контейнеру IDE, к пути &amp;lt;code&amp;gt;/home/project&amp;lt;/code&amp;gt;, который использует Theia IDE в качестве папки проекта.&lt;br /&gt;
&lt;br /&gt;
При развёртывании Svacer в docker-контейнере необходимо настроить экспорт исходников в папку, которая может быть примонтирована к контейнеру IDE.&lt;br /&gt;
&lt;br /&gt;
=== Решение ===&lt;br /&gt;
&lt;br /&gt;
Путь к корневой папке, в которую будут экспортироваться исходники снимков, задаётся в конфигурационном параметре [https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide#.D0.91.D0.B0.D0.B7.D0.BE.D0.B2.D1.8B.D0.B5_.D0.BF.D0.B0.D1.80.D0.B0.D0.BC.D0.B5.D1.82.D1.80.D1.8B_.D0.BA.D0.BE.D0.BD.D1.84.D0.B8.D0.B3.D1.83.D1.80.D0.B0.D1.86.D0.B8.D0.B8_.D0.B7.D0.B0.D0.BF.D1.83.D1.81.D0.BA.D0.B0 &amp;lt;code&amp;gt;sourcesroot&amp;lt;/code&amp;gt;]. Так как этот же параметр используется для настройки пути к корневой папке на docker-хосте, которая будет примонтирована к контейнеру IDE, то пути к папке с исходным кодом снимков должны совпадать в контейнере Svacer и на docker-хосте.&lt;br /&gt;
&lt;br /&gt;
''' Пример конфигурации '''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
xsvacer:&lt;br /&gt;
  webide:&lt;br /&gt;
    theia:&lt;br /&gt;
      1-46-0: &amp;amp;1-46-0&lt;br /&gt;
        ...&lt;br /&gt;
        sourcesroot: /data/snapshot-sources&lt;br /&gt;
        ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose.yaml&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  ...&lt;br /&gt;
  svacer:&lt;br /&gt;
    ...&lt;br /&gt;
    volumes:&lt;br /&gt;
      ...&lt;br /&gt;
      - /data/snapshot-sources:/data/snapshot-sources&lt;br /&gt;
      ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide:SvacerAsDockerContainer&amp;diff=2552</id>
		<title>Help:XSvacer:Webide:SvacerAsDockerContainer</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide:SvacerAsDockerContainer&amp;diff=2552"/>
		<updated>2025-03-10T08:06:35Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: Created page with &amp;quot;= Поддержка функциональности [https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide webide] когда Svacer развёрнут в docker-контейнере =  На данный момент функциональность запуска Theia IDE по умолчанию настроена на запуск Svacer с помощью исполняемого файла, &amp;quot;рядом&amp;quot; с docker'ом.  Для поддержки ф...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Поддержка функциональности [https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide webide] когда Svacer развёрнут в docker-контейнере =&lt;br /&gt;
&lt;br /&gt;
На данный момент функциональность запуска Theia IDE по умолчанию настроена на запуск Svacer с помощью исполняемого файла, &amp;quot;рядом&amp;quot; с docker'ом.&lt;br /&gt;
&lt;br /&gt;
Для поддержки функциональности &amp;lt;code&amp;gt;webide&amp;lt;/code&amp;gt; когда Svacer развёрнут в docker-контейнере необходимо решить следующие задачи:&lt;br /&gt;
&lt;br /&gt;
# Активация функциональности &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;webide&amp;lt;/code&amp;gt; в docker-контейнере Svacer;&lt;br /&gt;
# Предоставить docker-контейнеру Svacer доступ к управлению контейнерами IDE;&lt;br /&gt;
# Организация сетевого доступа между контейнером Svacer и контейнерами IDE;&lt;br /&gt;
# Настройка доступа к общему хранилищу с исходными файлами для контейнера Svacer и контейнеров IDE;&lt;br /&gt;
&lt;br /&gt;
Детали каждой задачи и варианты решения приведены ниже.&lt;br /&gt;
&lt;br /&gt;
{{Note|type=info|text=Приведённые решения основаны на развёртывании Svacer с помощью файла [https://svacer.ispras.ru/extra/docker-compose.yml docker-compose.yml]}}&lt;br /&gt;
&lt;br /&gt;
== Активация функциональности &amp;lt;code&amp;gt;webide&amp;lt;/code&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Для активации функциональности &amp;lt;code&amp;gt;webide&amp;lt;/code&amp;gt; необходимо при запуске Svacer указать флаг &amp;lt;code&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Решение ===&lt;br /&gt;
&lt;br /&gt;
В [https://svacer.ispras.ru/extra/docker-compose.yml docker-compose.yml] используется docker-образ Svacer, собранный на основе [[Dockerfile]]. В данном файле содержится инструкция запуска Svacer&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
CMD /svacer/bin/svacer-server --memsettings=${MEMSETTINGS} run --store $STORE --pg $SVACER_PG_URL&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для активации функциональности IDE необходимо переопределить аргументы инструкции &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;CMD&amp;lt;/code&amp;gt; в файле &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  ...&lt;br /&gt;
  svacer:&lt;br /&gt;
    ...&lt;br /&gt;
    command: /bin/sh -c '/svacer/bin/svacer-server --memsettings=$${MEMSETTINGS} run --store $$STORE --pg $${SVACER_PG_URL} --xsvacer.features webide'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note|type=info|text=Проверить актуальные значения аргументов инструкции &amp;lt;code&amp;gt;CMD&amp;lt;/code&amp;gt; docker-образа можно с помощью команды &amp;lt;code&amp;gt;docker image inspect {имя образа}&amp;lt;/code&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
== Предоставление контейнеру Svacer доступа к управлению контейнерами IDE ==&lt;br /&gt;
&lt;br /&gt;
Функциональность запуска IDE основана на том, что Svacer управляет контейнерами IDE с помощью API docker-хоста. Поэтому необходимо предоставить доступ к API docker-хоста из docker-контейнера Svacer.&lt;br /&gt;
&lt;br /&gt;
=== Решение ===&lt;br /&gt;
&lt;br /&gt;
Один из способов подключения к API docker-хоста является использование socket-файла &amp;lt;code&amp;gt;/var/run/docker.sock&amp;lt;/code&amp;gt;. Чтобы Svacer получил доступ к этому файлу, его необходимо примонтировать к docker-контейнеру:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  ...&lt;br /&gt;
  svacer:&lt;br /&gt;
    ...&lt;br /&gt;
    volumes:&lt;br /&gt;
      ...&lt;br /&gt;
      - /var/run/docker.sock:/var/run/docker.sock:ro&lt;br /&gt;
      ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Изменение настроек Svacer - &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Дальнейшие шаги связаны с изменением настроек Svacer. В случае, когда Svacer развёрнут в docker-контейнере, это можно сделать следующим образом:&lt;br /&gt;
# Создать конфигурационный файл &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;;&lt;br /&gt;
# Примонтировать файл к рабочей директории docker-контейнера Svacer;&lt;br /&gt;
# Перезапустить контейнер Svacer;&lt;br /&gt;
&lt;br /&gt;
Чтобы примонтировать &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; к контейнеру Svacer нужно в файл &amp;lt;code&amp;gt;docker-compose.yaml&amp;lt;/code&amp;gt; добавить строку:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  ...&lt;br /&gt;
  svacer:&lt;br /&gt;
    ...&lt;br /&gt;
    volumes:&lt;br /&gt;
      ...&lt;br /&gt;
      - /path/to/svacer.cfg:/svacer/bin/svacer.cfg:ro&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Перенос настроек функциональности &amp;lt;code&amp;gt;webide&amp;lt;/code&amp;gt; в &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Скопировать секцию с [https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide#.D0.9A.D0.BE.D0.BD.D1.84.D0.B8.D0.B3.D1.83.D1.80.D0.B0.D1.86.D0.B8.D1.8F_.D0.BF.D0.BE_.D1.83.D0.BC.D0.BE.D0.BB.D1.87.D0.B0.D0.BD.D0.B8.D1.8E настройками по умолчанию] в &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Организация сетевого доступа между контейнером Svacer и контейнерами IDE ==&lt;br /&gt;
&lt;br /&gt;
В текущей реализации при запуске docker-контейнер IDE публикует внутренний порт web-приложения Theia IDE на случайный порт всех сетевых интерфейсов (0.0.0.0) docker-хоста. Svacer хранит информацию на каком порте хоста развёрнуты соответствующие инстансы IDE и проксирует запросы к ним.&lt;br /&gt;
&lt;br /&gt;
Необходимо организовать доступ контейнера Svacer к портам docker-хоста, на которых опубликованы контейнеры IDE.&lt;br /&gt;
&lt;br /&gt;
=== Решение ===&lt;br /&gt;
&lt;br /&gt;
Чтобы предоставить доступ контейнера Svacer к контейнеру IDE нужно:&lt;br /&gt;
# Определить ip-адрес интерфейса docker-хоста &amp;lt;code&amp;gt;docker0&amp;lt;/code&amp;gt;;&lt;br /&gt;
# Изменить настройку публикации портов контейнеров IDE на значение ip-адреса &amp;lt;code&amp;gt;docker0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''' Определение ip-адреса &amp;lt;code&amp;gt;docker0&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
На docker-хосте выполнить команду &amp;lt;code&amp;gt;ip a&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
$ ip a&lt;br /&gt;
...&lt;br /&gt;
6: docker0: &amp;lt;NO-CARRIER,BROADCAST,MULTICAST,UP&amp;gt; mtu 1500 qdisc noqueue state DOWN group default&lt;br /&gt;
    link/ether 82:70:b5:24:50:e4 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0&lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В данном случае искомый ip-адрес - &amp;lt;code&amp;gt;172.17.0.1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Изменение настроек публикации портов контейнеров IDE '''&lt;br /&gt;
&lt;br /&gt;
Настройки публикации порта контейнера IDE заданы в [https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide#.D0.9A.D0.BE.D0.BD.D1.84.D0.B8.D0.B3.D1.83.D1.80.D0.B0.D1.86.D0.B8.D1.8F_.D0.B7.D0.B0.D0.BF.D1.83.D1.81.D0.BA.D0.B0_Theia_IDE конфигурации запуска IDE]. Настройки по умолчанию должны быть предварительно [https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide:SvacerAsDockerContainer&amp;amp;action=submit#.D0.9F.D0.B5.D1.80.D0.B5.D0.BD.D0.BE.D1.81_.D0.BD.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B5.D0.BA_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.BE.D0.BD.D0.B0.D0.BB.D1.8C.D0.BD.D0.BE.D1.81.D1.82.D0.B8_webide_.D0.B2_svacer.cfg перенесены в &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
В файле &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; нужно добавить параметр &amp;lt;code&amp;gt;hostip&amp;lt;/code&amp;gt; со значением ip-адреса интерфейса &amp;lt;code&amp;gt;docker0&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
xsvacer:&lt;br /&gt;
  webide:&lt;br /&gt;
    theia:&lt;br /&gt;
      1-46-0: &amp;amp;1-46-0&lt;br /&gt;
        ...&lt;br /&gt;
        docker:&lt;br /&gt;
          ...&lt;br /&gt;
          container:&lt;br /&gt;
            ...&lt;br /&gt;
            hostconfig:&lt;br /&gt;
              ...&lt;br /&gt;
              portbindings:&lt;br /&gt;
                &amp;quot;3000/tcp&amp;quot;:&lt;br /&gt;
                  - hostport: 0&lt;br /&gt;
                    hostip: 172.17.0.1 # новый параметр&lt;br /&gt;
            ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Настройка доступа к общему хранилищу с исходными файлами для контейнера Svacer и контейнеров IDE ==&lt;br /&gt;
&lt;br /&gt;
При запуске IDE для просмотра снимка, Svacer экспортирует исходный код снимка в папку на docker-хосте. Далее эта папка монтируется к контейнеру IDE, к пути &amp;lt;code&amp;gt;/home/project&amp;lt;/code&amp;gt;, который использует Theia IDE в качестве папки проекта.&lt;br /&gt;
&lt;br /&gt;
При развёртывании Svacer в docker-контейнере необходимо настроить экспорт исходников в папку, которая может быть примонтирована к контейнеру IDE.&lt;br /&gt;
&lt;br /&gt;
=== Решение ===&lt;br /&gt;
&lt;br /&gt;
Путь к корневой папке, в которую будут экспортироваться исходники снимков, задаётся в конфигурационном параметре [https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide#.D0.91.D0.B0.D0.B7.D0.BE.D0.B2.D1.8B.D0.B5_.D0.BF.D0.B0.D1.80.D0.B0.D0.BC.D0.B5.D1.82.D1.80.D1.8B_.D0.BA.D0.BE.D0.BD.D1.84.D0.B8.D0.B3.D1.83.D1.80.D0.B0.D1.86.D0.B8.D0.B8_.D0.B7.D0.B0.D0.BF.D1.83.D1.81.D0.BA.D0.B0 &amp;lt;code&amp;gt;sourcesroot&amp;lt;/code&amp;gt;]. Так как этот же параметр используется для настройки пути к корневой папке на docker-хосте, которая будет примонтирована к контейнеру IDE, то пути к папке с исходным кодом снимков должны совпадать в контейнере Svacer и на docker-хосте.&lt;br /&gt;
&lt;br /&gt;
''' Пример конфигурации '''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
xsvacer:&lt;br /&gt;
  webide:&lt;br /&gt;
    theia:&lt;br /&gt;
      1-46-0: &amp;amp;1-46-0&lt;br /&gt;
        ...&lt;br /&gt;
        sourcesroot: /data/snapshot-sources&lt;br /&gt;
        ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;docker-compose.yaml&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;font: 1em Courier New, monospace;&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  ...&lt;br /&gt;
  svacer:&lt;br /&gt;
    ...&lt;br /&gt;
    volumes:&lt;br /&gt;
      ...&lt;br /&gt;
      - /data/snapshot-sources:/data/snapshot-sources&lt;br /&gt;
      ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=2467</id>
		<title>Help:XSvacer:Webide</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=2467"/>
		<updated>2025-01-15T08:29:13Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note|text=Данная функциональность входит в набор расширений XSvacer}}&lt;br /&gt;
&lt;br /&gt;
= Поддержка среды разработки Theia IDE =&lt;br /&gt;
&lt;br /&gt;
Данная функциональность даёт возможность просматривать исходный код снимка с предупреждениями анализатора во внешней IDE.&lt;br /&gt;
&lt;br /&gt;
По умолчанию запускается IDE, [[#Информация_о_docker-образе_Theia_IDE|собранная]] на основе [https://theia-ide.org/ Theia IDE].&lt;br /&gt;
&lt;br /&gt;
== Активация функциональности ==&lt;br /&gt;
Для активации функциональности необходимо указать флаг &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt; при запуске Svacer.&lt;br /&gt;
&lt;br /&gt;
При запуске функциональности Webide также будет запущена функциональность [[Help:XSvacer:Docker|docker]].&lt;br /&gt;
&lt;br /&gt;
При активации функциональности:&lt;br /&gt;
* становится доступным REST API управления IDE для просмотра исходного кода снимков проектов&lt;br /&gt;
* в пользовательском интерфейсе на вкладке &amp;quot;Информация о снимке&amp;quot; появляется кнопка &amp;quot;Открыть в IDE&amp;quot;&lt;br /&gt;
* устанавливается подключение к хосту docker, на котором будут запускаться контейнеры с экземплярами IDE&lt;br /&gt;
&lt;br /&gt;
=== Быстрый запуск функциональности с настройками по умолчанию ===&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы начать пользоваться функциональностью запуска IDE без изменения конфигурационных параметров, нужно выполнить следующие действия:&lt;br /&gt;
# Настройка доступа к docker-хосту:&lt;br /&gt;
## Запустить docker со настройками по умолчанию (dockerd должен слушать unix-сокет &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt; — https://docs.docker.com/reference/cli/dockerd/#daemon-socket-option)&lt;br /&gt;
## Проверить, что у пользователя под которым будет запускаться Svacer есть доступ к unix-сокету docker-хоста &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt; — https://docs.docker.com/engine/install/linux-postinstall&lt;br /&gt;
# Настроить права доступа у пользователей, которые смогут запускать IDE: требуются разрешения на проект/ветку &amp;quot;Просмотр маркеров&amp;quot; и &amp;quot;Экспорт разметки&amp;quot;&lt;br /&gt;
# Перезапустить Svacer с флагом &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt;&lt;br /&gt;
# ''Опционально.'' Для ускорения первого запуска IDE:&lt;br /&gt;
## Скачать архив с docker-образом для соответствующей версии Svacer: [https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.10.0.0.tar.gz 10+], [https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.tar 9+]&lt;br /&gt;
## Загрузить docker-образ из архива на docker-хост: &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker image load -i /path/to/theia-blueprint...&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого у пользователей с указанными правами должна появиться кнопка &amp;quot;Открыть в IDE&amp;quot; на панели с информацией о снимке.&lt;br /&gt;
&lt;br /&gt;
{{Note}} IDE с исходным кодом снимков будут запускаться в новых вкладках браузера. Обычно все браузеры блокируют автоматическое открытие вкладки и показывают соответствующее предупреждение.&lt;br /&gt;
&lt;br /&gt;
Например, в Firefox:&lt;br /&gt;
&lt;br /&gt;
[[File:Firefox popup notification ru.png]]&lt;br /&gt;
&lt;br /&gt;
В таком случае нужно дать разрешение на открытие вкладки с IDE:&lt;br /&gt;
&lt;br /&gt;
[[File:Firefox popup notification expanded ru.png|x150px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При необходимости изменения настроек подключения к docker-хосту:&lt;br /&gt;
# Скопировать [[Help:XSvacer:Docker#Конфигурация_по_умолчанию|конфигурацию docker по умолчанию]] в раздел &amp;lt;code&amp;gt;xsvacer&amp;lt;/code&amp;gt; конфигурационного файла svacer.cfg&lt;br /&gt;
# Внести требуемые изменения в конфигурацию раздела &amp;lt;code&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При необходимости изменения настроек запуска IDE:&lt;br /&gt;
# Скопировать [[#Конфигурация_по_умолчанию|конфигурацию webide по умолчанию]] в раздел &amp;lt;code&amp;gt;xsvacer&amp;lt;/code&amp;gt; конфигурационного файла svacer.cfg&lt;br /&gt;
# Внести требуемые изменения в конфигурацию раздела &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Принцип работы ==&lt;br /&gt;
&lt;br /&gt;
Функциональность запуска IDE для просмотра исходного кода снимков становится доступной пользователю, если соблюдаются условия:&lt;br /&gt;
# Функциональность активна: при запуске Svacer указан флаг &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt;;&lt;br /&gt;
# В [[Help:XSvacer:Webide#Конфигурация|конфигурации]] функциональности &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia&amp;lt;/code&amp;gt; есть хотя бы одна активная (&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;disabled: false&amp;lt;/code&amp;gt;) конфигурация IDE&lt;br /&gt;
# У пользователя Svacer имеются разрешения &amp;quot;Просмотр маркеров&amp;quot; и &amp;quot;Экспорт разметки&amp;quot; на проект, в котором находится снимок, для которого нужно запустить IDE&lt;br /&gt;
&lt;br /&gt;
В противном случае в пользовательском интерфейсе будет отсутствовать кнопка &amp;quot;Открыть в IDE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Запуск IDE ===&lt;br /&gt;
&lt;br /&gt;
Запуск производится путём вызова http-метода &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;POST /api/snapshots/{snapshot_id}/ide&amp;lt;/code&amp;gt; с телом запроса &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;{&amp;quot;ideId&amp;quot;: &amp;quot;идентификатор IDE&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Последовательность действий, выполняемых при запуске IDE:&lt;br /&gt;
&lt;br /&gt;
# Производится проверка: была ли уже запущена указанная IDE для указанного снимка:&lt;br /&gt;
#* Если запущена: производится проверка доступности IDE (отвечает на запросы):&lt;br /&gt;
#** Если IDE доступна: действие не требуется. Процесс запуска завершается&lt;br /&gt;
#** Если IDE недоступна: продолжается процесс запуска. IDE будет перезапущена&lt;br /&gt;
# Создаётся &amp;quot;корневая папка снимка&amp;quot;, предназначенная для хранения исходного кода снимка и предупреждений анализатора с разметкой в виде sarif-файла. Название папки соответствует id снимка. Папка создаётся по пути заданному в параметре конфигурации IDE &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
# Исходный код снимка скачивается в &amp;quot;корневую папку снимка&amp;quot;&lt;br /&gt;
# Производится экспорт маркеров и разметки в виде sarif-файла в &amp;quot;корневую папку снимка&amp;quot;. Название sarif-файла формируется с помощью шаблона, заданного в параметре конфигурации IDE &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/sarif/filenametemplate&amp;lt;/code&amp;gt;&lt;br /&gt;
# Производится настройка и запуск docker-контейнера в соответствии с настройками &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker&amp;lt;/code&amp;gt;:&lt;br /&gt;
## Проверяется наличие на docker-хосте образа IDE, указанного в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker/image&amp;lt;/code&amp;gt;. Если docker-образ отсутствует, он будет загружен на хост&lt;br /&gt;
## Проверяется наличие на docker-хосте контейнера с IDE для снимка:&lt;br /&gt;
##* Если docker-контейнер не существует, то он будет создан и запущен&lt;br /&gt;
##* Если docker-контейнер существует и находится:&lt;br /&gt;
##** в статусе &amp;lt;code&amp;gt;running&amp;lt;/code&amp;gt; — процесс запуска IDE продолжается&lt;br /&gt;
##** в статусе &amp;lt;code&amp;gt;created&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;exited&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;paused&amp;lt;/code&amp;gt; — контейнер будет запущен&lt;br /&gt;
##** в других статусах — вернётся соответствующая ошибка и процесс запуска IDE прервётся&lt;br /&gt;
# После успешного запуска docker-контейнера осуществляется ожидание окончания запуска процесса IDE в контейнере в соответствии с настройками &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Если за отведённое время ответ от IDE получен — процесс запуска завершается&lt;br /&gt;
#* Если ответ не получен — вернётся ошибка &amp;lt;code&amp;gt;ide not ready&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При возникновении ошибки на одном из этапов запуска IDE артефакты, созданные на предыдущих этапах, останутся в системе. В дальнейшем они могут быть использованы при повторном запуске IDE, если причина возникновения ошибки была устранена.&lt;br /&gt;
&lt;br /&gt;
{{Note|type=reminder|text=Причиной возникновения ошибки &amp;quot;ide not ready&amp;quot; может стать высокая загруженность или недостаточная производительность docker-хоста, на котором запускается контейнер с IDE. В связи с этим процесс IDE внутри контейнера может запускаться дольше, чем указано в настойках &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck&amp;lt;/code&amp;gt;. В этом случае рекомендуется попробовать повторно запустить IDE через короткий промежуток времени}}&lt;br /&gt;
&lt;br /&gt;
Ещё одной причиной возникновения данной ошибки может стать сетевая недоступность docker-контейнера при подключении к удалённому docker-хосту. В таком случае рекомендуется проверить:&lt;br /&gt;
# Сетевую доступность docker-хоста&lt;br /&gt;
# Настройки фаервола на docker-хосте&lt;br /&gt;
# Настройки биндинга docker-контейнера c IDE&lt;br /&gt;
::&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker/container/hostconfig/portbindings&amp;lt;/code&amp;gt;&lt;br /&gt;
::Контейнер должен быть подключён к доступному сетевому интерфейсу&lt;br /&gt;
&lt;br /&gt;
=== Использование IDE: проксирование запросов ===&lt;br /&gt;
&lt;br /&gt;
После успешного запуска docker-контейнера IDE станут доступны ресурсы с префиксом &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Все запросы, направленные к ресурсам &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/*&amp;lt;/code&amp;gt;, будут проксироваться в соответствующий контейнер IDE.&lt;br /&gt;
&lt;br /&gt;
Например, если docker-контейнер c IDE &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;theia__default&amp;lt;/code&amp;gt; для снимка &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xxx&amp;lt;/code&amp;gt; запущен и слушает порт &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;35353&amp;lt;/code&amp;gt; на хосте &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker-host&amp;lt;/code&amp;gt;, то будет происходить проксирование:&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET http://docker-host:35353/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;POST http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;POST http://docker-host:35353/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET ws://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET ws://docker-host:35353/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для запуска IDE в окне браузера нужно указать адрес&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;http[s]://svacer-host/xvacer/webide/snapshots/{snapshot_id}/{ide_id}/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note}} Завершающий слеш обязателен!&lt;br /&gt;
&lt;br /&gt;
=== Перезапуск IDE ===&lt;br /&gt;
&lt;br /&gt;
В процессе работы Svacer следит за состоянием запущенных IDE. При попытке повторного запуска IDE проверяется её доступность: если IDE отвечает на запросы, то повторный запуск не производится и обработка запроса завершается.&lt;br /&gt;
&lt;br /&gt;
Также работоспособность IDE контролируется при использовании IDE в момент проксирования запросов в docker-контейнер: если IDE доступна, то запрос проксируется.&lt;br /&gt;
&lt;br /&gt;
Если IDE перестанет отвечать на запросы, то будет произведена попытка её перезапуска. В этом случае происходит та же последовательность действий, что и при [[Help:XSvacer:Webide#Запуск IDE|первоначальном запуске IDE]].&lt;br /&gt;
&lt;br /&gt;
Зачастую потеря связи обусловлена остановкой docker-контейнера с IDE. В таком случае docker-контейнер будет перезапущен.&lt;br /&gt;
&lt;br /&gt;
Если же недоступность IDE обусловлена другими причинами, то запрос на запуск/проксирование продолжит возвращать ошибку до устранения причин неработоспособности.&lt;br /&gt;
&lt;br /&gt;
=== Остановка IDE ===&lt;br /&gt;
&lt;br /&gt;
Запуск производится путём вызова http-метода&lt;br /&gt;
 DELETE /api/snapshots/{snapshot_id}/ide&lt;br /&gt;
с телом запроса &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;{&amp;quot;ideId&amp;quot;: &amp;quot;идентификатор IDE&amp;quot;}&amp;lt;/code&amp;gt;. В ходе обработки запроса останавливается docker-контейнер IDE.&lt;br /&gt;
&lt;br /&gt;
По умолчанию установлен параметр конфигурации&lt;br /&gt;
&lt;br /&gt;
 xsvacer/webide/theia/default/docker/container/hostconfig/autoremove: true&lt;br /&gt;
&lt;br /&gt;
Это означает, что после остановки docker-контейнер будет автоматически удалён.&lt;br /&gt;
&lt;br /&gt;
Чтобы изменить это поведение, настройка&lt;br /&gt;
 xsvacer/webide/theia/default/{id конфигурации}/container/hostconfig/autoremove&lt;br /&gt;
&lt;br /&gt;
должна быть установлена в &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; на момент запуска docker-контейнера IDE. Это можно сделать, например, установив значение переменной окружения&lt;br /&gt;
&lt;br /&gt;
 XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_CONTAINER_HOSTCONFIG_AUTOREMOVE=false&lt;br /&gt;
&lt;br /&gt;
{{Note|type=error|text=При использовании версии Svacer 9.0.0 установка &amp;lt;code&amp;gt;autoremove: false&amp;lt;/code&amp;gt; вызывает ошибку запуска. Исправлено в версии [[Svacer#Релизы|9.0.1]].'''}}&lt;br /&gt;
&lt;br /&gt;
При корректной остановке (например SIGTERM) Svacer автоматически остановит все запущенные docker-контейнеры IDE.&lt;br /&gt;
&lt;br /&gt;
=== Подключение к IDE после некорректного завершения Svacer ===&lt;br /&gt;
&lt;br /&gt;
При запуске Svacer осуществляет поиск запущенных docker-контейнеров IDE на доступных docker-хостах. При восстановлении связи с запущенными docker-контейнерами IDE и последующей корректной остановке Svacer все docker-контейнеры IDE будут остановлены.&lt;br /&gt;
&lt;br /&gt;
== REST API для работы с IDE ==&lt;br /&gt;
&lt;br /&gt;
{{Note|text=На этапе внедрения расширений XSvacer REST API может меняться. Следите за анонсами!}}&lt;br /&gt;
&lt;br /&gt;
После активации функциональности становятся доступны http-ресурсы для управления IDE:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | REST API управления IDE&lt;br /&gt;
|-&lt;br /&gt;
!Ресурс&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
GET /xsvacer/webide/api/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Получение списка доступных для запуска IDE.&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;order&amp;quot;: 0&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;id&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;name&amp;lt;/code&amp;gt; — название IDE&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;order&amp;lt;/code&amp;gt; — порядковый номер IDE в списке&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
GET /xsvacer/webide/api/snapshots/{snapshot_id}/ide/{ide_id}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Запрос описания экземпляра IDE, запущенного для снимка.&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; — идентификатор снимка&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ide_id&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;id&amp;quot;: {&lt;br /&gt;
    &amp;quot;ide_id&amp;quot;: {&lt;br /&gt;
      &amp;quot;ide_type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
      &amp;quot;config_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;snapshot_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;url&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;start_args&amp;quot;: {&lt;br /&gt;
    &amp;quot;snapshot_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;user&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;user_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
POST /xsvacer/webide/api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Запуск IDE для просмотра исходных кодов снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; — идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
PUT /api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Команда управления экземпляром IDE снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; — идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;action&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;action&amp;lt;/code&amp;gt; — действие&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
'''Доступные действия:'''&lt;br /&gt;
* &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;update_markup&amp;lt;/code&amp;gt; — обновление предупреждений и разметки (sarif-файла)&lt;br /&gt;
'''Ответ:''' пустой&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
DELETE /xsvacer/webide/api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Остановка экземпляра IDE снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; — идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
'''Ответ:''' пустой&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Прокси для запросов экземпляра IDE снимка&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Формат идентификатора IDE ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;{тип ide}__{идентификатор конфигурации}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например, для default-конфигурации Theia IDE: &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;theia__default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Конфигурация ==&lt;br /&gt;
&lt;br /&gt;
Управление настройками функциональности осуществляется с помощью конфигурационного yaml-файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Раздел конфигурации для управления функциональностью — &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Раздел содержит перечисление доступных конфигураций запуска экземпляров Theia IDE &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia&amp;lt;/code&amp;gt;. При наличии нескольких активных конфигураций Theia IDE пользователь сможет выбрать какую из них использовать при запуске IDE с исходными файлами снимка.&lt;br /&gt;
&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       config1:&lt;br /&gt;
         ...&lt;br /&gt;
       config2:&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
Запуск IDE основывается на запуске docker-контейнеров, содержащих соответствующие сборки IDE. Поэтому необходимо также [[Help:XSvacer:Docker|настроить доступ к docker-хосту]] в разделе &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt;, иначе функциональность WebIDE не сможет работать корректно.&lt;br /&gt;
&lt;br /&gt;
В случае отсутствия файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; или отсутствии раздела &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; будет использоваться [[Help:XSvacer:Webide#Конфигурация_по_умолчанию_используемая_в_svacer|конфигурация по умолчанию]].&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация запуска Theia IDE ===&lt;br /&gt;
&lt;br /&gt;
{{Note|text=На этапе внедрения расширений XSvacer конфигурация функциональностей может меняться. Следите за анонсами!}}&lt;br /&gt;
&lt;br /&gt;
Конфигурации запуска Theia IDE добавляются в виде полей в разделе &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;. Название поля является идентификатором конфигурации запуска. Например, идентификатор по номеру используемой версии IDE:&lt;br /&gt;
&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       1-46-0:&lt;br /&gt;
         name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
==== Базовые параметры конфигурации запуска ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
|disabled&lt;br /&gt;
|bool&lt;br /&gt;
|Конфигурация запуска неактивна. Неактивная конфигурация не доступна для запуска экземпляра IDE&lt;br /&gt;
|true (переопределяется в конфигурации default)&lt;br /&gt;
|-&lt;br /&gt;
|order&lt;br /&gt;
|int&lt;br /&gt;
|Порядковый номер в списке выбора конфигурации запуска&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|name&lt;br /&gt;
|string&lt;br /&gt;
|Название конфигурации&lt;br /&gt;
|Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
|-&lt;br /&gt;
|sourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке, содержащей исходные коды снимков на машине со Svacer&lt;br /&gt;
|${USER_CACHE_DIR}/svacer-snapshot-sources&lt;br /&gt;
|-&lt;br /&gt;
|dockerhostsourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке, содержащей исходные коды снимков на хосте docker. Нужен при использовании удалённого docker-хоста, т. к. в таком случае папка с исходными кодами скорее всего будет доступна по адресу, отличающемуся от &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|dockerhostpathseparator&lt;br /&gt;
|string&lt;br /&gt;
|Разделитель пути на хосте docker. По умолчанию &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;quot;/&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|sariffiletemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|{{Note|text=В версии 10.0.0 заменён на [[Help:XSvacer:Webide#Параметры_экспорта_sarif-файла_с_разметкой_предупреждений|sarif]]}}&lt;br /&gt;
Шаблон названия sarif-файла с предупреждениями анализатора. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|sarifFileContext]]&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;&amp;quot;{{.Context.ProjectName}}.{{.Context.BranchName}}.sarif&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры экспорта sarif-файла с разметкой предупреждений ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для настройки экспорта sarif-файлов с разметкой предупреждений, выполненной в Svacer'е.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
|sarif&lt;br /&gt;
|map&lt;br /&gt;
|Настройки экспорта sarif-файла&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|sarif/filenametemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон для формирования названия sarif-файла. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|sarifFileContext]]&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;&amp;quot;warnings.sarif&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|sarif/commenttemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон для формирования элемента списка комментариев предупреждения при экспорте в sarif-файл. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|Comment]]&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;&amp;quot;{{if trim .Text}}`[{{.CreateTs.Local.Format \&amp;quot;02.01.2006 15:04\&amp;quot;}}] {{.CreatedBy}}:`\n\n{{trim .Text}}{{end}}&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры менеджера запуска IDE ====&lt;br /&gt;
&lt;br /&gt;
Конфигурация менеджера запуска IDE. На данный момент доступен только стандартный менеджер (&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;type: default&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
|manager&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация менеджера запуска IDE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|manager/type&lt;br /&gt;
|enum: default&lt;br /&gt;
|Тип менеджера запуска IDE&lt;br /&gt;
|default&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры запуска docker-контейнеров с IDE ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для настройки запуска docker-контейнеров с IDE&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
|docker/&lt;br /&gt;
|map&lt;br /&gt;
|Настройки создания docker-контейнера с IDE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|docker/hostid&lt;br /&gt;
|string&lt;br /&gt;
|Идентификатор хоста docker, описанного в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/docker/hosts&amp;lt;/code&amp;gt;. Запуск docker-контейнера с IDE будет выполнен на этом хосте&lt;br /&gt;
|default&lt;br /&gt;
|-&lt;br /&gt;
|docker/containernametemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон для формирования названия контейнера IDE для выбранного снимка. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|TheiaDockerContainerStartContext]]&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;&amp;quot;theia-1-46-{{.StartArgs.SnapshotID}}&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|docker/containerconfiglabels&lt;br /&gt;
|[]map&lt;br /&gt;
|Список меток docker-контейнера. Дополняет список меток в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker/container/config/labels&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
- &amp;quot;com.docker.compose.project&amp;quot;: svacer&lt;br /&gt;
|-&lt;br /&gt;
|docker/image/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры docker-образа из которого будет запущен контейнер&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|docker/image/name&lt;br /&gt;
|string&lt;br /&gt;
|Название образа&lt;br /&gt;
|theia-blueprint&lt;br /&gt;
|-&lt;br /&gt;
|docker/image/tag&lt;br /&gt;
|string&lt;br /&gt;
|Тег образа&lt;br /&gt;
|Svacer 10+: 1.46.0.sarif.clang.10.0.0&lt;br /&gt;
Svacer 9+: 1.46.0.sarif.clang&lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcetype&lt;br /&gt;
|enum: repository/file&lt;br /&gt;
|Тип источника для загрузки образа в docker-хост&lt;br /&gt;
* repository — будет вызван docker pull образа &amp;lt;code&amp;gt;{image/name}:{image/tag}&amp;lt;/code&amp;gt;&lt;br /&gt;
* file — будет вызван docker load с URL &amp;lt;code&amp;gt;image/sourcefileurl&amp;lt;/code&amp;gt;&lt;br /&gt;
|file&lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcefileurl&lt;br /&gt;
|url&lt;br /&gt;
|URL откуда будет загружен docker-образ если &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;image/sourcetype == &amp;quot;file&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
URL может содержать:&lt;br /&gt;
* путь к локальному файлу: схема &amp;lt;code&amp;gt;file://&amp;lt;/code&amp;gt;&lt;br /&gt;
* http/https-адрес: схема &amp;lt;code&amp;gt;http://&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;https://&amp;lt;/code&amp;gt;&lt;br /&gt;
|Svacer 10+: https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.10.0.0.tar.gz&lt;br /&gt;
Svacer 9+: https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.tar&lt;br /&gt;
|-&lt;br /&gt;
|docker/container/&lt;br /&gt;
|map&lt;br /&gt;
|Свойства docker-контейнера&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/config.go#L70&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config/env&lt;br /&gt;
|[]string&lt;br /&gt;
|Список переменных среды, которые будут установлены в контейнере&lt;br /&gt;
|&lt;br /&gt;
- THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры хостинга контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/hostconfig.go#L379&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/autoremove&lt;br /&gt;
|bool&lt;br /&gt;
|&lt;br /&gt;
|true&lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/portbindings&lt;br /&gt;
|map&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&amp;quot;3000/tcp&amp;quot;:&lt;br /&gt;
:- hostport: 0&lt;br /&gt;
|-&lt;br /&gt;
|docker/container/networkconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Сетевые настройки контейнера. Соответствуют структуре https://github.com/moby/moby/blob/v24.0.7/api/types/network/network.go#L104&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры проверки доступности healthcheck ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для проверки доступности IDE после запуска docker-контейнера&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию&lt;br /&gt;
|-&lt;br /&gt;
|healthcheck&lt;br /&gt;
|map&lt;br /&gt;
|Параметры проверки доступности IDE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyretries&lt;br /&gt;
|int&lt;br /&gt;
|Количества попыток проверки до ошибки доступности&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyperiod&lt;br /&gt;
|golang duration string&lt;br /&gt;
|Интервал проверки&lt;br /&gt;
|200ms&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Структуры передаваемые в поля с golang-шаблонами строк ====&lt;br /&gt;
&lt;br /&gt;
 sarifFileContext {&lt;br /&gt;
     Time    time.Time&lt;br /&gt;
     Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
&lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 TheiaDockerContainerStartContext {&lt;br /&gt;
     IdeID: {&lt;br /&gt;
         IdeType  string&lt;br /&gt;
         ConfigID string&lt;br /&gt;
     },&lt;br /&gt;
     StartArgs: {&lt;br /&gt;
         SnapshotID string&lt;br /&gt;
         UserID     string&lt;br /&gt;
         User       string&lt;br /&gt;
     },&lt;br /&gt;
     Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
&lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 Comment {&lt;br /&gt;
     ID               string&lt;br /&gt;
     Text             string&lt;br /&gt;
     Ref              string&lt;br /&gt;
     CreatedBy        string&lt;br /&gt;
     CreatedByID      string&lt;br /&gt;
     CreateTs         time.Time&lt;br /&gt;
     UpdateTs         *time.Time&lt;br /&gt;
     UpdatedBy        string&lt;br /&gt;
     UpdatedByID      string&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация по умолчанию ===&lt;br /&gt;
&lt;br /&gt;
Данная настройка применяется по умолчанию для запуска Theia IDE, если в конфигурационном файле svacer.cfg отсутствует раздел &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
xsvacer:&lt;br /&gt;
  webide:&lt;br /&gt;
    theia:&lt;br /&gt;
      1-46-0: &amp;amp;1-46-0&lt;br /&gt;
        disabled: true&lt;br /&gt;
        order: 0&lt;br /&gt;
        name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
        sourcesroot: ${USER_CACHE_DIR}/svacer-snapshot-sources&lt;br /&gt;
        sarif:&lt;br /&gt;
            filenametemplate: &amp;quot;warnings.sarif&amp;quot;&lt;br /&gt;
            commenttemplate: &amp;quot;{{if trim .Text}}`[{{.CreateTs.Local.Format \&amp;quot;02.01.2006 15:04\&amp;quot;}}] {{.CreatedBy}}:`\n\n{{trim .Text}}{{end}}&amp;quot;&lt;br /&gt;
        manager:&lt;br /&gt;
          type: default&lt;br /&gt;
        docker:&lt;br /&gt;
          hostid: default # идентификатор используемого docker-хоста&lt;br /&gt;
          containernametemplate: &amp;quot;theia-1-46-&amp;lt;nowiki&amp;gt;{{.StartArgs.SnapshotID}}&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
          image:&lt;br /&gt;
            name: theia-blueprint&lt;br /&gt;
            tag: 1.46.0.sarif.clang.10.0.0&lt;br /&gt;
            sourcetype: file&lt;br /&gt;
            sourcefileurl: https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.10.0.0.tar.gz&lt;br /&gt;
          containerconfiglabels:&lt;br /&gt;
            - &amp;quot;com.docker.compose.project&amp;quot;: svacer&lt;br /&gt;
          container:&lt;br /&gt;
            config:&lt;br /&gt;
              env:&lt;br /&gt;
                - THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
            hostconfig:&lt;br /&gt;
              autoremove: true&lt;br /&gt;
              portbindings:&lt;br /&gt;
                &amp;quot;3000/tcp&amp;quot;:&lt;br /&gt;
                  - hostport: 0&lt;br /&gt;
            networkconfig:&lt;br /&gt;
        healthcheck:&lt;br /&gt;
          starttoreadyretries: 10&lt;br /&gt;
          starttoreadyperiod: 200ms&lt;br /&gt;
      default:&lt;br /&gt;
        &amp;lt;&amp;lt;: *1-46-0&lt;br /&gt;
        order: 0&lt;br /&gt;
        disabled: false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
По умолчанию используется docker-хост с идентификатором &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;. Согласно настройке этого хоста, по умолчанию предполагается взаимодействие с докером через unix-сокет &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt;. Соответственно пользователь, под которым запускается Svacer, должен иметь доступ к этому сокету (https://docs.docker.com/engine/install/linux-postinstall/).&lt;br /&gt;
&lt;br /&gt;
{{Note|text=При наличии раздела &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; в конфигурационном файле svacer.cfg будут применены только настройки из этого раздела. Настройки по умолчанию будут полностью проигнорированы}}&lt;br /&gt;
&lt;br /&gt;
=== Изменение конфигурационных параметров с помощью переменных окружения ===&lt;br /&gt;
&lt;br /&gt;
Значения атрибутов конфигурации могут быть изменены с помощью переменных окружения&lt;br /&gt;
&lt;br /&gt;
 XSVACER_WEBIDE_THEIA_{id конфигурации ide}[_параметр]={значение параметра}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например, для активации rootless-хоста &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/hosts/local&amp;lt;/code&amp;gt; и переключения запуска IDE с идентификатором &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;default&amp;lt;/code&amp;gt; на этот хост можно указать такие значения переменных окружения при запуске Svacer:&lt;br /&gt;
&lt;br /&gt;
 XSVACER_DOCKER_HOSTS_LOCAL_DISABLED=false&lt;br /&gt;
 XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_HOSTID=local&lt;br /&gt;
&lt;br /&gt;
== Очистка системы: удаление артефактов функциональности ==&lt;br /&gt;
&lt;br /&gt;
В процессе использования функциональности IDE создаются следующие артефакты:&lt;br /&gt;
# Исходные файлы снимков скачиваются в корневые папки, заданные в параметре &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
# Артефакты docker:&lt;br /&gt;
#* образы и контейнеры создаются на хостах, указанных в конфигурации docker-хостов в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/hostid&amp;lt;/code&amp;gt;&lt;br /&gt;
#* названия docker-образов будут соответствовать параметрам в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/image&amp;lt;/code&amp;gt;&lt;br /&gt;
#* названия docker-контейнеров будут соответствовать параметру &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/containernametemplate&amp;lt;/code&amp;gt;&lt;br /&gt;
#* наборы меток doker-контейнеров будут содержать:&lt;br /&gt;
#*: метки, перечисленные в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/containerconfiglabels&amp;lt;/code&amp;gt;&lt;br /&gt;
#*: метки, перечисленные в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/container/config/labels&amp;lt;/code&amp;gt;&lt;br /&gt;
#*: метки с названиями &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.service.id&amp;lt;/code&amp;gt;, &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.service.type&amp;lt;/code&amp;gt;, &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.theia.start_args&amp;lt;/code&amp;gt;&lt;br /&gt;
# При использовании rootless-хоста docker будут созданы папки согласно [[Help:XSvacer:Docker#Специфичные настройки для rootless-хоста|настройкам]]&lt;br /&gt;
&lt;br /&gt;
== Рекомендации ==&lt;br /&gt;
&lt;br /&gt;
=== Предварительная загрузка docker-образа с IDE ===&lt;br /&gt;
&lt;br /&gt;
По умолчанию параметр&lt;br /&gt;
&lt;br /&gt;
 xsvacer/webide/theia/1-46-0/docker/image/sourcefileurl&lt;br /&gt;
&lt;br /&gt;
Содержит значение&lt;br /&gt;
&lt;br /&gt;
 Svacer 10+: https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.10.0.0.tar.gz&lt;br /&gt;
 Svacer 9+:  https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.tar&lt;br /&gt;
&lt;br /&gt;
По этому адресу находится архив с docker-образом для Theia IDE.&lt;br /&gt;
&lt;br /&gt;
Если docker-образ ещё не был загружен, то загрузка начнётся при первой попытке запуска IDE. Т. к. этот процесс занимает длительное время, то запрос запуска IDE тоже будет выполняться долго.&lt;br /&gt;
&lt;br /&gt;
Для ускорения первого запуска IDE докер образ можно загрузить на хост docker вручную. Для этого необходимо:&lt;br /&gt;
&lt;br /&gt;
# Скачать файл архива&lt;br /&gt;
# Выполнить команду &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker image load -i /path/to/theia-blueprint...&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Информация о docker-образе Theia IDE ==&lt;br /&gt;
&lt;br /&gt;
Docker-образ, используемый по умолчанию, построен на базе [https://theia-ide.org/ Eclipse Theia IDE] версии [https://github.com/eclipse-theia/theia-blueprint/tree/v1.46.0 1.46.0].&lt;br /&gt;
&lt;br /&gt;
При этом была изменена компоновка расширений Theia. Результат выполнения &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
diff --git a/browser.Dockerfile b/browser.Dockerfile&lt;br /&gt;
index efe591e..a4ebb6a 100644&lt;br /&gt;
--- a/browser.Dockerfile&lt;br /&gt;
+++ b/browser.Dockerfile&lt;br /&gt;
@@ -42,7 +42,7 @@ RUN chmod g+rw /home &amp;amp;&amp;amp; \&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y wget apt-transport-https &amp;amp;&amp;amp; \&lt;br /&gt;
     wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | tee /usr/share/keyrings/adoptium.asc &amp;amp;&amp;amp; \&lt;br /&gt;
     echo &amp;quot;deb [signed-by=/usr/share/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main&amp;quot; | tee /etc/apt/sources.list.d/adoptium.list &amp;amp;&amp;amp; \&lt;br /&gt;
-    apt-get update &amp;amp;&amp;amp; apt-get install -y git openssh-client openssh-server bash libsecret-1-0 temurin-17-jdk maven &amp;amp;&amp;amp; \&lt;br /&gt;
+    apt-get update &amp;amp;&amp;amp; apt-get install -y git openssh-client openssh-server bash libsecret-1-0 clangd &amp;amp;&amp;amp; \&lt;br /&gt;
     apt-get purge -y wget &amp;amp;&amp;amp; \&lt;br /&gt;
     apt-get clean&lt;br /&gt;
&lt;br /&gt;
diff --git a/package.json b/package.json&lt;br /&gt;
index 9044595..9d0dcc8 100644&lt;br /&gt;
--- a/package.json&lt;br /&gt;
+++ b/package.json&lt;br /&gt;
@@ -54,10 +54,8 @@&lt;br /&gt;
   &amp;quot;theiaPluginsDir&amp;quot;: &amp;quot;plugins&amp;quot;,&lt;br /&gt;
   &amp;quot;theiaPlugins&amp;quot;: {&lt;br /&gt;
     &amp;quot;eclipse-theia.builtin-extension-pack&amp;quot;: &amp;quot;https://open-vsx.org/api/eclipse-theia/builtin-extension-pack/1.83.1/file/eclipse-theia.builtin-extension-pack-1.83.1.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;ms-vscode.js-debug&amp;quot;: &amp;quot;https://open-vsx.org/api/ms-vscode/js-debug/1.83.1/file/ms-vscode.js-debug-1.83.1.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;ms-vscode.js-debug-companion&amp;quot;: &amp;quot;https://open-vsx.org/api/ms-vscode/js-debug-companion/1.1.2/file/ms-vscode.js-debug-companion-1.1.2.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;vscjava.vscode-java-pack&amp;quot;: &amp;quot;https://open-vsx.org/api/vscjava/vscode-java-pack/0.25.11/file/vscjava.vscode-java-pack-0.25.11.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;vscjava.vscode-java-dependency&amp;quot;: &amp;quot;https://open-vsx.org/api/vscjava/vscode-java-dependency/0.21.2/file/vscjava.vscode-java-dependency-0.21.2.vsix&amp;quot;&lt;br /&gt;
+    &amp;quot;llvm-vs-code-extensions.vscode-clangd&amp;quot;: &amp;quot;https://open-vsx.org/api/llvm-vs-code-extensions/vscode-clangd/0.1.26/file/llvm-vs-code-extensions.vscode-clangd-0.1.26.vsix&amp;quot;,&lt;br /&gt;
+    &amp;quot;ms-sarifvscode.sarif-viewer&amp;quot;: &amp;quot;https://open-vsx.org/api/MS-SarifVSCode/sarif-viewer/3.4.4/file/MS-SarifVSCode.sarif-viewer-3.4.4.vsix&amp;quot;&lt;br /&gt;
   },&lt;br /&gt;
   &amp;quot;theiaPluginsExcludeIds&amp;quot;: [&lt;br /&gt;
     &amp;quot;ms-vscode.js-debug-companion&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Команда построения docker-образа:&lt;br /&gt;
 docker build -t theia-blueprint:1.46.0.sarif.clang... -f browser.Dockerfile .&lt;br /&gt;
&lt;br /&gt;
Команда экспорта docker-образа:&lt;br /&gt;
 docker image save theia-blueprint:1.46.0.sarif.clang... | gzip &amp;gt; /path/to/tar/theia-blueprint.1.46.0.sarif.clang....tar.gz&lt;br /&gt;
&lt;br /&gt;
== Известные проблемы ==&lt;br /&gt;
&lt;br /&gt;
=== При открытии sarif-файла в IDE открывается пустая панель &amp;quot;SARIF Results&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Для просмотра sarif-файла, содержащего предупреждения анализатора и разметку, используется плагин [https://open-vsx.org/extension/MS-SarifVSCode/sarif-viewer SARIF Viewer]. При просмотре sarif-файла открывается webview плагина со списком предупреждений анализатора.&lt;br /&gt;
&lt;br /&gt;
В Theia IDE для открытия webview применяется [https://developer.mozilla.org/en_US/docs/Web/API/Service_Worker_API Service Worker API]. В целях обеспечения безопасности применение Service Worker API [https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#setting_up_to_play_with_service_workers требует], чтобы доступ к web-приложению осуществлялся по HTTPS, либо приложение размещалось на localhost.&lt;br /&gt;
&lt;br /&gt;
Поэтому для решения данной проблемы Svacer должен открываться по HTTPS или быть доступен по адресу &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=2463</id>
		<title>Help:XSvacer:Webide</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=2463"/>
		<updated>2025-01-14T07:51:11Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note|text=Данная функциональность входит в набор расширений XSvacer}}&lt;br /&gt;
&lt;br /&gt;
= Поддержка среды разработки Theia IDE =&lt;br /&gt;
&lt;br /&gt;
Данная функциональность даёт возможность просматривать исходный код снимка с предупреждениями анализатора во внешней IDE.&lt;br /&gt;
&lt;br /&gt;
По умолчанию запускается IDE, [[#Информация_о_docker-образе_Theia_IDE|собранная]] на основе [https://theia-ide.org/ Theia IDE].&lt;br /&gt;
&lt;br /&gt;
== Активация функциональности ==&lt;br /&gt;
Для активации функциональности необходимо указать флаг &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt; при запуске Svacer.&lt;br /&gt;
&lt;br /&gt;
При запуске функциональности Webide также будет запущена функциональность [[Help:XSvacer:Docker|docker]].&lt;br /&gt;
&lt;br /&gt;
При активации функциональности:&lt;br /&gt;
* становится доступным REST API управления IDE для просмотра исходного кода снимков проектов&lt;br /&gt;
* в пользовательском интерфейсе на вкладке &amp;quot;Информация о снимке&amp;quot; появляется кнопка &amp;quot;Открыть в IDE&amp;quot;&lt;br /&gt;
* устанавливается подключение к хосту docker, на котором будут запускаться контейнеры с экземплярами IDE&lt;br /&gt;
&lt;br /&gt;
=== Быстрый запуск функциональности с настройками по умолчанию ===&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы начать пользоваться функциональностью запуска IDE без изменения конфигурационных параметров, нужно выполнить следующие действия:&lt;br /&gt;
# Настройка доступа к docker-хосту:&lt;br /&gt;
## Запустить docker со настройками по умолчанию (dockerd должен слушать unix-сокет &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt; — https://docs.docker.com/reference/cli/dockerd/#daemon-socket-option)&lt;br /&gt;
## Проверить, что у пользователя под которым будет запускаться Svacer есть доступ к unix-сокету docker-хоста &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt; — https://docs.docker.com/engine/install/linux-postinstall&lt;br /&gt;
# Настроить права доступа у пользователей, которые смогут запускать IDE: требуются разрешения на проект/ветку &amp;quot;Просмотр маркеров&amp;quot; и &amp;quot;Экспорт разметки&amp;quot;&lt;br /&gt;
# Перезапустить Svacer с флагом &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt;&lt;br /&gt;
# ''Опционально.'' Для ускорения первого запуска IDE:&lt;br /&gt;
## Скачать [https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.tar архив с docker-образом]&lt;br /&gt;
## Загрузить docker-образ из архива на docker-хост: &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker image load -i /path/to/theia-blueprint.1.46.0.sarif.clang.tar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого у пользователей с указанными правами должна появиться кнопка &amp;quot;Открыть в IDE&amp;quot; на панели с информацией о снимке.&lt;br /&gt;
&lt;br /&gt;
{{Note}} IDE с исходным кодом снимков будут запускаться в новых вкладках браузера. Обычно все браузеры блокируют автоматическое открытие вкладки и показывают соответствующее предупреждение. &lt;br /&gt;
&lt;br /&gt;
Например, в Firefox:&lt;br /&gt;
&lt;br /&gt;
[[File:Firefox popup notification ru.png]]&lt;br /&gt;
&lt;br /&gt;
В таком случае нужно дать разрешение на открытие вкладки с IDE:&lt;br /&gt;
&lt;br /&gt;
[[File:Firefox popup notification expanded ru.png|x150px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При необходимости изменения настроек подключения к docker-хосту:&lt;br /&gt;
# Скопировать [[Help:XSvacer:Docker#Конфигурация_по_умолчанию|конфигурацию docker по умолчанию]] в раздел &amp;lt;code&amp;gt;xsvacer&amp;lt;/code&amp;gt; конфигурационного файла svacer.cfg&lt;br /&gt;
# Внести требуемые изменения в конфигурацию раздела &amp;lt;code&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При необходимости изменения настроек запуска IDE:&lt;br /&gt;
# Скопировать [[#Конфигурация_по_умолчанию|конфигурацию webide по умолчанию]] в раздел &amp;lt;code&amp;gt;xsvacer&amp;lt;/code&amp;gt; конфигурационного файла svacer.cfg&lt;br /&gt;
# Внести требуемые изменения в конфигурацию раздела &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Принцип работы ==&lt;br /&gt;
&lt;br /&gt;
Функциональность запуска IDE для просмотра исходного кода снимков становится доступной пользователю, если соблюдаются условия:&lt;br /&gt;
# Функциональность активна: при запуске Svacer указан флаг &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt;;&lt;br /&gt;
# В [[Help:XSvacer:Webide#Конфигурация|конфигурации]] функциональности &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia&amp;lt;/code&amp;gt; есть хотя бы одна активная (&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;disabled: false&amp;lt;/code&amp;gt;) конфигурация IDE&lt;br /&gt;
# У пользователя Svacer имеются разрешения &amp;quot;Просмотр маркеров&amp;quot; и &amp;quot;Экспорт разметки&amp;quot; на проект, в котором находится снимок, для которого нужно запустить IDE&lt;br /&gt;
&lt;br /&gt;
В противном случае в пользовательском интерфейсе будет отсутствовать кнопка &amp;quot;Открыть в IDE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Запуск IDE ===&lt;br /&gt;
&lt;br /&gt;
Запуск производится путём вызова http-метода &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;POST /api/snapshots/{snapshot_id}/ide&amp;lt;/code&amp;gt; с телом запроса &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;{&amp;quot;ideId&amp;quot;: &amp;quot;идентификатор IDE&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Последовательность действий, выполняемых при запуске IDE:&lt;br /&gt;
&lt;br /&gt;
# Производится проверка: была ли уже запущена указанная IDE для указанного снимка:&lt;br /&gt;
#* Если запущена: производится проверка доступности IDE (отвечает на запросы):&lt;br /&gt;
#** Если IDE доступна: действие не требуется. Процесс запуска завершается&lt;br /&gt;
#** Если IDE недоступна: продолжается процесс запуска. IDE будет перезапущена&lt;br /&gt;
# Создаётся &amp;quot;корневая папка снимка&amp;quot;, предназначенная для хранения исходного кода снимка и предупреждений анализатора с разметкой в виде sarif-файла. Название папки соответствует id снимка. Папка создаётся по пути заданному в параметре конфигурации IDE &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
# Исходный код снимка скачивается в &amp;quot;корневую папку снимка&amp;quot;&lt;br /&gt;
# Производится экспорт маркеров и разметки в виде sarif-файла в &amp;quot;корневую папку снимка&amp;quot;. Название sarif-файла формируется с помощью шаблона, заданного в параметре конфигурации IDE &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/sarif/filenametemplate&amp;lt;/code&amp;gt;&lt;br /&gt;
# Производится настройка и запуск docker-контейнера в соответствии с настройками &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker&amp;lt;/code&amp;gt;:&lt;br /&gt;
## Проверяется наличие на docker-хосте образа IDE, указанного в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker/image&amp;lt;/code&amp;gt;. Если docker-образ отсутствует, он будет загружен на хост&lt;br /&gt;
## Проверяется наличие на docker-хосте контейнера с IDE для снимка:&lt;br /&gt;
##* Если docker-контейнер не существует, то он будет создан и запущен&lt;br /&gt;
##* Если docker-контейнер существует и находится:&lt;br /&gt;
##** в статусе &amp;lt;code&amp;gt;running&amp;lt;/code&amp;gt; — процесс запуска IDE продолжается&lt;br /&gt;
##** в статусе &amp;lt;code&amp;gt;created&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;exited&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;paused&amp;lt;/code&amp;gt; — контейнер будет запущен&lt;br /&gt;
##** в других статусах — вернётся соответствующая ошибка и процесс запуска IDE прервётся&lt;br /&gt;
# После успешного запуска docker-контейнера осуществляется ожидание окончания запуска процесса IDE в контейнере в соответствии с настройками &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Если за отведённое время ответ от IDE получен — процесс запуска завершается&lt;br /&gt;
#* Если ответ не получен — вернётся ошибка &amp;lt;code&amp;gt;ide not ready&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При возникновении ошибки на одном из этапов запуска IDE артефакты, созданные на предыдущих этапах, останутся в системе. В дальнейшем они могут быть использованы при повторном запуске IDE, если причина возникновения ошибки была устранена.&lt;br /&gt;
&lt;br /&gt;
{{Note|type=reminder|text=Причиной возникновения ошибки &amp;quot;ide not ready&amp;quot; может стать высокая загруженность или недостаточная производительность docker-хоста, на котором запускается контейнер с IDE. В связи с этим процесс IDE внутри контейнера может запускаться дольше, чем указано в настойках &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck&amp;lt;/code&amp;gt;. В этом случае рекомендуется попробовать повторно запустить IDE через короткий промежуток времени}}&lt;br /&gt;
&lt;br /&gt;
Ещё одной причиной возникновения данной ошибки может стать сетевая недоступность docker-контейнера при подключении к удалённому docker-хосту. В таком случае рекомендуется проверить:&lt;br /&gt;
# Сетевую доступность docker-хоста&lt;br /&gt;
# Настройки фаервола на docker-хосте&lt;br /&gt;
# Настройки биндинга docker-контейнера c IDE&lt;br /&gt;
::&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker/container/hostconfig/portbindings&amp;lt;/code&amp;gt; &lt;br /&gt;
::Контейнер должен быть подключён к доступному сетевому интерфейсу&lt;br /&gt;
&lt;br /&gt;
=== Использование IDE: проксирование запросов ===&lt;br /&gt;
&lt;br /&gt;
После успешного запуска docker-контейнера IDE станут доступны ресурсы с префиксом &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Все запросы, направленные к ресурсам &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/*&amp;lt;/code&amp;gt;, будут проксироваться в соответствующий контейнер IDE.&lt;br /&gt;
&lt;br /&gt;
Например, если docker-контейнер c IDE &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;theia__default&amp;lt;/code&amp;gt; для снимка &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xxx&amp;lt;/code&amp;gt; запущен и слушает порт &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;35353&amp;lt;/code&amp;gt; на хосте &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker-host&amp;lt;/code&amp;gt;, то будет происходить проксирование:&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET http://docker-host:35353/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;POST http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;POST http://docker-host:35353/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET ws://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET ws://docker-host:35353/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для запуска IDE в окне браузера нужно указать адрес&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;http[s]://svacer-host/xvacer/webide/snapshots/{snapshot_id}/{ide_id}/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note}} Завершающий слеш обязателен!&lt;br /&gt;
&lt;br /&gt;
=== Перезапуск IDE ===&lt;br /&gt;
&lt;br /&gt;
В процессе работы Svacer следит за состоянием запущенных IDE. При попытке повторного запуска IDE проверяется её доступность: если IDE отвечает на запросы, то повторный запуск не производится и обработка запроса завершается.&lt;br /&gt;
&lt;br /&gt;
Также работоспособность IDE контролируется при использовании IDE в момент проксирования запросов в docker-контейнер: если IDE доступна, то запрос проксируется.&lt;br /&gt;
&lt;br /&gt;
Если IDE перестанет отвечать на запросы, то будет произведена попытка её перезапуска. В этом случае происходит та же последовательность действий, что и при [[Help:XSvacer:Webide#Запуск IDE|первоначальном запуске IDE]].&lt;br /&gt;
&lt;br /&gt;
Зачастую потеря связи обусловлена остановкой docker-контейнера с IDE. В таком случае docker-контейнер будет перезапущен.&lt;br /&gt;
&lt;br /&gt;
Если же недоступность IDE обусловлена другими причинами, то запрос на запуск/проксирование продолжит возвращать ошибку до устранения причин неработоспособности.&lt;br /&gt;
&lt;br /&gt;
=== Остановка IDE ===&lt;br /&gt;
&lt;br /&gt;
Запуск производится путём вызова http-метода&lt;br /&gt;
 DELETE /api/snapshots/{snapshot_id}/ide&lt;br /&gt;
с телом запроса &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;{&amp;quot;ideId&amp;quot;: &amp;quot;идентификатор IDE&amp;quot;}&amp;lt;/code&amp;gt;. В ходе обработки запроса останавливается docker-контейнер IDE.&lt;br /&gt;
&lt;br /&gt;
По умолчанию установлен параметр конфигурации &lt;br /&gt;
&lt;br /&gt;
 xsvacer/webide/theia/default/docker/container/hostconfig/autoremove: true&lt;br /&gt;
&lt;br /&gt;
Это означает, что после остановки docker-контейнер будет автоматически удалён.&lt;br /&gt;
&lt;br /&gt;
Чтобы изменить это поведение, настройка &lt;br /&gt;
 xsvacer/webide/theia/default/{id конфигурации}/container/hostconfig/autoremove&lt;br /&gt;
&lt;br /&gt;
должна быть установлена в &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; на момент запуска docker-контейнера IDE. Это можно сделать, например, установив значение переменной окружения &lt;br /&gt;
&lt;br /&gt;
 XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_CONTAINER_HOSTCONFIG_AUTOREMOVE=false&lt;br /&gt;
&lt;br /&gt;
{{Note|type=error|text=При использовании версии Svacer 9.0.0 установка &amp;lt;code&amp;gt;autoremove: false&amp;lt;/code&amp;gt; вызывает ошибку запуска. Исправлено в версии [[Svacer#Релизы|9.0.1]].'''}}&lt;br /&gt;
&lt;br /&gt;
При корректной остановке (например SIGTERM) Svacer автоматически остановит все запущенные docker-контейнеры IDE.&lt;br /&gt;
&lt;br /&gt;
=== Подключение к IDE после некорректного завершения Svacer ===&lt;br /&gt;
&lt;br /&gt;
При запуске Svacer осуществляет поиск запущенных docker-контейнеров IDE на доступных docker-хостах. При восстановлении связи с запущенными docker-контейнерами IDE и последующей корректной остановке Svacer все docker-контейнеры IDE будут остановлены.&lt;br /&gt;
&lt;br /&gt;
== REST API для работы с IDE ==&lt;br /&gt;
&lt;br /&gt;
{{Note|text=На этапе внедрения расширений XSvacer REST API может меняться. Следите за анонсами!}}&lt;br /&gt;
&lt;br /&gt;
После активации функциональности становятся доступны http-ресурсы для управления IDE:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | REST API управления IDE&lt;br /&gt;
|-&lt;br /&gt;
!Ресурс&lt;br /&gt;
!Описание                                                &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
GET /xsvacer/webide/api/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Получение списка доступных для запуска IDE.&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;order&amp;quot;: 0&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;id&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;name&amp;lt;/code&amp;gt; — название IDE&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;order&amp;lt;/code&amp;gt; — порядковый номер IDE в списке&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
GET /xsvacer/webide/api/snapshots/{snapshot_id}/ide/{ide_id}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Запрос описания экземпляра IDE, запущенного для снимка. &lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; — идентификатор снимка&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ide_id&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;id&amp;quot;: {&lt;br /&gt;
    &amp;quot;ide_id&amp;quot;: {&lt;br /&gt;
      &amp;quot;ide_type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
      &amp;quot;config_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;snapshot_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;url&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;start_args&amp;quot;: {&lt;br /&gt;
    &amp;quot;snapshot_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;user&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;user_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
POST /xsvacer/webide/api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Запуск IDE для просмотра исходных кодов снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; — идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
PUT /api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Команда управления экземпляром IDE снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; — идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;action&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;action&amp;lt;/code&amp;gt; — действие&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
'''Доступные действия:'''&lt;br /&gt;
* &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;update_markup&amp;lt;/code&amp;gt; — обновление предупреждений и разметки (sarif-файла)&lt;br /&gt;
'''Ответ:''' пустой&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
DELETE /xsvacer/webide/api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Остановка экземпляра IDE снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; — идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
'''Ответ:''' пустой&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Прокси для запросов экземпляра IDE снимка&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Формат идентификатора IDE ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;{тип ide}__{идентификатор конфигурации}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например, для default-конфигурации Theia IDE: &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;theia__default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Конфигурация ==&lt;br /&gt;
&lt;br /&gt;
Управление настройками функциональности осуществляется с помощью конфигурационного yaml-файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Раздел конфигурации для управления функциональностью — &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Раздел содержит перечисление доступных конфигураций запуска экземпляров Theia IDE &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia&amp;lt;/code&amp;gt;. При наличии нескольких активных конфигураций Theia IDE пользователь сможет выбрать какую из них использовать при запуске IDE с исходными файлами снимка.&lt;br /&gt;
&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       config1:&lt;br /&gt;
         ...&lt;br /&gt;
       config2:&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
Запуск IDE основывается на запуске docker-контейнеров, содержащих соответствующие сборки IDE. Поэтому необходимо также [[Help:XSvacer:Docker|настроить доступ к docker-хосту]] в разделе &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt;, иначе функциональность WebIDE не сможет работать корректно.&lt;br /&gt;
&lt;br /&gt;
В случае отсутствия файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; или отсутствии раздела &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; будет использоваться [[Help:XSvacer:Webide#Конфигурация_по_умолчанию_используемая_в_svacer|конфигурация по умолчанию]].&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация запуска Theia IDE ===&lt;br /&gt;
&lt;br /&gt;
{{Note|text=На этапе внедрения расширений XSvacer конфигурация функциональностей может меняться. Следите за анонсами!}}&lt;br /&gt;
&lt;br /&gt;
Конфигурации запуска Theia IDE добавляются в виде полей в разделе &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;. Название поля является идентификатором конфигурации запуска. Например, идентификатор по номеру используемой версии IDE:&lt;br /&gt;
&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       1-46-0:&lt;br /&gt;
         name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
==== Базовые параметры конфигурации запуска ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию                     &lt;br /&gt;
|-&lt;br /&gt;
|disabled&lt;br /&gt;
|bool&lt;br /&gt;
|Конфигурация запуска неактивна. Неактивная конфигурация не доступна для запуска экземпляра IDE&lt;br /&gt;
|true (переопределяется в конфигурации default)         &lt;br /&gt;
|-&lt;br /&gt;
|order&lt;br /&gt;
|int&lt;br /&gt;
|Порядковый номер в списке выбора конфигурации запуска&lt;br /&gt;
|0                                                        &lt;br /&gt;
|-&lt;br /&gt;
|name&lt;br /&gt;
|string&lt;br /&gt;
|Название конфигурации&lt;br /&gt;
|Theia blueprint web IDE (v1.46.0)                        &lt;br /&gt;
|-&lt;br /&gt;
|sourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке, содержащей исходные коды снимков на машине со Svacer&lt;br /&gt;
|${USER_CACHE_DIR}/svacer-snapshot-sources                &lt;br /&gt;
|-&lt;br /&gt;
|dockerhostsourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке, содержащей исходные коды снимков на хосте docker. Нужен при использовании удалённого docker-хоста, т. к. в таком случае папка с исходными кодами скорее всего будет доступна по адресу, отличающемуся от &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
|                                                         &lt;br /&gt;
|-&lt;br /&gt;
|dockerhostpathseparator&lt;br /&gt;
|string&lt;br /&gt;
|Разделитель пути на хосте docker. По умолчанию &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;quot;/&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|                                                         &lt;br /&gt;
|-&lt;br /&gt;
|sariffiletemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|{{Note|text=В версии 10.0.0 заменён на [[Help:XSvacer:Webide#Параметры_экспорта_sarif-файла_с_разметкой_предупреждений|sarif]]}}&lt;br /&gt;
Шаблон названия sarif-файла с предупреждениями анализатора. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|sarifFileContext]]&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;&amp;quot;{{.Context.ProjectName}}.{{.Context.BranchName}}.sarif&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры экспорта sarif-файла с разметкой предупреждений ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для настройки экспорта sarif-файлов с разметкой предупреждений, выполненной в Svacer'е.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию &lt;br /&gt;
|-&lt;br /&gt;
|sarif&lt;br /&gt;
|map&lt;br /&gt;
|Настройки экспорта sarif-файла&lt;br /&gt;
|                                     &lt;br /&gt;
|-&lt;br /&gt;
|sarif/filenametemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон для формирования названия sarif-файла. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|sarifFileContext]]&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;&amp;quot;warnings.sarif&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|sarif/commenttemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон для формирования элемента списка комментариев предупреждения при экспорте в sarif-файл. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|Comment]]&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;&amp;quot;{{if trim .Text}}`[{{.CreateTs.Local.Format \&amp;quot;02.01.2006 15:04\&amp;quot;}}] {{.CreatedBy}}:`\n\n{{trim .Text}}{{end}}&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры менеджера запуска IDE ====&lt;br /&gt;
&lt;br /&gt;
Конфигурация менеджера запуска IDE. На данный момент доступен только стандартный менеджер (&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;type: default&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию &lt;br /&gt;
|-&lt;br /&gt;
|manager&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация менеджера запуска IDE&lt;br /&gt;
|                                     &lt;br /&gt;
|-&lt;br /&gt;
|manager/type&lt;br /&gt;
|enum: default&lt;br /&gt;
|Тип менеджера запуска IDE&lt;br /&gt;
|default                              &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры запуска docker-контейнеров с IDE ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для настройки запуска docker-контейнеров с IDE&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию               &lt;br /&gt;
|-&lt;br /&gt;
|docker/&lt;br /&gt;
|map&lt;br /&gt;
|Настройки создания docker-контейнера с IDE&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/hostid&lt;br /&gt;
|string&lt;br /&gt;
|Идентификатор хоста docker, описанного в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/docker/hosts&amp;lt;/code&amp;gt;. Запуск docker-контейнера с IDE будет выполнен на этом хосте&lt;br /&gt;
|default                                            &lt;br /&gt;
|-&lt;br /&gt;
|docker/containernametemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон для формирования названия контейнера IDE для выбранного снимка. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|TheiaDockerContainerStartContext]]&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;&amp;quot;theia-1-46-{{.StartArgs.SnapshotID}}&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|docker/containerconfiglabels&lt;br /&gt;
|[]map&lt;br /&gt;
|Список меток docker-контейнера. Дополняет список меток в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker/container/config/labels&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
- &amp;quot;com.docker.compose.project&amp;quot;: svacer             &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры docker-образа из которого будет запущен контейнер&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/name&lt;br /&gt;
|string&lt;br /&gt;
|Название образа&lt;br /&gt;
|theia-blueprint                                    &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/tag&lt;br /&gt;
|string&lt;br /&gt;
|Тег образа&lt;br /&gt;
|1.46.0.sarif.clang                                 &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcetype&lt;br /&gt;
|enum: repository/file&lt;br /&gt;
|Тип источника для загрузки образа в docker-хост&lt;br /&gt;
* repository — будет вызван docker pull образа &amp;lt;code&amp;gt;{image/name}:{image/tag}&amp;lt;/code&amp;gt;&lt;br /&gt;
* file — будет вызван docker load с URL &amp;lt;code&amp;gt;image/sourcefileurl&amp;lt;/code&amp;gt;&lt;br /&gt;
|file                                               &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcefileurl&lt;br /&gt;
|url&lt;br /&gt;
|URL откуда будет загружен docker-образ если &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;image/sourcetype == &amp;quot;file&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
URL может содержать:&lt;br /&gt;
* путь к локальному файлу: схема &amp;lt;code&amp;gt;file://&amp;lt;/code&amp;gt;&lt;br /&gt;
* http/https-адрес: схема &amp;lt;code&amp;gt;http://&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;https://&amp;lt;/code&amp;gt;&lt;br /&gt;
|https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.tar&lt;br /&gt;
|-&lt;br /&gt;
|docker/container/&lt;br /&gt;
|map&lt;br /&gt;
|Свойства docker-контейнера&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/config.go#L70&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config/env&lt;br /&gt;
|[]string&lt;br /&gt;
|Список переменных среды, которые будут установлены в контейнере&lt;br /&gt;
|&lt;br /&gt;
- THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;     &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры хостинга контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/hostconfig.go#L379&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/autoremove&lt;br /&gt;
|bool&lt;br /&gt;
|&lt;br /&gt;
|true                                               &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/portbindings&lt;br /&gt;
|map&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&amp;quot;3000/tcp&amp;quot;:                                        &lt;br /&gt;
:- hostport: 0                                    &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/networkconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Сетевые настройки контейнера. Соответствуют структуре https://github.com/moby/moby/blob/v24.0.7/api/types/network/network.go#L104&lt;br /&gt;
|                                                   &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры проверки доступности healthcheck ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для проверки доступности IDE после запуска docker-контейнера&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck&lt;br /&gt;
|map&lt;br /&gt;
|Параметры проверки доступности IDE&lt;br /&gt;
|                                     &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyretries&lt;br /&gt;
|int&lt;br /&gt;
|Количества попыток проверки до ошибки доступности&lt;br /&gt;
|10                                   &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyperiod&lt;br /&gt;
|golang duration string&lt;br /&gt;
|Интервал проверки&lt;br /&gt;
|200ms                                &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Структуры передаваемые в поля с golang-шаблонами строк ====&lt;br /&gt;
&lt;br /&gt;
 sarifFileContext {&lt;br /&gt;
     Time    time.Time&lt;br /&gt;
     Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
&lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 TheiaDockerContainerStartContext {&lt;br /&gt;
     IdeID: {&lt;br /&gt;
         IdeType  string&lt;br /&gt;
         ConfigID string&lt;br /&gt;
     },&lt;br /&gt;
     StartArgs: {&lt;br /&gt;
         SnapshotID string&lt;br /&gt;
         UserID     string&lt;br /&gt;
         User       string&lt;br /&gt;
     },&lt;br /&gt;
     Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
 &lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 Comment {&lt;br /&gt;
     ID               string&lt;br /&gt;
     Text             string&lt;br /&gt;
     Ref              string&lt;br /&gt;
     CreatedBy        string&lt;br /&gt;
     CreatedByID      string&lt;br /&gt;
     CreateTs         time.Time&lt;br /&gt;
     UpdateTs         *time.Time&lt;br /&gt;
     UpdatedBy        string&lt;br /&gt;
     UpdatedByID      string&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация по умолчанию ===&lt;br /&gt;
&lt;br /&gt;
Данная настройка применяется по умолчанию для запуска Theia IDE, если в конфигурационном файле svacer.cfg отсутствует раздел &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
xsvacer:&lt;br /&gt;
  webide:&lt;br /&gt;
    theia:&lt;br /&gt;
      1-46-0: &amp;amp;1-46-0&lt;br /&gt;
        disabled: true&lt;br /&gt;
        order: 0&lt;br /&gt;
        name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
        sourcesroot: ${USER_CACHE_DIR}/svacer-snapshot-sources&lt;br /&gt;
        sarif:&lt;br /&gt;
            filenametemplate: &amp;quot;warnings.sarif&amp;quot;&lt;br /&gt;
            commenttemplate: &amp;quot;{{if trim .Text}}`[{{.CreateTs.Local.Format \&amp;quot;02.01.2006 15:04\&amp;quot;}}] {{.CreatedBy}}:`\n\n{{trim .Text}}{{end}}&amp;quot;&lt;br /&gt;
        manager:&lt;br /&gt;
          type: default&lt;br /&gt;
        docker:&lt;br /&gt;
          hostid: default # идентификатор используемого docker-хоста&lt;br /&gt;
          containernametemplate: &amp;quot;theia-1-46-&amp;lt;nowiki&amp;gt;{{.StartArgs.SnapshotID}}&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
          image:&lt;br /&gt;
            name: theia-blueprint&lt;br /&gt;
            tag: 1.46.0.sarif.clang&lt;br /&gt;
            sourcetype: file&lt;br /&gt;
            sourcefileurl: https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.tar&lt;br /&gt;
          containerconfiglabels:&lt;br /&gt;
            - &amp;quot;com.docker.compose.project&amp;quot;: svacer&lt;br /&gt;
          container:&lt;br /&gt;
            config:&lt;br /&gt;
              env:&lt;br /&gt;
                - THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
            hostconfig:&lt;br /&gt;
              autoremove: true&lt;br /&gt;
              portbindings:&lt;br /&gt;
                &amp;quot;3000/tcp&amp;quot;:&lt;br /&gt;
                  - hostport: 0&lt;br /&gt;
            networkconfig:&lt;br /&gt;
        healthcheck:&lt;br /&gt;
          starttoreadyretries: 10&lt;br /&gt;
          starttoreadyperiod: 200ms&lt;br /&gt;
      default:&lt;br /&gt;
        &amp;lt;&amp;lt;: *1-46-0&lt;br /&gt;
        order: 0&lt;br /&gt;
        disabled: false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
По умолчанию используется docker-хост с идентификатором &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;. Согласно настройке этого хоста, по умолчанию предполагается взаимодействие с докером через unix-сокет &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt;. Соответственно пользователь, под которым запускается Svacer, должен иметь доступ к этому сокету (https://docs.docker.com/engine/install/linux-postinstall/).&lt;br /&gt;
&lt;br /&gt;
{{Note|text=При наличии раздела &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; в конфигурационном файле svacer.cfg будут применены только настройки из этого раздела. Настройки по умолчанию будут полностью проигнорированы}}&lt;br /&gt;
&lt;br /&gt;
=== Изменение конфигурационных параметров с помощью переменных окружения ===&lt;br /&gt;
&lt;br /&gt;
Значения атрибутов конфигурации могут быть изменены с помощью переменных окружения&lt;br /&gt;
&lt;br /&gt;
 XSVACER_WEBIDE_THEIA_{id конфигурации ide}[_параметр]={значение параметра}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например, для активации rootless-хоста &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/hosts/local&amp;lt;/code&amp;gt; и переключения запуска IDE с идентификатором &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;default&amp;lt;/code&amp;gt; на этот хост можно указать такие значения переменных окружения при запуске Svacer:&lt;br /&gt;
&lt;br /&gt;
 XSVACER_DOCKER_HOSTS_LOCAL_DISABLED=false&lt;br /&gt;
 XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_HOSTID=local&lt;br /&gt;
&lt;br /&gt;
== Очистка системы: удаление артефактов функциональности ==&lt;br /&gt;
&lt;br /&gt;
В процессе использования функциональности IDE создаются следующие артефакты:&lt;br /&gt;
# Исходные файлы снимков скачиваются в корневые папки, заданные в параметре &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
# Артефакты docker:&lt;br /&gt;
#* образы и контейнеры создаются на хостах, указанных в конфигурации docker-хостов в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/hostid&amp;lt;/code&amp;gt;&lt;br /&gt;
#* названия docker-образов будут соответствовать параметрам в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/image&amp;lt;/code&amp;gt;&lt;br /&gt;
#* названия docker-контейнеров будут соответствовать параметру &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/containernametemplate&amp;lt;/code&amp;gt;&lt;br /&gt;
#* наборы меток doker-контейнеров будут содержать:&lt;br /&gt;
#*: метки, перечисленные в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/containerconfiglabels&amp;lt;/code&amp;gt;&lt;br /&gt;
#*: метки, перечисленные в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/container/config/labels&amp;lt;/code&amp;gt;&lt;br /&gt;
#*: метки с названиями &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.service.id&amp;lt;/code&amp;gt;, &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.service.type&amp;lt;/code&amp;gt;, &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.theia.start_args&amp;lt;/code&amp;gt;&lt;br /&gt;
# При использовании rootless-хоста docker будут созданы папки согласно [[Help:XSvacer:Docker#Специфичные настройки для rootless-хоста|настройкам]]&lt;br /&gt;
&lt;br /&gt;
== Рекомендации ==&lt;br /&gt;
&lt;br /&gt;
=== Предварительная загрузка docker-образа с IDE ===&lt;br /&gt;
&lt;br /&gt;
По умолчанию параметр &lt;br /&gt;
&lt;br /&gt;
 xsvacer/webide/theia/1-46-0/docker/image/sourcefileurl&lt;br /&gt;
&lt;br /&gt;
Содержит значение &lt;br /&gt;
&lt;br /&gt;
 https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.tar&lt;br /&gt;
&lt;br /&gt;
По этому адресу находится архив с docker-образом для Theia IDE.&lt;br /&gt;
&lt;br /&gt;
Если docker-образ ещё не был загружен, то загрузка начнётся при первой попытке запуска IDE. Т. к. этот процесс занимает длительное время, то запрос запуска IDE тоже будет выполняться долго. &lt;br /&gt;
&lt;br /&gt;
Для ускорения первого запуска IDE докер образ можно загрузить на хост docker вручную. Для этого необходимо:&lt;br /&gt;
&lt;br /&gt;
# Скачать файл архива&lt;br /&gt;
# Выполнить команду &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker image load -i /path/to/theia-blueprint.1.46.0.sarif.clang.tar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Информация о docker-образе Theia IDE ==&lt;br /&gt;
&lt;br /&gt;
Docker-образ, используемый по умолчанию, построен на базе [https://theia-ide.org/ Eclipse Theia IDE] версии [https://github.com/eclipse-theia/theia-blueprint/tree/v1.46.0 1.46.0].&lt;br /&gt;
&lt;br /&gt;
При этом была изменена компоновка расширений Theia. Результат выполнения &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
diff --git a/browser.Dockerfile b/browser.Dockerfile&lt;br /&gt;
index efe591e..a4ebb6a 100644&lt;br /&gt;
--- a/browser.Dockerfile&lt;br /&gt;
+++ b/browser.Dockerfile&lt;br /&gt;
@@ -42,7 +42,7 @@ RUN chmod g+rw /home &amp;amp;&amp;amp; \&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y wget apt-transport-https &amp;amp;&amp;amp; \&lt;br /&gt;
     wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | tee /usr/share/keyrings/adoptium.asc &amp;amp;&amp;amp; \&lt;br /&gt;
     echo &amp;quot;deb [signed-by=/usr/share/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main&amp;quot; | tee /etc/apt/sources.list.d/adoptium.list &amp;amp;&amp;amp; \&lt;br /&gt;
-    apt-get update &amp;amp;&amp;amp; apt-get install -y git openssh-client openssh-server bash libsecret-1-0 temurin-17-jdk maven &amp;amp;&amp;amp; \&lt;br /&gt;
+    apt-get update &amp;amp;&amp;amp; apt-get install -y git openssh-client openssh-server bash libsecret-1-0 clangd &amp;amp;&amp;amp; \&lt;br /&gt;
     apt-get purge -y wget &amp;amp;&amp;amp; \&lt;br /&gt;
     apt-get clean&lt;br /&gt;
&lt;br /&gt;
diff --git a/package.json b/package.json&lt;br /&gt;
index 9044595..9d0dcc8 100644&lt;br /&gt;
--- a/package.json&lt;br /&gt;
+++ b/package.json&lt;br /&gt;
@@ -54,10 +54,8 @@&lt;br /&gt;
   &amp;quot;theiaPluginsDir&amp;quot;: &amp;quot;plugins&amp;quot;,&lt;br /&gt;
   &amp;quot;theiaPlugins&amp;quot;: {&lt;br /&gt;
     &amp;quot;eclipse-theia.builtin-extension-pack&amp;quot;: &amp;quot;https://open-vsx.org/api/eclipse-theia/builtin-extension-pack/1.83.1/file/eclipse-theia.builtin-extension-pack-1.83.1.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;ms-vscode.js-debug&amp;quot;: &amp;quot;https://open-vsx.org/api/ms-vscode/js-debug/1.83.1/file/ms-vscode.js-debug-1.83.1.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;ms-vscode.js-debug-companion&amp;quot;: &amp;quot;https://open-vsx.org/api/ms-vscode/js-debug-companion/1.1.2/file/ms-vscode.js-debug-companion-1.1.2.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;vscjava.vscode-java-pack&amp;quot;: &amp;quot;https://open-vsx.org/api/vscjava/vscode-java-pack/0.25.11/file/vscjava.vscode-java-pack-0.25.11.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;vscjava.vscode-java-dependency&amp;quot;: &amp;quot;https://open-vsx.org/api/vscjava/vscode-java-dependency/0.21.2/file/vscjava.vscode-java-dependency-0.21.2.vsix&amp;quot;&lt;br /&gt;
+    &amp;quot;llvm-vs-code-extensions.vscode-clangd&amp;quot;: &amp;quot;https://open-vsx.org/api/llvm-vs-code-extensions/vscode-clangd/0.1.26/file/llvm-vs-code-extensions.vscode-clangd-0.1.26.vsix&amp;quot;,&lt;br /&gt;
+    &amp;quot;ms-sarifvscode.sarif-viewer&amp;quot;: &amp;quot;https://open-vsx.org/api/MS-SarifVSCode/sarif-viewer/3.4.2/file/MS-SarifVSCode.sarif-viewer-3.4.2.vsix&amp;quot;&lt;br /&gt;
   },&lt;br /&gt;
   &amp;quot;theiaPluginsExcludeIds&amp;quot;: [&lt;br /&gt;
     &amp;quot;ms-vscode.js-debug-companion&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Команда построения docker-образа: &lt;br /&gt;
 docker build -t theia-blueprint:1.46.0.sarif.clang -f browser.Dockerfile .&lt;br /&gt;
&lt;br /&gt;
Команда экспорта docker-образа:&lt;br /&gt;
 docker image save theia-blueprint:1.46.0 &amp;gt; /path/to/tar/theia-blueprint.1.46.0.docker.command.tar&lt;br /&gt;
&lt;br /&gt;
== Известные проблемы ==&lt;br /&gt;
&lt;br /&gt;
=== При открытии sarif-файла в IDE открывается пустая панель &amp;quot;SARIF Results&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Для просмотра sarif-файла, содержащего предупреждения анализатора и разметку, используется плагин [https://open-vsx.org/extension/MS-SarifVSCode/sarif-viewer SARIF Viewer]. При просмотре sarif-файла открывается webview плагина со списком предупреждений анализатора.&lt;br /&gt;
&lt;br /&gt;
В Theia IDE для открытия webview применяется [https://developer.mozilla.org/en_US/docs/Web/API/Service_Worker_API Service Worker API]. В целях обеспечения безопасности применение Service Worker API [https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#setting_up_to_play_with_service_workers требует], чтобы доступ к web-приложению осуществлялся по HTTPS, либо приложение размещалось на localhost.&lt;br /&gt;
&lt;br /&gt;
Поэтому для решения данной проблемы Svacer должен открываться по HTTPS или быть доступен по адресу &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:Public_API/management/containers&amp;diff=2090</id>
		<title>Help:Public API/management/containers</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:Public_API/management/containers&amp;diff=2090"/>
		<updated>2024-10-16T10:05:41Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: /* = Примеры запросов управления составом групп */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Управление контейнерами (проектами, ветками, группами проектов) =&lt;br /&gt;
&lt;br /&gt;
В данном разделе содержится описание REST API управления контейнерами и их содержимым.&lt;br /&gt;
&lt;br /&gt;
Для выполнения операций получения списка контейнеров, их создания, изменения и удаления существует http-ресурс&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
POST /api/public/admin/server/containers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для операций управления составом групп проектов существует http-ресурс &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
POST /api/public/admin/server/project-groups&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для операции переименования снимков существует http-ресурс&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PUT /api/public/snapshots/{snapshot_id}/update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note|type=warn|text=Для использования ресурсов необходимо использовать http-запросы с токеном пользователя имеющего соответствующие права}}&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;POST /api/public/admin/server/containers&amp;lt;/code&amp;gt; - управление набором проектов, веток, групп проектов ==&lt;br /&gt;
&lt;br /&gt;
Формат запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;action&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;parent&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;review_with_comment&amp;quot;: true&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формат ответа:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;Containers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;parent&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;review_with_comment&amp;quot;: true,&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение полей запроса и установка значений полей ответа зависит от типа операции и определяется значением поля запроса &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | Поддерживаемыe значения поля &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!Значение&lt;br /&gt;
!Тип операции&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt;&lt;br /&gt;
|Получение списка контейнеров&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;add&amp;lt;/code&amp;gt;&lt;br /&gt;
|Создание контейнера&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt;&lt;br /&gt;
|Изменение контейнера&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;remove&amp;lt;/code&amp;gt;&lt;br /&gt;
|Удаление контейнера&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Получение списка контейнеров: &amp;quot;action&amp;quot;: &amp;quot;list&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | Назначение полей запроса&lt;br /&gt;
|-&lt;br /&gt;
!Поле&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;&lt;br /&gt;
|Если не пустое: идентификатор контейнера, для которого будут загружены &amp;quot;связанные&amp;quot; контейнеры:&lt;br /&gt;
:- если передан id группы проектов - вернётся список проектов входящих в данную группу&lt;br /&gt;
:- если передан id проекта - вернётся список групп проектов, в который входит проект + список его веток&lt;br /&gt;
:- если передан id ветки - вернётся список снимков данной ветки&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;&lt;br /&gt;
|Допустимые значения: &amp;lt;code&amp;gt;project&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;branch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;project-group&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если не пустое: отфильтровывает список контейнеров по типу&lt;br /&gt;
&lt;br /&gt;
Если пустое:&lt;br /&gt;
:- если поле &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; пустое - возвращается объединённый список проектов и групп проектов&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
|Если не пустое:&lt;br /&gt;
:- если поле &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; пустое - отфильтровывает список контейнеров по названию&lt;br /&gt;
:- если поле &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; НЕ пустое - фильтр по названию НЕ применяется&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;parent&amp;lt;/code&amp;gt;&lt;br /&gt;
|Не используется&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review_with_comment&amp;lt;/code&amp;gt;&lt;br /&gt;
|Не используется&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Примеры запросов с &amp;lt;code&amp;gt;&amp;quot;action&amp;quot;: &amp;quot;list&amp;quot;&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl --data '{&amp;quot;action&amp;quot;: &amp;quot;list&amp;quot;}' -X POST http://localhost:8080/api/public/admin/server/containers&lt;br /&gt;
{&amp;quot;Containers&amp;quot;:[{&amp;quot;id&amp;quot;:&amp;quot;0f7da122-9c86-4384-b7bc-356bfb3b7f28&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;projectGroupA&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;project-group&amp;quot;},{&amp;quot;id&amp;quot;:&amp;quot;20706313-6986-4c9d-9a4e-5e4908a11499&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;projectGroupB&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;project-group&amp;quot;},{&amp;quot;id&amp;quot;:&amp;quot;a7e22042-96e5-4659-b21a-0615d434bed7&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;bash&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;project&amp;quot;},{&amp;quot;id&amp;quot;:&amp;quot;a8e0352c-0408-417c-8fd0-4fbe03f38980&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;iptables&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;project&amp;quot;},{&amp;quot;id&amp;quot;:&amp;quot;d53b0b92-d0fb-429a-8f86-c8fe6ee50c0c&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;proftpd&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;project&amp;quot;}]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl --data '{&amp;quot;action&amp;quot;: &amp;quot;list&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;project-group&amp;quot;}' -X POST http://localhost:8080/api/public/admin/server/containers&lt;br /&gt;
{&amp;quot;Containers&amp;quot;:[{&amp;quot;id&amp;quot;:&amp;quot;0f7da122-9c86-4384-b7bc-356bfb3b7f28&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;projectGroupA&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;project-group&amp;quot;},{&amp;quot;id&amp;quot;:&amp;quot;20706313-6986-4c9d-9a4e-5e4908a11499&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;projectGroupB&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;project-group&amp;quot;}]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl --data '{&amp;quot;action&amp;quot;: &amp;quot;list&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;bas&amp;quot;}' -X POST http://localhost:8080/api/public/admin/server/containers&lt;br /&gt;
{&amp;quot;Containers&amp;quot;:[{&amp;quot;id&amp;quot;:&amp;quot;a7e22042-96e5-4659-b21a-0615d434bed7&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;bash&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;project&amp;quot;}]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl --data '{&amp;quot;action&amp;quot;: &amp;quot;list&amp;quot;, &amp;quot;id&amp;quot;:&amp;quot;a7e22042-96e5-4659-b21a-0615d434bed7&amp;quot;}' -X POST http://localhost:8080/api/public/admin/server/containers&lt;br /&gt;
{&amp;quot;Containers&amp;quot;:[{&amp;quot;id&amp;quot;:&amp;quot;0f7da122-9c86-4384-b7bc-356bfb3b7f28&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;projectGroupA&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;project-group&amp;quot;},{&amp;quot;id&amp;quot;:&amp;quot;ef9210db-180b-4351-8a2f-7e8ceaa42ec6&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;master&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;branch&amp;quot;,&amp;quot;parent&amp;quot;:&amp;quot;a7e22042-96e5-4659-b21a-0615d434bed7&amp;quot;}]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание контейнера: &amp;quot;action&amp;quot;: &amp;quot;add&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | Назначение полей запроса&lt;br /&gt;
|-&lt;br /&gt;
!Поле&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;add&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;&lt;br /&gt;
|Не используется&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;&lt;br /&gt;
|Тип нового контейнера. Обязательное. Допустимые значения: &amp;lt;code&amp;gt;project&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;branch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;project-group&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
|Название нового контейнера. Обязательное&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;parent&amp;lt;/code&amp;gt;&lt;br /&gt;
|Название или идентификатор проекта, в котором будет создана новая ветка&lt;br /&gt;
Если тип нового контейнера НЕ &amp;lt;code&amp;gt;branch&amp;lt;/code&amp;gt;: не используется&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review_with_comment&amp;lt;/code&amp;gt;&lt;br /&gt;
|Значение настройки проекта &amp;quot;Обязательный комментарий при разметке&amp;quot;&lt;br /&gt;
Если тип нового контейнера НЕ &amp;lt;code&amp;gt;project&amp;lt;/code&amp;gt;: не используется&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Изменение контейнера: &amp;quot;action&amp;quot;: &amp;quot;update&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | Назначение полей запроса&lt;br /&gt;
|-&lt;br /&gt;
!Поле&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;&lt;br /&gt;
|Идентификатор изменяемого контейнера. Обязательное&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;&lt;br /&gt;
|Тип изменяемого контейнера. Используется для поиска контейнера вместе с id. Изменить тип контейнера нельзя. Необязательное. Допустимые значения: &amp;lt;code&amp;gt;project&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;branch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;project-group&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
|Новое название контейнера. Обязательное&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;parent&amp;lt;/code&amp;gt;&lt;br /&gt;
|Не используется. Изменить проект в котором создана ветка нельзя&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review_with_comment&amp;lt;/code&amp;gt;&lt;br /&gt;
|Новое значение настройки проекта &amp;quot;Обязательный комментарий при разметке&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Удаление контейнера: &amp;quot;action&amp;quot;: &amp;quot;remove&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | Назначение полей запроса&lt;br /&gt;
|-&lt;br /&gt;
!Поле&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;remove&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;&lt;br /&gt;
|Идентификатор удаляемого контейнера. Обязательное&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;&lt;br /&gt;
|Тип удаляемого контейнера. Используется для поиска контейнера вместе с id. Необязательное. Допустимые значения: &amp;lt;code&amp;gt;project&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;branch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;project-group&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
|Не используется&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;parent&amp;lt;/code&amp;gt;&lt;br /&gt;
|Не используется&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review_with_comment&amp;lt;/code&amp;gt;&lt;br /&gt;
|Не используется&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;POST /api/public/admin/server/project-groups&amp;lt;/code&amp;gt; - управление составом групп проектов ==&lt;br /&gt;
&lt;br /&gt;
Формат запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;action&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;project_group_name_or_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;project_name_or_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формат ответа:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;action&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;project_group_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;project_group_name&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;project_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;project_name&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение полей запроса и ответа зависит от типа операции и определяется значением поля &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | Поддерживаемыe значения поля &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!Значение&lt;br /&gt;
!Тип операции&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;&lt;br /&gt;
|Получение экземпляра группы проектов&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;add-project-to-group&amp;lt;/code&amp;gt;&lt;br /&gt;
|Добавление проекта в группу проектов&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;remove-project-from-group&amp;lt;/code&amp;gt;&lt;br /&gt;
|Исключение проекта из группы проектов&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Получение экземпляра группы проектов: &amp;quot;action&amp;quot;: &amp;quot;get&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | Назначение полей запроса&lt;br /&gt;
|-&lt;br /&gt;
!Поле&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_group_name_or_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|Название или идентификатор запрашиваемой группы проектов. {{Note|text= Поддержка названия добавлена ПОСЛЕ версии 9.0.2}}&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_name_or_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|Не используется&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Добавление проекта в группу проектов: &amp;quot;action&amp;quot;: &amp;quot;add-project-to-group&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | Назначение полей запроса&lt;br /&gt;
|-&lt;br /&gt;
!Поле&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;add-project-to-group&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_group_name_or_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|Название или идентификатор изменяемой группы проектов&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_name_or_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|Название или идентификатор добавляемого проекта&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Исключение проекта из группы проектов: &amp;quot;action&amp;quot;: &amp;quot;remove-project-from-group&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | Назначение полей запроса&lt;br /&gt;
|-&lt;br /&gt;
!Поле&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;remove-project-from-group&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_group_name_or_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|Название или идентификатор изменяемой группы проектов&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_name_or_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|Название или идентификатор исключаемого проекта&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Примеры запросов управления составом групп ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl --data '{&amp;quot;action&amp;quot;: &amp;quot;get&amp;quot;, &amp;quot;project_group_name_or_id&amp;quot;: &amp;quot;0f7da122-9c86-4384-b7bc-356bfb3b7f28&amp;quot;}' -X POST http://localhost:8080/api/public/admin/server/project-groups&lt;br /&gt;
{&amp;quot;action&amp;quot;:&amp;quot;get&amp;quot;,&amp;quot;project_group_id&amp;quot;:&amp;quot;0f7da122-9c86-4384-b7bc-356bfb3b7f28&amp;quot;,&amp;quot;project_group_name&amp;quot;:&amp;quot;projectGroupA&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
$ curl --data '{&amp;quot;action&amp;quot;: &amp;quot;get&amp;quot;, &amp;quot;project_group_name_or_id&amp;quot;: &amp;quot;projectGroupA&amp;quot;}' -X POST http://localhost:8080/api/public/admin/server/project-groups&lt;br /&gt;
{&amp;quot;action&amp;quot;:&amp;quot;get&amp;quot;,&amp;quot;project_group_id&amp;quot;:&amp;quot;0f7da122-9c86-4384-b7bc-356bfb3b7f28&amp;quot;,&amp;quot;project_group_name&amp;quot;:&amp;quot;projectGroupA&amp;quot;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl --data '{&amp;quot;action&amp;quot;: &amp;quot;add-project-to-group&amp;quot;, &amp;quot;project_name_or_id&amp;quot;: &amp;quot;iptables&amp;quot;, &amp;quot;project_group_name_or_id&amp;quot;: &amp;quot;projectGroupA&amp;quot;}' -X POST http://localhost:8080/api/public/admin/server/project-groups&lt;br /&gt;
{&amp;quot;action&amp;quot;:&amp;quot;add-project-to-group&amp;quot;,&amp;quot;project_group_id&amp;quot;:&amp;quot;0f7da122-9c86-4384-b7bc-356bfb3b7f28&amp;quot;,&amp;quot;project_group_name&amp;quot;:&amp;quot;projectGroupA&amp;quot;,&amp;quot;project_id&amp;quot;:&amp;quot;a8e0352c-0408-417c-8fd0-4fbe03f38980&amp;quot;,&amp;quot;project_name&amp;quot;:&amp;quot;iptables&amp;quot;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl --data '{&amp;quot;action&amp;quot;: &amp;quot;remove-project-from-group&amp;quot;, &amp;quot;project_name_or_id&amp;quot;: &amp;quot;iptables&amp;quot;, &amp;quot;project_group_name_or_id&amp;quot;: &amp;quot;projectGroupA&amp;quot;}' -X POST http://localhost:8080/api/public/admin/server/project-groups&lt;br /&gt;
{&amp;quot;action&amp;quot;:&amp;quot;remove-project-from-group&amp;quot;,&amp;quot;project_group_id&amp;quot;:&amp;quot;0f7da122-9c86-4384-b7bc-356bfb3b7f28&amp;quot;,&amp;quot;project_group_name&amp;quot;:&amp;quot;projectGroupA&amp;quot;,&amp;quot;project_id&amp;quot;:&amp;quot;a8e0352c-0408-417c-8fd0-4fbe03f38980&amp;quot;,&amp;quot;project_name&amp;quot;:&amp;quot;iptables&amp;quot;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:Public_API/management/containers&amp;diff=2089</id>
		<title>Help:Public API/management/containers</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:Public_API/management/containers&amp;diff=2089"/>
		<updated>2024-10-16T09:28:03Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Управление контейнерами (проектами, ветками, группами проектов) =&lt;br /&gt;
&lt;br /&gt;
В данном разделе содержится описание REST API управления контейнерами и их содержимым.&lt;br /&gt;
&lt;br /&gt;
Для выполнения операций получения списка контейнеров, их создания, изменения и удаления существует http-ресурс&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
POST /api/public/admin/server/containers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для операций управления составом групп проектов существует http-ресурс &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
POST /api/public/admin/server/project-groups&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для операции переименования снимков существует http-ресурс&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PUT /api/public/snapshots/{snapshot_id}/update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note|type=warn|text=Для использования ресурсов необходимо использовать http-запросы с токеном пользователя имеющего соответствующие права}}&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;POST /api/public/admin/server/containers&amp;lt;/code&amp;gt; - управление набором проектов, веток, групп проектов ==&lt;br /&gt;
&lt;br /&gt;
Формат запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;action&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;parent&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;review_with_comment&amp;quot;: true&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формат ответа:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;Containers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;parent&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;review_with_comment&amp;quot;: true,&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение полей запроса и установка значений полей ответа зависит от типа операции и определяется значением поля запроса &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | Поддерживаемыe значения поля &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!Значение&lt;br /&gt;
!Тип операции&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt;&lt;br /&gt;
|Получение списка контейнеров&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;add&amp;lt;/code&amp;gt;&lt;br /&gt;
|Создание контейнера&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt;&lt;br /&gt;
|Изменение контейнера&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;remove&amp;lt;/code&amp;gt;&lt;br /&gt;
|Удаление контейнера&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Получение списка контейнеров: &amp;quot;action&amp;quot;: &amp;quot;list&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | Назначение полей запроса&lt;br /&gt;
|-&lt;br /&gt;
!Поле&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;&lt;br /&gt;
|Если не пустое: идентификатор контейнера, для которого будут загружены &amp;quot;связанные&amp;quot; контейнеры:&lt;br /&gt;
:- если передан id группы проектов - вернётся список проектов входящих в данную группу&lt;br /&gt;
:- если передан id проекта - вернётся список групп проектов, в который входит проект + список его веток&lt;br /&gt;
:- если передан id ветки - вернётся список снимков данной ветки&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;&lt;br /&gt;
|Допустимые значения: &amp;lt;code&amp;gt;project&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;branch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;project-group&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если не пустое: отфильтровывает список контейнеров по типу&lt;br /&gt;
&lt;br /&gt;
Если пустое:&lt;br /&gt;
:- если поле &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; пустое - возвращается объединённый список проектов и групп проектов&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
|Если не пустое:&lt;br /&gt;
:- если поле &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; пустое - отфильтровывает список контейнеров по названию&lt;br /&gt;
:- если поле &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; НЕ пустое - фильтр по названию НЕ применяется&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;parent&amp;lt;/code&amp;gt;&lt;br /&gt;
|Не используется&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review_with_comment&amp;lt;/code&amp;gt;&lt;br /&gt;
|Не используется&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Примеры запросов с &amp;lt;code&amp;gt;&amp;quot;action&amp;quot;: &amp;quot;list&amp;quot;&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl --data '{&amp;quot;action&amp;quot;: &amp;quot;list&amp;quot;}' -X POST http://localhost:8080/api/public/admin/server/containers&lt;br /&gt;
{&amp;quot;Containers&amp;quot;:[{&amp;quot;id&amp;quot;:&amp;quot;0f7da122-9c86-4384-b7bc-356bfb3b7f28&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;projectGroupA&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;project-group&amp;quot;},{&amp;quot;id&amp;quot;:&amp;quot;20706313-6986-4c9d-9a4e-5e4908a11499&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;projectGroupB&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;project-group&amp;quot;},{&amp;quot;id&amp;quot;:&amp;quot;a7e22042-96e5-4659-b21a-0615d434bed7&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;bash&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;project&amp;quot;},{&amp;quot;id&amp;quot;:&amp;quot;a8e0352c-0408-417c-8fd0-4fbe03f38980&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;iptables&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;project&amp;quot;},{&amp;quot;id&amp;quot;:&amp;quot;d53b0b92-d0fb-429a-8f86-c8fe6ee50c0c&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;proftpd&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;project&amp;quot;}]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl --data '{&amp;quot;action&amp;quot;: &amp;quot;list&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;project-group&amp;quot;}' -X POST http://localhost:8080/api/public/admin/server/containers&lt;br /&gt;
{&amp;quot;Containers&amp;quot;:[{&amp;quot;id&amp;quot;:&amp;quot;0f7da122-9c86-4384-b7bc-356bfb3b7f28&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;projectGroupA&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;project-group&amp;quot;},{&amp;quot;id&amp;quot;:&amp;quot;20706313-6986-4c9d-9a4e-5e4908a11499&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;projectGroupB&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;project-group&amp;quot;}]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl --data '{&amp;quot;action&amp;quot;: &amp;quot;list&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;bas&amp;quot;}' -X POST http://localhost:8080/api/public/admin/server/containers&lt;br /&gt;
{&amp;quot;Containers&amp;quot;:[{&amp;quot;id&amp;quot;:&amp;quot;a7e22042-96e5-4659-b21a-0615d434bed7&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;bash&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;project&amp;quot;}]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl --data '{&amp;quot;action&amp;quot;: &amp;quot;list&amp;quot;, &amp;quot;id&amp;quot;:&amp;quot;a7e22042-96e5-4659-b21a-0615d434bed7&amp;quot;}' -X POST http://localhost:8080/api/public/admin/server/containers&lt;br /&gt;
{&amp;quot;Containers&amp;quot;:[{&amp;quot;id&amp;quot;:&amp;quot;0f7da122-9c86-4384-b7bc-356bfb3b7f28&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;projectGroupA&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;project-group&amp;quot;},{&amp;quot;id&amp;quot;:&amp;quot;ef9210db-180b-4351-8a2f-7e8ceaa42ec6&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;master&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;branch&amp;quot;,&amp;quot;parent&amp;quot;:&amp;quot;a7e22042-96e5-4659-b21a-0615d434bed7&amp;quot;}]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание контейнера: &amp;quot;action&amp;quot;: &amp;quot;add&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | Назначение полей запроса&lt;br /&gt;
|-&lt;br /&gt;
!Поле&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;add&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;&lt;br /&gt;
|Не используется&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;&lt;br /&gt;
|Тип нового контейнера. Обязательное. Допустимые значения: &amp;lt;code&amp;gt;project&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;branch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;project-group&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
|Название нового контейнера. Обязательное&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;parent&amp;lt;/code&amp;gt;&lt;br /&gt;
|Название или идентификатор проекта, в котором будет создана новая ветка&lt;br /&gt;
Если тип нового контейнера НЕ &amp;lt;code&amp;gt;branch&amp;lt;/code&amp;gt;: не используется&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review_with_comment&amp;lt;/code&amp;gt;&lt;br /&gt;
|Значение настройки проекта &amp;quot;Обязательный комментарий при разметке&amp;quot;&lt;br /&gt;
Если тип нового контейнера НЕ &amp;lt;code&amp;gt;project&amp;lt;/code&amp;gt;: не используется&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Изменение контейнера: &amp;quot;action&amp;quot;: &amp;quot;update&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | Назначение полей запроса&lt;br /&gt;
|-&lt;br /&gt;
!Поле&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;&lt;br /&gt;
|Идентификатор изменяемого контейнера. Обязательное&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;&lt;br /&gt;
|Тип изменяемого контейнера. Используется для поиска контейнера вместе с id. Изменить тип контейнера нельзя. Необязательное. Допустимые значения: &amp;lt;code&amp;gt;project&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;branch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;project-group&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
|Новое название контейнера. Обязательное&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;parent&amp;lt;/code&amp;gt;&lt;br /&gt;
|Не используется. Изменить проект в котором создана ветка нельзя&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review_with_comment&amp;lt;/code&amp;gt;&lt;br /&gt;
|Новое значение настройки проекта &amp;quot;Обязательный комментарий при разметке&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Удаление контейнера: &amp;quot;action&amp;quot;: &amp;quot;remove&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | Назначение полей запроса&lt;br /&gt;
|-&lt;br /&gt;
!Поле&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;remove&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;&lt;br /&gt;
|Идентификатор удаляемого контейнера. Обязательное&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;&lt;br /&gt;
|Тип удаляемого контейнера. Используется для поиска контейнера вместе с id. Необязательное. Допустимые значения: &amp;lt;code&amp;gt;project&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;branch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;project-group&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
|Не используется&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;parent&amp;lt;/code&amp;gt;&lt;br /&gt;
|Не используется&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review_with_comment&amp;lt;/code&amp;gt;&lt;br /&gt;
|Не используется&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;POST /api/public/admin/server/project-groups&amp;lt;/code&amp;gt; - управление составом групп проектов ==&lt;br /&gt;
&lt;br /&gt;
Формат запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;action&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;project_group_name_or_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;project_name_or_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формат ответа:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;action&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;project_group_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;project_group_name&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;project_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;project_name&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение полей запроса и ответа зависит от типа операции и определяется значением поля &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | Поддерживаемыe значения поля &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!Значение&lt;br /&gt;
!Тип операции&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;&lt;br /&gt;
|Получение экземпляра группы проектов&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;add-project-to-group&amp;lt;/code&amp;gt;&lt;br /&gt;
|Добавление проекта в группу проектов&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;remove-project-from-group&amp;lt;/code&amp;gt;&lt;br /&gt;
|Исключение проекта из группы проектов&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Получение экземпляра группы проектов: &amp;quot;action&amp;quot;: &amp;quot;get&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | Назначение полей запроса&lt;br /&gt;
|-&lt;br /&gt;
!Поле&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_group_name_or_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|Название или идентификатор запрашиваемой группы проектов. {{Note|text= Поддержка названия добавлена ПОСЛЕ версии 9.0.2}}&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_name_or_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|Не используется&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Добавление проекта в группу проектов: &amp;quot;action&amp;quot;: &amp;quot;add-project-to-group&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | Назначение полей запроса&lt;br /&gt;
|-&lt;br /&gt;
!Поле&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;add-project-to-group&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_group_name_or_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|Название или идентификатор изменяемой группы проектов&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_name_or_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|Название или идентификатор добавляемого проекта&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Исключение проекта из группы проектов: &amp;quot;action&amp;quot;: &amp;quot;remove-project-from-group&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | Назначение полей запроса&lt;br /&gt;
|-&lt;br /&gt;
!Поле&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;remove-project-from-group&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_group_name_or_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|Название или идентификатор изменяемой группы проектов&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_name_or_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|Название или идентификатор исключаемого проекта&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Примеры запросов управления составом групп ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl --data '{&amp;quot;action&amp;quot;: &amp;quot;get&amp;quot;, &amp;quot;project_group_name_or_id&amp;quot;: &amp;quot;0f7da122-9c86-4384-b7bc-356bfb3b7f28&amp;quot;}' -X POST http://localhost:8080/api/public/admin/server/project-groups&lt;br /&gt;
{&amp;quot;action&amp;quot;:&amp;quot;get&amp;quot;,&amp;quot;project_group_id&amp;quot;:&amp;quot;0f7da122-9c86-4384-b7bc-356bfb3b7f28&amp;quot;,&amp;quot;project_group_name&amp;quot;:&amp;quot;projectGroupA&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
$ curl --data '{&amp;quot;action&amp;quot;: &amp;quot;get&amp;quot;, &amp;quot;project_group_name_or_id&amp;quot;: &amp;quot;projectGroupA&amp;quot;}' -X POST http://localhost:8080/api/public/admin/server/project-groups&lt;br /&gt;
{&amp;quot;action&amp;quot;:&amp;quot;get&amp;quot;,&amp;quot;project_group_id&amp;quot;:&amp;quot;0f7da122-9c86-4384-b7bc-356bfb3b7f28&amp;quot;,&amp;quot;project_group_name&amp;quot;:&amp;quot;projectGroupA&amp;quot;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl --data '{&amp;quot;action&amp;quot;: &amp;quot;add-project-to-group&amp;quot;, &amp;quot;project_name_or_id&amp;quot;: &amp;quot;iptables&amp;quot;, &amp;quot;project_group_name_or_id&amp;quot;: &amp;quot;projectGroupA&amp;quot;}' -X POST http://localhost:8080/api/public/admin/server/project-groups&lt;br /&gt;
{&amp;quot;action&amp;quot;:&amp;quot;add-project-to-group&amp;quot;,&amp;quot;project_group_id&amp;quot;:&amp;quot;0f7da122-9c86-4384-b7bc-356bfb3b7f28&amp;quot;,&amp;quot;project_group_name&amp;quot;:&amp;quot;projectGroupA&amp;quot;,&amp;quot;project_id&amp;quot;:&amp;quot;a8e0352c-0408-417c-8fd0-4fbe03f38980&amp;quot;,&amp;quot;project_name&amp;quot;:&amp;quot;iptables&amp;quot;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl --data '{&amp;quot;action&amp;quot;: &amp;quot;remove-project-from-group&amp;quot;, &amp;quot;project_name_or_id&amp;quot;: &amp;quot;iptables&amp;quot;, &amp;quot;project_group_name_or_id&amp;quot;: &amp;quot;projectGroupA&amp;quot;}' -X POST http://localhost:8080/api/public/admin/server/project-groups&lt;br /&gt;
{&amp;quot;action&amp;quot;:&amp;quot;remove-project-from-group&amp;quot;,&amp;quot;project_group_id&amp;quot;:&amp;quot;0f7da122-9c86-4384-b7bc-356bfb3b7f28&amp;quot;,&amp;quot;project_group_name&amp;quot;:&amp;quot;projectGroupA&amp;quot;,&amp;quot;project_id&amp;quot;:&amp;quot;a8e0352c-0408-417c-8fd0-4fbe03f38980&amp;quot;,&amp;quot;project_name&amp;quot;:&amp;quot;iptables&amp;quot;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:Public_API/management/containers&amp;diff=2088</id>
		<title>Help:Public API/management/containers</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:Public_API/management/containers&amp;diff=2088"/>
		<updated>2024-10-16T09:17:21Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: Created page with &amp;quot;= Управление контейнерами (проектами, ветками, группами проектов) =  В данном разделе содержится описание REST API управления контейнерами и их содержимым.  Для выполнения операций получения списка контейнеров, их создания, изменения и удаления существует http-ресу...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Управление контейнерами (проектами, ветками, группами проектов) =&lt;br /&gt;
&lt;br /&gt;
В данном разделе содержится описание REST API управления контейнерами и их содержимым.&lt;br /&gt;
&lt;br /&gt;
Для выполнения операций получения списка контейнеров, их создания, изменения и удаления существует http-ресурс&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
POST /api/public/admin/server/containers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для операций управления составом групп проектов существует http-ресурс &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
POST /api/public/admin/server/project-groups&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note|type=warn|text=Для использования ресурсов необходимо использовать http-запросы с токеном пользователя имеющего соответствующие права}}&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;POST /api/public/admin/server/containers&amp;lt;/code&amp;gt; - управление набором проектов, веток, групп проектов ==&lt;br /&gt;
&lt;br /&gt;
Формат запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;action&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;parent&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;review_with_comment&amp;quot;: true&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формат ответа:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;Containers&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;parent&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;review_with_comment&amp;quot;: true,&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение полей запроса и установка значений полей ответа зависит от типа операции и определяется значением поля запроса &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | Поддерживаемыe значения поля &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!Значение&lt;br /&gt;
!Тип операции&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt;&lt;br /&gt;
|Получение списка контейнеров&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;add&amp;lt;/code&amp;gt;&lt;br /&gt;
|Создание контейнера&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt;&lt;br /&gt;
|Изменение контейнера&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;remove&amp;lt;/code&amp;gt;&lt;br /&gt;
|Удаление контейнера&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Получение списка контейнеров: &amp;quot;action&amp;quot;: &amp;quot;list&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | Назначение полей запроса&lt;br /&gt;
|-&lt;br /&gt;
!Поле&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;&lt;br /&gt;
|Если не пустое: идентификатор контейнера, для которого будут загружены &amp;quot;связанные&amp;quot; контейнеры:&lt;br /&gt;
:- если передан id группы проектов - вернётся список проектов входящих в данную группу&lt;br /&gt;
:- если передан id проекта - вернётся список групп проектов, в который входит проект + список его веток&lt;br /&gt;
:- если передан id ветки - вернётся список снимков данной ветки&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;&lt;br /&gt;
|Допустимые значения: &amp;lt;code&amp;gt;project&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;branch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;project-group&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если не пустое: отфильтровывает список контейнеров по типу&lt;br /&gt;
&lt;br /&gt;
Если пустое:&lt;br /&gt;
:- если поле &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; пустое - возвращается объединённый список проектов и групп проектов&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
|Если не пустое:&lt;br /&gt;
:- если поле &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; пустое - отфильтровывает список контейнеров по названию&lt;br /&gt;
:- если поле &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; НЕ пустое - фильтр по названию НЕ применяется&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;parent&amp;lt;/code&amp;gt;&lt;br /&gt;
|Не используется&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review_with_comment&amp;lt;/code&amp;gt;&lt;br /&gt;
|Не используется&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Примеры запросов с &amp;lt;code&amp;gt;&amp;quot;action&amp;quot;: &amp;quot;list&amp;quot;&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl --data '{&amp;quot;action&amp;quot;: &amp;quot;list&amp;quot;}' -X POST http://localhost:8080/api/public/admin/server/containers&lt;br /&gt;
{&amp;quot;Containers&amp;quot;:[{&amp;quot;id&amp;quot;:&amp;quot;0f7da122-9c86-4384-b7bc-356bfb3b7f28&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;projectGroupA&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;project-group&amp;quot;},{&amp;quot;id&amp;quot;:&amp;quot;20706313-6986-4c9d-9a4e-5e4908a11499&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;projectGroupB&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;project-group&amp;quot;},{&amp;quot;id&amp;quot;:&amp;quot;a7e22042-96e5-4659-b21a-0615d434bed7&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;bash&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;project&amp;quot;},{&amp;quot;id&amp;quot;:&amp;quot;a8e0352c-0408-417c-8fd0-4fbe03f38980&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;iptables&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;project&amp;quot;},{&amp;quot;id&amp;quot;:&amp;quot;d53b0b92-d0fb-429a-8f86-c8fe6ee50c0c&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;proftpd&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;project&amp;quot;}]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl --data '{&amp;quot;action&amp;quot;: &amp;quot;list&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;project-group&amp;quot;}' -X POST http://localhost:8080/api/public/admin/server/containers&lt;br /&gt;
{&amp;quot;Containers&amp;quot;:[{&amp;quot;id&amp;quot;:&amp;quot;0f7da122-9c86-4384-b7bc-356bfb3b7f28&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;projectGroupA&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;project-group&amp;quot;},{&amp;quot;id&amp;quot;:&amp;quot;20706313-6986-4c9d-9a4e-5e4908a11499&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;projectGroupB&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;project-group&amp;quot;}]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl --data '{&amp;quot;action&amp;quot;: &amp;quot;list&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;bas&amp;quot;}' -X POST http://localhost:8080/api/public/admin/server/containers&lt;br /&gt;
{&amp;quot;Containers&amp;quot;:[{&amp;quot;id&amp;quot;:&amp;quot;a7e22042-96e5-4659-b21a-0615d434bed7&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;bash&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;project&amp;quot;}]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl --data '{&amp;quot;action&amp;quot;: &amp;quot;list&amp;quot;, &amp;quot;id&amp;quot;:&amp;quot;a7e22042-96e5-4659-b21a-0615d434bed7&amp;quot;}' -X POST http://localhost:8080/api/public/admin/server/containers&lt;br /&gt;
{&amp;quot;Containers&amp;quot;:[{&amp;quot;id&amp;quot;:&amp;quot;0f7da122-9c86-4384-b7bc-356bfb3b7f28&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;projectGroupA&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;project-group&amp;quot;},{&amp;quot;id&amp;quot;:&amp;quot;ef9210db-180b-4351-8a2f-7e8ceaa42ec6&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;master&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;branch&amp;quot;,&amp;quot;parent&amp;quot;:&amp;quot;a7e22042-96e5-4659-b21a-0615d434bed7&amp;quot;}]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Создание контейнера: &amp;quot;action&amp;quot;: &amp;quot;add&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | Назначение полей запроса&lt;br /&gt;
|-&lt;br /&gt;
!Поле&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;add&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;&lt;br /&gt;
|Не используется&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;&lt;br /&gt;
|Тип нового контейнера. Обязательное. Допустимые значения: &amp;lt;code&amp;gt;project&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;branch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;project-group&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
|Название нового контейнера. Обязательное&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;parent&amp;lt;/code&amp;gt;&lt;br /&gt;
|Название или идентификатор проекта, в котором будет создана новая ветка&lt;br /&gt;
Если тип нового контейнера НЕ &amp;lt;code&amp;gt;branch&amp;lt;/code&amp;gt;: не используется&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review_with_comment&amp;lt;/code&amp;gt;&lt;br /&gt;
|Значение настройки проекта &amp;quot;Обязательный комментарий при разметке&amp;quot;&lt;br /&gt;
Если тип нового контейнера НЕ &amp;lt;code&amp;gt;project&amp;lt;/code&amp;gt;: не используется&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Изменение контейнера: &amp;quot;action&amp;quot;: &amp;quot;update&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | Назначение полей запроса&lt;br /&gt;
|-&lt;br /&gt;
!Поле&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;&lt;br /&gt;
|Идентификатор изменяемого контейнера. Обязательное&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;&lt;br /&gt;
|Тип изменяемого контейнера. Используется для поиска контейнера вместе с id. Изменить тип контейнера нельзя. Необязательное. Допустимые значения: &amp;lt;code&amp;gt;project&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;branch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;project-group&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
|Новое название контейнера. Обязательное&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;parent&amp;lt;/code&amp;gt;&lt;br /&gt;
|Не используется. Изменить проект в котором создана ветка нельзя&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review_with_comment&amp;lt;/code&amp;gt;&lt;br /&gt;
|Новое значение настройки проекта &amp;quot;Обязательный комментарий при разметке&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Удаление контейнера: &amp;quot;action&amp;quot;: &amp;quot;remove&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | Назначение полей запроса&lt;br /&gt;
|-&lt;br /&gt;
!Поле&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;remove&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;&lt;br /&gt;
|Идентификатор удаляемого контейнера. Обязательное&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;&lt;br /&gt;
|Тип удаляемого контейнера. Используется для поиска контейнера вместе с id. Необязательное. Допустимые значения: &amp;lt;code&amp;gt;project&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;branch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;project-group&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
|Не используется&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;parent&amp;lt;/code&amp;gt;&lt;br /&gt;
|Не используется&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;review_with_comment&amp;lt;/code&amp;gt;&lt;br /&gt;
|Не используется&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;POST /api/public/admin/server/project-groups&amp;lt;/code&amp;gt; - управление составом групп проектов ==&lt;br /&gt;
&lt;br /&gt;
Формат запроса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;action&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;project_group_name_or_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;project_name_or_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формат ответа:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;action&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;project_group_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;project_group_name&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;project_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;project_name&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Назначение полей запроса и ответа зависит от типа операции и определяется значением поля &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | Поддерживаемыe значения поля &amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!Значение&lt;br /&gt;
!Тип операции&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;&lt;br /&gt;
|Получение экземпляра группы проектов&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;add-project-to-group&amp;lt;/code&amp;gt;&lt;br /&gt;
|Добавление проекта в группу проектов&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;remove-project-from-group&amp;lt;/code&amp;gt;&lt;br /&gt;
|Исключение проекта из группы проектов&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Получение экземпляра группы проектов: &amp;quot;action&amp;quot;: &amp;quot;get&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | Назначение полей запроса&lt;br /&gt;
|-&lt;br /&gt;
!Поле&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_group_name_or_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|Название или идентификатор запрашиваемой группы проектов. {{Note|text= Поддержка названия добавлена ПОСЛЕ версии 9.0.2}}&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_name_or_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|Не используется&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Добавление проекта в группу проектов: &amp;quot;action&amp;quot;: &amp;quot;add-project-to-group&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | Назначение полей запроса&lt;br /&gt;
|-&lt;br /&gt;
!Поле&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;add-project-to-group&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_group_name_or_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|Название или идентификатор изменяемой группы проектов&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_name_or_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|Название или идентификатор добавляемого проекта&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Исключение проекта из группы проектов: &amp;quot;action&amp;quot;: &amp;quot;remove-project-from-group&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | Назначение полей запроса&lt;br /&gt;
|-&lt;br /&gt;
!Поле&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;remove-project-from-group&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_group_name_or_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|Название или идентификатор изменяемой группы проектов&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;project_name_or_id&amp;lt;/code&amp;gt;&lt;br /&gt;
|Название или идентификатор исключаемого проекта&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Примеры запросов управления составом групп ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl --data '{&amp;quot;action&amp;quot;: &amp;quot;get&amp;quot;, &amp;quot;project_group_name_or_id&amp;quot;: &amp;quot;0f7da122-9c86-4384-b7bc-356bfb3b7f28&amp;quot;}' -X POST http://localhost:8080/api/public/admin/server/project-groups&lt;br /&gt;
{&amp;quot;action&amp;quot;:&amp;quot;get&amp;quot;,&amp;quot;project_group_id&amp;quot;:&amp;quot;0f7da122-9c86-4384-b7bc-356bfb3b7f28&amp;quot;,&amp;quot;project_group_name&amp;quot;:&amp;quot;projectGroupA&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
$ curl --data '{&amp;quot;action&amp;quot;: &amp;quot;get&amp;quot;, &amp;quot;project_group_name_or_id&amp;quot;: &amp;quot;projectGroupA&amp;quot;}' -X POST http://localhost:8080/api/public/admin/server/project-groups&lt;br /&gt;
{&amp;quot;action&amp;quot;:&amp;quot;get&amp;quot;,&amp;quot;project_group_id&amp;quot;:&amp;quot;0f7da122-9c86-4384-b7bc-356bfb3b7f28&amp;quot;,&amp;quot;project_group_name&amp;quot;:&amp;quot;projectGroupA&amp;quot;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl --data '{&amp;quot;action&amp;quot;: &amp;quot;add-project-to-group&amp;quot;, &amp;quot;project_name_or_id&amp;quot;: &amp;quot;iptables&amp;quot;, &amp;quot;project_group_name_or_id&amp;quot;: &amp;quot;projectGroupA&amp;quot;}' -X POST http://localhost:8080/api/public/admin/server/project-groups&lt;br /&gt;
{&amp;quot;action&amp;quot;:&amp;quot;add-project-to-group&amp;quot;,&amp;quot;project_group_id&amp;quot;:&amp;quot;0f7da122-9c86-4384-b7bc-356bfb3b7f28&amp;quot;,&amp;quot;project_group_name&amp;quot;:&amp;quot;projectGroupA&amp;quot;,&amp;quot;project_id&amp;quot;:&amp;quot;a8e0352c-0408-417c-8fd0-4fbe03f38980&amp;quot;,&amp;quot;project_name&amp;quot;:&amp;quot;iptables&amp;quot;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl --data '{&amp;quot;action&amp;quot;: &amp;quot;remove-project-from-group&amp;quot;, &amp;quot;project_name_or_id&amp;quot;: &amp;quot;iptables&amp;quot;, &amp;quot;project_group_name_or_id&amp;quot;: &amp;quot;projectGroupA&amp;quot;}' -X POST http://localhost:8080/api/public/admin/server/project-groups&lt;br /&gt;
{&amp;quot;action&amp;quot;:&amp;quot;remove-project-from-group&amp;quot;,&amp;quot;project_group_id&amp;quot;:&amp;quot;0f7da122-9c86-4384-b7bc-356bfb3b7f28&amp;quot;,&amp;quot;project_group_name&amp;quot;:&amp;quot;projectGroupA&amp;quot;,&amp;quot;project_id&amp;quot;:&amp;quot;a8e0352c-0408-417c-8fd0-4fbe03f38980&amp;quot;,&amp;quot;project_name&amp;quot;:&amp;quot;iptables&amp;quot;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=2055</id>
		<title>Help:XSvacer:Webide</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=2055"/>
		<updated>2024-07-15T11:53:47Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note|text=Данная функциональность входит в набор расширений XSvacer}}&lt;br /&gt;
&lt;br /&gt;
= Поддержка среды разработки Theia IDE =&lt;br /&gt;
&lt;br /&gt;
Данная функциональность даёт возможность просматривать исходный код снимка с предупреждениями анализатора во внешней IDE.&lt;br /&gt;
&lt;br /&gt;
По умолчанию запускается IDE, [[#Информация_о_docker-образе_Theia_IDE|собранная]] на основе [https://theia-ide.org/ Theia IDE].&lt;br /&gt;
&lt;br /&gt;
== Активация функциональности ==&lt;br /&gt;
Для активации функциональности необходимо указать флаг &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt; при запуске Svacer.&lt;br /&gt;
&lt;br /&gt;
При запуске функциональности Webide также будет запущена функциональность [[Help:XSvacer:Docker|docker]].&lt;br /&gt;
&lt;br /&gt;
При активации функциональности:&lt;br /&gt;
* становится доступным REST API управления IDE для просмотра исходного кода снимков проектов&lt;br /&gt;
* в пользовательском интерфейсе на вкладке &amp;quot;Информация о снимке&amp;quot; появляется кнопка &amp;quot;Открыть в IDE&amp;quot;&lt;br /&gt;
* устанавливается подключение к хосту docker, на котором будут запускаться контейнеры с экземплярами IDE&lt;br /&gt;
&lt;br /&gt;
=== Быстрый запуск функциональности с настройками по умолчанию ===&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы начать пользоваться функциональностью запуска IDE без изменения конфигурационных параметров, нужно выполнить следующие действия:&lt;br /&gt;
# Настройка доступа к docker-хосту:&lt;br /&gt;
## Запустить docker со настройками по умолчанию (dockerd должен слушать unix-сокет &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt; — https://docs.docker.com/reference/cli/dockerd/#daemon-socket-option)&lt;br /&gt;
## Проверить, что у пользователя под которым будет запускаться Svacer есть доступ к unix-сокету docker-хоста &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt; — https://docs.docker.com/engine/install/linux-postinstall&lt;br /&gt;
# Настроить права доступа у пользователей, которые смогут запускать IDE: требуются разрешения на проект/ветку &amp;quot;Просмотр маркеров&amp;quot; и &amp;quot;Экспорт разметки&amp;quot;&lt;br /&gt;
# Перезапустить Svacer с флагом &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt;&lt;br /&gt;
# ''Опционально.'' Для ускорения первого запуска IDE:&lt;br /&gt;
## Скачать [https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.tar архив с docker-образом]&lt;br /&gt;
## Загрузить docker-образ из архива на docker-хост: &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker image load -i /path/to/theia-blueprint.1.46.0.sarif.clang.tar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого у пользователей с указанными правами должна появиться кнопка &amp;quot;Открыть в IDE&amp;quot; на панели с информацией о снимке.&lt;br /&gt;
&lt;br /&gt;
{{Note}} IDE с исходным кодом снимков будут запускаться в новых вкладках браузера. Обычно все браузеры блокируют автоматическое открытие вкладки и показывают соответствующее предупреждение. &lt;br /&gt;
&lt;br /&gt;
Например, в Firefox:&lt;br /&gt;
&lt;br /&gt;
[[File:Firefox popup notification ru.png]]&lt;br /&gt;
&lt;br /&gt;
В таком случае нужно дать разрешение на открытие вкладки с IDE:&lt;br /&gt;
&lt;br /&gt;
[[File:Firefox popup notification expanded ru.png|x150px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При необходимости изменения настроек подключения к docker-хосту:&lt;br /&gt;
# Скопировать [[Help:XSvacer:Docker#Конфигурация_по_умолчанию|конфигурацию docker по умолчанию]] в раздел &amp;lt;code&amp;gt;xsvacer&amp;lt;/code&amp;gt; конфигурационного файла svacer.cfg&lt;br /&gt;
# Внести требуемые изменения в конфигурацию раздела &amp;lt;code&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При необходимости изменения настроек запуска IDE:&lt;br /&gt;
# Скопировать [[#Конфигурация_по_умолчанию|конфигурацию webide по умолчанию]] в раздел &amp;lt;code&amp;gt;xsvacer&amp;lt;/code&amp;gt; конфигурационного файла svacer.cfg&lt;br /&gt;
# Внести требуемые изменения в конфигурацию раздела &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Принцип работы ==&lt;br /&gt;
&lt;br /&gt;
Функциональность запуска IDE для просмотра исходного кода снимков становится доступной пользователю, если соблюдаются условия:&lt;br /&gt;
# Функциональность активна: при запуске Svacer указан флаг &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt;;&lt;br /&gt;
# В [[Help:XSvacer:Webide#Конфигурация|конфигурации]] функциональности &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia&amp;lt;/code&amp;gt; есть хотя бы одна активная (&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;disabled: false&amp;lt;/code&amp;gt;) конфигурация IDE&lt;br /&gt;
# У пользователя Svacer имеются разрешения &amp;quot;Просмотр маркеров&amp;quot; и &amp;quot;Экспорт разметки&amp;quot; на проект, в котором находится снимок, для которого нужно запустить IDE&lt;br /&gt;
&lt;br /&gt;
В противном случае в пользовательском интерфейсе будет отсутствовать кнопка &amp;quot;Открыть в IDE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Запуск IDE ===&lt;br /&gt;
&lt;br /&gt;
Запуск производится путём вызова http-метода &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;POST /api/snapshots/{snapshot_id}/ide&amp;lt;/code&amp;gt; с телом запроса &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;{&amp;quot;ideId&amp;quot;: &amp;quot;идентификатор IDE&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Последовательность действий, выполняемых при запуске IDE:&lt;br /&gt;
&lt;br /&gt;
# Производится проверка: была ли уже запущена указанная IDE для указанного снимка:&lt;br /&gt;
#* Если запущена: производится проверка доступности IDE (отвечает на запросы):&lt;br /&gt;
#** Если IDE доступна: действие не требуется. Процесс запуска завершается&lt;br /&gt;
#** Если IDE недоступна: продолжается процесс запуска. IDE будет перезапущена&lt;br /&gt;
# Создаётся &amp;quot;корневая папка снимка&amp;quot;, предназначенная для хранения исходного кода снимка и предупреждений анализатора с разметкой в виде sarif-файла. Название папки соответствует id снимка. Папка создаётся по пути заданному в параметре конфигурации IDE &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
# Исходный код снимка скачивается в &amp;quot;корневую папку снимка&amp;quot;&lt;br /&gt;
# Производится экспорт маркеров и разметки в виде sarif-файла в &amp;quot;корневую папку снимка&amp;quot;. Название sarif-файла формируется с помощью шаблона, заданного в параметре конфигурации IDE &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/sariffiletemplate&amp;lt;/code&amp;gt;&lt;br /&gt;
# Производится настройка и запуск docker-контейнера в соответствии с настройками &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker&amp;lt;/code&amp;gt;:&lt;br /&gt;
## Проверяется наличие на docker-хосте образа IDE, указанного в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker/image&amp;lt;/code&amp;gt;. Если docker-образ отсутствует, он будет загружен на хост&lt;br /&gt;
## Проверяется наличие на docker-хосте контейнера с IDE для снимка:&lt;br /&gt;
##* Если docker-контейнер не существует, то он будет создан и запущен&lt;br /&gt;
##* Если docker-контейнер существует и находится:&lt;br /&gt;
##** в статусе &amp;lt;code&amp;gt;running&amp;lt;/code&amp;gt; — процесс запуска IDE продолжается&lt;br /&gt;
##** в статусе &amp;lt;code&amp;gt;created&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;exited&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;paused&amp;lt;/code&amp;gt; — контейнер будет запущен&lt;br /&gt;
##** в других статусах — вернётся соответствующая ошибка и процесс запуска IDE прервётся&lt;br /&gt;
# После успешного запуска docker-контейнера осуществляется ожидание окончания запуска процесса IDE в контейнере в соответствии с настройками &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Если за отведённое время ответ от IDE получен — процесс запуска завершается&lt;br /&gt;
#* Если ответ не получен — вернётся ошибка &amp;lt;code&amp;gt;ide not ready&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При возникновении ошибки на одном из этапов запуска IDE артефакты, созданные на предыдущих этапах, останутся в системе. В дальнейшем они могут быть использованы при повторном запуске IDE, если причина возникновения ошибки была устранена.&lt;br /&gt;
&lt;br /&gt;
{{Note|type=reminder|text=Причиной возникновения ошибки &amp;quot;ide not ready&amp;quot; может стать высокая загруженность или недостаточная производительность docker-хоста, на котором запускается контейнер с IDE. В связи с этим процесс IDE внутри контейнера может запускаться дольше, чем указано в настойках &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck&amp;lt;/code&amp;gt;. В этом случае рекомендуется попробовать повторно запустить IDE через короткий промежуток времени}}&lt;br /&gt;
&lt;br /&gt;
Ещё одной причиной возникновения данной ошибки может стать сетевая недоступность docker-контейнера при подключении к удалённому docker-хосту. В таком случае рекомендуется проверить:&lt;br /&gt;
# Сетевую доступность docker-хоста&lt;br /&gt;
# Настройки фаервола на docker-хосте&lt;br /&gt;
# Настройки биндинга docker-контейнера c IDE&lt;br /&gt;
::&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker/container/hostconfig/portbindings&amp;lt;/code&amp;gt; &lt;br /&gt;
::Контейнер должен быть подключён к доступному сетевому интерфейсу&lt;br /&gt;
&lt;br /&gt;
=== Использование IDE: проксирование запросов ===&lt;br /&gt;
&lt;br /&gt;
После успешного запуска docker-контейнера IDE станут доступны ресурсы с префиксом &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Все запросы, направленные к ресурсам &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/*&amp;lt;/code&amp;gt;, будут проксироваться в соответствующий контейнер IDE.&lt;br /&gt;
&lt;br /&gt;
Например, если docker-контейнер c IDE &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;theia__default&amp;lt;/code&amp;gt; для снимка &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xxx&amp;lt;/code&amp;gt; запущен и слушает порт &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;35353&amp;lt;/code&amp;gt; на хосте &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker-host&amp;lt;/code&amp;gt;, то будет происходить проксирование:&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET http://docker-host:35353/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;POST http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;POST http://docker-host:35353/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET ws://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET ws://docker-host:35353/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для запуска IDE в окне браузера нужно указать адрес&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;http[s]://svacer-host/xvacer/webide/snapshots/{snapshot_id}/{ide_id}/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note}} Завершающий слеш обязателен!&lt;br /&gt;
&lt;br /&gt;
=== Перезапуск IDE ===&lt;br /&gt;
&lt;br /&gt;
В процессе работы Svacer следит за состоянием запущенных IDE. При попытке повторного запуска IDE проверяется её доступность: если IDE отвечает на запросы, то повторный запуск не производится и обработка запроса завершается.&lt;br /&gt;
&lt;br /&gt;
Также работоспособность IDE контролируется при использовании IDE в момент проксирования запросов в docker-контейнер: если IDE доступна, то запрос проксируется.&lt;br /&gt;
&lt;br /&gt;
Если IDE перестанет отвечать на запросы, то будет произведена попытка её перезапуска. В этом случае происходит та же последовательность действий, что и при [[Help:XSvacer:Webide#Запуск IDE|первоначальном запуске IDE]].&lt;br /&gt;
&lt;br /&gt;
Зачастую потеря связи обусловлена остановкой docker-контейнера с IDE. В таком случае docker-контейнер будет перезапущен.&lt;br /&gt;
&lt;br /&gt;
Если же недоступность IDE обусловлена другими причинами, то запрос на запуск/проксирование продолжит возвращать ошибку до устранения причин неработоспособности.&lt;br /&gt;
&lt;br /&gt;
=== Остановка IDE ===&lt;br /&gt;
&lt;br /&gt;
Запуск производится путём вызова http-метода&lt;br /&gt;
 DELETE /api/snapshots/{snapshot_id}/ide&lt;br /&gt;
с телом запроса &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;{&amp;quot;ideId&amp;quot;: &amp;quot;идентификатор IDE&amp;quot;}&amp;lt;/code&amp;gt;. В ходе обработки запроса останавливается docker-контейнер IDE.&lt;br /&gt;
&lt;br /&gt;
По умолчанию установлен параметр конфигурации &lt;br /&gt;
&lt;br /&gt;
 xsvacer/webide/theia/default/docker/container/hostconfig/autoremove: true&lt;br /&gt;
&lt;br /&gt;
Это означает, что после остановки docker-контейнер будет автоматически удалён.&lt;br /&gt;
&lt;br /&gt;
Чтобы изменить это поведение, настройка &lt;br /&gt;
 xsvacer/webide/theia/default/{id конфигурации}/container/hostconfig/autoremove&lt;br /&gt;
&lt;br /&gt;
должна быть установлена в &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; на момент запуска docker-контейнера IDE. Это можно сделать, например, установив значение переменной окружения &lt;br /&gt;
&lt;br /&gt;
 XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_CONTAINER_HOSTCONFIG_AUTOREMOVE=false&lt;br /&gt;
&lt;br /&gt;
{{Note|type=error|text=При использовании версии Svacer 9.0.0 установка &amp;lt;code&amp;gt;autoremove: false&amp;lt;/code&amp;gt; вызывает ошибку запуска. Исправлено в версии [[Svacer#Релизы|9.0.1]].'''}}&lt;br /&gt;
&lt;br /&gt;
При корректной остановке (например SIGTERM) Svacer автоматически остановит все запущенные docker-контейнеры IDE.&lt;br /&gt;
&lt;br /&gt;
=== Подключение к IDE после некорректного завершения Svacer ===&lt;br /&gt;
&lt;br /&gt;
При запуске Svacer осуществляет поиск запущенных docker-контейнеров IDE на доступных docker-хостах. При восстановлении связи с запущенными docker-контейнерами IDE и последующей корректной остановке Svacer все docker-контейнеры IDE будут остановлены.&lt;br /&gt;
&lt;br /&gt;
== REST API для работы с IDE ==&lt;br /&gt;
&lt;br /&gt;
{{Note|text=На этапе внедрения расширений XSvacer REST API может меняться. Следите за анонсами!}}&lt;br /&gt;
&lt;br /&gt;
После активации функциональности становятся доступны http-ресурсы для управления IDE:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | REST API управления IDE&lt;br /&gt;
|-&lt;br /&gt;
!Ресурс&lt;br /&gt;
!Описание                                                &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
GET /xsvacer/webide/api/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Получение списка доступных для запуска IDE.&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;order&amp;quot;: 0&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;id&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;name&amp;lt;/code&amp;gt; — название IDE&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;order&amp;lt;/code&amp;gt; — порядковый номер IDE в списке&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
GET /xsvacer/webide/api/snapshots/{snapshot_id}/ide/{ide_id}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Запрос описания экземпляра IDE, запущенного для снимка. &lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; — идентификатор снимка&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ide_id&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;id&amp;quot;: {&lt;br /&gt;
    &amp;quot;ide_id&amp;quot;: {&lt;br /&gt;
      &amp;quot;ide_type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
      &amp;quot;config_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;snapshot_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;url&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;start_args&amp;quot;: {&lt;br /&gt;
    &amp;quot;snapshot_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;user&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;user_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
POST /xsvacer/webide/api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Запуск IDE для просмотра исходных кодов снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; — идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
PUT /api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Команда управления экземпляром IDE снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; — идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;action&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;action&amp;lt;/code&amp;gt; — действие&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
'''Доступные действия:'''&lt;br /&gt;
* &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;update_markup&amp;lt;/code&amp;gt; — обновление предупреждений и разметки (sarif-файла)&lt;br /&gt;
'''Ответ:''' пустой&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
DELETE /xsvacer/webide/api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Остановка экземпляра IDE снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; — идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
'''Ответ:''' пустой&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Прокси для запросов экземпляра IDE снимка&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Формат идентификатора IDE ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;{тип ide}__{идентификатор конфигурации}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например, для default-конфигурации Theia IDE: &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;theia__default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Конфигурация ==&lt;br /&gt;
&lt;br /&gt;
Управление настройками функциональности осуществляется с помощью конфигурационного yaml-файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Раздел конфигурации для управления функциональностью — &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Раздел содержит перечисление доступных конфигураций запуска экземпляров Theia IDE &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia&amp;lt;/code&amp;gt;. При наличии нескольких активных конфигураций Theia IDE пользователь сможет выбрать какую из них использовать при запуске IDE с исходными файлами снимка.&lt;br /&gt;
&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       config1:&lt;br /&gt;
         ...&lt;br /&gt;
       config2:&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
Запуск IDE основывается на запуске docker-контейнеров, содержащих соответствующие сборки IDE. Поэтому необходимо также [[Help:XSvacer:Docker|настроить доступ к docker-хосту]] в разделе &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt;, иначе функциональность WebIDE не сможет работать корректно.&lt;br /&gt;
&lt;br /&gt;
В случае отсутствия файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; или отсутствии раздела &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; будет использоваться [[Help:XSvacer:Webide#Конфигурация_по_умолчанию_используемая_в_svacer|конфигурация по умолчанию]].&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация запуска Theia IDE ===&lt;br /&gt;
&lt;br /&gt;
{{Note|text=На этапе внедрения расширений XSvacer конфигурация функциональностей может меняться. Следите за анонсами!}}&lt;br /&gt;
&lt;br /&gt;
Конфигурации запуска Theia IDE добавляются в виде полей в разделе &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;. Название поля является идентификатором конфигурации запуска. Например, идентификатор по номеру используемой версии IDE:&lt;br /&gt;
&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       1-46-0:&lt;br /&gt;
         name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
==== Базовые параметры конфигурации запуска ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию                     &lt;br /&gt;
|-&lt;br /&gt;
|disabled&lt;br /&gt;
|bool&lt;br /&gt;
|Конфигурация запуска неактивна. Неактивная конфигурация не доступна для запуска экземпляра IDE&lt;br /&gt;
|true (переопределяется в конфигурации default)         &lt;br /&gt;
|-&lt;br /&gt;
|order&lt;br /&gt;
|int&lt;br /&gt;
|Порядковый номер в списке выбора конфигурации запуска&lt;br /&gt;
|0                                                        &lt;br /&gt;
|-&lt;br /&gt;
|name&lt;br /&gt;
|string&lt;br /&gt;
|Название конфигурации&lt;br /&gt;
|Theia blueprint web IDE (v1.46.0)                        &lt;br /&gt;
|-&lt;br /&gt;
|sourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке, содержащей исходные коды снимков на машине со Svacer&lt;br /&gt;
|${USER_CACHE_DIR}/svacer-snapshot-sources                &lt;br /&gt;
|-&lt;br /&gt;
|dockerhostsourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке, содержащей исходные коды снимков на хосте docker. Нужен при использовании удалённого docker-хоста, т. к. в таком случае папка с исходными кодами скорее всего будет доступна по адресу, отличающемуся от &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
|                                                         &lt;br /&gt;
|-&lt;br /&gt;
|dockerhostpathseparator&lt;br /&gt;
|string&lt;br /&gt;
|Разделитель пути на хосте docker. По умолчанию &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;quot;/&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|                                                         &lt;br /&gt;
|-&lt;br /&gt;
|sariffiletemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон названия sarif-файла с предупреждениями анализатора. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|sarifFileContext]]&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;&amp;quot;{{.Context.ProjectName}}.{{.Context.BranchName}}.sarif&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры менеджера запуска IDE ====&lt;br /&gt;
&lt;br /&gt;
Конфигурация менеджера запуска IDE. На данный момент доступен только стандартный менеджер (&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;type: default&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию &lt;br /&gt;
|-&lt;br /&gt;
|manager&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация менеджера запуска IDE&lt;br /&gt;
|                                     &lt;br /&gt;
|-&lt;br /&gt;
|manager/type&lt;br /&gt;
|enum: default&lt;br /&gt;
|Тип менеджера запуска IDE&lt;br /&gt;
|default                              &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры запуска docker-контейнеров с IDE ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для настройки запуска docker-контейнеров с IDE&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию               &lt;br /&gt;
|-&lt;br /&gt;
|docker/&lt;br /&gt;
|map&lt;br /&gt;
|Настройки создания docker-контейнера с IDE&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/hostid&lt;br /&gt;
|string&lt;br /&gt;
|Идентификатор хоста docker, описанного в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/docker/hosts&amp;lt;/code&amp;gt;. Запуск docker-контейнера с IDE будет выполнен на этом хосте&lt;br /&gt;
|default                                            &lt;br /&gt;
|-&lt;br /&gt;
|docker/containernametemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон для формирования названия контейнера IDE для выбранного снимка. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|TheiaDockerContainerStartContext]]&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;&amp;quot;theia-1-46-{{.StartArgs.SnapshotID}}&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|docker/containerconfiglabels&lt;br /&gt;
|[]map&lt;br /&gt;
|Список меток docker-контейнера. Дополняет список меток в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker/container/config/labels&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
- &amp;quot;com.docker.compose.project&amp;quot;: svacer             &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры docker-образа из которого будет запущен контейнер&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/name&lt;br /&gt;
|string&lt;br /&gt;
|Название образа&lt;br /&gt;
|theia-blueprint                                    &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/tag&lt;br /&gt;
|string&lt;br /&gt;
|Тег образа&lt;br /&gt;
|1.46.0.sarif.clang                                 &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcetype&lt;br /&gt;
|enum: repository/file&lt;br /&gt;
|Тип источника для загрузки образа в docker-хост&lt;br /&gt;
* repository — будет вызван docker pull образа &amp;lt;code&amp;gt;{image/name}:{image/tag}&amp;lt;/code&amp;gt;&lt;br /&gt;
* file — будет вызван docker load с URL &amp;lt;code&amp;gt;image/sourcefileurl&amp;lt;/code&amp;gt;&lt;br /&gt;
|file                                               &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcefileurl&lt;br /&gt;
|url&lt;br /&gt;
|URL откуда будет загружен docker-образ если &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;image/sourcetype == &amp;quot;file&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
URL может содержать:&lt;br /&gt;
* путь к локальному файлу: схема &amp;lt;code&amp;gt;file://&amp;lt;/code&amp;gt;&lt;br /&gt;
* http/https-адрес: схема &amp;lt;code&amp;gt;http://&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;https://&amp;lt;/code&amp;gt;&lt;br /&gt;
|https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.tar&lt;br /&gt;
|-&lt;br /&gt;
|docker/container/&lt;br /&gt;
|map&lt;br /&gt;
|Свойства docker-контейнера&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/config.go#L70&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config/env&lt;br /&gt;
|[]string&lt;br /&gt;
|Список переменных среды, которые будут установлены в контейнере&lt;br /&gt;
|&lt;br /&gt;
- THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;     &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры хостинга контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/hostconfig.go#L379&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/autoremove&lt;br /&gt;
|bool&lt;br /&gt;
|&lt;br /&gt;
|true                                               &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/portbindings&lt;br /&gt;
|map&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&amp;quot;3000/tcp&amp;quot;:                                        &lt;br /&gt;
:- hostport: 0                                    &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/networkconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Сетевые настройки контейнера. Соответствуют структуре https://github.com/moby/moby/blob/v24.0.7/api/types/network/network.go#L104&lt;br /&gt;
|                                                   &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры проверки доступности healthcheck ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для проверки доступности IDE после запуска docker-контейнера&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck&lt;br /&gt;
|map&lt;br /&gt;
|Параметры проверки доступности IDE&lt;br /&gt;
|                                     &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyretries&lt;br /&gt;
|int&lt;br /&gt;
|Количества попыток проверки до ошибки доступности&lt;br /&gt;
|10                                   &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyperiod&lt;br /&gt;
|golang duration string&lt;br /&gt;
|Интервал проверки&lt;br /&gt;
|200ms                                &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Структуры передаваемые в поля с golang-шаблонами строк ====&lt;br /&gt;
&lt;br /&gt;
 sarifFileContext {&lt;br /&gt;
     Time    time.Time&lt;br /&gt;
 	Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
 &lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 TheiaDockerContainerStartContext {&lt;br /&gt;
 	IdeID: {&lt;br /&gt;
         IdeType  string&lt;br /&gt;
         ConfigID string&lt;br /&gt;
     },&lt;br /&gt;
 	StartArgs: {&lt;br /&gt;
         SnapshotID string&lt;br /&gt;
         UserID     string&lt;br /&gt;
         User       string&lt;br /&gt;
     },&lt;br /&gt;
 	Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
 &lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация по умолчанию ===&lt;br /&gt;
&lt;br /&gt;
Данная настройка применяется по умолчанию для запуска Theia IDE, если в конфигурационном файле svacer.cfg отсутствует раздел &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
xsvacer:&lt;br /&gt;
  webide:&lt;br /&gt;
    theia:&lt;br /&gt;
      1-46-0: &amp;amp;1-46-0&lt;br /&gt;
        disabled: true&lt;br /&gt;
        order: 0&lt;br /&gt;
        name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
        sourcesroot: ${USER_CACHE_DIR}/svacer-snapshot-sources&lt;br /&gt;
        sariffiletemplate: &amp;quot;&amp;lt;nowiki&amp;gt;{{.Context.ProjectName}}.{{.Context.BranchName}}&amp;lt;/nowiki&amp;gt;.sarif&amp;quot;&lt;br /&gt;
        manager:&lt;br /&gt;
          type: default&lt;br /&gt;
        docker:&lt;br /&gt;
          hostid: default # идентификатор используемого docker-хоста&lt;br /&gt;
          containernametemplate: &amp;quot;theia-1-46-&amp;lt;nowiki&amp;gt;{{.StartArgs.SnapshotID}}&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
          image:&lt;br /&gt;
            name: theia-blueprint&lt;br /&gt;
            tag: 1.46.0.sarif.clang&lt;br /&gt;
            sourcetype: file&lt;br /&gt;
            sourcefileurl: https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.tar&lt;br /&gt;
          containerconfiglabels:&lt;br /&gt;
            - &amp;quot;com.docker.compose.project&amp;quot;: svacer&lt;br /&gt;
          container:&lt;br /&gt;
            config:&lt;br /&gt;
              env:&lt;br /&gt;
                - THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
            hostconfig:&lt;br /&gt;
              autoremove: true&lt;br /&gt;
              portbindings:&lt;br /&gt;
                &amp;quot;3000/tcp&amp;quot;:&lt;br /&gt;
                  - hostport: 0&lt;br /&gt;
            networkconfig:&lt;br /&gt;
        healthcheck:&lt;br /&gt;
          starttoreadyretries: 10&lt;br /&gt;
          starttoreadyperiod: 200ms&lt;br /&gt;
      default:&lt;br /&gt;
        &amp;lt;&amp;lt;: *1-46-0&lt;br /&gt;
        order: 0&lt;br /&gt;
        disabled: false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
По умолчанию используется docker-хост с идентификатором &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;. Согласно настройке этого хоста, по умолчанию предполагается взаимодействие с докером через unix-сокет &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt;. Соответственно пользователь, под которым запускается Svacer, должен иметь доступ к этому сокету (https://docs.docker.com/engine/install/linux-postinstall/).&lt;br /&gt;
&lt;br /&gt;
{{Note|text=При наличии раздела &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; в конфигурационном файле svacer.cfg будут применены только настройки из этого раздела. Настройки по умолчанию будут полностью проигнорированы}}&lt;br /&gt;
&lt;br /&gt;
=== Изменение конфигурационных параметров с помощью переменных окружения ===&lt;br /&gt;
&lt;br /&gt;
Значения атрибутов конфигурации могут быть изменены с помощью переменных окружения&lt;br /&gt;
&lt;br /&gt;
 XSVACER_WEBIDE_THEIA_{id конфигурации ide}[_параметр]={значение параметра}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например, для активации rootless-хоста &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/hosts/local&amp;lt;/code&amp;gt; и переключения запуска IDE с идентификатором &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;default&amp;lt;/code&amp;gt; на этот хост можно указать такие значения переменных окружения при запуске Svacer:&lt;br /&gt;
&lt;br /&gt;
 XSVACER_DOCKER_HOSTS_LOCAL_DISABLED=false&lt;br /&gt;
 XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_HOSTID=local&lt;br /&gt;
&lt;br /&gt;
== Очистка системы: удаление артефактов функциональности ==&lt;br /&gt;
&lt;br /&gt;
В процессе использования функциональности IDE создаются следующие артефакты:&lt;br /&gt;
# Исходные файлы снимков скачиваются в корневые папки, заданные в параметре &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
# Артефакты docker:&lt;br /&gt;
#* образы и контейнеры создаются на хостах, указанных в конфигурации docker-хостов в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/hostid&amp;lt;/code&amp;gt;&lt;br /&gt;
#* названия docker-образов будут соответствовать параметрам в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/image&amp;lt;/code&amp;gt;&lt;br /&gt;
#* названия docker-контейнеров будут соответствовать параметру &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/containernametemplate&amp;lt;/code&amp;gt;&lt;br /&gt;
#* наборы меток doker-контейнеров будут содержать:&lt;br /&gt;
#*: метки, перечисленные в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/containerconfiglabels&amp;lt;/code&amp;gt;&lt;br /&gt;
#*: метки, перечисленные в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/container/config/labels&amp;lt;/code&amp;gt;&lt;br /&gt;
#*: метки с названиями &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.service.id&amp;lt;/code&amp;gt;, &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.service.type&amp;lt;/code&amp;gt;, &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.theia.start_args&amp;lt;/code&amp;gt;&lt;br /&gt;
# При использовании rootless-хоста docker будут созданы папки согласно [[Help:XSvacer:Docker#Специфичные настройки для rootless-хоста|настройкам]]&lt;br /&gt;
&lt;br /&gt;
== Рекомендации ==&lt;br /&gt;
&lt;br /&gt;
=== Предварительная загрузка docker-образа с IDE ===&lt;br /&gt;
&lt;br /&gt;
По умолчанию параметр &lt;br /&gt;
&lt;br /&gt;
 xsvacer/webide/theia/1-46-0/docker/image/sourcefileurl&lt;br /&gt;
&lt;br /&gt;
Содержит значение &lt;br /&gt;
&lt;br /&gt;
 https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.tar&lt;br /&gt;
&lt;br /&gt;
По этому адресу находится архив с docker-образом для Theia IDE.&lt;br /&gt;
&lt;br /&gt;
Если docker-образ ещё не был загружен, то загрузка начнётся при первой попытке запуска IDE. Т. к. этот процесс занимает длительное время, то запрос запуска IDE тоже будет выполняться долго. &lt;br /&gt;
&lt;br /&gt;
Для ускорения первого запуска IDE докер образ можно загрузить на хост docker вручную. Для этого необходимо:&lt;br /&gt;
&lt;br /&gt;
# Скачать файл архива&lt;br /&gt;
# Выполнить команду &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker image load -i /path/to/theia-blueprint.1.46.0.sarif.clang.tar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Информация о docker-образе Theia IDE ==&lt;br /&gt;
&lt;br /&gt;
Docker-образ, используемый по умолчанию, построен на базе [https://theia-ide.org/ Eclipse Theia IDE] версии [https://github.com/eclipse-theia/theia-blueprint/tree/v1.46.0 1.46.0].&lt;br /&gt;
&lt;br /&gt;
При этом была изменена компоновка расширений Theia. Результат выполнения &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
diff --git a/browser.Dockerfile b/browser.Dockerfile&lt;br /&gt;
index efe591e..a4ebb6a 100644&lt;br /&gt;
--- a/browser.Dockerfile&lt;br /&gt;
+++ b/browser.Dockerfile&lt;br /&gt;
@@ -42,7 +42,7 @@ RUN chmod g+rw /home &amp;amp;&amp;amp; \&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y wget apt-transport-https &amp;amp;&amp;amp; \&lt;br /&gt;
     wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | tee /usr/share/keyrings/adoptium.asc &amp;amp;&amp;amp; \&lt;br /&gt;
     echo &amp;quot;deb [signed-by=/usr/share/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main&amp;quot; | tee /etc/apt/sources.list.d/adoptium.list &amp;amp;&amp;amp; \&lt;br /&gt;
-    apt-get update &amp;amp;&amp;amp; apt-get install -y git openssh-client openssh-server bash libsecret-1-0 temurin-17-jdk maven &amp;amp;&amp;amp; \&lt;br /&gt;
+    apt-get update &amp;amp;&amp;amp; apt-get install -y git openssh-client openssh-server bash libsecret-1-0 clangd &amp;amp;&amp;amp; \&lt;br /&gt;
     apt-get purge -y wget &amp;amp;&amp;amp; \&lt;br /&gt;
     apt-get clean&lt;br /&gt;
&lt;br /&gt;
diff --git a/package.json b/package.json&lt;br /&gt;
index 9044595..9d0dcc8 100644&lt;br /&gt;
--- a/package.json&lt;br /&gt;
+++ b/package.json&lt;br /&gt;
@@ -54,10 +54,8 @@&lt;br /&gt;
   &amp;quot;theiaPluginsDir&amp;quot;: &amp;quot;plugins&amp;quot;,&lt;br /&gt;
   &amp;quot;theiaPlugins&amp;quot;: {&lt;br /&gt;
     &amp;quot;eclipse-theia.builtin-extension-pack&amp;quot;: &amp;quot;https://open-vsx.org/api/eclipse-theia/builtin-extension-pack/1.83.1/file/eclipse-theia.builtin-extension-pack-1.83.1.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;ms-vscode.js-debug&amp;quot;: &amp;quot;https://open-vsx.org/api/ms-vscode/js-debug/1.83.1/file/ms-vscode.js-debug-1.83.1.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;ms-vscode.js-debug-companion&amp;quot;: &amp;quot;https://open-vsx.org/api/ms-vscode/js-debug-companion/1.1.2/file/ms-vscode.js-debug-companion-1.1.2.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;vscjava.vscode-java-pack&amp;quot;: &amp;quot;https://open-vsx.org/api/vscjava/vscode-java-pack/0.25.11/file/vscjava.vscode-java-pack-0.25.11.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;vscjava.vscode-java-dependency&amp;quot;: &amp;quot;https://open-vsx.org/api/vscjava/vscode-java-dependency/0.21.2/file/vscjava.vscode-java-dependency-0.21.2.vsix&amp;quot;&lt;br /&gt;
+    &amp;quot;llvm-vs-code-extensions.vscode-clangd&amp;quot;: &amp;quot;https://open-vsx.org/api/llvm-vs-code-extensions/vscode-clangd/0.1.26/file/llvm-vs-code-extensions.vscode-clangd-0.1.26.vsix&amp;quot;,&lt;br /&gt;
+    &amp;quot;ms-sarifvscode.sarif-viewer&amp;quot;: &amp;quot;https://open-vsx.org/api/MS-SarifVSCode/sarif-viewer/3.4.2/file/MS-SarifVSCode.sarif-viewer-3.4.2.vsix&amp;quot;&lt;br /&gt;
   },&lt;br /&gt;
   &amp;quot;theiaPluginsExcludeIds&amp;quot;: [&lt;br /&gt;
     &amp;quot;ms-vscode.js-debug-companion&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Команда построения docker-образа: &lt;br /&gt;
 docker build -t theia-blueprint:1.46.0.sarif.clang -f browser.Dockerfile .&lt;br /&gt;
&lt;br /&gt;
Команда экспорта docker-образа:&lt;br /&gt;
 docker image save theia-blueprint:1.46.0 &amp;gt; /path/to/tar/theia-blueprint.1.46.0.docker.command.tar&lt;br /&gt;
&lt;br /&gt;
== Известные проблемы ==&lt;br /&gt;
&lt;br /&gt;
=== При открытии sarif-файла в IDE открывается пустая панель &amp;quot;SARIF Results&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Для просмотра sarif-файла, содержащего предупреждения анализатора и разметку, используется плагин [https://open-vsx.org/extension/MS-SarifVSCode/sarif-viewer SARIF Viewer]. При просмотре sarif-файла открывается webview плагина со списком предупреждений анализатора.&lt;br /&gt;
&lt;br /&gt;
В Theia IDE для открытия webview применяется [https://developer.mozilla.org/en_US/docs/Web/API/Service_Worker_API Service Worker API]. В целях обеспечения безопасности применение Service Worker API [https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#setting_up_to_play_with_service_workers требует], чтобы доступ к web-приложению осуществлялся по HTTPS, либо приложение размещалось на localhost.&lt;br /&gt;
&lt;br /&gt;
Поэтому для решения данной проблемы Svacer должен открываться по HTTPS или быть доступен по адресу &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=2054</id>
		<title>Help:XSvacer:Webide</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=2054"/>
		<updated>2024-07-15T11:52:57Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note|text=Данная функциональность входит в набор расширений XSvacer}}&lt;br /&gt;
&lt;br /&gt;
= Поддержка среды разработки Theia IDE =&lt;br /&gt;
&lt;br /&gt;
Данная функциональность даёт возможность просматривать исходный код снимка с предупреждениями анализатора во внешней IDE.&lt;br /&gt;
&lt;br /&gt;
По умолчанию запускается IDE, [[#Информация_о_docker-образе_Theia_IDE|собранная]] на основе [https://theia-ide.org/ Theia IDE].&lt;br /&gt;
&lt;br /&gt;
== Активация функциональности ==&lt;br /&gt;
Для активации функциональности необходимо указать флаг &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt; при запуске Svacer.&lt;br /&gt;
&lt;br /&gt;
При запуске функциональности Webide также будет запущена функциональность [[Help:XSvacer:Docker|docker]].&lt;br /&gt;
&lt;br /&gt;
При активации функциональности:&lt;br /&gt;
* становится доступным REST API управления IDE для просмотра исходного кода снимков проектов&lt;br /&gt;
* в пользовательском интерфейсе на вкладке &amp;quot;Информация о снимке&amp;quot; появляется кнопка &amp;quot;Открыть в IDE&amp;quot;&lt;br /&gt;
* устанавливается подключение к хосту docker, на котором будут запускаться контейнеры с экземплярами IDE&lt;br /&gt;
&lt;br /&gt;
=== Быстрый запуск функциональности с настройками по умолчанию ===&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы начать пользоваться функциональностью запуска IDE без изменения конфигурационных параметров, нужно выполнить следующие действия:&lt;br /&gt;
# Настройка доступа к docker-хосту:&lt;br /&gt;
## Запустить docker со настройками по умолчанию (dockerd должен слушать unix-сокет &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt; — https://docs.docker.com/reference/cli/dockerd/#daemon-socket-option)&lt;br /&gt;
## Проверить, что у пользователя под которым будет запускаться Svacer есть доступ к unix-сокету docker-хоста &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt; — https://docs.docker.com/engine/install/linux-postinstall&lt;br /&gt;
# Настроить права доступа у пользователей, которые смогут запускать IDE: требуются разрешения на проект/ветку &amp;quot;Просмотр маркеров&amp;quot; и &amp;quot;Экспорт разметки&amp;quot;&lt;br /&gt;
# Перезапустить Svacer с флагом &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt;&lt;br /&gt;
# ''Опционально.'' Для ускорения первого запуска IDE:&lt;br /&gt;
## Скачать [https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.tar архив с docker-образом]&lt;br /&gt;
## Загрузить docker-образ из архива на docker-хост: &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker image load -i /path/to/theia-blueprint.1.46.0.sarif.clang.tar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого у пользователей с указанными правами должна появиться кнопка &amp;quot;Открыть в IDE&amp;quot; на панели с информацией о снимке.&lt;br /&gt;
&lt;br /&gt;
{{Note}} IDE с исходным кодом снимков будут запускаться в новых вкладках браузера. Обычно все браузеры блокируют автоматическое открытие вкладки и показывают соответствующее предупреждение. &lt;br /&gt;
&lt;br /&gt;
Например, в Firefox:&lt;br /&gt;
&lt;br /&gt;
[[File:Firefox popup notification ru.png]]&lt;br /&gt;
&lt;br /&gt;
В таком случае нужно дать разрешение на открытие вкладки с IDE:&lt;br /&gt;
&lt;br /&gt;
[[File:Firefox popup notification expanded ru.png|x150px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При необходимости изменения настроек подключения к docker-хосту:&lt;br /&gt;
# Скопировать [[Help:XSvacer:Docker#Конфигурация_по_умолчанию|конфигурацию docker по умолчанию]] в раздел &amp;lt;code&amp;gt;xsvacer&amp;lt;/code&amp;gt; конфигурационного файла svacer.cfg&lt;br /&gt;
# Внести требуемые изменения в конфигурацию раздела &amp;lt;code&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При необходимости изменения настроек запуска IDE:&lt;br /&gt;
# Скопировать [[#Конфигурация_по_умолчанию|конфигурацию webide по умолчанию]] в раздел &amp;lt;code&amp;gt;xsvacer&amp;lt;/code&amp;gt; конфигурационного файла svacer.cfg&lt;br /&gt;
# Внести требуемые изменения в конфигурацию раздела &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Принцип работы ==&lt;br /&gt;
&lt;br /&gt;
Функциональность запуска IDE для просмотра исходного кода снимков становится доступной пользователю, если соблюдаются условия:&lt;br /&gt;
# Функциональность активна: при запуске Svacer указан флаг &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt;;&lt;br /&gt;
# В [[Help:XSvacer:Webide#Конфигурация|конфигурации]] функциональности &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia&amp;lt;/code&amp;gt; есть хотя бы одна активная (&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;disabled: false&amp;lt;/code&amp;gt;) конфигурация IDE&lt;br /&gt;
# У пользователя Svacer имеются разрешения &amp;quot;Просмотр маркеров&amp;quot; и &amp;quot;Экспорт разметки&amp;quot; на проект, в котором находится снимок, для которого нужно запустить IDE&lt;br /&gt;
&lt;br /&gt;
В противном случае в пользовательском интерфейсе будет отсутствовать кнопка &amp;quot;Открыть в IDE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Запуск IDE ===&lt;br /&gt;
&lt;br /&gt;
Запуск производится путём вызова http-метода &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;POST /api/snapshots/{snapshot_id}/ide&amp;lt;/code&amp;gt; с телом запроса &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;{&amp;quot;ideId&amp;quot;: &amp;quot;идентификатор IDE&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Последовательность действий, выполняемых при запуске IDE:&lt;br /&gt;
&lt;br /&gt;
# Производится проверка: была ли уже запущена указанная IDE для указанного снимка:&lt;br /&gt;
#* Если запущена: производится проверка доступности IDE (отвечает на запросы):&lt;br /&gt;
#** Если IDE доступна: действие не требуется. Процесс запуска завершается&lt;br /&gt;
#** Если IDE недоступна: продолжается процесс запуска. IDE будет перезапущена&lt;br /&gt;
# Создаётся &amp;quot;корневая папка снимка&amp;quot;, предназначенная для хранения исходного кода снимка и предупреждений анализатора с разметкой в виде sarif-файла. Название папки соответствует id снимка. Папка создаётся по пути заданному в параметре конфигурации IDE &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
# Исходный код снимка скачивается в &amp;quot;корневую папку снимка&amp;quot;&lt;br /&gt;
# Производится экспорт маркеров и разметки в виде sarif-файла в &amp;quot;корневую папку снимка&amp;quot;. Название sarif-файла формируется с помощью шаблона, заданного в параметре конфигурации IDE &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/sariffiletemplate&amp;lt;/code&amp;gt;&lt;br /&gt;
# Производится настройка и запуск docker-контейнера в соответствии с настройками &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker&amp;lt;/code&amp;gt;:&lt;br /&gt;
## Проверяется наличие на docker-хосте образа IDE, указанного в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker/image&amp;lt;/code&amp;gt;. Если docker-образ отсутствует, он будет загружен на хост&lt;br /&gt;
## Проверяется наличие на docker-хосте контейнера с IDE для снимка:&lt;br /&gt;
##* Если docker-контейнер не существует, то он будет создан и запущен&lt;br /&gt;
##* Если docker-контейнер существует и находится:&lt;br /&gt;
##** в статусе &amp;lt;code&amp;gt;running&amp;lt;/code&amp;gt; — процесс запуска IDE продолжается&lt;br /&gt;
##** в статусе &amp;lt;code&amp;gt;created&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;exited&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;paused&amp;lt;/code&amp;gt; — контейнер будет запущен&lt;br /&gt;
##** в других статусах — вернётся соответствующая ошибка и процесс запуска IDE прервётся&lt;br /&gt;
# После успешного запуска docker-контейнера осуществляется ожидание окончания запуска процесса IDE в контейнере в соответствии с настройками &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Если за отведённое время ответ от IDE получен — процесс запуска завершается&lt;br /&gt;
#* Если ответ не получен — вернётся ошибка &amp;lt;code&amp;gt;ide not ready&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При возникновении ошибки на одном из этапов запуска IDE артефакты, созданные на предыдущих этапах, останутся в системе. В дальнейшем они могут быть использованы при повторном запуске IDE, если причина возникновения ошибки была устранена.&lt;br /&gt;
&lt;br /&gt;
{{Note|type=reminder|text=Причиной возникновения ошибки &amp;quot;ide not ready&amp;quot; может стать высокая загруженность или недостаточная производительность docker-хоста, на котором запускается контейнер с IDE. В связи с этим процесс IDE внутри контейнера может запускаться дольше, чем указано в настойках &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck&amp;lt;/code&amp;gt;. В этом случае рекомендуется попробовать повторно запустить IDE через короткий промежуток времени}}&lt;br /&gt;
&lt;br /&gt;
Ещё одной причиной возникновения данной ошибки может стать сетевая недоступность docker-контейнера при подключении к удалённому docker-хосту. В таком случае рекомендуется проверить:&lt;br /&gt;
# Сетевую доступность docker-хоста&lt;br /&gt;
# Настройки фаервола на docker-хосте&lt;br /&gt;
# Настройки биндинга docker-контейнера c IDE&lt;br /&gt;
::&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker/container/hostconfig/portbindings&amp;lt;/code&amp;gt; &lt;br /&gt;
::Контейнер должен быть подключён к доступному сетевому интерфейсу&lt;br /&gt;
&lt;br /&gt;
=== Использование IDE: проксирование запросов ===&lt;br /&gt;
&lt;br /&gt;
После успешного запуска docker-контейнера IDE станут доступны ресурсы с префиксом &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Все запросы, направленные к ресурсам &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/*&amp;lt;/code&amp;gt;, будут проксироваться в соответствующий контейнер IDE.&lt;br /&gt;
&lt;br /&gt;
Например, если docker-контейнер c IDE &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;theia__default&amp;lt;/code&amp;gt; для снимка &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xxx&amp;lt;/code&amp;gt; запущен и слушает порт &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;35353&amp;lt;/code&amp;gt; на хосте &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker-host&amp;lt;/code&amp;gt;, то будет происходить проксирование:&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET http://docker-host:35353/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;POST http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;POST http://docker-host:35353/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET ws://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET ws://docker-host:35353/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для запуска IDE в окне браузера нужно указать адрес&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;http[s]://svacer-host/xvacer/webide/snapshots/{snapshot_id}/{ide_id}/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note}} Завершающий слеш обязателен!&lt;br /&gt;
&lt;br /&gt;
=== Перезапуск IDE ===&lt;br /&gt;
&lt;br /&gt;
В процессе работы Svacer следит за состоянием запущенных IDE. При попытке повторного запуска IDE проверяется её доступность: если IDE отвечает на запросы, то повторный запуск не производится и обработка запроса завершается.&lt;br /&gt;
&lt;br /&gt;
Также работоспособность IDE контролируется при использовании IDE в момент проксирования запросов в docker-контейнер: если IDE доступна, то запрос проксируется.&lt;br /&gt;
&lt;br /&gt;
Если IDE перестанет отвечать на запросы, то будет произведена попытка её перезапуска. В этом случае происходит та же последовательность действий, что и при [[Help:XSvacer:Webide#Запуск IDE|первоначальном запуске IDE]].&lt;br /&gt;
&lt;br /&gt;
Зачастую потеря связи обусловлена остановкой docker-контейнера с IDE. В таком случае docker-контейнер будет перезапущен.&lt;br /&gt;
&lt;br /&gt;
Если же недоступность IDE обусловлена другими причинами, то запрос на запуск/проксирование продолжит возвращать ошибку до устранения причин неработоспособности.&lt;br /&gt;
&lt;br /&gt;
=== Остановка IDE ===&lt;br /&gt;
&lt;br /&gt;
Запуск производится путём вызова http-метода&lt;br /&gt;
 DELETE /api/snapshots/{snapshot_id}/ide&lt;br /&gt;
с телом запроса &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;{&amp;quot;ideId&amp;quot;: &amp;quot;идентификатор IDE&amp;quot;}&amp;lt;/code&amp;gt;. В ходе обработки запроса останавливается docker-контейнер IDE.&lt;br /&gt;
&lt;br /&gt;
По умолчанию установлен параметр конфигурации &lt;br /&gt;
&lt;br /&gt;
 xsvacer/webide/theia/default/docker/container/hostconfig/autoremove: true&lt;br /&gt;
&lt;br /&gt;
Это означает, что после остановки docker-контейнер будет автоматически удалён.&lt;br /&gt;
&lt;br /&gt;
Чтобы изменить это поведение, настройка &lt;br /&gt;
 xsvacer/webide/theia/default/{id конфигурации}/container/hostconfig/autoremove&lt;br /&gt;
&lt;br /&gt;
должна быть установлена в &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; на момент запуска docker-контейнера IDE. Это можно сделать, например, установив значение переменной окружения &lt;br /&gt;
&lt;br /&gt;
 XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_CONTAINER_HOSTCONFIG_AUTOREMOVE=false&lt;br /&gt;
&lt;br /&gt;
{{Note|type=error|text=При использовании версии Svacer 9-0-0 установка &amp;lt;code&amp;gt;autoremove: false&amp;lt;/code&amp;gt; вызывает ошибку запуска. Исправлено в версии [[Svacer#Релизы|9-0-1]].'''}}&lt;br /&gt;
&lt;br /&gt;
При корректной остановке (например SIGTERM) Svacer автоматически остановит все запущенные docker-контейнеры IDE.&lt;br /&gt;
&lt;br /&gt;
=== Подключение к IDE после некорректного завершения Svacer ===&lt;br /&gt;
&lt;br /&gt;
При запуске Svacer осуществляет поиск запущенных docker-контейнеров IDE на доступных docker-хостах. При восстановлении связи с запущенными docker-контейнерами IDE и последующей корректной остановке Svacer все docker-контейнеры IDE будут остановлены.&lt;br /&gt;
&lt;br /&gt;
== REST API для работы с IDE ==&lt;br /&gt;
&lt;br /&gt;
{{Note|text=На этапе внедрения расширений XSvacer REST API может меняться. Следите за анонсами!}}&lt;br /&gt;
&lt;br /&gt;
После активации функциональности становятся доступны http-ресурсы для управления IDE:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | REST API управления IDE&lt;br /&gt;
|-&lt;br /&gt;
!Ресурс&lt;br /&gt;
!Описание                                                &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
GET /xsvacer/webide/api/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Получение списка доступных для запуска IDE.&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;order&amp;quot;: 0&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;id&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;name&amp;lt;/code&amp;gt; — название IDE&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;order&amp;lt;/code&amp;gt; — порядковый номер IDE в списке&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
GET /xsvacer/webide/api/snapshots/{snapshot_id}/ide/{ide_id}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Запрос описания экземпляра IDE, запущенного для снимка. &lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; — идентификатор снимка&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ide_id&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;id&amp;quot;: {&lt;br /&gt;
    &amp;quot;ide_id&amp;quot;: {&lt;br /&gt;
      &amp;quot;ide_type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
      &amp;quot;config_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;snapshot_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;url&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;start_args&amp;quot;: {&lt;br /&gt;
    &amp;quot;snapshot_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;user&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;user_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
POST /xsvacer/webide/api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Запуск IDE для просмотра исходных кодов снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; — идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
PUT /api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Команда управления экземпляром IDE снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; — идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;action&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;action&amp;lt;/code&amp;gt; — действие&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
'''Доступные действия:'''&lt;br /&gt;
* &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;update_markup&amp;lt;/code&amp;gt; — обновление предупреждений и разметки (sarif-файла)&lt;br /&gt;
'''Ответ:''' пустой&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
DELETE /xsvacer/webide/api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Остановка экземпляра IDE снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; — идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
'''Ответ:''' пустой&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Прокси для запросов экземпляра IDE снимка&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Формат идентификатора IDE ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;{тип ide}__{идентификатор конфигурации}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например, для default-конфигурации Theia IDE: &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;theia__default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Конфигурация ==&lt;br /&gt;
&lt;br /&gt;
Управление настройками функциональности осуществляется с помощью конфигурационного yaml-файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Раздел конфигурации для управления функциональностью — &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Раздел содержит перечисление доступных конфигураций запуска экземпляров Theia IDE &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia&amp;lt;/code&amp;gt;. При наличии нескольких активных конфигураций Theia IDE пользователь сможет выбрать какую из них использовать при запуске IDE с исходными файлами снимка.&lt;br /&gt;
&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       config1:&lt;br /&gt;
         ...&lt;br /&gt;
       config2:&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
Запуск IDE основывается на запуске docker-контейнеров, содержащих соответствующие сборки IDE. Поэтому необходимо также [[Help:XSvacer:Docker|настроить доступ к docker-хосту]] в разделе &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt;, иначе функциональность WebIDE не сможет работать корректно.&lt;br /&gt;
&lt;br /&gt;
В случае отсутствия файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; или отсутствии раздела &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; будет использоваться [[Help:XSvacer:Webide#Конфигурация_по_умолчанию_используемая_в_svacer|конфигурация по умолчанию]].&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация запуска Theia IDE ===&lt;br /&gt;
&lt;br /&gt;
{{Note|text=На этапе внедрения расширений XSvacer конфигурация функциональностей может меняться. Следите за анонсами!}}&lt;br /&gt;
&lt;br /&gt;
Конфигурации запуска Theia IDE добавляются в виде полей в разделе &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;. Название поля является идентификатором конфигурации запуска. Например, идентификатор по номеру используемой версии IDE:&lt;br /&gt;
&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       1-46-0:&lt;br /&gt;
         name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
==== Базовые параметры конфигурации запуска ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию                     &lt;br /&gt;
|-&lt;br /&gt;
|disabled&lt;br /&gt;
|bool&lt;br /&gt;
|Конфигурация запуска неактивна. Неактивная конфигурация не доступна для запуска экземпляра IDE&lt;br /&gt;
|true (переопределяется в конфигурации default)         &lt;br /&gt;
|-&lt;br /&gt;
|order&lt;br /&gt;
|int&lt;br /&gt;
|Порядковый номер в списке выбора конфигурации запуска&lt;br /&gt;
|0                                                        &lt;br /&gt;
|-&lt;br /&gt;
|name&lt;br /&gt;
|string&lt;br /&gt;
|Название конфигурации&lt;br /&gt;
|Theia blueprint web IDE (v1.46.0)                        &lt;br /&gt;
|-&lt;br /&gt;
|sourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке, содержащей исходные коды снимков на машине со Svacer&lt;br /&gt;
|${USER_CACHE_DIR}/svacer-snapshot-sources                &lt;br /&gt;
|-&lt;br /&gt;
|dockerhostsourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке, содержащей исходные коды снимков на хосте docker. Нужен при использовании удалённого docker-хоста, т. к. в таком случае папка с исходными кодами скорее всего будет доступна по адресу, отличающемуся от &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
|                                                         &lt;br /&gt;
|-&lt;br /&gt;
|dockerhostpathseparator&lt;br /&gt;
|string&lt;br /&gt;
|Разделитель пути на хосте docker. По умолчанию &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;quot;/&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|                                                         &lt;br /&gt;
|-&lt;br /&gt;
|sariffiletemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон названия sarif-файла с предупреждениями анализатора. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|sarifFileContext]]&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;&amp;quot;{{.Context.ProjectName}}.{{.Context.BranchName}}.sarif&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры менеджера запуска IDE ====&lt;br /&gt;
&lt;br /&gt;
Конфигурация менеджера запуска IDE. На данный момент доступен только стандартный менеджер (&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;type: default&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию &lt;br /&gt;
|-&lt;br /&gt;
|manager&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация менеджера запуска IDE&lt;br /&gt;
|                                     &lt;br /&gt;
|-&lt;br /&gt;
|manager/type&lt;br /&gt;
|enum: default&lt;br /&gt;
|Тип менеджера запуска IDE&lt;br /&gt;
|default                              &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры запуска docker-контейнеров с IDE ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для настройки запуска docker-контейнеров с IDE&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию               &lt;br /&gt;
|-&lt;br /&gt;
|docker/&lt;br /&gt;
|map&lt;br /&gt;
|Настройки создания docker-контейнера с IDE&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/hostid&lt;br /&gt;
|string&lt;br /&gt;
|Идентификатор хоста docker, описанного в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/docker/hosts&amp;lt;/code&amp;gt;. Запуск docker-контейнера с IDE будет выполнен на этом хосте&lt;br /&gt;
|default                                            &lt;br /&gt;
|-&lt;br /&gt;
|docker/containernametemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон для формирования названия контейнера IDE для выбранного снимка. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|TheiaDockerContainerStartContext]]&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;&amp;quot;theia-1-46-{{.StartArgs.SnapshotID}}&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|docker/containerconfiglabels&lt;br /&gt;
|[]map&lt;br /&gt;
|Список меток docker-контейнера. Дополняет список меток в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker/container/config/labels&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
- &amp;quot;com.docker.compose.project&amp;quot;: svacer             &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры docker-образа из которого будет запущен контейнер&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/name&lt;br /&gt;
|string&lt;br /&gt;
|Название образа&lt;br /&gt;
|theia-blueprint                                    &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/tag&lt;br /&gt;
|string&lt;br /&gt;
|Тег образа&lt;br /&gt;
|1.46.0.sarif.clang                                 &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcetype&lt;br /&gt;
|enum: repository/file&lt;br /&gt;
|Тип источника для загрузки образа в docker-хост&lt;br /&gt;
* repository — будет вызван docker pull образа &amp;lt;code&amp;gt;{image/name}:{image/tag}&amp;lt;/code&amp;gt;&lt;br /&gt;
* file — будет вызван docker load с URL &amp;lt;code&amp;gt;image/sourcefileurl&amp;lt;/code&amp;gt;&lt;br /&gt;
|file                                               &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcefileurl&lt;br /&gt;
|url&lt;br /&gt;
|URL откуда будет загружен docker-образ если &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;image/sourcetype == &amp;quot;file&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
URL может содержать:&lt;br /&gt;
* путь к локальному файлу: схема &amp;lt;code&amp;gt;file://&amp;lt;/code&amp;gt;&lt;br /&gt;
* http/https-адрес: схема &amp;lt;code&amp;gt;http://&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;https://&amp;lt;/code&amp;gt;&lt;br /&gt;
|https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.tar&lt;br /&gt;
|-&lt;br /&gt;
|docker/container/&lt;br /&gt;
|map&lt;br /&gt;
|Свойства docker-контейнера&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/config.go#L70&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config/env&lt;br /&gt;
|[]string&lt;br /&gt;
|Список переменных среды, которые будут установлены в контейнере&lt;br /&gt;
|&lt;br /&gt;
- THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;     &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры хостинга контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/hostconfig.go#L379&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/autoremove&lt;br /&gt;
|bool&lt;br /&gt;
|&lt;br /&gt;
|true                                               &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/portbindings&lt;br /&gt;
|map&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&amp;quot;3000/tcp&amp;quot;:                                        &lt;br /&gt;
:- hostport: 0                                    &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/networkconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Сетевые настройки контейнера. Соответствуют структуре https://github.com/moby/moby/blob/v24.0.7/api/types/network/network.go#L104&lt;br /&gt;
|                                                   &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры проверки доступности healthcheck ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для проверки доступности IDE после запуска docker-контейнера&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck&lt;br /&gt;
|map&lt;br /&gt;
|Параметры проверки доступности IDE&lt;br /&gt;
|                                     &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyretries&lt;br /&gt;
|int&lt;br /&gt;
|Количества попыток проверки до ошибки доступности&lt;br /&gt;
|10                                   &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyperiod&lt;br /&gt;
|golang duration string&lt;br /&gt;
|Интервал проверки&lt;br /&gt;
|200ms                                &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Структуры передаваемые в поля с golang-шаблонами строк ====&lt;br /&gt;
&lt;br /&gt;
 sarifFileContext {&lt;br /&gt;
     Time    time.Time&lt;br /&gt;
 	Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
 &lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 TheiaDockerContainerStartContext {&lt;br /&gt;
 	IdeID: {&lt;br /&gt;
         IdeType  string&lt;br /&gt;
         ConfigID string&lt;br /&gt;
     },&lt;br /&gt;
 	StartArgs: {&lt;br /&gt;
         SnapshotID string&lt;br /&gt;
         UserID     string&lt;br /&gt;
         User       string&lt;br /&gt;
     },&lt;br /&gt;
 	Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
 &lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация по умолчанию ===&lt;br /&gt;
&lt;br /&gt;
Данная настройка применяется по умолчанию для запуска Theia IDE, если в конфигурационном файле svacer.cfg отсутствует раздел &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
xsvacer:&lt;br /&gt;
  webide:&lt;br /&gt;
    theia:&lt;br /&gt;
      1-46-0: &amp;amp;1-46-0&lt;br /&gt;
        disabled: true&lt;br /&gt;
        order: 0&lt;br /&gt;
        name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
        sourcesroot: ${USER_CACHE_DIR}/svacer-snapshot-sources&lt;br /&gt;
        sariffiletemplate: &amp;quot;&amp;lt;nowiki&amp;gt;{{.Context.ProjectName}}.{{.Context.BranchName}}&amp;lt;/nowiki&amp;gt;.sarif&amp;quot;&lt;br /&gt;
        manager:&lt;br /&gt;
          type: default&lt;br /&gt;
        docker:&lt;br /&gt;
          hostid: default # идентификатор используемого docker-хоста&lt;br /&gt;
          containernametemplate: &amp;quot;theia-1-46-&amp;lt;nowiki&amp;gt;{{.StartArgs.SnapshotID}}&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
          image:&lt;br /&gt;
            name: theia-blueprint&lt;br /&gt;
            tag: 1.46.0.sarif.clang&lt;br /&gt;
            sourcetype: file&lt;br /&gt;
            sourcefileurl: https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.tar&lt;br /&gt;
          containerconfiglabels:&lt;br /&gt;
            - &amp;quot;com.docker.compose.project&amp;quot;: svacer&lt;br /&gt;
          container:&lt;br /&gt;
            config:&lt;br /&gt;
              env:&lt;br /&gt;
                - THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
            hostconfig:&lt;br /&gt;
              autoremove: true&lt;br /&gt;
              portbindings:&lt;br /&gt;
                &amp;quot;3000/tcp&amp;quot;:&lt;br /&gt;
                  - hostport: 0&lt;br /&gt;
            networkconfig:&lt;br /&gt;
        healthcheck:&lt;br /&gt;
          starttoreadyretries: 10&lt;br /&gt;
          starttoreadyperiod: 200ms&lt;br /&gt;
      default:&lt;br /&gt;
        &amp;lt;&amp;lt;: *1-46-0&lt;br /&gt;
        order: 0&lt;br /&gt;
        disabled: false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
По умолчанию используется docker-хост с идентификатором &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;. Согласно настройке этого хоста, по умолчанию предполагается взаимодействие с докером через unix-сокет &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt;. Соответственно пользователь, под которым запускается Svacer, должен иметь доступ к этому сокету (https://docs.docker.com/engine/install/linux-postinstall/).&lt;br /&gt;
&lt;br /&gt;
{{Note|text=При наличии раздела &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; в конфигурационном файле svacer.cfg будут применены только настройки из этого раздела. Настройки по умолчанию будут полностью проигнорированы}}&lt;br /&gt;
&lt;br /&gt;
=== Изменение конфигурационных параметров с помощью переменных окружения ===&lt;br /&gt;
&lt;br /&gt;
Значения атрибутов конфигурации могут быть изменены с помощью переменных окружения&lt;br /&gt;
&lt;br /&gt;
 XSVACER_WEBIDE_THEIA_{id конфигурации ide}[_параметр]={значение параметра}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например, для активации rootless-хоста &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/hosts/local&amp;lt;/code&amp;gt; и переключения запуска IDE с идентификатором &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;default&amp;lt;/code&amp;gt; на этот хост можно указать такие значения переменных окружения при запуске Svacer:&lt;br /&gt;
&lt;br /&gt;
 XSVACER_DOCKER_HOSTS_LOCAL_DISABLED=false&lt;br /&gt;
 XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_HOSTID=local&lt;br /&gt;
&lt;br /&gt;
== Очистка системы: удаление артефактов функциональности ==&lt;br /&gt;
&lt;br /&gt;
В процессе использования функциональности IDE создаются следующие артефакты:&lt;br /&gt;
# Исходные файлы снимков скачиваются в корневые папки, заданные в параметре &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
# Артефакты docker:&lt;br /&gt;
#* образы и контейнеры создаются на хостах, указанных в конфигурации docker-хостов в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/hostid&amp;lt;/code&amp;gt;&lt;br /&gt;
#* названия docker-образов будут соответствовать параметрам в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/image&amp;lt;/code&amp;gt;&lt;br /&gt;
#* названия docker-контейнеров будут соответствовать параметру &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/containernametemplate&amp;lt;/code&amp;gt;&lt;br /&gt;
#* наборы меток doker-контейнеров будут содержать:&lt;br /&gt;
#*: метки, перечисленные в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/containerconfiglabels&amp;lt;/code&amp;gt;&lt;br /&gt;
#*: метки, перечисленные в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/container/config/labels&amp;lt;/code&amp;gt;&lt;br /&gt;
#*: метки с названиями &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.service.id&amp;lt;/code&amp;gt;, &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.service.type&amp;lt;/code&amp;gt;, &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.theia.start_args&amp;lt;/code&amp;gt;&lt;br /&gt;
# При использовании rootless-хоста docker будут созданы папки согласно [[Help:XSvacer:Docker#Специфичные настройки для rootless-хоста|настройкам]]&lt;br /&gt;
&lt;br /&gt;
== Рекомендации ==&lt;br /&gt;
&lt;br /&gt;
=== Предварительная загрузка docker-образа с IDE ===&lt;br /&gt;
&lt;br /&gt;
По умолчанию параметр &lt;br /&gt;
&lt;br /&gt;
 xsvacer/webide/theia/1-46-0/docker/image/sourcefileurl&lt;br /&gt;
&lt;br /&gt;
Содержит значение &lt;br /&gt;
&lt;br /&gt;
 https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.tar&lt;br /&gt;
&lt;br /&gt;
По этому адресу находится архив с docker-образом для Theia IDE.&lt;br /&gt;
&lt;br /&gt;
Если docker-образ ещё не был загружен, то загрузка начнётся при первой попытке запуска IDE. Т. к. этот процесс занимает длительное время, то запрос запуска IDE тоже будет выполняться долго. &lt;br /&gt;
&lt;br /&gt;
Для ускорения первого запуска IDE докер образ можно загрузить на хост docker вручную. Для этого необходимо:&lt;br /&gt;
&lt;br /&gt;
# Скачать файл архива&lt;br /&gt;
# Выполнить команду &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker image load -i /path/to/theia-blueprint.1.46.0.sarif.clang.tar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Информация о docker-образе Theia IDE ==&lt;br /&gt;
&lt;br /&gt;
Docker-образ, используемый по умолчанию, построен на базе [https://theia-ide.org/ Eclipse Theia IDE] версии [https://github.com/eclipse-theia/theia-blueprint/tree/v1.46.0 1.46.0].&lt;br /&gt;
&lt;br /&gt;
При этом была изменена компоновка расширений Theia. Результат выполнения &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
diff --git a/browser.Dockerfile b/browser.Dockerfile&lt;br /&gt;
index efe591e..a4ebb6a 100644&lt;br /&gt;
--- a/browser.Dockerfile&lt;br /&gt;
+++ b/browser.Dockerfile&lt;br /&gt;
@@ -42,7 +42,7 @@ RUN chmod g+rw /home &amp;amp;&amp;amp; \&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y wget apt-transport-https &amp;amp;&amp;amp; \&lt;br /&gt;
     wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | tee /usr/share/keyrings/adoptium.asc &amp;amp;&amp;amp; \&lt;br /&gt;
     echo &amp;quot;deb [signed-by=/usr/share/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main&amp;quot; | tee /etc/apt/sources.list.d/adoptium.list &amp;amp;&amp;amp; \&lt;br /&gt;
-    apt-get update &amp;amp;&amp;amp; apt-get install -y git openssh-client openssh-server bash libsecret-1-0 temurin-17-jdk maven &amp;amp;&amp;amp; \&lt;br /&gt;
+    apt-get update &amp;amp;&amp;amp; apt-get install -y git openssh-client openssh-server bash libsecret-1-0 clangd &amp;amp;&amp;amp; \&lt;br /&gt;
     apt-get purge -y wget &amp;amp;&amp;amp; \&lt;br /&gt;
     apt-get clean&lt;br /&gt;
&lt;br /&gt;
diff --git a/package.json b/package.json&lt;br /&gt;
index 9044595..9d0dcc8 100644&lt;br /&gt;
--- a/package.json&lt;br /&gt;
+++ b/package.json&lt;br /&gt;
@@ -54,10 +54,8 @@&lt;br /&gt;
   &amp;quot;theiaPluginsDir&amp;quot;: &amp;quot;plugins&amp;quot;,&lt;br /&gt;
   &amp;quot;theiaPlugins&amp;quot;: {&lt;br /&gt;
     &amp;quot;eclipse-theia.builtin-extension-pack&amp;quot;: &amp;quot;https://open-vsx.org/api/eclipse-theia/builtin-extension-pack/1.83.1/file/eclipse-theia.builtin-extension-pack-1.83.1.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;ms-vscode.js-debug&amp;quot;: &amp;quot;https://open-vsx.org/api/ms-vscode/js-debug/1.83.1/file/ms-vscode.js-debug-1.83.1.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;ms-vscode.js-debug-companion&amp;quot;: &amp;quot;https://open-vsx.org/api/ms-vscode/js-debug-companion/1.1.2/file/ms-vscode.js-debug-companion-1.1.2.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;vscjava.vscode-java-pack&amp;quot;: &amp;quot;https://open-vsx.org/api/vscjava/vscode-java-pack/0.25.11/file/vscjava.vscode-java-pack-0.25.11.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;vscjava.vscode-java-dependency&amp;quot;: &amp;quot;https://open-vsx.org/api/vscjava/vscode-java-dependency/0.21.2/file/vscjava.vscode-java-dependency-0.21.2.vsix&amp;quot;&lt;br /&gt;
+    &amp;quot;llvm-vs-code-extensions.vscode-clangd&amp;quot;: &amp;quot;https://open-vsx.org/api/llvm-vs-code-extensions/vscode-clangd/0.1.26/file/llvm-vs-code-extensions.vscode-clangd-0.1.26.vsix&amp;quot;,&lt;br /&gt;
+    &amp;quot;ms-sarifvscode.sarif-viewer&amp;quot;: &amp;quot;https://open-vsx.org/api/MS-SarifVSCode/sarif-viewer/3.4.2/file/MS-SarifVSCode.sarif-viewer-3.4.2.vsix&amp;quot;&lt;br /&gt;
   },&lt;br /&gt;
   &amp;quot;theiaPluginsExcludeIds&amp;quot;: [&lt;br /&gt;
     &amp;quot;ms-vscode.js-debug-companion&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Команда построения docker-образа: &lt;br /&gt;
 docker build -t theia-blueprint:1.46.0.sarif.clang -f browser.Dockerfile .&lt;br /&gt;
&lt;br /&gt;
Команда экспорта docker-образа:&lt;br /&gt;
 docker image save theia-blueprint:1.46.0 &amp;gt; /path/to/tar/theia-blueprint.1.46.0.docker.command.tar&lt;br /&gt;
&lt;br /&gt;
== Известные проблемы ==&lt;br /&gt;
&lt;br /&gt;
=== При открытии sarif-файла в IDE открывается пустая панель &amp;quot;SARIF Results&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Для просмотра sarif-файла, содержащего предупреждения анализатора и разметку, используется плагин [https://open-vsx.org/extension/MS-SarifVSCode/sarif-viewer SARIF Viewer]. При просмотре sarif-файла открывается webview плагина со списком предупреждений анализатора.&lt;br /&gt;
&lt;br /&gt;
В Theia IDE для открытия webview применяется [https://developer.mozilla.org/en_US/docs/Web/API/Service_Worker_API Service Worker API]. В целях обеспечения безопасности применение Service Worker API [https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#setting_up_to_play_with_service_workers требует], чтобы доступ к web-приложению осуществлялся по HTTPS, либо приложение размещалось на localhost.&lt;br /&gt;
&lt;br /&gt;
Поэтому для решения данной проблемы Svacer должен открываться по HTTPS или быть доступен по адресу &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=2024</id>
		<title>Help:XSvacer:Webide</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=2024"/>
		<updated>2024-06-19T09:13:17Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: support#3391 docker image url changed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Поддержка среды разработки Theia IDE =&lt;br /&gt;
&lt;br /&gt;
 Данная функциональность входит в набор расширений XSvacer&lt;br /&gt;
&lt;br /&gt;
Данная функциональность даёт возможность просматривать исходный код снимка с предупреждениями анализатора во внешней IDE.&lt;br /&gt;
&lt;br /&gt;
По умолчанию запускается IDE, [[#Информация_о_docker-образе_Theia_IDE|собранная]] на основе [https://theia-ide.org/ Theia IDE].&lt;br /&gt;
&lt;br /&gt;
== Активация функциональности ==&lt;br /&gt;
Для активации функциональности необходимо указать флаг &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt; при запуске Svacer.&lt;br /&gt;
&lt;br /&gt;
При запуске функциональности Webide также будет запущена функциональность [[Help:XSvacer:Docker|docker]].&lt;br /&gt;
&lt;br /&gt;
При активации функциональности:&lt;br /&gt;
* становится доступным REST API управления IDE для просмотра исходного кода снимков проектов&lt;br /&gt;
* в пользовательском интерфейсе на вкладке &amp;quot;Информация о снимке&amp;quot; появляется кнопка &amp;quot;Открыть в IDE&amp;quot;&lt;br /&gt;
* устанавливается подключение к хосту docker, на котором будут запускаться контейнеры с экземплярами IDE&lt;br /&gt;
&lt;br /&gt;
=== Быстрый запуск функциональности с настройками по умолчанию ===&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы начать пользоваться функциональностью запуска IDE без изменения конфигурационных параметров, нужно выполнить следующие действия:&lt;br /&gt;
# Настройка доступа к docker-хосту:&lt;br /&gt;
## Запустить docker со настройками по умолчанию (dockerd должен слушать unix-сокет &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt; — https://docs.docker.com/reference/cli/dockerd/#daemon-socket-option)&lt;br /&gt;
## Проверить, что у пользователя под которым будет запускаться Svacer есть доступ к unix-сокету docker-хоста &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt; — https://docs.docker.com/engine/install/linux-postinstall&lt;br /&gt;
# Настроить права доступа у пользователей, которые смогут запускать IDE: требуются разрешения на проект/ветку &amp;quot;Просмотр маркеров&amp;quot; и &amp;quot;Экспорт разметки&amp;quot;&lt;br /&gt;
# Перезапустить Svacer с флагом &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt;&lt;br /&gt;
# ''Опционально.'' Для ускорения первого запуска IDE:&lt;br /&gt;
## Скачать [https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.tar архив с docker-образом]&lt;br /&gt;
## Загрузить docker-образ из архива на docker-хост: &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker image load -i /path/to/theia-blueprint.1.46.0.sarif.clang.tar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого у пользователей с указанными правами должна появиться кнопка &amp;quot;Открыть в IDE&amp;quot; на панели с информацией о снимке.&lt;br /&gt;
&lt;br /&gt;
'''Внимание!''' IDE с исходным кодом снимков будут запускаться в новых вкладках браузера. Обычно все браузеры блокируют автоматическое открытие вкладки и показывают соответствующее предупреждение. &lt;br /&gt;
&lt;br /&gt;
Например, в Firefox:&lt;br /&gt;
&lt;br /&gt;
[[File:Firefox popup notification ru.png]]&lt;br /&gt;
&lt;br /&gt;
В таком случае нужно дать разрешение на открытие вкладки с IDE:&lt;br /&gt;
&lt;br /&gt;
[[File:Firefox popup notification expanded ru.png|x150px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При необходимости изменения настроек подключения к docker-хосту:&lt;br /&gt;
# Скопировать [[Help:XSvacer:Docker#Конфигурация_по_умолчанию|конфигурацию docker по умолчанию]] в раздел &amp;lt;code&amp;gt;xsvacer&amp;lt;/code&amp;gt; конфигурационного файла svacer.cfg&lt;br /&gt;
# Внести требуемые изменения в конфигурацию раздела &amp;lt;code&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При необходимости изменения настроек запуска IDE:&lt;br /&gt;
# Скопировать [[#Конфигурация_по_умолчанию|конфигурацию webide по умолчанию]] в раздел &amp;lt;code&amp;gt;xsvacer&amp;lt;/code&amp;gt; конфигурационного файла svacer.cfg&lt;br /&gt;
# Внести требуемые изменения в конфигурацию раздела &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Принцип работы ==&lt;br /&gt;
&lt;br /&gt;
Функциональность запуска IDE для просмотра исходного кода снимков становится доступной пользователю, если соблюдаются условия:&lt;br /&gt;
# Функциональность активна: при запуске Svacer указан флаг &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt;;&lt;br /&gt;
# В [[Help:XSvacer:Webide#Конфигурация|конфигурации]] функциональности &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia&amp;lt;/code&amp;gt; есть хотя бы одна активная (&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;disabled: false&amp;lt;/code&amp;gt;) конфигурация IDE&lt;br /&gt;
# У пользователя Svacer имеются разрешения &amp;quot;Просмотр маркеров&amp;quot; и &amp;quot;Экспорт разметки&amp;quot; на проект, в котором находится снимок, для которого нужно запустить IDE&lt;br /&gt;
&lt;br /&gt;
В противном случае в пользовательском интерфейсе будет отсутствовать кнопка &amp;quot;Открыть в IDE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Запуск IDE ===&lt;br /&gt;
&lt;br /&gt;
Запуск производится путём вызова http-метода &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;POST /api/snapshots/{snapshot_id}/ide&amp;lt;/code&amp;gt; с телом запроса &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;{&amp;quot;ideId&amp;quot;: &amp;quot;идентификатор IDE&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Последовательность действий, выполняемых при запуске IDE:&lt;br /&gt;
&lt;br /&gt;
# Производится проверка: была ли уже запущена указанная IDE для указанного снимка:&lt;br /&gt;
#* Если запущена: производится проверка доступности IDE (отвечает на запросы):&lt;br /&gt;
#** Если IDE доступна: действие не требуется. Процесс запуска завершается&lt;br /&gt;
#** Если IDE недоступна: продолжается процесс запуска. IDE будет перезапущена&lt;br /&gt;
# Создаётся &amp;quot;корневая папка снимка&amp;quot;, предназначенная для хранения исходного кода снимка и предупреждений анализатора с разметкой в виде sarif-файла. Название папки соответствует id снимка. Папка создаётся по пути заданному в параметре конфигурации IDE &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
# Исходный код снимка скачивается в &amp;quot;корневую папку снимка&amp;quot;&lt;br /&gt;
# Производится экспорт маркеров и разметки в виде sarif-файла в &amp;quot;корневую папку снимка&amp;quot;. Название sarif-файла формируется с помощью шаблона, заданного в параметре конфигурации IDE &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/sariffiletemplate&amp;lt;/code&amp;gt;&lt;br /&gt;
# Производится настройка и запуск docker-контейнера в соответствии с настройками &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker&amp;lt;/code&amp;gt;:&lt;br /&gt;
## Проверяется наличие на docker-хосте образа IDE, указанного в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker/image&amp;lt;/code&amp;gt;. Если docker-образ отсутствует, он будет загружен на хост&lt;br /&gt;
## Проверяется наличие на docker-хосте контейнера с IDE для снимка:&lt;br /&gt;
##* Если docker-контейнер не существует, то он будет создан и запущен&lt;br /&gt;
##* Если docker-контейнер существует и находится:&lt;br /&gt;
##** в статусе &amp;lt;code&amp;gt;running&amp;lt;/code&amp;gt; — процесс запуска IDE продолжается&lt;br /&gt;
##** в статусе &amp;lt;code&amp;gt;created&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;exited&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;paused&amp;lt;/code&amp;gt; — контейнер будет запущен&lt;br /&gt;
##** в других статусах — вернётся соответствующая ошибка и процесс запуска IDE прервётся&lt;br /&gt;
# После успешного запуска docker-контейнера осуществляется ожидание окончания запуска процесса IDE в контейнере в соответствии с настройками &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Если за отведённое время ответ от IDE получен — процесс запуска завершается&lt;br /&gt;
#* Если ответ не получен — вернётся ошибка &amp;lt;code&amp;gt;ide not ready&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При возникновении ошибки на одном из этапов запуска IDE артефакты, созданные на предыдущих этапах, останутся в системе. В дальнейшем они могут быть использованы при повторном запуске IDE, если причина возникновения ошибки была устранена.&lt;br /&gt;
&lt;br /&gt;
Причиной возникновения ошибки &amp;quot;ide not ready&amp;quot; может стать высокая загруженность или недостаточная производительность docker-хоста, на котором запускается контейнер с IDE. В связи с этим процесс IDE внутри контейнера может запускаться дольше, чем указано в настойках &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck&amp;lt;/code&amp;gt;. В этом случае рекомендуется попробовать повторно запустить IDE через короткий промежуток времени.&lt;br /&gt;
&lt;br /&gt;
Ещё одной причиной возникновения данной ошибки может стать сетевая недоступность docker-контейнера при подключении к удалённому docker-хосту. В таком случае рекомендуется проверить:&lt;br /&gt;
# Сетевую доступность docker-хоста&lt;br /&gt;
# Настройки фаервола на docker-хосте&lt;br /&gt;
# Настройки биндинга docker-контейнера c IDE&lt;br /&gt;
::&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker/container/hostconfig/portbindings&amp;lt;/code&amp;gt; &lt;br /&gt;
::Контейнер должен быть подключён к доступному сетевому интерфейсу&lt;br /&gt;
&lt;br /&gt;
=== Использование IDE: проксирование запросов ===&lt;br /&gt;
&lt;br /&gt;
После успешного запуска docker-контейнера IDE станут доступны ресурсы с префиксом &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Все запросы, направленные к ресурсам &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/*&amp;lt;/code&amp;gt;, будут проксироваться в соответствующий контейнер IDE.&lt;br /&gt;
&lt;br /&gt;
Например, если docker-контейнер c IDE &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;theia__default&amp;lt;/code&amp;gt; для снимка &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xxx&amp;lt;/code&amp;gt; запущен и слушает порт &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;35353&amp;lt;/code&amp;gt; на хосте &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker-host&amp;lt;/code&amp;gt;, то будет происходить проксирование:&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET http://docker-host:35353/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;POST http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;POST http://docker-host:35353/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET ws://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET ws://docker-host:35353/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для запуска IDE в окне браузера нужно указать адрес&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;http[s]://svacer-host/xvacer/webide/snapshots/{snapshot_id}/{ide_id}/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Завершающий слеш обязателен!'''&lt;br /&gt;
&lt;br /&gt;
=== Перезапуск IDE ===&lt;br /&gt;
&lt;br /&gt;
В процессе работы Svacer следит за состоянием запущенных IDE. При попытке повторного запуска IDE проверяется её доступность: если IDE отвечает на запросы, то повторный запуск не производится и обработка запроса завершается.&lt;br /&gt;
&lt;br /&gt;
Также работоспособность IDE контролируется при использовании IDE в момент проксирования запросов в docker-контейнер: если IDE доступна, то запрос проксируется.&lt;br /&gt;
&lt;br /&gt;
Если IDE перестанет отвечать на запросы, то будет произведена попытка её перезапуска. В этом случае происходит та же последовательность действий, что и при [[Help:XSvacer:Webide#Запуск IDE|первоначальном запуске IDE]].&lt;br /&gt;
&lt;br /&gt;
Зачастую потеря связи обусловлена остановкой docker-контейнера с IDE. В таком случае docker-контейнер будет перезапущен.&lt;br /&gt;
&lt;br /&gt;
Если же недоступность IDE обусловлена другими причинами, то запрос на запуск/проксирование продолжит возвращать ошибку до устранения причин неработоспособности.&lt;br /&gt;
&lt;br /&gt;
=== Остановка IDE ===&lt;br /&gt;
&lt;br /&gt;
Запуск производится путём вызова http-метода&lt;br /&gt;
 DELETE /api/snapshots/{snapshot_id}/ide&lt;br /&gt;
с телом запроса &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;{&amp;quot;ideId&amp;quot;: &amp;quot;идентификатор IDE&amp;quot;}&amp;lt;/code&amp;gt;. В ходе обработки запроса останавливается docker-контейнер IDE.&lt;br /&gt;
&lt;br /&gt;
По умолчанию установлен параметр конфигурации &lt;br /&gt;
&lt;br /&gt;
 xsvacer/webide/theia/default/docker/container/hostconfig/autoremove: true&lt;br /&gt;
&lt;br /&gt;
Это означает, что после остановки docker-контейнер будет автоматически удалён.&lt;br /&gt;
&lt;br /&gt;
Чтобы изменить это поведение, настройка &lt;br /&gt;
 xsvacer/webide/theia/default/{id конфигурации}/container/hostconfig/autoremove&lt;br /&gt;
&lt;br /&gt;
должна быть установлена в &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; на момент запуска docker-контейнера IDE. Это можно сделать, например, установив значение переменной окружения &lt;br /&gt;
&lt;br /&gt;
 XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_CONTAINER_HOSTCONFIG_AUTOREMOVE=false&lt;br /&gt;
&lt;br /&gt;
'''Сейчас установка &amp;lt;code&amp;gt;autoremove: false&amp;lt;/code&amp;gt; вызывает ошибку запуска Svacer. Не используйте данную настройку до исправления.'''&lt;br /&gt;
&lt;br /&gt;
При корректной остановке (например SIGTERM) Svacer автоматически остановит все запущенные docker-контейнеры IDE.&lt;br /&gt;
&lt;br /&gt;
=== Подключение к IDE после некорректного завершения Svacer ===&lt;br /&gt;
&lt;br /&gt;
При запуске Svacer осуществляет поиск запущенных docker-контейнеров IDE на доступных docker-хостах. При восстановлении связи с запущенными docker-контейнерами IDE и последующей корректной остановке Svacer все docker-контейнеры IDE будут остановлены.&lt;br /&gt;
&lt;br /&gt;
== REST API для работы с IDE ==&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' На этапе внедрения расширений XSvacer REST API может меняться. Следите за анонсами!&lt;br /&gt;
&lt;br /&gt;
После активации функциональности становятся доступны http-ресурсы для управления IDE:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | REST API управления IDE&lt;br /&gt;
|-&lt;br /&gt;
!Ресурс&lt;br /&gt;
!Описание                                                &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
GET /xsvacer/webide/api/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Получение списка доступных для запуска IDE.&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;order&amp;quot;: 0&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;id&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;name&amp;lt;/code&amp;gt; — название IDE&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;order&amp;lt;/code&amp;gt; — порядковый номер IDE в списке&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
GET /xsvacer/webide/api/snapshots/{snapshot_id}/ide/{ide_id}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Запрос описания экземпляра IDE, запущенного для снимка. &lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; — идентификатор снимка&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ide_id&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;id&amp;quot;: {&lt;br /&gt;
    &amp;quot;ide_id&amp;quot;: {&lt;br /&gt;
      &amp;quot;ide_type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
      &amp;quot;config_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;snapshot_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;url&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;start_args&amp;quot;: {&lt;br /&gt;
    &amp;quot;snapshot_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;user&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;user_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
POST /xsvacer/webide/api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Запуск IDE для просмотра исходных кодов снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; — идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
PUT /api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Команда управления экземпляром IDE снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; — идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;action&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;action&amp;lt;/code&amp;gt; — действие&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
'''Доступные действия:'''&lt;br /&gt;
* &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;update_markup&amp;lt;/code&amp;gt; — обновление предупреждений и разметки (sarif-файла)&lt;br /&gt;
'''Ответ:''' пустой&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
DELETE /xsvacer/webide/api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Остановка экземпляра IDE снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; — идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; — идентификатор IDE&lt;br /&gt;
'''Ответ:''' пустой&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Прокси для запросов экземпляра IDE снимка&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Формат идентификатора IDE ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;{тип ide}__{идентификатор конфигурации}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например, для default-конфигурации Theia IDE: &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;theia__default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Конфигурация ==&lt;br /&gt;
&lt;br /&gt;
Управление настройками функциональности осуществляется с помощью конфигурационного yaml-файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Раздел конфигурации для управления функциональностью — &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Раздел содержит перечисление доступных конфигураций запуска экземпляров Theia IDE &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia&amp;lt;/code&amp;gt;. При наличии нескольких активных конфигураций Theia IDE пользователь сможет выбрать какую из них использовать при запуске IDE с исходными файлами снимка.&lt;br /&gt;
&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       config1:&lt;br /&gt;
         ...&lt;br /&gt;
       config2:&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
Запуск IDE основывается на запуске docker-контейнеров, содержащих соответствующие сборки IDE. Поэтому необходимо также [[Help:XSvacer:Docker|настроить доступ к docker-хосту]] в разделе &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt;, иначе функциональность WebIDE не сможет работать корректно.&lt;br /&gt;
&lt;br /&gt;
В случае отсутствия файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; или отсутствии раздела &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; будет использоваться [[Help:XSvacer:Webide#Конфигурация_по_умолчанию_используемая_в_svacer|конфигурация по умолчанию]].&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация запуска Theia IDE ===&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' На этапе внедрения расширений XSvacer конфигурация функциональностей может меняться. Следите за анонсами!&lt;br /&gt;
&lt;br /&gt;
Конфигурации запуска Theia IDE добавляются в виде полей в разделе &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;. Название поля является идентификатором конфигурации запуска. Например, идентификатор по номеру используемой версии IDE:&lt;br /&gt;
&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       1-46-0:&lt;br /&gt;
         name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
==== Базовые параметры конфигурации запуска ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию                     &lt;br /&gt;
|-&lt;br /&gt;
|disabled&lt;br /&gt;
|bool&lt;br /&gt;
|Конфигурация запуска неактивна. Неактивная конфигурация не доступна для запуска экземпляра IDE&lt;br /&gt;
|true (переопределяется в конфигурации default)         &lt;br /&gt;
|-&lt;br /&gt;
|order&lt;br /&gt;
|int&lt;br /&gt;
|Порядковый номер в списке выбора конфигурации запуска&lt;br /&gt;
|0                                                        &lt;br /&gt;
|-&lt;br /&gt;
|name&lt;br /&gt;
|string&lt;br /&gt;
|Название конфигурации&lt;br /&gt;
|Theia blueprint web IDE (v1.46.0)                        &lt;br /&gt;
|-&lt;br /&gt;
|sourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке, содержащей исходные коды снимков на машине со Svacer&lt;br /&gt;
|${USER_CACHE_DIR}/svacer-snapshot-sources                &lt;br /&gt;
|-&lt;br /&gt;
|dockerhostsourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке, содержащей исходные коды снимков на хосте docker. Нужен при использовании удалённого docker-хоста, т. к. в таком случае папка с исходными кодами скорее всего будет доступна по адресу, отличающемуся от &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
|                                                         &lt;br /&gt;
|-&lt;br /&gt;
|dockerhostpathseparator&lt;br /&gt;
|string&lt;br /&gt;
|Разделитель пути на хосте docker. По умолчанию &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;quot;/&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|                                                         &lt;br /&gt;
|-&lt;br /&gt;
|sariffiletemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон названия sarif-файла с предупреждениями анализатора. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|sarifFileContext]]&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;&amp;quot;{{.Context.ProjectName}}.{{.Context.BranchName}}.sarif&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры менеджера запуска IDE ====&lt;br /&gt;
&lt;br /&gt;
Конфигурация менеджера запуска IDE. На данный момент доступен только стандартный менеджер (&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;type: default&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию &lt;br /&gt;
|-&lt;br /&gt;
|manager&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация менеджера запуска IDE&lt;br /&gt;
|                                     &lt;br /&gt;
|-&lt;br /&gt;
|manager/type&lt;br /&gt;
|enum: default&lt;br /&gt;
|Тип менеджера запуска IDE&lt;br /&gt;
|default                              &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры запуска docker-контейнеров с IDE ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для настройки запуска docker-контейнеров с IDE&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию               &lt;br /&gt;
|-&lt;br /&gt;
|docker/&lt;br /&gt;
|map&lt;br /&gt;
|Настройки создания docker-контейнера с IDE&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/hostid&lt;br /&gt;
|string&lt;br /&gt;
|Идентификатор хоста docker, описанного в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/docker/hosts&amp;lt;/code&amp;gt;. Запуск docker-контейнера с IDE будет выполнен на этом хосте&lt;br /&gt;
|default                                            &lt;br /&gt;
|-&lt;br /&gt;
|docker/containernametemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон для формирования названия контейнера IDE для выбранного снимка. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|TheiaDockerContainerStartContext]]&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;&amp;quot;theia-1-46-{{.StartArgs.SnapshotID}}&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|docker/containerconfiglabels&lt;br /&gt;
|[]map&lt;br /&gt;
|Список меток docker-контейнера. Дополняет список меток в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker/container/config/labels&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
- &amp;quot;com.docker.compose.project&amp;quot;: svacer             &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры docker-образа из которого будет запущен контейнер&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/name&lt;br /&gt;
|string&lt;br /&gt;
|Название образа&lt;br /&gt;
|theia-blueprint                                    &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/tag&lt;br /&gt;
|string&lt;br /&gt;
|Тег образа&lt;br /&gt;
|1.46.0.sarif.clang                                 &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcetype&lt;br /&gt;
|enum: repository/file&lt;br /&gt;
|Тип источника для загрузки образа в docker-хост&lt;br /&gt;
* repository — будет вызван docker pull образа &amp;lt;code&amp;gt;{image/name}:{image/tag}&amp;lt;/code&amp;gt;&lt;br /&gt;
* file — будет вызван docker load с URL &amp;lt;code&amp;gt;image/sourcefileurl&amp;lt;/code&amp;gt;&lt;br /&gt;
|file                                               &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcefileurl&lt;br /&gt;
|url&lt;br /&gt;
|URL откуда будет загружен docker-образ если &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;image/sourcetype == &amp;quot;file&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
URL может содержать:&lt;br /&gt;
* путь к локальному файлу: схема &amp;lt;code&amp;gt;file://&amp;lt;/code&amp;gt;&lt;br /&gt;
* http/https-адрес: схема &amp;lt;code&amp;gt;http://&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;https://&amp;lt;/code&amp;gt;&lt;br /&gt;
|https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.tar&lt;br /&gt;
|-&lt;br /&gt;
|docker/container/&lt;br /&gt;
|map&lt;br /&gt;
|Свойства docker-контейнера&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/config.go#L70&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config/env&lt;br /&gt;
|[]string&lt;br /&gt;
|Список переменных среды, которые будут установлены в контейнере&lt;br /&gt;
|&lt;br /&gt;
- THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;     &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры хостинга контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/hostconfig.go#L379&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/autoremove&lt;br /&gt;
|bool&lt;br /&gt;
|&lt;br /&gt;
|true                                               &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/portbindings&lt;br /&gt;
|map&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&amp;quot;3000/tcp&amp;quot;:                                        &lt;br /&gt;
:- hostport: 0                                    &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/networkconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Сетевые настройки контейнера. Соответствуют структуре https://github.com/moby/moby/blob/v24.0.7/api/types/network/network.go#L104&lt;br /&gt;
|                                                   &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры проверки доступности healthcheck ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для проверки доступности IDE после запуска docker-контейнера&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck&lt;br /&gt;
|map&lt;br /&gt;
|Параметры проверки доступности IDE&lt;br /&gt;
|                                     &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyretries&lt;br /&gt;
|int&lt;br /&gt;
|Количества попыток проверки до ошибки доступности&lt;br /&gt;
|10                                   &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyperiod&lt;br /&gt;
|golang duration string&lt;br /&gt;
|Интервал проверки&lt;br /&gt;
|200ms                                &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Структуры передаваемые в поля с golang-шаблонами строк ====&lt;br /&gt;
&lt;br /&gt;
 sarifFileContext {&lt;br /&gt;
     Time    time.Time&lt;br /&gt;
 	Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
 &lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 TheiaDockerContainerStartContext {&lt;br /&gt;
 	IdeID: {&lt;br /&gt;
         IdeType  string&lt;br /&gt;
         ConfigID string&lt;br /&gt;
     },&lt;br /&gt;
 	StartArgs: {&lt;br /&gt;
         SnapshotID string&lt;br /&gt;
         UserID     string&lt;br /&gt;
         User       string&lt;br /&gt;
     },&lt;br /&gt;
 	Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
 &lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация по умолчанию ===&lt;br /&gt;
&lt;br /&gt;
Данная настройка применяется по умолчанию для запуска Theia IDE, если в конфигурационном файле svacer.cfg отсутствует раздел &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
xsvacer:&lt;br /&gt;
  webide:&lt;br /&gt;
    theia:&lt;br /&gt;
      1-46-0: &amp;amp;1-46-0&lt;br /&gt;
        disabled: true&lt;br /&gt;
        order: 0&lt;br /&gt;
        name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
        sourcesroot: ${USER_CACHE_DIR}/svacer-snapshot-sources&lt;br /&gt;
        sariffiletemplate: &amp;quot;&amp;lt;nowiki&amp;gt;{{.Context.ProjectName}}.{{.Context.BranchName}}&amp;lt;/nowiki&amp;gt;.sarif&amp;quot;&lt;br /&gt;
        manager:&lt;br /&gt;
          type: default&lt;br /&gt;
        docker:&lt;br /&gt;
          hostid: default # идентификатор используемого docker-хоста&lt;br /&gt;
          containernametemplate: &amp;quot;theia-1-46-&amp;lt;nowiki&amp;gt;{{.StartArgs.SnapshotID}}&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
          image:&lt;br /&gt;
            name: theia-blueprint&lt;br /&gt;
            tag: 1.46.0.sarif.clang&lt;br /&gt;
            sourcetype: file&lt;br /&gt;
            sourcefileurl: https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.tar&lt;br /&gt;
          containerconfiglabels:&lt;br /&gt;
            - &amp;quot;com.docker.compose.project&amp;quot;: svacer&lt;br /&gt;
          container:&lt;br /&gt;
            config:&lt;br /&gt;
              env:&lt;br /&gt;
                - THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
            hostconfig:&lt;br /&gt;
              autoremove: true&lt;br /&gt;
              portbindings:&lt;br /&gt;
                &amp;quot;3000/tcp&amp;quot;:&lt;br /&gt;
                  - hostport: 0&lt;br /&gt;
            networkconfig:&lt;br /&gt;
        healthcheck:&lt;br /&gt;
          starttoreadyretries: 10&lt;br /&gt;
          starttoreadyperiod: 200ms&lt;br /&gt;
      default:&lt;br /&gt;
        &amp;lt;&amp;lt;: *1-46-0&lt;br /&gt;
        order: 0&lt;br /&gt;
        disabled: false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
По умолчанию используется docker-хост с идентификатором &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;. Согласно настройке этого хоста, по умолчанию предполагается взаимодействие с докером через unix-сокет &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt;. Соответственно пользователь, под которым запускается Svacer, должен иметь доступ к этому сокету (https://docs.docker.com/engine/install/linux-postinstall/).&lt;br /&gt;
&lt;br /&gt;
При наличии раздела &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; в конфигурационном файле svacer.cfg будут применены только настройки из этого раздела. Настройки по умолчанию будут полностью проигнорированы.&lt;br /&gt;
&lt;br /&gt;
=== Изменение конфигурационных параметров с помощью переменных окружения ===&lt;br /&gt;
&lt;br /&gt;
Значения атрибутов конфигурации могут быть изменены с помощью переменных окружения&lt;br /&gt;
&lt;br /&gt;
 XSVACER_WEBIDE_THEIA_{id конфигурации ide}[_параметр]={значение параметра}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например, для активации rootless-хоста &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/hosts/local&amp;lt;/code&amp;gt; и переключения запуска IDE с идентификатором &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;default&amp;lt;/code&amp;gt; на этот хост можно указать такие значения переменных окружения при запуске Svacer:&lt;br /&gt;
&lt;br /&gt;
 XSVACER_DOCKER_HOSTS_LOCAL_DISABLED=false&lt;br /&gt;
 XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_HOSTID=local&lt;br /&gt;
&lt;br /&gt;
== Очистка системы: удаление артефактов функциональности ==&lt;br /&gt;
&lt;br /&gt;
В процессе использования функциональности IDE создаются следующие артефакты:&lt;br /&gt;
# Исходные файлы снимков скачиваются в корневые папки, заданные в параметре &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
# Артефакты docker:&lt;br /&gt;
#* образы и контейнеры создаются на хостах, указанных в конфигурации docker-хостов в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/hostid&amp;lt;/code&amp;gt;&lt;br /&gt;
#* названия docker-образов будут соответствовать параметрам в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/image&amp;lt;/code&amp;gt;&lt;br /&gt;
#* названия docker-контейнеров будут соответствовать параметру &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/containernametemplate&amp;lt;/code&amp;gt;&lt;br /&gt;
#* наборы меток doker-контейнеров будут содержать:&lt;br /&gt;
#*: метки, перечисленные в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/containerconfiglabels&amp;lt;/code&amp;gt;&lt;br /&gt;
#*: метки, перечисленные в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/container/config/labels&amp;lt;/code&amp;gt;&lt;br /&gt;
#*: метки с названиями &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.service.id&amp;lt;/code&amp;gt;, &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.service.type&amp;lt;/code&amp;gt;, &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.theia.start_args&amp;lt;/code&amp;gt;&lt;br /&gt;
# При использовании rootless-хоста docker будут созданы папки согласно [[Help:XSvacer:Docker#Специфичные настройки для rootless-хоста|настройкам]]&lt;br /&gt;
&lt;br /&gt;
== Рекомендации ==&lt;br /&gt;
&lt;br /&gt;
=== Предварительная загрузка docker-образа с IDE ===&lt;br /&gt;
&lt;br /&gt;
По умолчанию параметр &lt;br /&gt;
&lt;br /&gt;
 xsvacer/webide/theia/1-46-0/docker/image/sourcefileurl&lt;br /&gt;
&lt;br /&gt;
Содержит значение &lt;br /&gt;
&lt;br /&gt;
 https://svacer.ispras.ru/docker/images/theia-blueprint.1.46.0.sarif.clang.tar&lt;br /&gt;
&lt;br /&gt;
По этому адресу находится архив с docker-образом для Theia IDE.&lt;br /&gt;
&lt;br /&gt;
Если docker-образ ещё не был загружен, то загрузка начнётся при первой попытке запуска IDE. Т. к. этот процесс занимает длительное время, то запрос запуска IDE тоже будет выполняться долго. &lt;br /&gt;
&lt;br /&gt;
Для ускорения первого запуска IDE докер образ можно загрузить на хост docker вручную. Для этого необходимо:&lt;br /&gt;
&lt;br /&gt;
# Скачать файл архива&lt;br /&gt;
# Выполнить команду &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker image load -i /path/to/theia-blueprint.1.46.0.sarif.clang.tar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Информация о docker-образе Theia IDE ==&lt;br /&gt;
&lt;br /&gt;
Docker-образ, используемый по умолчанию, построен на базе [https://theia-ide.org/ Eclipse Theia IDE] версии [https://github.com/eclipse-theia/theia-blueprint/tree/v1.46.0 1.46.0].&lt;br /&gt;
&lt;br /&gt;
При этом была изменена компоновка расширений Theia. Результат выполнения &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
diff --git a/browser.Dockerfile b/browser.Dockerfile&lt;br /&gt;
index efe591e..a4ebb6a 100644&lt;br /&gt;
--- a/browser.Dockerfile&lt;br /&gt;
+++ b/browser.Dockerfile&lt;br /&gt;
@@ -42,7 +42,7 @@ RUN chmod g+rw /home &amp;amp;&amp;amp; \&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y wget apt-transport-https &amp;amp;&amp;amp; \&lt;br /&gt;
     wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | tee /usr/share/keyrings/adoptium.asc &amp;amp;&amp;amp; \&lt;br /&gt;
     echo &amp;quot;deb [signed-by=/usr/share/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main&amp;quot; | tee /etc/apt/sources.list.d/adoptium.list &amp;amp;&amp;amp; \&lt;br /&gt;
-    apt-get update &amp;amp;&amp;amp; apt-get install -y git openssh-client openssh-server bash libsecret-1-0 temurin-17-jdk maven &amp;amp;&amp;amp; \&lt;br /&gt;
+    apt-get update &amp;amp;&amp;amp; apt-get install -y git openssh-client openssh-server bash libsecret-1-0 clangd &amp;amp;&amp;amp; \&lt;br /&gt;
     apt-get purge -y wget &amp;amp;&amp;amp; \&lt;br /&gt;
     apt-get clean&lt;br /&gt;
&lt;br /&gt;
diff --git a/package.json b/package.json&lt;br /&gt;
index 9044595..9d0dcc8 100644&lt;br /&gt;
--- a/package.json&lt;br /&gt;
+++ b/package.json&lt;br /&gt;
@@ -54,10 +54,8 @@&lt;br /&gt;
   &amp;quot;theiaPluginsDir&amp;quot;: &amp;quot;plugins&amp;quot;,&lt;br /&gt;
   &amp;quot;theiaPlugins&amp;quot;: {&lt;br /&gt;
     &amp;quot;eclipse-theia.builtin-extension-pack&amp;quot;: &amp;quot;https://open-vsx.org/api/eclipse-theia/builtin-extension-pack/1.83.1/file/eclipse-theia.builtin-extension-pack-1.83.1.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;ms-vscode.js-debug&amp;quot;: &amp;quot;https://open-vsx.org/api/ms-vscode/js-debug/1.83.1/file/ms-vscode.js-debug-1.83.1.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;ms-vscode.js-debug-companion&amp;quot;: &amp;quot;https://open-vsx.org/api/ms-vscode/js-debug-companion/1.1.2/file/ms-vscode.js-debug-companion-1.1.2.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;vscjava.vscode-java-pack&amp;quot;: &amp;quot;https://open-vsx.org/api/vscjava/vscode-java-pack/0.25.11/file/vscjava.vscode-java-pack-0.25.11.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;vscjava.vscode-java-dependency&amp;quot;: &amp;quot;https://open-vsx.org/api/vscjava/vscode-java-dependency/0.21.2/file/vscjava.vscode-java-dependency-0.21.2.vsix&amp;quot;&lt;br /&gt;
+    &amp;quot;llvm-vs-code-extensions.vscode-clangd&amp;quot;: &amp;quot;https://open-vsx.org/api/llvm-vs-code-extensions/vscode-clangd/0.1.26/file/llvm-vs-code-extensions.vscode-clangd-0.1.26.vsix&amp;quot;,&lt;br /&gt;
+    &amp;quot;ms-sarifvscode.sarif-viewer&amp;quot;: &amp;quot;https://open-vsx.org/api/MS-SarifVSCode/sarif-viewer/3.4.2/file/MS-SarifVSCode.sarif-viewer-3.4.2.vsix&amp;quot;&lt;br /&gt;
   },&lt;br /&gt;
   &amp;quot;theiaPluginsExcludeIds&amp;quot;: [&lt;br /&gt;
     &amp;quot;ms-vscode.js-debug-companion&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Команда построения docker-образа: &lt;br /&gt;
 docker build -t theia-blueprint:1.46.0.sarif.clang -f browser.Dockerfile .&lt;br /&gt;
&lt;br /&gt;
Команда экспорта docker-образа:&lt;br /&gt;
 docker image save theia-blueprint:1.46.0 &amp;gt; /path/to/tar/theia-blueprint.1.46.0.docker.command.tar&lt;br /&gt;
&lt;br /&gt;
== Известные проблемы ==&lt;br /&gt;
&lt;br /&gt;
=== При открытии sarif-файла в IDE открывается пустая панель &amp;quot;SARIF Results&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Для просмотра sarif-файла, содержащего предупреждения анализатора и разметку, используется плагин [https://open-vsx.org/extension/MS-SarifVSCode/sarif-viewer SARIF Viewer]. При просмотре sarif-файла открывается webview плагина со списком предупреждений анализатора.&lt;br /&gt;
&lt;br /&gt;
В Theia IDE для открытия webview применяется [https://developer.mozilla.org/en_US/docs/Web/API/Service_Worker_API Service Worker API]. В целях обеспечения безопасности применение Service Worker API [https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#setting_up_to_play_with_service_workers требует], чтобы доступ к web-приложению осуществлялся по HTTPS, либо приложение размещалось на localhost.&lt;br /&gt;
&lt;br /&gt;
Поэтому для решения данной проблемы Svacer должен открываться по HTTPS или быть доступен по адресу &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=1976</id>
		<title>Svacer</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=1976"/>
		<updated>2024-06-10T12:43:46Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: Добавлена ссылка на документацию XSvacer&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Svacer — сервер для хранения и обработки результатов статического анализа. Поддерживает импорт результатов анализа из [https://svace.ispras.ru Svace] напрямую и из прочих анализаторов через формат [[Help:Sarif|SARIF]].&lt;br /&gt;
&lt;br /&gt;
=== Техническая документация ===&lt;br /&gt;
Version 9.0.0&lt;br /&gt;
# [[Help:Introduction|Введение]]&lt;br /&gt;
# [[Help:Installation|Установка и обновление]]&lt;br /&gt;
# [[Help:Import from Svace|Импорт из Svace]]&lt;br /&gt;
# [[Help:Backup|Резервное копирование]]&lt;br /&gt;
# [[Help:UI manual|Использование веб-интерфейса]]&lt;br /&gt;
# [[Help:Public API|Public REST API]]&lt;br /&gt;
# [[Help:CLI|CLI]]&lt;br /&gt;
# [[LDAP configuration|LDAP]]&lt;br /&gt;
# [[OIDC|OpenID Connect]]&lt;br /&gt;
# [[Help:Sarif|SARIF]]&lt;br /&gt;
# [[Help:Statistics|Статистика]]&lt;br /&gt;
# [[Help:Match|Механизмы сопоставления предупреждений и переноса разметки]]&lt;br /&gt;
# [[Help:XSvacer|XSvacer - расширение функциональности svacer]]&lt;br /&gt;
&lt;br /&gt;
=== Релизы ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! version !! zip !! linux !! windows !! deb/rpm !! doc&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-0/svacer-9-0-0.zip svacer-9-0-0.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-0/svacer_9.0-0_amd64.deb svacer_9.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-0/svacer-9.0-0.x86_64.rpm svacer-9.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 9-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 9-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#9-0-0|Upgrade notes]]&lt;br /&gt;
|-&lt;br /&gt;
| 8.0.1 &lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-1/svacer-8-0-1.zip svacer-8-0-1.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-1/svacer svacer]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-1/svacer.exe svacer.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-1/svacer_8.0-1_amd64.deb svacer_8.0-1_amd64.deb]&amp;lt;br /&amp;gt; [https://svacer.ispras.ru/releases/svacer-8-0-1/svacer-8.0-1.x86_64.rpm svacer-8.0-1.x86_64.rpm]&amp;lt;br /&amp;gt; [https://svacer.ispras.ru/releases/svacer-8-0-1/svacer-8.0.1.msi svacer-8.0.1.msi]&lt;br /&gt;
| [[Changelog#Release 8-0-1|Changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| 8.0.0 &lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-0/svacer-8-0-0.zip svacer-8-0-0.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-0/svacer svacer]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-0/svacer.exe svacer.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-8-0-0/svacer_8.0-0_amd64.deb svacer_8.0-0_amd64.deb]&amp;lt;br /&amp;gt; [https://svacer.ispras.ru/releases/svacer-8-0-0/svacer-8.0-0.x86_64.rpm svacer-8.0-0.x86_64.rpm]&amp;lt;br /&amp;gt; [https://svacer.ispras.ru/releases/svacer-8-0-0/svacer-8.0.0.msi svacer-8.0.0.msi]&lt;br /&gt;
| [[Changelog#Release 8-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 8-0-0|Release notes]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Также доступны в виде docker-образа на [https://hub.docker.com/r/ispras/svacer docker hub] и как пакеты в [[Help:Installation#.deb|apt-репозитории]].&lt;br /&gt;
&lt;br /&gt;
===== Предыдущие релизы =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| [[Changelog#Release 7-0-1|7.0.1]]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-release-7-0-1/svacer_release-7-0-1.zip zip]([https://svacer.ispras.ru/releases/svacer-release-7-0-1/svacer_release-7-0-1.zip.md5 md5]); [https://svacer.ispras.ru/releases/svacer-release-7-0-1/svacer_7.0-1_amd64.deb deb]([https://svacer.ispras.ru/releases/svacer-release-7-0-1/svacer_7.0-1_amd64.deb.md5 md5]); [https://svacer.ispras.ru/releases/svacer-release-7-0-1/svacer-7.0-1.x86_64.rpm rpm]([https://svacer.ispras.ru/releases/svacer-release-7-0-1/svacer-7.0-1.x86_64.rpm.md5 md5]); [https://svacer.ispras.ru/releases/svacer-release-7-0-1/svacer-7.0.1.msi msi]([https://svacer.ispras.ru/releases/svacer-release-7-0-1/svacer-7.0.1.msi.md5 md5])&lt;br /&gt;
|-&lt;br /&gt;
| [[Changelog#Release 7-0-0|7.0.0]]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-release-7-0-0/svacer_release-7-0-0.zip zip]([https://svacer.ispras.ru/releases/svacer-release-7-0-0/svacer_release-7-0-0.zip.md5 md5]); [https://svacer.ispras.ru/releases/svacer-release-7-0-0/svacer_7.0-0_amd64.deb deb]([https://svacer.ispras.ru/releases/svacer-release-7-0-0/svacer_7.0-0_amd64.deb.md5 md5]); [https://svacer.ispras.ru/releases/svacer-release-7-0-0/svacer-7.0-0.x86_64.rpm rpm]([https://svacer.ispras.ru/releases/svacer-release-7-0-0/svacer-7.0-0.x86_64.rpm.md5 md5]); [https://svacer.ispras.ru/releases/svacer-release-7-0-0/svacer-7.0.0.msi msi]([https://svacer.ispras.ru/releases/svacer-release-7-0-0/svacer-7.0.0.msi.md5 md5])&lt;br /&gt;
|-&lt;br /&gt;
| [[Changelog#Release 6-0-3|6.0.3]]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-release-6-0-3/svacer_release-6-0-3.zip zip]([https://svacer.ispras.ru/releases/svacer-release-6-0-3/svacer_release-6-0-3.zip.md5 md5]); [https://svacer.ispras.ru/releases/svacer-release-6-0-3/svacer_6.0-3_amd64.deb deb]([https://svacer.ispras.ru/releases/svacer-release-6-0-3/svacer_6.0-3_amd64.deb.md5 md5]); [https://svacer.ispras.ru/releases/svacer-release-6-0-3/svacer-6.0-3.x86_64.rpm rpm]([https://svacer.ispras.ru/releases/svacer-release-6-0-3/svacer-6.0-3.x86_64.rpm.md5 md5])&lt;br /&gt;
|-&lt;br /&gt;
| [[Changelog#Release 6-0-2|6.0.2]]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-release-6-0-2/svacer_release-6-0-2.zip zip]([https://svacer.ispras.ru/releases/svacer-release-6-0-2/svacer_release-6-0-2.zip.md5 md5]); [https://svacer.ispras.ru/releases/svacer-release-6-0-2/svacer_6.0-2_amd64.deb deb]([https://svacer.ispras.ru/releases/svacer-release-6-0-2/svacer_6.0-2_amd64.deb.md5 md5]); [https://svacer.ispras.ru/releases/svacer-release-6-0-2/svacer-6.0-2.x86_64.rpm rpm]([https://svacer.ispras.ru/releases/svacer-release-6-0-2/svacer-6.0-2.x86_64.rpm.md5 md5])&lt;br /&gt;
|-&lt;br /&gt;
| [[Changelog#Release 6-0-1|6.0.1]]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-release-6-0-1/svacer_release-6-0-1.zip zip]([https://svacer.ispras.ru/releases/svacer-release-6-0-1/svacer_release-6-0-1.zip.md5 md5]); [https://svacer.ispras.ru/releases/svacer-release-6-0-1/svacer_6.0-1_amd64.deb deb]([https://svacer.ispras.ru/releases/svacer-release-6-0-1/svacer_6.0-1_amd64.deb.md5 md5]); [https://svacer.ispras.ru/releases/svacer-release-6-0-1/svacer-6.0-1.x86_64.rpm rpm]([https://svacer.ispras.ru/releases/svacer-release-6-0-1/svacer-6.0-1.x86_64.rpm.md5 md5])&lt;br /&gt;
|-&lt;br /&gt;
| [[Changelog#Release 6-0-0|6.0.0]]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-release-6-0-0/svacer_release-6-0-0.zip zip]([https://svacer.ispras.ru/releases/svacer-release-6-0-0/svacer_release-6-0-0.zip.md5 md5]); [https://svacer.ispras.ru/releases/svacer-release-6-0-0/svacer_6.0-0_amd64.deb deb]([https://svacer.ispras.ru/releases/svacer-release-6-0-0/svacer_6.0-0_amd64.deb.md5 md5]); [https://svacer.ispras.ru/releases/svacer-release-6-0-0/svacer-6.0-0.x86_64.rpm rpm]([https://svacer.ispras.ru/releases/svacer-release-6-0-0/svacer-6.0-0.x86_64.rpm.md5 md5])&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Более старые релизы — в [https://nextcloud.ispras.ru/index.php/s/x4r4cMJAMr5RZtd?path=%2F nextcloud]&lt;br /&gt;
&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
* [https://gitlab.ispras.ru/svace/svace-support/-/wikis/home Документация на статический анализатор Svace]&lt;br /&gt;
* [[Help:Introduction#Системные требования|Системные требования]]&lt;br /&gt;
* [[Примеры использования хуков#Создание кейсов в системах отслеживания ошибок|Создание из Svacer кейсов в Gitlab, Jira, Redmine]]&lt;br /&gt;
* Public REST API &lt;br /&gt;
:* [[Help:Public API#Примеры использования public REST API|Примеры использования]]&lt;br /&gt;
:* [https://gitlab.ispras.ru/svacer-public Репозитории с примерами на Python и Go]  &lt;br /&gt;
:* [https://svacer-demo.ispras.ru/api/public/swagger/ Спецификация OpenAPI]&lt;br /&gt;
* [https://t.me/+6pvgZ0oveNVhOTc6 Группа технической поддержки в Telegram]&lt;br /&gt;
&lt;br /&gt;
=== Демо ===&lt;br /&gt;
Попробуйте Svacer в действии на демо-сервере: https://svacer-demo.ispras.ru&lt;br /&gt;
* admin / svacer_admin_31415 — логин / пароль администратора&lt;br /&gt;
* user / user — логин / пароль пользователя&lt;br /&gt;
&lt;br /&gt;
Можете делать там что угодно, каждую ночь сервер восстанавливается до изначального состояния.&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=1975</id>
		<title>Help:XSvacer:Webide</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=1975"/>
		<updated>2024-06-10T10:32:59Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Поддержка среды разработки Theia IDE =&lt;br /&gt;
 '''Примечание:''' данная функциональность входит в набор расширений XSvacer.&lt;br /&gt;
&lt;br /&gt;
Данная функциональность даёт возможность просматривать исходный код снимка с предупреждениями анализатора во внешней IDE.&lt;br /&gt;
&lt;br /&gt;
По умолчанию запускается IDE, [[#Информация_о_docker-образе_Theia_IDE|собранная]] на основе [https://theia-ide.org/ Theia IDE].&lt;br /&gt;
&lt;br /&gt;
== Активация функциональности ==&lt;br /&gt;
Для активации функциональности необходимо указать флаг &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt; при запуске svacer'а.&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' при запуске функциональности &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;webide&amp;lt;/code&amp;gt; также будет запущена функциональность &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;[[Help:XSvacer:Docker|docker]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При активации функциональности:&lt;br /&gt;
* становится доступным REST API управления IDE для просмотра исходного кода снимков проектов;&lt;br /&gt;
* в пользовательском интерфейсе на вкладке &amp;quot;Информация о снимке&amp;quot; появляется кнопка &amp;quot;Открыть в IDE&amp;quot;;&lt;br /&gt;
* устанавливается подключение к хосту docker'а, на котором будут запускаться контейнеры с экземплярами IDE.&lt;br /&gt;
&lt;br /&gt;
=== Быстрый запуск функциональности с настройками по умолчанию ===&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы начать пользоваться функциональностью запуска IDE без изменения конфигурационных параметров, нужно выполнить следующие действия:&lt;br /&gt;
# Настройка доступа к docker-хосту:&lt;br /&gt;
## Запустить docker со настройками по умолчанию (dockerd должен слушать unix-сокет &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt; - https://docs.docker.com/reference/cli/dockerd/#daemon-socket-option);&lt;br /&gt;
## Проверить, что у пользователя под которым будет запускаться svacer есть доступ к unix-сокету docker-хоста &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt; - https://docs.docker.com/engine/install/linux-postinstall/;&lt;br /&gt;
# Настроить права доступа у пользователей, которые смогут запускать IDE: требуются разрешения на проект/ветку &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;quot;Просмотр маркеров&amp;quot;&amp;lt;/code&amp;gt; и &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;quot;Экспорт разметки&amp;quot;&amp;lt;/code&amp;gt;;&lt;br /&gt;
# Перезапустить svacer с флагом &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt;.&lt;br /&gt;
# ''Опционально.'' Для ускорения первого запуска IDE:&lt;br /&gt;
## Скачать архив с docker-образом: https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar;&lt;br /&gt;
## Загрузить docker-образ из архива на docker-хост: &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker image load -i /path/to/theia-blueprint.1.46.0.sarif.clang.tar&amp;lt;/code&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
После этого у пользователей с указанными правами должна появиться кнопка &amp;quot;Открыть в IDE&amp;quot; на панели с информацией о снимке.&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' IDE с исходным подом снимков будут запускаться в новых вкладках браузера.&lt;br /&gt;
 При этом зачастую все браузеры блокируют автоматическое открытие вкладки и показывают соответствующее предупреждение. Например, в firefox:&lt;br /&gt;
 [[File:Firefox popup notification ru.png|x25px]]&lt;br /&gt;
 В таком случае нужно дать разрешение на открытие вкладки с IDE:&lt;br /&gt;
 [[File:Firefox popup notification expanded ru.png|x106px]]&lt;br /&gt;
&lt;br /&gt;
При необходимости изменения настроек подключения к docker-хосту:&lt;br /&gt;
# скопировать [[Help:XSvacer:Docker#Конфигурация_по_умолчанию|конфигурацию docker по умолчанию]] в раздел &amp;lt;code&amp;gt;xsvacer&amp;lt;/code&amp;gt; конфигурационного файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;;&lt;br /&gt;
# внести требуемые изменения в конфигурацию раздела &amp;lt;code&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При необходимости изменения настроек запуска IDE:&lt;br /&gt;
# скопировать [[#Конфигурация_по_умолчанию|конфигурацию webide по умолчанию]] в раздел &amp;lt;code&amp;gt;xsvacer&amp;lt;/code&amp;gt; конфигурационного файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;;&lt;br /&gt;
# внести требуемые изменения в конфигурацию раздела &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Принцип работы ==&lt;br /&gt;
&lt;br /&gt;
Функциональность запуска IDE для просмотра исходного кода снимков становится доступной пользователю, если соблюдаются условия:&lt;br /&gt;
# Функциональность активна: при запуске svacer'а указан флаг &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt;;&lt;br /&gt;
# В конфигурации функциональности &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;[[Help:XSvacer:Webide#Конфигурация|xsvacer/webide/theia]]&amp;lt;/code&amp;gt; есть хотя бы одна активная (&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;disabled: false&amp;lt;/code&amp;gt;) конфигурация IDE;&lt;br /&gt;
# У пользователя svacer имеются разрешения &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;quot;Просмотр маркеров&amp;quot;&amp;lt;/code&amp;gt; и &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;quot;Экспорт разметки&amp;quot;&amp;lt;/code&amp;gt; на проект, в котором находится снимок, для которого нужно запустить IDE.&lt;br /&gt;
&lt;br /&gt;
В противном случае в пользовательском интерфейсе будет отсутствовать кнопка &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;quot;Открыть в IDE&amp;quot;&amp;lt;/code&amp;gt; (&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;quot;Open in IDE&amp;quot;&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Запуск IDE ===&lt;br /&gt;
&lt;br /&gt;
Запуск производится путём вызова http-метода &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;POST /api/snapshots/{snapshot_id}/ide&amp;lt;/code&amp;gt; с телом запроса &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;{&amp;quot;ideId&amp;quot;: &amp;quot;идентификатор IDE&amp;quot;}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последовательность действий, выполняемых при запуске IDE:&lt;br /&gt;
&lt;br /&gt;
# Производится проверка: была ли уже запущена указанная IDE для указанного снимка:&lt;br /&gt;
#* Если запущена: производится проверка доступности IDE (отвечает на запросы):&lt;br /&gt;
#** Если IDE доступна: действие не требуется. Процесс запуска завершается;&lt;br /&gt;
#** Если IDE недоступна: продолжается процесс запуска. IDE будет ''перезапущена'';&lt;br /&gt;
# Создаётся &amp;quot;корневая папка снимка&amp;quot;, предназначенная для хранения исходного кода снимка и предупреждений анализатора с разметкой в виде sarif-файла. Название папки соответствует id снимка. Папка создаётся по пути заданному в параметре конфигурации IDE &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/sourcesroot&amp;lt;/code&amp;gt;;&lt;br /&gt;
# Исходный код снимка скачивается в &amp;quot;корневую папку снимка&amp;quot;;&lt;br /&gt;
# Производится экспорт маркеров и разметки в виде sarif-файла в &amp;quot;корневую папку снимка&amp;quot;. Название sarif-файла формируется с помощью шаблона, заданного в параметре конфигурации IDE &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/sariffiletemplate&amp;lt;/code&amp;gt;;&lt;br /&gt;
# Производится настройка и запуск docker-контейнера в соответствии с настройками &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker&amp;lt;/code&amp;gt;:&lt;br /&gt;
## Проверяется наличие на docker-хосте образа IDE, указанного в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker/image&amp;lt;/code&amp;gt;:&lt;br /&gt;
##* Если docker-образ отсутствует - он будет загружен на хост;&lt;br /&gt;
## Проверяется наличие на docker-хосте контейнера с IDE для снимка:&lt;br /&gt;
##* Если docker-контейнер не существует, то он будет создан и запущен;&lt;br /&gt;
##* Если docker-контейнер существует и находится:&lt;br /&gt;
##** в статусе &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;running&amp;lt;/code&amp;gt; - процесс запуска IDE продолжается;&lt;br /&gt;
##** в статусе &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;created&amp;lt;/code&amp;gt;,&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;exited&amp;lt;/code&amp;gt; или &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;paused&amp;lt;/code&amp;gt; - контейнер будет запущен;&lt;br /&gt;
##** в других статусах - вернётся соответствующая ошибка и процесс запуска IDE прервётся;&lt;br /&gt;
# После успешного запуска docker-контейнера осуществляется ожидание окончания запуска процесса IDE в контейнере в соответствии с настройками &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck&amp;lt;/code&amp;gt;:&lt;br /&gt;
#* Если за отведённое время ответ от IDE получен - процесс запуска завершается;&lt;br /&gt;
#* Если ответ не получен - вернётся ошибка &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ide not ready&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' При возникновении ошибки на одном из этапов запуска IDE артефакты, созданные на предыдущих этапах, останутся в системе. В дальнейшем они могут быть использованы при повторном запуске IDE, если причина возникновения ошибки была устранена.&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' Причиной возникновения ошибки &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ide not ready&amp;lt;/code&amp;gt; может стать высокая загруженность или недостаточная производительность docker-хоста, на котором запускается контейнер с IDE. В связи с этим процесс IDE внутри контейнера может запускаться дольше, чем указано в настойках &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck&amp;lt;/code&amp;gt;.&lt;br /&gt;
 В случае возникновения ошибки &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ide not ready&amp;lt;/code&amp;gt; рекомендуется попробовать повторно запустить IDE через короткий промежуток времени.&lt;br /&gt;
 Ещё одной причиной возникновения данной ошибки может стать сетевая недоступность docker-контейнера при подключении к удалённому docker-хосту. В таком случае рекомендуется:&lt;br /&gt;
 1. проверить сетевую доступность docker-хоста;&lt;br /&gt;
 2. проверить настройки биндинга docker-контейнера c IDE - &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker/container/hostconfig/portbindings&amp;lt;/code&amp;gt;. Контейнер должен быть подключён к доступному сетевому интерфейсу;&lt;br /&gt;
 3. проверить настройки фаервола на docker-хосте.&lt;br /&gt;
&lt;br /&gt;
=== Использование IDE: проксирование запросов ===&lt;br /&gt;
&lt;br /&gt;
После успешного запуска docker-контейнера IDE станут доступны ресурсы с &amp;quot;префиксом&amp;quot; &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Все запросы, направленные к ресурсам &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/*&amp;lt;/code&amp;gt;, будут проксироваться в соответствующий контейнер IDE.&lt;br /&gt;
&lt;br /&gt;
Например, если docker-контейнер c IDE &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;theia__default&amp;lt;/code&amp;gt; для снимка &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xxx&amp;lt;/code&amp;gt; запущен и &amp;quot;слушает&amp;quot; порт &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;35353&amp;lt;/code&amp;gt; на хосте &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker-host&amp;lt;/code&amp;gt;, то будет происходить проксирование:&lt;br /&gt;
: &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET http://docker-host:35353/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;POST http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET http://docker-host:35353/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET ws://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET ws://docker-host:35353/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' для запуска IDE в окне браузера нужно указать адрес &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;http[s]://svacer-host/xvacer/webide/snapshots/{snapshot_id}/{ide_id}/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. '''Завершающий слеш обязателен!'''&lt;br /&gt;
&lt;br /&gt;
=== Перезапуск IDE ===&lt;br /&gt;
&lt;br /&gt;
В процессе работы svacer следит за состоянием запущенных IDE. При попытке повторного запуска IDE проверяется её доступность: если IDE отвечает на запросы, то повторный запуск не производится и обработка запроса завершается.&lt;br /&gt;
&lt;br /&gt;
Также работоспособность IDE контролируется при использовании IDE в момент проксирования запросов в docker-контейнер: если IDE доступна, то запрос проксируется.&lt;br /&gt;
&lt;br /&gt;
Если IDE перестанет отвечать на запросы, то будет произведена попытка её перезапуска. В этом случае происходит та же последовательность действий, что и при [[Help:XSvacer:Webide#Запуск IDE|первоначальном запуске IDE]].&lt;br /&gt;
&lt;br /&gt;
Зачастую потеря связи обусловлена остановкой docker-контейнера с IDE. В таком случае docker-контейнер будет перезапущен.&lt;br /&gt;
&lt;br /&gt;
Если же недоступность IDE обусловлена другими причинами, то запрос на запуск/проксирование продолжит возвращать ошибку до устранения причин неработоспособности.&lt;br /&gt;
&lt;br /&gt;
=== Остановка IDE ===&lt;br /&gt;
&lt;br /&gt;
Запуск производится путём вызова http-метода &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;DELETE /api/snapshots/{snapshot_id}/ide&amp;lt;/code&amp;gt; с телом запроса &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;{&amp;quot;ideId&amp;quot;: &amp;quot;идентификатор IDE&amp;quot;}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В ходе обработки запроса останавливается docker-контейнер IDE.&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' По умолчанию установлен параметр конфигурации &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/default/docker/container/hostconfig/autoremove: true&amp;lt;/code&amp;gt;. Это означает, что после остановки docker-контейнер будет автоматически удалён.&lt;br /&gt;
 Чтобы изменить это поведение, настройка &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/default/{id конфигурации}/container/hostconfig/autoremove&amp;lt;/code&amp;gt; должна быть установлена в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;false&amp;lt;/code&amp;gt; '''на момент запуска docker-контейнера IDE'''. Это можно сделать, например, установив значение переменной окружения &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_CONTAINER_HOSTCONFIG_AUTOREMOVE=false&amp;lt;/code&amp;gt;.&lt;br /&gt;
 '''!!!Сейчас установка &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;autoremove: false&amp;lt;/code&amp;gt; вызывает ошибку запуска svacer!!! Не используйте данную настройку до исправления.'''&lt;br /&gt;
&lt;br /&gt;
 '''Примечание!''' При корректной остановке (например &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;SIGTERM&amp;lt;/code&amp;gt;) svacer автоматически остановит все запущенные docker-контейнеры IDE&lt;br /&gt;
&lt;br /&gt;
=== Подключение к IDE после некорректного завершениея svacer ===&lt;br /&gt;
&lt;br /&gt;
При запуске svacer осуществляет поиск запущенных docker-контейнеров IDE на доступных docker-хостах.&lt;br /&gt;
&lt;br /&gt;
При восстановлении связи с запущенными docker-контейнерами IDE и последующей корректной остановке svacer'а все docker-контейнеры IDE будут остановлены.&lt;br /&gt;
&lt;br /&gt;
== REST API для работы с IDE ==&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' На этапе внедрения расширений XSvacer REST API может меняться. Следите за анонсами!&lt;br /&gt;
&lt;br /&gt;
После активации функциональности становятся доступны http-ресурсы для управления IDE снимками:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | REST API управления IDE&lt;br /&gt;
|-&lt;br /&gt;
!Ресурс&lt;br /&gt;
!Описание                                                &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
GET /xsvacer/webide/api/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Получение списка доступных для запуска IDE.&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;order&amp;quot;: 0&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;id&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;name&amp;lt;/code&amp;gt; - название IDE&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;order&amp;lt;/code&amp;gt; - порядковый номер IDE в списке&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
GET /xsvacer/webide/api/snapshots/{snapshot_id}/ide/{ide_id}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Запрос описания экземпляра IDE, запущенного для снимка. &lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ide_id&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;id&amp;quot;: {&lt;br /&gt;
    &amp;quot;ide_id&amp;quot;: {&lt;br /&gt;
      &amp;quot;ide_type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
      &amp;quot;config_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;snapshot_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;url&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;start_args&amp;quot;: {&lt;br /&gt;
    &amp;quot;snapshot_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;user&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;user_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
POST /xsvacer/webide/api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Запуск IDE для просмотра исходных кодов снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
PUT /api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Команда управления экземпляром IDE снимка&lt;br /&gt;
Доступные действия:&lt;br /&gt;
* &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;update_markup&amp;lt;/code&amp;gt; - обновление предупреждений и разметки (sarif-файла)&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;action&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;action&amp;lt;/code&amp;gt; - действие&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:''' пустой&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
DELETE /xsvacer/webide/api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Остановка экземпляра IDE снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:''' пустой&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Прокси для запросов экземпляра IDE снимка&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Формат идентификатора IDE ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;{тип ide}__{идентификатор конфигурации}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например, для &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;default&amp;lt;/code&amp;gt;-конфигурации Theia IDE: &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;theia__default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Конфигурация ==&lt;br /&gt;
&lt;br /&gt;
Управление настройками функциональности осуществляется с помощью конфигурационного yaml-файла &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Раздел конфигурации для управления функциональностью - &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Раздел содержит перечисление доступных конфигураций запуска экземпляров Theia IDE &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia&amp;lt;/code&amp;gt;. При наличии нескольких активных конфигураций Theia IDE пользователь сможет выбрать какую из них использовать при запуске IDE с исходными файлами снимка.&lt;br /&gt;
&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       config1:&lt;br /&gt;
         ...&lt;br /&gt;
       config2:&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' Запуск IDE основывается на запуске docker-контейнеров, содержащих соответствующие сборки IDE. Поэтому помимо настройки функциональности в разделе &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; необходимо также настроить доступ к docker-хосту в разделе &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt; ([[Help:XSvacer:Docker]]). В противном случае функциональность webide не сможет работать корректно.&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' в случае отсутствия файла &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; или отсутствии раздела &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; будет использоваться [[Help:XSvacer:Webide#Конфигурация_по_умолчанию_используемая_в_svacer|конфигурация по умолчанию]]&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация запуска Theia IDE ===&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' На этапе внедрения расширений XSvacer конфигурация функциональностей может меняться. Следите за анонсами!&lt;br /&gt;
&lt;br /&gt;
Конфигурации запуска Theia IDE добавляются в виде полей в разделе &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;. Название поля является идентификатором конфигурации запуска. Например, идентификатор по номеру используемой версии IDE:&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       1-46-0:&lt;br /&gt;
         name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
==== Базовые параметры конфигурации запуска ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию                     &lt;br /&gt;
|-&lt;br /&gt;
|disabled&lt;br /&gt;
|bool&lt;br /&gt;
|Конфигурация запуска неактивна. Неактивная конфигурация не доступна для запуска экземпляра IDE&lt;br /&gt;
|true (переопределяется в конфигурации &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;default&amp;lt;/code&amp;gt;)         &lt;br /&gt;
|-&lt;br /&gt;
|order&lt;br /&gt;
|int&lt;br /&gt;
|Порядковый номер в списке выбора конфигурации запуска&lt;br /&gt;
|0                                                        &lt;br /&gt;
|-&lt;br /&gt;
|name&lt;br /&gt;
|string&lt;br /&gt;
|Название конфигурации&lt;br /&gt;
|Theia blueprint web IDE (v1.46.0)                        &lt;br /&gt;
|-&lt;br /&gt;
|sourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке, содержащей исходные коды снимков на машине со svacer'ом&lt;br /&gt;
|${USER_CACHE_DIR}/svacer-snapshot-sources                &lt;br /&gt;
|-&lt;br /&gt;
|dockerhostsourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке, содержащей исходные коды снимков на хосте docker'а. Нужен при использовании удалённого docker-хоста, т.к. в таком случае папка с исходными кодами скорее всего будет доступна по адресу, отличающемуся от &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
|                                                         &lt;br /&gt;
|-&lt;br /&gt;
|dockerhostpathseparator&lt;br /&gt;
|string&lt;br /&gt;
|Разделитель пути на хосте docker'а. По умолчанию &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;quot;/&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
|                                                         &lt;br /&gt;
|-&lt;br /&gt;
|sariffiletemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон названия sarif-файла с предупреждениями анализатора. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|sarifFileContext]]&lt;br /&gt;
|&amp;quot;&amp;lt;nowiki&amp;gt;{{.Context.ProjectName}}.{{.Context.BranchName}}&amp;lt;/nowiki&amp;gt;.sarif&amp;quot; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры менеджера запуска IDE ====&lt;br /&gt;
&lt;br /&gt;
Конфигурация менеджера запуска IDE. На данный момент доступен только &amp;quot;стандартный&amp;quot; менеджер (&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;type: default&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию &lt;br /&gt;
|-&lt;br /&gt;
|manager&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация менеджера запуска IDE&lt;br /&gt;
|                                     &lt;br /&gt;
|-&lt;br /&gt;
|manager/type&lt;br /&gt;
|enum: default&lt;br /&gt;
|Тип менеджера запуска IDE&lt;br /&gt;
|default                              &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры запуска docker-контейнеров с IDE ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для настройки запуска docker-контейнеров с IDE&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию               &lt;br /&gt;
|-&lt;br /&gt;
|docker/&lt;br /&gt;
|map&lt;br /&gt;
|Настройки создания docker-контейнера с IDE&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/hostid&lt;br /&gt;
|string&lt;br /&gt;
|Идентификатор хоста docker'а, описанного в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/docker/hosts&amp;lt;/code&amp;gt;. Запуск docker-контейнера с IDE будет выполнен на этом хосте&lt;br /&gt;
|default                                            &lt;br /&gt;
|-&lt;br /&gt;
|docker/containernametemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон для формирования названия контейнера IDE для выбранного снимка. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|TheiaDockerContainerStartContext]]&lt;br /&gt;
|&amp;quot;theia-1-46-&amp;lt;nowiki&amp;gt;{{.StartArgs.SnapshotID}}&amp;lt;/nowiki&amp;gt;&amp;quot;             &lt;br /&gt;
|-&lt;br /&gt;
|docker/containerconfiglabels&lt;br /&gt;
|[]map&lt;br /&gt;
|Список &amp;quot;меток&amp;quot; docker-контейнера. Дополняет список меток в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker/container/config/labels&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
 - &amp;quot;com.docker.compose.project&amp;quot;: svacer             &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры docker-образа из которого будет запущен контейнер&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/name&lt;br /&gt;
|string&lt;br /&gt;
|Название образа&lt;br /&gt;
|theia-blueprint                                    &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/tag&lt;br /&gt;
|string&lt;br /&gt;
|Тег образа&lt;br /&gt;
|1.46.0.sarif.clang                                 &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcetype&lt;br /&gt;
|enum: repository/file&lt;br /&gt;
|Тип источника для загрузки образа в docker-хост.&lt;br /&gt;
* &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;repository&amp;lt;/code&amp;gt; - будет вызван &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker pull&amp;lt;/code&amp;gt; образа &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;{image/name}:{image/tag}&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;file&amp;lt;/code&amp;gt; - будет вызван &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker load&amp;lt;/code&amp;gt; с url'ом &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;image/sourcefileurl&amp;lt;/code&amp;gt;&lt;br /&gt;
|file                                               &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcefileurl&lt;br /&gt;
|url&lt;br /&gt;
|Url откуда будет загружен docker-образ если &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;image/sourcetype == &amp;quot;file&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
Url может содержать:&lt;br /&gt;
- путь к локальному файлу: схема &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;file://&amp;lt;/code&amp;gt;&lt;br /&gt;
- http/https-адрес: схема &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;http://&amp;lt;/code&amp;gt; или &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;https://&amp;lt;/code&amp;gt;&lt;br /&gt;
|https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/&lt;br /&gt;
|map&lt;br /&gt;
|Свойства docker-контейнера&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/config.go#L70&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config/env&lt;br /&gt;
|[]string&lt;br /&gt;
|Список переменных среды, которые будут установлены в контейнере&lt;br /&gt;
|&lt;br /&gt;
 - THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;     &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры хостинга контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/hostconfig.go#L379&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/autoremove&lt;br /&gt;
|bool&lt;br /&gt;
|&lt;br /&gt;
|true                                               &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/portbindings&lt;br /&gt;
|map&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
 &amp;quot;3000/tcp&amp;quot;:                                        &lt;br /&gt;
   - hostport: 0                                    &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/networkconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Сетевые настройки контейнера. Соответствуют структуре https://github.com/moby/moby/blob/v24.0.7/api/types/network/network.go#L104&lt;br /&gt;
|                                                   &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры проверки доступности healthcheck ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для проверки доступности IDE после запуска docker-контейнера&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck&lt;br /&gt;
|map&lt;br /&gt;
|Параметры проверки доступности IDE&lt;br /&gt;
|                                     &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyretries&lt;br /&gt;
|int&lt;br /&gt;
|Количества попыток проверки до ошибки доступности&lt;br /&gt;
|10                                   &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyperiod&lt;br /&gt;
|golang duration string&lt;br /&gt;
|Интервал проверки&lt;br /&gt;
|200ms                                &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Структуры передаваемые в поля с golang-шаблонами строк ====&lt;br /&gt;
&lt;br /&gt;
 sarifFileContext {&lt;br /&gt;
     Time    time.Time&lt;br /&gt;
 	Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
 &lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 TheiaDockerContainerStartContext {&lt;br /&gt;
 	IdeID: {&lt;br /&gt;
         IdeType  string&lt;br /&gt;
         ConfigID string&lt;br /&gt;
     },&lt;br /&gt;
 	StartArgs: {&lt;br /&gt;
         SnapshotID string&lt;br /&gt;
         UserID     string&lt;br /&gt;
         User       string&lt;br /&gt;
     },&lt;br /&gt;
 	Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
 &lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация по умолчанию ===&lt;br /&gt;
&lt;br /&gt;
Данная настройка применяется по умолчанию для запуска Theia IDE, если в конфигурационном файле svacer.cfg отсутствует раздел &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
xsvacer:&lt;br /&gt;
  webide:&lt;br /&gt;
    theia:&lt;br /&gt;
      1-46-0: &amp;amp;1-46-0&lt;br /&gt;
        disabled: true&lt;br /&gt;
        order: 0&lt;br /&gt;
        name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
        sourcesroot: ${USER_CACHE_DIR}/svacer-snapshot-sources&lt;br /&gt;
        sariffiletemplate: &amp;quot;&amp;lt;nowiki&amp;gt;{{.Context.ProjectName}}.{{.Context.BranchName}}&amp;lt;/nowiki&amp;gt;.sarif&amp;quot;&lt;br /&gt;
        manager:&lt;br /&gt;
          type: default&lt;br /&gt;
        docker:&lt;br /&gt;
          hostid: default # идентификатор используемого docker-хоста&lt;br /&gt;
          containernametemplate: &amp;quot;theia-1-46-&amp;lt;nowiki&amp;gt;{{.StartArgs.SnapshotID}}&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
          image:&lt;br /&gt;
            name: theia-blueprint&lt;br /&gt;
            tag: 1.46.0.sarif.clang&lt;br /&gt;
            sourcetype: file&lt;br /&gt;
            sourcefileurl: https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar&lt;br /&gt;
          containerconfiglabels:&lt;br /&gt;
            - &amp;quot;com.docker.compose.project&amp;quot;: svacer&lt;br /&gt;
          container:&lt;br /&gt;
            config:&lt;br /&gt;
              env:&lt;br /&gt;
                - THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
            hostconfig:&lt;br /&gt;
              autoremove: true&lt;br /&gt;
              portbindings:&lt;br /&gt;
                &amp;quot;3000/tcp&amp;quot;:&lt;br /&gt;
                  - hostport: 0&lt;br /&gt;
            networkconfig:&lt;br /&gt;
        healthcheck:&lt;br /&gt;
          starttoreadyretries: 10&lt;br /&gt;
          starttoreadyperiod: 200ms&lt;br /&gt;
      default:&lt;br /&gt;
        &amp;lt;&amp;lt;: *1-46-0&lt;br /&gt;
        order: 0&lt;br /&gt;
        disabled: false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' По умолчанию используется docker-хост с идентификатором &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;default&amp;lt;/code&amp;gt;. Согласно настройке этого хоста, по умолчанию предполагается взаимодействие с докером через unix-сокет &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt;. Соответственно пользователь, под которым запускается svacer должен иметь доступ к этому сокету (https://docs.docker.com/engine/install/linux-postinstall/).&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' При наличии раздела &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; в конфигурационном файле &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; будут применены только настройки из этого раздела. Настройки по умолчанию будут полностью проигнорированы.&lt;br /&gt;
&lt;br /&gt;
=== Изменение конфигурационных параметров с помощью переменных окружения ===&lt;br /&gt;
&lt;br /&gt;
Значения атрибутов конфигурации могут быть изменены с помощью переменных окружения &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;XSVACER_WEBIDE_THEIA_{id конфигурации ide}[_параметр]={значение параметра}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Например, для активации rootless-хоста &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/hosts/local&amp;lt;/code&amp;gt; и переключения запуска IDE с идентификатором &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;default&amp;lt;/code&amp;gt; на этот хост можно указать такие значения переменных окружения при запуске svacer'а:&lt;br /&gt;
 XSVACER_DOCKER_HOSTS_LOCAL_DISABLED=false&lt;br /&gt;
 XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_HOSTID=local&lt;br /&gt;
&lt;br /&gt;
== Очистка системы: удаление артефактов функциональности ==&lt;br /&gt;
&lt;br /&gt;
В процессе использования функциональности IDE создаются следующие артефакты:&lt;br /&gt;
# Исходные файлы снимков скачиваются в &amp;quot;корневые папки&amp;quot;, заданные в параметре &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/sourcesroot&amp;lt;/code&amp;gt;;&lt;br /&gt;
# Артефакты docker:&lt;br /&gt;
#* образы и контейнеры создаются на хостах, указанных в конфигурации docker-хостов в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/hostid&amp;lt;/code&amp;gt;;&lt;br /&gt;
#* названия docker-образов будут соответствовать параметрам в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/image&amp;lt;/code&amp;gt;;&lt;br /&gt;
#* названия docker-контейнеров будут соответствовать параметру &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/containernametemplate&amp;lt;/code&amp;gt;;&lt;br /&gt;
#* наборы меток doker-контейнеров будут содержать:&lt;br /&gt;
#*: метки, перечисленные в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/containerconfiglabels&amp;lt;/code&amp;gt;;&lt;br /&gt;
#*: метки, перечисленные в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/container/config/labels&amp;lt;/code&amp;gt;;&lt;br /&gt;
#*: метки с названиями &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.service.id&amp;lt;/code&amp;gt;, &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.service.type&amp;lt;/code&amp;gt;, &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.theia.start_args&amp;lt;/code&amp;gt;;&lt;br /&gt;
# При использовании rootless-хоста docker'а будут созданы папки согласно [[Help:XSvacer:Docker#Специфичные настройки для rootless-хоста]].&lt;br /&gt;
&lt;br /&gt;
== Рекомендации ==&lt;br /&gt;
&lt;br /&gt;
=== Предварительная загрузка docker-образа с IDE ===&lt;br /&gt;
&lt;br /&gt;
По умолчанию параметр &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/1-46-0/docker/image/sourcefileurl&amp;lt;/code&amp;gt; содержит значение &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar&amp;lt;/code&amp;gt;. По этому адресу находится архив с docker-образом для Theia IDE.&lt;br /&gt;
&lt;br /&gt;
Если docker-образ ещё не был загружен, то загрузка начнётся при первой попытке запуска IDE. Т.к. этот процесс занимает длительное время, то запрос запуска IDE тоже будет выполняться долго.&lt;br /&gt;
&lt;br /&gt;
Для ускорения первого запуска IDE докер образ можно загрузить на хост docker'а вручную. Для этого необходимо:&lt;br /&gt;
# Скачать файл архива;&lt;br /&gt;
# Выполнить команду &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker image load -i /path/to/theia-blueprint.1.46.0.sarif.clang.tar&amp;lt;/code&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
== Информация о docker-образе Theia IDE ==&lt;br /&gt;
&lt;br /&gt;
Docker-образ, используемый по умолчанию, построен на базе [https://theia-ide.org/ Eclipse Theia IDE] версии [[https://github.com/eclipse-theia/theia-blueprint/tree/v1.46.0|1.46.0]]&lt;br /&gt;
&lt;br /&gt;
При этом была изменена компоновка расширений theia (результат выполнения &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;git diff&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
diff --git a/browser.Dockerfile b/browser.Dockerfile&lt;br /&gt;
index efe591e..a4ebb6a 100644&lt;br /&gt;
--- a/browser.Dockerfile&lt;br /&gt;
+++ b/browser.Dockerfile&lt;br /&gt;
@@ -42,7 +42,7 @@ RUN chmod g+rw /home &amp;amp;&amp;amp; \&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y wget apt-transport-https &amp;amp;&amp;amp; \&lt;br /&gt;
     wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | tee /usr/share/keyrings/adoptium.asc &amp;amp;&amp;amp; \&lt;br /&gt;
     echo &amp;quot;deb [signed-by=/usr/share/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main&amp;quot; | tee /etc/apt/sources.list.d/adoptium.list &amp;amp;&amp;amp; \&lt;br /&gt;
-    apt-get update &amp;amp;&amp;amp; apt-get install -y git openssh-client openssh-server bash libsecret-1-0 temurin-17-jdk maven &amp;amp;&amp;amp; \&lt;br /&gt;
+    apt-get update &amp;amp;&amp;amp; apt-get install -y git openssh-client openssh-server bash libsecret-1-0 clangd &amp;amp;&amp;amp; \&lt;br /&gt;
     apt-get purge -y wget &amp;amp;&amp;amp; \&lt;br /&gt;
     apt-get clean&lt;br /&gt;
&lt;br /&gt;
diff --git a/package.json b/package.json&lt;br /&gt;
index 9044595..9d0dcc8 100644&lt;br /&gt;
--- a/package.json&lt;br /&gt;
+++ b/package.json&lt;br /&gt;
@@ -54,10 +54,8 @@&lt;br /&gt;
   &amp;quot;theiaPluginsDir&amp;quot;: &amp;quot;plugins&amp;quot;,&lt;br /&gt;
   &amp;quot;theiaPlugins&amp;quot;: {&lt;br /&gt;
     &amp;quot;eclipse-theia.builtin-extension-pack&amp;quot;: &amp;quot;https://open-vsx.org/api/eclipse-theia/builtin-extension-pack/1.83.1/file/eclipse-theia.builtin-extension-pack-1.83.1.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;ms-vscode.js-debug&amp;quot;: &amp;quot;https://open-vsx.org/api/ms-vscode/js-debug/1.83.1/file/ms-vscode.js-debug-1.83.1.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;ms-vscode.js-debug-companion&amp;quot;: &amp;quot;https://open-vsx.org/api/ms-vscode/js-debug-companion/1.1.2/file/ms-vscode.js-debug-companion-1.1.2.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;vscjava.vscode-java-pack&amp;quot;: &amp;quot;https://open-vsx.org/api/vscjava/vscode-java-pack/0.25.11/file/vscjava.vscode-java-pack-0.25.11.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;vscjava.vscode-java-dependency&amp;quot;: &amp;quot;https://open-vsx.org/api/vscjava/vscode-java-dependency/0.21.2/file/vscjava.vscode-java-dependency-0.21.2.vsix&amp;quot;&lt;br /&gt;
+    &amp;quot;llvm-vs-code-extensions.vscode-clangd&amp;quot;: &amp;quot;https://open-vsx.org/api/llvm-vs-code-extensions/vscode-clangd/0.1.26/file/llvm-vs-code-extensions.vscode-clangd-0.1.26.vsix&amp;quot;,&lt;br /&gt;
+    &amp;quot;ms-sarifvscode.sarif-viewer&amp;quot;: &amp;quot;https://open-vsx.org/api/MS-SarifVSCode/sarif-viewer/3.4.2/file/MS-SarifVSCode.sarif-viewer-3.4.2.vsix&amp;quot;&lt;br /&gt;
   },&lt;br /&gt;
   &amp;quot;theiaPluginsExcludeIds&amp;quot;: [&lt;br /&gt;
     &amp;quot;ms-vscode.js-debug-companion&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Команда построения docker-образа: &lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
docker build -t theia-blueprint:1.46.0.sarif.clang -f browser.Dockerfile .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Команда экспорта docker-образа:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
docker image save theia-blueprint:1.46.0 &amp;gt; /path/to/tar/theia-blueprint.1.46.0.docker.command.tar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Известные проблемы ==&lt;br /&gt;
&lt;br /&gt;
=== При открытии sarif-файла в IDE открывается пустая панель &amp;quot;SARIF Results&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Для просмотра sarif-файла, содержащего предупреждения анализатора и разметку, используется плагин [https://open-vsx.org/extension/MS-SarifVSCode/sarif-viewer SARIF Viewer]. При просмотре sarif-файла открывается webview плагина со списком предупреждений анализатора.&lt;br /&gt;
&lt;br /&gt;
В Theia IDE для открытия webview применяется [https://developer.mozilla.org/en_US/docs/Web/API/Service_Worker_API Service Worker API]. В целях обеспечения безопасности применение Service Worker API [https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#setting_up_to_play_with_service_workers|требует], чтобы доступ к web-приложению осуществлялся по HTTPS, либо приложение размещалось на &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;localhost&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Поэтому для решения данной проблемы svacer должен открываться по https или быть доступен по адресу &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:Firefox_popup_notification_ru.png&amp;diff=1974</id>
		<title>File:Firefox popup notification ru.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:Firefox_popup_notification_ru.png&amp;diff=1974"/>
		<updated>2024-06-10T10:07:21Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: M.vinogradov uploaded a new version of File:Firefox popup notification ru.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Нотификация firefox если сайт пытается открыть новую вкладку&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:Firefox_popup_notification_expanded_ru.png&amp;diff=1973</id>
		<title>File:Firefox popup notification expanded ru.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:Firefox_popup_notification_expanded_ru.png&amp;diff=1973"/>
		<updated>2024-06-10T10:01:49Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Развёрнутая нотификация firefox если сайт пытается открыть новую вкладку&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=File:Firefox_popup_notification_ru.png&amp;diff=1972</id>
		<title>File:Firefox popup notification ru.png</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=File:Firefox_popup_notification_ru.png&amp;diff=1972"/>
		<updated>2024-06-10T10:00:02Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Нотификация firefox если сайт пытается открыть новую вкладку&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Docker&amp;diff=1971</id>
		<title>Help:XSvacer:Docker</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Docker&amp;diff=1971"/>
		<updated>2024-06-07T11:59:35Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Управление docker-контейнерами =&lt;br /&gt;
 '''Примечание:''' данная функциональность входит в набор расширений XSvacer.&lt;br /&gt;
&lt;br /&gt;
Данная функциональность предназначена для управления docker-контейнерами, содержащими компоненты XSvacer.&lt;br /&gt;
&lt;br /&gt;
Управление docker-контейнерами осуществляется с помощью взаимодействия с docker-хостом с использованием [https://docs.docker.com/engine/api/latest/ REST API].&lt;br /&gt;
&lt;br /&gt;
Возможны два сценария использования docker'а:&lt;br /&gt;
# Подключение к существующему (&amp;quot;внешнему&amp;quot;) docker-хосту;&lt;br /&gt;
# Запуск управляемого svacer'ом [https://docs.docker.com/go/rootless/ rootless-хоста].&lt;br /&gt;
&lt;br /&gt;
== Активация функциональности ==&lt;br /&gt;
Для активации функциональности необходимо указать флаг &amp;lt;code&amp;gt;--xsvacer.features docker&amp;lt;/code&amp;gt; при запуске svacer'а.&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' на базе данной функциональности осуществляется запуск компонентов других расширений XSvacer. В таком случае её необязательно запускать явно: она будет запущена, если будет запущена зависимая функциональность.&lt;br /&gt;
&lt;br /&gt;
== Конфигурация ==&lt;br /&gt;
&lt;br /&gt;
Управление настройками функциональности осуществляется с помощью конфигурационного yaml-файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Раздел конфигурации для управления функциональностью - &amp;lt;code&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Раздел содержит перечисление настроек подключаемых хостов docker'а &amp;lt;code&amp;gt;xsvacer/docker/hosts&amp;lt;/code&amp;gt;, на которые в дальнейшем будут ссылаться зависимые функциональности. Каждое поле в &amp;lt;code&amp;gt;xsvacer/docker/hosts/...&amp;lt;/code&amp;gt; является идентификатором подключения и содержит его конфигурацию.&lt;br /&gt;
&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   docker:&lt;br /&gt;
     hosts:&lt;br /&gt;
       dockerhost1:&lt;br /&gt;
         type: ...&lt;br /&gt;
         host: ...&lt;br /&gt;
         disabled: false&lt;br /&gt;
         ...&lt;br /&gt;
       dockerhost2:&lt;br /&gt;
         ...&lt;br /&gt;
   &lt;br /&gt;
   dependentFeature1:&lt;br /&gt;
     ...&lt;br /&gt;
     docker:&lt;br /&gt;
       hostid: dockerhost1&lt;br /&gt;
     ...&lt;br /&gt;
   dependentFeature2:&lt;br /&gt;
     ...&lt;br /&gt;
     docker:&lt;br /&gt;
       hostid: dockerhost2&lt;br /&gt;
     ...&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' в случае отсутствия файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; или отсутствии раздела &amp;lt;code&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt; будет использоваться конфигурация по умолчанию (см. ниже)&lt;br /&gt;
&lt;br /&gt;
=== Общие параметры docker-хостов ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название &lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;&lt;br /&gt;
|enum: &amp;lt;code&amp;gt;external&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;managed&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;remote&amp;lt;/code&amp;gt;&lt;br /&gt;
|Тип подключаемого docker-хоста:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;external&amp;lt;/code&amp;gt; - &amp;quot;внешний&amp;quot; docker-хост&lt;br /&gt;
* &amp;lt;code&amp;gt;managed&amp;lt;/code&amp;gt; - &amp;quot;управляемый&amp;quot; rootless-хост&lt;br /&gt;
* &amp;lt;code&amp;gt;remote&amp;lt;/code&amp;gt; - аналогичен &amp;lt;code&amp;gt;external&amp;lt;/code&amp;gt;, но &amp;lt;code&amp;gt;host&amp;lt;/code&amp;gt; должен быть задан&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;hostd&amp;lt;/code&amp;gt;&lt;br /&gt;
|url&lt;br /&gt;
|Url docker-хоста&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;disabled&amp;lt;/code&amp;gt;&lt;br /&gt;
|bool&lt;br /&gt;
|Конфигурация хоста неактивна&lt;br /&gt;
Неактивная конфигурация не может использоваться в других функциональностях&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Использование существующего (&amp;quot;внешнего&amp;quot;) docker-хоста ===&lt;br /&gt;
Данный способ взаимодействия предполагает подключение к существующему хосту docker'а.&lt;br /&gt;
&lt;br /&gt;
Доступные варианты подключения:&lt;br /&gt;
# К локальному хосту через unix-сокет;&lt;br /&gt;
# К удалённому хосту по ssh;&lt;br /&gt;
# К удалённому хосту по http;&lt;br /&gt;
# К к удалённому хосту по https.&lt;br /&gt;
&lt;br /&gt;
Для использования &amp;quot;внешнего&amp;quot; хоста docker'а в конфигурационном файле нужно указать &amp;lt;code&amp;gt;type: external&amp;lt;/code&amp;gt;, а также задать адрес хоста, соответствующий типу подключения:&lt;br /&gt;
 docker:&lt;br /&gt;
   hosts:&lt;br /&gt;
     default:&lt;br /&gt;
       type: external&lt;br /&gt;
       host: &amp;quot;unix:///path/to/docker.sock&amp;quot;&lt;br /&gt;
     remote1:&lt;br /&gt;
       type: external&lt;br /&gt;
       host: &amp;quot;&amp;lt;nowiki&amp;gt;ssh://docker-user@docker-host&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
     remote2:&lt;br /&gt;
       type: external&lt;br /&gt;
       host: &amp;quot;&amp;lt;nowiki&amp;gt;http://docker-host-ip-address:2375&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
     remote3:&lt;br /&gt;
       type: external&lt;br /&gt;
       host: &amp;quot;&amp;lt;nowiki&amp;gt;https://docker-host-ip-address:2376&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
       clienttls: ...&lt;br /&gt;
Если параметр &amp;lt;code&amp;gt;host&amp;lt;/code&amp;gt; не задан, то по умолчанию будет использоваться unix-сокет.&lt;br /&gt;
&lt;br /&gt;
==== Подключение к локальному хосту через unix-сокет ====&lt;br /&gt;
При обычном запуске процесса &amp;lt;code&amp;gt;dockerd&amp;lt;/code&amp;gt; взаимодействие с хостом осуществляется с помощью unix-сокета &amp;lt;code&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Доступ к сокету может получить пользователь с правами &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt; или обычный пользователь, входящий в группу &amp;lt;code&amp;gt;docker&amp;lt;/code&amp;gt; (https://docs.docker.com/reference/cli/dockerd/#daemon-socket-option).&lt;br /&gt;
&lt;br /&gt;
Пользователь, под которым запускается svacer, должен иметь права доступа к указанному unix-сокету docker'а (https://docs.docker.com/engine/install/linux-postinstall/).&lt;br /&gt;
 '''Внимание!''' При отсутствии прав доступа к unix-сокету использование данной функциональности будет приводить к ошибке.&lt;br /&gt;
 В таком случае можно воспользоваться rootless-хостом (см. ниже).&lt;br /&gt;
&lt;br /&gt;
Если для взаимодействия с хостом docker'а используется дефолтный unix-сокет &amp;lt;code&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt;, то в конфигурации поле &amp;lt;code&amp;gt;host&amp;lt;/code&amp;gt; можно не указывать:&lt;br /&gt;
 docker:&lt;br /&gt;
   hosts:&lt;br /&gt;
     default:&lt;br /&gt;
       type: external&lt;br /&gt;
&lt;br /&gt;
==== Подключение к удалённому хосту по ssh ====&lt;br /&gt;
&lt;br /&gt;
Чтобы подключиться к удалённому хосту docker'а по ssh, необходимо в поле &amp;lt;code&amp;gt;host&amp;lt;/code&amp;gt; указать схему &amp;lt;code&amp;gt;ssh://&amp;lt;/code&amp;gt;, реквизиты пользователя и название/адрес docker-хоста:&lt;br /&gt;
&lt;br /&gt;
 docker:&lt;br /&gt;
   hosts:&lt;br /&gt;
     default:&lt;br /&gt;
       type: external&lt;br /&gt;
       host: &amp;quot;&amp;lt;nowiki&amp;gt;ssh://docker-user@docker-host&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Указанный пользователь должен иметь возможность подключения по ssh к указанному хосту, а также иметь права доступа к unix-сокету docker'а на удалённом хосте (https://docs.docker.com/engine/security/protect-access/#use-ssh-to-protect-the-docker-daemon-socket)&lt;br /&gt;
&lt;br /&gt;
==== Подключение к удалённому хосту по http ====&lt;br /&gt;
&lt;br /&gt;
Чтобы подключиться к удалённому хосту docker'а по http, необходимо в поле &amp;lt;code&amp;gt;host&amp;lt;/code&amp;gt; указать схему &amp;lt;code&amp;gt;http://&amp;lt;/code&amp;gt; и адрес docker-хоста:&lt;br /&gt;
 docker:&lt;br /&gt;
   hosts:&lt;br /&gt;
     default:&lt;br /&gt;
       type: external&lt;br /&gt;
       host: &amp;quot;&amp;lt;nowiki&amp;gt;http://docker-host-ip-address:port&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' Данный тип подключения является *небезопасным*, т.к. при использовании API docker'а не производится шифрование сетевого трафика и аутентификация клиента при доступе к docker'у. Чтобы создать безопасное сетевое соединение необходимо использовать подключение по https (tls) (см. ниже)&lt;br /&gt;
&lt;br /&gt;
==== Подключение к удалённому хосту по https (tls) ====&lt;br /&gt;
&lt;br /&gt;
Docker-хост может предоставлять доступ по https (https://docs.docker.com/engine/security/protect-access/#use-tls-https-to-protect-the-docker-daemon-socket).&lt;br /&gt;
&lt;br /&gt;
В таком случае для доступа к API необходимо иметь сертификат удостоверяющего центра, клиентский ключ и сертификат.&lt;br /&gt;
&lt;br /&gt;
В конфигурационном файле пути к ключам указываются в поле &amp;lt;code&amp;gt;xsvacer/docker/{docker-host-id}/clienttls&amp;lt;/code&amp;gt;:&lt;br /&gt;
 docker:&lt;br /&gt;
   hosts:&lt;br /&gt;
     default:&lt;br /&gt;
       type: external&lt;br /&gt;
       host: &amp;quot;&amp;lt;nowiki&amp;gt;https://docker-host-ip-address:2376&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
       clienttls:&lt;br /&gt;
         ca:   &amp;quot;/path/to/ca.pem&amp;quot;&lt;br /&gt;
         cert: &amp;quot;/path/to/cert.pem&amp;quot;&lt;br /&gt;
         key:  &amp;quot;/path/to/key.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===== Специфичные настройки для подключения к https хосту =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|clienttls/&lt;br /&gt;
|map&lt;br /&gt;
|Настройки TLS                                   &lt;br /&gt;
|-&lt;br /&gt;
|clienttls/ca&lt;br /&gt;
|url&lt;br /&gt;
|Путь к файлу сертификата удостоверяющего центра &lt;br /&gt;
|-&lt;br /&gt;
|clienttls/cert&lt;br /&gt;
|url&lt;br /&gt;
|Путь к клиентскому сертификату                  &lt;br /&gt;
|-&lt;br /&gt;
|clienttls/key&lt;br /&gt;
|url&lt;br /&gt;
|Путь к клиентскому ключу                         &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Памятка при использовании подключения к удалённым хостам ====&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' если используется подключения к удалённому хосту docker'а, в настройке биндингов контейнеров необходимо указывать ip-адрес доступного сетевого интерфейса хоста, т.к. при привязке контейнера к 0.0.0.0 на машине хоста контейнеры будут недоступны снаружи.&lt;br /&gt;
&lt;br /&gt;
=== Запуск &amp;quot;управляемого&amp;quot; rootless-хоста ===&lt;br /&gt;
&lt;br /&gt;
В случае отсутствия доступного docker-хоста, либо если не хочется его загромождать контейнерами svacer'а, предусмотрена возможность запуска &amp;quot;управляемого&amp;quot; rootless-хоста, не требующего настройки дополнительных прав для пользователя, под которым запускается svacer (https://docs.docker.com/engine/security/rootless/).&lt;br /&gt;
&lt;br /&gt;
Управление (запуск и остановка) rootless-хостом будет осуществлять svacer.&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' Доступно только для linux'а.&lt;br /&gt;
&lt;br /&gt;
Для использования данного rootless-хоста в конфигурационном файле для хоста нужно указать &amp;lt;code&amp;gt;type: managed&amp;lt;/code&amp;gt;.&lt;br /&gt;
 docker:&lt;br /&gt;
   hosts:&lt;br /&gt;
     local:&lt;br /&gt;
       type: managed&lt;br /&gt;
       ...&lt;br /&gt;
&lt;br /&gt;
==== Специфичные настройки для rootless-хоста ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|managed/&lt;br /&gt;
|map&lt;br /&gt;
|параметры запуска rootless-хоста                                             &lt;br /&gt;
|-&lt;br /&gt;
|managed/executable&lt;br /&gt;
|string&lt;br /&gt;
|исполняемый файл. Должен быть доступен в $PATH или содержать абсолютный путь &lt;br /&gt;
''формат'': имя исполняемого фала, доступного через переменную &amp;lt;code&amp;gt;$PATH&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
''или'': абсолютный путь до исполняемого файла&lt;br /&gt;
|-&lt;br /&gt;
|managed/env&lt;br /&gt;
|[]string&lt;br /&gt;
|список переменных окружения для процесса rootless-хоста                      &lt;br /&gt;
формат: &amp;lt;code&amp;gt;&amp;quot;НАЗВАНИЕ_ПЕРЕМЕННОЙ=значение переменной&amp;quot;&amp;lt;/code&amp;gt;                          &lt;br /&gt;
|-&lt;br /&gt;
|managed/args&lt;br /&gt;
|[]string&lt;br /&gt;
|список аргументов запуска rootless-хоста                                     &lt;br /&gt;
''формат'': &amp;lt;code&amp;gt;&amp;quot;--название-аргумента=значение-аргумента&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''или'': &amp;lt;code&amp;gt;&amp;quot;--название-аргумента&amp;quot;, &amp;quot;значение-аргумента&amp;quot;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
''или'': &amp;lt;code&amp;gt;&amp;quot;--название-флага&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|managed/loglevel&lt;br /&gt;
|string&lt;br /&gt;
|уровень логирования, на котором будут записываться stdout и stderr процесса rootless-хоста                                      &lt;br /&gt;
|-&lt;br /&gt;
|managed/logprefix&lt;br /&gt;
|string&lt;br /&gt;
|префикс в логе, которым будут помечаться записи из stdout и stderr процесса rootless-хоста                                      &lt;br /&gt;
|-&lt;br /&gt;
|managed/healthcheck&lt;br /&gt;
|map&lt;br /&gt;
|параметры проверки доступности rootless-хоста                                &lt;br /&gt;
|-&lt;br /&gt;
|managed/healthcheck/interval&lt;br /&gt;
|golang duration string&lt;br /&gt;
|интервал проверки                                                            &lt;br /&gt;
|-&lt;br /&gt;
|managed/healthcheck/retries&lt;br /&gt;
|int&lt;br /&gt;
|количество попыток проверки до ошибки доступности                            &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
В значениях &amp;lt;code&amp;gt;managed/env&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;managed/args&amp;lt;/code&amp;gt; можно использовать имена переменных окружения в формате &amp;lt;code&amp;gt;${НАЗВАНИЕ_ПЕРЕМЕННОЙ}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Рекомендуемая конфигурация rootless-хоста ====&lt;br /&gt;
&lt;br /&gt;
При запуске &amp;lt;code&amp;gt;dockerd-rootless.sh&amp;lt;/code&amp;gt; без параметров папки с артефактами docker'а создаются во вложенных папках внутри &amp;lt;code&amp;gt;/run/user/$UID/&amp;lt;/code&amp;gt;.&lt;br /&gt;
Для лучшей локализации артефактов svacer'а рекомендуется использовать следующие настройки для rootless-хоста:&lt;br /&gt;
 docker:&lt;br /&gt;
   hosts:&lt;br /&gt;
     local:&lt;br /&gt;
       type: managed&lt;br /&gt;
       host: &amp;quot;unix://${USER_CACHE_DIR}/svacer-docker-host/svacer-docker.sock&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
       managed:&lt;br /&gt;
         executable: &amp;quot;dockerd-rootless.sh&amp;quot;&lt;br /&gt;
         env:&lt;br /&gt;
           - &amp;quot;DOCKERD_ROOTLESS_ROOTLESSKIT_STATE_DIR=${USER_CACHE_DIR}/svacer-docker-host/state-dir/&amp;quot;&lt;br /&gt;
         args:&lt;br /&gt;
           - &amp;quot;--data-root=${USER_CACHE_DIR}/svacer-docker-host/data-root/&amp;quot;&lt;br /&gt;
           - &amp;quot;--exec-root=${USER_CACHE_DIR}/svacer-docker-host/exec-root/&amp;quot;&lt;br /&gt;
           - &amp;quot;--pidfile=${USER_CACHE_DIR}/svacer-docker-host/svacer-docker.pid&amp;quot;&lt;br /&gt;
         logLevel: info&lt;br /&gt;
         logPrefix: &amp;quot;DOCKER HOST: &amp;quot;&lt;br /&gt;
         healthCheck:&lt;br /&gt;
           interval: 1s&lt;br /&gt;
           retries: 10&lt;br /&gt;
&lt;br /&gt;
Здесь вместо &amp;lt;code&amp;gt;${USER_CACHE_DIR}&amp;lt;/code&amp;gt; будет подставлен путь &amp;lt;code&amp;gt;$HOME/.cache&amp;lt;/code&amp;gt; на unix-подобных системах или &amp;lt;code&amp;gt;%LocalAppData%&amp;lt;/code&amp;gt; на windows.&lt;br /&gt;
&lt;br /&gt;
При таких настройках все артефакты хоста docker'а будут храниться внутри папки &amp;lt;code&amp;gt;${USER_CACHE_DIR}/svacer-docker-host&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Использование &amp;quot;неуправляемого&amp;quot; rootless-хоста ===&lt;br /&gt;
&lt;br /&gt;
В случае необходимости управления rootless-хостом без участия svacer'а, его можно запустить отдельно. Например, командой:&lt;br /&gt;
 DOCKERD_ROOTLESS_ROOTLESSKIT_STATE_DIR=/home/$USER/.cache/svacer-docker-host/state-dir/ dockerd-rootless.sh --host unix:///home/$USER/.cache/svacer-docker-host/svacer-docker.sock --data-root=/home/$USER/.cache/svacer-docker-host/data-root/ --exec-root=/home/$USER/.cache/svacer-docker-host/exec-root/ --pidfile=/home/$USER/.cache/svacer-docker-host/svacer-docker.pid&lt;br /&gt;
&lt;br /&gt;
В таком случае подключиться к данному хосту можно как к &amp;quot;внешнему&amp;quot; (&amp;lt;code&amp;gt;type: external&amp;lt;/code&amp;gt;), указав адрес unix-сокета. Например:&lt;br /&gt;
 docker:&lt;br /&gt;
   hosts:&lt;br /&gt;
     unmanaged:&lt;br /&gt;
       type: external&lt;br /&gt;
       host: &amp;quot;unix:///home/${USER}/.cache/svacer-docker-host/svacer-docker.sock&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация по умолчанию ===&lt;br /&gt;
&lt;br /&gt;
Данная конфигурация применяется по умолчанию, если в конфигурационном файле svacer.cfg отсутствует раздел &amp;lt;code&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt;:&lt;br /&gt;
 docker:&lt;br /&gt;
   hosts:&lt;br /&gt;
     default:&lt;br /&gt;
       type: external&lt;br /&gt;
     local:&lt;br /&gt;
       type: managed&lt;br /&gt;
       host: &amp;quot;unix://${USER_CACHE_DIR}/svacer-docker-host/svacer-docker.sock&amp;quot;&lt;br /&gt;
       disabled: true&lt;br /&gt;
 &lt;br /&gt;
       managed:&lt;br /&gt;
         executable: &amp;quot;dockerd-rootless.sh&amp;quot;&lt;br /&gt;
         env:&lt;br /&gt;
           - &amp;quot;DOCKERD_ROOTLESS_ROOTLESSKIT_STATE_DIR=${USER_CACHE_DIR}/svacer-docker-host/state-dir/&amp;quot;&lt;br /&gt;
         args:&lt;br /&gt;
           - &amp;quot;--data-root=${USER_CACHE_DIR}/svacer-docker-host/data-root/&amp;quot;&lt;br /&gt;
           - &amp;quot;--exec-root=${USER_CACHE_DIR}/svacer-docker-host/exec-root/&amp;quot;&lt;br /&gt;
           - &amp;quot;--pidfile=${USER_CACHE_DIR}/svacer-docker-host/svacer-docker.pid&amp;quot;&lt;br /&gt;
         logLevel: info&lt;br /&gt;
         logPrefix: &amp;quot;DOCKER HOST: &amp;quot;&lt;br /&gt;
         healthCheck:&lt;br /&gt;
           interval: 1s&lt;br /&gt;
           retries: 10&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' При наличии раздела &amp;lt;code&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt; в конфигурационном файле &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; будут применены только настройки из этого раздела. Настройки по умолчанию будут полностью проигнорированы.&lt;br /&gt;
&lt;br /&gt;
=== Изменение конфигурационных параметров с помощью переменных окружения ===&lt;br /&gt;
&lt;br /&gt;
Значения атрибутов конфигурации могут быть изменены с помощью переменных окружения &amp;lt;code&amp;gt;XSVACER_DOCKER_HOSTS_{id хоста}[_параметр]={значение параметра}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Например, для активации rootless-хоста &amp;lt;code&amp;gt;xsvacer/hosts/local&amp;lt;/code&amp;gt; можно указать такие значения переменных окружения при запуске svacer'а:&lt;br /&gt;
 XSVACER_DOCKER_HOSTS_LOCAL_DISABLED=false&lt;br /&gt;
&lt;br /&gt;
== Известные проблемы ==&lt;br /&gt;
&lt;br /&gt;
=== rootless-хост продолжает работать при некорректной остановке svacer'а ===&lt;br /&gt;
&lt;br /&gt;
При некорректном завершении работы svacer'а (например, при получении сигнала &amp;lt;code&amp;gt;SIGKILL&amp;lt;/code&amp;gt;) процесс rootless-хоста останется запущенным в системе.&lt;br /&gt;
&lt;br /&gt;
При этом svacer потеряет возможность управления (запуска/остановки) этого процесса.&lt;br /&gt;
&lt;br /&gt;
При последующем запуске svacer попробует повторно запустить rootless-хост и получит сообщение типа &amp;lt;code&amp;gt;[rootlesskit:parent] error: failed to lock /path/to/svacer-docker-host/state-dir/lock, another RootlessKit is running with the same state directory?&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом, если настройки не менялись, зависимые функциональности смогут получить доступ к &amp;quot;неконтролируемому&amp;quot; rootless-хосту, т.к. адрес unix-сокета хоста известен.&lt;br /&gt;
&lt;br /&gt;
Процесс &amp;quot;неконтролируемого&amp;quot; rootless-хоста при необходимости может быть остановлен вручную. Например с помощью отправки сигнала &amp;lt;code&amp;gt;SIGTERM&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=1970</id>
		<title>Help:XSvacer:Webide</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=1970"/>
		<updated>2024-06-07T11:58:57Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Поддержка среды разработки Theia IDE =&lt;br /&gt;
 '''Примечание:''' данная функциональность входит в набор расширений XSvacer.&lt;br /&gt;
&lt;br /&gt;
Данная функциональность даёт возможность просматривать исходный код снимка с предупреждениями анализатора во внешней IDE.&lt;br /&gt;
&lt;br /&gt;
По умолчанию запускается IDE, [[#Информация_о_docker-образе_Theia_IDE|собранная]] на основе [https://theia-ide.org/ Theia IDE].&lt;br /&gt;
&lt;br /&gt;
== Активация функциональности ==&lt;br /&gt;
Для активации функциональности необходимо указать флаг &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt; при запуске svacer'а.&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' при запуске функциональности &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;webide&amp;lt;/code&amp;gt; также будет запущена функциональность &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;[[Help:XSvacer:Docker|docker]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При активации функциональности:&lt;br /&gt;
* становится доступным REST API управления IDE для просмотра исходного кода снимков проектов;&lt;br /&gt;
* в пользовательском интерфейсе появляется кнопка &amp;quot;Открыть в IDE&amp;quot;;&lt;br /&gt;
* устанавливается подключение к хосту docker'а, на котором будут запускаться контейнеры с экземплярами IDE.&lt;br /&gt;
&lt;br /&gt;
== Принцип работы ==&lt;br /&gt;
&lt;br /&gt;
Функциональность запуска IDE для просмотра исходного кода снимков становится доступной пользователю, если соблюдаются условия:&lt;br /&gt;
# Функциональность активна: при запуске svacer'а указан флаг &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt;;&lt;br /&gt;
# В конфигурации функциональности &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia&amp;lt;/code&amp;gt; ([[Help:XSvacer:Webide#Конфигурация]]) есть хотя бы одна активная (&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;disabled: false&amp;lt;/code&amp;gt;) конфигурация IDE;&lt;br /&gt;
# У пользователя svacer имеются разрешения &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;quot;Просмотр маркеров&amp;quot;&amp;lt;/code&amp;gt; (&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;quot;Read markers&amp;quot;&amp;lt;/code&amp;gt;) и &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;quot;Экспорт разметки&amp;quot;&amp;lt;/code&amp;gt; (&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;quot;Export markup&amp;quot;&amp;lt;/code&amp;gt;) на проект, в котором находится снимок, для которого нужно запустить IDE.&lt;br /&gt;
&lt;br /&gt;
В противном случае в пользовательском интерфейсе будет отсутствовать кнопка &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;quot;Открыть в IDE&amp;quot;&amp;lt;/code&amp;gt; (&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;quot;Open in IDE&amp;quot;&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Запуск IDE ===&lt;br /&gt;
&lt;br /&gt;
Запуск производится путём вызова http-метода &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;POST /api/snapshots/{snapshot_id}/ide&amp;lt;/code&amp;gt; с телом запроса &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;{&amp;quot;ideId&amp;quot;: &amp;quot;идентификатор IDE&amp;quot;}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последовательность действий, выполняемых при запуске IDE:&lt;br /&gt;
&lt;br /&gt;
# Производится проверка: была ли уже запущена указанная IDE для указанного снимка:&lt;br /&gt;
#* Если запущена: производится проверка доступности IDE (отвечает на запросы):&lt;br /&gt;
#** Если IDE доступна: действие не требуется. Процесс запуска завершается;&lt;br /&gt;
#** Если IDE недоступна: продолжается процесс запуска. IDE будет ''перезапущена'';&lt;br /&gt;
# Создаётся &amp;quot;корневая папка снимка&amp;quot;, предназначенная для хранения исходного кода снимка и предупреждений анализатора с разметкой в виде sarif-файла. Название папки соответствует id снимка. Папка создаётся по пути заданному в параметре конфигурации IDE &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/sourcesroot&amp;lt;/code&amp;gt;;&lt;br /&gt;
# Исходный код снимка скачивается в &amp;quot;корневую папку снимка&amp;quot;;&lt;br /&gt;
# Производится экспорт маркеров и разметки в виде sarif-файла в &amp;quot;корневую папку снимка&amp;quot;. Название sarif-файла формируется с помощью шаблона, заданного в параметре конфигурации IDE &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/sariffiletemplate&amp;lt;/code&amp;gt;;&lt;br /&gt;
# Производится настройка и запуск docker-контейнера в соответствии с настройками &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker&amp;lt;/code&amp;gt;:&lt;br /&gt;
## Проверяется наличие на docker-хосте образа IDE, указанного в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker/image&amp;lt;/code&amp;gt;:&lt;br /&gt;
##* Если docker-образ отсутствует - он будет загружен на хост;&lt;br /&gt;
## Проверяется наличие на docker-хосте контейнера с IDE для снимка:&lt;br /&gt;
##* Если docker-контейнер не существует, то он будет создан и запущен;&lt;br /&gt;
##* Если docker-контейнер существует и находится:&lt;br /&gt;
##** в статусе &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;running&amp;lt;/code&amp;gt; - процесс запуска IDE продолжается;&lt;br /&gt;
##** в статусе &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;created&amp;lt;/code&amp;gt;,&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;exited&amp;lt;/code&amp;gt; или &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;paused&amp;lt;/code&amp;gt; - контейнер будет запущен;&lt;br /&gt;
##** в других статусах - вернётся соответствующая ошибка и процесс запуска IDE прервётся;&lt;br /&gt;
# После успешного запуска docker-контейнера осуществляется ожидание окончания запуска процесса IDE в контейнере в соответствии с настройками &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck&amp;lt;/code&amp;gt;:&lt;br /&gt;
#* Если за отведённое время ответ от IDE получен - процесс запуска завершается;&lt;br /&gt;
#* Если ответ не получен - вернётся ошибка &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ide not ready&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' При возникновении ошибки на одном из этапов запуска IDE артефакты, созданные на предыдущих этапах, останутся в системе. В дальнейшем они могут быть использованы при повторном запуске IDE, если причина возникновения ошибки была устранена.&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' Причиной возникновения ошибки &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ide not ready&amp;lt;/code&amp;gt; может стать высокая загруженность или недостаточная производительность docker-хоста, на котором запускается контейнер с IDE. В связи с этим процесс IDE внутри контейнера может запускаться дольше, чем указано в настойках &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck&amp;lt;/code&amp;gt;.&lt;br /&gt;
 В случае возникновения ошибки &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ide not ready&amp;lt;/code&amp;gt; рекомендуется попробовать повторно запустить IDE через короткий промежуток времени.&lt;br /&gt;
 Ещё одной причиной возникновения данной ошибки может стать сетевая недоступность docker-контейнера при подключении к удалённому docker-хосту. В таком случае рекомендуется:&lt;br /&gt;
 1. проверить сетевую доступность docker-хоста;&lt;br /&gt;
 2. проверить настройки биндинга docker-контейнера c IDE - &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker/container/hostconfig/portbindings&amp;lt;/code&amp;gt;. Контейнер должен быть подключён к доступному сетевому интерфейсу;&lt;br /&gt;
 3. проверить настройки фаервола на docker-хосте.&lt;br /&gt;
&lt;br /&gt;
=== Использование IDE: проксирование запросов ===&lt;br /&gt;
&lt;br /&gt;
После успешного запуска docker-контейнера IDE станут доступны ресурсы с &amp;quot;префиксом&amp;quot; &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Все запросы, направленные к ресурсам &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/*&amp;lt;/code&amp;gt;, будут проксироваться в соответствующий контейнер IDE.&lt;br /&gt;
&lt;br /&gt;
Например, если docker-контейнер c IDE &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;theia__default&amp;lt;/code&amp;gt; для снимка &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xxx&amp;lt;/code&amp;gt; запущен и &amp;quot;слушает&amp;quot; порт &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;35353&amp;lt;/code&amp;gt; на хосте &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker-host&amp;lt;/code&amp;gt;, то будет происходить проксирование:&lt;br /&gt;
: &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET http://docker-host:35353/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;POST http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET http://docker-host:35353/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET ws://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET ws://docker-host:35353/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' для запуска IDE в окне браузера нужно указать адрес &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;http[s]://svacer-host/xvacer/webide/snapshots/{snapshot_id}/{ide_id}/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. '''Завершающий слеш обязателен!'''&lt;br /&gt;
&lt;br /&gt;
=== Перезапуск IDE ===&lt;br /&gt;
&lt;br /&gt;
В процессе работы svacer следит за состоянием запущенных IDE. При попытке повторного запуска IDE проверяется её доступность: если IDE отвечает на запросы, то повторный запуск не производится и обработка запроса завершается.&lt;br /&gt;
&lt;br /&gt;
Также работоспособность IDE контролируется при использовании IDE в момент проксирования запросов в docker-контейнер: если IDE доступна, то запрос проксируется.&lt;br /&gt;
&lt;br /&gt;
Если IDE перестанет отвечать на запросы, то будет произведена попытка её перезапуска. В этом случае происходит та же последовательность действий, что и при [[Help:XSvacer:Webide#Запуск IDE|первоначальном запуске IDE]].&lt;br /&gt;
&lt;br /&gt;
Зачастую потеря связи обусловлена остановкой docker-контейнера с IDE. В таком случае docker-контейнер будет перезапущен.&lt;br /&gt;
&lt;br /&gt;
Если же недоступность IDE обусловлена другими причинами, то запрос на запуск/проксирование продолжит возвращать ошибку до устранения причин неработоспособности.&lt;br /&gt;
&lt;br /&gt;
=== Остановка IDE ===&lt;br /&gt;
&lt;br /&gt;
Запуск производится путём вызова http-метода &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;DELETE /api/snapshots/{snapshot_id}/ide&amp;lt;/code&amp;gt; с телом запроса &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;{&amp;quot;ideId&amp;quot;: &amp;quot;идентификатор IDE&amp;quot;}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В ходе обработки запроса останавливается docker-контейнер IDE.&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' По умолчанию установлен параметр конфигурации &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/default/docker/container/hostconfig/autoremove: true&amp;lt;/code&amp;gt;. Это означает, что после остановки docker-контейнер будет автоматически удалён.&lt;br /&gt;
 Чтобы изменить это поведение, настройка &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/default/{id конфигурации}/container/hostconfig/autoremove&amp;lt;/code&amp;gt; должна быть установлена в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;false&amp;lt;/code&amp;gt; '''на момент запуска docker-контейнера IDE'''. Это можно сделать, например, установив значение переменной окружения &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_CONTAINER_HOSTCONFIG_AUTOREMOVE=false&amp;lt;/code&amp;gt;.&lt;br /&gt;
 '''!!!Сейчас установка &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;autoremove: false&amp;lt;/code&amp;gt; вызывает ошибку запуска svacer!!! Не используйте данную настройку до исправления.'''&lt;br /&gt;
&lt;br /&gt;
 '''Примечание!''' При корректной остановке (например &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;SIGTERM&amp;lt;/code&amp;gt;) svacer автоматически остановит все запущенные docker-контейнеры IDE&lt;br /&gt;
&lt;br /&gt;
=== Подключение к IDE после некорректного завершениея svacer ===&lt;br /&gt;
&lt;br /&gt;
При запуске svacer осуществляет поиск запущенных docker-контейнеров IDE на доступных docker-хостах.&lt;br /&gt;
&lt;br /&gt;
При восстановлении связи с запущенными docker-контейнерами IDE и последующей корректной остановке svacer'а все docker-контейнеры IDE будут остановлены.&lt;br /&gt;
&lt;br /&gt;
== REST API для работы с IDE ==&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' На этапе внедрения расширений XSvacer REST API может меняться. Следите за анонсами!&lt;br /&gt;
&lt;br /&gt;
После активации функциональности становятся доступны http-ресурсы для управления IDE снимками:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | REST API управления IDE&lt;br /&gt;
|-&lt;br /&gt;
!Ресурс&lt;br /&gt;
!Описание                                                &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
GET /xsvacer/webide/api/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Получение списка доступных для запуска IDE.&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;order&amp;quot;: 0&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;id&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;name&amp;lt;/code&amp;gt; - название IDE&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;order&amp;lt;/code&amp;gt; - порядковый номер IDE в списке&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
GET /xsvacer/webide/api/snapshots/{snapshot_id}/ide/{ide_id}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Запрос описания экземпляра IDE, запущенного для снимка. &lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ide_id&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;id&amp;quot;: {&lt;br /&gt;
    &amp;quot;ide_id&amp;quot;: {&lt;br /&gt;
      &amp;quot;ide_type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
      &amp;quot;config_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;snapshot_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;url&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;start_args&amp;quot;: {&lt;br /&gt;
    &amp;quot;snapshot_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;user&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;user_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
POST /xsvacer/webide/api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Запуск IDE для просмотра исходных кодов снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
PUT /api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Команда управления экземпляром IDE снимка&lt;br /&gt;
Доступные действия:&lt;br /&gt;
* &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;update_markup&amp;lt;/code&amp;gt; - обновление предупреждений и разметки (sarif-файла)&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;action&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;action&amp;lt;/code&amp;gt; - действие&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:''' пустой&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
DELETE /xsvacer/webide/api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Остановка экземпляра IDE снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:''' пустой&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Прокси для запросов экземпляра IDE снимка&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Формат идентификатора IDE ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;{тип ide}__{идентификатор конфигурации}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например, для &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;default&amp;lt;/code&amp;gt;-конфигурации Theia IDE: &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;theia__default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Конфигурация ==&lt;br /&gt;
&lt;br /&gt;
Управление настройками функциональности осуществляется с помощью конфигурационного yaml-файла &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Раздел конфигурации для управления функциональностью - &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Раздел содержит перечисление доступных конфигураций запуска экземпляров Theia IDE &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia&amp;lt;/code&amp;gt;. При наличии нескольких активных конфигураций Theia IDE пользователь сможет выбрать какую из них использовать при запуске IDE с исходными файлами снимка.&lt;br /&gt;
&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       config1:&lt;br /&gt;
         ...&lt;br /&gt;
       config2:&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' Запуск IDE основывается на запуске docker-контейнеров, содержащих соответствующие сборки IDE. Поэтому помимо настройки функциональности в разделе &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; необходимо также настроить доступ к docker-хосту в разделе &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt; ([[Help:XSvacer:Docker]]). В противном случае функциональность webide не сможет работать корректно.&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' в случае отсутствия файла &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; или отсутствии раздела &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; будет использоваться [[Help:XSvacer:Webide#Конфигурация_по_умолчанию_используемая_в_svacer|конфигурация по умолчанию]]&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация запуска Theia IDE ===&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' На этапе внедрения расширений XSvacer конфигурация функциональностей может меняться. Следите за анонсами!&lt;br /&gt;
&lt;br /&gt;
Конфигурации запуска Theia IDE добавляются в виде полей в разделе &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;. Название поля является идентификатором конфигурации запуска. Например, идентификатор по номеру используемой версии IDE:&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       1-46-0:&lt;br /&gt;
         name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
==== Базовые параметры конфигурации запуска ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию                     &lt;br /&gt;
|-&lt;br /&gt;
|disabled&lt;br /&gt;
|bool&lt;br /&gt;
|Конфигурация запуска неактивна. Неактивная конфигурация не доступна для запуска экземпляра IDE&lt;br /&gt;
|true (переопределяется в конфигурации &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;default&amp;lt;/code&amp;gt;)         &lt;br /&gt;
|-&lt;br /&gt;
|order&lt;br /&gt;
|int&lt;br /&gt;
|Порядковый номер в списке выбора конфигурации запуска&lt;br /&gt;
|0                                                        &lt;br /&gt;
|-&lt;br /&gt;
|name&lt;br /&gt;
|string&lt;br /&gt;
|Название конфигурации&lt;br /&gt;
|Theia blueprint web IDE (v1.46.0)                        &lt;br /&gt;
|-&lt;br /&gt;
|sourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке, содержащей исходные коды снимков на машине со svacer'ом&lt;br /&gt;
|${USER_CACHE_DIR}/svacer-snapshot-sources                &lt;br /&gt;
|-&lt;br /&gt;
|dockerhostsourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке, содержащей исходные коды снимков на хосте docker'а. Нужен при использовании удалённого docker-хоста, т.к. в таком случае папка с исходными кодами скорее всего будет доступна по адресу, отличающемуся от &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
|                                                         &lt;br /&gt;
|-&lt;br /&gt;
|dockerhostpathseparator&lt;br /&gt;
|string&lt;br /&gt;
|Разделитель пути на хосте docker'а. По умолчанию &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;quot;/&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
|                                                         &lt;br /&gt;
|-&lt;br /&gt;
|sariffiletemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон названия sarif-файла с предупреждениями анализатора. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|sarifFileContext]]&lt;br /&gt;
|&amp;quot;&amp;lt;nowiki&amp;gt;{{.Context.ProjectName}}.{{.Context.BranchName}}&amp;lt;/nowiki&amp;gt;.sarif&amp;quot; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры менеджера запуска IDE ====&lt;br /&gt;
&lt;br /&gt;
Конфигурация менеджера запуска IDE. На данный момент доступен только &amp;quot;стандартный&amp;quot; менеджер (&amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;type: default&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию &lt;br /&gt;
|-&lt;br /&gt;
|manager&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация менеджера запуска IDE&lt;br /&gt;
|                                     &lt;br /&gt;
|-&lt;br /&gt;
|manager/type&lt;br /&gt;
|enum: default&lt;br /&gt;
|Тип менеджера запуска IDE&lt;br /&gt;
|default                              &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры запуска docker-контейнеров с IDE ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для настройки запуска docker-контейнеров с IDE&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию               &lt;br /&gt;
|-&lt;br /&gt;
|docker/&lt;br /&gt;
|map&lt;br /&gt;
|Настройки создания docker-контейнера с IDE&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/hostid&lt;br /&gt;
|string&lt;br /&gt;
|Идентификатор хоста docker'а, описанного в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/docker/hosts&amp;lt;/code&amp;gt;. Запуск docker-контейнера с IDE будет выполнен на этом хосте&lt;br /&gt;
|default                                            &lt;br /&gt;
|-&lt;br /&gt;
|docker/containernametemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон для формирования названия контейнера IDE для выбранного снимка. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|TheiaDockerContainerStartContext]]&lt;br /&gt;
|&amp;quot;theia-1-46-&amp;lt;nowiki&amp;gt;{{.StartArgs.SnapshotID}}&amp;lt;/nowiki&amp;gt;&amp;quot;             &lt;br /&gt;
|-&lt;br /&gt;
|docker/containerconfiglabels&lt;br /&gt;
|[]map&lt;br /&gt;
|Список &amp;quot;меток&amp;quot; docker-контейнера. Дополняет список меток в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker/container/config/labels&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
 - &amp;quot;com.docker.compose.project&amp;quot;: svacer             &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры docker-образа из которого будет запущен контейнер&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/name&lt;br /&gt;
|string&lt;br /&gt;
|Название образа&lt;br /&gt;
|theia-blueprint                                    &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/tag&lt;br /&gt;
|string&lt;br /&gt;
|Тег образа&lt;br /&gt;
|1.46.0.sarif.clang                                 &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcetype&lt;br /&gt;
|enum: repository/file&lt;br /&gt;
|Тип источника для загрузки образа в docker-хост.&lt;br /&gt;
* &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;repository&amp;lt;/code&amp;gt; - будет вызван &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker pull&amp;lt;/code&amp;gt; образа &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;{image/name}:{image/tag}&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;file&amp;lt;/code&amp;gt; - будет вызван &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker load&amp;lt;/code&amp;gt; с url'ом &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;image/sourcefileurl&amp;lt;/code&amp;gt;&lt;br /&gt;
|file                                               &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcefileurl&lt;br /&gt;
|url&lt;br /&gt;
|Url откуда будет загружен docker-образ если &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;image/sourcetype == &amp;quot;file&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
Url может содержать:&lt;br /&gt;
- путь к локальному файлу: схема &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;file://&amp;lt;/code&amp;gt;&lt;br /&gt;
- http/https-адрес: схема &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;http://&amp;lt;/code&amp;gt; или &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;https://&amp;lt;/code&amp;gt;&lt;br /&gt;
|https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/&lt;br /&gt;
|map&lt;br /&gt;
|Свойства docker-контейнера&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/config.go#L70&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config/env&lt;br /&gt;
|[]string&lt;br /&gt;
|Список переменных среды, которые будут установлены в контейнере&lt;br /&gt;
|&lt;br /&gt;
 - THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;     &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры хостинга контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/hostconfig.go#L379&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/autoremove&lt;br /&gt;
|bool&lt;br /&gt;
|&lt;br /&gt;
|true                                               &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/portbindings&lt;br /&gt;
|map&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
 &amp;quot;3000/tcp&amp;quot;:                                        &lt;br /&gt;
   - hostport: 0                                    &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/networkconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Сетевые настройки контейнера. Соответствуют структуре https://github.com/moby/moby/blob/v24.0.7/api/types/network/network.go#L104&lt;br /&gt;
|                                                   &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры проверки доступности healthcheck ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для проверки доступности IDE после запуска docker-контейнера&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck&lt;br /&gt;
|map&lt;br /&gt;
|Параметры проверки доступности IDE&lt;br /&gt;
|                                     &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyretries&lt;br /&gt;
|int&lt;br /&gt;
|Количества попыток проверки до ошибки доступности&lt;br /&gt;
|10                                   &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyperiod&lt;br /&gt;
|golang duration string&lt;br /&gt;
|Интервал проверки&lt;br /&gt;
|200ms                                &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Структуры передаваемые в поля с golang-шаблонами строк ====&lt;br /&gt;
&lt;br /&gt;
 sarifFileContext {&lt;br /&gt;
     Time    time.Time&lt;br /&gt;
 	Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
 &lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 TheiaDockerContainerStartContext {&lt;br /&gt;
 	IdeID: {&lt;br /&gt;
         IdeType  string&lt;br /&gt;
         ConfigID string&lt;br /&gt;
     },&lt;br /&gt;
 	StartArgs: {&lt;br /&gt;
         SnapshotID string&lt;br /&gt;
         UserID     string&lt;br /&gt;
         User       string&lt;br /&gt;
     },&lt;br /&gt;
 	Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
 &lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация по умолчанию ===&lt;br /&gt;
&lt;br /&gt;
Данная настройка применяется по умолчанию для запуска Theia IDE, если в конфигурационном файле svacer.cfg отсутствует раздел &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
xsvacer:&lt;br /&gt;
  docker:&lt;br /&gt;
    hosts:&lt;br /&gt;
      default: # конфигурация docker-хоста&lt;br /&gt;
        type: external&lt;br /&gt;
      ...&lt;br /&gt;
&lt;br /&gt;
  webide:&lt;br /&gt;
    theia:&lt;br /&gt;
      1-46-0: &amp;amp;1-46-0&lt;br /&gt;
        disabled: true&lt;br /&gt;
        order: 0&lt;br /&gt;
        name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
        sourcesroot: ${USER_CACHE_DIR}/svacer-snapshot-sources&lt;br /&gt;
        sariffiletemplate: &amp;quot;&amp;lt;nowiki&amp;gt;{{.Context.ProjectName}}.{{.Context.BranchName}}&amp;lt;/nowiki&amp;gt;.sarif&amp;quot;&lt;br /&gt;
        manager:&lt;br /&gt;
          type: default&lt;br /&gt;
        docker:&lt;br /&gt;
          hostid: default # идентификатор используемого docker-хоста&lt;br /&gt;
          containernametemplate: &amp;quot;theia-1-46-&amp;lt;nowiki&amp;gt;{{.StartArgs.SnapshotID}}&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
          image:&lt;br /&gt;
            name: theia-blueprint&lt;br /&gt;
            tag: 1.46.0.sarif.clang&lt;br /&gt;
            sourcetype: file&lt;br /&gt;
            sourcefileurl: https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar&lt;br /&gt;
          containerconfiglabels:&lt;br /&gt;
            - &amp;quot;com.docker.compose.project&amp;quot;: svacer&lt;br /&gt;
          container:&lt;br /&gt;
            config:&lt;br /&gt;
              env:&lt;br /&gt;
                - THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
            hostconfig:&lt;br /&gt;
              autoremove: true&lt;br /&gt;
              portbindings:&lt;br /&gt;
                &amp;quot;3000/tcp&amp;quot;:&lt;br /&gt;
                  - hostport: 0&lt;br /&gt;
            networkconfig:&lt;br /&gt;
        healthcheck:&lt;br /&gt;
          starttoreadyretries: 10&lt;br /&gt;
          starttoreadyperiod: 200ms&lt;br /&gt;
      default:&lt;br /&gt;
        &amp;lt;&amp;lt;: *1-46-0&lt;br /&gt;
        order: 0&lt;br /&gt;
        disabled: false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' По умолчанию используется docker-хост с идентификатором &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;default&amp;lt;/code&amp;gt;. Согласно настройке этого хоста, по умолчанию предполагается взаимодействие с докером через unix-сокет &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt;. Соответственно пользователь, под которым запускается svacer должен иметь доступ к этому сокету (https://docs.docker.com/engine/install/linux-postinstall/).&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' При наличии раздела &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; в конфигурационном файле &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; будут применены только настройки из этого раздела. Настройки по умолчанию будут полностью проигнорированы.&lt;br /&gt;
&lt;br /&gt;
=== Изменение конфигурационных параметров с помощью переменных окружения ===&lt;br /&gt;
&lt;br /&gt;
Значения атрибутов конфигурации могут быть изменены с помощью переменных окружения &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;XSVACER_WEBIDE_THEIA_{id конфигурации ide}[_параметр]={значение параметра}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Например, для активации rootless-хоста &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/hosts/local&amp;lt;/code&amp;gt; и переключения запуска IDE с идентификатором &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;default&amp;lt;/code&amp;gt; на этот хост можно указать такие значения переменных окружения при запуске svacer'а:&lt;br /&gt;
 XSVACER_DOCKER_HOSTS_LOCAL_DISABLED=false&lt;br /&gt;
 XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_HOSTID=local&lt;br /&gt;
&lt;br /&gt;
== Очистка системы: удаление артефактов функциональности ==&lt;br /&gt;
&lt;br /&gt;
В процессе использования функциональности IDE создаются следующие артефакты:&lt;br /&gt;
# Исходные файлы снимков скачиваются в &amp;quot;корневые папки&amp;quot;, заданные в параметре &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/sourcesroot&amp;lt;/code&amp;gt;;&lt;br /&gt;
# Артефакты docker:&lt;br /&gt;
#* образы и контейнеры создаются на хостах, указанных в конфигурации docker-хостов в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/hostid&amp;lt;/code&amp;gt;;&lt;br /&gt;
#* названия docker-образов будут соответствовать параметрам в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/image&amp;lt;/code&amp;gt;;&lt;br /&gt;
#* названия docker-контейнеров будут соответствовать параметру &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/containernametemplate&amp;lt;/code&amp;gt;;&lt;br /&gt;
#* наборы меток doker-контейнеров будут содержать:&lt;br /&gt;
#*: метки, перечисленные в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/containerconfiglabels&amp;lt;/code&amp;gt;;&lt;br /&gt;
#*: метки, перечисленные в &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/container/config/labels&amp;lt;/code&amp;gt;;&lt;br /&gt;
#*: метки с названиями &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.service.id&amp;lt;/code&amp;gt;, &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.service.type&amp;lt;/code&amp;gt;, &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.theia.start_args&amp;lt;/code&amp;gt;;&lt;br /&gt;
# При использовании rootless-хоста docker'а будут созданы папки согласно [[Help:XSvacer:Docker#Специфичные настройки для rootless-хоста]].&lt;br /&gt;
&lt;br /&gt;
== Рекомендации ==&lt;br /&gt;
&lt;br /&gt;
=== Предварительная загрузка docker-образа с IDE ===&lt;br /&gt;
&lt;br /&gt;
По умолчанию параметр &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/1-46-0/docker/image/sourcefileurl&amp;lt;/code&amp;gt; содержит значение &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar&amp;lt;/code&amp;gt;. По этому адресу находится архив с docker-образом для Theia IDE.&lt;br /&gt;
&lt;br /&gt;
Если docker-образ ещё не был загружен, то загрузка начнётся при первой попытке запуска IDE. Т.к. этот процесс занимает длительное время, то запрос запуска IDE тоже будет выполняться долго.&lt;br /&gt;
&lt;br /&gt;
Для ускорения первого запуска IDE докер образ можно загрузить на хост docker'а вручную. Для этого необходимо:&lt;br /&gt;
# Скачать файл архива;&lt;br /&gt;
# Выполнить команду &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker image load -i /path/to/theia-blueprint.1.46.0.sarif.clang.tar&amp;lt;/code&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
== Информация о docker-образе Theia IDE ==&lt;br /&gt;
&lt;br /&gt;
Docker-образ, используемый по умолчанию, построен на базе [https://theia-ide.org/ Eclipse Theia IDE] версии [[https://github.com/eclipse-theia/theia-blueprint/tree/v1.46.0|1.46.0]]&lt;br /&gt;
&lt;br /&gt;
При этом была изменена компоновка расширений theia (результат выполнения &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;git diff&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
diff --git a/browser.Dockerfile b/browser.Dockerfile&lt;br /&gt;
index efe591e..a4ebb6a 100644&lt;br /&gt;
--- a/browser.Dockerfile&lt;br /&gt;
+++ b/browser.Dockerfile&lt;br /&gt;
@@ -42,7 +42,7 @@ RUN chmod g+rw /home &amp;amp;&amp;amp; \&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y wget apt-transport-https &amp;amp;&amp;amp; \&lt;br /&gt;
     wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | tee /usr/share/keyrings/adoptium.asc &amp;amp;&amp;amp; \&lt;br /&gt;
     echo &amp;quot;deb [signed-by=/usr/share/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main&amp;quot; | tee /etc/apt/sources.list.d/adoptium.list &amp;amp;&amp;amp; \&lt;br /&gt;
-    apt-get update &amp;amp;&amp;amp; apt-get install -y git openssh-client openssh-server bash libsecret-1-0 temurin-17-jdk maven &amp;amp;&amp;amp; \&lt;br /&gt;
+    apt-get update &amp;amp;&amp;amp; apt-get install -y git openssh-client openssh-server bash libsecret-1-0 clangd &amp;amp;&amp;amp; \&lt;br /&gt;
     apt-get purge -y wget &amp;amp;&amp;amp; \&lt;br /&gt;
     apt-get clean&lt;br /&gt;
&lt;br /&gt;
diff --git a/package.json b/package.json&lt;br /&gt;
index 9044595..9d0dcc8 100644&lt;br /&gt;
--- a/package.json&lt;br /&gt;
+++ b/package.json&lt;br /&gt;
@@ -54,10 +54,8 @@&lt;br /&gt;
   &amp;quot;theiaPluginsDir&amp;quot;: &amp;quot;plugins&amp;quot;,&lt;br /&gt;
   &amp;quot;theiaPlugins&amp;quot;: {&lt;br /&gt;
     &amp;quot;eclipse-theia.builtin-extension-pack&amp;quot;: &amp;quot;https://open-vsx.org/api/eclipse-theia/builtin-extension-pack/1.83.1/file/eclipse-theia.builtin-extension-pack-1.83.1.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;ms-vscode.js-debug&amp;quot;: &amp;quot;https://open-vsx.org/api/ms-vscode/js-debug/1.83.1/file/ms-vscode.js-debug-1.83.1.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;ms-vscode.js-debug-companion&amp;quot;: &amp;quot;https://open-vsx.org/api/ms-vscode/js-debug-companion/1.1.2/file/ms-vscode.js-debug-companion-1.1.2.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;vscjava.vscode-java-pack&amp;quot;: &amp;quot;https://open-vsx.org/api/vscjava/vscode-java-pack/0.25.11/file/vscjava.vscode-java-pack-0.25.11.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;vscjava.vscode-java-dependency&amp;quot;: &amp;quot;https://open-vsx.org/api/vscjava/vscode-java-dependency/0.21.2/file/vscjava.vscode-java-dependency-0.21.2.vsix&amp;quot;&lt;br /&gt;
+    &amp;quot;llvm-vs-code-extensions.vscode-clangd&amp;quot;: &amp;quot;https://open-vsx.org/api/llvm-vs-code-extensions/vscode-clangd/0.1.26/file/llvm-vs-code-extensions.vscode-clangd-0.1.26.vsix&amp;quot;,&lt;br /&gt;
+    &amp;quot;ms-sarifvscode.sarif-viewer&amp;quot;: &amp;quot;https://open-vsx.org/api/MS-SarifVSCode/sarif-viewer/3.4.2/file/MS-SarifVSCode.sarif-viewer-3.4.2.vsix&amp;quot;&lt;br /&gt;
   },&lt;br /&gt;
   &amp;quot;theiaPluginsExcludeIds&amp;quot;: [&lt;br /&gt;
     &amp;quot;ms-vscode.js-debug-companion&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Команда построения docker-образа: &lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
docker build -t theia-blueprint:1.46.0.sarif.clang -f browser.Dockerfile .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Команда экспорта docker-образа:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
docker image save theia-blueprint:1.46.0 &amp;gt; /path/to/tar/theia-blueprint.1.46.0.docker.command.tar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Известные проблемы ==&lt;br /&gt;
&lt;br /&gt;
=== При открытии sarif-файла в IDE открывается пустая панель &amp;quot;SARIF Results&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Для просмотра sarif-файла, содержащего предупреждения анализатора и разметку, используется плагин [https://open-vsx.org/extension/MS-SarifVSCode/sarif-viewer SARIF Viewer]. При просмотре sarif-файла открывается webview плагина со списком предупреждений анализатора.&lt;br /&gt;
&lt;br /&gt;
В Theia IDE для открытия webview применяется [https://developer.mozilla.org/en_US/docs/Web/API/Service_Worker_API Service Worker API]. В целях обеспечения безопасности применение Service Worker API [https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#setting_up_to_play_with_service_workers|требует], чтобы доступ к web-приложению осуществлялся по HTTPS, либо приложение размещалось на &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;localhost&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Поэтому для решения данной проблемы svacer должен открываться по https или быть доступен по адресу &amp;lt;code style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer&amp;diff=1969</id>
		<title>Help:XSvacer</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer&amp;diff=1969"/>
		<updated>2024-06-07T11:58:18Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= XSvacer - расширение функциональности svacer =&lt;br /&gt;
&lt;br /&gt;
Начиная с релиза [[Changelog#Release_9-0-0|9.0.0]] в svacer'е появились &amp;quot;расширенные функции&amp;quot;, которые могут быть активированы по требованию.&lt;br /&gt;
&lt;br /&gt;
Доступные функции:&lt;br /&gt;
* [[Help:XSvacer:Webide|webide]] - Среда разработки на базе [https://theia-ide.org/ Theia IDE], с помощью которой можно просматривать исходный код снимка, предупреждения анализатора и разметку.&lt;br /&gt;
* [[Help:XSvacer:Docker|docker]] - Вспомогательная функциональность для запуска других компонентов в docker-контейнерах.&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' по умолчанию данные функции неактивны. &lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' функциональность docker будет активирована автоматически, при запуске зависящих от неё функций.&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' На данный момент расширенные функции находятся на стадии внедрения. В последующих релизах возможно изменение форматов конфигурации и API взаимодействия с указанными функциями.&lt;br /&gt;
&lt;br /&gt;
== Активация функций ==&lt;br /&gt;
&lt;br /&gt;
Активировать функции можно, указав флаг &amp;lt;code&amp;gt;--xsvacer.features feature_name&amp;lt;/code&amp;gt; при запуске svacer'а. Флаг можно указать несколько раз, чтобы активировать несколько функций.&lt;br /&gt;
&lt;br /&gt;
Также список активных функций можно настроить в конфигурационном yaml-файле &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; в разделе &amp;lt;code&amp;gt;xsvacer.features&amp;lt;/code&amp;gt;.&lt;br /&gt;
Значением данного ключа является список строк с названиями активируемых функций:&lt;br /&gt;
 ...&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   features:&lt;br /&gt;
     - webide&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' При установке флага &amp;lt;code&amp;gt;--xsvacer.features&amp;lt;/code&amp;gt; список функций, указанный в конфигурационном файле &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;, будет проигнорирован.&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=1968</id>
		<title>Help:XSvacer:Webide</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=1968"/>
		<updated>2024-06-07T09:01:50Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Поддержка среды разработки Theia IDE =&lt;br /&gt;
 '''Примечание:''' данная функциональность входит в набор расширений XSvacer.&lt;br /&gt;
&lt;br /&gt;
Данная функциональность даёт возможность просматривать исходный код снимка с предупреждениями анализатора во внешней IDE.&lt;br /&gt;
&lt;br /&gt;
По умолчанию запускается IDE, [[#Информация_о_docker-образе_Theia_IDE|собранная]] на основе [https://theia-ide.org/ Theia IDE].&lt;br /&gt;
&lt;br /&gt;
== Активация функциональности ==&lt;br /&gt;
Для активации функциональности необходимо указать флаг &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt; при запуске svacer'а.&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' при запуске функциональности &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;webide&amp;lt;/code&amp;gt; также будет запущена функциональность &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;[[Help:XSvacer:Docker|docker]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Активации функциональности:&lt;br /&gt;
* становится доступным REST API управления IDE для просмотра снимков проектов;&lt;br /&gt;
* в пользовательском интерфейсе появляется кнопка &amp;quot;Открыть в IDE&amp;quot;;&lt;br /&gt;
* устанавливается подключение к хосту docker'а, на котором будут запускаться контейнеры с экземплярами IDE.&lt;br /&gt;
&lt;br /&gt;
== Принцип работы ==&lt;br /&gt;
&lt;br /&gt;
Функциональность запуска IDE для просмотра исходного кода снимков становится доступной пользователю, если соблюдаются условия:&lt;br /&gt;
# Функциональность активна: при запуске svacer'а указан флаг &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt;;&lt;br /&gt;
# В конфигурации функциональности &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia&amp;lt;/code&amp;gt; ([[Help:XSvacer:Webide#Конфигурация]]) есть хотя бы одна активная (&amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;disabled: false&amp;lt;/code&amp;gt;) конфигурация IDE;&lt;br /&gt;
# У пользователя svacer имеются разрешения &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;quot;Просмотр маркеров&amp;quot;&amp;lt;/code&amp;gt; (&amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;quot;Read markers&amp;quot;&amp;lt;/code&amp;gt;) и &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;quot;Экспорт разметки&amp;quot;&amp;lt;/code&amp;gt; (&amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;quot;Export markup&amp;quot;&amp;lt;/code&amp;gt;) на проект, в котором находится снимок, для которого нужно запустить IDE.&lt;br /&gt;
&lt;br /&gt;
В противном случае в пользовательском интерфейсе будет отсутствовать кнопка &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;quot;Открыть в IDE&amp;quot;&amp;lt;/code&amp;gt; (&amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;quot;Open in IDE&amp;quot;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== Запуск IDE ===&lt;br /&gt;
&lt;br /&gt;
Запуск производится путём вызова http-метода &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;POST /api/snapshots/{snapshot_id}/ide&amp;lt;/code&amp;gt; с телом запроса &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;{&amp;quot;ideId&amp;quot;: &amp;quot;идентификатор IDE&amp;quot;}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последовательность действий, выполняемых при запуске IDE:&lt;br /&gt;
&lt;br /&gt;
# Производится проверка: была ли уже запущена указанная IDE для указанного снимка:&lt;br /&gt;
#* Если запущена: производится проверка доступна ли IDE: отвечает на запросы;&lt;br /&gt;
#** Если IDE доступна: действие не требуется. Процесс запуска завершается;&lt;br /&gt;
#** Если IDE не доступна: продолжается процесс запуска. IDE будет ''перезапущена'';&lt;br /&gt;
# Создаётся &amp;quot;корневая папка снимка&amp;quot;, предназначенная для хранения исходного кода снимка и предупреждений анализатора с разметкой в виде sarif-файла. Название папки соответствует id снимка. Папка создаётся по пути заданному в параметре конфигурации IDE &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/sourcesroot&amp;lt;/code&amp;gt;;&lt;br /&gt;
# Исходный код снимка скачивается в &amp;quot;корневую папку снимка&amp;quot;;&lt;br /&gt;
# Производится экспорт маркеров и разметки в виде sarif-файла в &amp;quot;корневую папку снимка&amp;quot;. Название sarif-файла формируется с помощью шаблона, заданного в параметре конфигурации IDE &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/sariffiletemplate&amp;lt;/code&amp;gt;;&lt;br /&gt;
# Производится настройка и запуск docker-контейнера, в соответствии с настройками &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker&amp;lt;/code&amp;gt;:&lt;br /&gt;
## Проверяется наличие на docker-хосте образа IDE, указанного в &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker/image&amp;lt;/code&amp;gt;:&lt;br /&gt;
##* Если docker-образ отсутствует - он будет загружен на хост;&lt;br /&gt;
## Проверяется наличие на docker-хосте контейнера с IDE для снимка:&lt;br /&gt;
##* Если docker-контейнер не существует, то он будет создан и запущен;&lt;br /&gt;
##* Если docker-контейнер существует и находится:&lt;br /&gt;
##** в статусе &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;running&amp;lt;/code&amp;gt; - процесс запуска IDE продолжается;&lt;br /&gt;
##** в статусе &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;created&amp;lt;/code&amp;gt;,&amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;exited&amp;lt;/code&amp;gt; или &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;paused&amp;lt;/code&amp;gt; - контейнер будет запущен;&lt;br /&gt;
##** в других статусах - вернётся соответствующая ошибка и процесс запуска IDE прервётся;&lt;br /&gt;
# После успешного запуска docker-контейнера осуществляется ожидание окончания запуска процесса IDE в контейнере, в соответствии с настройками &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck&amp;lt;/code&amp;gt;:&lt;br /&gt;
#* Если за отведённое время ответ от IDE получен - процесс запуска завершается.&lt;br /&gt;
#* Если ответ не получен - вернётся ошибка &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ide not ready&amp;lt;/code&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' При возникновении ошибки на одном из этапов запуска IDE, артефакты созданные на предыдущих этапах останутся в системе. В дальнейшем они могут быть использованы при повторном запуске IDE, если причина возникновения ошибки была устранена.&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' Причиной возникновения ошибки &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ide not ready&amp;lt;/code&amp;gt; может стать высокая загруженность или недостаточная производительность docker-хоста, на котором запускается контейнер с IDE. В связи с этим, процесс IDE внутри контейнера может запускаться дольше, чем указано в настойках &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck&amp;lt;/code&amp;gt;.&lt;br /&gt;
 В случае возникновения ошибки &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ide not ready&amp;lt;/code&amp;gt; рекомендуется попытаться повторно запустить IDE через короткий промежуток времени.&lt;br /&gt;
 Ещё одной причиной возникновения данной ошибки может стать сетевая недоступность docker-контейнера, при подключении к удалённому docker-хосту. В таком случае рекомендуется:&lt;br /&gt;
 1. проверить сетевую доступность docker-хоста;&lt;br /&gt;
 2. проверить настройки биндинга docker-контейнера c IDE - &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker/container/hostconfig/portbindings&amp;lt;/code&amp;gt;. Контейнер должен быть подключён к доступному сетевому интерфейсу.&lt;br /&gt;
 3. проверить настройки фаервола на docker-хосте;&lt;br /&gt;
&lt;br /&gt;
=== Использование IDE: проксирование запросов ===&lt;br /&gt;
&lt;br /&gt;
После успешного запуска docker-контейнера IDE станут доступны ресурсы с &amp;quot;префиксом&amp;quot; &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Все запросы направленные к ресурсам &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/*&amp;lt;/code&amp;gt; будут проксироваться в соответствующий контейнер IDE.&lt;br /&gt;
&lt;br /&gt;
Например, если docker-контейнер c IDE &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;theia__default&amp;lt;/code&amp;gt; для снимка &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xxx&amp;lt;/code&amp;gt; запущен и &amp;quot;слушает&amp;quot; порт &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;35353&amp;lt;/code&amp;gt; на хосте &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker-host&amp;lt;/code&amp;gt;, то будет происходить проксирование:&lt;br /&gt;
: &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET http://docker-host:35353/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;POST http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET http://docker-host:35353/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET ws://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;GET ws://docker-host:35353/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' для запуска IDE в окне браузера нужно указать адрес &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;http[s]://svacer-host/xvacer/webide/snapshots/{snapshot_id}/{ide_id}/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. '''Завершающий слеш обязателен!'''&lt;br /&gt;
&lt;br /&gt;
=== Перезапуск IDE ===&lt;br /&gt;
&lt;br /&gt;
В процессе работы svacer следит за состоянием запущенных IDE. При попытке повторного запуска IDE проверяется её доступность: если IDE отвечает на запросы, то повторный запуск не производится и обработка запроса завершается.&lt;br /&gt;
&lt;br /&gt;
Также работоспособность IDE контролируется при использовании IDE в момент проксирования запросов в docker-контейнер: если IDE доступна, то запрос проксируется.&lt;br /&gt;
&lt;br /&gt;
Если IDE перестанет отвечать на запросы, то будет произведена попытка её перезапуска. В этом случае происходит та же последовательность действий, что и при [[Help:XSvacer:Webide#Запуск IDE|первоначальном запуске IDE]].&lt;br /&gt;
&lt;br /&gt;
Зачастую потеря связи обусловлена остановкой docker-контейнера с IDE. В таком случае docker-контейнер будет перезапущен.&lt;br /&gt;
&lt;br /&gt;
Если же недоступность IDE обусловлена другими причинами, то запрос на запуск/проксирование продолжит возвращать ошибку, до устранения причин неработоспособности.&lt;br /&gt;
&lt;br /&gt;
=== Остановка IDE ===&lt;br /&gt;
&lt;br /&gt;
Запуск производится путём вызова http-метода &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;DELETE /api/snapshots/{snapshot_id}/ide&amp;lt;/code&amp;gt; с телом запроса &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;{&amp;quot;ideId&amp;quot;: &amp;quot;идентификатор IDE&amp;quot;}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В ходе обработки запроса останавливается docker-контейнер IDE.&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' По умолчанию установлен параметр конфигурации &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/default/docker/container/hostconfig/autoremove: true&amp;lt;/code&amp;gt;. Это означает, что при после остановки docker-контейнер будет автоматически удалён.&lt;br /&gt;
 Чтобы изменить это поведение, настройка &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/default/{id конфигурации}/container/hostconfig/autoremove&amp;lt;/code&amp;gt; должна быть установлена в &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;false&amp;lt;/code&amp;gt; '''на момент запуска docker-контейнера IDE'''. Это можно сделать, например, установив значение переменной окружения &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_CONTAINER_HOSTCONFIG_AUTOREMOVE=false&amp;lt;/code&amp;gt;.&lt;br /&gt;
 '''!!!Сейчас установка &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;autoremove: false&amp;lt;/code&amp;gt; вызывает ошибку запуска svacer!!! Не используйте данную настройку до исправления'''&lt;br /&gt;
&lt;br /&gt;
 '''Примечание!''' При корректной остановке (например &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;SIGTERM&amp;lt;/code&amp;gt;) svacer автоматически остановит все запущенные docker-контейнеры IDE&lt;br /&gt;
&lt;br /&gt;
=== Подключение к IDE после некорректного завершениея svacer ===&lt;br /&gt;
&lt;br /&gt;
При запуске svacer осуществляет поиск запущенных docker-контейнеров IDE на доступных docker-хостах.&lt;br /&gt;
&lt;br /&gt;
При восстановлении связи с запущенными docker-контейнерами IDE и последующей корректной остановке svacer'а, все docker-контейнеры IDE будут остановлены.&lt;br /&gt;
&lt;br /&gt;
== REST API для работы с IDE ==&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' На этапе внедрения расширений XSvacer REST API может меняться. Следите за анонсами!&lt;br /&gt;
&lt;br /&gt;
После активации функциональности становятся доступны http-ресурсы для управления IDE снимками:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | REST API управления IDE&lt;br /&gt;
|-&lt;br /&gt;
!Ресурс&lt;br /&gt;
!Описание                                                &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
GET /xsvacer/webide/api/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Получение списка доступных для запуска IDE.&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;order&amp;quot;: 0&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;id&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
:&amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;name&amp;lt;/code&amp;gt; - название IDE&lt;br /&gt;
:&amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;order&amp;lt;/code&amp;gt; - порядковый номер IDE в списке&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
GET /xsvacer/webide/api/snapshots/{snapshot_id}/ide/{ide_id}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Запрос описания экземпляра IDE, запущенного для снимка. &lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
:&amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ide_id&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;id&amp;quot;: {&lt;br /&gt;
    &amp;quot;ide_id&amp;quot;: {&lt;br /&gt;
      &amp;quot;ide_type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
      &amp;quot;config_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;snapshot_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;url&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;start_args&amp;quot;: {&lt;br /&gt;
    &amp;quot;snapshot_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;user&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;user_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
POST /xsvacer/webide/api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Запуск IDE для просмотра исходных кодов снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
PUT /api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Команда управления экземпляром IDE снимка&lt;br /&gt;
Доступные действия:&lt;br /&gt;
* &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;update_markup&amp;lt;/code&amp;gt; - обновление предупреждений и разметки (sarif-файла)&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;action&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;action&amp;lt;/code&amp;gt; - действие&lt;br /&gt;
:&amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:''' пустой&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
DELETE /xsvacer/webide/api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Остановка экземпляра IDE снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:''' пустой&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Прокси для запросов экземпляра IDE снимка&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Формат идентификатора IDE ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;{тип ide}__{идентификатор конфигурации}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например для &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;default&amp;lt;/code&amp;gt;-конфигурации Theia IDE: &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;theia__default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Конфигурация ==&lt;br /&gt;
&lt;br /&gt;
Управление настройками функциональности осуществляется с помощью конфигурационного yaml-файла &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Раздел конфигурации для управления функциональностью - &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Раздел содержит перечисление настроек доступных конфигураций для запуска экземпляров Theia IDE &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia&amp;lt;/code&amp;gt;. При наличии нескольких активных конфигураций запуска Theia IDE пользователь сможет выбрать какую из них использовать при запуске IDE с исходными файлами снимка.&lt;br /&gt;
&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       config1:&lt;br /&gt;
         ...&lt;br /&gt;
       config2:&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' Запуск IDE основывается на запуске docker-контейнеров, содержащих соответствующие сборки IDE. Поэтому помимо настройки функциональности в разделе &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; необходимо также настроить доступ к docker-хосту в разделе &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt; ([[Help:XSvacer:Docker]]). В противном случае функциональность webide не сможет работать корректно.&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' в случае отсутствия файла &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; или отсутствии раздела &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;, будет использоваться [[Help:XSvacer:Webide#Конфигурация_по_умолчанию_используемая_в_svacer|конфигурация по умолчанию]]&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация запуска Theia IDE ===&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' На этапе внедрения расширений XSvacer конфигурация функциональностей может меняться. Следите за анонсами!&lt;br /&gt;
&lt;br /&gt;
Конфигурации запуска Theia IDE добавляются в виде полей в разделе &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;. Название поля является идентификатором конфигурации запуска. Например идентификатор по номеру используемой версии IDE:&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       1-46-0:&lt;br /&gt;
         name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
==== Базовые параметры конфигурации запуска ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию                     &lt;br /&gt;
|-&lt;br /&gt;
|disabled&lt;br /&gt;
|bool&lt;br /&gt;
|Конфигурация запуска неактивна. Неактивная конфигурация не доступна для запуска экземпляра IDE&lt;br /&gt;
|true (переопределяется в конфигурации &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;default&amp;lt;/code&amp;gt;)         &lt;br /&gt;
|-&lt;br /&gt;
|order&lt;br /&gt;
|int&lt;br /&gt;
|Порядковый номер в списке выбора конфигурации запуска&lt;br /&gt;
|0                                                        &lt;br /&gt;
|-&lt;br /&gt;
|name&lt;br /&gt;
|string&lt;br /&gt;
|Название конфигурации&lt;br /&gt;
|Theia blueprint web IDE (v1.46.0)                        &lt;br /&gt;
|-&lt;br /&gt;
|sourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке содержащей исходные коды снимков на машине со svacer'ом&lt;br /&gt;
|${USER_CACHE_DIR}/svacer-snapshot-sources                &lt;br /&gt;
|-&lt;br /&gt;
|dockerhostsourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке содержащей исходные коды снимков на хосте docker'а. Нужен при использовании удалённого docker-хоста, т.к. в таком случае папка с исходными кодами скорее всего будет доступна по адресу, отличающемуся от &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
|                                                         &lt;br /&gt;
|-&lt;br /&gt;
|dockerhostpathseparator&lt;br /&gt;
|string&lt;br /&gt;
|Разделитель пути на хосте docker'а. По умолчанию &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;quot;/&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
|                                                         &lt;br /&gt;
|-&lt;br /&gt;
|sariffiletemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон названия sarif-файла с предупреждениями анализатора. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|sarifFileContext]]&lt;br /&gt;
|&amp;quot;&amp;lt;nowiki&amp;gt;{{.Context.ProjectName}}.{{.Context.BranchName}}&amp;lt;/nowiki&amp;gt;.sarif&amp;quot; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры менеджера запуска IDE ====&lt;br /&gt;
&lt;br /&gt;
Конфигурация менеджера запуска IDE. На данный момент доступен только &amp;quot;стандартный&amp;quot; менеджер (&amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;type: default&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию &lt;br /&gt;
|-&lt;br /&gt;
|manager&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация менеджера запуска IDE&lt;br /&gt;
|                                     &lt;br /&gt;
|-&lt;br /&gt;
|manager/type&lt;br /&gt;
|enum: default&lt;br /&gt;
|Тип менеджера запуска IDE&lt;br /&gt;
|default                              &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры запуска docker-контейнеров с IDE ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для настройки запуска docker-контейнеров с IDE&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию               &lt;br /&gt;
|-&lt;br /&gt;
|docker/&lt;br /&gt;
|map&lt;br /&gt;
|Настройки создания docker-контейнера с IDE&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/hostid&lt;br /&gt;
|string&lt;br /&gt;
|Идентификатор хоста docker'а, описанного в &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/docker/hosts&amp;lt;/code&amp;gt;. Запуск docker-контейнера с IDE будет выполнен на этом хосте&lt;br /&gt;
|default                                            &lt;br /&gt;
|-&lt;br /&gt;
|docker/containernametemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон для формирования названия контейнера IDE для выбранного снимка. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|TheiaDockerContainerStartContext]]&lt;br /&gt;
|&amp;quot;theia-1-46-&amp;lt;nowiki&amp;gt;{{.StartArgs.SnapshotID}}&amp;lt;/nowiki&amp;gt;&amp;quot;             &lt;br /&gt;
|-&lt;br /&gt;
|docker/containerconfiglabels&lt;br /&gt;
|[]map&lt;br /&gt;
|Список &amp;quot;меток&amp;quot; docker-контейнера. Дополняет список меток в &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker/container/config/labels&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
 - &amp;quot;com.docker.compose.project&amp;quot;: svacer             &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры docker-образа из которого будет запущен контейнер&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/name&lt;br /&gt;
|string&lt;br /&gt;
|Название образа&lt;br /&gt;
|theia-blueprint                                    &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/tag&lt;br /&gt;
|string&lt;br /&gt;
|Тег образа&lt;br /&gt;
|1.46.0.sarif.clang                                 &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcetype&lt;br /&gt;
|enum: repository/file&lt;br /&gt;
|Тип источника для загрузки образа в docker-хост.&lt;br /&gt;
* &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;repository&amp;lt;/code&amp;gt; - будет вызван &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker pull&amp;lt;/code&amp;gt; образа &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;{image/name}:{image/tag}&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;file&amp;lt;/code&amp;gt; - будет вызван &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker load&amp;lt;/code&amp;gt; с url'ом &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;image/sourcefileurl&amp;lt;/code&amp;gt;&lt;br /&gt;
|file                                               &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcefileurl&lt;br /&gt;
|url&lt;br /&gt;
|Url откуда будет загружен docker-образ если &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;image/sourcetype == &amp;quot;file&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
Url может содержать:&lt;br /&gt;
- путь к локальному файлу: схема &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;file://&amp;lt;/code&amp;gt;&lt;br /&gt;
- http/https-адрес: схема &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;http://&amp;lt;/code&amp;gt; или &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;https://&amp;lt;/code&amp;gt;&lt;br /&gt;
|https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/&lt;br /&gt;
|map&lt;br /&gt;
|Свойства docker-контейнера&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/config.go#L70&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config/env&lt;br /&gt;
|[]string&lt;br /&gt;
|Список переменных среды, которые будут установлены в контейнере&lt;br /&gt;
|&lt;br /&gt;
 - THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;     &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры хостинга контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/hostconfig.go#L379&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/autoremove&lt;br /&gt;
|bool&lt;br /&gt;
|&lt;br /&gt;
|true                                               &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/portbindings&lt;br /&gt;
|map&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
 &amp;quot;3000/tcp&amp;quot;:                                        &lt;br /&gt;
   - hostport: 0                                    &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/networkconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Сетевые настройки контейнера. Соответствуют структуре https://github.com/moby/moby/blob/v24.0.7/api/types/network/network.go#L104&lt;br /&gt;
|                                                   &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры проверки доступности healthcheck ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для проверки доступности IDE после запуска docker-контейнера&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck&lt;br /&gt;
|map&lt;br /&gt;
|Параметры проверки доступности IDE&lt;br /&gt;
|                                     &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyretries&lt;br /&gt;
|int&lt;br /&gt;
|Количества попыток проверки до ошибки доступности&lt;br /&gt;
|10                                   &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyperiod&lt;br /&gt;
|golang duration string&lt;br /&gt;
|Интервал проверки&lt;br /&gt;
|200ms                                &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Структуры передаваемые в поля с golang-шаблонами строк ====&lt;br /&gt;
&lt;br /&gt;
 sarifFileContext {&lt;br /&gt;
     Time    time.Time&lt;br /&gt;
 	Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
 &lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 TheiaDockerContainerStartContext {&lt;br /&gt;
 	IdeID: {&lt;br /&gt;
         IdeType  string&lt;br /&gt;
         ConfigID string&lt;br /&gt;
     },&lt;br /&gt;
 	StartArgs: {&lt;br /&gt;
         SnapshotID string&lt;br /&gt;
         UserID     string&lt;br /&gt;
         User       string&lt;br /&gt;
     },&lt;br /&gt;
 	Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
 &lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация по умолчанию используемая в svacer ===&lt;br /&gt;
&lt;br /&gt;
Данная настройка применяется по умолчанию для запуска Theia IDE, если в конфигурационном файле svacer.cfg отсутствует раздел &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
xsvacer:&lt;br /&gt;
  docker:&lt;br /&gt;
    hosts:&lt;br /&gt;
      default: # конфигурация docker-хоста&lt;br /&gt;
        type: external&lt;br /&gt;
      ...&lt;br /&gt;
&lt;br /&gt;
  webide:&lt;br /&gt;
    theia:&lt;br /&gt;
      1-46-0: &amp;amp;1-46-0&lt;br /&gt;
        disabled: true&lt;br /&gt;
        order: 0&lt;br /&gt;
        name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
        sourcesroot: ${USER_CACHE_DIR}/svacer-snapshot-sources&lt;br /&gt;
        sariffiletemplate: &amp;quot;&amp;lt;nowiki&amp;gt;{{.Context.ProjectName}}.{{.Context.BranchName}}&amp;lt;/nowiki&amp;gt;.sarif&amp;quot;&lt;br /&gt;
        manager:&lt;br /&gt;
          type: default&lt;br /&gt;
        docker:&lt;br /&gt;
          hostid: default # идентификатор используемого docker-хоста&lt;br /&gt;
          containernametemplate: &amp;quot;theia-1-46-&amp;lt;nowiki&amp;gt;{{.StartArgs.SnapshotID}}&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
          image:&lt;br /&gt;
            name: theia-blueprint&lt;br /&gt;
            tag: 1.46.0.sarif.clang&lt;br /&gt;
            sourcetype: file&lt;br /&gt;
            sourcefileurl: https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar&lt;br /&gt;
          containerconfiglabels:&lt;br /&gt;
            - &amp;quot;com.docker.compose.project&amp;quot;: svacer&lt;br /&gt;
          container:&lt;br /&gt;
            config:&lt;br /&gt;
              env:&lt;br /&gt;
                - THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
            hostconfig:&lt;br /&gt;
              autoremove: true&lt;br /&gt;
              portbindings:&lt;br /&gt;
                &amp;quot;3000/tcp&amp;quot;:&lt;br /&gt;
                  - hostport: 0&lt;br /&gt;
            networkconfig:&lt;br /&gt;
        healthcheck:&lt;br /&gt;
          starttoreadyretries: 10&lt;br /&gt;
          starttoreadyperiod: 200ms&lt;br /&gt;
      default:&lt;br /&gt;
        &amp;lt;&amp;lt;: *1-46-0&lt;br /&gt;
        order: 0&lt;br /&gt;
        disabled: false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' По умолчанию используется docker-хост с идентификатором &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;default&amp;lt;/code&amp;gt;. Согласно настройке этого хоста, по умолчанию предполагается взаимодействие с докером через unix-сокет &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt;. Соответственно пользователь, под которым запускается svacer должен иметь доступ к этому сокету (https://docs.docker.com/engine/install/linux-postinstall/).&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' При наличии раздела &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; в конфигурационном файле &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;, будут применены только настройки из этого раздела. Настройки по умолчанию будут полностью проигнорированы.&lt;br /&gt;
&lt;br /&gt;
=== Изменение конфигурационных параметров с помощью переменных окружения ===&lt;br /&gt;
&lt;br /&gt;
Значения атрибутов конфигурации могут быть изменены с помощью переменных окружения &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;XSVACER_WEBIDE_THEIA_{id конфигурации ide}[_параметр]={значение параметра}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например, для активации rootless-хоста &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/hosts/local&amp;lt;/code&amp;gt; и переключения запуска IDE с идентификатором &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;default&amp;lt;/code&amp;gt; на этот хост, можно указать такие значения переменных окружения при запуске svacer'а:&lt;br /&gt;
 XSVACER_DOCKER_HOSTS_LOCAL_DISABLED=false&lt;br /&gt;
 XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_HOSTID=local&lt;br /&gt;
&lt;br /&gt;
== Очистка системы: удаление артефактов функциональности ==&lt;br /&gt;
&lt;br /&gt;
В процессе использования функциональности IDE создаются следующие артефакты:&lt;br /&gt;
# Исходные файлы снимков скачиваются в &amp;quot;корневые папки&amp;quot; заданные в параметре &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
# Артефакты docker:&lt;br /&gt;
#* образы и контейнеры создаются на хостах, указанных в конфигурации docker-хостов, указанных в &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/hostid&amp;lt;/code&amp;gt;&lt;br /&gt;
#* названия docker-образов будут соответствовать параметрам в &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/image&amp;lt;/code&amp;gt;&lt;br /&gt;
#* названия docker-контейнеров будут соответствовать параметру &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/containernametemplate&amp;lt;/code&amp;gt;&lt;br /&gt;
#* наборы меток doker-контейнеров будут содержать:&lt;br /&gt;
#*: метки перечисленные в &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/containerconfiglabels&amp;lt;/code&amp;gt;&lt;br /&gt;
#*: метки перечисленные в &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/container/config/labels&amp;lt;/code&amp;gt;&lt;br /&gt;
#*: метки с названиями &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.service.id&amp;lt;/code&amp;gt;, &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.service.type&amp;lt;/code&amp;gt;, &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;svacer.theia.start_args&amp;lt;/code&amp;gt;&lt;br /&gt;
# При использовании rootless-хоста docker'а будут созданы папки, согласно [[Help:XSvacer:Docker#Специфичные настройки для rootless-хоста]]&lt;br /&gt;
&lt;br /&gt;
== Рекомендации ==&lt;br /&gt;
&lt;br /&gt;
=== Предварительная загрузка docker-образа с IDE ===&lt;br /&gt;
&lt;br /&gt;
По умолчанию параметр &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;xsvacer/webide/theia/1-46-0/docker/image/sourcefileurl&amp;lt;/code&amp;gt; содержит значение &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar&amp;lt;/code&amp;gt;. По этому адресу находится архив с docker-образом для Theia IDE.&lt;br /&gt;
&lt;br /&gt;
Если docker-образ ещё не был загружен, то загрузка начнётся при первой попытке запуска IDE. Т.к. этот процесс занимает длительное время, то запрос запуска IDE тоже будет выполняться долго.&lt;br /&gt;
&lt;br /&gt;
Для ускорения первого запуска IDE, докер образ можно загрузить на хост docker'а вручную. Для этого необходимо:&lt;br /&gt;
# Скачать файл архива;&lt;br /&gt;
# Выполнить команду &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;docker image load -i /path/to/tar/theia-blueprint.1.46.0.sarif.clang.tar&amp;lt;/code&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
== Информация о docker-образе Theia IDE ==&lt;br /&gt;
&lt;br /&gt;
Docker-образ, используемый по умолчанию, построен на базе [https://theia-ide.org/ Eclipse Theia IDE] версии [[https://github.com/eclipse-theia/theia-blueprint/tree/v1.46.0|1.46.0]]&lt;br /&gt;
&lt;br /&gt;
При этом была изменена компоновка расширений theia (результат выполнения &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;git diff&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
diff --git a/browser.Dockerfile b/browser.Dockerfile&lt;br /&gt;
index efe591e..a4ebb6a 100644&lt;br /&gt;
--- a/browser.Dockerfile&lt;br /&gt;
+++ b/browser.Dockerfile&lt;br /&gt;
@@ -42,7 +42,7 @@ RUN chmod g+rw /home &amp;amp;&amp;amp; \&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y wget apt-transport-https &amp;amp;&amp;amp; \&lt;br /&gt;
     wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | tee /usr/share/keyrings/adoptium.asc &amp;amp;&amp;amp; \&lt;br /&gt;
     echo &amp;quot;deb [signed-by=/usr/share/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main&amp;quot; | tee /etc/apt/sources.list.d/adoptium.list &amp;amp;&amp;amp; \&lt;br /&gt;
-    apt-get update &amp;amp;&amp;amp; apt-get install -y git openssh-client openssh-server bash libsecret-1-0 temurin-17-jdk maven &amp;amp;&amp;amp; \&lt;br /&gt;
+    apt-get update &amp;amp;&amp;amp; apt-get install -y git openssh-client openssh-server bash libsecret-1-0 clangd &amp;amp;&amp;amp; \&lt;br /&gt;
     apt-get purge -y wget &amp;amp;&amp;amp; \&lt;br /&gt;
     apt-get clean&lt;br /&gt;
&lt;br /&gt;
diff --git a/package.json b/package.json&lt;br /&gt;
index 9044595..9d0dcc8 100644&lt;br /&gt;
--- a/package.json&lt;br /&gt;
+++ b/package.json&lt;br /&gt;
@@ -54,10 +54,8 @@&lt;br /&gt;
   &amp;quot;theiaPluginsDir&amp;quot;: &amp;quot;plugins&amp;quot;,&lt;br /&gt;
   &amp;quot;theiaPlugins&amp;quot;: {&lt;br /&gt;
     &amp;quot;eclipse-theia.builtin-extension-pack&amp;quot;: &amp;quot;https://open-vsx.org/api/eclipse-theia/builtin-extension-pack/1.83.1/file/eclipse-theia.builtin-extension-pack-1.83.1.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;ms-vscode.js-debug&amp;quot;: &amp;quot;https://open-vsx.org/api/ms-vscode/js-debug/1.83.1/file/ms-vscode.js-debug-1.83.1.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;ms-vscode.js-debug-companion&amp;quot;: &amp;quot;https://open-vsx.org/api/ms-vscode/js-debug-companion/1.1.2/file/ms-vscode.js-debug-companion-1.1.2.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;vscjava.vscode-java-pack&amp;quot;: &amp;quot;https://open-vsx.org/api/vscjava/vscode-java-pack/0.25.11/file/vscjava.vscode-java-pack-0.25.11.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;vscjava.vscode-java-dependency&amp;quot;: &amp;quot;https://open-vsx.org/api/vscjava/vscode-java-dependency/0.21.2/file/vscjava.vscode-java-dependency-0.21.2.vsix&amp;quot;&lt;br /&gt;
+    &amp;quot;llvm-vs-code-extensions.vscode-clangd&amp;quot;: &amp;quot;https://open-vsx.org/api/llvm-vs-code-extensions/vscode-clangd/0.1.26/file/llvm-vs-code-extensions.vscode-clangd-0.1.26.vsix&amp;quot;,&lt;br /&gt;
+    &amp;quot;ms-sarifvscode.sarif-viewer&amp;quot;: &amp;quot;https://open-vsx.org/api/MS-SarifVSCode/sarif-viewer/3.4.2/file/MS-SarifVSCode.sarif-viewer-3.4.2.vsix&amp;quot;&lt;br /&gt;
   },&lt;br /&gt;
   &amp;quot;theiaPluginsExcludeIds&amp;quot;: [&lt;br /&gt;
     &amp;quot;ms-vscode.js-debug-companion&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Команда построения docker-образа: &lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
docker build -t theia-blueprint:1.46.0.sarif.clang -f browser.Dockerfile .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Команда экспорта docker-образа:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
docker image save theia-blueprint:1.46.0 &amp;gt; /path/to/tar/theia-blueprint.1.46.0.docker.command.tar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Известные проблемы ==&lt;br /&gt;
&lt;br /&gt;
Список известных проблем и их решение&lt;br /&gt;
&lt;br /&gt;
=== При открытии sarif-файла в IDE открывается пустая панель &amp;quot;SARIF Results&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Для просмотра sarif-файла содержащего предупреждения анализатора и разметку используется плагин [https://open-vsx.org/extension/MS-SarifVSCode/sarif-viewer SARIF Viewer]. При просмотре sarif-файла открывается webview плагина, со списком предупреждений анализатора.&lt;br /&gt;
&lt;br /&gt;
В Theia IDE для открытия webview применяется [https://developer.mozilla.org/en_US/docs/Web/API/Service_Worker_API Service Worker API]. В целях обеспечения безопасности  применение Service Worker API [https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#setting_up_to_play_with_service_workers|требует], чтобы доступ к web-приложению осуществлялся по HTTPS, либо приложение размещалось на &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;localhost&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Поэтому для решения данной проблемы svacer должен открываться по https, либо быть доступен по адресу &amp;lt;code  style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;http://localhost:...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=1967</id>
		<title>Help:XSvacer:Webide</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=1967"/>
		<updated>2024-06-06T13:27:18Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Поддержка среды разработки Theia IDE =&lt;br /&gt;
 '''Примечание:''' данная функциональность входит в набор расширений XSvacer.&lt;br /&gt;
&lt;br /&gt;
Данная функциональность даёт возможность просматривать исходный код снимка с предупреждениями анализатора во внешней IDE.&lt;br /&gt;
&lt;br /&gt;
По умолчанию запускается IDE собранная на основе Theia IDE (https://theia-ide.org/).&lt;br /&gt;
&lt;br /&gt;
== Активация функциональности ==&lt;br /&gt;
Для активации функциональности необходимо указать флаг &amp;lt;code&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt; при запуске svacer'а.&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' при запуске функциональности &amp;lt;code&amp;gt;webide&amp;lt;/code&amp;gt; также будет запущена функциональность &amp;lt;code&amp;gt;[[Help:XSvacer:Docker|docker]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Активации функциональности:&lt;br /&gt;
* становится доступным REST API управления IDE для просмотра снимков проектов;&lt;br /&gt;
* в пользовательском интерфейсе появляется кнопка &amp;quot;Открыть в IDE&amp;quot;;&lt;br /&gt;
* устанавливается подключение к хосту docker'а, на котором будут запускаться контейнеры с экземплярами IDE.&lt;br /&gt;
&lt;br /&gt;
== REST API для работы с IDE ==&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' На этапе внедрения расширений XSvacer REST API может меняться. Следите за анонсами!&lt;br /&gt;
&lt;br /&gt;
После активации функциональности становятся доступны http-ресурсы для управления IDE снимками:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | REST API управления IDE&lt;br /&gt;
|-&lt;br /&gt;
!Ресурс&lt;br /&gt;
!Описание                                                &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
GET /xsvacer/webide/api/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Получение списка доступных для запуска IDE.&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;order&amp;quot;: 0&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
:&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; - название IDE&lt;br /&gt;
:&amp;lt;code&amp;gt;order&amp;lt;/code&amp;gt; - порядковый номер IDE в списке&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
GET /xsvacer/webide/api/snapshots/{snapshot_id}/ide/{ide_id}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Запрос описания экземпляра IDE, запущенного для снимка. &lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
:&amp;lt;code&amp;gt;ide_id&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;id&amp;quot;: {&lt;br /&gt;
    &amp;quot;ide_id&amp;quot;: {&lt;br /&gt;
      &amp;quot;ide_type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
      &amp;quot;config_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;snapshot_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;url&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;start_args&amp;quot;: {&lt;br /&gt;
    &amp;quot;snapshot_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;user&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;user_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
POST /xsvacer/webide/api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Запуск IDE для просмотра исходных кодов снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
PUT /api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Команда управления экземпляром IDE снимка&lt;br /&gt;
Доступные действия:&lt;br /&gt;
* &amp;lt;code&amp;gt;update_markup&amp;lt;/code&amp;gt; - обновление предупреждений и разметки (sarif-файла)&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;action&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt; - действие&lt;br /&gt;
:&amp;lt;code&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:''' пустой&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
DELETE /xsvacer/webide/api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Остановка экземпляра IDE снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:''' пустой&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Прокси для запросов экземпляра IDE снимка&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Формат идентификатора IDE ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{тип ide}__{идентификатор конфигурации}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например для &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;-конфигурации Theia IDE: &amp;lt;code&amp;gt;theia__default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Принцип работы ==&lt;br /&gt;
&lt;br /&gt;
Функциональность запуска IDE для просмотра исходного кода снимков становится доступной пользователю, если соблюдаются условия:&lt;br /&gt;
# Функциональность активна: при запуске svacer'а указан флаг &amp;lt;code&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt;;&lt;br /&gt;
# В конфигурации функциональности &amp;lt;code&amp;gt;xsvacer/webide/theia&amp;lt;/code&amp;gt; ([[Help:XSvacer:Webide#Конфигурация]]) есть хотя бы одна активная (&amp;lt;code&amp;gt;disabled: false&amp;lt;/code&amp;gt;) конфигурация IDE;&lt;br /&gt;
# У пользователя svacer имеются разрешения &amp;lt;code&amp;gt;&amp;quot;Просмотр маркеров&amp;quot;&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;&amp;quot;Read markers&amp;quot;&amp;lt;/code&amp;gt;) и &amp;lt;code&amp;gt;&amp;quot;Экспорт разметки&amp;quot;&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;&amp;quot;Export markup&amp;quot;&amp;lt;/code&amp;gt;) на проект, в котором находится снимок, для которого нужно запустить IDE.&lt;br /&gt;
&lt;br /&gt;
В противном случае в пользовательском интерфейсе будет отсутствовать кнопка &amp;lt;code&amp;gt;&amp;quot;Открыть в IDE&amp;quot;&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;&amp;quot;Open in IDE&amp;quot;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== Запуск IDE ===&lt;br /&gt;
&lt;br /&gt;
Запуск производится путём вызова http-метода &amp;lt;code&amp;gt;POST /api/snapshots/{snapshot_id}/ide&amp;lt;/code&amp;gt; с телом запроса &amp;lt;code&amp;gt;{&amp;quot;ideId&amp;quot;: &amp;quot;идентификатор IDE&amp;quot;}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последовательность действий, выполняемых при запуске IDE:&lt;br /&gt;
&lt;br /&gt;
# Производится проверка: была ли уже запущена указанная IDE для указанного снимка;&lt;br /&gt;
#* Если запущена: производится проверка: доступна ли IDE: отвечает на запросы;&lt;br /&gt;
#** Если IDE доступна: действие не требуется. Процесс запуска завершается;&lt;br /&gt;
#** Если IDE не доступна: продолжается процесс запуска. IDE будет ''перезапущена'';&lt;br /&gt;
# Создаётся &amp;quot;корневая папка снимка&amp;quot;, предназначенная для хранения исходного кода снимка и предупреждений анализатора с разметкой в виде sarif-файла. Название папки соответствует id снимка. Папка создаётся по пути заданному в параметре конфигурации IDE &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/sourcesroot&amp;lt;/code&amp;gt;;&lt;br /&gt;
# Исходный код снимка скачивается в &amp;quot;корневую папку снимка&amp;quot;;&lt;br /&gt;
# Производится экспорт маркеров и разметки в виде sarif-файла в &amp;quot;корневую папку снимка&amp;quot;. Название sarif-файла формируется с помощью шаблона, заданного в параметре конфигурации IDE &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/sariffiletemplate&amp;lt;/code&amp;gt;;&lt;br /&gt;
# Производится настройка и запуск docker-контейнера, в соответствии с настройками &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker&amp;lt;/code&amp;gt;;&lt;br /&gt;
## Проверяется наличие на docker-хосте образа IDE, указанного в &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker/image&amp;lt;/code&amp;gt;;&lt;br /&gt;
##* Если docker-образ отсутствует - он будет загружен на хост;&lt;br /&gt;
## Проверяется наличие на docker-хосте контейнера с IDE для снимка;&lt;br /&gt;
##* Если docker-контейнер не существует, то он будет создан и запущен;&lt;br /&gt;
##* Если docker-контейнер существует и находится&lt;br /&gt;
##** в статусе &amp;lt;code&amp;gt;running&amp;lt;/code&amp;gt; - процесс запуска IDE продолжается;&lt;br /&gt;
##** в статусе &amp;lt;code&amp;gt;created&amp;lt;/code&amp;gt;,&amp;lt;code&amp;gt;exited&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;paused&amp;lt;/code&amp;gt; - контейнер будет запущен;&lt;br /&gt;
##** в других статусах - вернётся соответствующая ошибка и процесс запуска IDE прервётся;&lt;br /&gt;
# После успешного запуска docker-контейнера осуществляется ожидание окончания запуска процесса IDE в контейнере, в соответствии с настройками &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck&amp;lt;/code&amp;gt;;&lt;br /&gt;
#* Если за отведённое время ответ от IDE получен - процесс запуска завершается.&lt;br /&gt;
#* Если ответ не получен - вернётся ошибка &amp;lt;code&amp;gt;ide not ready&amp;lt;/code&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' При возникновении ошибки на одном из этапов запуска IDE, артефакты созданные на предыдущих этапах останутся в системе. В дальнейшем они могут быть использованы при повторном запуске IDE, если причина возникновения ошибки была устранена.&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' Причиной возникновения ошибки &amp;lt;code&amp;gt;ide not ready&amp;lt;/code&amp;gt; может стать высокая загруженность или недостаточная производительность docker-хоста, на котором запускается контейнер с IDE. В связи с этим, процесс IDE внутри контейнера может запускаться дольше, чем указано в настойках &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck&amp;lt;/code&amp;gt;.&lt;br /&gt;
 В случае возникновения ошибки &amp;lt;code&amp;gt;ide not ready&amp;lt;/code&amp;gt; рекомендуется попытаться повторно запустить IDE через короткий промежуток времени.&lt;br /&gt;
 Ещё одной причиной возникновения данной ошибки может стать сетевая недоступность docker-контейнера, при подключении к удалённому docker-хосту. В таком случае рекомендуется:&lt;br /&gt;
 1. проверить сетевую доступность docker-хоста;&lt;br /&gt;
 2. проверить настройки биндинга docker-контейнера c IDE - &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker/container/hostconfig/portbindings&amp;lt;/code&amp;gt;. Контейнер должен быть подключён к доступному сетевому интерфейсу.&lt;br /&gt;
 3. проверить настройки фаервола на docker-хосте;&lt;br /&gt;
&lt;br /&gt;
=== Использование IDE: проксирование запросов ===&lt;br /&gt;
&lt;br /&gt;
После успешного запуска docker-контейнера IDE станут доступны ресурсы с &amp;quot;префиксом&amp;quot; &amp;lt;code&amp;gt;/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Все запросы направленные к ресурсам &amp;lt;code&amp;gt;/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/*&amp;lt;/code&amp;gt; будут проксироваться в соответствующий контейнер IDE.&lt;br /&gt;
&lt;br /&gt;
Например, если docker-контейнер c IDE &amp;lt;code&amp;gt;theia__default&amp;lt;/code&amp;gt; для снимка &amp;lt;code&amp;gt;xxx&amp;lt;/code&amp;gt; запущен и &amp;quot;слушает&amp;quot; порт &amp;lt;code&amp;gt;35353&amp;lt;/code&amp;gt; на хосте &amp;lt;code&amp;gt;docker-host&amp;lt;/code&amp;gt;, то будет происходить проксирование:&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;GET http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;GET http://docker-host:35353/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;POST http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;GET http://docker-host:35353/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;GET ws://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;GET ws://docker-host:35353/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' для запуска IDE в окне браузера нужно указать адрес &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http[s]://svacer-host/xvacer/webide/snapshots/{snapshot_id}/{ide_id}/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. '''Завершающий слеш обязателен!'''&lt;br /&gt;
&lt;br /&gt;
=== Перезапуск IDE ===&lt;br /&gt;
&lt;br /&gt;
В процессе работы svacer следит за состоянием запущенных IDE. При попытке повторного запуска IDE проверяется её доступность: если IDE отвечает на запросы, то повторный запуск не производится и обработка запроса завершается.&lt;br /&gt;
&lt;br /&gt;
Также работоспособность IDE контролируется при использовании IDE в момент проксирования запросов в docker-контейнер: если IDE доступна, то запрос проксируется.&lt;br /&gt;
&lt;br /&gt;
Если IDE перестанет отвечать на запросы, то будет произведена попытка её перезапуска. В этом случае происходит та же последовательность действий, что и при [[Help:XSvacer:Webide#Запуск IDE|первоначальном запуске IDE]].&lt;br /&gt;
&lt;br /&gt;
Зачастую потеря связи обусловлена остановкой docker-контейнера с IDE. В таком случае docker-контейнер будет перезапущен.&lt;br /&gt;
&lt;br /&gt;
Если же недоступность IDE обусловлена другими причинами, то запрос на запуск/проксирование продолжит возвращать ошибку, до устранения причин неработоспособности.&lt;br /&gt;
&lt;br /&gt;
=== Остановка IDE ===&lt;br /&gt;
&lt;br /&gt;
Запуск производится путём вызова http-метода &amp;lt;code&amp;gt;DELETE /api/snapshots/{snapshot_id}/ide&amp;lt;/code&amp;gt; с телом запроса &amp;lt;code&amp;gt;{&amp;quot;ideId&amp;quot;: &amp;quot;идентификатор IDE&amp;quot;}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В ходе обработки запроса останавливается docker-контейнер IDE.&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' По умолчанию установлен параметр конфигурации &amp;lt;code&amp;gt;xsvacer/webide/theia/default/docker/container/hostconfig/autoremove: true&amp;lt;/code&amp;gt;. Это означает, что при после остановки docker-контейнер будет автоматически удалён.&lt;br /&gt;
 Чтобы изменить это поведение, настройка &amp;lt;code&amp;gt;xsvacer/webide/theia/default/{id конфигурации}/container/hostconfig/autoremove&amp;lt;/code&amp;gt; должна быть установлена в &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; '''на момент запуска docker-контейнера IDE'''. Это можно сделать, например, установив значение переменной окружения &amp;lt;code&amp;gt;XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_CONTAINER_HOSTCONFIG_AUTOREMOVE=false&amp;lt;/code&amp;gt;.&lt;br /&gt;
 '''!!!Сейчас установка &amp;lt;code&amp;gt;autoremove: false&amp;lt;/code&amp;gt; вызывает ошибку запуска svacer!!! Не используйте данную настройку до исправления'''&lt;br /&gt;
&lt;br /&gt;
 '''Примечание!''' При корректной остановке (например &amp;lt;code&amp;gt;SIGTERM&amp;lt;/code&amp;gt;) svacer автоматически остановит все запущенные docker-контейнеры IDE&lt;br /&gt;
&lt;br /&gt;
=== Подключение к IDE после некорректного завершениея svacer ===&lt;br /&gt;
&lt;br /&gt;
При запуске svacer осуществляет поиск запущенных docker-контейнеров IDE на доступных docker-хостах.&lt;br /&gt;
&lt;br /&gt;
При восстановлении связи с запущенными docker-контейнерами IDE и последующей корректной остановке svacer'а, все docker-контейнеры IDE будут остановлены.&lt;br /&gt;
&lt;br /&gt;
== Конфигурация ==&lt;br /&gt;
&lt;br /&gt;
Управление настройками функциональности осуществляется с помощью конфигурационного yaml-файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Раздел конфигурации для управления функциональностью - &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Раздел содержит перечисление настроек доступных конфигураций для запуска экземпляров Theia IDE &amp;lt;code&amp;gt;xsvacer/webide/theia&amp;lt;/code&amp;gt;. При наличии нескольких активных конфигураций запуска Theia IDE пользователь сможет выбрать какую из них использовать при запуске IDE с исходными файлами снимка.&lt;br /&gt;
&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       config1:&lt;br /&gt;
         ...&lt;br /&gt;
       config2:&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' Запуск IDE основывается на запуске docker-контейнеров, содержащих соответствующие сборки IDE. Поэтому помимо настройки функциональности в разделе &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; необходимо также настроить доступ к docker-хосту в разделе &amp;lt;code&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt; ([[Help:XSvacer:Docker]]). В противном случае функциональность webide не сможет работать корректно.&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' в случае отсутствия файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; или отсутствии раздела &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;, будет использоваться [[Help:XSvacer:Webide#Конфигурация_по_умолчанию_используемая_в_svacer|конфигурация по умолчанию]]&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация запуска Theia IDE ===&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' На этапе внедрения расширений XSvacer конфигурация функциональностей может меняться. Следите за анонсами!&lt;br /&gt;
&lt;br /&gt;
Конфигурации запуска Theia IDE добавляются в виде полей в разделе &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;. Название поля является идентификатором конфигурации запуска. Например идентификатор по номеру используемой версии IDE:&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       1-46-0:&lt;br /&gt;
         name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
==== Базовые параметры конфигурации запуска ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию                     &lt;br /&gt;
|-&lt;br /&gt;
|disabled&lt;br /&gt;
|bool&lt;br /&gt;
|Конфигурация запуска неактивна. Неактивная конфигурация не доступна для запуска экземпляра IDE&lt;br /&gt;
|true (переопределяется в конфигурации &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;)         &lt;br /&gt;
|-&lt;br /&gt;
|order&lt;br /&gt;
|int&lt;br /&gt;
|Порядковый номер в списке выбора конфигурации запуска&lt;br /&gt;
|0                                                        &lt;br /&gt;
|-&lt;br /&gt;
|name&lt;br /&gt;
|string&lt;br /&gt;
|Название конфигурации&lt;br /&gt;
|Theia blueprint web IDE (v1.46.0)                        &lt;br /&gt;
|-&lt;br /&gt;
|sourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке содержащей исходные коды снимков на машине со svacer'ом&lt;br /&gt;
|${USER_CACHE_DIR}/svacer-snapshot-sources                &lt;br /&gt;
|-&lt;br /&gt;
|dockerhostsourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке содержащей исходные коды снимков на хосте docker'а. Нужен при использовании удалённого docker-хоста, т.к. в таком случае папка с исходными кодами скорее всего будет доступна по адресу, отличающемуся от &amp;lt;code&amp;gt;sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
|                                                         &lt;br /&gt;
|-&lt;br /&gt;
|dockerhostpathseparator&lt;br /&gt;
|string&lt;br /&gt;
|Разделитель пути на хосте docker'а. По умолчанию &amp;lt;code&amp;gt;&amp;quot;/&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
|                                                         &lt;br /&gt;
|-&lt;br /&gt;
|sariffiletemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон названия sarif-файла с предупреждениями анализатора. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|sarifFileContext]]&lt;br /&gt;
|&amp;quot;&amp;lt;nowiki&amp;gt;{{.Context.ProjectName}}.{{.Context.BranchName}}&amp;lt;/nowiki&amp;gt;.sarif&amp;quot; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры менеджера запуска IDE ====&lt;br /&gt;
&lt;br /&gt;
Конфигурация менеджера запуска IDE. На данный момент доступен только &amp;quot;стандартный&amp;quot; менеджер (&amp;lt;code&amp;gt;type: default&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию &lt;br /&gt;
|-&lt;br /&gt;
|manager&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация менеджера запуска IDE&lt;br /&gt;
|                                     &lt;br /&gt;
|-&lt;br /&gt;
|manager/type&lt;br /&gt;
|enum: default&lt;br /&gt;
|Тип менеджера запуска IDE&lt;br /&gt;
|default                              &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры запуска docker-контейнеров с IDE ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для настройки запуска docker-контейнеров с IDE&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию               &lt;br /&gt;
|-&lt;br /&gt;
|docker/&lt;br /&gt;
|map&lt;br /&gt;
|Настройки создания docker-контейнера с IDE&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/hostid&lt;br /&gt;
|string&lt;br /&gt;
|Идентификатор хоста docker'а, описанного в &amp;lt;code&amp;gt;xsvacer/docker/hosts&amp;lt;/code&amp;gt;. Запуск docker-контейнера с IDE будет выполнен на этом хосте&lt;br /&gt;
|default                                            &lt;br /&gt;
|-&lt;br /&gt;
|docker/containernametemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон для формирования названия контейнера IDE для выбранного снимка. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|TheiaDockerContainerStartContext]]&lt;br /&gt;
|&amp;quot;theia-1-46-&amp;lt;nowiki&amp;gt;{{.StartArgs.SnapshotID}}&amp;lt;/nowiki&amp;gt;&amp;quot;             &lt;br /&gt;
|-&lt;br /&gt;
|docker/containerconfiglabels&lt;br /&gt;
|[]map&lt;br /&gt;
|Список &amp;quot;меток&amp;quot; docker-контейнера. Дополняет список меток в &amp;lt;code&amp;gt;docker/container/config/labels&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
 - &amp;quot;com.docker.compose.project&amp;quot;: svacer             &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры docker-образа из которого будет запущен контейнер&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/name&lt;br /&gt;
|string&lt;br /&gt;
|Название образа&lt;br /&gt;
|theia-blueprint                                    &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/tag&lt;br /&gt;
|string&lt;br /&gt;
|Тег образа&lt;br /&gt;
|1.46.0.sarif.clang                                 &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcetype&lt;br /&gt;
|enum: repository/file&lt;br /&gt;
|Тип источника для загрузки образа в docker-хост.&lt;br /&gt;
* &amp;lt;code&amp;gt;repository&amp;lt;/code&amp;gt; - будет вызван &amp;lt;code&amp;gt;docker pull&amp;lt;/code&amp;gt; образа &amp;lt;code&amp;gt;{image/name}:{image/tag}&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt; - будет вызван &amp;lt;code&amp;gt;docker load&amp;lt;/code&amp;gt; с url'ом &amp;lt;code&amp;gt;image/sourcefileurl&amp;lt;/code&amp;gt;&lt;br /&gt;
|file                                               &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcefileurl&lt;br /&gt;
|url&lt;br /&gt;
|Url откуда будет загружен docker-образ если &amp;lt;code&amp;gt;image/sourcetype == &amp;quot;file&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
Url может содержать:&lt;br /&gt;
- путь к локальному файлу: схема &amp;lt;code&amp;gt;file://&amp;lt;/code&amp;gt;&lt;br /&gt;
- http/https-адрес: схема &amp;lt;code&amp;gt;http://&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;https://&amp;lt;/code&amp;gt;&lt;br /&gt;
|https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/&lt;br /&gt;
|map&lt;br /&gt;
|Свойства docker-контейнера&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/config.go#L70&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config/env&lt;br /&gt;
|[]string&lt;br /&gt;
|Список переменных среды, которые будут установлены в контейнере&lt;br /&gt;
|&lt;br /&gt;
 - THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;     &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры хостинга контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/hostconfig.go#L379&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/autoremove&lt;br /&gt;
|bool&lt;br /&gt;
|&lt;br /&gt;
|true                                               &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/portbindings&lt;br /&gt;
|map&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
 &amp;quot;3000/tcp&amp;quot;:                                        &lt;br /&gt;
   - hostport: 0                                    &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/networkconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Сетевые настройки контейнера. Соответствуют структуре https://github.com/moby/moby/blob/v24.0.7/api/types/network/network.go#L104&lt;br /&gt;
|                                                   &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры проверки доступности healthcheck ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для проверки доступности IDE после запуска docker-контейнера&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck&lt;br /&gt;
|map&lt;br /&gt;
|Параметры проверки доступности IDE&lt;br /&gt;
|                                     &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyretries&lt;br /&gt;
|int&lt;br /&gt;
|Количества попыток проверки до ошибки доступности&lt;br /&gt;
|10                                   &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyperiod&lt;br /&gt;
|golang duration string&lt;br /&gt;
|Интервал проверки&lt;br /&gt;
|200ms                                &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Структуры передаваемые в поля с golang-шаблонами строк ====&lt;br /&gt;
&lt;br /&gt;
 sarifFileContext {&lt;br /&gt;
     Time    time.Time&lt;br /&gt;
 	Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
 &lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 TheiaDockerContainerStartContext {&lt;br /&gt;
 	IdeID: {&lt;br /&gt;
         IdeType  string&lt;br /&gt;
         ConfigID string&lt;br /&gt;
     },&lt;br /&gt;
 	StartArgs: {&lt;br /&gt;
         SnapshotID string&lt;br /&gt;
         UserID     string&lt;br /&gt;
         User       string&lt;br /&gt;
     },&lt;br /&gt;
 	Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
 &lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация по умолчанию используемая в svacer ===&lt;br /&gt;
&lt;br /&gt;
Данная настройка применяется по умолчанию для запуска Theia IDE, если в конфигурационном файле svacer.cfg отсутствует раздел &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
xsvacer:&lt;br /&gt;
  docker:&lt;br /&gt;
    hosts:&lt;br /&gt;
      default: # конфигурация docker-хоста&lt;br /&gt;
        type: external&lt;br /&gt;
      ...&lt;br /&gt;
&lt;br /&gt;
  webide:&lt;br /&gt;
    theia:&lt;br /&gt;
      1-46-0: &amp;amp;1-46-0&lt;br /&gt;
        disabled: true&lt;br /&gt;
        order: 0&lt;br /&gt;
        name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
        sourcesroot: ${USER_CACHE_DIR}/svacer-snapshot-sources&lt;br /&gt;
        sariffiletemplate: &amp;quot;&amp;lt;nowiki&amp;gt;{{.Context.ProjectName}}.{{.Context.BranchName}}&amp;lt;/nowiki&amp;gt;.sarif&amp;quot;&lt;br /&gt;
        manager:&lt;br /&gt;
          type: default&lt;br /&gt;
        docker:&lt;br /&gt;
          hostid: default # идентификатор используемого docker-хоста&lt;br /&gt;
          containernametemplate: &amp;quot;theia-1-46-&amp;lt;nowiki&amp;gt;{{.StartArgs.SnapshotID}}&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
          image:&lt;br /&gt;
            name: theia-blueprint&lt;br /&gt;
            tag: 1.46.0.sarif.clang&lt;br /&gt;
            sourcetype: file&lt;br /&gt;
            sourcefileurl: https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar&lt;br /&gt;
          containerconfiglabels:&lt;br /&gt;
            - &amp;quot;com.docker.compose.project&amp;quot;: svacer&lt;br /&gt;
          container:&lt;br /&gt;
            config:&lt;br /&gt;
              env:&lt;br /&gt;
                - THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
            hostconfig:&lt;br /&gt;
              autoremove: true&lt;br /&gt;
              portbindings:&lt;br /&gt;
                &amp;quot;3000/tcp&amp;quot;:&lt;br /&gt;
                  - hostport: 0&lt;br /&gt;
            networkconfig:&lt;br /&gt;
        healthcheck:&lt;br /&gt;
          starttoreadyretries: 10&lt;br /&gt;
          starttoreadyperiod: 200ms&lt;br /&gt;
      default:&lt;br /&gt;
        &amp;lt;&amp;lt;: *1-46-0&lt;br /&gt;
        order: 0&lt;br /&gt;
        disabled: false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' По умолчанию используется docker-хост с идентификатором &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;. Согласно настройке этого хоста, по умолчанию предполагается взаимодействие с докером через unix-сокет &amp;lt;code&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt;. Соответственно пользователь, под которым запускается svacer должен иметь доступ к этому сокету (https://docs.docker.com/engine/install/linux-postinstall/).&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' При наличии раздела &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; в конфигурационном файле &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;, будут применены только настройки из этого раздела. Настройки по умолчанию будут полностью проигнорированы.&lt;br /&gt;
&lt;br /&gt;
=== Изменение конфигурационных параметров с помощью переменных окружения ===&lt;br /&gt;
&lt;br /&gt;
Значения атрибутов конфигурации могут быть изменены с помощью переменных окружения &amp;lt;code&amp;gt;XSVACER_WEBIDE_THEIA_{id конфигурации ide}[_параметр]={значение параметра}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например, для активации rootless-хоста &amp;lt;code&amp;gt;xsvacer/hosts/local&amp;lt;/code&amp;gt; и переключения запуска IDE с идентификатором &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; на этот хост, можно указать такие значения переменных окружения при запуске svacer'а:&lt;br /&gt;
 XSVACER_DOCKER_HOSTS_LOCAL_DISABLED=false&lt;br /&gt;
 XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_HOSTID=local&lt;br /&gt;
&lt;br /&gt;
== Очистка системы: удаление артефактов функциональности ==&lt;br /&gt;
&lt;br /&gt;
В процессе использования функциональности IDE создаются следующие артефакты:&lt;br /&gt;
# Исходные файлы снимков скачиваются в &amp;quot;корневые папки&amp;quot; заданные в параметре &amp;lt;code&amp;gt;xsvacer/webide/theia/{id конфигурации}/sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
# Артефакты docker:&lt;br /&gt;
#* образы и контейнеры создаются на хостах, указанных в конфигурации docker-хостов, указанных в &amp;lt;code&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/hostid&amp;lt;/code&amp;gt;&lt;br /&gt;
#* названия docker-образов будут соответствовать параметрам в &amp;lt;code&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/image&amp;lt;/code&amp;gt;&lt;br /&gt;
#* названия docker-контейнеров будут соответствовать параметру &amp;lt;code&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/containernametemplate&amp;lt;/code&amp;gt;&lt;br /&gt;
#* наборы меток doker-контейнеров будут содержать:&lt;br /&gt;
#*: метки перечисленные в &amp;lt;code&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/containerconfiglabels&amp;lt;/code&amp;gt;&lt;br /&gt;
#*: метки перечисленные в &amp;lt;code&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/container/config/labels&amp;lt;/code&amp;gt;&lt;br /&gt;
#*: метки с названиями &amp;lt;code&amp;gt;svacer.service.id&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;svacer.service.type&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;svacer.theia.start_args&amp;lt;/code&amp;gt;&lt;br /&gt;
# При использовании rootless-хоста docker'а будут созданы папки, согласно [[Help:XSvacer:Docker#Специфичные настройки для rootless-хоста]]&lt;br /&gt;
&lt;br /&gt;
== Рекомендации ==&lt;br /&gt;
&lt;br /&gt;
=== Предварительная загрузка docker-образа с IDE ===&lt;br /&gt;
&lt;br /&gt;
По умолчанию параметр &amp;lt;code&amp;gt;xsvacer/webide/theia/1-46-0/docker/image/sourcefileurl&amp;lt;/code&amp;gt; содержит значение &amp;lt;code&amp;gt;https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar&amp;lt;/code&amp;gt;. По этому адресу находится архив с docker-образом для Theia IDE.&lt;br /&gt;
&lt;br /&gt;
Если docker-образ ещё не был загружен, то загрузка начнётся при первой попытке запуска IDE. Т.к. этот процесс занимает длительное время, то запрос запуска IDE тоже будет выполняться долго.&lt;br /&gt;
&lt;br /&gt;
Для ускорения первого запуска IDE, докер образ можно загрузить на хост docker'а вручную. Для этого необходимо:&lt;br /&gt;
# Скачать файл архива;&lt;br /&gt;
# Выполнить команду &amp;lt;code&amp;gt;docker image load -i /path/to/tar/theia-blueprint.1.46.0.sarif.clang.tar&amp;lt;/code&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
== Информация о docker-образе Theia IDE ==&lt;br /&gt;
&lt;br /&gt;
Docker-образ, используемый по умолчанию, построен на базе [[https://theia-ide.org/|Eclipse Theia IDE]] версии [[https://github.com/eclipse-theia/theia-blueprint/tree/v1.46.0|1.46.0]]&lt;br /&gt;
&lt;br /&gt;
При этом была изменена компоновка расширений theia (результат выполнения &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
diff --git a/browser.Dockerfile b/browser.Dockerfile&lt;br /&gt;
index efe591e..a4ebb6a 100644&lt;br /&gt;
--- a/browser.Dockerfile&lt;br /&gt;
+++ b/browser.Dockerfile&lt;br /&gt;
@@ -42,7 +42,7 @@ RUN chmod g+rw /home &amp;amp;&amp;amp; \&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y wget apt-transport-https &amp;amp;&amp;amp; \&lt;br /&gt;
     wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | tee /usr/share/keyrings/adoptium.asc &amp;amp;&amp;amp; \&lt;br /&gt;
     echo &amp;quot;deb [signed-by=/usr/share/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main&amp;quot; | tee /etc/apt/sources.list.d/adoptium.list &amp;amp;&amp;amp; \&lt;br /&gt;
-    apt-get update &amp;amp;&amp;amp; apt-get install -y git openssh-client openssh-server bash libsecret-1-0 temurin-17-jdk maven &amp;amp;&amp;amp; \&lt;br /&gt;
+    apt-get update &amp;amp;&amp;amp; apt-get install -y git openssh-client openssh-server bash libsecret-1-0 clangd &amp;amp;&amp;amp; \&lt;br /&gt;
     apt-get purge -y wget &amp;amp;&amp;amp; \&lt;br /&gt;
     apt-get clean&lt;br /&gt;
&lt;br /&gt;
diff --git a/package.json b/package.json&lt;br /&gt;
index 9044595..9d0dcc8 100644&lt;br /&gt;
--- a/package.json&lt;br /&gt;
+++ b/package.json&lt;br /&gt;
@@ -54,10 +54,8 @@&lt;br /&gt;
   &amp;quot;theiaPluginsDir&amp;quot;: &amp;quot;plugins&amp;quot;,&lt;br /&gt;
   &amp;quot;theiaPlugins&amp;quot;: {&lt;br /&gt;
     &amp;quot;eclipse-theia.builtin-extension-pack&amp;quot;: &amp;quot;https://open-vsx.org/api/eclipse-theia/builtin-extension-pack/1.83.1/file/eclipse-theia.builtin-extension-pack-1.83.1.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;ms-vscode.js-debug&amp;quot;: &amp;quot;https://open-vsx.org/api/ms-vscode/js-debug/1.83.1/file/ms-vscode.js-debug-1.83.1.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;ms-vscode.js-debug-companion&amp;quot;: &amp;quot;https://open-vsx.org/api/ms-vscode/js-debug-companion/1.1.2/file/ms-vscode.js-debug-companion-1.1.2.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;vscjava.vscode-java-pack&amp;quot;: &amp;quot;https://open-vsx.org/api/vscjava/vscode-java-pack/0.25.11/file/vscjava.vscode-java-pack-0.25.11.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;vscjava.vscode-java-dependency&amp;quot;: &amp;quot;https://open-vsx.org/api/vscjava/vscode-java-dependency/0.21.2/file/vscjava.vscode-java-dependency-0.21.2.vsix&amp;quot;&lt;br /&gt;
+    &amp;quot;llvm-vs-code-extensions.vscode-clangd&amp;quot;: &amp;quot;https://open-vsx.org/api/llvm-vs-code-extensions/vscode-clangd/0.1.26/file/llvm-vs-code-extensions.vscode-clangd-0.1.26.vsix&amp;quot;,&lt;br /&gt;
+    &amp;quot;ms-sarifvscode.sarif-viewer&amp;quot;: &amp;quot;https://open-vsx.org/api/MS-SarifVSCode/sarif-viewer/3.4.2/file/MS-SarifVSCode.sarif-viewer-3.4.2.vsix&amp;quot;&lt;br /&gt;
   },&lt;br /&gt;
   &amp;quot;theiaPluginsExcludeIds&amp;quot;: [&lt;br /&gt;
     &amp;quot;ms-vscode.js-debug-companion&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Команда построения docker-образа: &lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
docker build -t theia-blueprint:1.46.0.sarif.clang -f browser.Dockerfile .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Команда экспорта docker-образа:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
docker image save theia-blueprint:1.46.0 &amp;gt; /path/to/tar/theia-blueprint.1.46.0.docker.command.tar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=1966</id>
		<title>Help:XSvacer:Webide</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=1966"/>
		<updated>2024-06-06T13:26:10Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Поддержка среды разработки Theia IDE =&lt;br /&gt;
 '''Примечание:''' данная функциональность входит в набор расширений XSvacer.&lt;br /&gt;
&lt;br /&gt;
Данная функциональность даёт возможность просматривать исходный код снимка с предупреждениями анализатора во внешней IDE.&lt;br /&gt;
&lt;br /&gt;
По умолчанию запускается IDE собранная на основе Theia IDE (https://theia-ide.org/).&lt;br /&gt;
&lt;br /&gt;
== Активация функциональности ==&lt;br /&gt;
Для активации функциональности необходимо указать флаг &amp;lt;code&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt; при запуске svacer'а.&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' при запуске функциональности &amp;lt;code&amp;gt;webide&amp;lt;/code&amp;gt; также будет запущена функциональность &amp;lt;code&amp;gt;[[Help:XSvacer:Docker|docker]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Активации функциональности:&lt;br /&gt;
* становится доступным REST API управления IDE для просмотра снимков проектов;&lt;br /&gt;
* в пользовательском интерфейсе появляется кнопка &amp;quot;Открыть в IDE&amp;quot;;&lt;br /&gt;
* устанавливается подключение к хосту docker'а, на котором будут запускаться контейнеры с экземплярами IDE.&lt;br /&gt;
&lt;br /&gt;
== REST API для работы с IDE ==&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' На этапе внедрения расширений XSvacer REST API может меняться. Следите за анонсами!&lt;br /&gt;
&lt;br /&gt;
После активации функциональности становятся доступны http-ресурсы для управления IDE снимками:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | REST API управления IDE&lt;br /&gt;
|-&lt;br /&gt;
!Ресурс&lt;br /&gt;
!Описание                                                &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
GET /xsvacer/webide/api/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Получение списка доступных для запуска IDE.&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;order&amp;quot;: 0&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
:&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; - название IDE&lt;br /&gt;
:&amp;lt;code&amp;gt;order&amp;lt;/code&amp;gt; - порядковый номер IDE в списке&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
GET /xsvacer/webide/api/snapshots/{snapshot_id}/ide/{ide_id}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Запрос описания экземпляра IDE, запущенного для снимка. &lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
:&amp;lt;code&amp;gt;ide_id&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;id&amp;quot;: {&lt;br /&gt;
    &amp;quot;ide_id&amp;quot;: {&lt;br /&gt;
      &amp;quot;ide_type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
      &amp;quot;config_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;snapshot_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;url&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;start_args&amp;quot;: {&lt;br /&gt;
    &amp;quot;snapshot_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;user&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;user_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
POST /xsvacer/webide/api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Запуск IDE для просмотра исходных кодов снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
PUT /api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Команда управления экземпляром IDE снимка&lt;br /&gt;
Доступные действия:&lt;br /&gt;
* &amp;lt;code&amp;gt;update_markup&amp;lt;/code&amp;gt; - обновление предупреждений и разметки (sarif-файла)&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;action&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt; - действие&lt;br /&gt;
:&amp;lt;code&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:''' пустой&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
DELETE /xsvacer/webide/api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Остановка экземпляра IDE снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:''' пустой&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Прокси для запросов экземпляра IDE снимка&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Формат идентификатора IDE ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{тип ide}__{идентификатор конфигурации}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например для &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;-конфигурации Theia IDE: &amp;lt;code&amp;gt;theia__default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Принцип работы ==&lt;br /&gt;
&lt;br /&gt;
Функциональность запуска IDE для просмотра исходного кода снимков становится доступной пользователю, если соблюдаются условия:&lt;br /&gt;
# Функциональность активна: при запуске svacer'а указан флаг &amp;lt;code&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt;;&lt;br /&gt;
# В конфигурации функциональности &amp;lt;code&amp;gt;xsvacer/webide/theia&amp;lt;/code&amp;gt; ([[Help:XSvacer:Webide#Конфигурация]]) есть хотя бы одна активная (&amp;lt;code&amp;gt;disabled: false&amp;lt;/code&amp;gt;) конфигурация IDE;&lt;br /&gt;
# У пользователя svacer имеются разрешения &amp;lt;code&amp;gt;&amp;quot;Просмотр маркеров&amp;quot;&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;&amp;quot;Read markers&amp;quot;&amp;lt;/code&amp;gt;) и &amp;lt;code&amp;gt;&amp;quot;Экспорт разметки&amp;quot;&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;&amp;quot;Export markup&amp;quot;&amp;lt;/code&amp;gt;) на проект, в котором находится снимок, для которого нужно запустить IDE.&lt;br /&gt;
&lt;br /&gt;
В противном случае в пользовательском интерфейсе будет отсутствовать кнопка &amp;lt;code&amp;gt;&amp;quot;Открыть в IDE&amp;quot;&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;&amp;quot;Open in IDE&amp;quot;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== Запуск IDE ===&lt;br /&gt;
&lt;br /&gt;
Запуск производится путём вызова http-метода &amp;lt;code&amp;gt;POST /api/snapshots/{snapshot_id}/ide&amp;lt;/code&amp;gt; с телом запроса &amp;lt;code&amp;gt;{&amp;quot;ideId&amp;quot;: &amp;quot;идентификатор IDE&amp;quot;}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последовательность действий, выполняемых при запуске IDE:&lt;br /&gt;
&lt;br /&gt;
# Производится проверка: была ли уже запущена указанная IDE для указанного снимка;&lt;br /&gt;
#* Если запущена: производится проверка: доступна ли IDE: отвечает на запросы;&lt;br /&gt;
#** Если IDE доступна: действие не требуется. Процесс запуска завершается;&lt;br /&gt;
#** Если IDE не доступна: продолжается процесс запуска. IDE будет ''перезапущена'';&lt;br /&gt;
# Создаётся &amp;quot;корневая папка снимка&amp;quot;, предназначенная для хранения исходного кода снимка и предупреждений анализатора с разметкой в виде sarif-файла. Название папки соответствует id снимка. Папка создаётся по пути заданному в параметре конфигурации IDE &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/sourcesroot&amp;lt;/code&amp;gt;;&lt;br /&gt;
# Исходный код снимка скачивается в &amp;quot;корневую папку снимка&amp;quot;;&lt;br /&gt;
# Производится экспорт маркеров и разметки в виде sarif-файла в &amp;quot;корневую папку снимка&amp;quot;. Название sarif-файла формируется с помощью шаблона, заданного в параметре конфигурации IDE &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/sariffiletemplate&amp;lt;/code&amp;gt;;&lt;br /&gt;
# Производится настройка и запуск docker-контейнера, в соответствии с настройками &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker&amp;lt;/code&amp;gt;;&lt;br /&gt;
## Проверяется наличие на docker-хосте образа IDE, указанного в &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker/image&amp;lt;/code&amp;gt;;&lt;br /&gt;
##* Если docker-образ отсутствует - он будет загружен на хост;&lt;br /&gt;
## Проверяется наличие на docker-хосте контейнера с IDE для снимка;&lt;br /&gt;
##* Если docker-контейнер не существует, то он будет создан и запущен;&lt;br /&gt;
##* Если docker-контейнер существует и находится&lt;br /&gt;
##** в статусе &amp;lt;code&amp;gt;running&amp;lt;/code&amp;gt; - процесс запуска IDE продолжается;&lt;br /&gt;
##** в статусе &amp;lt;code&amp;gt;created&amp;lt;/code&amp;gt;,&amp;lt;code&amp;gt;exited&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;paused&amp;lt;/code&amp;gt; - контейнер будет запущен;&lt;br /&gt;
##** в других статусах - вернётся соответствующая ошибка и процесс запуска IDE прервётся;&lt;br /&gt;
# После успешного запуска docker-контейнера осуществляется ожидание окончания запуска процесса IDE в контейнере, в соответствии с настройками &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck&amp;lt;/code&amp;gt;;&lt;br /&gt;
#* Если за отведённое время ответ от IDE получен - процесс запуска завершается.&lt;br /&gt;
#* Если ответ не получен - вернётся ошибка &amp;lt;code&amp;gt;ide not ready&amp;lt;/code&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' При возникновении ошибки на одном из этапов запуска IDE, артефакты созданные на предыдущих этапах останутся в системе. В дальнейшем они могут быть использованы при повторном запуске IDE, если причина возникновения ошибки была устранена.&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' Причиной возникновения ошибки &amp;lt;code&amp;gt;ide not ready&amp;lt;/code&amp;gt; может стать высокая загруженность или недостаточная производительность docker-хоста, на котором запускается контейнер с IDE. В связи с этим, процесс IDE внутри контейнера может запускаться дольше, чем указано в настойках &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck&amp;lt;/code&amp;gt;.&lt;br /&gt;
 В случае возникновения ошибки &amp;lt;code&amp;gt;ide not ready&amp;lt;/code&amp;gt; рекомендуется попытаться повторно запустить IDE через короткий промежуток времени.&lt;br /&gt;
 Ещё одной причиной возникновения данной ошибки может стать сетевая недоступность docker-контейнера, при подключении к удалённому docker-хосту. В таком случае рекомендуется:&lt;br /&gt;
 1. проверить сетевую доступность docker-хоста;&lt;br /&gt;
 2. проверить настройки биндинга docker-контейнера c IDE - &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker/container/hostconfig/portbindings&amp;lt;/code&amp;gt;. Контейнер должен быть подключён к доступному сетевому интерфейсу.&lt;br /&gt;
 3. проверить настройки фаервола на docker-хосте;&lt;br /&gt;
&lt;br /&gt;
=== Использование IDE: проксирование запросов ===&lt;br /&gt;
&lt;br /&gt;
После успешного запуска docker-контейнера IDE станут доступны ресурсы с &amp;quot;префиксом&amp;quot; &amp;lt;code&amp;gt;/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Все запросы направленные к ресурсам &amp;lt;code&amp;gt;/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/*&amp;lt;/code&amp;gt; будут проксироваться в соответствующий контейнер IDE.&lt;br /&gt;
&lt;br /&gt;
Например, если docker-контейнер c IDE &amp;lt;code&amp;gt;theia__default&amp;lt;/code&amp;gt; для снимка &amp;lt;code&amp;gt;xxx&amp;lt;/code&amp;gt; запущен и &amp;quot;слушает&amp;quot; порт &amp;lt;code&amp;gt;35353&amp;lt;/code&amp;gt; на хосте &amp;lt;code&amp;gt;docker-host&amp;lt;/code&amp;gt;, то будет происходить проксирование:&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;GET http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;GET http://docker-host:35353/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;POST http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;GET http://docker-host:35353/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;GET ws://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;GET ws://docker-host:35353/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' для запуска IDE в окне браузера нужно указать адрес &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http[s]://svacer-host/xvacer/webide/snapshots/{snapshot_id}/{ide_id}/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. '''Завершающий слеш обязателен!'''&lt;br /&gt;
&lt;br /&gt;
=== Перезапуск IDE ===&lt;br /&gt;
&lt;br /&gt;
В процессе работы svacer следит за состоянием запущенных IDE. При попытке повторного запуска IDE проверяется её доступность: если IDE отвечает на запросы, то повторный запуск не производится и обработка запроса завершается.&lt;br /&gt;
&lt;br /&gt;
Также работоспособность IDE контролируется при использовании IDE в момент проксирования запросов в docker-контейнер: если IDE доступна, то запрос проксируется.&lt;br /&gt;
&lt;br /&gt;
Если IDE перестанет отвечать на запросы, то будет произведена попытка её перезапуска. В этом случае происходит та же последовательность действий, что и при [[Help:XSvacer:Webide#Запуск IDE|первоначальном запуске IDE]].&lt;br /&gt;
&lt;br /&gt;
Зачастую потеря связи обусловлена остановкой docker-контейнера с IDE. В таком случае docker-контейнер будет перезапущен.&lt;br /&gt;
&lt;br /&gt;
Если же недоступность IDE обусловлена другими причинами, то запрос на запуск/проксирование продолжит возвращать ошибку, до устранения причин неработоспособности.&lt;br /&gt;
&lt;br /&gt;
=== Остановка IDE ===&lt;br /&gt;
&lt;br /&gt;
Запуск производится путём вызова http-метода &amp;lt;code&amp;gt;DELETE /api/snapshots/{snapshot_id}/ide&amp;lt;/code&amp;gt; с телом запроса &amp;lt;code&amp;gt;{&amp;quot;ideId&amp;quot;: &amp;quot;идентификатор IDE&amp;quot;}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В ходе обработки запроса останавливается docker-контейнер IDE.&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' По умолчанию установлен параметр конфигурации &amp;lt;code&amp;gt;xsvacer/webide/theia/default/docker/container/hostconfig/autoremove: true&amp;lt;/code&amp;gt;. Это означает, что при после остановки docker-контейнер будет автоматически удалён.&lt;br /&gt;
 Чтобы изменить это поведение, настройка &amp;lt;code&amp;gt;xsvacer/webide/theia/default/{id конфигурации}/container/hostconfig/autoremove&amp;lt;/code&amp;gt; должна быть установлена в &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; '''на момент запуска docker-контейнера IDE'''. Это можно сделать, например, установив значение переменной окружения &amp;lt;code&amp;gt;XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_CONTAINER_HOSTCONFIG_AUTOREMOVE=false&amp;lt;/code&amp;gt;.&lt;br /&gt;
 '''!!!Сейчас установка &amp;lt;code&amp;gt;autoremove: false&amp;lt;/code&amp;gt; вызывает ошибку запуска svacer!!! Не используйте данную настройку до исправления'''&lt;br /&gt;
&lt;br /&gt;
 '''Примечание!''' При корректной остановке (например &amp;lt;code&amp;gt;SIGTERM&amp;lt;/code&amp;gt;) svacer автоматически остановит все запущенные docker-контейнеры IDE&lt;br /&gt;
&lt;br /&gt;
=== Подключение к IDE после некорректного завершениея svacer ===&lt;br /&gt;
&lt;br /&gt;
При запуске svacer осуществляет поиск запущенных docker-контейнеров IDE на доступных docker-хостах.&lt;br /&gt;
&lt;br /&gt;
При восстановлении связи с запущенными docker-контейнерами IDE и последующей корректной остановке svacer'а, все docker-контейнеры IDE будут остановлены.&lt;br /&gt;
&lt;br /&gt;
== Конфигурация ==&lt;br /&gt;
&lt;br /&gt;
Управление настройками функциональности осуществляется с помощью конфигурационного yaml-файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Раздел конфигурации для управления функциональностью - &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Раздел содержит перечисление настроек доступных конфигураций для запуска экземпляров Theia IDE &amp;lt;code&amp;gt;xsvacer/webide/theia&amp;lt;/code&amp;gt;. При наличии нескольких активных конфигураций запуска Theia IDE пользователь сможет выбрать какую из них использовать при запуске IDE с исходными файлами снимка.&lt;br /&gt;
&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       config1:&lt;br /&gt;
         ...&lt;br /&gt;
       config2:&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' Запуск IDE основывается на запуске docker-контейнеров, содержащих соответствующие сборки IDE. Поэтому помимо настройки функциональности в разделе &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; необходимо также настроить доступ к docker-хосту в разделе &amp;lt;code&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt; ([[Help:XSvacer:Docker]]). В противном случае функциональность webide не сможет работать корректно.&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' в случае отсутствия файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; или отсутствии раздела &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;, будет использоваться [[Help:XSvacer:Webide#Конфигурация_по_умолчанию_используемая_в_svacer|конфигурация по умолчанию]]&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация запуска Theia IDE ===&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' На этапе внедрения расширений XSvacer конфигурация функциональностей может меняться. Следите за анонсами!&lt;br /&gt;
&lt;br /&gt;
Конфигурации запуска Theia IDE добавляются в виде полей в разделе &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;. Название поля является идентификатором конфигурации запуска. Например идентификатор по номеру используемой версии IDE:&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       1-46-0:&lt;br /&gt;
         name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
==== Базовые параметры конфигурации запуска ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию                     &lt;br /&gt;
|-&lt;br /&gt;
|disabled&lt;br /&gt;
|bool&lt;br /&gt;
|Конфигурация запуска неактивна. Неактивная конфигурация не доступна для запуска экземпляра IDE&lt;br /&gt;
|true (переопределяется в конфигурации &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;)         &lt;br /&gt;
|-&lt;br /&gt;
|order&lt;br /&gt;
|int&lt;br /&gt;
|Порядковый номер в списке выбора конфигурации запуска&lt;br /&gt;
|0                                                        &lt;br /&gt;
|-&lt;br /&gt;
|name&lt;br /&gt;
|string&lt;br /&gt;
|Название конфигурации&lt;br /&gt;
|Theia blueprint web IDE (v1.46.0)                        &lt;br /&gt;
|-&lt;br /&gt;
|sourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке содержащей исходные коды снимков на машине со svacer'ом&lt;br /&gt;
|${USER_CACHE_DIR}/svacer-snapshot-sources                &lt;br /&gt;
|-&lt;br /&gt;
|dockerhostsourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке содержащей исходные коды снимков на хосте docker'а. Нужен при использовании удалённого docker-хоста, т.к. в таком случае папка с исходными кодами скорее всего будет доступна по адресу, отличающемуся от &amp;lt;code&amp;gt;sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
|                                                         &lt;br /&gt;
|-&lt;br /&gt;
|dockerhostpathseparator&lt;br /&gt;
|string&lt;br /&gt;
|Разделитель пути на хосте docker'а. По умолчанию &amp;lt;code&amp;gt;&amp;quot;/&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
|                                                         &lt;br /&gt;
|-&lt;br /&gt;
|sariffiletemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон названия sarif-файла с предупреждениями анализатора. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|sarifFileContext]]&lt;br /&gt;
|&amp;quot;&amp;lt;nowiki&amp;gt;{{.Context.ProjectName}}.{{.Context.BranchName}}&amp;lt;/nowiki&amp;gt;.sarif&amp;quot; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры менеджера запуска IDE ====&lt;br /&gt;
&lt;br /&gt;
Конфигурация менеджера запуска IDE. На данный момент доступен только &amp;quot;стандартный&amp;quot; менеджер (&amp;lt;code&amp;gt;type: default&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию &lt;br /&gt;
|-&lt;br /&gt;
|manager&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация менеджера запуска IDE&lt;br /&gt;
|                                     &lt;br /&gt;
|-&lt;br /&gt;
|manager/type&lt;br /&gt;
|enum: default&lt;br /&gt;
|Тип менеджера запуска IDE&lt;br /&gt;
|default                              &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры запуска docker-контейнеров с IDE ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для настройки запуска docker-контейнеров с IDE&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию               &lt;br /&gt;
|-&lt;br /&gt;
|docker/&lt;br /&gt;
|map&lt;br /&gt;
|Настройки создания docker-контейнера с IDE&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/hostid&lt;br /&gt;
|string&lt;br /&gt;
|Идентификатор хоста docker'а, описанного в &amp;lt;code&amp;gt;xsvacer/docker/hosts&amp;lt;/code&amp;gt;. Запуск docker-контейнера с IDE будет выполнен на этом хосте&lt;br /&gt;
|default                                            &lt;br /&gt;
|-&lt;br /&gt;
|docker/containernametemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон для формирования названия контейнера IDE для выбранного снимка. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|TheiaDockerContainerStartContext]]&lt;br /&gt;
|&amp;quot;theia-1-46-&amp;lt;nowiki&amp;gt;{{.StartArgs.SnapshotID}}&amp;lt;/nowiki&amp;gt;&amp;quot;             &lt;br /&gt;
|-&lt;br /&gt;
|docker/containerconfiglabels&lt;br /&gt;
|[]map&lt;br /&gt;
|Список &amp;quot;меток&amp;quot; docker-контейнера. Дополняет список меток в &amp;lt;code&amp;gt;docker/container/config/labels&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
 - &amp;quot;com.docker.compose.project&amp;quot;: svacer             &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры docker-образа из которого будет запущен контейнер&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/name&lt;br /&gt;
|string&lt;br /&gt;
|Название образа&lt;br /&gt;
|theia-blueprint                                    &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/tag&lt;br /&gt;
|string&lt;br /&gt;
|Тег образа&lt;br /&gt;
|1.46.0.sarif.clang                                 &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcetype&lt;br /&gt;
|enum: repository/file&lt;br /&gt;
|Тип источника для загрузки образа в docker-хост.&lt;br /&gt;
* &amp;lt;code&amp;gt;repository&amp;lt;/code&amp;gt; - будет вызван &amp;lt;code&amp;gt;docker pull&amp;lt;/code&amp;gt; образа &amp;lt;code&amp;gt;{image/name}:{image/tag}&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt; - будет вызван &amp;lt;code&amp;gt;docker load&amp;lt;/code&amp;gt; с url'ом &amp;lt;code&amp;gt;image/sourcefileurl&amp;lt;/code&amp;gt;&lt;br /&gt;
|file                                               &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcefileurl&lt;br /&gt;
|url&lt;br /&gt;
|Url откуда будет загружен docker-образ если &amp;lt;code&amp;gt;image/sourcetype == &amp;quot;file&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
Url может содержать:&lt;br /&gt;
- путь к локальному файлу: схема &amp;lt;code&amp;gt;file://&amp;lt;/code&amp;gt;&lt;br /&gt;
- http/https-адрес: схема &amp;lt;code&amp;gt;http://&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;https://&amp;lt;/code&amp;gt;&lt;br /&gt;
|https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/&lt;br /&gt;
|map&lt;br /&gt;
|Свойства docker-контейнера&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/config.go#L70&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config/env&lt;br /&gt;
|[]string&lt;br /&gt;
|Список переменных среды, которые будут установлены в контейнере&lt;br /&gt;
|&lt;br /&gt;
 - THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;     &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры хостинга контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/hostconfig.go#L379&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/autoremove&lt;br /&gt;
|bool&lt;br /&gt;
|&lt;br /&gt;
|true                                               &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/portbindings&lt;br /&gt;
|map&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
 &amp;quot;3000/tcp&amp;quot;:                                        &lt;br /&gt;
   - hostport: 0                                    &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/networkconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Сетевые настройки контейнера. Соответствуют структуре https://github.com/moby/moby/blob/v24.0.7/api/types/network/network.go#L104&lt;br /&gt;
|                                                   &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры проверки доступности healthcheck ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для проверки доступности IDE после запуска docker-контейнера&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck&lt;br /&gt;
|map&lt;br /&gt;
|Параметры проверки доступности IDE&lt;br /&gt;
|                                     &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyretries&lt;br /&gt;
|int&lt;br /&gt;
|Количества попыток проверки до ошибки доступности&lt;br /&gt;
|10                                   &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyperiod&lt;br /&gt;
|golang duration string&lt;br /&gt;
|Интервал проверки&lt;br /&gt;
|200ms                                &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Структуры передаваемые в поля с golang-шаблонами строк ====&lt;br /&gt;
&lt;br /&gt;
 sarifFileContext {&lt;br /&gt;
     Time    time.Time&lt;br /&gt;
 	Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
 &lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 TheiaDockerContainerStartContext {&lt;br /&gt;
 	IdeID: {&lt;br /&gt;
         IdeType  string&lt;br /&gt;
         ConfigID string&lt;br /&gt;
     },&lt;br /&gt;
 	StartArgs: {&lt;br /&gt;
         SnapshotID string&lt;br /&gt;
         UserID     string&lt;br /&gt;
         User       string&lt;br /&gt;
     },&lt;br /&gt;
 	Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
 &lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация по умолчанию используемая в svacer ===&lt;br /&gt;
&lt;br /&gt;
Данная настройка применяется по умолчанию для запуска Theia IDE, если в конфигурационном файле svacer.cfg отсутствует раздел &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
xsvacer:&lt;br /&gt;
  docker:&lt;br /&gt;
    hosts:&lt;br /&gt;
      default: # конфигурация docker-хоста&lt;br /&gt;
        type: external&lt;br /&gt;
      ...&lt;br /&gt;
&lt;br /&gt;
  webide:&lt;br /&gt;
    theia:&lt;br /&gt;
      1-46-0: &amp;amp;1-46-0&lt;br /&gt;
        disabled: true&lt;br /&gt;
        order: 0&lt;br /&gt;
        name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
        sourcesroot: ${USER_CACHE_DIR}/svacer-snapshot-sources&lt;br /&gt;
        sariffiletemplate: &amp;quot;&amp;lt;nowiki&amp;gt;{{.Context.ProjectName}}.{{.Context.BranchName}}&amp;lt;/nowiki&amp;gt;.sarif&amp;quot;&lt;br /&gt;
        manager:&lt;br /&gt;
          type: default&lt;br /&gt;
        docker:&lt;br /&gt;
          hostid: default # идентификатор используемого docker-хоста&lt;br /&gt;
          containernametemplate: &amp;quot;theia-1-46-&amp;lt;nowiki&amp;gt;{{.StartArgs.SnapshotID}}&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
          image:&lt;br /&gt;
            name: theia-blueprint&lt;br /&gt;
            tag: 1.46.0.sarif.clang&lt;br /&gt;
            sourcetype: file&lt;br /&gt;
            sourcefileurl: https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar&lt;br /&gt;
          containerconfiglabels:&lt;br /&gt;
            - &amp;quot;com.docker.compose.project&amp;quot;: svacer&lt;br /&gt;
          container:&lt;br /&gt;
            config:&lt;br /&gt;
              env:&lt;br /&gt;
                - THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
            hostconfig:&lt;br /&gt;
              autoremove: true&lt;br /&gt;
              portbindings:&lt;br /&gt;
                &amp;quot;3000/tcp&amp;quot;:&lt;br /&gt;
                  - hostport: 0&lt;br /&gt;
            networkconfig:&lt;br /&gt;
        healthcheck:&lt;br /&gt;
          starttoreadyretries: 10&lt;br /&gt;
          starttoreadyperiod: 200ms&lt;br /&gt;
      default:&lt;br /&gt;
        &amp;lt;&amp;lt;: *1-46-0&lt;br /&gt;
        order: 0&lt;br /&gt;
        disabled: false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' По умолчанию используется docker-хост с идентификатором &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;. Согласно настройке этого хоста, по умолчанию предполагается взаимодействие с докером через unix-сокет &amp;lt;code&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt;. Соответственно пользователь, под которым запускается svacer должен иметь доступ к этому сокету (https://docs.docker.com/engine/install/linux-postinstall/).&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' При наличии раздела &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; в конфигурационном файле &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;, будут применены только настройки из этого раздела. Настройки по умолчанию будут полностью проигнорированы.&lt;br /&gt;
&lt;br /&gt;
=== Изменение конфигурационных параметров с помощью переменных окружения ===&lt;br /&gt;
&lt;br /&gt;
Значения атрибутов конфигурации могут быть изменены с помощью переменных окружения &amp;lt;code&amp;gt;XSVACER_WEBIDE_THEIA_{id конфигурации ide}[_параметр]={значение параметра}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например, для активации rootless-хоста &amp;lt;code&amp;gt;xsvacer/hosts/local&amp;lt;/code&amp;gt; и переключения запуска IDE с идентификатором &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; на этот хост, можно указать такие значения переменных окружения при запуске svacer'а:&lt;br /&gt;
 XSVACER_DOCKER_HOSTS_LOCAL_DISABLED=false&lt;br /&gt;
 XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_HOSTID=local&lt;br /&gt;
&lt;br /&gt;
== Очистка системы: удаление артефактов функциональности ==&lt;br /&gt;
&lt;br /&gt;
В процессе использования функциональности IDE создаются следующие артефакты:&lt;br /&gt;
# Исходные файлы снимков скачиваются в &amp;quot;корневые папки&amp;quot; заданные в параметре &amp;lt;code&amp;gt;xsvacer/webide/theia/{id конфигурации}/sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
# Артефакты docker:&lt;br /&gt;
#* образы и контейнеры создаются на хостах, указанных в конфигурации docker-хостов, указанных в &amp;lt;code&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/hostid&amp;lt;/code&amp;gt;&lt;br /&gt;
#* названия docker-образов будут соответствовать параметрам в &amp;lt;code&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/image&amp;lt;/code&amp;gt;&lt;br /&gt;
#* названия docker-контейнеров будут соответствовать параметру &amp;lt;code&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/containernametemplate&amp;lt;/code&amp;gt;&lt;br /&gt;
#* наборы меток doker-контейнеров будут содержать:&lt;br /&gt;
#*: метки перечисленные в &amp;lt;code&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/containerconfiglabels&amp;lt;/code&amp;gt;&lt;br /&gt;
#*: метки перечисленные в &amp;lt;code&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/container/config/labels&amp;lt;/code&amp;gt;&lt;br /&gt;
#*: метки с названиями &amp;lt;code&amp;gt;svacer.service.id&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;svacer.service.type&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;svacer.theia.start_args&amp;lt;/code&amp;gt;&lt;br /&gt;
# При использовании rootless-хоста docker'а будут созданы папки, согласно [[Help:XSvacer:Docker#Специфичные настройки для rootless-хоста]]&lt;br /&gt;
&lt;br /&gt;
== Рекомендации ==&lt;br /&gt;
&lt;br /&gt;
=== Предварительная загрузка docker-образа с IDE ===&lt;br /&gt;
&lt;br /&gt;
По умолчанию параметр &amp;lt;code&amp;gt;xsvacer/webide/theia/1-46-0/docker/image/sourcefileurl&amp;lt;/code&amp;gt; содержит значение &amp;lt;code&amp;gt;https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar&amp;lt;/code&amp;gt;. По этому адресу находится архив с docker-образом для Theia IDE.&lt;br /&gt;
&lt;br /&gt;
Если docker-образ ещё не был загружен, то загрузка начнётся при первой попытке запуска IDE. Т.к. этот процесс занимает длительное время, то запрос запуска IDE тоже будет выполняться долго.&lt;br /&gt;
&lt;br /&gt;
Для ускорения первого запуска IDE, докер образ можно загрузить на хост docker'а вручную. Для этого необходимо:&lt;br /&gt;
# Скачать файл архива;&lt;br /&gt;
# Выполнить команду &amp;lt;code&amp;gt;docker image load -i /path/to/tar/theia-blueprint.1.46.0.sarif.clang.tar&amp;lt;/code&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
== Информация о docker-образе Theia IDE ==&lt;br /&gt;
&lt;br /&gt;
Docker-образ, используемый по умолчанию, построен на базе [[https://theia-ide.org/|Eclipse Theia IDE]] версии [[https://github.com/eclipse-theia/theia-blueprint/tree/v1.46.0|1.46.0]]&lt;br /&gt;
&lt;br /&gt;
При этом была изменена компоновка расширений theia (результат выполнения &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
diff --git a/browser.Dockerfile b/browser.Dockerfile&lt;br /&gt;
index efe591e..a4ebb6a 100644&lt;br /&gt;
--- a/browser.Dockerfile&lt;br /&gt;
+++ b/browser.Dockerfile&lt;br /&gt;
@@ -42,7 +42,7 @@ RUN chmod g+rw /home &amp;amp;&amp;amp; \&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y wget apt-transport-https &amp;amp;&amp;amp; \&lt;br /&gt;
     wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | tee /usr/share/keyrings/adoptium.asc &amp;amp;&amp;amp; \&lt;br /&gt;
     echo &amp;quot;deb [signed-by=/usr/share/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main&amp;quot; | tee /etc/apt/sources.list.d/adoptium.list &amp;amp;&amp;amp; \&lt;br /&gt;
-    apt-get update &amp;amp;&amp;amp; apt-get install -y git openssh-client openssh-server bash libsecret-1-0 temurin-17-jdk maven &amp;amp;&amp;amp; \&lt;br /&gt;
+    apt-get update &amp;amp;&amp;amp; apt-get install -y git openssh-client openssh-server bash libsecret-1-0 clangd &amp;amp;&amp;amp; \&lt;br /&gt;
     apt-get purge -y wget &amp;amp;&amp;amp; \&lt;br /&gt;
     apt-get clean&lt;br /&gt;
&lt;br /&gt;
diff --git a/package.json b/package.json&lt;br /&gt;
index 9044595..9d0dcc8 100644&lt;br /&gt;
--- a/package.json&lt;br /&gt;
+++ b/package.json&lt;br /&gt;
@@ -54,10 +54,8 @@&lt;br /&gt;
   &amp;quot;theiaPluginsDir&amp;quot;: &amp;quot;plugins&amp;quot;,&lt;br /&gt;
   &amp;quot;theiaPlugins&amp;quot;: {&lt;br /&gt;
     &amp;quot;eclipse-theia.builtin-extension-pack&amp;quot;: &amp;quot;https://open-vsx.org/api/eclipse-theia/builtin-extension-pack/1.83.1/file/eclipse-theia.builtin-extension-pack-1.83.1.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;ms-vscode.js-debug&amp;quot;: &amp;quot;https://open-vsx.org/api/ms-vscode/js-debug/1.83.1/file/ms-vscode.js-debug-1.83.1.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;ms-vscode.js-debug-companion&amp;quot;: &amp;quot;https://open-vsx.org/api/ms-vscode/js-debug-companion/1.1.2/file/ms-vscode.js-debug-companion-1.1.2.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;vscjava.vscode-java-pack&amp;quot;: &amp;quot;https://open-vsx.org/api/vscjava/vscode-java-pack/0.25.11/file/vscjava.vscode-java-pack-0.25.11.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;vscjava.vscode-java-dependency&amp;quot;: &amp;quot;https://open-vsx.org/api/vscjava/vscode-java-dependency/0.21.2/file/vscjava.vscode-java-dependency-0.21.2.vsix&amp;quot;&lt;br /&gt;
+    &amp;quot;llvm-vs-code-extensions.vscode-clangd&amp;quot;: &amp;quot;https://open-vsx.org/api/llvm-vs-code-extensions/vscode-clangd/0.1.26/file/llvm-vs-code-extensions.vscode-clangd-0.1.26.vsix&amp;quot;,&lt;br /&gt;
+    &amp;quot;ms-sarifvscode.sarif-viewer&amp;quot;: &amp;quot;https://open-vsx.org/api/MS-SarifVSCode/sarif-viewer/3.4.2/file/MS-SarifVSCode.sarif-viewer-3.4.2.vsix&amp;quot;&lt;br /&gt;
   },&lt;br /&gt;
   &amp;quot;theiaPluginsExcludeIds&amp;quot;: [&lt;br /&gt;
     &amp;quot;ms-vscode.js-debug-companion&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Команда построения docker-образа: &amp;lt;code&amp;gt;docker build -t theia-blueprint:1.46.0.sarif.clang -f browser.Dockerfile .&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Команда экспорта docker-образа:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
docker image save theia-blueprint:1.46.0 &amp;gt; /path/to/tar/theia-blueprint.1.46.0.docker.command.tar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Docker&amp;diff=1965</id>
		<title>Help:XSvacer:Docker</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Docker&amp;diff=1965"/>
		<updated>2024-06-06T13:24:53Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Управление docker-контейнерами =&lt;br /&gt;
 '''Примечание:''' данная функциональность входит в набор расширений XSvacer.&lt;br /&gt;
&lt;br /&gt;
Данная функциональность предназначена для управления docker-контейнерами содержащими компоненты XSvacer.&lt;br /&gt;
&lt;br /&gt;
Управление docker-контейнерами осуществляется с помощью взаимодействия с docker-хостом с использованием [https://docs.docker.com/engine/api/latest/ REST API].&lt;br /&gt;
&lt;br /&gt;
Возможны два сценария использования docker'а:&lt;br /&gt;
# Подключение к существующему (&amp;quot;внешнему&amp;quot;) docker-хосту;&lt;br /&gt;
# Запуск управляемого svacer'ом [https://docs.docker.com/go/rootless/ rootless-хоста].&lt;br /&gt;
&lt;br /&gt;
== Активация функциональности ==&lt;br /&gt;
Для активации функциональности необходимо указать флаг &amp;lt;code&amp;gt;--xsvacer.features docker&amp;lt;/code&amp;gt; при запуске svacer'а.&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' на базе данной функциональности осуществляется запуск компонентов других расширений XSvacer. В таком случае её не обязательно запускать явно: она будет запущена, если будет запущена зависимая функциональность.&lt;br /&gt;
&lt;br /&gt;
== Конфигурация ==&lt;br /&gt;
&lt;br /&gt;
Управление настройками функциональности осуществляется с помощью конфигурационного yaml-файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Раздел конфигурации для управления функциональностью - &amp;lt;code&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Раздел содержит перечисление настроек подключаемых хостов docker'а &amp;lt;code&amp;gt;xsvacer/docker/hosts&amp;lt;/code&amp;gt;, на которые в дальнейшем будут ссылаться зависимые функциональности. Каждое поле/свойство в &amp;lt;code&amp;gt;xsvacer/docker/hosts/...&amp;lt;/code&amp;gt; является идентификатором подключения и содержит его конфигурацию.&lt;br /&gt;
&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   docker:&lt;br /&gt;
     hosts:&lt;br /&gt;
       dockerhost1:&lt;br /&gt;
         type: ...&lt;br /&gt;
         host: ...&lt;br /&gt;
         disabled: false&lt;br /&gt;
         ...&lt;br /&gt;
       dockerhost2:&lt;br /&gt;
         ...&lt;br /&gt;
   &lt;br /&gt;
   dependentFeature1:&lt;br /&gt;
     ...&lt;br /&gt;
     docker:&lt;br /&gt;
       hostid: dockerhost1&lt;br /&gt;
     ...&lt;br /&gt;
   dependentFeature2:&lt;br /&gt;
     ...&lt;br /&gt;
     docker:&lt;br /&gt;
       hostid: dockerhost2&lt;br /&gt;
     ...&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' в случае отсутствия файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; или отсутствии раздела &amp;lt;code&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt;, будет использоваться конфигурация по умолчанию (см. ниже)&lt;br /&gt;
&lt;br /&gt;
=== Общие параметры docker-хостов ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название &lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;&lt;br /&gt;
|enum: &amp;lt;code&amp;gt;external&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;managed&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;remote&amp;lt;/code&amp;gt;&lt;br /&gt;
|Тип подключаемого docker-хоста:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;external&amp;lt;/code&amp;gt; - &amp;quot;внешний&amp;quot; docker-хост&lt;br /&gt;
* &amp;lt;code&amp;gt;managed&amp;lt;/code&amp;gt; - &amp;quot;управляемый&amp;quot; rootless-хост&lt;br /&gt;
* &amp;lt;code&amp;gt;remote&amp;lt;/code&amp;gt; - аналогичен &amp;lt;code&amp;gt;external&amp;lt;/code&amp;gt;, но &amp;lt;code&amp;gt;host&amp;lt;/code&amp;gt; должен быть задан&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;hostd&amp;lt;/code&amp;gt;&lt;br /&gt;
|url&lt;br /&gt;
|Строка содержащая url docker-хоста&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;disabled&amp;lt;/code&amp;gt;&lt;br /&gt;
|bool&lt;br /&gt;
|Конфигурация хоста неактивна&lt;br /&gt;
Неактивная конфигурация не может использоваться в других функциональностях&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Использование существующего (&amp;quot;внешнего&amp;quot;) docker-хоста ===&lt;br /&gt;
Данный способ взаимодействия предполагает подключение к существующему хосту docker'а.&lt;br /&gt;
&lt;br /&gt;
Доступные варианты подключения:&lt;br /&gt;
&lt;br /&gt;
# К локальному хосту через unix-сокет;&lt;br /&gt;
# К удалённому хосту по ssh;&lt;br /&gt;
# К удалённому хосту по http;&lt;br /&gt;
# К к удалённому хосту по https.&lt;br /&gt;
&lt;br /&gt;
Для использования &amp;quot;внешнего&amp;quot; хоста docker'а в конфигурационном файле нужно указать &amp;lt;code&amp;gt;type: external&amp;lt;/code&amp;gt;, а также задать адрес хоста, соответствующий типу подключения:&lt;br /&gt;
 docker:&lt;br /&gt;
   hosts:&lt;br /&gt;
     default:&lt;br /&gt;
       type: external&lt;br /&gt;
       host: &amp;quot;unix:///path/to/docker.sock&amp;quot;&lt;br /&gt;
     remote1:&lt;br /&gt;
       type: external&lt;br /&gt;
       host: &amp;quot;&amp;lt;nowiki&amp;gt;ssh://docker-user@docker-host&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
     remote2:&lt;br /&gt;
       type: external&lt;br /&gt;
       host: &amp;quot;&amp;lt;nowiki&amp;gt;http://docker-host-ip-address:2375&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
     remote3:&lt;br /&gt;
       type: external&lt;br /&gt;
       host: &amp;quot;&amp;lt;nowiki&amp;gt;https://docker-host-ip-address:2376&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
       clienttls: ...&lt;br /&gt;
Если параметр &amp;lt;code&amp;gt;host&amp;lt;/code&amp;gt; не задан, то по умолчанию будет использоваться unix-сокет.&lt;br /&gt;
&lt;br /&gt;
==== Подключение к локальному хосту через unix-сокет ====&lt;br /&gt;
При обычном запуске демона &amp;lt;code&amp;gt;dockerd&amp;lt;/code&amp;gt;, взаимодействие с хостом осуществляется с помощью unix-сокета &amp;lt;code&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Доступ к сокету может получить либо пользователь с правами &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt;, либо обычный пользователь, входящий в группу &amp;lt;code&amp;gt;docker&amp;lt;/code&amp;gt; (https://docs.docker.com/reference/cli/dockerd/#daemon-socket-option).&lt;br /&gt;
&lt;br /&gt;
Пользователь, под которым запускается svacer, должен иметь права доступа к указанному unix-сокету docker'а (https://docs.docker.com/engine/install/linux-postinstall/).&lt;br /&gt;
 '''Внимание!''' При отсутствии прав доступа к unix-сокету у пользователя, под которым запускается svacer, использование данной функциональности зависимыми функциональностями будет приводить к ошибке.&lt;br /&gt;
 В таком случае можно воспользоваться rootless-хостом (см. ниже).&lt;br /&gt;
&lt;br /&gt;
Если для взаимодействия с хостом docker'а используется дефолтный unix-сокет &amp;lt;code&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt;, то в конфигурации поле &amp;lt;code&amp;gt;host&amp;lt;/code&amp;gt; можно не указывать:&lt;br /&gt;
 docker:&lt;br /&gt;
   hosts:&lt;br /&gt;
     default:&lt;br /&gt;
       type: external&lt;br /&gt;
&lt;br /&gt;
==== Подключение к удалённому хосту по ssh ====&lt;br /&gt;
&lt;br /&gt;
Чтобы подключиться к удалённому хосту docker'а по ssh, необходимо в поле &amp;lt;code&amp;gt;host&amp;lt;/code&amp;gt; указать схему &amp;lt;code&amp;gt;ssh://&amp;lt;/code&amp;gt;, реквизиты пользователя и название/адрес docker-хоста:&lt;br /&gt;
&lt;br /&gt;
 docker:&lt;br /&gt;
   hosts:&lt;br /&gt;
     default:&lt;br /&gt;
       type: external&lt;br /&gt;
       host: &amp;quot;&amp;lt;nowiki&amp;gt;ssh://docker-user@docker-host&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Указанный пользователь должен иметь возможность подключения по ssh к указанному хосту, а также иметь права доступа к unix-сокету docker'а на удалённом хосте (https://docs.docker.com/engine/security/protect-access/#use-ssh-to-protect-the-docker-daemon-socket)&lt;br /&gt;
&lt;br /&gt;
==== Подключение к удалённому хосту по http ====&lt;br /&gt;
&lt;br /&gt;
Чтобы подключиться к удалённому хосту docker'а по http, необходимо в поле &amp;lt;code&amp;gt;host&amp;lt;/code&amp;gt; указать схему &amp;lt;code&amp;gt;http://&amp;lt;/code&amp;gt; и адрес docker-хоста:&lt;br /&gt;
 docker:&lt;br /&gt;
   hosts:&lt;br /&gt;
     default:&lt;br /&gt;
       type: external&lt;br /&gt;
       host: &amp;quot;&amp;lt;nowiki&amp;gt;http://docker-host-ip-address:port&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' Данный тип подключения является *небезопасным*, т.к. при использовании API docker'а не производится шифрование сетевого трафика и аутентификация клиента при доступе к docker'у. Чтобы создать безопасное сетевое соединение необходимо использовать подключение по https (tls) (см. ниже)&lt;br /&gt;
&lt;br /&gt;
==== Подключение к удалённому хосту по https (tls) ====&lt;br /&gt;
&lt;br /&gt;
Docker-хост может предоставлять доступ по https (https://docs.docker.com/engine/security/protect-access/#use-tls-https-to-protect-the-docker-daemon-socket).&lt;br /&gt;
&lt;br /&gt;
В таком случае для доступа к API необходимо иметь сертификат удостоверяющего центра, клиентский ключ и сертификат.&lt;br /&gt;
&lt;br /&gt;
В конфигурационном файле пути к ключам указываются в поле &amp;lt;code&amp;gt;xsvacer/docker/{docker-host-id}/clienttls&amp;lt;/code&amp;gt;:&lt;br /&gt;
 docker:&lt;br /&gt;
   hosts:&lt;br /&gt;
     default:&lt;br /&gt;
       type: external&lt;br /&gt;
       host: &amp;quot;&amp;lt;nowiki&amp;gt;https://docker-host-ip-address:2376&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
       clienttls:&lt;br /&gt;
         ca: &amp;quot;/path/to/ca.pem&amp;quot;&lt;br /&gt;
         cert: &amp;quot;/path/to/cert.pem&amp;quot;&lt;br /&gt;
         key: &amp;quot;/path/to/key.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===== Специфичные настройки для подключения к https хосту =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|clienttls/&lt;br /&gt;
|map&lt;br /&gt;
|Настройки TLS                                   &lt;br /&gt;
|-&lt;br /&gt;
|clienttls/ca&lt;br /&gt;
|url&lt;br /&gt;
|Путь к файлу сертификата удостоверяющего центра &lt;br /&gt;
|-&lt;br /&gt;
|clienttls/cert&lt;br /&gt;
|url&lt;br /&gt;
|Путь к клиентскому сертификату                  &lt;br /&gt;
|-&lt;br /&gt;
|clienttls/key&lt;br /&gt;
|url&lt;br /&gt;
|Путь к клиентскому ключу                         &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Памятка при использовании подключения к удалённым хостам ====&lt;br /&gt;
&lt;br /&gt;
NOTE: при использовании подключения к удалённому хосту docker'а, при настройке биндингов создаваемых контейнеров необходимо указывать ip-адрес сетевого интерфейса хоста, т.к. при привязке контейнера к 0.0.0.0 на машине хоста, контейнеры будут недоступны снаружи.&lt;br /&gt;
&lt;br /&gt;
=== Запуск &amp;quot;управляемого&amp;quot; rootless-хоста ===&lt;br /&gt;
&lt;br /&gt;
При отсутствии доступного docker-хоста, либо если не хочется его загромождать контейнерами svacer'а, предусмотрена возможность запуска &amp;quot;управляемого&amp;quot; rootless-хоста, не требующего настройки дополнительных прав для пользователя, под которым запускается svacer (https://docs.docker.com/engine/security/rootless/).&lt;br /&gt;
&lt;br /&gt;
Управление (запуск и остановка) rootless-хостом будет осуществлять svacer.&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' Доступно только для linux'а.&lt;br /&gt;
&lt;br /&gt;
Для использования данного rootless-хоста в конфигурационном файле для хоста нужно указать &amp;lt;code&amp;gt;type: managed&amp;lt;/code&amp;gt;.&lt;br /&gt;
 docker:&lt;br /&gt;
   hosts:&lt;br /&gt;
     local:&lt;br /&gt;
       type: managed&lt;br /&gt;
       ...&lt;br /&gt;
&lt;br /&gt;
==== Специфичные настройки для rootless-хоста ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|managed/&lt;br /&gt;
|map&lt;br /&gt;
|параметры запуска rootless-хоста                                             &lt;br /&gt;
|-&lt;br /&gt;
|managed/executable&lt;br /&gt;
|string&lt;br /&gt;
|исполняемый файл. Должен быть доступен в $PATH или содержать абсолютный путь &lt;br /&gt;
''формат'': имя исполняемого фала, доступного через переменную &amp;lt;code&amp;gt;$PATH&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
''или'': абсолютный путь до исполняемого файла&lt;br /&gt;
|-&lt;br /&gt;
|managed/env&lt;br /&gt;
|[]string&lt;br /&gt;
|список переменных окружения для процесса rootless-хоста                      &lt;br /&gt;
формат: &amp;lt;code&amp;gt;&amp;quot;НАЗВАНИЕ_ПЕРЕМЕННОЙ=значение переменной&amp;quot;&amp;lt;/code&amp;gt;                          &lt;br /&gt;
|-&lt;br /&gt;
|managed/args&lt;br /&gt;
|[]string&lt;br /&gt;
|список аргументов запуска rootless-хоста                                     &lt;br /&gt;
''формат'': &amp;lt;code&amp;gt;&amp;quot;--название-аргумента=значение-аргумента&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''или'': &amp;lt;code&amp;gt;&amp;quot;--название-аргумента&amp;quot;, &amp;quot;значение-аргумента&amp;quot;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
''или'': &amp;lt;code&amp;gt;&amp;quot;--название-флага&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|managed/loglevel&lt;br /&gt;
|string&lt;br /&gt;
|уровень логирования, на котором будут записываться stdout и stderr процесса rootless-хоста                                      &lt;br /&gt;
|-&lt;br /&gt;
|managed/logprefix&lt;br /&gt;
|string&lt;br /&gt;
|префикс в логе, которым будут помечаться записи из stdout и stderr процесса rootless-хоста                                      &lt;br /&gt;
|-&lt;br /&gt;
|managed/healthcheck&lt;br /&gt;
|map&lt;br /&gt;
|параметры проверки доступности rootless-хоста                                &lt;br /&gt;
|-&lt;br /&gt;
|managed/healthcheck/interval&lt;br /&gt;
|golang duration string&lt;br /&gt;
|интервал проверки                                                            &lt;br /&gt;
|-&lt;br /&gt;
|managed/healthcheck/retries&lt;br /&gt;
|int&lt;br /&gt;
|количество попыток проверки до ошибки доступности                            &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
В значениях &amp;lt;code&amp;gt;managed/env&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;managed/args&amp;lt;/code&amp;gt; можно использовать имена переменных окружения в формате &amp;lt;code&amp;gt;${НАЗВАНИЕ_ПЕРЕМЕННОЙ}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Рекомендуемая конфигурация rootless-хоста ====&lt;br /&gt;
&lt;br /&gt;
При запуске &amp;lt;code&amp;gt;dockerd-rootless.sh&amp;lt;/code&amp;gt; без параметров папки с артефактами docker'а создаются во вложенных папках внутри &amp;lt;code&amp;gt;/run/user/$UID/&amp;lt;/code&amp;gt;.&lt;br /&gt;
Для лучшей локализации артефактов svacer'а рекомендуется использовать следующие настройки для rootless-хоста:&lt;br /&gt;
 docker:&lt;br /&gt;
   hosts:&lt;br /&gt;
     local:&lt;br /&gt;
       type: managed&lt;br /&gt;
       host: &amp;quot;unix://${USER_CACHE_DIR}/svacer-docker-host/svacer-docker.sock&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
       managed:&lt;br /&gt;
         executable: &amp;quot;dockerd-rootless.sh&amp;quot;&lt;br /&gt;
         env:&lt;br /&gt;
           - &amp;quot;DOCKERD_ROOTLESS_ROOTLESSKIT_STATE_DIR=${USER_CACHE_DIR}/svacer-docker-host/state-dir/&amp;quot;&lt;br /&gt;
         args:&lt;br /&gt;
           - &amp;quot;--data-root=${USER_CACHE_DIR}/svacer-docker-host/data-root/&amp;quot;&lt;br /&gt;
           - &amp;quot;--exec-root=${USER_CACHE_DIR}/svacer-docker-host/exec-root/&amp;quot;&lt;br /&gt;
           - &amp;quot;--pidfile=${USER_CACHE_DIR}/svacer-docker-host/svacer-docker.pid&amp;quot;&lt;br /&gt;
         logLevel: info&lt;br /&gt;
         logPrefix: &amp;quot;DOCKER HOST: &amp;quot;&lt;br /&gt;
         healthCheck:&lt;br /&gt;
           interval: 1s&lt;br /&gt;
           retries: 10&lt;br /&gt;
&lt;br /&gt;
Здесь вместо &amp;lt;code&amp;gt;${USER_CACHE_DIR}&amp;lt;/code&amp;gt; будет подставлен путь &amp;lt;code&amp;gt;$HOME/.cache&amp;lt;/code&amp;gt; на unix-подобных системах или &amp;lt;code&amp;gt;%LocalAppData%&amp;lt;/code&amp;gt; на windows.&lt;br /&gt;
&lt;br /&gt;
При таких настройках все артефакты хоста docker'а будут храниться внутри папки &amp;lt;code&amp;gt;${USER_CACHE_DIR}/svacer-docker-host&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Использование &amp;quot;неуправляемого&amp;quot; rootless-хоста ===&lt;br /&gt;
&lt;br /&gt;
В случае необходимости иметь возможность управления временем жизни rootless-хоста без участия svacer'а, его можно запустить отдельно от svacer'а. Например командой:&lt;br /&gt;
 DOCKERD_ROOTLESS_ROOTLESSKIT_STATE_DIR=/home/$USER/.cache/svacer-docker-host/state-dir/ dockerd-rootless.sh --host unix:///home/$USER/.cache/svacer-docker-host/svacer-docker.sock --data-root=/home/$USER/.cache/svacer-docker-host/data-root/ --exec-root=/home/$USER/.cache/svacer-docker-host/exec-root/ --pidfile=/home/$USER/.cache/svacer-docker-host/svacer-docker.pid&lt;br /&gt;
&lt;br /&gt;
В таком случае подключиться к данному хосту можно как к &amp;quot;внешнему&amp;quot; (&amp;lt;code&amp;gt;type: external&amp;lt;/code&amp;gt;) с указанием адреса unix-сокета. Например:&lt;br /&gt;
 docker:&lt;br /&gt;
   hosts:&lt;br /&gt;
     unmanaged:&lt;br /&gt;
       type: external&lt;br /&gt;
       host: &amp;quot;unix:///home/${USER}/.cache/svacer-docker-host/svacer-docker.sock&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация по умолчанию ===&lt;br /&gt;
&lt;br /&gt;
Данная конфигурация применяется по умолчанию, если в конфигурационном файле svacer.cfg отсутствует раздел &amp;lt;code&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt;:&lt;br /&gt;
 docker:&lt;br /&gt;
   hosts:&lt;br /&gt;
     default:&lt;br /&gt;
       type: external&lt;br /&gt;
     local:&lt;br /&gt;
       type: managed&lt;br /&gt;
       host: &amp;quot;unix://${USER_CACHE_DIR}/svacer-docker-host/svacer-docker.sock&amp;quot;&lt;br /&gt;
       disabled: true&lt;br /&gt;
 &lt;br /&gt;
       managed:&lt;br /&gt;
         executable: &amp;quot;dockerd-rootless.sh&amp;quot;&lt;br /&gt;
         env:&lt;br /&gt;
           - &amp;quot;DOCKERD_ROOTLESS_ROOTLESSKIT_STATE_DIR=${USER_CACHE_DIR}/svacer-docker-host/state-dir/&amp;quot;&lt;br /&gt;
         args:&lt;br /&gt;
           - &amp;quot;--data-root=${USER_CACHE_DIR}/svacer-docker-host/data-root/&amp;quot;&lt;br /&gt;
           - &amp;quot;--exec-root=${USER_CACHE_DIR}/svacer-docker-host/exec-root/&amp;quot;&lt;br /&gt;
           - &amp;quot;--pidfile=${USER_CACHE_DIR}/svacer-docker-host/svacer-docker.pid&amp;quot;&lt;br /&gt;
         logLevel: info&lt;br /&gt;
         logPrefix: &amp;quot;DOCKER HOST: &amp;quot;&lt;br /&gt;
         healthCheck:&lt;br /&gt;
           interval: 1s&lt;br /&gt;
           retries: 10&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' При наличии раздела &amp;lt;code&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt; в конфигурационном файле &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;, будут применены только настройки из этого раздела. Настройки по умолчанию будут полностью проигнорированы.&lt;br /&gt;
&lt;br /&gt;
=== Изменение конфигурационных параметров с помощью переменных окружения ===&lt;br /&gt;
&lt;br /&gt;
Значения атрибутов конфигурации могут быть изменены с помощью переменных окружения &amp;lt;code&amp;gt;XSVACER_DOCKER_HOSTS_{id хоста}[_параметр]={значение параметра}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например, для активации rootless-хоста &amp;lt;code&amp;gt;xsvacer/hosts/local&amp;lt;/code&amp;gt; можно указать такие значения переменных окружения при запуске svacer'а:&lt;br /&gt;
 XSVACER_DOCKER_HOSTS_LOCAL_DISABLED=false&lt;br /&gt;
&lt;br /&gt;
== Известные проблемы ==&lt;br /&gt;
&lt;br /&gt;
Список известных проблем и их решение&lt;br /&gt;
&lt;br /&gt;
=== rootless-хост продолжает работать при некорректной остановке svacer'а ===&lt;br /&gt;
&lt;br /&gt;
При некорректном завершении работы svacer'а (например, при получении сигнала &amp;lt;code&amp;gt;SIGKILL&amp;lt;/code&amp;gt;), процесс rootless-хоста останется в запущенным в системе.&lt;br /&gt;
&lt;br /&gt;
При этом svacer потеряет возможность управления (запуска/остановки) этого процесса.&lt;br /&gt;
&lt;br /&gt;
При последующем запуске svacer попробует повторно запустить rootless-хост и получит сообщение типа &amp;lt;code&amp;gt;[rootlesskit:parent] error: failed to lock /path/to/svacer-docker-host/state-dir/lock, another RootlessKit is running with the same state directory?&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом, если настройки не менялись, зависимые функциональности смогут получить доступ к &amp;quot;неконтролируемому&amp;quot; rootless-хосту, т.к. адрес unix-сокета хоста известен.&lt;br /&gt;
&lt;br /&gt;
При остановке svacer не будет останавливать &amp;quot;неконтролируемый&amp;quot; rootless-хост. &lt;br /&gt;
&lt;br /&gt;
Процесс rootless-хоста при необходимости может быть остановлен вручную. Например с помощью отправки сигнала &amp;lt;code&amp;gt;SIGTERM&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=1964</id>
		<title>Help:XSvacer:Webide</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=1964"/>
		<updated>2024-06-06T13:16:06Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Поддержка среды разработки Theia IDE =&lt;br /&gt;
 '''Примечание:''' данная функциональность входит в набор расширений XSvacer.&lt;br /&gt;
&lt;br /&gt;
Данная функциональность даёт возможность просматривать исходный код снимка с предупреждениями анализатора во внешней IDE.&lt;br /&gt;
&lt;br /&gt;
По умолчанию запускается IDE собранная на основе Theia IDE (https://theia-ide.org/).&lt;br /&gt;
&lt;br /&gt;
== Активация функциональности ==&lt;br /&gt;
Для активации функциональности необходимо указать флаг &amp;lt;code&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt; при запуске svacer'а.&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' при запуске функциональности &amp;lt;code&amp;gt;webide&amp;lt;/code&amp;gt; также будет запущена функциональность &amp;lt;code&amp;gt;[[Help:XSvacer:Docker|docker]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Активации функциональности:&lt;br /&gt;
* становится доступным REST API управления IDE для просмотра снимков проектов;&lt;br /&gt;
* в пользовательском интерфейсе появляется кнопка &amp;quot;Открыть в IDE&amp;quot;;&lt;br /&gt;
* устанавливается подключение к хосту docker'а, на котором будут запускаться контейнеры с экземплярами IDE.&lt;br /&gt;
&lt;br /&gt;
== REST API для работы с IDE ==&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' На этапе внедрения расширений XSvacer REST API может меняться. Следите за анонсами!&lt;br /&gt;
&lt;br /&gt;
После активации функциональности становятся доступны http-ресурсы для управления IDE снимками:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | REST API управления IDE&lt;br /&gt;
|-&lt;br /&gt;
!Ресурс&lt;br /&gt;
!Описание                                                &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
GET /xsvacer/webide/api/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Получение списка доступных для запуска IDE.&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;order&amp;quot;: 0&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
:&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; - название IDE&lt;br /&gt;
:&amp;lt;code&amp;gt;order&amp;lt;/code&amp;gt; - порядковый номер IDE в списке&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
GET /xsvacer/webide/api/snapshots/{snapshot_id}/ide/{ide_id}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Запрос описания экземпляра IDE, запущенного для снимка. &lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
:&amp;lt;code&amp;gt;ide_id&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;id&amp;quot;: {&lt;br /&gt;
    &amp;quot;ide_id&amp;quot;: {&lt;br /&gt;
      &amp;quot;ide_type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
      &amp;quot;config_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;snapshot_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;url&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;start_args&amp;quot;: {&lt;br /&gt;
    &amp;quot;snapshot_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;user&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;user_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
POST /xsvacer/webide/api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Запуск IDE для просмотра исходных кодов снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
PUT /api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Команда управления экземпляром IDE снимка&lt;br /&gt;
Доступные действия:&lt;br /&gt;
* &amp;lt;code&amp;gt;update_markup&amp;lt;/code&amp;gt; - обновление предупреждений и разметки (sarif-файла)&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;action&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt; - действие&lt;br /&gt;
:&amp;lt;code&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:''' пустой&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
DELETE /xsvacer/webide/api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Остановка экземпляра IDE снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:''' пустой&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Прокси для запросов экземпляра IDE снимка&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Формат идентификатора IDE ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{тип ide}__{идентификатор конфигурации}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например для &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;-конфигурации Theia IDE: &amp;lt;code&amp;gt;theia__default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Принцип работы ==&lt;br /&gt;
&lt;br /&gt;
Функциональность запуска IDE для просмотра исходного кода снимков становится доступной пользователю, если соблюдаются условия:&lt;br /&gt;
# Функциональность активна: при запуске svacer'а указан флаг &amp;lt;code&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt;;&lt;br /&gt;
# В конфигурации функциональности &amp;lt;code&amp;gt;xsvacer/webide/theia&amp;lt;/code&amp;gt; ([[Help:XSvacer:Webide#Конфигурация]]) есть хотя бы одна активная (&amp;lt;code&amp;gt;disabled: false&amp;lt;/code&amp;gt;) конфигурация IDE;&lt;br /&gt;
# У пользователя svacer имеются разрешения &amp;lt;code&amp;gt;&amp;quot;Просмотр маркеров&amp;quot;&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;&amp;quot;Read markers&amp;quot;&amp;lt;/code&amp;gt;) и &amp;lt;code&amp;gt;&amp;quot;Экспорт разметки&amp;quot;&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;&amp;quot;Export markup&amp;quot;&amp;lt;/code&amp;gt;) на проект, в котором находится снимок, для которого нужно запустить IDE.&lt;br /&gt;
&lt;br /&gt;
В противном случае в пользовательском интерфейсе будет отсутствовать кнопка &amp;lt;code&amp;gt;&amp;quot;Открыть в IDE&amp;quot;&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;&amp;quot;Open in IDE&amp;quot;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== Запуск IDE ===&lt;br /&gt;
&lt;br /&gt;
Запуск производится путём вызова http-метода &amp;lt;code&amp;gt;POST /api/snapshots/{snapshot_id}/ide&amp;lt;/code&amp;gt; с телом запроса &amp;lt;code&amp;gt;{&amp;quot;ideId&amp;quot;: &amp;quot;идентификатор IDE&amp;quot;}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последовательность действий, выполняемых при запуске IDE:&lt;br /&gt;
&lt;br /&gt;
# Производится проверка: была ли уже запущена указанная IDE для указанного снимка;&lt;br /&gt;
#* Если запущена: производится проверка: доступна ли IDE: отвечает на запросы;&lt;br /&gt;
#** Если IDE доступна: действие не требуется. Процесс запуска завершается;&lt;br /&gt;
#** Если IDE не доступна: продолжается процесс запуска. IDE будет ''перезапущена'';&lt;br /&gt;
# Создаётся &amp;quot;корневая папка снимка&amp;quot;, предназначенная для хранения исходного кода снимка и предупреждений анализатора с разметкой в виде sarif-файла. Название папки соответствует id снимка. Папка создаётся по пути заданному в параметре конфигурации IDE &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/sourcesroot&amp;lt;/code&amp;gt;;&lt;br /&gt;
# Исходный код снимка скачивается в &amp;quot;корневую папку снимка&amp;quot;;&lt;br /&gt;
# Производится экспорт маркеров и разметки в виде sarif-файла в &amp;quot;корневую папку снимка&amp;quot;. Название sarif-файла формируется с помощью шаблона, заданного в параметре конфигурации IDE &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/sariffiletemplate&amp;lt;/code&amp;gt;;&lt;br /&gt;
# Производится настройка и запуск docker-контейнера, в соответствии с настройками &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker&amp;lt;/code&amp;gt;;&lt;br /&gt;
## Проверяется наличие на docker-хосте образа IDE, указанного в &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker/image&amp;lt;/code&amp;gt;;&lt;br /&gt;
##* Если docker-образ отсутствует - он будет загружен на хост;&lt;br /&gt;
## Проверяется наличие на docker-хосте контейнера с IDE для снимка;&lt;br /&gt;
##* Если docker-контейнер не существует, то он будет создан и запущен;&lt;br /&gt;
##* Если docker-контейнер существует и находится&lt;br /&gt;
##** в статусе &amp;lt;code&amp;gt;running&amp;lt;/code&amp;gt; - процесс запуска IDE продолжается;&lt;br /&gt;
##** в статусе &amp;lt;code&amp;gt;created&amp;lt;/code&amp;gt;,&amp;lt;code&amp;gt;exited&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;paused&amp;lt;/code&amp;gt; - контейнер будет запущен;&lt;br /&gt;
##** в других статусах - вернётся соответствующая ошибка и процесс запуска IDE прервётся;&lt;br /&gt;
# После успешного запуска docker-контейнера осуществляется ожидание окончания запуска процесса IDE в контейнере, в соответствии с настройками &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck&amp;lt;/code&amp;gt;;&lt;br /&gt;
#* Если за отведённое время ответ от IDE получен - процесс запуска завершается.&lt;br /&gt;
#* Если ответ не получен - вернётся ошибка &amp;lt;code&amp;gt;ide not ready&amp;lt;/code&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' При возникновении ошибки на одном из этапов запуска IDE, артефакты созданные на предыдущих этапах останутся в системе. В дальнейшем они могут быть использованы при повторном запуске IDE, если причина возникновения ошибки была устранена.&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' Причиной возникновения ошибки &amp;lt;code&amp;gt;ide not ready&amp;lt;/code&amp;gt; может стать высокая загруженность или недостаточная производительность docker-хоста, на котором запускается контейнер с IDE. В связи с этим, процесс IDE внутри контейнера может запускаться дольше, чем указано в настойках &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck&amp;lt;/code&amp;gt;.&lt;br /&gt;
 В случае возникновения ошибки &amp;lt;code&amp;gt;ide not ready&amp;lt;/code&amp;gt; рекомендуется попытаться повторно запустить IDE через короткий промежуток времени.&lt;br /&gt;
 Ещё одной причиной возникновения данной ошибки может стать сетевая недоступность docker-контейнера, при подключении к удалённому docker-хосту. В таком случае рекомендуется:&lt;br /&gt;
 1. проверить сетевую доступность docker-хоста;&lt;br /&gt;
 2. проверить настройки биндинга docker-контейнера c IDE - &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker/container/hostconfig/portbindings&amp;lt;/code&amp;gt;. Контейнер должен быть подключён к доступному сетевому интерфейсу.&lt;br /&gt;
 3. проверить настройки фаервола на docker-хосте;&lt;br /&gt;
&lt;br /&gt;
=== Использование IDE: проксирование запросов ===&lt;br /&gt;
&lt;br /&gt;
После успешного запуска docker-контейнера IDE станут доступны ресурсы с &amp;quot;префиксом&amp;quot; &amp;lt;code&amp;gt;/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Все запросы направленные к ресурсам &amp;lt;code&amp;gt;/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/*&amp;lt;/code&amp;gt; будут проксироваться в соответствующий контейнер IDE.&lt;br /&gt;
&lt;br /&gt;
Например, если docker-контейнер c IDE &amp;lt;code&amp;gt;theia__default&amp;lt;/code&amp;gt; для снимка &amp;lt;code&amp;gt;xxx&amp;lt;/code&amp;gt; запущен и &amp;quot;слушает&amp;quot; порт &amp;lt;code&amp;gt;35353&amp;lt;/code&amp;gt; на хосте &amp;lt;code&amp;gt;docker-host&amp;lt;/code&amp;gt;, то будет происходить проксирование:&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;GET http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;GET http://docker-host:35353/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;POST http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;GET http://docker-host:35353/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;GET ws://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;GET ws://docker-host:35353/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' для запуска IDE в окне браузера нужно указать адрес &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http[s]://svacer-host/xvacer/webide/snapshots/{snapshot_id}/{ide_id}/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. '''Завершающий слеш обязателен!'''&lt;br /&gt;
&lt;br /&gt;
=== Перезапуск IDE ===&lt;br /&gt;
&lt;br /&gt;
В процессе работы svacer следит за состоянием запущенных IDE. При попытке повторного запуска IDE проверяется её доступность: если IDE отвечает на запросы, то повторный запуск не производится и обработка запроса завершается.&lt;br /&gt;
&lt;br /&gt;
Также работоспособность IDE контролируется при использовании IDE в момент проксирования запросов в docker-контейнер: если IDE доступна, то запрос проксируется.&lt;br /&gt;
&lt;br /&gt;
Если IDE перестанет отвечать на запросы, то будет произведена попытка её перезапуска. В этом случае происходит та же последовательность действий, что и при [[Help:XSvacer:Webide#Запуск IDE|первоначальном запуске IDE]].&lt;br /&gt;
&lt;br /&gt;
Зачастую потеря связи обусловлена остановкой docker-контейнера с IDE. В таком случае docker-контейнер будет перезапущен.&lt;br /&gt;
&lt;br /&gt;
Если же недоступность IDE обусловлена другими причинами, то запрос на запуск/проксирование продолжит возвращать ошибку, до устранения причин неработоспособности.&lt;br /&gt;
&lt;br /&gt;
=== Остановка IDE ===&lt;br /&gt;
&lt;br /&gt;
Запуск производится путём вызова http-метода &amp;lt;code&amp;gt;DELETE /api/snapshots/{snapshot_id}/ide&amp;lt;/code&amp;gt; с телом запроса &amp;lt;code&amp;gt;{&amp;quot;ideId&amp;quot;: &amp;quot;идентификатор IDE&amp;quot;}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В ходе обработки запроса останавливается docker-контейнер IDE.&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' По умолчанию установлен параметр конфигурации &amp;lt;code&amp;gt;xsvacer/webide/theia/default/docker/container/hostconfig/autoremove: true&amp;lt;/code&amp;gt;. Это означает, что при после остановки docker-контейнер будет автоматически удалён.&lt;br /&gt;
 Чтобы изменить это поведение, настройка &amp;lt;code&amp;gt;xsvacer/webide/theia/default/{id конфигурации}/container/hostconfig/autoremove&amp;lt;/code&amp;gt; должна быть установлена в &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; '''на момент запуска docker-контейнера IDE'''. Это можно сделать, например, установив значение переменной окружения &amp;lt;code&amp;gt;XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_CONTAINER_HOSTCONFIG_AUTOREMOVE=false&amp;lt;/code&amp;gt;.&lt;br /&gt;
 '''!!!Сейчас установка &amp;lt;code&amp;gt;autoremove: false&amp;lt;/code&amp;gt; вызывает ошибку запуска svacer!!! Не используйте данную настройку до исправления'''&lt;br /&gt;
&lt;br /&gt;
 '''Примечание!''' При корректной остановке (например &amp;lt;code&amp;gt;SIGTERM&amp;lt;/code&amp;gt;) svacer автоматически остановит все запущенные docker-контейнеры IDE&lt;br /&gt;
&lt;br /&gt;
=== Подключение к IDE после некорректного завершениея svacer ===&lt;br /&gt;
&lt;br /&gt;
При запуске svacer осуществляет поиск запущенных docker-контейнеров IDE на доступных docker-хостах.&lt;br /&gt;
&lt;br /&gt;
При восстановлении связи с запущенными docker-контейнерами IDE и последующей корректной остановке svacer'а, все docker-контейнеры IDE будут остановлены.&lt;br /&gt;
&lt;br /&gt;
== Конфигурация ==&lt;br /&gt;
&lt;br /&gt;
Управление настройками функциональности осуществляется с помощью конфигурационного yaml-файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Раздел конфигурации для управления функциональностью - &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Раздел содержит перечисление настроек доступных конфигураций для запуска экземпляров Theia IDE &amp;lt;code&amp;gt;xsvacer/webide/theia&amp;lt;/code&amp;gt;. При наличии нескольких активных конфигураций запуска Theia IDE пользователь сможет выбрать какую из них использовать при запуске IDE с исходными файлами снимка.&lt;br /&gt;
&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       config1:&lt;br /&gt;
         ...&lt;br /&gt;
       config2:&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' Запуск IDE основывается на запуске docker-контейнеров, содержащих соответствующие сборки IDE. Поэтому помимо настройки функциональности в разделе &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; необходимо также настроить доступ к docker-хосту в разделе &amp;lt;code&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt; ([[Help:XSvacer:Docker]]). В противном случае функциональность webide не сможет работать корректно.&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' в случае отсутствия файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; или отсутствии раздела &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;, будет использоваться [[Help:XSvacer:Webide#Конфигурация_по_умолчанию_используемая_в_svacer|конфигурация по умолчанию]]&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация запуска Theia IDE ===&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' На этапе внедрения расширений XSvacer конфигурация функциональностей может меняться. Следите за анонсами!&lt;br /&gt;
&lt;br /&gt;
Конфигурации запуска Theia IDE добавляются в виде полей в разделе &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;. Название поля является идентификатором конфигурации запуска. Например идентификатор по номеру используемой версии IDE:&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       1-46-0:&lt;br /&gt;
         name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
==== Базовые параметры конфигурации запуска ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию                     &lt;br /&gt;
|-&lt;br /&gt;
|disabled&lt;br /&gt;
|bool&lt;br /&gt;
|Конфигурация запуска неактивна. Неактивная конфигурация не доступна для запуска экземпляра IDE&lt;br /&gt;
|true (переопределяется в конфигурации &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;)         &lt;br /&gt;
|-&lt;br /&gt;
|order&lt;br /&gt;
|int&lt;br /&gt;
|Порядковый номер в списке выбора конфигурации запуска&lt;br /&gt;
|0                                                        &lt;br /&gt;
|-&lt;br /&gt;
|name&lt;br /&gt;
|string&lt;br /&gt;
|Название конфигурации&lt;br /&gt;
|Theia blueprint web IDE (v1.46.0)                        &lt;br /&gt;
|-&lt;br /&gt;
|sourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке содержащей исходные коды снимков на машине со svacer'ом&lt;br /&gt;
|${USER_CACHE_DIR}/svacer-snapshot-sources                &lt;br /&gt;
|-&lt;br /&gt;
|dockerhostsourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке содержащей исходные коды снимков на хосте docker'а. Нужен при использовании удалённого docker-хоста, т.к. в таком случае папка с исходными кодами скорее всего будет доступна по адресу, отличающемуся от &amp;lt;code&amp;gt;sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
|                                                         &lt;br /&gt;
|-&lt;br /&gt;
|dockerhostpathseparator&lt;br /&gt;
|string&lt;br /&gt;
|Разделитель пути на хосте docker'а. По умолчанию &amp;lt;code&amp;gt;&amp;quot;/&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
|                                                         &lt;br /&gt;
|-&lt;br /&gt;
|sariffiletemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон названия sarif-файла с предупреждениями анализатора. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|sarifFileContext]]&lt;br /&gt;
|&amp;quot;&amp;lt;nowiki&amp;gt;{{.Context.ProjectName}}.{{.Context.BranchName}}&amp;lt;/nowiki&amp;gt;.sarif&amp;quot; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры менеджера запуска IDE ====&lt;br /&gt;
&lt;br /&gt;
Конфигурация менеджера запуска IDE. На данный момент доступен только &amp;quot;стандартный&amp;quot; менеджер (&amp;lt;code&amp;gt;type: default&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию &lt;br /&gt;
|-&lt;br /&gt;
|manager&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация менеджера запуска IDE&lt;br /&gt;
|                                     &lt;br /&gt;
|-&lt;br /&gt;
|manager/type&lt;br /&gt;
|enum: default&lt;br /&gt;
|Тип менеджера запуска IDE&lt;br /&gt;
|default                              &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры запуска docker-контейнеров с IDE ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для настройки запуска docker-контейнеров с IDE&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию               &lt;br /&gt;
|-&lt;br /&gt;
|docker/&lt;br /&gt;
|map&lt;br /&gt;
|Настройки создания docker-контейнера с IDE&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/hostid&lt;br /&gt;
|string&lt;br /&gt;
|Идентификатор хоста docker'а, описанного в &amp;lt;code&amp;gt;xsvacer/docker/hosts&amp;lt;/code&amp;gt;. Запуск docker-контейнера с IDE будет выполнен на этом хосте&lt;br /&gt;
|default                                            &lt;br /&gt;
|-&lt;br /&gt;
|docker/containernametemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон для формирования названия контейнера IDE для выбранного снимка. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|TheiaDockerContainerStartContext]]&lt;br /&gt;
|&amp;quot;theia-1-46-&amp;lt;nowiki&amp;gt;{{.StartArgs.SnapshotID}}&amp;lt;/nowiki&amp;gt;&amp;quot;             &lt;br /&gt;
|-&lt;br /&gt;
|docker/containerconfiglabels&lt;br /&gt;
|[]map&lt;br /&gt;
|Список &amp;quot;меток&amp;quot; docker-контейнера. Дополняет список меток в &amp;lt;code&amp;gt;docker/container/config/labels&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
 - &amp;quot;com.docker.compose.project&amp;quot;: svacer             &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры docker-образа из которого будет запущен контейнер&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/name&lt;br /&gt;
|string&lt;br /&gt;
|Название образа&lt;br /&gt;
|theia-blueprint                                    &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/tag&lt;br /&gt;
|string&lt;br /&gt;
|Тег образа&lt;br /&gt;
|1.46.0.sarif.clang                                 &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcetype&lt;br /&gt;
|enum: repository/file&lt;br /&gt;
|Тип источника для загрузки образа в docker-хост.&lt;br /&gt;
* &amp;lt;code&amp;gt;repository&amp;lt;/code&amp;gt; - будет вызван &amp;lt;code&amp;gt;docker pull&amp;lt;/code&amp;gt; образа &amp;lt;code&amp;gt;{image/name}:{image/tag}&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt; - будет вызван &amp;lt;code&amp;gt;docker load&amp;lt;/code&amp;gt; с url'ом &amp;lt;code&amp;gt;image/sourcefileurl&amp;lt;/code&amp;gt;&lt;br /&gt;
|file                                               &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcefileurl&lt;br /&gt;
|url&lt;br /&gt;
|Url откуда будет загружен docker-образ если &amp;lt;code&amp;gt;image/sourcetype == &amp;quot;file&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
Url может содержать:&lt;br /&gt;
- путь к локальному файлу: схема &amp;lt;code&amp;gt;file://&amp;lt;/code&amp;gt;&lt;br /&gt;
- http/https-адрес: схема &amp;lt;code&amp;gt;http://&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;https://&amp;lt;/code&amp;gt;&lt;br /&gt;
|https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/&lt;br /&gt;
|map&lt;br /&gt;
|Свойства docker-контейнера&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/config.go#L70&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config/env&lt;br /&gt;
|[]string&lt;br /&gt;
|Список переменных среды, которые будут установлены в контейнере&lt;br /&gt;
|&lt;br /&gt;
 - THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;     &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры хостинга контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/hostconfig.go#L379&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/autoremove&lt;br /&gt;
|bool&lt;br /&gt;
|&lt;br /&gt;
|true                                               &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/portbindings&lt;br /&gt;
|map&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
 &amp;quot;3000/tcp&amp;quot;:                                        &lt;br /&gt;
   - hostport: 0                                    &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/networkconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Сетевые настройки контейнера. Соответствуют структуре https://github.com/moby/moby/blob/v24.0.7/api/types/network/network.go#L104&lt;br /&gt;
|                                                   &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры проверки доступности healthcheck ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для проверки доступности IDE после запуска docker-контейнера&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck&lt;br /&gt;
|map&lt;br /&gt;
|Параметры проверки доступности IDE&lt;br /&gt;
|                                     &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyretries&lt;br /&gt;
|int&lt;br /&gt;
|Количества попыток проверки до ошибки доступности&lt;br /&gt;
|10                                   &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyperiod&lt;br /&gt;
|golang duration string&lt;br /&gt;
|Интервал проверки&lt;br /&gt;
|200ms                                &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Структуры передаваемые в поля с golang-шаблонами строк ====&lt;br /&gt;
&lt;br /&gt;
 sarifFileContext {&lt;br /&gt;
     Time    time.Time&lt;br /&gt;
 	Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
 &lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 TheiaDockerContainerStartContext {&lt;br /&gt;
 	IdeID: {&lt;br /&gt;
         IdeType  string&lt;br /&gt;
         ConfigID string&lt;br /&gt;
     },&lt;br /&gt;
 	StartArgs: {&lt;br /&gt;
         SnapshotID string&lt;br /&gt;
         UserID     string&lt;br /&gt;
         User       string&lt;br /&gt;
     },&lt;br /&gt;
 	Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
 &lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация по умолчанию используемая в svacer ===&lt;br /&gt;
&lt;br /&gt;
Данная настройка применяется по умолчанию для запуска Theia IDE, если в конфигурационном файле svacer.cfg отсутствует раздел &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
xsvacer:&lt;br /&gt;
  docker:&lt;br /&gt;
    hosts:&lt;br /&gt;
      default: # конфигурация docker-хоста&lt;br /&gt;
        type: external&lt;br /&gt;
      ...&lt;br /&gt;
&lt;br /&gt;
  webide:&lt;br /&gt;
    theia:&lt;br /&gt;
      1-46-0: &amp;amp;1-46-0&lt;br /&gt;
        disabled: true&lt;br /&gt;
        order: 0&lt;br /&gt;
        name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
        sourcesroot: ${USER_CACHE_DIR}/svacer-snapshot-sources&lt;br /&gt;
        sariffiletemplate: &amp;quot;&amp;lt;nowiki&amp;gt;{{.Context.ProjectName}}.{{.Context.BranchName}}&amp;lt;/nowiki&amp;gt;.sarif&amp;quot;&lt;br /&gt;
        manager:&lt;br /&gt;
          type: default&lt;br /&gt;
        docker:&lt;br /&gt;
          hostid: default # идентификатор используемого docker-хоста&lt;br /&gt;
          containernametemplate: &amp;quot;theia-1-46-&amp;lt;nowiki&amp;gt;{{.StartArgs.SnapshotID}}&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
          image:&lt;br /&gt;
            name: theia-blueprint&lt;br /&gt;
            tag: 1.46.0.sarif.clang&lt;br /&gt;
            sourcetype: file&lt;br /&gt;
            sourcefileurl: https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar&lt;br /&gt;
          containerconfiglabels:&lt;br /&gt;
            - &amp;quot;com.docker.compose.project&amp;quot;: svacer&lt;br /&gt;
          container:&lt;br /&gt;
            config:&lt;br /&gt;
              env:&lt;br /&gt;
                - THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
            hostconfig:&lt;br /&gt;
              autoremove: true&lt;br /&gt;
              portbindings:&lt;br /&gt;
                &amp;quot;3000/tcp&amp;quot;:&lt;br /&gt;
                  - hostport: 0&lt;br /&gt;
            networkconfig:&lt;br /&gt;
        healthcheck:&lt;br /&gt;
          starttoreadyretries: 10&lt;br /&gt;
          starttoreadyperiod: 200ms&lt;br /&gt;
      default:&lt;br /&gt;
        &amp;lt;&amp;lt;: *1-46-0&lt;br /&gt;
        order: 0&lt;br /&gt;
        disabled: false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' По умолчанию используется docker-хост с идентификатором &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;. Согласно настройке этого хоста, по умолчанию предполагается взаимодействие с докером через unix-сокет &amp;lt;code&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt;. Соответственно пользователь, под которым запускается svacer должен иметь доступ к этому сокету (https://docs.docker.com/engine/install/linux-postinstall/).&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' При наличии раздела &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; в конфигурационном файле &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;, будут применены только настройки из этого раздела. Настройки по умолчанию будут полностью проигнорированы.&lt;br /&gt;
&lt;br /&gt;
=== Изменение конфигурационных параметров с помощью переменных окружения ===&lt;br /&gt;
&lt;br /&gt;
Значения атрибутов конфигурации могут быть изменены с помощью переменных окружения &amp;lt;code&amp;gt;XSVACER_WEBIDE_THEIA_{id конфигурации ide}[_параметр]={значение параметра}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например, для активации rootless-хоста &amp;lt;code&amp;gt;xsvacer/hosts/local&amp;lt;/code&amp;gt; и переключения запуска IDE с идентификатором &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; на этот хост, можно указать такие значения переменных окружения при запуске svacer'а:&lt;br /&gt;
 XSVACER_DOCKER_HOSTS_LOCAL_DISABLED=false&lt;br /&gt;
 XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_HOSTID=local&lt;br /&gt;
&lt;br /&gt;
== Очистка системы: удаление артефактов функциональности ==&lt;br /&gt;
&lt;br /&gt;
В процессе использования функциональности IDE создаются следующие артефакты:&lt;br /&gt;
# Исходные файлы снимков скачиваются в &amp;quot;корневые папки&amp;quot; заданные в параметре &amp;lt;code&amp;gt;xsvacer/webide/theia/{id конфигурации}/sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
# Артефакты docker:&lt;br /&gt;
#* образы и контейнеры создаются на хостах, указанных в конфигурации docker-хостов, указанных в &amp;lt;code&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/hostid&amp;lt;/code&amp;gt;&lt;br /&gt;
#* названия docker-образов будут соответствовать параметрам в &amp;lt;code&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/image&amp;lt;/code&amp;gt;&lt;br /&gt;
#* названия docker-контейнеров будут соответствовать параметру &amp;lt;code&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/containernametemplate&amp;lt;/code&amp;gt;&lt;br /&gt;
#* наборы меток doker-контейнеров будут содержать:&lt;br /&gt;
#*: метки перечисленные в &amp;lt;code&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/containerconfiglabels&amp;lt;/code&amp;gt;&lt;br /&gt;
#*: метки перечисленные в &amp;lt;code&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/container/config/labels&amp;lt;/code&amp;gt;&lt;br /&gt;
#*: метки с названиями &amp;lt;code&amp;gt;svacer.service.id&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;svacer.service.type&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;svacer.theia.start_args&amp;lt;/code&amp;gt;&lt;br /&gt;
# При использовании rootless-хоста docker'а будут созданы папки, согласно [[Help:XSvacer:Docker#Специфичные настройки для rootless-хоста]]&lt;br /&gt;
&lt;br /&gt;
== Рекомендации ==&lt;br /&gt;
&lt;br /&gt;
=== Предварительная загрузка docker-образа с IDE ===&lt;br /&gt;
&lt;br /&gt;
По умолчанию параметр &amp;lt;code&amp;gt;xsvacer/webide/theia/1-46-0/docker/image/sourcefileurl&amp;lt;/code&amp;gt; содержит значение &amp;lt;code&amp;gt;https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar&amp;lt;/code&amp;gt;. По этому адресу находится архив с docker-образом для Theia IDE.&lt;br /&gt;
&lt;br /&gt;
Если docker-образ ещё не был загружен, то загрузка начнётся при первой попытке запуска IDE. Т.к. этот процесс занимает длительное время, то запрос запуска IDE тоже будет выполняться долго.&lt;br /&gt;
&lt;br /&gt;
Для ускорения первого запуска IDE, докер образ можно загрузить на хост docker'а вручную. Для этого необходимо:&lt;br /&gt;
# Скачать файл архива;&lt;br /&gt;
# Выполнить команду &amp;lt;code&amp;gt;docker image load -i /path/to/tar/theia-blueprint.1.46.0.sarif.clang.tar&amp;lt;/code&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
== Информация о docker-образе Theia IDE ==&lt;br /&gt;
&lt;br /&gt;
Docker-образ, используемый по умолчанию, построен на базе [[https://theia-ide.org/|Eclipse Theia IDE]] версии [[https://github.com/eclipse-theia/theia-blueprint/tree/v1.46.0|1.46.0]]&lt;br /&gt;
&lt;br /&gt;
При этом была изменена компоновка расширений theia (результат выполнения &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
diff --git a/browser.Dockerfile b/browser.Dockerfile&lt;br /&gt;
index efe591e..a4ebb6a 100644&lt;br /&gt;
--- a/browser.Dockerfile&lt;br /&gt;
+++ b/browser.Dockerfile&lt;br /&gt;
@@ -42,7 +42,7 @@ RUN chmod g+rw /home &amp;amp;&amp;amp; \&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y wget apt-transport-https &amp;amp;&amp;amp; \&lt;br /&gt;
     wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | tee /usr/share/keyrings/adoptium.asc &amp;amp;&amp;amp; \&lt;br /&gt;
     echo &amp;quot;deb [signed-by=/usr/share/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main&amp;quot; | tee /etc/apt/sources.list.d/adoptium.list &amp;amp;&amp;amp; \&lt;br /&gt;
-    apt-get update &amp;amp;&amp;amp; apt-get install -y git openssh-client openssh-server bash libsecret-1-0 temurin-17-jdk maven &amp;amp;&amp;amp; \&lt;br /&gt;
+    apt-get update &amp;amp;&amp;amp; apt-get install -y git openssh-client openssh-server bash libsecret-1-0 clangd &amp;amp;&amp;amp; \&lt;br /&gt;
     apt-get purge -y wget &amp;amp;&amp;amp; \&lt;br /&gt;
     apt-get clean&lt;br /&gt;
&lt;br /&gt;
diff --git a/package.json b/package.json&lt;br /&gt;
index 9044595..9d0dcc8 100644&lt;br /&gt;
--- a/package.json&lt;br /&gt;
+++ b/package.json&lt;br /&gt;
@@ -54,10 +54,8 @@&lt;br /&gt;
   &amp;quot;theiaPluginsDir&amp;quot;: &amp;quot;plugins&amp;quot;,&lt;br /&gt;
   &amp;quot;theiaPlugins&amp;quot;: {&lt;br /&gt;
     &amp;quot;eclipse-theia.builtin-extension-pack&amp;quot;: &amp;quot;https://open-vsx.org/api/eclipse-theia/builtin-extension-pack/1.83.1/file/eclipse-theia.builtin-extension-pack-1.83.1.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;ms-vscode.js-debug&amp;quot;: &amp;quot;https://open-vsx.org/api/ms-vscode/js-debug/1.83.1/file/ms-vscode.js-debug-1.83.1.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;ms-vscode.js-debug-companion&amp;quot;: &amp;quot;https://open-vsx.org/api/ms-vscode/js-debug-companion/1.1.2/file/ms-vscode.js-debug-companion-1.1.2.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;vscjava.vscode-java-pack&amp;quot;: &amp;quot;https://open-vsx.org/api/vscjava/vscode-java-pack/0.25.11/file/vscjava.vscode-java-pack-0.25.11.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;vscjava.vscode-java-dependency&amp;quot;: &amp;quot;https://open-vsx.org/api/vscjava/vscode-java-dependency/0.21.2/file/vscjava.vscode-java-dependency-0.21.2.vsix&amp;quot;&lt;br /&gt;
+    &amp;quot;llvm-vs-code-extensions.vscode-clangd&amp;quot;: &amp;quot;https://open-vsx.org/api/llvm-vs-code-extensions/vscode-clangd/0.1.26/file/llvm-vs-code-extensions.vscode-clangd-0.1.26.vsix&amp;quot;,&lt;br /&gt;
+    &amp;quot;ms-sarifvscode.sarif-viewer&amp;quot;: &amp;quot;https://open-vsx.org/api/MS-SarifVSCode/sarif-viewer/3.4.2/file/MS-SarifVSCode.sarif-viewer-3.4.2.vsix&amp;quot;&lt;br /&gt;
   },&lt;br /&gt;
   &amp;quot;theiaPluginsExcludeIds&amp;quot;: [&lt;br /&gt;
     &amp;quot;ms-vscode.js-debug-companion&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Команда построения docker-образа: &amp;lt;code&amp;gt;docker build -t theia-blueprint:1.46.0.sarif.clang -f browser.Dockerfile .&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Команда экспорта docker-образа: &amp;lt;code&amp;gt;docker image save theia-blueprint:1.46.0 &amp;gt; /path/to/tar/theia-blueprint.1.46.0.docker.command.tar&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer&amp;diff=1963</id>
		<title>Help:XSvacer</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer&amp;diff=1963"/>
		<updated>2024-06-06T13:07:41Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: Created page with &amp;quot;= XSvacer - расширение функциональности svacer =  Начиная с релиза 9.0.0 в svacer'е появились &amp;quot;расширенные функции&amp;quot;, которые могут быть активированы по требованию.  Доступные функции: * webide - Среда разработки на базе [https://theia-ide.org/ Theia IDE], с помощью к...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= XSvacer - расширение функциональности svacer =&lt;br /&gt;
&lt;br /&gt;
Начиная с релиза [[Changelog#Release_9-0-0|9.0.0]] в svacer'е появились &amp;quot;расширенные функции&amp;quot;, которые могут быть активированы по требованию.&lt;br /&gt;
&lt;br /&gt;
Доступные функции:&lt;br /&gt;
* [[Help:XSvacer:Webide|webide]] - Среда разработки на базе [https://theia-ide.org/ Theia IDE], с помощью которой можно просматривать исходный код снимка, предупреждения анализатора и разметку.&lt;br /&gt;
* [[Help:XSvacer:Docker|docker]] - Вспомогательная функциональность, для запуска других компонентов в docker-контейнерах.&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' по умолчанию данные функции неактивны. &lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' функциональность docker будет активирована автоматически, при запуске зависящих от неё функций.&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' На данный момент расширенные функции находятся на стадии внедрения. В последующих релизах возможно изменение форматов конфигурации и API взаимодействия с указанными функциями.&lt;br /&gt;
&lt;br /&gt;
== Активация функций ==&lt;br /&gt;
&lt;br /&gt;
Активировать функции можно указав при запуске svacer'а флаг &amp;lt;code&amp;gt;--xsvacer.features feature_name&amp;lt;/code&amp;gt;. Флаг можно указать несколько раз, чтобы активировать несколько функций.&lt;br /&gt;
&lt;br /&gt;
Также список активных функций можно настроить в конфигурационном yaml-файле &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;, в разделе &amp;lt;code&amp;gt;xsvacer.features&amp;lt;/code&amp;gt;.&lt;br /&gt;
Значением данного ключа является список строк с названиями активируемых функций:&lt;br /&gt;
 ...&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   features:&lt;br /&gt;
     - webide&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' При установке флага &amp;lt;code&amp;gt;--xsvacer.features&amp;lt;/code&amp;gt; список функций указанный в конфигурационном файле &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; будет проигнорирован.&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=1962</id>
		<title>Help:XSvacer:Webide</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=1962"/>
		<updated>2024-06-06T12:44:12Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Поддержка среды разработки Theia IDE =&lt;br /&gt;
 '''Примечание:''' данная функциональность входит в набор расширений XSvacer.&lt;br /&gt;
&lt;br /&gt;
Данная функциональность даёт возможность просматривать исходный код снимка с предупреждениями анализатора во внешней IDE.&lt;br /&gt;
&lt;br /&gt;
По умолчанию запускается IDE собранная на основе Theia IDE (https://theia-ide.org/).&lt;br /&gt;
&lt;br /&gt;
== Активация функциональности ==&lt;br /&gt;
Для активации функциональности необходимо указать флаг &amp;lt;code&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt; при запуске svacer'а.&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' при запуске функциональности &amp;lt;code&amp;gt;webide&amp;lt;/code&amp;gt; также будет запущена функциональность &amp;lt;code&amp;gt;docker&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Активации функциональности:&lt;br /&gt;
* становится доступным REST API управления IDE для просмотра снимков проектов;&lt;br /&gt;
* в пользовательском интерфейсе появляется кнопка &amp;quot;Открыть в IDE&amp;quot;;&lt;br /&gt;
* устанавливается подключение к хосту docker'а, на котором будут запускаться контейнеры с экземплярами IDE.&lt;br /&gt;
&lt;br /&gt;
== REST API для работы с IDE ==&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' На этапе внедрения расширений XSvacer REST API может меняться. Следите за анонсами!&lt;br /&gt;
&lt;br /&gt;
После активации функциональности становятся доступны http-ресурсы для управления IDE снимками:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | REST API управления IDE&lt;br /&gt;
|-&lt;br /&gt;
!Ресурс&lt;br /&gt;
!Описание                                                &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
GET /xsvacer/webide/api/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Получение списка доступных для запуска IDE.&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;order&amp;quot;: 0&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
:&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; - название IDE&lt;br /&gt;
:&amp;lt;code&amp;gt;order&amp;lt;/code&amp;gt; - порядковый номер IDE в списке&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
GET /xsvacer/webide/api/snapshots/{snapshot_id}/ide/{ide_id}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Запрос описания экземпляра IDE, запущенного для снимка. &lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
:&amp;lt;code&amp;gt;ide_id&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;id&amp;quot;: {&lt;br /&gt;
    &amp;quot;ide_id&amp;quot;: {&lt;br /&gt;
      &amp;quot;ide_type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
      &amp;quot;config_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;snapshot_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;url&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;start_args&amp;quot;: {&lt;br /&gt;
    &amp;quot;snapshot_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;user&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;user_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
POST /xsvacer/webide/api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Запуск IDE для просмотра исходных кодов снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
PUT /api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Команда управления экземпляром IDE снимка&lt;br /&gt;
Доступные действия:&lt;br /&gt;
* &amp;lt;code&amp;gt;update_markup&amp;lt;/code&amp;gt; - обновление предупреждений и разметки (sarif-файла)&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;action&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt; - действие&lt;br /&gt;
:&amp;lt;code&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:''' пустой&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
DELETE /xsvacer/webide/api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Остановка экземпляра IDE снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:''' пустой&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Прокси для запросов экземпляра IDE снимка&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Формат идентификатора IDE ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{тип ide}__{идентификатор конфигурации}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например для &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;-конфигурации Theia IDE: &amp;lt;code&amp;gt;theia__default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Принцип работы ==&lt;br /&gt;
&lt;br /&gt;
Функциональность запуска IDE для просмотра исходного кода снимков становится доступной пользователю, если соблюдаются условия:&lt;br /&gt;
# Функциональность активна: при запуске svacer'а указан флаг &amp;lt;code&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt;;&lt;br /&gt;
# В конфигурации функциональности &amp;lt;code&amp;gt;xsvacer/webide/theia&amp;lt;/code&amp;gt; ([[Help:XSvacer:Webide#Конфигурация]]) есть хотя бы одна активная (&amp;lt;code&amp;gt;disabled: false&amp;lt;/code&amp;gt;) конфигурация IDE;&lt;br /&gt;
# У пользователя svacer имеются разрешения &amp;lt;code&amp;gt;&amp;quot;Просмотр маркеров&amp;quot;&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;&amp;quot;Read markers&amp;quot;&amp;lt;/code&amp;gt;) и &amp;lt;code&amp;gt;&amp;quot;Экспорт разметки&amp;quot;&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;&amp;quot;Export markup&amp;quot;&amp;lt;/code&amp;gt;) на проект, в котором находится снимок, для которого нужно запустить IDE.&lt;br /&gt;
&lt;br /&gt;
В противном случае в пользовательском интерфейсе будет отсутствовать кнопка &amp;lt;code&amp;gt;&amp;quot;Открыть в IDE&amp;quot;&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;&amp;quot;Open in IDE&amp;quot;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== Запуск IDE ===&lt;br /&gt;
&lt;br /&gt;
Запуск производится путём вызова http-метода &amp;lt;code&amp;gt;POST /api/snapshots/{snapshot_id}/ide&amp;lt;/code&amp;gt; с телом запроса &amp;lt;code&amp;gt;{&amp;quot;ideId&amp;quot;: &amp;quot;идентификатор IDE&amp;quot;}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последовательность действий, выполняемых при запуске IDE:&lt;br /&gt;
&lt;br /&gt;
# Производится проверка: была ли уже запущена указанная IDE для указанного снимка;&lt;br /&gt;
#* Если запущена: производится проверка: доступна ли IDE: отвечает на запросы;&lt;br /&gt;
#** Если IDE доступна: действие не требуется. Процесс запуска завершается;&lt;br /&gt;
#** Если IDE не доступна: продолжается процесс запуска. IDE будет ''перезапущена'';&lt;br /&gt;
# Создаётся &amp;quot;корневая папка снимка&amp;quot;, предназначенная для хранения исходного кода снимка и предупреждений анализатора с разметкой в виде sarif-файла. Название папки соответствует id снимка. Папка создаётся по пути заданному в параметре конфигурации IDE &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/sourcesroot&amp;lt;/code&amp;gt;;&lt;br /&gt;
# Исходный код снимка скачивается в &amp;quot;корневую папку снимка&amp;quot;;&lt;br /&gt;
# Производится экспорт маркеров и разметки в виде sarif-файла в &amp;quot;корневую папку снимка&amp;quot;. Название sarif-файла формируется с помощью шаблона, заданного в параметре конфигурации IDE &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/sariffiletemplate&amp;lt;/code&amp;gt;;&lt;br /&gt;
# Производится настройка и запуск docker-контейнера, в соответствии с настройками &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker&amp;lt;/code&amp;gt;;&lt;br /&gt;
## Проверяется наличие на docker-хосте образа IDE, указанного в &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker/image&amp;lt;/code&amp;gt;;&lt;br /&gt;
##* Если docker-образ отсутствует - он будет загружен на хост;&lt;br /&gt;
## Проверяется наличие на docker-хосте контейнера с IDE для снимка;&lt;br /&gt;
##* Если docker-контейнер не существует, то он будет создан и запущен;&lt;br /&gt;
##* Если docker-контейнер существует и находится&lt;br /&gt;
##** в статусе &amp;lt;code&amp;gt;running&amp;lt;/code&amp;gt; - процесс запуска IDE продолжается;&lt;br /&gt;
##** в статусе &amp;lt;code&amp;gt;created&amp;lt;/code&amp;gt;,&amp;lt;code&amp;gt;exited&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;paused&amp;lt;/code&amp;gt; - контейнер будет запущен;&lt;br /&gt;
##** в других статусах - вернётся соответствующая ошибка и процесс запуска IDE прервётся;&lt;br /&gt;
# После успешного запуска docker-контейнера осуществляется ожидание окончания запуска процесса IDE в контейнере, в соответствии с настройками &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck&amp;lt;/code&amp;gt;;&lt;br /&gt;
#* Если за отведённое время ответ от IDE получен - процесс запуска завершается.&lt;br /&gt;
#* Если ответ не получен - вернётся ошибка &amp;lt;code&amp;gt;ide not ready&amp;lt;/code&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' При возникновении ошибки на одном из этапов запуска IDE, артефакты созданные на предыдущих этапах останутся в системе. В дальнейшем они могут быть использованы при повторном запуске IDE, если причина возникновения ошибки была устранена.&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' Причиной возникновения ошибки &amp;lt;code&amp;gt;ide not ready&amp;lt;/code&amp;gt; может стать высокая загруженность или недостаточная производительность docker-хоста, на котором запускается контейнер с IDE. В связи с этим, процесс IDE внутри контейнера может запускаться дольше, чем указано в настойках &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck&amp;lt;/code&amp;gt;.&lt;br /&gt;
 В случае возникновения ошибки &amp;lt;code&amp;gt;ide not ready&amp;lt;/code&amp;gt; рекомендуется попытаться повторно запустить IDE через короткий промежуток времени.&lt;br /&gt;
 Ещё одной причиной возникновения данной ошибки может стать сетевая недоступность docker-контейнера, при подключении к удалённому docker-хосту. В таком случае рекомендуется:&lt;br /&gt;
 1. проверить сетевую доступность docker-хоста;&lt;br /&gt;
 2. проверить настройки биндинга docker-контейнера c IDE - &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker/container/hostconfig/portbindings&amp;lt;/code&amp;gt;. Контейнер должен быть подключён к доступному сетевому интерфейсу.&lt;br /&gt;
 3. проверить настройки фаервола на docker-хосте;&lt;br /&gt;
&lt;br /&gt;
=== Использование IDE: проксирование запросов ===&lt;br /&gt;
&lt;br /&gt;
После успешного запуска docker-контейнера IDE станут доступны ресурсы с &amp;quot;префиксом&amp;quot; &amp;lt;code&amp;gt;/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Все запросы направленные к ресурсам &amp;lt;code&amp;gt;/xsvacer/webide/snapshots/{snapshot_id}/ide/{ide_id}/*&amp;lt;/code&amp;gt; будут проксироваться в соответствующий контейнер IDE.&lt;br /&gt;
&lt;br /&gt;
Например, если docker-контейнер c IDE &amp;lt;code&amp;gt;theia__default&amp;lt;/code&amp;gt; для снимка &amp;lt;code&amp;gt;xxx&amp;lt;/code&amp;gt; запущен и &amp;quot;слушает&amp;quot; порт &amp;lt;code&amp;gt;35353&amp;lt;/code&amp;gt; на хосте &amp;lt;code&amp;gt;docker-host&amp;lt;/code&amp;gt;, то будет происходить проксирование:&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;GET http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;GET http://docker-host:35353/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;POST http://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;GET http://docker-host:35353/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;GET ws://svacer-host/xsvacer/webide/snapshots/xxx/ide/theia__default/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rArr; &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;GET ws://docker-host:35353/socket.io/?...&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' для запуска IDE в окне браузера нужно указать адрес &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http[s]://svacer-host/xvacer/webide/snapshots/{snapshot_id}/{ide_id}/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. '''Завершающий слеш обязателен!'''&lt;br /&gt;
&lt;br /&gt;
=== Перезапуск IDE ===&lt;br /&gt;
&lt;br /&gt;
В процессе работы svacer следит за состоянием запущенных IDE. При попытке повторного запуска IDE проверяется её доступность: если IDE отвечает на запросы, то повторный запуск не производится и обработка запроса завершается.&lt;br /&gt;
&lt;br /&gt;
Также работоспособность IDE контролируется при использовании IDE в момент проксирования запросов в docker-контейнер: если IDE доступна, то запрос проксируется.&lt;br /&gt;
&lt;br /&gt;
Если IDE перестанет отвечать на запросы, то будет произведена попытка её перезапуска. В этом случае происходит та же последовательность действий, что и при [[Help:XSvacer:Webide#Запуск IDE|первоначальном запуске IDE]].&lt;br /&gt;
&lt;br /&gt;
Зачастую потеря связи обусловлена остановкой docker-контейнера с IDE. В таком случае docker-контейнер будет перезапущен.&lt;br /&gt;
&lt;br /&gt;
Если же недоступность IDE обусловлена другими причинами, то запрос на запуск/проксирование продолжит возвращать ошибку, до устранения причин неработоспособности.&lt;br /&gt;
&lt;br /&gt;
=== Остановка IDE ===&lt;br /&gt;
&lt;br /&gt;
Запуск производится путём вызова http-метода &amp;lt;code&amp;gt;DELETE /api/snapshots/{snapshot_id}/ide&amp;lt;/code&amp;gt; с телом запроса &amp;lt;code&amp;gt;{&amp;quot;ideId&amp;quot;: &amp;quot;идентификатор IDE&amp;quot;}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В ходе обработки запроса останавливается docker-контейнер IDE.&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' По умолчанию установлен параметр конфигурации &amp;lt;code&amp;gt;xsvacer/webide/theia/default/docker/container/hostconfig/autoremove: true&amp;lt;/code&amp;gt;. Это означает, что при после остановки docker-контейнер будет автоматически удалён.&lt;br /&gt;
 Чтобы изменить это поведение, настройка &amp;lt;code&amp;gt;xsvacer/webide/theia/default/{id конфигурации}/container/hostconfig/autoremove&amp;lt;/code&amp;gt; должна быть установлена в &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; '''на момент запуска docker-контейнера IDE'''. Это можно сделать, например, установив значение переменной окружения &amp;lt;code&amp;gt;XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_CONTAINER_HOSTCONFIG_AUTOREMOVE=false&amp;lt;/code&amp;gt;.&lt;br /&gt;
 '''!!!Сейчас установка &amp;lt;code&amp;gt;autoremove: false&amp;lt;/code&amp;gt; вызывает ошибку запуска svacer!!! Не используйте данную настройку до исправления'''&lt;br /&gt;
&lt;br /&gt;
 '''Примечание!''' При корректной остановке (например &amp;lt;code&amp;gt;SIGTERM&amp;lt;/code&amp;gt;) svacer автоматически остановит все запущенные docker-контейнеры IDE&lt;br /&gt;
&lt;br /&gt;
=== Подключение к IDE после некорректного завершениея svacer ===&lt;br /&gt;
&lt;br /&gt;
При запуске svacer осуществляет поиск запущенных docker-контейнеров IDE на доступных docker-хостах.&lt;br /&gt;
&lt;br /&gt;
При восстановлении связи с запущенными docker-контейнерами IDE и последующей корректной остановке svacer'а, все docker-контейнеры IDE будут остановлены.&lt;br /&gt;
&lt;br /&gt;
== Конфигурация ==&lt;br /&gt;
&lt;br /&gt;
Управление настройками функциональности осуществляется с помощью конфигурационного yaml-файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Раздел конфигурации для управления функциональностью - &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Раздел содержит перечисление настроек доступных конфигураций для запуска экземпляров Theia IDE &amp;lt;code&amp;gt;xsvacer/webide/theia&amp;lt;/code&amp;gt;. При наличии нескольких активных конфигураций запуска Theia IDE пользователь сможет выбрать какую из них использовать при запуске IDE с исходными файлами снимка.&lt;br /&gt;
&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       config1:&lt;br /&gt;
         ...&lt;br /&gt;
       config2:&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' Запуск IDE основывается на запуске docker-контейнеров, содержащих соответствующие сборки IDE. Поэтому помимо настройки функциональности в разделе &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; необходимо также настроить доступ к docker-хосту в разделе &amp;lt;code&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt; ([[Help:XSvacer:Docker]]). В противном случае функциональность webide не сможет работать корректно.&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' в случае отсутствия файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; или отсутствии раздела &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;, будет использоваться [[Help:XSvacer:Webide#Конфигурация_по_умолчанию_используемая_в_svacer|конфигурация по умолчанию]]&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация запуска Theia IDE ===&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' На этапе внедрения расширений XSvacer конфигурация функциональностей может меняться. Следите за анонсами!&lt;br /&gt;
&lt;br /&gt;
Конфигурации запуска Theia IDE добавляются в виде полей в разделе &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;. Название поля является идентификатором конфигурации запуска. Например идентификатор по номеру используемой версии IDE:&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       1-46-0:&lt;br /&gt;
         name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
==== Базовые параметры конфигурации запуска ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию                     &lt;br /&gt;
|-&lt;br /&gt;
|disabled&lt;br /&gt;
|bool&lt;br /&gt;
|Конфигурация запуска неактивна. Неактивная конфигурация не доступна для запуска экземпляра IDE&lt;br /&gt;
|true (переопределяется в конфигурации &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;)         &lt;br /&gt;
|-&lt;br /&gt;
|order&lt;br /&gt;
|int&lt;br /&gt;
|Порядковый номер в списке выбора конфигурации запуска&lt;br /&gt;
|0                                                        &lt;br /&gt;
|-&lt;br /&gt;
|name&lt;br /&gt;
|string&lt;br /&gt;
|Название конфигурации&lt;br /&gt;
|Theia blueprint web IDE (v1.46.0)                        &lt;br /&gt;
|-&lt;br /&gt;
|sourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке содержащей исходные коды снимков на машине со svacer'ом&lt;br /&gt;
|${USER_CACHE_DIR}/svacer-snapshot-sources                &lt;br /&gt;
|-&lt;br /&gt;
|dockerhostsourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке содержащей исходные коды снимков на хосте docker'а. Нужен при использовании удалённого docker-хоста, т.к. в таком случае папка с исходными кодами скорее всего будет доступна по адресу, отличающемуся от &amp;lt;code&amp;gt;sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
|                                                         &lt;br /&gt;
|-&lt;br /&gt;
|dockerhostpathseparator&lt;br /&gt;
|string&lt;br /&gt;
|Разделитель пути на хосте docker'а. По умолчанию &amp;lt;code&amp;gt;&amp;quot;/&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
|                                                         &lt;br /&gt;
|-&lt;br /&gt;
|sariffiletemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон названия sarif-файла с предупреждениями анализатора. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|sarifFileContext]]&lt;br /&gt;
|&amp;quot;&amp;lt;nowiki&amp;gt;{{.Context.ProjectName}}.{{.Context.BranchName}}&amp;lt;/nowiki&amp;gt;.sarif&amp;quot; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры менеджера запуска IDE ====&lt;br /&gt;
&lt;br /&gt;
Конфигурация менеджера запуска IDE. На данный момент доступен только &amp;quot;стандартный&amp;quot; менеджер (&amp;lt;code&amp;gt;type: default&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию &lt;br /&gt;
|-&lt;br /&gt;
|manager&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация менеджера запуска IDE&lt;br /&gt;
|                                     &lt;br /&gt;
|-&lt;br /&gt;
|manager/type&lt;br /&gt;
|enum: default&lt;br /&gt;
|Тип менеджера запуска IDE&lt;br /&gt;
|default                              &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры запуска docker-контейнеров с IDE ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для настройки запуска docker-контейнеров с IDE&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию               &lt;br /&gt;
|-&lt;br /&gt;
|docker/&lt;br /&gt;
|map&lt;br /&gt;
|Настройки создания docker-контейнера с IDE&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/hostid&lt;br /&gt;
|string&lt;br /&gt;
|Идентификатор хоста docker'а, описанного в &amp;lt;code&amp;gt;xsvacer/docker/hosts&amp;lt;/code&amp;gt;. Запуск docker-контейнера с IDE будет выполнен на этом хосте&lt;br /&gt;
|default                                            &lt;br /&gt;
|-&lt;br /&gt;
|docker/containernametemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон для формирования названия контейнера IDE для выбранного снимка. В шаблон передаётся структура [[Help:XSvacer:Webide#Структуры_передаваемые_в_поля_с_golang-шаблонами_строк|TheiaDockerContainerStartContext]]&lt;br /&gt;
|&amp;quot;theia-1-46-&amp;lt;nowiki&amp;gt;{{.StartArgs.SnapshotID}}&amp;lt;/nowiki&amp;gt;&amp;quot;             &lt;br /&gt;
|-&lt;br /&gt;
|docker/containerconfiglabels&lt;br /&gt;
|[]map&lt;br /&gt;
|Список &amp;quot;меток&amp;quot; docker-контейнера. Дополняет список меток в &amp;lt;code&amp;gt;docker/container/config/labels&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
 - &amp;quot;com.docker.compose.project&amp;quot;: svacer             &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры docker-образа из которого будет запущен контейнер&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/name&lt;br /&gt;
|string&lt;br /&gt;
|Название образа&lt;br /&gt;
|theia-blueprint                                    &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/tag&lt;br /&gt;
|string&lt;br /&gt;
|Тег образа&lt;br /&gt;
|1.46.0.sarif.clang                                 &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcetype&lt;br /&gt;
|enum: repository/file&lt;br /&gt;
|Тип источника для загрузки образа в docker-хост.&lt;br /&gt;
* &amp;lt;code&amp;gt;repository&amp;lt;/code&amp;gt; - будет вызван &amp;lt;code&amp;gt;docker pull&amp;lt;/code&amp;gt; образа &amp;lt;code&amp;gt;{image/name}:{image/tag}&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt; - будет вызван &amp;lt;code&amp;gt;docker load&amp;lt;/code&amp;gt; с url'ом &amp;lt;code&amp;gt;image/sourcefileurl&amp;lt;/code&amp;gt;&lt;br /&gt;
|file                                               &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcefileurl&lt;br /&gt;
|url&lt;br /&gt;
|Url откуда будет загружен docker-образ если &amp;lt;code&amp;gt;image/sourcetype == &amp;quot;file&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
Url может содержать:&lt;br /&gt;
- путь к локальному файлу: схема &amp;lt;code&amp;gt;file://&amp;lt;/code&amp;gt;&lt;br /&gt;
- http/https-адрес: схема &amp;lt;code&amp;gt;http://&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;https://&amp;lt;/code&amp;gt;&lt;br /&gt;
|https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/&lt;br /&gt;
|map&lt;br /&gt;
|Свойства docker-контейнера&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/config.go#L70&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config/env&lt;br /&gt;
|[]string&lt;br /&gt;
|Список переменных среды, которые будут установлены в контейнере&lt;br /&gt;
|&lt;br /&gt;
 - THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;     &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры хостинга контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/hostconfig.go#L379&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/autoremove&lt;br /&gt;
|bool&lt;br /&gt;
|&lt;br /&gt;
|true                                               &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/portbindings&lt;br /&gt;
|map&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
 &amp;quot;3000/tcp&amp;quot;:                                        &lt;br /&gt;
   - hostport: 0                                    &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/networkconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Сетевые настройки контейнера. Соответствуют структуре https://github.com/moby/moby/blob/v24.0.7/api/types/network/network.go#L104&lt;br /&gt;
|                                                   &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры проверки доступности healthcheck ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для проверки доступности IDE после запуска docker-контейнера&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck&lt;br /&gt;
|map&lt;br /&gt;
|Параметры проверки доступности IDE&lt;br /&gt;
|                                     &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyretries&lt;br /&gt;
|int&lt;br /&gt;
|Количества попыток проверки до ошибки доступности&lt;br /&gt;
|10                                   &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyperiod&lt;br /&gt;
|golang duration string&lt;br /&gt;
|Интервал проверки&lt;br /&gt;
|200ms                                &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Структуры передаваемые в поля с golang-шаблонами строк ====&lt;br /&gt;
&lt;br /&gt;
 sarifFileContext {&lt;br /&gt;
     Time    time.Time&lt;br /&gt;
 	Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
 &lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 TheiaDockerContainerStartContext {&lt;br /&gt;
 	IdeID: {&lt;br /&gt;
         IdeType  string&lt;br /&gt;
         ConfigID string&lt;br /&gt;
     },&lt;br /&gt;
 	StartArgs: {&lt;br /&gt;
         SnapshotID string&lt;br /&gt;
         UserID     string&lt;br /&gt;
         User       string&lt;br /&gt;
     },&lt;br /&gt;
 	Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
 &lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация по умолчанию используемая в svacer ===&lt;br /&gt;
&lt;br /&gt;
Данная настройка применяется по умолчанию для запуска Theia IDE, если в конфигурационном файле svacer.cfg отсутствует раздел &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
xsvacer:&lt;br /&gt;
  docker:&lt;br /&gt;
    hosts:&lt;br /&gt;
      default: # конфигурация docker-хоста&lt;br /&gt;
        type: external&lt;br /&gt;
      ...&lt;br /&gt;
&lt;br /&gt;
  webide:&lt;br /&gt;
    theia:&lt;br /&gt;
      1-46-0: &amp;amp;1-46-0&lt;br /&gt;
        disabled: true&lt;br /&gt;
        order: 0&lt;br /&gt;
        name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
        sourcesroot: ${USER_CACHE_DIR}/svacer-snapshot-sources&lt;br /&gt;
        sariffiletemplate: &amp;quot;&amp;lt;nowiki&amp;gt;{{.Context.ProjectName}}.{{.Context.BranchName}}&amp;lt;/nowiki&amp;gt;.sarif&amp;quot;&lt;br /&gt;
        manager:&lt;br /&gt;
          type: default&lt;br /&gt;
        docker:&lt;br /&gt;
          hostid: default # идентификатор используемого docker-хоста&lt;br /&gt;
          containernametemplate: &amp;quot;theia-1-46-&amp;lt;nowiki&amp;gt;{{.StartArgs.SnapshotID}}&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
          image:&lt;br /&gt;
            name: theia-blueprint&lt;br /&gt;
            tag: 1.46.0.sarif.clang&lt;br /&gt;
            sourcetype: file&lt;br /&gt;
            sourcefileurl: https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar&lt;br /&gt;
          containerconfiglabels:&lt;br /&gt;
            - &amp;quot;com.docker.compose.project&amp;quot;: svacer&lt;br /&gt;
          container:&lt;br /&gt;
            config:&lt;br /&gt;
              env:&lt;br /&gt;
                - THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
            hostconfig:&lt;br /&gt;
              autoremove: true&lt;br /&gt;
              portbindings:&lt;br /&gt;
                &amp;quot;3000/tcp&amp;quot;:&lt;br /&gt;
                  - hostport: 0&lt;br /&gt;
            networkconfig:&lt;br /&gt;
        healthcheck:&lt;br /&gt;
          starttoreadyretries: 10&lt;br /&gt;
          starttoreadyperiod: 200ms&lt;br /&gt;
      default:&lt;br /&gt;
        &amp;lt;&amp;lt;: *1-46-0&lt;br /&gt;
        order: 0&lt;br /&gt;
        disabled: false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' По умолчанию используется docker-хост с идентификатором &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;. Согласно настройке этого хоста, по умолчанию предполагается взаимодействие с докером через unix-сокет &amp;lt;code&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt;. Соответственно пользователь, под которым запускается svacer должен иметь доступ к этому сокету (https://docs.docker.com/engine/install/linux-postinstall/).&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' При наличии раздела &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; в конфигурационном файле &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;, будут применены только настройки из этого раздела. Настройки по умолчанию будут полностью проигнорированы.&lt;br /&gt;
&lt;br /&gt;
=== Изменение конфигурационных параметров с помощью переменных окружения ===&lt;br /&gt;
&lt;br /&gt;
Значения атрибутов конфигурации могут быть изменены с помощью переменных окружения &amp;lt;code&amp;gt;XSVACER_WEBIDE_THEIA_{id конфигурации ide}[_параметр]={значение параметра}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например, для активации rootless-хоста &amp;lt;code&amp;gt;xsvacer/hosts/local&amp;lt;/code&amp;gt; и переключения запуска IDE с идентификатором &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; на этот хост, можно указать такие значения переменных окружения при запуске svacer'а:&lt;br /&gt;
 XSVACER_DOCKER_HOSTS_LOCAL_DISABLED=false&lt;br /&gt;
 XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_HOSTID=local&lt;br /&gt;
&lt;br /&gt;
== Очистка системы: удаление артефактов функциональности ==&lt;br /&gt;
&lt;br /&gt;
В процессе использования функциональности IDE создаются следующие артефакты:&lt;br /&gt;
# Исходные файлы снимков скачиваются в &amp;quot;корневые папки&amp;quot; заданные в параметре &amp;lt;code&amp;gt;xsvacer/webide/theia/{id конфигурации}/sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
# Артефакты docker:&lt;br /&gt;
#* образы и контейнеры создаются на хостах, указанных в конфигурации docker-хостов, указанных в &amp;lt;code&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/hostid&amp;lt;/code&amp;gt;&lt;br /&gt;
#* названия docker-образов будут соответствовать параметрам в &amp;lt;code&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/image&amp;lt;/code&amp;gt;&lt;br /&gt;
#* названия docker-контейнеров будут соответствовать параметру &amp;lt;code&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/containernametemplate&amp;lt;/code&amp;gt;&lt;br /&gt;
#* наборы меток doker-контейнеров будут содержать:&lt;br /&gt;
#*: метки перечисленные в &amp;lt;code&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/containerconfiglabels&amp;lt;/code&amp;gt;&lt;br /&gt;
#*: метки перечисленные в &amp;lt;code&amp;gt;xsvacer/webide/theia/{id конфигурации}/docker/container/config/labels&amp;lt;/code&amp;gt;&lt;br /&gt;
#*: метки с названиями &amp;lt;code&amp;gt;svacer.service.id&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;svacer.service.type&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;svacer.theia.start_args&amp;lt;/code&amp;gt;&lt;br /&gt;
# При использовании rootless-хоста docker'а будут созданы папки, согласно [[Help:XSvacer:Docker#Специфичные настройки для rootless-хоста]]&lt;br /&gt;
&lt;br /&gt;
== Рекомендации ==&lt;br /&gt;
&lt;br /&gt;
=== Предварительная загрузка docker-образа с IDE ===&lt;br /&gt;
&lt;br /&gt;
По умолчанию параметр &amp;lt;code&amp;gt;xsvacer/webide/theia/1-46-0/docker/image/sourcefileurl&amp;lt;/code&amp;gt; содержит значение &amp;lt;code&amp;gt;https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar&amp;lt;/code&amp;gt;. По этому адресу находится архив с docker-образом для Theia IDE.&lt;br /&gt;
&lt;br /&gt;
Если docker-образ ещё не был загружен, то загрузка начнётся при первой попытке запуска IDE. Т.к. этот процесс занимает длительное время, то запрос запуска IDE тоже будет выполняться долго.&lt;br /&gt;
&lt;br /&gt;
Для ускорения первого запуска IDE, докер образ можно загрузить на хост docker'а вручную. Для этого необходимо:&lt;br /&gt;
# Скачать файл архива;&lt;br /&gt;
# Выполнить команду &amp;lt;code&amp;gt;docker image load -i /path/to/tar/theia-blueprint.1.46.0.sarif.clang.tar&amp;lt;/code&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
== Информация о docker-образе Theia IDE ==&lt;br /&gt;
&lt;br /&gt;
Docker-образ, используемый по умолчанию, построен на базе [[https://theia-ide.org/|Eclipse Theia IDE]] версии [[https://github.com/eclipse-theia/theia-blueprint/tree/v1.46.0|1.46.0]]&lt;br /&gt;
&lt;br /&gt;
При этом была изменена компоновка расширений theia (результат выполнения &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
diff --git a/browser.Dockerfile b/browser.Dockerfile&lt;br /&gt;
index efe591e..a4ebb6a 100644&lt;br /&gt;
--- a/browser.Dockerfile&lt;br /&gt;
+++ b/browser.Dockerfile&lt;br /&gt;
@@ -42,7 +42,7 @@ RUN chmod g+rw /home &amp;amp;&amp;amp; \&lt;br /&gt;
 RUN apt-get update &amp;amp;&amp;amp; apt-get install -y wget apt-transport-https &amp;amp;&amp;amp; \&lt;br /&gt;
     wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | tee /usr/share/keyrings/adoptium.asc &amp;amp;&amp;amp; \&lt;br /&gt;
     echo &amp;quot;deb [signed-by=/usr/share/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main&amp;quot; | tee /etc/apt/sources.list.d/adoptium.list &amp;amp;&amp;amp; \&lt;br /&gt;
-    apt-get update &amp;amp;&amp;amp; apt-get install -y git openssh-client openssh-server bash libsecret-1-0 temurin-17-jdk maven &amp;amp;&amp;amp; \&lt;br /&gt;
+    apt-get update &amp;amp;&amp;amp; apt-get install -y git openssh-client openssh-server bash libsecret-1-0 clangd &amp;amp;&amp;amp; \&lt;br /&gt;
     apt-get purge -y wget &amp;amp;&amp;amp; \&lt;br /&gt;
     apt-get clean&lt;br /&gt;
&lt;br /&gt;
diff --git a/package.json b/package.json&lt;br /&gt;
index 9044595..9d0dcc8 100644&lt;br /&gt;
--- a/package.json&lt;br /&gt;
+++ b/package.json&lt;br /&gt;
@@ -54,10 +54,8 @@&lt;br /&gt;
   &amp;quot;theiaPluginsDir&amp;quot;: &amp;quot;plugins&amp;quot;,&lt;br /&gt;
   &amp;quot;theiaPlugins&amp;quot;: {&lt;br /&gt;
     &amp;quot;eclipse-theia.builtin-extension-pack&amp;quot;: &amp;quot;https://open-vsx.org/api/eclipse-theia/builtin-extension-pack/1.83.1/file/eclipse-theia.builtin-extension-pack-1.83.1.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;ms-vscode.js-debug&amp;quot;: &amp;quot;https://open-vsx.org/api/ms-vscode/js-debug/1.83.1/file/ms-vscode.js-debug-1.83.1.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;ms-vscode.js-debug-companion&amp;quot;: &amp;quot;https://open-vsx.org/api/ms-vscode/js-debug-companion/1.1.2/file/ms-vscode.js-debug-companion-1.1.2.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;vscjava.vscode-java-pack&amp;quot;: &amp;quot;https://open-vsx.org/api/vscjava/vscode-java-pack/0.25.11/file/vscjava.vscode-java-pack-0.25.11.vsix&amp;quot;,&lt;br /&gt;
-    &amp;quot;vscjava.vscode-java-dependency&amp;quot;: &amp;quot;https://open-vsx.org/api/vscjava/vscode-java-dependency/0.21.2/file/vscjava.vscode-java-dependency-0.21.2.vsix&amp;quot;&lt;br /&gt;
+    &amp;quot;llvm-vs-code-extensions.vscode-clangd&amp;quot;: &amp;quot;https://open-vsx.org/api/llvm-vs-code-extensions/vscode-clangd/0.1.26/file/llvm-vs-code-extensions.vscode-clangd-0.1.26.vsix&amp;quot;,&lt;br /&gt;
+    &amp;quot;ms-sarifvscode.sarif-viewer&amp;quot;: &amp;quot;https://open-vsx.org/api/MS-SarifVSCode/sarif-viewer/3.4.2/file/MS-SarifVSCode.sarif-viewer-3.4.2.vsix&amp;quot;&lt;br /&gt;
   },&lt;br /&gt;
   &amp;quot;theiaPluginsExcludeIds&amp;quot;: [&lt;br /&gt;
     &amp;quot;ms-vscode.js-debug-companion&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Команда построения docker-образа: &amp;lt;code&amp;gt;docker build -t theia-blueprint:1.46.0.sarif.clang -f browser.Dockerfile .&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Команда экспорта docker-образа: &amp;lt;code&amp;gt;docker image save theia-blueprint:1.46.0 &amp;gt; /path/to/tar/theia-blueprint.1.46.0.docker.command.tar&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=1956</id>
		<title>Help:XSvacer:Webide</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=1956"/>
		<updated>2024-06-05T12:58:42Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Поддержка среды разработки Theia IDE =&lt;br /&gt;
 '''Примечание:''' данная функциональность входит в набор расширений XSvacer.&lt;br /&gt;
&lt;br /&gt;
Данная функциональность даёт возможность просматривать исходный код снимка с предупреждениями анализатора во внешней IDE.&lt;br /&gt;
&lt;br /&gt;
По умолчанию запускается IDE собранная на основе Theia IDE (https://theia-ide.org/).&lt;br /&gt;
&lt;br /&gt;
== Активация функциональности ==&lt;br /&gt;
Для активации функциональности необходимо указать флаг &amp;lt;code&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt; при запуске svacer'а.&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' при запуске функциональности &amp;lt;code&amp;gt;webide&amp;lt;/code&amp;gt; также будет запущена функциональность &amp;lt;code&amp;gt;docker&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
После этого становится доступным REST API управления IDE для просмотра снимков проектов, в пользовательском интерфейсе появляется кнопка &amp;quot;Открыть в IDE&amp;quot;, устанавливается подключение к хосту docker'а, на котором будут запускаться контейнеры с экземплярами IDE.&lt;br /&gt;
&lt;br /&gt;
== REST API для работы с IDE ==&lt;br /&gt;
&lt;br /&gt;
После активации функциональности становятся доступны http-ресурсы для управления IDE снимков:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
|+ style=white-space:nowrap | REST API управления IDE&lt;br /&gt;
|-&lt;br /&gt;
!Ресурс&lt;br /&gt;
!Описание                                                &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
GET /api/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Получение списка доступных для запуска IDE.&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;order&amp;quot;: 0&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
:&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; - название IDE&lt;br /&gt;
:&amp;lt;code&amp;gt;order&amp;lt;/code&amp;gt; - порядковый номер IDE в списке&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
GET /api/snapshots/{snapshot_id}/ide/{ide_id}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Запрос описания экземпляра IDE, запущенного для снимка. &lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
:&amp;lt;code&amp;gt;ide_id&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;id&amp;quot;: {&lt;br /&gt;
    &amp;quot;ide_id&amp;quot;: {&lt;br /&gt;
      &amp;quot;ide_type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
      &amp;quot;config_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;snapshot_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;url&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;start_args&amp;quot;: {&lt;br /&gt;
    &amp;quot;snapshot_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;user&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;user_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
POST /api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Запуск IDE для просмотра исходных кодов снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
PUT /api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Команда управления экземпляром IDE снимка&lt;br /&gt;
Доступные действия:&lt;br /&gt;
* &amp;lt;code&amp;gt;update_markup&amp;lt;/code&amp;gt; - обновление предупреждений и разметки (sarif-файла)&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;action&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt; - действие&lt;br /&gt;
:&amp;lt;code&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:''' пустой&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
DELETE /api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Остановка экземпляра IDE снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
:&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:''' пустой&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
/snapshots/{snapshot_id}/ide/{ide_id}/*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Прокси для запросов экземпляра IDE снимка&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Формат идентификатора IDE ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{тип ide}__{идентификатор конфигурации}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например для &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;-конфигурации Theia IDE: &amp;lt;code&amp;gt;theia__default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Принцип работы ==&lt;br /&gt;
&lt;br /&gt;
Функциональность запуска IDE для просмотра исходного кода снимков становится доступной пользователю, если соблюдаются условия:&lt;br /&gt;
# Функциональность активна: при запуске svacer'а указан флаг &amp;lt;code&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt;;&lt;br /&gt;
# В конфигурации функциональности &amp;lt;code&amp;gt;xsvacer/webide/theia&amp;lt;/code&amp;gt; (см. ниже) есть хотя бы одна активная (&amp;lt;code&amp;gt;disabled: false&amp;lt;/code&amp;gt;) конфигурация IDE;&lt;br /&gt;
# У пользователя svacer имеются разрешения &amp;lt;code&amp;gt;&amp;quot;Просмотр маркеров&amp;quot;&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;&amp;quot;Read markers&amp;quot;&amp;lt;/code&amp;gt;) и &amp;lt;code&amp;gt;&amp;quot;Экспорт разметки&amp;quot;&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;&amp;quot;Export markup&amp;quot;&amp;lt;/code&amp;gt;) на проект, в котором находится снимок, для которого нужно запустить IDE.&lt;br /&gt;
&lt;br /&gt;
В противном случае в пользовательском интерфейсе будет отсутствовать кнопка &amp;lt;code&amp;gt;&amp;quot;Открыть в IDE&amp;quot;&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;&amp;quot;Open in IDE&amp;quot;&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== Запуск IDE ===&lt;br /&gt;
&lt;br /&gt;
Запуск производится путём вызова http-метода &amp;lt;code&amp;gt;POST /api/snapshots/{snapshot_id}/ide&amp;lt;/code&amp;gt; с телом запроса &amp;lt;code&amp;gt;{&amp;quot;ideId&amp;quot;: &amp;quot;идентификатор IDE&amp;quot;}&amp;lt;/code&amp;gt; (см. REST API).&lt;br /&gt;
&lt;br /&gt;
Последовательность действий, выполняемых при запуске IDE:&lt;br /&gt;
&lt;br /&gt;
# Производится проверка: была ли уже запущена указанная IDE для указанного снимка;&lt;br /&gt;
#* Если запущена: производится проверка: доступна ли IDE: отвечает на запросы;&lt;br /&gt;
#** Если IDE доступна: действие не требуется. Процесс запуска завершается;&lt;br /&gt;
#** Если IDE не доступна: продолжается процесс запуска. IDE будет перезапущена;&lt;br /&gt;
# Создаётся &amp;quot;корневая папка снимка&amp;quot;, предназначенная для хранения исходного кода снимка и предупреждений анализатора с разметкой в виде sarif-файла. Название папки соответствует id снимка. Папка создаётся по пути заданному в параметре конфигурации IDE &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/sourcesroot&amp;lt;/code&amp;gt;;&lt;br /&gt;
# Исходный код снимка скачивается в &amp;quot;корневую папку снимка&amp;quot;;&lt;br /&gt;
# Производится экспорт маркеров и разметки в виде sarif-файла в &amp;quot;корневую папку снимка&amp;quot;. Название sarif-файла формируется с помощью шаблона, заданного в параметре конфигурации IDE &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/sariffiletemplate&amp;lt;/code&amp;gt;;&lt;br /&gt;
# Производится настройка и запуск docker-контейнера, в соответствии с настройками &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker&amp;lt;/code&amp;gt;;&lt;br /&gt;
## Проверяется наличие на docker-хосте образа IDE, указанного в &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker/image&amp;lt;/code&amp;gt;;&lt;br /&gt;
##* Если docker-образ отсутствует - он будет загружен на хост;&lt;br /&gt;
## Проверяется наличие на docker-хосте контейнера с IDE для снимка;&lt;br /&gt;
##* Если docker-контейнер не существует, то он будет создан и запущен;&lt;br /&gt;
##* Если docker-контейнер существует и находится&lt;br /&gt;
##** в статусе &amp;lt;code&amp;gt;running&amp;lt;/code&amp;gt; - процесс запуска IDE продолжается;&lt;br /&gt;
##** в статусе &amp;lt;code&amp;gt;created&amp;lt;/code&amp;gt;,&amp;lt;code&amp;gt;exited&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;paused&amp;lt;/code&amp;gt; - контейнер будет запущен;&lt;br /&gt;
##** в других статусах - вернётся соответствующая ошибка и процесс запуска IDE прервётся;&lt;br /&gt;
# После успешного запуска docker-контейнера осуществляется ожидание окончания запуска процесса IDE в контейнере, в соответствии с настройками &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck&amp;lt;/code&amp;gt;;&lt;br /&gt;
#* Если за отведённое время ответ от IDE получен - процесс запуска завершается.&lt;br /&gt;
#* Если ответ не получен - вернётся ошибка &amp;lt;code&amp;gt;ide not ready&amp;lt;/code&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' При возникновении ошибки на одном из этапов запуска IDE, артефакты созданные на предыдущих этапах останутся в системе. В дальнейшем они могут быть использованы при повторном запуске IDE, если причина возникновения ошибки была устранена. См. раздел &amp;quot;Очистка системы: удаление артефактов функциональности&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' Причиной возникновения ошибки &amp;lt;code&amp;gt;ide not ready&amp;lt;/code&amp;gt; может стать высокая загруженность или недостаточная производительность docker-хоста, на котором запускается контейнер с IDE. В связи с этим, процесс IDE внутри контейнера может запускаться дольше, чем указано в настойках &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/healthcheck&amp;lt;/code&amp;gt;.&lt;br /&gt;
 В случае возникновения ошибки &amp;lt;code&amp;gt;ide not ready&amp;lt;/code&amp;gt; рекомендуется попытаться повторно запустить IDE через короткий промежуток времени.&lt;br /&gt;
 Ещё одной причиной возникновения данной ошибки может стать сетевая недоступность docker-контейнера, при подключении к удалённому docker-хосту. В таком случае рекомендуется:&lt;br /&gt;
 1. проверить сетевую доступность docker-хоста;&lt;br /&gt;
 2. проверить настройки биндинга docker-контейнера c IDE - &amp;lt;code&amp;gt;xsvacer/webide/theia/{идентификатор конфигурации}/docker/container/hostconfig/portbindings&amp;lt;/code&amp;gt;. Контейнер должен быть подключён к доступному сетевому интерфейсу.&lt;br /&gt;
 3. проверить настройки фаервола на docker-хосте;&lt;br /&gt;
&lt;br /&gt;
=== Использование IDE ===&lt;br /&gt;
&lt;br /&gt;
=== Перезапуск IDE ===&lt;br /&gt;
&lt;br /&gt;
При повторном запуске IDE либо при поступлении запроса, который должен быть спроксирован к docker-контейнеру IDE, проверяется её доступность. В случае потери соединения с IDE производится попытка её перезапуска. В этом случае происходит та же последовательность действий, что и при первоначальном запуске IDE.&lt;br /&gt;
&lt;br /&gt;
=== Остановка IDE ===&lt;br /&gt;
&lt;br /&gt;
=== Очистка системы: удаление артефактов функциональности ===&lt;br /&gt;
&lt;br /&gt;
== Конфигурация ==&lt;br /&gt;
&lt;br /&gt;
Управление настройками функциональности осуществляется с помощью конфигурационного yaml-файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Раздел конфигурации для управления функциональностью - &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Раздел содержит перечисление настроек доступных конфигураций для запуска экземпляров Theia IDE &amp;lt;code&amp;gt;xsvacer/webide/theia&amp;lt;/code&amp;gt;. При наличии нескольких активных конфигураций запуска Theia IDE пользователь сможет выбрать какую из них использовать при запуске IDE с исходными файлами снимка.&lt;br /&gt;
&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       config1:&lt;br /&gt;
         ...&lt;br /&gt;
       config2:&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' Запуск IDE основывается на запуске docker-контейнеров, содержащих соответствующие сборки IDE. Поэтому помимо настройки функциональности в разделе &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; необходимо также настроить доступ к docker-хосту в разделе &amp;lt;code&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt; ([[Help:XSvacer:Docker]]). В противном случае функциональность webide не сможет работать корректно.&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' в случае отсутствия файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; или отсутствии раздела &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;, будет использоваться конфигурация по умолчанию (см. ниже)&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация запуска Theia IDE ===&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' На этапе внедрения расширений XSvacer конфигурация функциональностей может меняться. Следите за анонсами!&lt;br /&gt;
&lt;br /&gt;
Конфигурации запуска Theia IDE добавляются в виде полей в разделе &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;. Название поля является идентификатором конфигурации запуска. Например идентификатор по номеру используемой версии IDE:&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       1-46-0:&lt;br /&gt;
         name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
==== Базовые параметры конфигурации запуска ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию                     &lt;br /&gt;
|-&lt;br /&gt;
|disabled&lt;br /&gt;
|bool&lt;br /&gt;
|Конфигурация запуска неактивна. Неактивная конфигурация не доступна для запуска экземпляра IDE&lt;br /&gt;
|true (переопределяется в конфигурации &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;)         &lt;br /&gt;
|-&lt;br /&gt;
|order&lt;br /&gt;
|int&lt;br /&gt;
|Порядковый номер в списке выбора конфигурации запуска&lt;br /&gt;
|0                                                        &lt;br /&gt;
|-&lt;br /&gt;
|name&lt;br /&gt;
|string&lt;br /&gt;
|Название конфигурации&lt;br /&gt;
|Theia blueprint web IDE (v1.46.0)                        &lt;br /&gt;
|-&lt;br /&gt;
|sourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке содержащей исходные коды снимков на машине со svacer'ом&lt;br /&gt;
|${USER_CACHE_DIR}/svacer-snapshot-sources                &lt;br /&gt;
|-&lt;br /&gt;
|dockerhostsourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке содержащей исходные коды снимков на хосте docker'а. Нужен при использовании удалённого docker-хоста, т.к. в таком случае папка с исходными кодами скорее всего будет доступна по адресу, отличающемуся от &amp;lt;code&amp;gt;sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
|                                                         &lt;br /&gt;
|-&lt;br /&gt;
|dockerhostpathseparator&lt;br /&gt;
|string&lt;br /&gt;
|Разделитель пути на хосте docker'а. По умолчанию &amp;lt;code&amp;gt;&amp;quot;/&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
|                                                         &lt;br /&gt;
|-&lt;br /&gt;
|sariffiletemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон названия sarif-файла с предупреждениями анализатора. В шаблон передаётся структура &amp;lt;code&amp;gt;sarifFileContext&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;quot;&amp;lt;nowiki&amp;gt;{{.Context.ProjectName}}.{{.Context.BranchName}}&amp;lt;/nowiki&amp;gt;.sarif&amp;quot; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры менеджера запуска IDE ====&lt;br /&gt;
&lt;br /&gt;
Конфигурация менеджера запуска IDE. На данный момент доступен только &amp;quot;стандартный&amp;quot; менеджер (&amp;lt;code&amp;gt;type: default&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию &lt;br /&gt;
|-&lt;br /&gt;
|manager&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация менеджера запуска IDE&lt;br /&gt;
|                                     &lt;br /&gt;
|-&lt;br /&gt;
|manager/type&lt;br /&gt;
|enum: default&lt;br /&gt;
|Тип менеджера запуска IDE&lt;br /&gt;
|default                              &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры запуска docker-контейнеров с IDE ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для настройки запуска docker-контейнеров с IDE&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию               &lt;br /&gt;
|-&lt;br /&gt;
|docker/&lt;br /&gt;
|map&lt;br /&gt;
|Настройки создания docker-контейнера с IDE&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/hostid&lt;br /&gt;
|string&lt;br /&gt;
|Идентификатор хоста docker'а, описанного в &amp;lt;code&amp;gt;xsvacer/docker/hosts&amp;lt;/code&amp;gt;. Запуск docker-контейнера с IDE будет выполнен на этом хосте&lt;br /&gt;
|default                                            &lt;br /&gt;
|-&lt;br /&gt;
|docker/containernametemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон для формирования названия контейнера IDE для выбранного снимка. В шаблон передаётся структура &amp;lt;code&amp;gt;TheiaDockerContainerStartContext&amp;lt;/code&amp;gt; (см. ниже)&lt;br /&gt;
|&amp;quot;theia-1-46-&amp;lt;nowiki&amp;gt;{{.StartArgs.SnapshotID}}&amp;lt;/nowiki&amp;gt;&amp;quot;             &lt;br /&gt;
|-&lt;br /&gt;
|docker/containerconfiglabels&lt;br /&gt;
|[]map&lt;br /&gt;
|Список &amp;quot;меток&amp;quot; docker-контейнера. Дополняет список меток в &amp;lt;code&amp;gt;docker/container/config/labels&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
 - &amp;quot;com.docker.compose.project&amp;quot;: svacer             &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры docker-образа из которого будет запущен контейнер&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/name&lt;br /&gt;
|string&lt;br /&gt;
|Название образа&lt;br /&gt;
|theia-blueprint                                    &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/tag&lt;br /&gt;
|string&lt;br /&gt;
|Тег образа&lt;br /&gt;
|1.46.0.sarif.clang                                 &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcetype&lt;br /&gt;
|enum: repository/file&lt;br /&gt;
|Тип источника для загрузки образа в docker-хост.&lt;br /&gt;
* &amp;lt;code&amp;gt;repository&amp;lt;/code&amp;gt; - будет вызван &amp;lt;code&amp;gt;docker pull&amp;lt;/code&amp;gt; образа &amp;lt;code&amp;gt;{image/name}:{image/tag}&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt; - будет вызван &amp;lt;code&amp;gt;docker load&amp;lt;/code&amp;gt; с url'ом &amp;lt;code&amp;gt;image/sourcefileurl&amp;lt;/code&amp;gt;&lt;br /&gt;
|file                                               &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcefileurl&lt;br /&gt;
|url&lt;br /&gt;
|Url откуда будет загружен docker-образ если &amp;lt;code&amp;gt;image/sourcetype == &amp;quot;file&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
Url может содержать:&lt;br /&gt;
- путь к локальному файлу: схема &amp;lt;code&amp;gt;file://&amp;lt;/code&amp;gt;&lt;br /&gt;
- http/https-адрес: схема &amp;lt;code&amp;gt;http://&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;https://&amp;lt;/code&amp;gt;&lt;br /&gt;
|https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/&lt;br /&gt;
|map&lt;br /&gt;
|Свойства docker-контейнера&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/config.go#L70&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config/env&lt;br /&gt;
|[]string&lt;br /&gt;
|Список переменных среды, которые будут установлены в контейнере&lt;br /&gt;
|&lt;br /&gt;
 - THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;     &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры хостинга контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/hostconfig.go#L379&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/autoremove&lt;br /&gt;
|bool&lt;br /&gt;
|&lt;br /&gt;
|true                                               &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/portbindings&lt;br /&gt;
|map&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
 &amp;quot;3000/tcp&amp;quot;:                                        &lt;br /&gt;
   - hostport: 0                                    &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/networkconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Сетевые настройки контейнера. Соответствуют структуре https://github.com/moby/moby/blob/v24.0.7/api/types/network/network.go#L104&lt;br /&gt;
|                                                   &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры проверки доступности healthcheck ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для проверки доступности IDE после запуска docker-контейнера&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck&lt;br /&gt;
|map&lt;br /&gt;
|Параметры проверки доступности IDE&lt;br /&gt;
|                                     &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyretries&lt;br /&gt;
|int&lt;br /&gt;
|Количества попыток проверки до ошибки доступности&lt;br /&gt;
|10                                   &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyperiod&lt;br /&gt;
|golang duration string&lt;br /&gt;
|Интервал проверки&lt;br /&gt;
|200ms                                &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Структуры передаваемые в поля с golang-шаблонами строк ====&lt;br /&gt;
&lt;br /&gt;
 sarifFileContext {&lt;br /&gt;
     Time    time.Time&lt;br /&gt;
 	Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
 &lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 TheiaDockerContainerStartContext {&lt;br /&gt;
 	IdeID: {&lt;br /&gt;
         IdeType  string&lt;br /&gt;
         ConfigID string&lt;br /&gt;
     },&lt;br /&gt;
 	StartArgs: {&lt;br /&gt;
         SnapshotID string&lt;br /&gt;
         UserID     string&lt;br /&gt;
         User       string&lt;br /&gt;
     },&lt;br /&gt;
 	Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
 &lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация по умолчанию используемая в svacer ===&lt;br /&gt;
&lt;br /&gt;
Данная настройка применяется по умолчанию для запуска Theia IDE, если в конфигурационном файле svacer.cfg отсутствует раздел &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   docker:&lt;br /&gt;
     hosts:&lt;br /&gt;
       default: # конфигурация docker-хоста, действующая по умолчанию&lt;br /&gt;
         type: external&lt;br /&gt;
       ...&lt;br /&gt;
 &lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       1-46-0: &amp;amp;1-46-0&lt;br /&gt;
         disabled: true&lt;br /&gt;
         order: 0&lt;br /&gt;
         name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
         sourcesroot: ${USER_CACHE_DIR}/svacer-snapshot-sources&lt;br /&gt;
         sariffiletemplate: &amp;quot;&amp;lt;nowiki&amp;gt;{{.Context.ProjectName}}.{{.Context.BranchName}}&amp;lt;/nowiki&amp;gt;.sarif&amp;quot;&lt;br /&gt;
         manager:&lt;br /&gt;
           type: default&lt;br /&gt;
         docker:&lt;br /&gt;
           hostid: default # идентификатор используемого docker-хоста&lt;br /&gt;
           containernametemplate: &amp;quot;theia-1-46-&amp;lt;nowiki&amp;gt;{{.StartArgs.SnapshotID}}&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
           image:&lt;br /&gt;
             name: theia-blueprint&lt;br /&gt;
             tag: 1.46.0.sarif.clang&lt;br /&gt;
             sourcetype: file&lt;br /&gt;
             sourcefileurl: https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar&lt;br /&gt;
           containerconfiglabels:&lt;br /&gt;
             - &amp;quot;com.docker.compose.project&amp;quot;: svacer&lt;br /&gt;
           container:&lt;br /&gt;
             config:&lt;br /&gt;
               env:&lt;br /&gt;
                 - THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
             hostconfig:&lt;br /&gt;
               autoremove: true&lt;br /&gt;
               portbindings:&lt;br /&gt;
                 &amp;quot;3000/tcp&amp;quot;:&lt;br /&gt;
                   - hostport: 0&lt;br /&gt;
             networkconfig:&lt;br /&gt;
         healthcheck:&lt;br /&gt;
           starttoreadyretries: 10&lt;br /&gt;
           starttoreadyperiod: 200ms&lt;br /&gt;
       default:&lt;br /&gt;
         &amp;lt;&amp;lt;: *1-46-0&lt;br /&gt;
         order: 0&lt;br /&gt;
         disabled: false&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' По умолчанию используется docker-хост с идентификатором &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;. Согласно настройке этого хоста, по умолчанию предполагается взаимодействие с докером через unix-сокет &amp;lt;code&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt;. Соответственно пользователь, под которым запускается svacer должен иметь доступ к этому сокету (https://docs.docker.com/engine/install/linux-postinstall/).&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' При наличии раздела &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; в конфигурационном файле &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;, будут применены только настройки из этого раздела. Настройки по умолчанию будут полностью проигнорированы.&lt;br /&gt;
&lt;br /&gt;
=== Изменение конфигурационных параметров с помощью переменных окружения ===&lt;br /&gt;
&lt;br /&gt;
Значения атрибутов конфигурации могут быть изменены с помощью переменных окружения &amp;lt;code&amp;gt;XSVACER_WEBIDE_THEIA_{id конфигурации ide}[_параметр]={значение параметра}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например, для активации rootless-хоста &amp;lt;code&amp;gt;xsvacer/hosts/local&amp;lt;/code&amp;gt; и переключения запуска IDE с идентификатором &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; на этот хост, можно указать такие значения переменных окружения при запуске svacer'а:&lt;br /&gt;
 XSVACER_DOCKER_HOSTS_LOCAL_DISABLED=false&lt;br /&gt;
 XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_HOSTID=local&lt;br /&gt;
&lt;br /&gt;
== Рекомендации ==&lt;br /&gt;
&lt;br /&gt;
=== Предварительная загрузка docker-образа с IDE ===&lt;br /&gt;
&lt;br /&gt;
По умолчанию параметр &amp;lt;code&amp;gt;xsvacer/webide/theia/1-46-0/docker/image/sourcefileurl&amp;lt;/code&amp;gt; содержит значение &amp;lt;code&amp;gt;https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar&amp;lt;/code&amp;gt;. По этому адресу находится архив с docker-образом для Theia IDE.&lt;br /&gt;
&lt;br /&gt;
Если docker-образ ещё не был загружен, то загрузка начнётся при первой попытке запуска IDE. Т.к. этот процесс занимает длительное время, то запрос запуска IDE тоже будет выполняться долго.&lt;br /&gt;
&lt;br /&gt;
Для ускорения первого запуска IDE, докер образ можно загрузить в хост docker'а вручную. Для этого необходимо:&lt;br /&gt;
# Скачать файл архива;&lt;br /&gt;
# Выполнить команду &amp;lt;code&amp;gt;docker image load -i /path/to/tar/theia-blueprint.1.46.0.sarif.clang.tag&amp;lt;/code&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
== docker-образ Theia IDE ==&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=1954</id>
		<title>Help:XSvacer:Webide</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=1954"/>
		<updated>2024-06-05T10:02:57Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Поддержка среды разработки Theia IDE =&lt;br /&gt;
 '''Примечание:''' данная функциональность входит в набор расширений XSvacer.&lt;br /&gt;
&lt;br /&gt;
Данная функциональность даёт возможность просматривать исходный код снимка с предупреждениями анализатора во внешней IDE.&lt;br /&gt;
&lt;br /&gt;
По умолчанию запускается IDE собранная на основе Theia IDE (https://theia-ide.org/).&lt;br /&gt;
&lt;br /&gt;
== Активация функциональности ==&lt;br /&gt;
Для активации функциональности необходимо указать флаг &amp;lt;code&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt; при запуске svacer'а.&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' при запуске функциональности &amp;lt;code&amp;gt;webide&amp;lt;/code&amp;gt; также будет запущена функциональность &amp;lt;code&amp;gt;docker&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
После этого становится доступным REST API управления IDE для просмотра снимков проектов, в пользовательском интерфейсе появляется кнопка &amp;quot;Открыть в IDE&amp;quot;, устанавливается подключение к хосту docker'а, на котором будут запускаться контейнеры с экземплярами IDE.&lt;br /&gt;
&lt;br /&gt;
== REST API для работы с IDE ==&lt;br /&gt;
&lt;br /&gt;
После активации функциональности становятся доступны http-ресурсы для управления IDE снимков:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Ресурс&lt;br /&gt;
!Описание                                                &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
GET /api/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Получение списка доступных для запуска IDE.&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;order&amp;quot;: 0&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; - название IDE&lt;br /&gt;
&amp;lt;code&amp;gt;order&amp;lt;/code&amp;gt; - порядковый номер IDE в списке&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
GET /api/snapshots/{snapshot_id}/ide/{ide_id}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Запрос описания экземпляра IDE, запущенного для снимка. &lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
&amp;lt;code&amp;gt;ide_id&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;id&amp;quot;: {&lt;br /&gt;
    &amp;quot;ide_id&amp;quot;: {&lt;br /&gt;
      &amp;quot;ide_type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
      &amp;quot;config_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;snapshot_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;properties&amp;quot;: {&lt;br /&gt;
    &amp;quot;url&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;start_args&amp;quot;: {&lt;br /&gt;
    &amp;quot;snapshot_id&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;user&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
    &amp;quot;user_id&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
POST /api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Запуск IDE для просмотра исходных кодов снимка&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;quot;string&amp;quot;&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
PUT /api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Команда управления экземпляром IDE снимка&lt;br /&gt;
Доступные действия:&lt;br /&gt;
* &amp;lt;code&amp;gt;update_markup&amp;lt;/code&amp;gt; - обновление предупреждений и разметки (sarif-файла)&lt;br /&gt;
'''Параметры:'''&lt;br /&gt;
&amp;lt;code&amp;gt;snapshot_id&amp;lt;/code&amp;gt; - идентификатор снимка&lt;br /&gt;
'''Запрос:'''&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;action&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
  &amp;quot;ideId&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;action&amp;lt;/code&amp;gt; - действие&lt;br /&gt;
&amp;lt;code&amp;gt;ideId&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
'''Ответ:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;quot;string&amp;quot;&amp;lt;/code&amp;gt; - идентификатор IDE&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre style=&amp;quot;white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
DELETE /api/snapshots/{snapshot_id}/ide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|Остановка экземпляра IDE снимка&lt;br /&gt;
|-&lt;br /&gt;
|/snapshots/{snapshot_id}/ide/{ide_id}/*&lt;br /&gt;
|Прокси экземпляра IDE снимка&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Формат идентификатора IDE &amp;lt;code&amp;gt;{тип ide}__{идентификатор конфигурации}&amp;lt;/code&amp;gt;. Например для &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;-конфигурации Theia IDE: &amp;lt;code&amp;gt;theia__default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Принцип работы ==&lt;br /&gt;
&lt;br /&gt;
=== Запуск IDE ===&lt;br /&gt;
&lt;br /&gt;
=== Использование IDE ===&lt;br /&gt;
&lt;br /&gt;
=== Остановка IDE ===&lt;br /&gt;
&lt;br /&gt;
== Конфигурация ==&lt;br /&gt;
&lt;br /&gt;
Управление настройками функциональности осуществляется с помощью конфигурационного yaml-файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Раздел конфигурации для управления функциональностью - &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Раздел содержит перечисление настроек доступных конфигураций для запуска экземпляров Theia IDE &amp;lt;code&amp;gt;xsvacer/webide/theia&amp;lt;/code&amp;gt;. При наличии нескольких активных конфигураций запуска Theia IDE пользователь сможет выбрать какую из них использовать при запуске IDE с исходными файлами снимка.&lt;br /&gt;
&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       config1:&lt;br /&gt;
         ...&lt;br /&gt;
       config2:&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' Запуск IDE основывается на запуске docker-контейнеров, содержащих соответствующие сборки IDE. Поэтому помимо настройки функциональности в разделе &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; необходимо также настроить доступ к docker-хосту в разделе &amp;lt;code&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt; ([[Help:XSvacer:Docker]]). В противном случае функциональность webide не сможет работать корректно.&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' в случае отсутствия файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; или отсутствии раздела &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;, будет использоваться конфигурация по умолчанию (см. ниже)&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация запуска Theia IDE ===&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' На этапе внедрения расширений XSvacer конфигурация функциональностей может меняться. Следите за анонсами!&lt;br /&gt;
&lt;br /&gt;
Конфигурации запуска Theia IDE добавляются в виде полей в разделе &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;. Название поля является идентификатором конфигурации запуска. Например идентификатор по номеру используемой версии IDE:&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       1-46-0:&lt;br /&gt;
         name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
==== Базовые параметры конфигурации запуска ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию                     &lt;br /&gt;
|-&lt;br /&gt;
|disabled&lt;br /&gt;
|bool&lt;br /&gt;
|Конфигурация запуска неактивна. Неактивная конфигурация не доступна для запуска экземпляра IDE&lt;br /&gt;
|true (переопределяется в конфигурации &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;)         &lt;br /&gt;
|-&lt;br /&gt;
|order&lt;br /&gt;
|int&lt;br /&gt;
|Порядковый номер в списке выбора конфигурации запуска&lt;br /&gt;
|0                                                        &lt;br /&gt;
|-&lt;br /&gt;
|name&lt;br /&gt;
|string&lt;br /&gt;
|Название конфигурации&lt;br /&gt;
|Theia blueprint web IDE (v1.46.0)                        &lt;br /&gt;
|-&lt;br /&gt;
|sourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке содержащей исходные коды снимков на машине со svacer'ом&lt;br /&gt;
|${USER_CACHE_DIR}/svacer-snapshot-sources                &lt;br /&gt;
|-&lt;br /&gt;
|dockerhostsourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке содержащей исходные коды снимков на хосте docker'а. Нужен при использовании удалённого docker-хоста, т.к. в таком случае папка с исходными кодами скорее всего будет доступна по адресу, отличающемуся от &amp;lt;code&amp;gt;sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
|                                                         &lt;br /&gt;
|-&lt;br /&gt;
|dockerhostpathseparator&lt;br /&gt;
|string&lt;br /&gt;
|Разделитель пути на хосте docker'а. По умолчанию &amp;lt;code&amp;gt;&amp;quot;/&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
|                                                         &lt;br /&gt;
|-&lt;br /&gt;
|sariffiletemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон названия sarif-файла с предупреждениями анализатора. В шаблон передаётся структура &amp;lt;code&amp;gt;sarifFileContext&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;quot;&amp;lt;nowiki&amp;gt;{{.Context.ProjectName}}.{{.Context.BranchName}}&amp;lt;/nowiki&amp;gt;.sarif&amp;quot; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры менеджера запуска IDE ====&lt;br /&gt;
&lt;br /&gt;
Конфигурация менеджера запуска IDE. На данный момент доступен только &amp;quot;стандартный&amp;quot; менеджер (&amp;lt;code&amp;gt;type: default&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию &lt;br /&gt;
|-&lt;br /&gt;
|manager&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация менеджера запуска IDE&lt;br /&gt;
|                                     &lt;br /&gt;
|-&lt;br /&gt;
|manager/type&lt;br /&gt;
|enum: default&lt;br /&gt;
|Тип менеджера запуска IDE&lt;br /&gt;
|default                              &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры запуска docker-контейнеров с IDE ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для настройки запуска docker-контейнеров с IDE&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию               &lt;br /&gt;
|-&lt;br /&gt;
|docker/&lt;br /&gt;
|map&lt;br /&gt;
|Настройки создания docker-контейнера с IDE&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/hostid&lt;br /&gt;
|string&lt;br /&gt;
|Идентификатор хоста docker'а, описанного в &amp;lt;code&amp;gt;xsvacer/docker/hosts&amp;lt;/code&amp;gt;. Запуск docker-контейнера с IDE будет выполнен на этом хосте&lt;br /&gt;
|default                                            &lt;br /&gt;
|-&lt;br /&gt;
|docker/containernametemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон для формирования названия контейнера IDE для выбранного снимка. В шаблон передаётся структура &amp;lt;code&amp;gt;TheiaDockerContainerStartContext&amp;lt;/code&amp;gt; (см. ниже)&lt;br /&gt;
|&amp;quot;theia-1-46-&amp;lt;nowiki&amp;gt;{{.StartArgs.SnapshotID}}&amp;lt;/nowiki&amp;gt;&amp;quot;             &lt;br /&gt;
|-&lt;br /&gt;
|docker/containerconfiglabels&lt;br /&gt;
|[]map&lt;br /&gt;
|Список &amp;quot;меток&amp;quot; docker-контейнера. Дополняет список меток в &amp;lt;code&amp;gt;docker/container/config/labels&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
 - &amp;quot;com.docker.compose.project&amp;quot;: svacer             &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры docker-образа из которого будет запущен контейнер&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/name&lt;br /&gt;
|string&lt;br /&gt;
|Название образа&lt;br /&gt;
|theia-blueprint                                    &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/tag&lt;br /&gt;
|string&lt;br /&gt;
|Тег образа&lt;br /&gt;
|1.46.0.sarif.clang                                 &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcetype&lt;br /&gt;
|enum: repository/file&lt;br /&gt;
|Тип источника для загрузки образа в docker-хост.&lt;br /&gt;
* &amp;lt;code&amp;gt;repository&amp;lt;/code&amp;gt; - будет вызван &amp;lt;code&amp;gt;docker pull&amp;lt;/code&amp;gt; образа &amp;lt;code&amp;gt;{image/name}:{image/tag}&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt; - будет вызван &amp;lt;code&amp;gt;docker load&amp;lt;/code&amp;gt; с url'ом &amp;lt;code&amp;gt;image/sourcefileurl&amp;lt;/code&amp;gt;&lt;br /&gt;
|file                                               &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcefileurl&lt;br /&gt;
|url&lt;br /&gt;
|Url откуда будет загружен docker-образ если &amp;lt;code&amp;gt;image/sourcetype == &amp;quot;file&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
Url может содержать:&lt;br /&gt;
- путь к локальному файлу: схема &amp;lt;code&amp;gt;file://&amp;lt;/code&amp;gt;&lt;br /&gt;
- http/https-адрес: схема &amp;lt;code&amp;gt;http://&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;https://&amp;lt;/code&amp;gt;&lt;br /&gt;
|https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/&lt;br /&gt;
|map&lt;br /&gt;
|Свойства docker-контейнера&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/config.go#L70&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config/env&lt;br /&gt;
|[]string&lt;br /&gt;
|Список переменных среды, которые будут установлены в контейнере&lt;br /&gt;
|&lt;br /&gt;
 - THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;     &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры хостинга контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/hostconfig.go#L379&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/autoremove&lt;br /&gt;
|bool&lt;br /&gt;
|&lt;br /&gt;
|true                                               &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/portbindings&lt;br /&gt;
|map&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
 &amp;quot;3000/tcp&amp;quot;:                                        &lt;br /&gt;
   - hostport: 0                                    &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/networkconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Сетевые настройки контейнера. Соответствуют структуре https://github.com/moby/moby/blob/v24.0.7/api/types/network/network.go#L104&lt;br /&gt;
|                                                   &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры проверки доступности healthcheck ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для проверки доступности IDE после запуска docker-контейнера&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck&lt;br /&gt;
|map&lt;br /&gt;
|Параметры проверки доступности IDE&lt;br /&gt;
|                                     &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyretries&lt;br /&gt;
|int&lt;br /&gt;
|Количества попыток проверки до ошибки доступности&lt;br /&gt;
|10                                   &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyperiod&lt;br /&gt;
|golang duration string&lt;br /&gt;
|Интервал проверки&lt;br /&gt;
|200ms                                &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Структуры передаваемые в поля с golang-шаблонами строк ====&lt;br /&gt;
&lt;br /&gt;
 sarifFileContext {&lt;br /&gt;
     Time    time.Time&lt;br /&gt;
 	Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
 &lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 TheiaDockerContainerStartContext {&lt;br /&gt;
 	IdeID: {&lt;br /&gt;
         IdeType  string&lt;br /&gt;
         ConfigID string&lt;br /&gt;
     },&lt;br /&gt;
 	StartArgs: {&lt;br /&gt;
         SnapshotID string&lt;br /&gt;
         UserID     string&lt;br /&gt;
         User       string&lt;br /&gt;
     },&lt;br /&gt;
 	Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
 &lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация по умолчанию используемая в svacer ===&lt;br /&gt;
&lt;br /&gt;
Данная настройка применяется по умолчанию для запуска Theia IDE, если в конфигурационном файле svacer.cfg отсутствует раздел &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   docker:&lt;br /&gt;
     hosts:&lt;br /&gt;
       default: # конфигурация docker-хоста, действующая по умолчанию&lt;br /&gt;
         type: external&lt;br /&gt;
       ...&lt;br /&gt;
 &lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       1-46-0: &amp;amp;1-46-0&lt;br /&gt;
         disabled: true&lt;br /&gt;
         order: 0&lt;br /&gt;
         name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
         sourcesroot: ${USER_CACHE_DIR}/svacer-snapshot-sources&lt;br /&gt;
         sariffiletemplate: &amp;quot;&amp;lt;nowiki&amp;gt;{{.Context.ProjectName}}.{{.Context.BranchName}}&amp;lt;/nowiki&amp;gt;.sarif&amp;quot;&lt;br /&gt;
         manager:&lt;br /&gt;
           type: default&lt;br /&gt;
         docker:&lt;br /&gt;
           hostid: default # идентификатор используемого docker-хоста&lt;br /&gt;
           containernametemplate: &amp;quot;theia-1-46-&amp;lt;nowiki&amp;gt;{{.StartArgs.SnapshotID}}&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
           image:&lt;br /&gt;
             name: theia-blueprint&lt;br /&gt;
             tag: 1.46.0.sarif.clang&lt;br /&gt;
             sourcetype: file&lt;br /&gt;
             sourcefileurl: https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar&lt;br /&gt;
           containerconfiglabels:&lt;br /&gt;
             - &amp;quot;com.docker.compose.project&amp;quot;: svacer&lt;br /&gt;
           container:&lt;br /&gt;
             config:&lt;br /&gt;
               env:&lt;br /&gt;
                 - THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
             hostconfig:&lt;br /&gt;
               autoremove: true&lt;br /&gt;
               portbindings:&lt;br /&gt;
                 &amp;quot;3000/tcp&amp;quot;:&lt;br /&gt;
                   - hostport: 0&lt;br /&gt;
             networkconfig:&lt;br /&gt;
         healthcheck:&lt;br /&gt;
           starttoreadyretries: 10&lt;br /&gt;
           starttoreadyperiod: 200ms&lt;br /&gt;
       default:&lt;br /&gt;
         &amp;lt;&amp;lt;: *1-46-0&lt;br /&gt;
         order: 0&lt;br /&gt;
         disabled: false&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' По умолчанию используется docker-хост с идентификатором &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;. Согласно настройке этого хоста, по умолчанию предполагается взаимодействие с докером через unix-сокет &amp;lt;code&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt;. Соответственно пользователь, под которым запускается svacer должен иметь доступ к этому сокету (https://docs.docker.com/engine/install/linux-postinstall/).&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' При наличии раздела &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; в конфигурационном файле &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;, будут применены только настройки из этого раздела. Настройки по умолчанию будут полностью проигнорированы.&lt;br /&gt;
&lt;br /&gt;
=== Изменение конфигурационных параметров с помощью переменных окружения ===&lt;br /&gt;
&lt;br /&gt;
Значения атрибутов конфигурации могут быть изменены с помощью переменных окружения &amp;lt;code&amp;gt;XSVACER_WEBIDE_THEIA_{id конфигурации ide}[_параметр]={значение параметра}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например, для активации rootless-хоста &amp;lt;code&amp;gt;xsvacer/hosts/local&amp;lt;/code&amp;gt; и переключения запуска IDE с идентификатором &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; на этот хост, можно указать такие значения переменных окружения при запуске svacer'а:&lt;br /&gt;
 XSVACER_DOCKER_HOSTS_LOCAL_DISABLED=false&lt;br /&gt;
 XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_HOSTID=local&lt;br /&gt;
&lt;br /&gt;
== Рекомендации ==&lt;br /&gt;
&lt;br /&gt;
=== Предварительная загрузка docker-образа с IDE ===&lt;br /&gt;
&lt;br /&gt;
По умолчанию параметр &amp;lt;code&amp;gt;xsvacer/webide/theia/1-46-0/docker/image/sourcefileurl&amp;lt;/code&amp;gt; содержит значение &amp;lt;code&amp;gt;https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar&amp;lt;/code&amp;gt;. По этому адресу находится архив с docker-образом для Theia IDE.&lt;br /&gt;
&lt;br /&gt;
Если docker-образ ещё не был загружен, то загрузка начнётся при первой попытке запуска IDE. Т.к. этот процесс занимает длительное время, то запрос запуска IDE тоже будет выполняться долго.&lt;br /&gt;
&lt;br /&gt;
Для ускорения первого запуска IDE, докер образ можно загрузить в хост docker'а вручную. Для этого необходимо:&lt;br /&gt;
# Скачать файл архива;&lt;br /&gt;
# Выполнить команду &amp;lt;code&amp;gt;docker image load -i /path/to/tar/theia-blueprint.1.46.0.sarif.clang.tag&amp;lt;/code&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
== docker-образ Theia IDE ==&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Docker&amp;diff=1953</id>
		<title>Help:XSvacer:Docker</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Docker&amp;diff=1953"/>
		<updated>2024-06-05T07:06:44Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Управление docker-контейнерами =&lt;br /&gt;
 '''Примечание:''' данная функциональность входит в набор расширений XSvacer.&lt;br /&gt;
&lt;br /&gt;
Данная функциональность предназначена для управления docker-контейнерами содержащими компоненты XSvacer.&lt;br /&gt;
&lt;br /&gt;
Управление docker-контейнерами осуществляется с помощью взаимодействия с docker-хостом с использованием [https://docs.docker.com/engine/api/latest/ REST API].&lt;br /&gt;
&lt;br /&gt;
Возможны два сценария использования docker'а:&lt;br /&gt;
# Подключение к существующему (&amp;quot;внешнему&amp;quot;) docker-хосту;&lt;br /&gt;
# Запуск управляемого svacer'ом [https://docs.docker.com/go/rootless/ rootless-хоста].&lt;br /&gt;
&lt;br /&gt;
== Активация функциональности ==&lt;br /&gt;
Для активации функциональности необходимо указать флаг &amp;lt;code&amp;gt;--xsvacer.features docker&amp;lt;/code&amp;gt; при запуске svacer'а.&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' на базе данной функциональности осуществляется запуск компонентов других расширений XSvacer. В таком случае её не обязательно запускать явно: она будет запущена, если будет запущена зависимая функциональность.&lt;br /&gt;
&lt;br /&gt;
== Конфигурация ==&lt;br /&gt;
&lt;br /&gt;
Управление настройками функциональности осуществляется с помощью конфигурационного yaml-файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Раздел конфигурации для управления функциональностью - &amp;lt;code&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Раздел содержит перечисление настроек подключаемых хостов docker'а &amp;lt;code&amp;gt;xsvacer/docker/hosts&amp;lt;/code&amp;gt;, на которые в дальнейшем будут ссылаться зависимые функциональности. Каждое поле/свойство в &amp;lt;code&amp;gt;xsvacer/docker/hosts/...&amp;lt;/code&amp;gt; является идентификатором подключения и содержит его конфигурацию.&lt;br /&gt;
&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   docker:&lt;br /&gt;
     hosts:&lt;br /&gt;
       dockerhost1:&lt;br /&gt;
         type: ...&lt;br /&gt;
         host: ...&lt;br /&gt;
         disabled: false&lt;br /&gt;
         ...&lt;br /&gt;
       dockerhost2:&lt;br /&gt;
         ...&lt;br /&gt;
   &lt;br /&gt;
   dependentFeature1:&lt;br /&gt;
     ...&lt;br /&gt;
     docker:&lt;br /&gt;
       hostid: dockerhost1&lt;br /&gt;
     ...&lt;br /&gt;
   dependentFeature2:&lt;br /&gt;
     ...&lt;br /&gt;
     docker:&lt;br /&gt;
       hostid: dockerhost2&lt;br /&gt;
     ...&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' в случае отсутствия файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; или отсутствии раздела &amp;lt;code&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt;, будет использоваться конфигурация по умолчанию (см. ниже)&lt;br /&gt;
&lt;br /&gt;
=== Общие параметры docker-хостов ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название &lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;&lt;br /&gt;
|enum: &amp;lt;code&amp;gt;external&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;managed&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;remote&amp;lt;/code&amp;gt;&lt;br /&gt;
|Тип подключаемого docker-хоста:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;external&amp;lt;/code&amp;gt; - &amp;quot;внешний&amp;quot; docker-хост&lt;br /&gt;
* &amp;lt;code&amp;gt;managed&amp;lt;/code&amp;gt; - &amp;quot;управляемый&amp;quot; rootless-хост&lt;br /&gt;
* &amp;lt;code&amp;gt;remote&amp;lt;/code&amp;gt; - аналогичен &amp;lt;code&amp;gt;external&amp;lt;/code&amp;gt;, но &amp;lt;code&amp;gt;host&amp;lt;/code&amp;gt; должен быть задан&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;hostd&amp;lt;/code&amp;gt;&lt;br /&gt;
|url&lt;br /&gt;
|Строка содержащая url docker-хоста&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;disabled&amp;lt;/code&amp;gt;&lt;br /&gt;
|bool&lt;br /&gt;
|Конфигурация хоста неактивна&lt;br /&gt;
Неактивная конфигурация не может использоваться в других функциональностях&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Использование существующего (&amp;quot;внешнего&amp;quot;) docker-хоста ===&lt;br /&gt;
Данный способ взаимодействия предполагает подключение к существующему хосту docker'а.&lt;br /&gt;
&lt;br /&gt;
Доступные варианты подключения:&lt;br /&gt;
&lt;br /&gt;
# К локальному хосту через unix-сокет;&lt;br /&gt;
# К удалённому хосту по ssh;&lt;br /&gt;
# К удалённому хосту по http;&lt;br /&gt;
# К к удалённому хосту по https.&lt;br /&gt;
&lt;br /&gt;
Для использования &amp;quot;внешнего&amp;quot; хоста docker'а в конфигурационном файле нужно указать &amp;lt;code&amp;gt;type: external&amp;lt;/code&amp;gt;, а также задать адрес хоста, соответствующий типу подключения:&lt;br /&gt;
 docker:&lt;br /&gt;
   hosts:&lt;br /&gt;
     default:&lt;br /&gt;
       type: external&lt;br /&gt;
       host: &amp;quot;unix:///path/to/docker.sock&amp;quot;&lt;br /&gt;
     remote1:&lt;br /&gt;
       type: external&lt;br /&gt;
       host: &amp;quot;&amp;lt;nowiki&amp;gt;ssh://docker-user@docker-host&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
     remote2:&lt;br /&gt;
       type: external&lt;br /&gt;
       host: &amp;quot;&amp;lt;nowiki&amp;gt;http://docker-host-ip-address:2375&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
     remote3:&lt;br /&gt;
       type: external&lt;br /&gt;
       host: &amp;quot;&amp;lt;nowiki&amp;gt;https://docker-host-ip-address:2376&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
       clienttls: ...&lt;br /&gt;
Если параметр &amp;lt;code&amp;gt;host&amp;lt;/code&amp;gt; не задан, то по умолчанию будет использоваться unix-сокет.&lt;br /&gt;
&lt;br /&gt;
==== Подключение к локальному хосту через unix-сокет ====&lt;br /&gt;
При обычном запуске демона &amp;lt;code&amp;gt;dockerd&amp;lt;/code&amp;gt;, взаимодействие с хостом осуществляется с помощью unix-сокета &amp;lt;code&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Доступ к сокету может получить либо пользователь с правами &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt;, либо обычный пользователь, входящий в группу &amp;lt;code&amp;gt;docker&amp;lt;/code&amp;gt; (https://docs.docker.com/reference/cli/dockerd/#daemon-socket-option).&lt;br /&gt;
&lt;br /&gt;
Пользователь, под которым запускается svacer, должен иметь права доступа к указанному unix-сокету docker'а (https://docs.docker.com/engine/install/linux-postinstall/).&lt;br /&gt;
 '''Внимание!''' При отсутствии прав доступа к unix-сокету у пользователя, под которым запускается svacer, использование данной функциональности зависимыми функциональностями будет приводить к ошибке.&lt;br /&gt;
 В таком случае можно воспользоваться rootless-хостом (см. ниже).&lt;br /&gt;
&lt;br /&gt;
Если для взаимодействия с хостом docker'а используется дефолтный unix-сокет &amp;lt;code&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt;, то в конфигурации поле &amp;lt;code&amp;gt;host&amp;lt;/code&amp;gt; можно не указывать:&lt;br /&gt;
 docker:&lt;br /&gt;
   hosts:&lt;br /&gt;
     default:&lt;br /&gt;
       type: external&lt;br /&gt;
&lt;br /&gt;
==== Подключение к удалённому хосту по ssh ====&lt;br /&gt;
&lt;br /&gt;
Чтобы подключиться к удалённому хосту docker'а по ssh, необходимо в поле &amp;lt;code&amp;gt;host&amp;lt;/code&amp;gt; указать схему &amp;lt;code&amp;gt;ssh://&amp;lt;/code&amp;gt;, реквизиты пользователя и название/адрес docker-хоста:&lt;br /&gt;
&lt;br /&gt;
 docker:&lt;br /&gt;
   hosts:&lt;br /&gt;
     default:&lt;br /&gt;
       type: external&lt;br /&gt;
       host: &amp;quot;&amp;lt;nowiki&amp;gt;ssh://docker-user@docker-host&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Указанный пользователь должен иметь возможность подключения по ssh к указанному хосту, а также иметь права доступа к unix-сокету docker'а на удалённом хосте (https://docs.docker.com/engine/security/protect-access/#use-ssh-to-protect-the-docker-daemon-socket)&lt;br /&gt;
&lt;br /&gt;
==== Подключение к удалённому хосту по http ====&lt;br /&gt;
&lt;br /&gt;
Чтобы подключиться к удалённому хосту docker'а по http, необходимо в поле &amp;lt;code&amp;gt;host&amp;lt;/code&amp;gt; указать схему &amp;lt;code&amp;gt;http://&amp;lt;/code&amp;gt; и адрес docker-хоста:&lt;br /&gt;
 docker:&lt;br /&gt;
   hosts:&lt;br /&gt;
     default:&lt;br /&gt;
       type: external&lt;br /&gt;
       host: &amp;quot;&amp;lt;nowiki&amp;gt;http://docker-host-ip-address:port&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' Данный тип подключения является *небезопасным*, т.к. при использовании API docker'а не производится шифрование сетевого трафика и аутентификация клиента при доступе к docker'у. Чтобы создать безопасное сетевое соединение необходимо использовать подключение по https (tls) (см. ниже)&lt;br /&gt;
&lt;br /&gt;
==== Подключение к удалённому хосту по https (tls) ====&lt;br /&gt;
&lt;br /&gt;
Docker-хост может предоставлять доступ по https (https://docs.docker.com/engine/security/protect-access/#use-tls-https-to-protect-the-docker-daemon-socket).&lt;br /&gt;
&lt;br /&gt;
В таком случае для доступа к API необходимо иметь сертификат удостоверяющего центра, клиентский ключ и сертификат.&lt;br /&gt;
&lt;br /&gt;
В конфигурационном файле пути к ключам указываются в поле &amp;lt;code&amp;gt;xsvacer/docker/{docker-host-id}/clienttls&amp;lt;/code&amp;gt;:&lt;br /&gt;
 docker:&lt;br /&gt;
   hosts:&lt;br /&gt;
     default:&lt;br /&gt;
       type: external&lt;br /&gt;
       host: &amp;quot;&amp;lt;nowiki&amp;gt;https://docker-host-ip-address:2376&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
       clienttls:&lt;br /&gt;
         ca: &amp;quot;/path/to/ca.pem&amp;quot;&lt;br /&gt;
         cert: &amp;quot;/path/to/cert.pem&amp;quot;&lt;br /&gt;
         key: &amp;quot;/path/to/key.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===== Специфичные настройки для подключения к https хосту =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|clienttls/&lt;br /&gt;
|map&lt;br /&gt;
|Настройки TLS                                   &lt;br /&gt;
|-&lt;br /&gt;
|clienttls/ca&lt;br /&gt;
|url&lt;br /&gt;
|Путь к файлу сертификата удостоверяющего центра &lt;br /&gt;
|-&lt;br /&gt;
|clienttls/cert&lt;br /&gt;
|url&lt;br /&gt;
|Путь к клиентскому сертификату                  &lt;br /&gt;
|-&lt;br /&gt;
|clienttls/key&lt;br /&gt;
|url&lt;br /&gt;
|Путь к клиентскому ключу                         &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Памятка при использовании подключения к удалённым хостам ====&lt;br /&gt;
&lt;br /&gt;
NOTE: при использовании подключения к удалённому хосту docker'а, при настройке биндингов создаваемых контейнеров необходимо указывать ip-адрес сетевого интерфейса хоста, т.к. при привязке контейнера к 0.0.0.0 на машине хоста, контейнеры будут недоступны снаружи.&lt;br /&gt;
&lt;br /&gt;
=== Запуск &amp;quot;управляемого&amp;quot; rootless-хоста ===&lt;br /&gt;
&lt;br /&gt;
При отсутствии доступного docker-хоста, либо если не хочется его загромождать контейнерами svacer'а, предусмотрена возможность запуска &amp;quot;управляемого&amp;quot; rootless-хоста, не требующего настройки дополнительных прав для пользователя, под которым запускается svacer (https://docs.docker.com/engine/security/rootless/).&lt;br /&gt;
&lt;br /&gt;
Управление (запуск и остановка) rootless-хостом будет осуществлять svacer.&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' Доступно только для linux'а.&lt;br /&gt;
&lt;br /&gt;
Для использования данного rootless-хоста в конфигурационном файле для хоста нужно указать &amp;lt;code&amp;gt;type: managed&amp;lt;/code&amp;gt;.&lt;br /&gt;
 docker:&lt;br /&gt;
   hosts:&lt;br /&gt;
     local:&lt;br /&gt;
       type: managed&lt;br /&gt;
       ...&lt;br /&gt;
&lt;br /&gt;
==== Специфичные настройки для rootless-хоста ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|managed/&lt;br /&gt;
|map&lt;br /&gt;
|параметры запуска rootless-хоста                                             &lt;br /&gt;
|-&lt;br /&gt;
|managed/executable&lt;br /&gt;
|string&lt;br /&gt;
|исполняемый файл. Должен быть доступен в $PATH или содержать абсолютный путь &lt;br /&gt;
''формат'': имя исполняемого фала, доступного через переменную &amp;lt;code&amp;gt;$PATH&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
''или'': абсолютный путь до исполняемого файла&lt;br /&gt;
|-&lt;br /&gt;
|managed/env&lt;br /&gt;
|[]string&lt;br /&gt;
|список переменных окружения для процесса rootless-хоста                      &lt;br /&gt;
формат: &amp;lt;code&amp;gt;&amp;quot;НАЗВАНИЕ_ПЕРЕМЕННОЙ=значение переменной&amp;quot;&amp;lt;/code&amp;gt;                          &lt;br /&gt;
|-&lt;br /&gt;
|managed/args&lt;br /&gt;
|[]string&lt;br /&gt;
|список аргументов запуска rootless-хоста                                     &lt;br /&gt;
''формат'': &amp;lt;code&amp;gt;&amp;quot;--название-аргумента=значение-аргумента&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''или'': &amp;lt;code&amp;gt;&amp;quot;--название-аргумента&amp;quot;, &amp;quot;значение-аргумента&amp;quot;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
''или'': &amp;lt;code&amp;gt;&amp;quot;--название-флага&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|managed/loglevel&lt;br /&gt;
|string&lt;br /&gt;
|уровень логирования, на котором будут записываться stdout и stderr процесса rootless-хоста                                      &lt;br /&gt;
|-&lt;br /&gt;
|managed/logprefix&lt;br /&gt;
|string&lt;br /&gt;
|префикс в логе, которым будут помечаться записи из stdout и stderr процесса rootless-хоста                                      &lt;br /&gt;
|-&lt;br /&gt;
|managed/healthcheck&lt;br /&gt;
|map&lt;br /&gt;
|параметры проверки доступности rootless-хоста                                &lt;br /&gt;
|-&lt;br /&gt;
|managed/healthcheck/interval&lt;br /&gt;
|golang duration string&lt;br /&gt;
|интервал проверки                                                            &lt;br /&gt;
|-&lt;br /&gt;
|managed/healthcheck/retries&lt;br /&gt;
|int&lt;br /&gt;
|количество попыток проверки до ошибки доступности                            &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
В значениях &amp;lt;code&amp;gt;managed/env&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;managed/args&amp;lt;/code&amp;gt; можно использовать имена переменных окружения в формате &amp;lt;code&amp;gt;${НАЗВАНИЕ_ПЕРЕМЕННОЙ}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Рекомендуемая конфигурация rootless-хоста ====&lt;br /&gt;
&lt;br /&gt;
При запуске &amp;lt;code&amp;gt;dockerd-rootless.sh&amp;lt;/code&amp;gt; без параметров папки с артефактами docker'а создаются во вложенных папках внутри &amp;lt;code&amp;gt;/run/user/$UID/&amp;lt;/code&amp;gt;.&lt;br /&gt;
Для лучшей локализации артефактов svacer'а рекомендуется использовать следующие настройки для rootless-хоста:&lt;br /&gt;
 docker:&lt;br /&gt;
   hosts:&lt;br /&gt;
     local:&lt;br /&gt;
       type: managed&lt;br /&gt;
       host: &amp;quot;unix://${USER_CACHE_DIR}/svacer-docker-host/svacer-docker.sock&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
       managed:&lt;br /&gt;
         executable: &amp;quot;dockerd-rootless.sh&amp;quot;&lt;br /&gt;
         env:&lt;br /&gt;
           - &amp;quot;DOCKERD_ROOTLESS_ROOTLESSKIT_STATE_DIR=${USER_CACHE_DIR}/svacer-docker-host/state-dir/&amp;quot;&lt;br /&gt;
         args:&lt;br /&gt;
           - &amp;quot;--data-root=${USER_CACHE_DIR}/svacer-docker-host/data-root/&amp;quot;&lt;br /&gt;
           - &amp;quot;--exec-root=${USER_CACHE_DIR}/svacer-docker-host/exec-root/&amp;quot;&lt;br /&gt;
           - &amp;quot;--pidfile=${USER_CACHE_DIR}/svacer-docker-host/svacer-docker.pid&amp;quot;&lt;br /&gt;
         logLevel: info&lt;br /&gt;
         logPrefix: &amp;quot;DOCKER HOST: &amp;quot;&lt;br /&gt;
         healthCheck:&lt;br /&gt;
           interval: 1s&lt;br /&gt;
           retries: 10&lt;br /&gt;
&lt;br /&gt;
Здесь вместо &amp;lt;code&amp;gt;${USER_CACHE_DIR}&amp;lt;/code&amp;gt; будет подставлен путь &amp;lt;code&amp;gt;$HOME/.cache&amp;lt;/code&amp;gt; на unix-подобных системах или &amp;lt;code&amp;gt;%LocalAppData%&amp;lt;/code&amp;gt; на windows.&lt;br /&gt;
&lt;br /&gt;
При таких настройках все артефакты хоста docker'а будут храниться внутри папки &amp;lt;code&amp;gt;${USER_CACHE_DIR}/svacer-docker-host&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Использование &amp;quot;неуправляемого&amp;quot; rootless-хоста ===&lt;br /&gt;
&lt;br /&gt;
В случае необходимости иметь возможность управления временем жизни rootless-хоста без участия svacer'а, его можно запустить отдельно от svacer'а. Например командой:&lt;br /&gt;
 DOCKERD_ROOTLESS_ROOTLESSKIT_STATE_DIR=/home/$USER/.cache/svacer-docker-host/state-dir/ dockerd-rootless.sh --host unix:///home/$USER/.cache/svacer-docker-host/svacer-docker.sock --data-root=/home/$USER/.cache/svacer-docker-host/data-root/ --exec-root=/home/$USER/.cache/svacer-docker-host/exec-root/ --pidfile=/home/$USER/.cache/svacer-docker-host/svacer-docker.pid&lt;br /&gt;
&lt;br /&gt;
В таком случае подключиться к данному хосту можно как к &amp;quot;внешнему&amp;quot; (&amp;lt;code&amp;gt;type: external&amp;lt;/code&amp;gt;) с указанием адреса unix-сокета. Например:&lt;br /&gt;
 docker:&lt;br /&gt;
   hosts:&lt;br /&gt;
     unmanaged:&lt;br /&gt;
       type: external&lt;br /&gt;
       host: &amp;quot;unix:///home/${USER}/.cache/svacer-docker-host/svacer-docker.sock&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация по умолчанию ===&lt;br /&gt;
&lt;br /&gt;
Данная конфигурация применяется по умолчанию, если в конфигурационном файле svacer.cfg отсутствует раздел &amp;lt;code&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt;:&lt;br /&gt;
 docker:&lt;br /&gt;
   hosts:&lt;br /&gt;
     default:&lt;br /&gt;
       type: external&lt;br /&gt;
     local:&lt;br /&gt;
       type: managed&lt;br /&gt;
       host: &amp;quot;unix://${USER_CACHE_DIR}/svacer-docker-host/svacer-docker.sock&amp;quot;&lt;br /&gt;
       disabled: true&lt;br /&gt;
 &lt;br /&gt;
       managed:&lt;br /&gt;
         executable: &amp;quot;dockerd-rootless.sh&amp;quot;&lt;br /&gt;
         env:&lt;br /&gt;
           - &amp;quot;DOCKERD_ROOTLESS_ROOTLESSKIT_STATE_DIR=${USER_CACHE_DIR}/svacer-docker-host/state-dir/&amp;quot;&lt;br /&gt;
         args:&lt;br /&gt;
           - &amp;quot;--data-root=${USER_CACHE_DIR}/svacer-docker-host/data-root/&amp;quot;&lt;br /&gt;
           - &amp;quot;--exec-root=${USER_CACHE_DIR}/svacer-docker-host/exec-root/&amp;quot;&lt;br /&gt;
           - &amp;quot;--pidfile=${USER_CACHE_DIR}/svacer-docker-host/svacer-docker.pid&amp;quot;&lt;br /&gt;
         logLevel: info&lt;br /&gt;
         logPrefix: &amp;quot;DOCKER HOST: &amp;quot;&lt;br /&gt;
         healthCheck:&lt;br /&gt;
           interval: 1s&lt;br /&gt;
           retries: 10&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' При наличии раздела &amp;lt;code&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt; в конфигурационном файле &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;, будут применены только настройки из этого раздела. Настройки по умолчанию будут полностью проигнорированы.&lt;br /&gt;
&lt;br /&gt;
=== Изменение конфигурационных параметров с помощью переменных окружения ===&lt;br /&gt;
&lt;br /&gt;
Значения атрибутов конфигурации могут быть изменены с помощью переменных окружения &amp;lt;code&amp;gt;XSVACER_DOCKER_HOSTS_{id хоста}[_параметр]={значение параметра}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например, для активации rootless-хоста &amp;lt;code&amp;gt;xsvacer/hosts/local&amp;lt;/code&amp;gt; можно указать такие значения переменных окружения при запуске svacer'а:&lt;br /&gt;
 XSVACER_DOCKER_HOSTS_LOCAL_DISABLED=false&lt;br /&gt;
&lt;br /&gt;
== Известные проблемы ==&lt;br /&gt;
&lt;br /&gt;
Список известных проблем и их решение&lt;br /&gt;
&lt;br /&gt;
=== rootless-хост продолжает работать при некорректной остановке svacer'а ===&lt;br /&gt;
&lt;br /&gt;
При некорректном завершении работы svacer'а (например, при получении сигнала &amp;lt;code&amp;gt;SIGKILL&amp;lt;/code&amp;gt;), процесс rootless-хоста останется в запущенным в системе.&lt;br /&gt;
&lt;br /&gt;
При этом svacer потеряет возможность управления (запуска/остановки) этого процесса.&lt;br /&gt;
&lt;br /&gt;
При последующем запуске svacer попробует повторно запустить rootless-хост и получит сообщение типа &amp;lt;code&amp;gt;[rootlesskit:parent] error: failed to lock /path/to/svacer-docker-host/state-dir/lock, another RootlessKit is running with the same state directory?&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом, если настройки не менялись, зависимые функциональности смогут получить доступ к &amp;quot;неконтролируемому&amp;quot; rootless-хосту, т.к. адрес unix-сокета хоста известен.&lt;br /&gt;
&lt;br /&gt;
При остановке svacer не будет останавливать &amp;quot;неконтролируемый&amp;quot; rootless-хост. &lt;br /&gt;
&lt;br /&gt;
Процесс rootless-хоста при необходимости может быть остановлен, например, отправкой ему сигнала &amp;lt;code&amp;gt;SIGTERM&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=1952</id>
		<title>Help:XSvacer:Webide</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:Webide&amp;diff=1952"/>
		<updated>2024-06-05T07:04:13Z</updated>

		<summary type="html">&lt;p&gt;M.vinogradov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Поддержка среды разработки Theia IDE =&lt;br /&gt;
 '''Примечание:''' данная функциональность входит в набор расширений XSvacer.&lt;br /&gt;
&lt;br /&gt;
При активации данной функциональности появляется возможность просматривать исходный код снимка с предупреждениями анализатора во внешней IDE.&lt;br /&gt;
&lt;br /&gt;
По умолчанию запускается IDE собранная на основе Theia IDE (https://theia-ide.org/).&lt;br /&gt;
&lt;br /&gt;
== Активация функциональности ==&lt;br /&gt;
Для активации функциональности необходимо указать флаг &amp;lt;code&amp;gt;--xsvacer.features webide&amp;lt;/code&amp;gt; при запуске svacer'а.&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' при запуске функциональности &amp;lt;code&amp;gt;webide&amp;lt;/code&amp;gt; также будет запущена функциональность &amp;lt;code&amp;gt;docker&amp;lt;/code&amp;gt;, с использованием которой осуществляется доступ к хосту docker'а, на котором будут запускаться контейнеры с IDE.&lt;br /&gt;
&lt;br /&gt;
== Конфигурация ==&lt;br /&gt;
&lt;br /&gt;
Управление настройками функциональности осуществляется с помощью конфигурационного yaml-файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Раздел конфигурации для управления функциональностью - &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Раздел содержит перечисление настроек доступных конфигураций для запуска экземпляров Theia IDE &amp;lt;code&amp;gt;xsvacer/webide/theia&amp;lt;/code&amp;gt;. При наличии нескольких активных конфигураций запуска Theia IDE пользователь сможет выбрать какую из них использовать при запуске IDE с исходными файлами снимка.&lt;br /&gt;
&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       config1:&lt;br /&gt;
         ...&lt;br /&gt;
       config2:&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' Запуск IDE основывается на запуске docker-контейнеров, содержащих соответствующие сборки IDE. Поэтому помимо настройки функциональности в разделе &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; необходимо также настроить доступ к docker-хосту в разделе &amp;lt;code&amp;gt;xsvacer/docker&amp;lt;/code&amp;gt; ([[Help:XSvacer:Docker]]). В противном случае функциональность webide не сможет работать корректно.&lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' в случае отсутствия файла &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt; или отсутствии раздела &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;, будет использоваться конфигурация по умолчанию (см. ниже)&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация запуска Theia IDE ===&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' На этапе внедрения расширений XSvacer конфигурация функциональностей может меняться. Следите за анонсами!&lt;br /&gt;
&lt;br /&gt;
Конфигурации запуска Theia IDE добавляются в виде полей в разделе &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;. Название поля является идентификатором конфигурации запуска. Например идентификатор по номеру используемой версии IDE:&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       1-46-0:&lt;br /&gt;
         name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
==== Базовые параметры конфигурации запуска ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию                     &lt;br /&gt;
|-&lt;br /&gt;
|disabled&lt;br /&gt;
|bool&lt;br /&gt;
|Конфигурация запуска неактивна. Неактивная конфигурация не доступна для запуска экземпляра IDE&lt;br /&gt;
|true (переопределяется в конфигурации &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;)         &lt;br /&gt;
|-&lt;br /&gt;
|order&lt;br /&gt;
|int&lt;br /&gt;
|Порядковый номер в списке выбора конфигурации запуска&lt;br /&gt;
|0                                                        &lt;br /&gt;
|-&lt;br /&gt;
|name&lt;br /&gt;
|string&lt;br /&gt;
|Название конфигурации&lt;br /&gt;
|Theia blueprint web IDE (v1.46.0)                        &lt;br /&gt;
|-&lt;br /&gt;
|sourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке содержащей исходные коды снимков на машине со svacer'ом&lt;br /&gt;
|${USER_CACHE_DIR}/svacer-snapshot-sources                &lt;br /&gt;
|-&lt;br /&gt;
|dockerhostsourcesroot&lt;br /&gt;
|string&lt;br /&gt;
|Путь к папке содержащей исходные коды снимков на хосте docker'а. Нужен при использовании удалённого docker-хоста, т.к. в таком случае папка с исходными кодами скорее всего будет доступна по адресу, отличающемуся от &amp;lt;code&amp;gt;sourcesroot&amp;lt;/code&amp;gt;&lt;br /&gt;
|                                                         &lt;br /&gt;
|-&lt;br /&gt;
|dockerhostpathseparator&lt;br /&gt;
|string&lt;br /&gt;
|Разделитель пути на хосте docker'а. По умолчанию &amp;lt;code&amp;gt;&amp;quot;/&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
|                                                         &lt;br /&gt;
|-&lt;br /&gt;
|sariffiletemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон названия sarif-файла с предупреждениями анализатора. В шаблон передаётся структура &amp;lt;code&amp;gt;sarifFileContext&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;quot;&amp;lt;nowiki&amp;gt;{{.Context.ProjectName}}.{{.Context.BranchName}}&amp;lt;/nowiki&amp;gt;.sarif&amp;quot; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры менеджера запуска IDE ====&lt;br /&gt;
&lt;br /&gt;
Конфигурация менеджера запуска IDE. На данный момент доступен только &amp;quot;стандартный&amp;quot; менеджер (&amp;lt;code&amp;gt;type: default&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию &lt;br /&gt;
|-&lt;br /&gt;
|manager&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация менеджера запуска IDE&lt;br /&gt;
|                                     &lt;br /&gt;
|-&lt;br /&gt;
|manager/type&lt;br /&gt;
|enum: default&lt;br /&gt;
|Тип менеджера запуска IDE&lt;br /&gt;
|default                              &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры запуска docker-контейнеров с IDE ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для настройки запуска docker-контейнеров с IDE&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию               &lt;br /&gt;
|-&lt;br /&gt;
|docker/&lt;br /&gt;
|map&lt;br /&gt;
|Настройки создания docker-контейнера с IDE&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/hostid&lt;br /&gt;
|string&lt;br /&gt;
|Идентификатор хоста docker'а, описанного в &amp;lt;code&amp;gt;xsvacer/docker/hosts&amp;lt;/code&amp;gt;. Запуск docker-контейнера с IDE будет выполнен на этом хосте&lt;br /&gt;
|default                                            &lt;br /&gt;
|-&lt;br /&gt;
|docker/containernametemplate&lt;br /&gt;
|golang template string&lt;br /&gt;
|Шаблон для формирования названия контейнера IDE для выбранного снимка. В шаблон передаётся структура &amp;lt;code&amp;gt;TheiaDockerContainerStartContext&amp;lt;/code&amp;gt; (см. ниже)&lt;br /&gt;
|&amp;quot;theia-1-46-&amp;lt;nowiki&amp;gt;{{.StartArgs.SnapshotID}}&amp;lt;/nowiki&amp;gt;&amp;quot;             &lt;br /&gt;
|-&lt;br /&gt;
|docker/containerconfiglabels&lt;br /&gt;
|[]map&lt;br /&gt;
|Список &amp;quot;меток&amp;quot; docker-контейнера. Дополняет список меток в &amp;lt;code&amp;gt;docker/container/config/labels&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
 - &amp;quot;com.docker.compose.project&amp;quot;: svacer             &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры docker-образа из которого будет запущен контейнер&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/name&lt;br /&gt;
|string&lt;br /&gt;
|Название образа&lt;br /&gt;
|theia-blueprint                                    &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/tag&lt;br /&gt;
|string&lt;br /&gt;
|Тег образа&lt;br /&gt;
|1.46.0.sarif.clang                                 &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcetype&lt;br /&gt;
|enum: repository/file&lt;br /&gt;
|Тип источника для загрузки образа в docker-хост.&lt;br /&gt;
* &amp;lt;code&amp;gt;repository&amp;lt;/code&amp;gt; - будет вызван &amp;lt;code&amp;gt;docker pull&amp;lt;/code&amp;gt; образа &amp;lt;code&amp;gt;{image/name}:{image/tag}&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt; - будет вызван &amp;lt;code&amp;gt;docker load&amp;lt;/code&amp;gt; с url'ом &amp;lt;code&amp;gt;image/sourcefileurl&amp;lt;/code&amp;gt;&lt;br /&gt;
|file                                               &lt;br /&gt;
|-&lt;br /&gt;
|docker/image/sourcefileurl&lt;br /&gt;
|url&lt;br /&gt;
|Url откуда будет загружен docker-образ если &amp;lt;code&amp;gt;image/sourcetype == &amp;quot;file&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
Url может содержать:&lt;br /&gt;
- путь к локальному файлу: схема &amp;lt;code&amp;gt;file://&amp;lt;/code&amp;gt;&lt;br /&gt;
- http/https-адрес: схема &amp;lt;code&amp;gt;http://&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;https://&amp;lt;/code&amp;gt;&lt;br /&gt;
|https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/&lt;br /&gt;
|map&lt;br /&gt;
|Свойства docker-контейнера&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config&lt;br /&gt;
|map&lt;br /&gt;
|Конфигурация контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/config.go#L70&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/config/env&lt;br /&gt;
|[]string&lt;br /&gt;
|Список переменных среды, которые будут установлены в контейнере&lt;br /&gt;
|&lt;br /&gt;
 - THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;     &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Параметры хостинга контейнера. Соответствует структуре https://github.com/moby/moby/blob/v24.0.7/api/types/container/hostconfig.go#L379&lt;br /&gt;
|                                                   &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/autoremove&lt;br /&gt;
|bool&lt;br /&gt;
|&lt;br /&gt;
|true                                               &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/hostconfig/portbindings&lt;br /&gt;
|map&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
 &amp;quot;3000/tcp&amp;quot;:                                        &lt;br /&gt;
   - hostport: 0                                    &lt;br /&gt;
|-&lt;br /&gt;
|docker/container/networkconfig/&lt;br /&gt;
|map&lt;br /&gt;
|Сетевые настройки контейнера. Соответствуют структуре https://github.com/moby/moby/blob/v24.0.7/api/types/network/network.go#L104&lt;br /&gt;
|                                                   &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Параметры проверки доступности healthcheck ====&lt;br /&gt;
&lt;br /&gt;
Данные параметры используются для проверки доступности IDE после запуска docker-контейнера&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Название&lt;br /&gt;
!Тип данных&lt;br /&gt;
!Описание&lt;br /&gt;
!Значение в конфигурации по умолчанию &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck&lt;br /&gt;
|map&lt;br /&gt;
|Параметры проверки доступности IDE&lt;br /&gt;
|                                     &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyretries&lt;br /&gt;
|int&lt;br /&gt;
|Количества попыток проверки до ошибки доступности&lt;br /&gt;
|10                                   &lt;br /&gt;
|-&lt;br /&gt;
|healthcheck/starttoreadyperiod&lt;br /&gt;
|golang duration string&lt;br /&gt;
|Интервал проверки&lt;br /&gt;
|200ms                                &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Структуры передаваемые в поля с golang-шаблонами строк ====&lt;br /&gt;
&lt;br /&gt;
 sarifFileContext {&lt;br /&gt;
     Time    time.Time&lt;br /&gt;
 	Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
 &lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 TheiaDockerContainerStartContext {&lt;br /&gt;
 	IdeID: {&lt;br /&gt;
         IdeType  string&lt;br /&gt;
         ConfigID string&lt;br /&gt;
     },&lt;br /&gt;
 	StartArgs: {&lt;br /&gt;
         SnapshotID string&lt;br /&gt;
         UserID     string&lt;br /&gt;
         User       string&lt;br /&gt;
     },&lt;br /&gt;
 	Context: {&lt;br /&gt;
         ProjectID  *string&lt;br /&gt;
         BranchID   *string&lt;br /&gt;
         SnapshotID *string&lt;br /&gt;
         MarkerID   *string&lt;br /&gt;
 &lt;br /&gt;
         ProjectName  *string&lt;br /&gt;
         BranchName   *string&lt;br /&gt;
         SnapshotName *string&lt;br /&gt;
         MarkerName   *string&lt;br /&gt;
         CreatedBy    null.String&lt;br /&gt;
         CreatedByID  null.String&lt;br /&gt;
         CreateTs     null.Time&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация по умолчанию используемая в svacer ===&lt;br /&gt;
&lt;br /&gt;
Данная настройка применяется по умолчанию для запуска Theia IDE, если в конфигурационном файле svacer.cfg отсутствует раздел &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 xsvacer:&lt;br /&gt;
   docker:&lt;br /&gt;
     hosts:&lt;br /&gt;
       default: # конфигурация docker-хоста, действующая по умолчанию&lt;br /&gt;
         type: external&lt;br /&gt;
       ...&lt;br /&gt;
 &lt;br /&gt;
   webide:&lt;br /&gt;
     theia:&lt;br /&gt;
       1-46-0: &amp;amp;1-46-0&lt;br /&gt;
         disabled: true&lt;br /&gt;
         order: 0&lt;br /&gt;
         name: Theia blueprint web IDE (v1.46.0)&lt;br /&gt;
         sourcesroot: ${USER_CACHE_DIR}/svacer-snapshot-sources&lt;br /&gt;
         sariffiletemplate: &amp;quot;&amp;lt;nowiki&amp;gt;{{.Context.ProjectName}}.{{.Context.BranchName}}&amp;lt;/nowiki&amp;gt;.sarif&amp;quot;&lt;br /&gt;
         manager:&lt;br /&gt;
           type: default&lt;br /&gt;
         docker:&lt;br /&gt;
           hostid: default # идентификатор используемого docker-хоста&lt;br /&gt;
           containernametemplate: &amp;quot;theia-1-46-&amp;lt;nowiki&amp;gt;{{.StartArgs.SnapshotID}}&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
           image:&lt;br /&gt;
             name: theia-blueprint&lt;br /&gt;
             tag: 1.46.0.sarif.clang&lt;br /&gt;
             sourcetype: file&lt;br /&gt;
             sourcefileurl: https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar&lt;br /&gt;
           containerconfiglabels:&lt;br /&gt;
             - &amp;quot;com.docker.compose.project&amp;quot;: svacer&lt;br /&gt;
           container:&lt;br /&gt;
             config:&lt;br /&gt;
               env:&lt;br /&gt;
                 - THEIA_WEBVIEW_EXTERNAL_ENDPOINT=&amp;lt;nowiki&amp;gt;{{hostname}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
             hostconfig:&lt;br /&gt;
               autoremove: true&lt;br /&gt;
               portbindings:&lt;br /&gt;
                 &amp;quot;3000/tcp&amp;quot;:&lt;br /&gt;
                   - hostport: 0&lt;br /&gt;
             networkconfig:&lt;br /&gt;
         healthcheck:&lt;br /&gt;
           starttoreadyretries: 10&lt;br /&gt;
           starttoreadyperiod: 200ms&lt;br /&gt;
       default:&lt;br /&gt;
         &amp;lt;&amp;lt;: *1-46-0&lt;br /&gt;
         order: 0&lt;br /&gt;
         disabled: false&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' По умолчанию используется docker-хост с идентификатором &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;. Согласно настройке этого хоста, по умолчанию предполагается взаимодействие с докером через unix-сокет &amp;lt;code&amp;gt;unix:///var/run/docker.sock&amp;lt;/code&amp;gt;. Соответственно пользователь, под которым запускается svacer должен иметь доступ к этому сокету (https://docs.docker.com/engine/install/linux-postinstall/).&lt;br /&gt;
&lt;br /&gt;
 '''Внимание!''' При наличии раздела &amp;lt;code&amp;gt;xsvacer/webide&amp;lt;/code&amp;gt; в конфигурационном файле &amp;lt;code&amp;gt;svacer.cfg&amp;lt;/code&amp;gt;, будут применены только настройки из этого раздела. Настройки по умолчанию будут полностью проигнорированы.&lt;br /&gt;
&lt;br /&gt;
=== Изменение конфигурационных параметров с помощью переменных окружения ===&lt;br /&gt;
&lt;br /&gt;
Значения атрибутов конфигурации могут быть изменены с помощью переменных окружения &amp;lt;code&amp;gt;XSVACER_WEBIDE_THEIA_{id конфигурации ide}[_параметр]={значение параметра}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например, для активации rootless-хоста &amp;lt;code&amp;gt;xsvacer/hosts/local&amp;lt;/code&amp;gt; и переключения запуска IDE с идентификатором &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; на этот хост, можно указать такие значения переменных окружения при запуске svacer'а:&lt;br /&gt;
 XSVACER_DOCKER_HOSTS_LOCAL_DISABLED=false&lt;br /&gt;
 XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_HOSTID=local&lt;br /&gt;
&lt;br /&gt;
== Рекомендации ==&lt;br /&gt;
&lt;br /&gt;
=== Предварительная загрузка docker-образа с IDE ===&lt;br /&gt;
&lt;br /&gt;
По умолчанию параметр &amp;lt;code&amp;gt;xsvacer/webide/theia/1-46-0/docker/image/sourcefileurl&amp;lt;/code&amp;gt; содержит значение &amp;lt;code&amp;gt;https://nextcloud.ispras.ru/index.php/s/gr7pa4RDJBBqAPy/download/theia-blueprint.1.46.0.sarif.clang.tar&amp;lt;/code&amp;gt;. По этому адресу находится архив с docker-образом для Theia IDE.&lt;br /&gt;
&lt;br /&gt;
Если docker-образ ещё не был загружен, то загрузка начнётся при первой попытке запуска IDE. Т.к. этот процесс занимает длительное время, то запрос запуска IDE тоже будет выполняться долго.&lt;br /&gt;
&lt;br /&gt;
Для ускорения первого запуска IDE, докер образ можно загрузить в хост docker'а вручную. Для этого необходимо:&lt;br /&gt;
# Скачать файл архива;&lt;br /&gt;
# Выполнить команду &amp;lt;code&amp;gt;docker image load -i /path/to/tar/theia-blueprint.1.46.0.sarif.clang.tag&amp;lt;/code&amp;gt;;&lt;/div&gt;</summary>
		<author><name>M.vinogradov</name></author>
	</entry>
</feed>