<?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=Akuzmin</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=Akuzmin"/>
	<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Special:Contributions/Akuzmin"/>
	<updated>2026-04-14T21:42:51Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.40.1</generator>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:Import_from_Svace&amp;diff=3467</id>
		<title>Help:Import from Svace</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:Import_from_Svace&amp;diff=3467"/>
		<updated>2026-02-10T11:48:09Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: /* Флаг --baseline-check */ minor fixes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CLI команды ==&lt;br /&gt;
  svacer import --svace &amp;lt;path-to-svace&amp;gt;&lt;br /&gt;
  svacer upload&lt;br /&gt;
&lt;br /&gt;
Эти две команды импортируют результаты анализа из '''.svace-dir''' в текущей директории и загрузят их на сервер Svacer по адресу '''localhost:8080'''.&lt;br /&gt;
&lt;br /&gt;
== Процесс импорта ==&lt;br /&gt;
Процесс импорта результатов работы статического анализатора Svace состоит из двух шагов:&lt;br /&gt;
# Дедупликация данных, предобработка, конвертирование во внутренний формат и сохранение результатов в промежуточном хранилище (svacer import).&lt;br /&gt;
# Загрузка данных из промежуточного хранилища на сервер (svacer upload).&lt;br /&gt;
&lt;br /&gt;
Можно импортировать результаты и из других статических анализаторов, поддерживающих [[Help:Sarif#Загрузка на сервер из SARIF|формат SARIF]].&lt;br /&gt;
&lt;br /&gt;
=== Промежуточное хранилище ===&lt;br /&gt;
Промежуточное хранилище используется для хранения результатов, подготовленных для загрузки на сервер. При импорте данных в промежуточное хранилище снимкам назначается уникальный ID, задается имя проекта и ветки. &lt;br /&gt;
Промежуточное хранилище можно использовать для аккумулирования результатов нескольких запусков анализатора, в том числе для различных проектов. &lt;br /&gt;
По умолчанию, промежуточное хранилище создается в директории '''.svacer-dir''' рядом с директорией '''.svace-dir.'''&lt;br /&gt;
Параллельный доступ к хранилищу из разных экземпляров Svacer '''не допускается'''. Если необходимо использовать разделяемое хранилище и конкурентный доступ, Svacer следует запускать в режиме удаленного промежуточного хранилища.&lt;br /&gt;
Процедура импорта c промежуточным хранилищем по умолчанию (размещается в '''&amp;lt;path to project&amp;gt;/.svacer-dir'''):&lt;br /&gt;
&lt;br /&gt;
    svacer import --svace &amp;lt;path to svace&amp;gt; [path to project]&lt;br /&gt;
&lt;br /&gt;
где '''&amp;lt;path to svace&amp;gt;''' — путь к исполняемому файлу svace из дистрибутива svace, '''[path to project]''' — путь к проекту (директории, содержащей .svace-dir). Его можно не указывать, тогда в качестве пути к проекту будет использована текущая директория.&lt;br /&gt;
&lt;br /&gt;
Процедура импорта с явным указанием размещения промежуточного хранилища:&lt;br /&gt;
&lt;br /&gt;
    svacer import --store &amp;lt;path to store&amp;gt; --svace &amp;lt;path to svace&amp;gt; &amp;lt;path to project&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Пользовательские атрибуты ===&lt;br /&gt;
При импорте данных можно ассоциировать пользовательские строковые атрибуты со снимком. Значения атрибутов доступно посредством публичного REST API и интерфейса командной строки. Это позволяет связать дополнительные данные с результатами (например commit ID). Пользовательские атрибуты нельзя модифицировать после импорта данных на сервер.&lt;br /&gt;
Пользовательские атрибуты экспортируются и импортируются как часть информации при использовании функциональности по экспорту и импорту снимков.&lt;br /&gt;
&lt;br /&gt;
Пользовательский атрибут может быть передан при использовании команды import посредством опции '''--field &amp;lt;name&amp;gt;:&amp;lt;value&amp;gt;'''. Опция может быть указана несколько раз в командной строке.&lt;br /&gt;
&lt;br /&gt;
    svacer import ... --field f1:val1 --field f2:val2 ...&lt;br /&gt;
&lt;br /&gt;
Если одно и тоже поле указано несколько раз, то значения поля сохраняются как JSON массив строк. &lt;br /&gt;
'''Допустимое имя''' пользовательского атрибута состоит из латинских букв, цифр, знаков подчеркивание или минуса.&lt;br /&gt;
&lt;br /&gt;
Для получения списка всех пользовательских атрибутов в JSON виде используется следующая команда в командной строке&lt;br /&gt;
&lt;br /&gt;
    '''svacer access''' --project &amp;lt;project name&amp;gt;  --branch &amp;lt;branch name&amp;gt; --snapshot &amp;lt;name or id&amp;gt; --user &amp;lt;user name&amp;gt; --password &amp;lt;password&amp;gt; '''custom_fields'''&lt;br /&gt;
&lt;br /&gt;
Результат операции выдается как JSON объект в stdout. Объект имеет следующую структуру&lt;br /&gt;
    {&lt;br /&gt;
    &amp;quot;field name1&amp;quot;:&amp;quot;value&amp;quot;,&lt;br /&gt;
    &amp;quot;field name2&amp;quot;: [&amp;quot;value&amp;quot;, &amp;quot;value&amp;quot;..]&lt;br /&gt;
    } &lt;br /&gt;
Для получения значения конкретного пользовательского атрибута используется следующая команда&lt;br /&gt;
&lt;br /&gt;
    '''svacer access''' --project &amp;lt;project name&amp;gt;  --branch &amp;lt;branch name&amp;gt; --snapshot &amp;lt;name or id&amp;gt; --user &amp;lt;user name&amp;gt; --password &amp;lt;password&amp;gt; '''custom_fields --get &amp;lt;field name&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
Значение атрибута выводится в stdout как JSON строка или массив.&lt;br /&gt;
=== Клонирование ветки ===&lt;br /&gt;
При импорте данных возможно клонирование ветки (вместе со снимками, разметкой и комментариями) из того же проекта, куда происходит импорт данных.&lt;br /&gt;
&lt;br /&gt;
Для клонирования ветки следует использовать опцию '''--if-no-branch &amp;lt;value&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
    svacer import ... --if-no-branch &amp;lt;value&amp;gt; ...&lt;br /&gt;
&lt;br /&gt;
Значения, которые может принимать опция '''--if-no-branch''':&lt;br /&gt;
&lt;br /&gt;
* '''clone-{name|id}''' — клонировать ветку с заданным именем|id (по умолчанию clone-master)&lt;br /&gt;
* '''create-empty''' — создает пустую ветку&lt;br /&gt;
* '''return-error''' — возвращает ошибку, если для опции '''--branch &amp;lt;branch_name&amp;gt;''' не существует ветки с именем branch_name&lt;br /&gt;
&lt;br /&gt;
{{Note}} Если не указать данную опцию, то будет автоматически клонироваться ветка master, поэтому для избежания ошибок следует убедиться, что ветка master существует, если данная опция не указана, иначе будет выведена ошибка.&lt;br /&gt;
&lt;br /&gt;
==== Клонирование разметки и комментариев ====&lt;br /&gt;
При импорте данных возможно клонирование разметки и комментариев ветки из того же проекта, куда происходит импорт данных.&lt;br /&gt;
&lt;br /&gt;
Для клонирования разметки и комментариев следует использовать опцию '''--clone-review {name|id}'''&lt;br /&gt;
&lt;br /&gt;
    svacer import ... --clone-review {name|id} ...&lt;br /&gt;
&lt;br /&gt;
Данная опция принимает имя или id ветки, из которой необходимо склонировать разметку и комментарии.&lt;br /&gt;
&lt;br /&gt;
Приоритет опции '''--clone-review''' выше, чем у опции '''--if-no-branch''', поэтому возможно клонировать снимки из одной ветки, а разметку и комментарии из другой.&lt;br /&gt;
&lt;br /&gt;
Если ветка с таким именем или id не будет найдена, то при загрузке данных ('''svacer upload ...''', либо '''svacer import --upload ...''') загрузка произойдет, но без склонированной разметки.&lt;br /&gt;
&lt;br /&gt;
=== Прикрепление файлов ===&lt;br /&gt;
При импорте данных возможно прикрепление файлов размером до 300Мб к снимку. Файлы будут доступны пользователю в веб-интерфейсе и посредством интерфейса командной строки. Прикрепленные файлы фиксируются в момент операции импорта и не могут быть модифицированы после загрузки на сервер. Удалить файлы может администратор посредством веб интерфейса. Основное назначение данной функциональности прикрепление некоторой иммутабельной информации к результатам анализа для использования в интеграциях со сторонними системами.&lt;br /&gt;
Прикрепленные файлы являются частью данных, которые экспортируются и импортируются посредством функциональности экспорта и импорта снимков.&lt;br /&gt;
&lt;br /&gt;
Для прикрепления файлов следует использовать опцию '''--attach &amp;lt;file name&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
    svacer import ... --attach file1.txt --attach file2.txt ...&lt;br /&gt;
&lt;br /&gt;
Опция может быть указана несколько раз. После загрузки данных на сервер файлы будут видимы в панели информации о снимке&lt;br /&gt;
&lt;br /&gt;
[[File:SnapshotInfo.png|none|alt=Snapshot Info Window]]&lt;br /&gt;
&lt;br /&gt;
Для получения списка файлов из командной строки  следует использовать команду&lt;br /&gt;
&lt;br /&gt;
    '''svacer access''' --project &amp;lt;project name&amp;gt; --branch &amp;lt;branch name&amp;gt; --snapshot &amp;lt;name or id&amp;gt; --user &amp;lt;user name&amp;gt; --password &amp;lt;password&amp;gt; '''attachments''' --list&lt;br /&gt;
&lt;br /&gt;
Результат работы команды представляет собой JSON массив объектов вида&lt;br /&gt;
    &lt;br /&gt;
    [{&lt;br /&gt;
        &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
        &amp;quot;snapshot_id&amp;quot;: &amp;quot;d99c23f7-9fb9-4f4e-85ac-2539328947e0&amp;quot;,&lt;br /&gt;
        &amp;quot;lid&amp;quot;: 122885,&lt;br /&gt;
        &amp;quot;short_name&amp;quot;: &amp;quot;Makefile&amp;quot;,&lt;br /&gt;
        &amp;quot;description&amp;quot;: &amp;quot;/home/ruseer/static-analysis/svacer/Makefile&amp;quot;,&lt;br /&gt;
        &amp;quot;created_by&amp;quot;: &amp;quot;importer&amp;quot;,&lt;br /&gt;
        &amp;quot;updated_by&amp;quot;: null,&lt;br /&gt;
        &amp;quot;create_ts&amp;quot;: &amp;quot;2022-10-18T06:41:54.532925Z&amp;quot;,&lt;br /&gt;
        &amp;quot;update_ts&amp;quot;: null,&lt;br /&gt;
        &amp;quot;checksum&amp;quot;: &amp;quot;9b1e02a276e810829ac2e38fb775c4ff8d269d0f44fd0fbae40f79a0320389ad&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
    &lt;br /&gt;
Для получения содержимого файла из командной строки следует использовать команду&lt;br /&gt;
&lt;br /&gt;
    '''svacer access''' --project &amp;lt;project name&amp;gt;  --branch &amp;lt;branch name&amp;gt; --snapshot &amp;lt;name or id&amp;gt; --user &amp;lt;user name&amp;gt; --password &amp;lt;password&amp;gt; '''attachments''' --get &amp;lt;id&amp;gt; &amp;lt;output file&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Если '''&amp;lt;output file&amp;gt;''' не указан, то результат будет напечатан  в stdout;&lt;br /&gt;
* Если '''&amp;lt;branch&amp;gt;''' не указан, то будет использован ветка master;&lt;br /&gt;
* Если '''&amp;lt;snapshot&amp;gt;''' не указан, то будет использован последний снимок на указанной ветке.&lt;br /&gt;
&lt;br /&gt;
=== Загрузка данных на сервер ===&lt;br /&gt;
{{Note|type=warn|text=При загрузке данных на сервер, а также при прочих взаимодействиях клиента Svacer с сервером Svacer, крайне рекомендуется, чтобы версия клиента совпадала с версией сервера. В случае несовпадения версий возможны непредсказуемые ошибки.}}&lt;br /&gt;
&lt;br /&gt;
Для загрузки данных из промежуточного хранилища на сервер используется команда '''upload''':&lt;br /&gt;
&lt;br /&gt;
 svacer upload --user &amp;lt;user&amp;gt; --password &amp;lt;pwd&amp;gt; --host &amp;lt;host&amp;gt; --port &amp;lt;rest_port&amp;gt; --grpc &amp;lt;grpc_port&amp;gt; &amp;lt;path_to_store&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если отсутствуют параметры:&lt;br /&gt;
* '''--user''' и '''--password''', то используется специальный системный пользователь '''importer''' — он предназначен для импорта данных на сервер;&lt;br /&gt;
* '''--host''', то используется '''locahost''';&lt;br /&gt;
* '''--port''' и '''--grpc''', то используются их значения по умолчанию;&lt;br /&gt;
При загрузке данных на сервер уже загруженные снимки повторно не загружаются. Разделяемая информация (такая как исходные файлы, где один и тот же файл может использоваться в различных анализах и т.п.) также повторно не загружается. &lt;br /&gt;
При сбоях в ходе загрузки проводится повторная загрузка, но при этом загружаются только недостающие данные.&lt;br /&gt;
&lt;br /&gt;
В случае если Svacer запущен с поддержкой SSL/TLS или работает за reverse proxy и доступен по протоколу HTTPS, то для загрузки требуется явно указать протокол в параметре '''--host''', либо добавить опцию '''--ssl'''.&lt;br /&gt;
&lt;br /&gt;
 svacer upload --host https://&amp;lt;url_without_port&amp;gt; &amp;lt;path_to_store&amp;gt;&lt;br /&gt;
 svacer upload --ssl --host &amp;lt;url_without_port&amp;gt; &amp;lt;path_to_store&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом grpc порт (по умолчанию — 3002), по которому идет загрузка данных, на сервере должен быть доступен.&lt;br /&gt;
&lt;br /&gt;
Для информации о загрузке данных на сервер с авторизацией в LDAP см. [[LDAP configuration#Использование CLI сервера Svacer с поддержкой LDAP|Использование CLI Svacer с поддержкой LDAP]].&lt;br /&gt;
&lt;br /&gt;
При загрузке данных на сервер можно включить печать краткой статистики по загруженным результатам. Данная статистика включает информацию о новых и пропущенных предупреждениях, по сравнению с последним ранее загруженным снимком. Выдача краткой статистики возможно в текстовом или JSON виде. Результаты печатаются в stdout.&lt;br /&gt;
&lt;br /&gt;
{{Note|text=Для корректной работы опций &amp;lt;code&amp;gt;--quality-gate&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;--quick-stats&amp;lt;/code&amp;gt; при использовании reverse proxy, в частности Nginx, для gRPC порта Svacer, необходимо в настройках секции http или server добавить инструкцию:&lt;br /&gt;
 underscores_in_headers on;&lt;br /&gt;
См. [[Help:Configuration#Nginx|пример конфига]]}}&lt;br /&gt;
&lt;br /&gt;
 svacer upload ... --quick-stats --out-format text ...&lt;br /&gt;
&lt;br /&gt;
Пример вывода&lt;br /&gt;
 Quick Stats:&lt;br /&gt;
 Previous snapshot   : Snapshot 2022-11-16 10:11:37 +0300&lt;br /&gt;
 Current snapshot    : Snapshot 2022-11-16 10:23:08 +0300&lt;br /&gt;
 New                 : 1&lt;br /&gt;
 Missing             : 0&lt;br /&gt;
 Matched             : 1&lt;br /&gt;
 Same                : 0&lt;br /&gt;
&lt;br /&gt;
 svacer upload ... --quick-stats --out-format json ...&lt;br /&gt;
&lt;br /&gt;
Пример вывода&lt;br /&gt;
 {&amp;quot;branch&amp;quot;:&amp;quot;391f21d1-2173-449c-9d1a-dd846d2a6471&amp;quot;,&amp;quot;snapshot&amp;quot;:&amp;quot;34a1125d-86a3-45d3-9b41-cb5da24ab96e&amp;quot;,&amp;quot;snapshotName&amp;quot;:&amp;quot;Snapshot 2022-11-21 10:19:06 +0300&amp;quot;,&amp;quot;lastSnapshot&amp;quot;:&amp;quot;59657ae8-c3b6-48bc-b586-a6c0580cdb50&amp;quot;,&amp;quot;lastSnapshotName&amp;quot;:&amp;quot;Snapshot 2022-11-21 10:18:09 +0300&amp;quot;,&amp;quot;same&amp;quot;:2}&lt;br /&gt;
&lt;br /&gt;
Формат JSON определяется protobuf3 схемой (ряд полей носит внутренний характер):&lt;br /&gt;
 message ImportSummaryContext {&lt;br /&gt;
   string branch = 1;&lt;br /&gt;
   string snapshot = 2;&lt;br /&gt;
   string snapshotName = 9;&lt;br /&gt;
   string lastSnapshot = 3;  &lt;br /&gt;
   string lastSnapshotName = 4;  &lt;br /&gt;
   int64 new = 5;&lt;br /&gt;
   int64 missing = 6;&lt;br /&gt;
   int64 matched = 7;&lt;br /&gt;
   int64 same = 8;&lt;br /&gt;
   string qualityGate = 10;&lt;br /&gt;
   string baseline_branch_name = 11;&lt;br /&gt;
   string baseline_project_name = 12;&lt;br /&gt;
   string branch_name = 13;&lt;br /&gt;
   string project_name = 14;&lt;br /&gt;
   string project_id = 15;  &lt;br /&gt;
   string baseline_snapshot_id = 16;&lt;br /&gt;
   string baseline_branch_id = 19;&lt;br /&gt;
   string baseline_project_id = 20;&lt;br /&gt;
   string baseline_snapshot_name = 21;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
По умолчанию, если опция по указанию формата выдачи отсутствует, выдача идет в текстовом режиме.&lt;br /&gt;
&lt;br /&gt;
=== Переименование снимка после импорта ===&lt;br /&gt;
&lt;br /&gt;
При необходимости, имя загруженного снимка можно изменить. Данная опция поддерживается только для пользователей с правами администратора сервера.&lt;br /&gt;
&lt;br /&gt;
   svacer container snapshot rename --host &amp;lt;host&amp;gt; --port &amp;lt;port&amp;gt; --user &amp;lt;user name&amp;gt; --password &amp;lt;pwd&amp;gt; --id &amp;lt;snapshot id&amp;gt; --name &amp;lt;snapshot name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Идентификатор снимка можно посмотреть в веб-интерфейсе или получить посредством public API.&lt;br /&gt;
&lt;br /&gt;
=== Модификация путей в разметке при импорте ===&lt;br /&gt;
&lt;br /&gt;
==== Обычное поведение ====&lt;br /&gt;
По умолчанию пути к файлам не меняются, за исключением пути к папки '''.svace-dir''', он будет заменён на '''.build'''. Эту информацию можно увидеть при импорте проекта:&lt;br /&gt;
&lt;br /&gt;
    svacer import --clean .svacer-dir&lt;br /&gt;
    ...&lt;br /&gt;
    info    The path prefix of .svace-dir 'C:\work\generate_files\gen_exp' will be trimmed when converting file paths&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
После этого все маркеры из этой папки и дочерних будут в '''Review''' показывать путь вида '''/.build/test500_1.c''' вместо полного пути для файла '''C:\work\generate_files\gen_exp\test500_1.c'''.&lt;br /&gt;
&lt;br /&gt;
[[File:SimpleSourceCode.png|none|alt=Simple Source Code Window]]&lt;br /&gt;
&lt;br /&gt;
==== Использование --path-prefix ====&lt;br /&gt;
При необходимости модификацию по умолчанию можно заменить через '''--path-prefix'''.&lt;br /&gt;
Значения опции передаются в виде:&lt;br /&gt;
&lt;br /&gt;
    --path-prefix &amp;quot;prefix_for_replace1:value1;prefix_for_replace2:value2; ...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Поддерживается как передача данных сразу в опцию, так и через указание файла содержащего значения. Разумно делать замены для унификации вида проекта, собранного на разных машинах (или из разных папок). При использовании файла допустимо размещать каждую замену на отдельную строчку.&lt;br /&gt;
&lt;br /&gt;
Префиксы путей заменяются только при полном совпадении (включая регистр, даже на Windows).&lt;br /&gt;
Для указания двоеточия в префиксе пути используется удвоенное двоеточие, к примеру (для показа преобразований добавлено  '''--debug'''):&lt;br /&gt;
&lt;br /&gt;
    svacer --debug import --clean --upload --path-prefix &amp;quot;C::\work:work&amp;quot; .svacer-dir&lt;br /&gt;
    ...&lt;br /&gt;
    INFO    Creating regular object store&lt;br /&gt;
    DEBUG   Creating path mapping rule 'C:\work' =&amp;gt; 'work'&lt;br /&gt;
    DEBUG   Creating path mapping rule 'C:/work' =&amp;gt; 'work'&lt;br /&gt;
    DEBUG   Creating path mapping rule '/C_/work' =&amp;gt; 'work'&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
После импорта на сервере можно увидеть файл: '''/work/generate_files/gen_exp/test500_1.c'''&lt;br /&gt;
&lt;br /&gt;
[[File:PathPrefixSourceCode.png|none|alt=PathPrefixSourceCode]]&lt;br /&gt;
&lt;br /&gt;
==== Использование --build-object @auto ====&lt;br /&gt;
При импорте конкретного файла *.svres исходный код может быть загружен, при указании опции '''--build-object @auto'''. В случае, если этот файл лежит в папке .svace-dir, исходный код будет взят из нее. При отсутствии папки .svace-dir файлы будут браться по абсолютным путям из файла *.svres.&lt;br /&gt;
Для указания конкретных директорий поиска подходящих файлов из *.svres следует использовать опцию '''--source-tree''', которую можно указать несколько раз, чтобы задать несколько корневых директорий. Поиск в этих директориях будет происходить только в случае, когда по путям из файла *.svres были найдены не все файлы. В случае успешного сопоставления, на сервер будут загружены соответствующие файлы из директории source tree.&lt;br /&gt;
&lt;br /&gt;
==== Использование --full-paths ====&lt;br /&gt;
Допустимо также полное отключение модификаций путей, для этого импорт надо производить с опцией '''--full-paths'''. Опция блокирует как модификацию по умолчанию '''.build''', так и явные указания через '''--path-prefix'''.&lt;br /&gt;
&lt;br /&gt;
    svacer --debug import --clean --upload --full-paths .svacer-dir&lt;br /&gt;
&lt;br /&gt;
После загрузки на сервере будет виден только полный путь: '''/C_/work/generate_files/gen_exp/test500_1.c'''.&lt;br /&gt;
&lt;br /&gt;
[[File:FullPathsSourceCode.png|none|alt=FullPathsSourceCode window]]&lt;br /&gt;
&lt;br /&gt;
Пути из Windows преобразуются в стиль Linux с небольшим преобразованием символов.&lt;br /&gt;
&lt;br /&gt;
=== Использование quality gate ===&lt;br /&gt;
&lt;br /&gt;
Возможна проверка новых, пропущенных, одинаковых, измененных предупреждений, для этого надо производить импорт с опцией '''--quality-gate'''.&lt;br /&gt;
&lt;br /&gt;
   --quality-gate value    Specify a quality gate. Format: stat_1:severity_1:N_1:[statuses_1],...,stat_k:severity_k:N_k:[statuses_k], stat takes values: new, missing, matched, same, total; severity takes the following values: all, critical, major, normal, minor, undefined, &amp;lt;detector name part&amp;gt;; N is a natural number; statuses - an optional field, specified in square brackets with a separator &amp;quot;;&amp;quot; possible values - confirmed, false_positive, wont_fix, unclear, undecided, when specifying statuses, the quality gate will be searched only for markers that have exactly these statuses, for example [confirmed;wont_fix;undecided]. If the severity of the number N is exceeded, it will out a warning. Also, as a value, you can specify a json or yaml file in which the quality gate is specified.&lt;br /&gt;
&lt;br /&gt;
Флаг принимает на вход тип предупреждений (stat), severity, их количество (N) и их статусы (statuses).&lt;br /&gt;
&lt;br /&gt;
* stat задает тип предупреждений. Возможные значения:&lt;br /&gt;
** '''new''' — присутствует в новом снимке, но отсутствует в старом&lt;br /&gt;
** '''missing''' — присутствует в старом снимке, но отсутствует в новом&lt;br /&gt;
** '''matched''' — присутствуют изменения в файлах, не повлиявшие на выданное предупреждение&lt;br /&gt;
** '''same''' — одинаковые&lt;br /&gt;
** '''total''' — сумма всех вышеперечисленных (то есть количество предупреждений в объединении старого и нового снимков)&lt;br /&gt;
* severity задается либо непосредственным его указанием ('''critical''', '''major''', '''normal''', '''minor''', '''undefined'''), либо '''all''' (все severity), либо частью имени детектора в формате [https://www.postgresql.org/docs/current/functions-matching.html postgres ILIKE]&lt;br /&gt;
* N — порог, после которого вызывается срабатывание. Не включает данное число (т. е. если указать 5, то при нахождении 6 и более вызывается срабатывание quality-gate)&lt;br /&gt;
* statuses — '''опциональное''' поле, в котором можно указать какие статусы (разметку) учитывать при нахождении предупреждений. Возможные значения '''confirmed''', '''false_positive''', '''wont_fix''', '''unclear''', '''undecided'''. Задаются в квадратных скобках с разделителем &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt;. Например &amp;lt;code&amp;gt;[confirmed;wont_fix]&amp;lt;/code&amp;gt;. Если не указать данное поле, то будут учитываться все статусы. При указании в command line рекомендуется значение опции &amp;lt;code&amp;gt;--quality-gate&amp;lt;/code&amp;gt; экранировать в двойные кавычки.&amp;lt;br /&amp;gt;Принципы учета статусов:&lt;br /&gt;
** Если предупреждение размечено в новом снимке (значение не '''undecided'''), разметка берется из нового предупреждения&lt;br /&gt;
** Если в новом снимке нет разметки у данного предупреждения, а в старом есть, то берется разметка из старого предупреждения&lt;br /&gt;
** В остальных случаях у данного предупреждения разметка равна '''undecided'''.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
 --quality-gate &amp;quot;total:critical:0:[confirmed;wont_fix],new:all:10&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Тогда опция сработает, если либо:&lt;br /&gt;
&lt;br /&gt;
# Cтатическим анализатором будут найдены общее количество предупреждений (новых, пропущенных, одинаковых, измененных) с '''severity:critical''' и статусами '''confirmed''' и '''won't fix'''&lt;br /&gt;
# Cтатическим анализатором будут найдены новые предупреждения с любым статусом и severity&lt;br /&gt;
&lt;br /&gt;
Пример вывода:&lt;br /&gt;
 Quality gate exceed:&lt;br /&gt;
 Previous snapshot   : Snapshot 2025-06-16 15:37:09 +0300&lt;br /&gt;
 Current snapshot    : Snapshot 2025-06-16 15:37:39 +0300&lt;br /&gt;
 Stat                : total&lt;br /&gt;
 Severity            : Critical&lt;br /&gt;
 Severity Statuses   : confirmed wont_fix&lt;br /&gt;
 Severity Threshold  : 0&lt;br /&gt;
 Found Severity      : 3&lt;br /&gt;
&lt;br /&gt;
Также quality-gate можно задать файлом в формате json или yaml (не yml).&lt;br /&gt;
&lt;br /&gt;
Пример json файла:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[&amp;quot;total:all:1&amp;quot;, &amp;quot;total:proc:1&amp;quot;]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример yaml файла:&lt;br /&gt;
 - &amp;quot;total:all:1&amp;quot;&lt;br /&gt;
 - &amp;quot;total:proc:1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{{Note|text=Для корректной работы опций &amp;lt;code&amp;gt;--quality-gate&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;--quick-stats&amp;lt;/code&amp;gt; при использовании reverse proxy, в частности Nginx, для gRPC порта Svacer, необходимо в настройках секции http или server добавить инструкцию:&lt;br /&gt;
 underscores_in_headers on;&lt;br /&gt;
См. [[Help:Configuration#Nginx|пример конфига]]}}&lt;br /&gt;
&lt;br /&gt;
==== Флаг --quality-gate-exit-code ====&lt;br /&gt;
В случае срабатывания quality gate можно указать какой exit code от 0 до 125 будет возвращен. &lt;br /&gt;
&lt;br /&gt;
 --quality-gate-exit-code value    Specify the exit code of the application in the range from 0 to 125, which will be issued when the quality-gate is exceeded. The default is 0.&lt;br /&gt;
&lt;br /&gt;
{{Note|text=Значение по умолчанию 0, поэтому без явного задания exit code срабатывание quality-gate не вернет ненулевой статус и при использовании в CI/CD pipeline не будет помечен как failed. Так сделано для упрощения внедрения quality-gate опции в существующий CI/CD. Вначале можно проанализировать логи и если данные корректны, добавить опцию &amp;lt;code&amp;gt;--quality-gate-exit-code&amp;lt;/code&amp;gt; с ненулевым значением.}}&lt;br /&gt;
&lt;br /&gt;
==== Флаг --quality-gate-verbose ====&lt;br /&gt;
Если необходимо выводить информацию и об успешно прошедших quality gate, то нужно добавить флаг &amp;lt;code&amp;gt;--quality-gate-verbose&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример вывода:&lt;br /&gt;
 Quality gate exceed:&lt;br /&gt;
 Previous snapshot   : Snapshot 2025-06-16 15:37:39 +0300&lt;br /&gt;
 Current snapshot    : Snapshot 2025-06-16 16:10:33 +0300&lt;br /&gt;
 Stat                : total&lt;br /&gt;
 Severity            : Critical&lt;br /&gt;
 Severity Statuses   : confirmed wont_fix&lt;br /&gt;
 Severity Threshold  : 0&lt;br /&gt;
 Found Severity      : 3&lt;br /&gt;
 The result of comparison of those who have completed quality gate:&lt;br /&gt;
 Previous snapshot   : Snapshot 2025-06-16 15:37:39 +0300&lt;br /&gt;
 Current snapshot    : Snapshot 2025-06-16 16:10:33 +0300&lt;br /&gt;
 Stat                : new&lt;br /&gt;
 Severity            : All&lt;br /&gt;
 Severity Threshold  : 10&lt;br /&gt;
 Found Severity      : 0&lt;br /&gt;
&lt;br /&gt;
==== Флаг --baseline ====&lt;br /&gt;
Если сравнение необходимо проводить не с предыдущим снимком в этой же ветке, то можно указать флаг &amp;lt;code&amp;gt;--baseline&amp;lt;/code&amp;gt; (также работает для флага &amp;lt;code&amp;gt;--quick-stats&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
 --baseline value    A snapshot to compare (--quality-gate and/or --quick-stats). Format: {project}:::{branch}:::{snapshot} or {project}:::{branch} or {project} use UUID or name. By default, snapshot is the last added, branch is master. If the flag is not specified, then the comparison will be with the latest snapshot from the branch where the snapshot is loaded.&lt;br /&gt;
&lt;br /&gt;
Указывается в формате &amp;lt;code&amp;gt;{project}:::{branch}:::{snapshot}&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;{project}:::{branch}&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;{project}&amp;lt;/code&amp;gt;, используя имена или UUID. По умолчанию используется ветка master (если указан только проект) и последний добавленный снимок (если снимок не указан).&lt;br /&gt;
&lt;br /&gt;
При указании данного флага меняется вывод:&lt;br /&gt;
&lt;br /&gt;
* В текстовом формате добавляются строки об имени проекта, ветки и снимка, с которым сравнивался загружаемый снимок&lt;br /&gt;
* В json формате добавляются имена и id проекта, ветки и снимка, с которым сравнивался загружаемый снимок&lt;br /&gt;
&lt;br /&gt;
Если baseline не может быть точно определен (ошибка в имени проекта, ветки и т. п.), то импорт не производится и выдается ошибка.&lt;br /&gt;
&lt;br /&gt;
==== Флаг --baseline-check ====&lt;br /&gt;
Для вывода quick-stats и quality-gate даже в случае отсутствия снимка, ветки или проекта используйте опцию &amp;lt;code&amp;gt;--baseline-check&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Данный флаг принимает следующие параметры:&lt;br /&gt;
&lt;br /&gt;
* пустой или &amp;lt;code&amp;gt;project,branch,snapshot&amp;lt;/code&amp;gt; — требует проект, ветку и снимок, по умолчанию&lt;br /&gt;
* &amp;lt;code&amp;gt;skip&amp;lt;/code&amp;gt; — разрешает отсутствие проекта, ветки, снимка&lt;br /&gt;
* &amp;lt;code&amp;gt;project&amp;lt;/code&amp;gt; — требует проект, разрешает отсутствие ветки и снимка&lt;br /&gt;
* &amp;lt;code&amp;gt;project,branch&amp;lt;/code&amp;gt; — требует проект и ветку, разрешает отсутствие снимка&lt;br /&gt;
&lt;br /&gt;
Можно использовать полные названия с запятыми или сокращения без запятых: &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; для project, &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; для branch, &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt; для snapshot, например &amp;lt;code&amp;gt;pbs&amp;lt;/code&amp;gt;. Всегда пытается найти снимок; если он не найден, то использует пустой baseline и все предупреждения помечаются как New. Ошибка возвращается только если не выполнен обязательный уровень.&lt;br /&gt;
&lt;br /&gt;
==== Флаг --out-file ====&lt;br /&gt;
&lt;br /&gt;
Для указания файла, в который необходимо вывести результаты quality gate, используйте опцию &amp;lt;code&amp;gt;--out-file&amp;lt;/code&amp;gt; (по умолчанию вывод идет в stdout).&lt;br /&gt;
&lt;br /&gt;
==== Флаг --out-format ====&lt;br /&gt;
&lt;br /&gt;
Для указания в каком формате вывести результаты quality gate используйте опцию &amp;lt;code&amp;gt;--out-format&amp;lt;/code&amp;gt;. Принимает значения text (человекочитаемый) и json. По умолчанию text.&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=3466</id>
		<title>Svacer</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=3466"/>
		<updated>2026-02-10T10:13:22Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: /* Релизы */ add 12-0-1&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 12.x.x&lt;br /&gt;
# [[Help:Introduction|Введение]]&lt;br /&gt;
# [[Help:Installation|Установка и обновление]]&lt;br /&gt;
# [[Help:Configuration|Настройка сервера]]&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;
# [[Help:Utils|Дополнительные утилиты]]&lt;br /&gt;
# [[Metrics|Prometheus-метрики]]&lt;br /&gt;
# [[Pipelines|Примеры пайплайнов]]&lt;br /&gt;
# [[Notifications|Уведомления]]&lt;br /&gt;
&lt;br /&gt;
=== Релизы ===&lt;br /&gt;
Также доступны в виде docker-образа на [https://hub.docker.com/r/ispras/svacer docker hub] и как пакеты в [[Help:Installation#Установка и запуск из deb/rpm пакета|репозиториях]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! version !! distrib !! linux bin !! windows bin !! deb/rpm !! doc&lt;br /&gt;
!svace checkers version&lt;br /&gt;
|-&lt;br /&gt;
| 12.0.1&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-12-0-1-linux.tar.gz svacer-12-0-1-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-12-0-1-windows.zip svacer-12-0-1-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-1/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-server svacer-server]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-server.sig svacer-server.sig]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-1/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-server.exe svacer-server.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-server_win.sig svacer-server_win.sig]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-1/svacer_12.0-1_amd64.deb svacer_12.0-1_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-1/svacer-12.0-1.x86_64.rpm svacer-12.0-1.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 12-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Svacer#Документация|Documentation 12.x.x]]&lt;br /&gt;
|5.0.251220&lt;br /&gt;
|-&lt;br /&gt;
| 12.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12-0-0-linux.tar.gz svacer-12-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12-0-0-windows.zip svacer-12-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server svacer-server]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server.sig svacer-server.sig]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server.exe svacer-server.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server_win.sig svacer-server_win.sig]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer_12.0-0_amd64.deb svacer_12.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12.0-0.x86_64.rpm svacer-12.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 12-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 12-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Svacer#Документация|Documentation 12.x.x]]&lt;br /&gt;
|4.0.251120&lt;br /&gt;
|-&lt;br /&gt;
| 11.2.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11-2-0-linux.tar.gz svacer-11-2-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11-2-0-windows.zip svacer-11-2-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer_11.2-0_amd64.deb svacer_11.2-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11.2-0.x86_64.rpm svacer-11.2-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-2-0|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 11.1.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11-1-0-linux.tar.gz svacer-11-1-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11-1-0-windows.zip svacer-11-1-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer_11.1-0_amd64.deb svacer_11.1-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11.1-0.x86_64.rpm svacer-11.1-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-1-0|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 11.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11-0-0-linux.tar.gz svacer-11-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11-0-0-windows.zip svacer-11-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer_11.0-0_amd64.deb svacer_11.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11.0-0.x86_64.rpm svacer-11.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 11-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.1&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10-0-1-linux.tar.gz svacer-10-0-1-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10-0-1-windows.zip svacer-10-0-1-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer_10.0-1_amd64.deb svacer_10.0-1_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10.0-1.x86_64.rpm svacer-10.0-1.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 10-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 10.x.x]]&lt;br /&gt;
|4.0.241102&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10-0-0-linux.tar.gz svacer-10-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10-0-0-windows.zip svacer-10-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer_10.0-0_amd64.deb svacer_10.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10.0-0.x86_64.rpm svacer-10.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 10-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 10-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 10.x.x]]&lt;br /&gt;
|4.0.241102&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.2&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-9-0-2.zip svacer-9-0-2.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer_9.0-2_amd64.deb svacer_9.0-2_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-9.0-2.x86_64.rpm svacer-9.0-2.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 9-0-2|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#9-0-0|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.1&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-9-0-1.zip svacer-9-0-1.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer_9.0-1_amd64.deb svacer_9.0-1_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-9.0-1.x86_64.rpm svacer-9.0-1.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 9-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#9-0-0|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&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]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&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]]&amp;lt;br /&amp;gt;[[Documentation 8.x.x]]&lt;br /&gt;
|3.4.0&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]]&amp;lt;br /&amp;gt;[[Documentation 8.x.x]]&lt;br /&gt;
|3.4.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[https://svacer.ispras.ru/releases Предыдущие релизы] | [https://nextcloud.ispras.ru/index.php/s/x4r4cMJAMr5RZtd?path=%2F Еще более старые релизы]&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;
https://svacer-demo.ispras.ru&lt;br /&gt;
&lt;br /&gt;
* admin / admin — логин / пароль администратора&lt;br /&gt;
* user / user — логин / пароль пользователя&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Changelog&amp;diff=3465</id>
		<title>Changelog</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Changelog&amp;diff=3465"/>
		<updated>2026-02-09T12:31:14Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: minor fixes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Release 12-0-1 ===&lt;br /&gt;
10.02.2026&lt;br /&gt;
* Убраны ограничения на размер поля advanced filter в пользовательских фильтрах&lt;br /&gt;
* В публичных запросах, возвращающих маркеры, добавлено поле &amp;lt;code&amp;gt;checker_situation&amp;lt;/code&amp;gt; соответствующее полю &amp;lt;code&amp;gt;situation&amp;lt;/code&amp;gt; в детекторах&lt;br /&gt;
* Добавлена возможность фильтрации по &amp;lt;code&amp;gt;checker_situation&amp;lt;/code&amp;gt; в advanced filter&lt;br /&gt;
* Добавлена возможность фильтрации по &amp;lt;code&amp;gt;checker_labels&amp;lt;/code&amp;gt; в advanced filter. Поле содержит массив текстовых меток. Сейчас используется для пометки детекторов, соответствующих ГОСТ 71207-2024&lt;br /&gt;
* Добавлен публичный фильтр по детекторам, соответствующим ГОСТ 71207-2024&lt;br /&gt;
* Импортировано описание детекторов из &amp;lt;code&amp;gt;Svace 5.0.251220&amp;lt;/code&amp;gt;&lt;br /&gt;
* При миграции со старых версий баз, а также при миграциях, связанных с изменением схемы генерации инвариантов, реализовано полное сохранение разметки и комментариев на маркерах и последующее восстановление пропущенных&lt;br /&gt;
* Ряд таймаутов вынесен на уровень переменных окружения для адаптации под пользовательские сценарии&lt;br /&gt;
* Добавлена подсветка синтаксиса для языка Lua&lt;br /&gt;
* Исправлены проблемы безопасности, связанные с импортом данных и механизмом токенов доступа (PAT)&lt;br /&gt;
* При загрузке снимков, svace-dir и разметки через командную строку появилась возможность указать флаг &amp;lt;code&amp;gt;retry-policy&amp;lt;/code&amp;gt;, который задает время ожидания ответа от сервера, количество дополнительных попыток и задержку между повторами, например &amp;lt;code&amp;gt;30m:10:1m&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Release 12-0-0 ===&lt;br /&gt;
28.11.2025&lt;br /&gt;
&lt;br /&gt;
* API методы на fullmarkers позволяют [[Help:Public API#Примеры использования фильтров в public api|указать фильтр]] с полем фильтрации по 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; для [[Help:Configuration#Переменные окружения|контроля таймаута]] на ожидание начала импорта результатов и &amp;lt;code&amp;gt;SVACER_NUM_PARALLEL_IMPORTS&amp;lt;/code&amp;gt; на [[Help:Configuration#Переменные окружения|ограничение числа параллельных импортов]]. По умолчанию значения 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-интерфейсе, ограничен. Размер [[Help:Configuration#Переменные окружения|задается переменной окружения]] SVACER_TAIL_LOG_SIZE (по умолчанию 1Мб). Показывается последний кусок не более SVACER_TAIL_LOG_SIZE. Сам лог файл не ограничивается в размерах и кнопка выгрузки лога выгружает полный лог&lt;br /&gt;
* ['''Экспериментально'''] Можно [[Help:Configuration#Переменные окружения|указать 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-клиента svacer&lt;br /&gt;
* При запуске сервера можно указать флаг &amp;lt;code&amp;gt;--force-invariant-refresh&amp;lt;/code&amp;gt; для принудительной регенерации инвариантов. Это может решить проблему с переносом разметки&lt;br /&gt;
* Добавлена переменная окружения SVACER_INV_GEN_JOBS для контроля числа параллельных заданий при регенерации инвариантов. При ограниченных ресурсах машины рекомендуем ставить значение 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#Активация и запуск ИИ-ассистента|деплой ИИ-ассистента]]: добавили его сервис в 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; с указанием опции &amp;lt;code&amp;gt;quick-stat&amp;lt;/code&amp;gt;. Данный флаг позволяет получать ссылку на 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:Configuration#Механизм интеграции с внешними системами посредством Webhook-ов|Webhooks]]&lt;br /&gt;
* Добавлена [[Help:Configuration#Настройка защиты от перебора паролей пользователей|защита от перебора пароля пользователя]]&lt;br /&gt;
* Добавлена возможность задать [[Help:Configuration#Настройка парольной политики внутреннего механизма аутентификации Svacer|парольную политику безопасности]] для пользователей, использующих встроенный механизм аутентификации Svacer &lt;br /&gt;
* Добавлена возможность задать [[Help:Configuration#Задание вкладки по умолчанию на странице входа в GUI Svacer (а также отключение внутреннего механизма аутентификации Svacer)|вкладку по умолчанию]] для страницы входа в систему &lt;br /&gt;
* Исправлена ошибка, приводящая к разрастанию базы данных&lt;br /&gt;
* Исправлена ошибка, связанная с невозможностью в ряде случаев использовать механизм подписок&lt;br /&gt;
* Форма [[Help:UI manual#Разметка маркера с помощью ассистента AI|разметки]] с помощью [[Help:XSvacer:AIAssistant|ИИ-ассистента]] реализована в основном интерфейсе 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#deb/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>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:Installation&amp;diff=3458</id>
		<title>Help:Installation</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:Installation&amp;diff=3458"/>
		<updated>2026-01-19T14:09:18Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: /* 12-x-x */ add volumes info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Установка и запуск ==&lt;br /&gt;
Для использования только клиента Svacer достаточно [[Svacer#Релизы|скачать исполняемый файл]] '''svacer''', или установить [[Help:Installation#Svacer|deb/rpm пакет]].&lt;br /&gt;
&lt;br /&gt;
Сервер Svacer можно запустить в [[Help:Installation#docker compose|докере]] или из [[Help:Installation#deb/rpm|deb/rpm пакета]].&lt;br /&gt;
&lt;br /&gt;
=== docker compose ===&lt;br /&gt;
Рекомендуемый и самый простой способ деплоя — развернуть сервер Svacer в докер-контейнерах, воспользовавшиcь [https://svacer.ispras.ru/extra/docker-compose.yml docker-compose.yml] файлом:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;curl -LO https://svacer.ispras.ru/extra/docker-compose.yml&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 docker compose up -d&lt;br /&gt;
&lt;br /&gt;
После запуска контейнеров веб-интерфейс Svacer будет доступен по адресу http://localhost:8080, логин / пароль — admin / admin.&lt;br /&gt;
&lt;br /&gt;
Для сборки своего докер-образа Svacer можете использовать [[Dockerfile]] в качестве референса.&lt;br /&gt;
&lt;br /&gt;
Для указания других параметров сервера можете [[Help:Configuration#Дополнительные параметры при запуске в docker|переопределить команду запуска]] в docker-compose файле.&lt;br /&gt;
&lt;br /&gt;
=== deb/rpm ===&lt;br /&gt;
==== PostgreSQL ====&lt;br /&gt;
{{Note|type=info|text=Disclaimer&lt;br /&gt;
* Рекомендуемая версия PostgreSQL — 15 и выше. С более старыми версиями корректная работа Svacer не гарантируется.&lt;br /&gt;
* Svacer требует эксклюзивного доступа к базе. Использование одной и той же базы для нескольких экземпляров Svacer может приводить к порче данных.}}&lt;br /&gt;
&lt;br /&gt;
Для работы сервера Svacer установите PostgreSQL, следуя [https://www.postgresql.org/download/linux документации postgres]. Для RedHat-based OS нужно дополнительно установить пакет postgresql-contrib соответствующей версии.&lt;br /&gt;
&lt;br /&gt;
Пример для Ubuntu 22:&lt;br /&gt;
&lt;br /&gt;
 sudo apt install -y postgresql-common&lt;br /&gt;
 sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh&lt;br /&gt;
 sudo apt install -y postgresql-17&lt;br /&gt;
&lt;br /&gt;
Пример для Rocky Linux 9.4:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 sudo dnf -qy module disable postgresql&lt;br /&gt;
 sudo dnf install -y postgresql17-server postgresql17-contrib&lt;br /&gt;
 sudo /usr/pgsql-17/bin/postgresql-17-setup initdb&lt;br /&gt;
 sudo systemctl enable postgresql-17&lt;br /&gt;
 sudo systemctl start postgresql-17&lt;br /&gt;
&lt;br /&gt;
==== Браузер для PDF-отчетов ====&lt;br /&gt;
Для создания PDF-отчетов с использованием нового HTML-генератора установите браузер Google Chrome на машину, где запускается сервер Svacer. Рекомендуется устанавливать из официального репозитория, следуя [https://www.google.com/chrome/?platform=linux инструкции с сайта google]. &lt;br /&gt;
&lt;br /&gt;
{{Note|type=info|text=Рекомендуемые системные требования при генерации PDF-отчетов для больших проектов с использованием HTML-генератора: Intel Core i9, 64 GB RAM, SSD, видеокарта Nvidia}}&lt;br /&gt;
&lt;br /&gt;
При запуске Svacer проверит доступность браузера для генерации PDF. Если он не установлен или генерация не работает, будет использован нативный генератор: менее продвинутый, но для него не нужен браузер. Можно явно включить использование нативного генератора, передав опцию &amp;lt;code&amp;gt;--pdf-generator=native&amp;lt;/code&amp;gt; при запуске сервера Svacer.&lt;br /&gt;
&lt;br /&gt;
При невозможности установить Google Chrome, например если нет пакета для вашего дистрибутива Linux, можно установить Chromium. Его пакет в репозиториях, в зависимости от вышей ОС, может называться &amp;lt;code&amp;gt;chromium-browser&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;chromium&amp;lt;/code&amp;gt;. В некоторых случаях генерация с Chromium может не работать. Например, если Svacer установлен из deb-пакета, а Сhromium из snap (на Ubuntu он устанавливается именно так даже при использовании apt) и сервер Svacer запускается от отдельного системного пользователя, от которого Chromium не может запуститься. В этом случае установите Google Chrome, с ним генерация работает.&lt;br /&gt;
&lt;br /&gt;
==== Svacer ====&lt;br /&gt;
На Debian-based OS добавьте apt-репозиторий и установите Svacer из него.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;echo 'deb [signed-by=/usr/share/keyrings/ispras.gpg] https://repo.ispras.ru/apt /' | sudo tee /etc/apt/sources.list.d/ispras.list&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;curl -fsSL https://repo.ispras.ru/apt/key.asc | sudo gpg --dearmor -o /usr/share/keyrings/ispras.gpg&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 sudo apt update&lt;br /&gt;
 sudo apt install -y svacer&lt;br /&gt;
&lt;br /&gt;
На RedHat-based OS добавьте dnf-репозиторий и установите Svacer из него&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;curl -fsSL https://repo.ispras.ru/rpm/ispras.repo | sudo tee /etc/yum.repos.d/ispras.repo&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 sudo dnf install -y svacer&lt;br /&gt;
&lt;br /&gt;
Для создания БД PostgreSQL запустите '''psql''' от учетной записи пользователя '''postgres''' &lt;br /&gt;
&lt;br /&gt;
 sudo su -l postgres&lt;br /&gt;
 psql&lt;br /&gt;
&lt;br /&gt;
И выполните следующие запросы:&lt;br /&gt;
 create database svace;&lt;br /&gt;
 create user svace with encrypted password 'svace';&lt;br /&gt;
 grant all privileges on database svace to svace;&lt;br /&gt;
 alter user svace superuser;&lt;br /&gt;
&lt;br /&gt;
В данном примере создается БД svace и права на нее выдаются пользователю svace с паролем svace. Также этому пользователю выдаются права суперюзера, что необходимо для создания расширений в PostgreSQL. При использовании этих значений по умолчанию дальнейшая конфигурация не требуется и можно переходить к запуску.&lt;br /&gt;
&lt;br /&gt;
При использовании других значений нужно поменять параметры подключения к БД в файле '''/etc/default/svacer'''&lt;br /&gt;
&lt;br /&gt;
 SVACER_ARGS=&amp;quot;--pg postgres://&amp;lt;user&amp;gt;:&amp;lt;password&amp;gt;@127.0.0.1:5432/&amp;lt;database&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
В этой же строке можно указать прочие аргументы для запуска сервера Svacer.&lt;br /&gt;
&lt;br /&gt;
На Astra Linux необходимо в файле '''/etc/parsec/mswitch.conf''' установить параметр &amp;lt;code&amp;gt;zero_if_notfound: yes&amp;lt;/code&amp;gt;, иначе при запуске Svacer будет ошибка подключения к БД вида&lt;br /&gt;
&lt;br /&gt;
 error obtaining MAC configuration for user &amp;quot;svace&amp;quot; (SQLSTATE 57P03)&lt;br /&gt;
&lt;br /&gt;
После создания БД и конфигурации сервера Svacer запустить его можно следующими командами&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl enable svacer&lt;br /&gt;
 sudo systemctl start svacer&lt;br /&gt;
&lt;br /&gt;
После чего проверить успешность запуска командой&lt;br /&gt;
&lt;br /&gt;
 systemctl status svacer&lt;br /&gt;
&lt;br /&gt;
После запуска сервер будет доступен по адресу http://localhost:8080, логин / пароль — admin / admin.&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск на Windows ===&lt;br /&gt;
{{Note|text=При запуске на Windows [[Help:Introduction#Системные_требования|поддерживается не вся функциональность сервера]]}}&lt;br /&gt;
* Скачайте установщик PostgreSQL для Windows: https://www.postgresql.org/download/windows&lt;br /&gt;
* Установите PostgreSQL, выбрав, как минимум, компоненты &amp;quot;PostgreSQL Server&amp;quot; и &amp;quot;Command Line Tools&amp;quot;&lt;br /&gt;
* Задайте пароль на шаге выбора пароля для суперпользователя&lt;br /&gt;
* Остальные параметры при установке можно оставить по умолчанию&lt;br /&gt;
* После установки PostgreSQL откройте консоль, перейдите в директорию, куда установили PostgreSQL, запустите его клиент с указанием пользователя &amp;quot;postgres&amp;quot; и авторизуйтесь с паролем, заданным во время установки&lt;br /&gt;
  cd c:\Program Files\PostgreSQL\15\bin&lt;br /&gt;
  psql -U postgres&lt;br /&gt;
* Запустится консоль управления PostgreSQL. Выполните в ней следующие команды, чтобы создать БД и пользователя для Svacer&lt;br /&gt;
  create database svace;&lt;br /&gt;
  create user svace with encrypted password 'svace';&lt;br /&gt;
  grant all privileges on database svace to svace;&lt;br /&gt;
  alter user svace superuser;&lt;br /&gt;
* Выйдите из консоли PostgreSQL&lt;br /&gt;
* Запустите '''svacer-server.exe''' из консоли с указанием параметров подключения к БД. Если при создании пользователя и БД PostgreSQL вы использовали для них имя по умолчанию 'svace', как в примере выше, то указывать данные для подключения к БД при запуске сервера не обязательно&lt;br /&gt;
  svacer-server.exe run&lt;br /&gt;
* Если создавали пользователя или БД с другими именами, то при запуске сервера надо указать их явно&lt;br /&gt;
  svacer-server.exe run --pg postgres://svacer_user:svacer_password@127.0.0.1:5432/svacer_database&lt;br /&gt;
* После запуска сервера его веб-интерфейс будет доступен по адресу http://localhost:8080, логин / пароль — admin / admin&lt;br /&gt;
&lt;br /&gt;
== Обновление ==&lt;br /&gt;
{{Note|type=reminder|text='''Перед обновлением настоятельно рекомендуется [[Help:Backup|делать резервные копии]]'''}}&lt;br /&gt;
&lt;br /&gt;
Миграции схем БД PostgreSQL и object store происходят автоматически при обновлении на новую версию Svacer. Поэтому для обновления Svacer достаточно остановить сервер старой версии, запустить сервер новой версии, указав ему те же параметры БД и object store, и подождать, пока не пройдет обновление, после чего Svacer запустится как обычно. При больших объемах данных в БД это может занять существенное время, до нескольких часов. Прогресс можно отслеживать по логам сервера. &lt;br /&gt;
&lt;br /&gt;
Версии не имеют обратной совместимости, то есть после обновления на следующую версию, откатиться на предыдущую можно будет, только восстановив БД из бэкапа.&lt;br /&gt;
&lt;br /&gt;
{{Note|type=warn|text=После запуска Svacer при обновлении обязательно дождитесь пока миграция БД завершится. Если прервать процесс во время миграции, принудительно остановив Svacer, база данных может оказаться в неконсистентном состоянии и придется восстанавливать данные из бэкапа.}}&lt;br /&gt;
&lt;br /&gt;
=== Upgrade notes ===&lt;br /&gt;
==== 12-x-x ====&lt;br /&gt;
* Рекомендуем обновить PostgreSQL до версии 15 или выше. С более старыми версиями корректная работа Svacer не гарантируется&lt;br /&gt;
* Если вы использовали аутентификацию с помощью LDAP в версиях Svacer 5-1-X и у вас не работает механизм тегирования или уведомлений (подписки), см [[LDAP_configuration#Некоторые_замечания_для_пользователей,_которые_использовали_LDAP_в_версиях_Svacer_5-1-X|решение проблем с отсутствием статуса пользователя в БД]]&lt;br /&gt;
* В релизе 12 мы добавили имя проекта в [https://svacer.ispras.ru/extra/docker-compose.yml docker-compose.yml]. Оно влияет на названия docker volumes для БД и object store: если раньше имена формировались на основе названия директории, откуда запускался стек, теперь они привязаны к имени проекта и по умолчанию будут &amp;lt;code&amp;gt;svacer_svacer-postgres&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;svacer_svacer-object-store&amp;lt;/code&amp;gt;. Чтобы после обновления docker-compose.yml файла старые вольюмы перенеслись, надо явно указать их имена в секции volumes:&lt;br /&gt;
 volumes:&lt;br /&gt;
   svacer-postgres:&lt;br /&gt;
     name: old-dir-name_svacer-postgres&lt;br /&gt;
     external: true&lt;br /&gt;
   svacer-object-store:&lt;br /&gt;
     name: old-dir-name_svacer-object-store&lt;br /&gt;
     external: true&lt;br /&gt;
&lt;br /&gt;
==== 11-x-x ====&lt;br /&gt;
Нет специфических рекомендаций по обновлению.&lt;br /&gt;
&lt;br /&gt;
==== 10-x-x ====&lt;br /&gt;
Нет специфических рекомендаций по обновлению.&lt;br /&gt;
&lt;br /&gt;
==== 9-0-0 ====&lt;br /&gt;
{{Note|type=reminder|text=При обновлении на эту версию рекомендуем не меньше 8GB RAM для корректности миграций}}&lt;br /&gt;
&lt;br /&gt;
Базово, никаких обязательных ручных действий с базой данных или object store при обновлении на 9-0-0 не требуется. Описанные ниже шаги могут помочь увеличить производительность сервера Svacer или решить возможные проблемы.&lt;br /&gt;
&lt;br /&gt;
'''1.''' &lt;br /&gt;
&lt;br /&gt;
В версии 9-0-0 поменялся формат object store, поэтому при обновлении с предыдущих версий Svacer на 9-0-0 или выше будет запущена конвертация object store в новый формат. Конвертация сначала записывает новые данные, а потом, если все прошло успешно, удаляет старые. Из-за этого для конвертации нужно примерно в два раза больше свободного дискового пространства, чем занимает текущий object store. При больших размерах object store и медленном диске конвертация может занять много времени.&lt;br /&gt;
&lt;br /&gt;
Конвертация запустится автоматически при обновлении на 9-0-0, но можно запустить вручную отдельно:&lt;br /&gt;
&lt;br /&gt;
 svacer-server kvconvert --from &amp;lt;path&amp;gt; --to &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расположение object store в файловой системе описано в [[Help:Backup#Бэкап object store вручную|разделе про бэкапы]].&lt;br /&gt;
&lt;br /&gt;
'''2.'''&lt;br /&gt;
&lt;br /&gt;
Перед установкой новой версии рекомендуется выполнить следующий запрос в БД для удаления дубликатов описаний чекеров.&lt;br /&gt;
&lt;br /&gt;
 delete from checkers where id not in (select max(id) from checkers group by (config_id, checker_id, languages, tools));&lt;br /&gt;
&lt;br /&gt;
Если вы уже выполняли этот запрос при [[Help:Installation#8-0-0|обновлении на 8-0-0]], то второй раз запускать не обязательно.&lt;br /&gt;
&lt;br /&gt;
'''3.'''&lt;br /&gt;
&lt;br /&gt;
После обновления на версию 9-0-0 и завершения всех миграций БД (когда станет доступен веб-интерфейс) рекомендуем выполнить команду &amp;lt;code&amp;gt;VACUUM FULL&amp;lt;/code&amp;gt; в PostgreSQL для очистки и оптимизации базы данных.&lt;br /&gt;
&lt;br /&gt;
 psql -h &amp;lt;postgres_host&amp;gt; -U &amp;lt;username&amp;gt; &amp;lt;svacer_database_name&amp;gt; -c 'VACUUM FULL;'&lt;br /&gt;
&lt;br /&gt;
Например: &lt;br /&gt;
&lt;br /&gt;
 psql -h localhost -U svacer svacer_db -c 'VACUUM FULL;'&lt;br /&gt;
&lt;br /&gt;
==== 8-0-0 ====&lt;br /&gt;
Если при обновлении на версию 8-0-0 и выше возникает подобная ошибка&lt;br /&gt;
 Key (config_id, checker_id, languages, tools)=(4cd178ce-a2b2-4692-a45a-f84b145c807b, FB.ICAST_QUESTIONABLE_UNSIGNED_RIGHT_SHIFT, {JAVA}, {SpotBugs}) is duplicated&lt;br /&gt;
Это значит, что в БД есть дубликаты чекеров. Выполните следующий SQL-запрос в PostgreSQL-базе Svacer, чтобы удалить их:&lt;br /&gt;
 delete from checkers where id not in (select max(id) from checkers group by (config_id, checker_id, languages, tools));&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=3457</id>
		<title>Svacer</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=3457"/>
		<updated>2026-01-14T13:52:28Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: /* Релизы */ add windows signature file&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 12.x.x&lt;br /&gt;
# [[Help:Introduction|Введение]]&lt;br /&gt;
# [[Help:Installation|Установка и обновление]]&lt;br /&gt;
# [[Help:Configuration|Настройка сервера]]&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;
# [[Help:Utils|Дополнительные утилиты]]&lt;br /&gt;
# [[Metrics|Prometheus-метрики]]&lt;br /&gt;
# [[Pipelines|Примеры пайплайнов]]&lt;br /&gt;
# [[Notifications|Уведомления]]&lt;br /&gt;
&lt;br /&gt;
=== Релизы ===&lt;br /&gt;
Также доступны в виде docker-образа на [https://hub.docker.com/r/ispras/svacer docker hub] и как пакеты в [[Help:Installation#Установка и запуск из deb/rpm пакета|репозиториях]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! version !! distrib !! linux bin !! windows bin !! deb/rpm !! doc&lt;br /&gt;
!svace checkers version&lt;br /&gt;
|-&lt;br /&gt;
| 12.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12-0-0-linux.tar.gz svacer-12-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12-0-0-windows.zip svacer-12-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server svacer-server]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server.sig svacer-server.sig]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server.exe svacer-server.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server_win.sig svacer-server_win.sig]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer_12.0-0_amd64.deb svacer_12.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12.0-0.x86_64.rpm svacer-12.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 12-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 12-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Svacer#Документация|Documentation 12.x.x]]&lt;br /&gt;
|4.0.251120&lt;br /&gt;
|-&lt;br /&gt;
| 11.2.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11-2-0-linux.tar.gz svacer-11-2-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11-2-0-windows.zip svacer-11-2-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer_11.2-0_amd64.deb svacer_11.2-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11.2-0.x86_64.rpm svacer-11.2-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-2-0|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 11.1.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11-1-0-linux.tar.gz svacer-11-1-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11-1-0-windows.zip svacer-11-1-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer_11.1-0_amd64.deb svacer_11.1-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11.1-0.x86_64.rpm svacer-11.1-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-1-0|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 11.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11-0-0-linux.tar.gz svacer-11-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11-0-0-windows.zip svacer-11-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer_11.0-0_amd64.deb svacer_11.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11.0-0.x86_64.rpm svacer-11.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 11-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.1&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10-0-1-linux.tar.gz svacer-10-0-1-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10-0-1-windows.zip svacer-10-0-1-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer_10.0-1_amd64.deb svacer_10.0-1_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10.0-1.x86_64.rpm svacer-10.0-1.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 10-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 10.x.x]]&lt;br /&gt;
|4.0.241102&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10-0-0-linux.tar.gz svacer-10-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10-0-0-windows.zip svacer-10-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer_10.0-0_amd64.deb svacer_10.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10.0-0.x86_64.rpm svacer-10.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 10-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 10-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 10.x.x]]&lt;br /&gt;
|4.0.241102&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.2&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-9-0-2.zip svacer-9-0-2.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer_9.0-2_amd64.deb svacer_9.0-2_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-9.0-2.x86_64.rpm svacer-9.0-2.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 9-0-2|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#9-0-0|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.1&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-9-0-1.zip svacer-9-0-1.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer_9.0-1_amd64.deb svacer_9.0-1_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-9.0-1.x86_64.rpm svacer-9.0-1.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 9-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#9-0-0|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&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]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&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]]&amp;lt;br /&amp;gt;[[Documentation 8.x.x]]&lt;br /&gt;
|3.4.0&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]]&amp;lt;br /&amp;gt;[[Documentation 8.x.x]]&lt;br /&gt;
|3.4.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[https://svacer.ispras.ru/releases Предыдущие релизы] | [https://nextcloud.ispras.ru/index.php/s/x4r4cMJAMr5RZtd?path=%2F Еще более старые релизы]&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;
https://svacer-demo.ispras.ru&lt;br /&gt;
&lt;br /&gt;
* admin / admin — логин / пароль администратора&lt;br /&gt;
* user / user — логин / пароль пользователя&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=3456</id>
		<title>Svacer</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=3456"/>
		<updated>2026-01-14T09:18:09Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: /* Релизы */ add signature file link&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 12.x.x&lt;br /&gt;
# [[Help:Introduction|Введение]]&lt;br /&gt;
# [[Help:Installation|Установка и обновление]]&lt;br /&gt;
# [[Help:Configuration|Настройка сервера]]&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;
# [[Help:Utils|Дополнительные утилиты]]&lt;br /&gt;
# [[Metrics|Prometheus-метрики]]&lt;br /&gt;
# [[Pipelines|Примеры пайплайнов]]&lt;br /&gt;
# [[Notifications|Уведомления]]&lt;br /&gt;
&lt;br /&gt;
=== Релизы ===&lt;br /&gt;
Также доступны в виде docker-образа на [https://hub.docker.com/r/ispras/svacer docker hub] и как пакеты в [[Help:Installation#Установка и запуск из deb/rpm пакета|репозиториях]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! version !! distrib !! linux bin !! windows bin !! deb/rpm !! doc&lt;br /&gt;
!svace checkers version&lt;br /&gt;
|-&lt;br /&gt;
| 12.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12-0-0-linux.tar.gz svacer-12-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12-0-0-windows.zip svacer-12-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server svacer-server]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server.sig svacer-server.sig]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer_12.0-0_amd64.deb svacer_12.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12.0-0.x86_64.rpm svacer-12.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 12-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 12-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Svacer#Документация|Documentation 12.x.x]]&lt;br /&gt;
|4.0.251120&lt;br /&gt;
|-&lt;br /&gt;
| 11.2.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11-2-0-linux.tar.gz svacer-11-2-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11-2-0-windows.zip svacer-11-2-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer_11.2-0_amd64.deb svacer_11.2-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11.2-0.x86_64.rpm svacer-11.2-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-2-0|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 11.1.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11-1-0-linux.tar.gz svacer-11-1-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11-1-0-windows.zip svacer-11-1-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer_11.1-0_amd64.deb svacer_11.1-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11.1-0.x86_64.rpm svacer-11.1-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-1-0|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 11.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11-0-0-linux.tar.gz svacer-11-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11-0-0-windows.zip svacer-11-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer_11.0-0_amd64.deb svacer_11.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11.0-0.x86_64.rpm svacer-11.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 11-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.1&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10-0-1-linux.tar.gz svacer-10-0-1-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10-0-1-windows.zip svacer-10-0-1-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer_10.0-1_amd64.deb svacer_10.0-1_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10.0-1.x86_64.rpm svacer-10.0-1.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 10-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 10.x.x]]&lt;br /&gt;
|4.0.241102&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10-0-0-linux.tar.gz svacer-10-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10-0-0-windows.zip svacer-10-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer_10.0-0_amd64.deb svacer_10.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10.0-0.x86_64.rpm svacer-10.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 10-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 10-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 10.x.x]]&lt;br /&gt;
|4.0.241102&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.2&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-9-0-2.zip svacer-9-0-2.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer_9.0-2_amd64.deb svacer_9.0-2_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-9.0-2.x86_64.rpm svacer-9.0-2.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 9-0-2|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#9-0-0|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.1&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-9-0-1.zip svacer-9-0-1.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer_9.0-1_amd64.deb svacer_9.0-1_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-9.0-1.x86_64.rpm svacer-9.0-1.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 9-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#9-0-0|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&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]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&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]]&amp;lt;br /&amp;gt;[[Documentation 8.x.x]]&lt;br /&gt;
|3.4.0&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]]&amp;lt;br /&amp;gt;[[Documentation 8.x.x]]&lt;br /&gt;
|3.4.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[https://svacer.ispras.ru/releases Предыдущие релизы] | [https://nextcloud.ispras.ru/index.php/s/x4r4cMJAMr5RZtd?path=%2F Еще более старые релизы]&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;
https://svacer-demo.ispras.ru&lt;br /&gt;
&lt;br /&gt;
* admin / admin — логин / пароль администратора&lt;br /&gt;
* user / user — логин / пароль пользователя&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Afilters&amp;diff=3455</id>
		<title>Afilters</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Afilters&amp;diff=3455"/>
		<updated>2026-01-13T12:42:30Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: /* Данные о разметке */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Advanced filters =&lt;br /&gt;
Поле &amp;quot;Расширенный фильтр&amp;quot; в пользовательских фильтрах предназначено для фильтрации маркеров (предупреждений) по сложным предикатам. &lt;br /&gt;
[[File:Image-afilters-prop.png|thumb]]&lt;br /&gt;
Предикат может использовать:&lt;br /&gt;
&lt;br /&gt;
* поля маркера, его трассы, разметки и комментариев&lt;br /&gt;
* информацию из контекста: имя проекта, ветки, снимка и т. п.&lt;br /&gt;
* атрибуты снимка, включая пользовательские атрибуты, заданные при импорте&lt;br /&gt;
* статусы разметки&lt;br /&gt;
* текст и атрибуты комментариев&lt;br /&gt;
&lt;br /&gt;
Формат фильтра определяется следующим шаблоном:&lt;br /&gt;
&lt;br /&gt;
 filter(markers, &amp;lt;predicate expr&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Выражение &amp;lt;code&amp;gt;&amp;lt;predicate expr&amp;gt;&amp;lt;/code&amp;gt; определяет предикат. Объект &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt; содержит массив маркеров из контекста, функция &amp;lt;code&amp;gt;filter&amp;lt;/code&amp;gt; фильтрует данный список по предикату. Таким образом, применение фильтра заключается в фильтрации списка маркеров по указанному предикату.&lt;br /&gt;
&lt;br /&gt;
== Список доступных полей ==&lt;br /&gt;
&lt;br /&gt;
=== Поля маркера (предупреждения) ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Comments&amp;lt;/code&amp;gt; — список комментариев маркера. Объект типа Comment (смотрите ниже)&lt;br /&gt;
* &amp;lt;code&amp;gt;Details&amp;lt;/code&amp;gt; — информация, специфичная для анализатора. Ближайший аналог — fingerprint в SARIF&lt;br /&gt;
* &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt; — имя файла&lt;br /&gt;
* &amp;lt;code&amp;gt;Function&amp;lt;/code&amp;gt; — имя функции, может быть mangled для С++&lt;br /&gt;
* &amp;lt;code&amp;gt;ID&amp;lt;/code&amp;gt; — UUID маркера&lt;br /&gt;
* &amp;lt;code&amp;gt;Invariant&amp;lt;/code&amp;gt; — инвариант маркера. Используется для автопереноса разметки между снимками&lt;br /&gt;
* &amp;lt;code&amp;gt;Lang&amp;lt;/code&amp;gt; — язык детектора&lt;br /&gt;
* &amp;lt;code&amp;gt;Line&amp;lt;/code&amp;gt; — номер строки в файле&lt;br /&gt;
* &amp;lt;code&amp;gt;LocID&amp;lt;/code&amp;gt; — порядковый номер маркера относительно изначального отчета анализатора&lt;br /&gt;
* &amp;lt;code&amp;gt;MTid&amp;lt;/code&amp;gt; — шаблон сообщения&lt;br /&gt;
* &amp;lt;code&amp;gt;Msg&amp;lt;/code&amp;gt; — текст сообщения&lt;br /&gt;
* &amp;lt;code&amp;gt;OrigFunc&amp;lt;/code&amp;gt; — 'человекочитаемое' имя функции. Может быть недоступно&lt;br /&gt;
* &amp;lt;code&amp;gt;Tags&amp;lt;/code&amp;gt; — список тегов (меток) маркера&lt;br /&gt;
* &amp;lt;code&amp;gt;Tool&amp;lt;/code&amp;gt; — модуль анализатора, ответственного за данный детектор&lt;br /&gt;
* &amp;lt;code&amp;gt;Traces&amp;lt;/code&amp;gt; — список трасс маркера. Объект типа Trace (смотрите ниже)&lt;br /&gt;
* &amp;lt;code&amp;gt;WarnClass&amp;lt;/code&amp;gt; — название детектора/класса детекторов&lt;br /&gt;
&lt;br /&gt;
Имена полей также могут использоваться в формате, где первая буква в lowercase.&lt;br /&gt;
&lt;br /&gt;
Помимо использования полей, можно использовать вспомогательные функции для доступа к дополнительной информации:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;severity(item) string&amp;lt;/code&amp;gt; — серьезность детектора (чекера)&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
 filter(markers, severity(#) == &amp;quot;Critical&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
'''Внимание:''' использование в предикатах поля &amp;lt;code&amp;gt;Trace&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;status(item) string&amp;lt;/code&amp;gt; — статус разметки текущего маркера. Пример: &amp;lt;code&amp;gt;filter(markers, status(#) == &amp;quot;Confirmed&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;action(item) string&amp;lt;/code&amp;gt; — статус поля action текущего маркера.  Пример: &amp;lt;code&amp;gt;filter(markers, action(#) == &amp;quot;Ignore&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;mseverity(item) string&amp;lt;/code&amp;gt; — статус поля severity текущего маркера (не путать с severity детектора).  Пример: &amp;lt;code&amp;gt;filter(markers, mseverity(#) == &amp;quot;Critical&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;triaged(item) bool&amp;lt;/code&amp;gt; — возвращает true, если маркер имеет не дефолтную разметку. Пример: &amp;lt;code&amp;gt;filter(markers, triaged(#))&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;get_triaged_by(item) UserInfo&amp;lt;/code&amp;gt; — возвращает структуру с информацией о пользователе, который произвел разметку&lt;br /&gt;
&lt;br /&gt;
Поля структуры &amp;lt;code&amp;gt;UserInfo&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;login: string&amp;lt;/code&amp;gt; — логин пользователя&lt;br /&gt;
* &amp;lt;code&amp;gt;create_ts: Time (UTC)&amp;lt;/code&amp;gt; — время разметки в UTC формате (RFC3339)&lt;br /&gt;
&lt;br /&gt;
=== Комментарии ===&lt;br /&gt;
Объекты типа &amp;lt;code&amp;gt;Comment&amp;lt;/code&amp;gt; содержатся в поле &amp;lt;code&amp;gt;Comments&amp;lt;/code&amp;gt; маркера. Объект имеет следующие поля:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ID&amp;lt;/code&amp;gt; — UUID комментария&lt;br /&gt;
* &amp;lt;code&amp;gt;Text&amp;lt;/code&amp;gt; — текст комментария&lt;br /&gt;
* &amp;lt;code&amp;gt;CreatedBy&amp;lt;/code&amp;gt; — имя пользователя, кто создал комментарий&lt;br /&gt;
* &amp;lt;code&amp;gt;CreateTs&amp;lt;/code&amp;gt; — время создания комментария (объект типа &amp;lt;code&amp;gt;time.Time&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;UpdateTs&amp;lt;/code&amp;gt; — время обновления комментария (объект типа &amp;lt;code&amp;gt;time.Time&amp;lt;/code&amp;gt;), может быть пустым&lt;br /&gt;
* &amp;lt;code&amp;gt;UpdatedBy&amp;lt;/code&amp;gt; — имя пользователя, кто обновил комментарий&lt;br /&gt;
&lt;br /&gt;
=== Трассы ===&lt;br /&gt;
Маркер может содержать трассу маркера в поле &amp;lt;code&amp;gt;Traces&amp;lt;/code&amp;gt;. Трасса описывается следующими структурами:&lt;br /&gt;
 type Trace struct {&lt;br /&gt;
 	Role      string&lt;br /&gt;
 	Locations []TraceEntry&lt;br /&gt;
 }&lt;br /&gt;
 type TraceEntry struct {&lt;br /&gt;
 	File     string	&lt;br /&gt;
 	Line     uint32&lt;br /&gt;
 	Col  	 uint32	&lt;br /&gt;
 	Info 	 string&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Доступ к полям объекта &amp;lt;code&amp;gt;Trace&amp;lt;/code&amp;gt; может выполняться, используя правила языка &amp;lt;code&amp;gt;go-expr&amp;lt;/code&amp;gt;, описанные ниже.&lt;br /&gt;
&lt;br /&gt;
Имена полей могут использоваться в виде как описано выше, либо в формате lowercase: &amp;lt;code&amp;gt;role, locations, file, line, col, info&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
 filter(markers, any(.Comments, .Text == &amp;quot;Test&amp;quot;) &amp;amp;&amp;amp;&lt;br /&gt;
 		any(.Traces, any(.Locations, .Info == &amp;quot;Boolean expression has constant value&amp;quot;))&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
=== Поля снимка ===&lt;br /&gt;
Для доступа к полям снимка можно использовать переменную &amp;lt;code&amp;gt;snapshot&amp;lt;/code&amp;gt;. Переменная имеет тип структуры со следующими полями&lt;br /&gt;
&lt;br /&gt;
 struct {&lt;br /&gt;
 	ID               string                &lt;br /&gt;
 	Name             string                &lt;br /&gt;
 	SerialID         uint32                &lt;br /&gt;
 	BuildObject      string                &lt;br /&gt;
 	ResultsObject    string                &lt;br /&gt;
 	ImportTime       time.Time             &lt;br /&gt;
 	CreatedBy        string                &lt;br /&gt;
 	CreatedByID      string                &lt;br /&gt;
 	Details          map[string]any&lt;br /&gt;
 	CreateTime       time.Time             &lt;br /&gt;
 	SourcesAvailable bool                  &lt;br /&gt;
 }&lt;br /&gt;
Имена полей могут использоваться в виде, где первая буква в lowercase.&lt;br /&gt;
&lt;br /&gt;
Объекты в поле &amp;lt;code&amp;gt;Details&amp;lt;/code&amp;gt; можно просмотреть, нажав на кнопку &amp;lt;code&amp;gt;View JSON&amp;lt;/code&amp;gt; в WebUI в поле &amp;lt;code&amp;gt;Snapshot Information&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
 filter(markers, &lt;br /&gt;
    snapshot.buildObject == &amp;quot;5b634b75422bd554a8569cc10bfadc3aea77b73e&amp;quot; &amp;amp;&amp;amp;&lt;br /&gt;
    .warnClass matches &amp;quot;DEREF&amp;quot;&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
== Описание языка предикатов ==&lt;br /&gt;
Для написания предикатов используется язык '''Expr'''. Детальное описание всех возможностей можно найти здесь: https://github.com/expr-lang/expr. &lt;br /&gt;
&lt;br /&gt;
Далее описываются конструкции, наиболее подходящие для написания правил фильтрации.&lt;br /&gt;
&lt;br /&gt;
=== Литералы ===&lt;br /&gt;
 Comment /* */ or //&lt;br /&gt;
 Boolean true, false&lt;br /&gt;
 Integer 42, 0x2A, 0o52, 0b101010&lt;br /&gt;
 Float 0.5, .5&lt;br /&gt;
 String &amp;quot;foo&amp;quot;, 'bar'&lt;br /&gt;
 Array [1, 2, 3]&lt;br /&gt;
 Map {a: 1, b: 2, c: 3}&lt;br /&gt;
 Nil nil&lt;br /&gt;
&lt;br /&gt;
=== Строки ===&lt;br /&gt;
Строки могут быть в одинарных и двойных кавычках. Для эскейпа используйте обратный слэш.&lt;br /&gt;
&lt;br /&gt;
Пример однострочного текста:&lt;br /&gt;
 &amp;quot;Hello\nWorld&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Пример многострочного текста:&lt;br /&gt;
 `Hello&lt;br /&gt;
 World`&lt;br /&gt;
&lt;br /&gt;
В многострочном тексте escape-последовательности не поддерживаются.&lt;br /&gt;
&lt;br /&gt;
=== Операторы ===&lt;br /&gt;
 Arithmetic: +, -, *, /, % (modulus), ^ or ** (exponent)&lt;br /&gt;
 Comparison: ==, !=, &amp;lt;, &amp;gt;, &amp;lt;=, &amp;gt;=&lt;br /&gt;
 Logical: not or !, and or &amp;amp;&amp;amp;, or or ||&lt;br /&gt;
 Conditional: ?: (ternary), ?? (nil coalescing), if {} else {} (multiline)&lt;br /&gt;
 Membership: [], ., ?., in&lt;br /&gt;
 String: + (concatenation), contains, startsWith, endsWith&lt;br /&gt;
 Regex: matches&lt;br /&gt;
 Range: ..&lt;br /&gt;
 Slice: [:]&lt;br /&gt;
 Pipe: |&lt;br /&gt;
&lt;br /&gt;
=== Операторы доступа к полю объекта ===&lt;br /&gt;
Можно использовать оператор &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; и оператор &amp;lt;code&amp;gt;[]&amp;lt;/code&amp;gt;:&lt;br /&gt;
 user.Name&lt;br /&gt;
 user[&amp;quot;Name&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
=== Оператор in ===&lt;br /&gt;
Оператор &amp;lt;code&amp;gt;in&amp;lt;/code&amp;gt; для проверки наличия объекта в массиве или мэпе:&lt;br /&gt;
 &amp;quot;John&amp;quot; in [&amp;quot;John&amp;quot;, &amp;quot;Jane&amp;quot;]&lt;br /&gt;
 &amp;quot;name&amp;quot; in {&amp;quot;name&amp;quot;: &amp;quot;John&amp;quot;, &amp;quot;age&amp;quot;: 30}&lt;br /&gt;
&lt;br /&gt;
=== Optional chaining ===&lt;br /&gt;
Оператор &amp;lt;code&amp;gt;?.&amp;lt;/code&amp;gt; может использоваться для доступа к полю структуры или элементу отображения (map) без необходимости проверки, является ли структура или отображение равными &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;. Если структура или отображение имеют значение &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;, результатом выражения будет &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пример вида:&lt;br /&gt;
 author.User?.Name&lt;br /&gt;
&lt;br /&gt;
значит то же самое, что:&lt;br /&gt;
 author.User != nil ? author.User.Name : nil&lt;br /&gt;
&lt;br /&gt;
=== Nil coalescing ===&lt;br /&gt;
Оператор &amp;lt;code&amp;gt;??&amp;lt;/code&amp;gt; может использоваться для возврата левого операнда, если он не равен &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;, в противном случае возвращается правый операнд.&lt;br /&gt;
&lt;br /&gt;
Пример вида:&lt;br /&gt;
 author.User?.Name ?? &amp;quot;Anonymous&amp;quot;&lt;br /&gt;
&lt;br /&gt;
значит то же самое, что:&lt;br /&gt;
 author.User != nil ? author.User.Name : &amp;quot;Anonymous&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Оператор конвейера ===&lt;br /&gt;
Оператор конвейера &amp;lt;code&amp;gt;|&amp;lt;/code&amp;gt; может использоваться для передачи результата выражения левого операнда в качестве первого аргумента выражения правого операнда.&lt;br /&gt;
&lt;br /&gt;
Пример вида:&lt;br /&gt;
 user.Name | lower() | split(&amp;quot; &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
значит то же самое, что:&lt;br /&gt;
 split(lower(user.Name), &amp;quot; &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=== Предикаты ===&lt;br /&gt;
Предикат — это выражение. Предикаты можно использовать в функциях, таких как &amp;lt;code&amp;gt;filter, all, any, one, none&amp;lt;/code&amp;gt; и других.&lt;br /&gt;
 filter(0..9, {# % 2 == 0})&lt;br /&gt;
 filter(tweets, {len(.Content) &amp;gt; 240})&lt;br /&gt;
&lt;br /&gt;
Скобки &amp;lt;code&amp;gt;{ }&amp;lt;/code&amp;gt; можно опускать:&lt;br /&gt;
 filter(tweets, len(.Content) &amp;gt; 240)&lt;br /&gt;
&lt;br /&gt;
=== Операции над строками ===&lt;br /&gt;
 trim(str[, chars])&lt;br /&gt;
 trimPrefix(str, prefix)&lt;br /&gt;
 trimSuffix(str, suffix)&lt;br /&gt;
 upper(str)&lt;br /&gt;
 lower(str)&lt;br /&gt;
 indexOf(str, substring)&lt;br /&gt;
 lastIndexOf(str, substring)&lt;br /&gt;
 hasPrefix(str, prefix)&lt;br /&gt;
 hasSuffix(str, suffix)&lt;br /&gt;
&lt;br /&gt;
Также есть оператор &amp;lt;code&amp;gt;matches&amp;lt;/code&amp;gt; для поиска регулярного выражения в строке:&lt;br /&gt;
 str matches &amp;quot;regular expression&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Для сопоставления целой строки с регулярным выражением следует использовать вариант:&lt;br /&gt;
 str matches &amp;quot;^regex$&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Функции времени ===&lt;br /&gt;
Поддерживаются Go типы для времени и интервалов: &amp;lt;code&amp;gt;time.Time&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;time.Duration&amp;lt;/code&amp;gt; из [https://pkg.go.dev/time time package].&lt;br /&gt;
&lt;br /&gt;
Можно использовать операции сложения и вычитания над объектами с типом &amp;lt;code&amp;gt;time.Time&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 createdAt - now()&lt;br /&gt;
 createdAt + duration(&amp;quot;1h&amp;quot;)&lt;br /&gt;
 createdAt &amp;gt; now() - duration(&amp;quot;1h&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
 date(&amp;quot;2023-08-14&amp;quot;)&lt;br /&gt;
 date(&amp;quot;15:04:05&amp;quot;)&lt;br /&gt;
 date(&amp;quot;2023-08-14T00:00:00Z&amp;quot;)&lt;br /&gt;
 date(&amp;quot;2023-08-14 00:00:00&amp;quot;, &amp;quot;2006-01-02 15:04:05&amp;quot;, &amp;quot;Europe/Zurich&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=== Функции над массивами ===&lt;br /&gt;
* &amp;lt;code&amp;gt;all(array, predicate)&amp;lt;/code&amp;gt; — все объекты должны удовлетворять предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;any(array, predicate)&amp;lt;/code&amp;gt; — должен быть по крайней мере один объект, который удовлетворяет предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;one(array, predicate)&amp;lt;/code&amp;gt; — должен быть только один объект, который удовлетворяет предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;none(array, predicate)&amp;lt;/code&amp;gt; — ни один объект не должен удовлетворять предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;find(array, predicate)&amp;lt;/code&amp;gt; — возвращает первый объект, который удовлетворяет предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;findLast(array, predicate)&amp;lt;/code&amp;gt; — возвращает последний объект, который удовлетворяет предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;count(array[, predicate])&amp;lt;/code&amp;gt; — возвращает число объектов, удовлетворяющих предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;first(array)&amp;lt;/code&amp;gt; — первый объект из массива&lt;br /&gt;
* &amp;lt;code&amp;gt;last(array)&amp;lt;/code&amp;gt; — последний объект из массива&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
 all(tweets, {.Size &amp;lt; 280})&lt;br /&gt;
 any(tweets, {.Size &amp;gt; 280})&lt;br /&gt;
 none(tweets, {.Size &amp;gt; 280})&lt;br /&gt;
 find([1, 2, 3, 4], # &amp;gt; 2) == 3&lt;br /&gt;
 findLast([1, 2, 3, 4], # &amp;gt; 2) == 4&lt;br /&gt;
 count(users, .Age &amp;gt; 18)&lt;br /&gt;
 first([1, 2, 3]) == 1&lt;br /&gt;
 last([1, 2, 3]) == 3&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Afilters&amp;diff=3453</id>
		<title>Afilters</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Afilters&amp;diff=3453"/>
		<updated>2026-01-13T10:00:39Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: return space to 'т. к.'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Advanced filters =&lt;br /&gt;
Поле &amp;quot;Расширенный фильтр&amp;quot; в пользовательских фильтрах предназначено для фильтрации маркеров (предупреждений) по сложным предикатам. &lt;br /&gt;
[[File:Image-afilters-prop.png|thumb]]&lt;br /&gt;
Предикат может использовать:&lt;br /&gt;
&lt;br /&gt;
* поля маркера, его трассы, разметки и комментариев&lt;br /&gt;
* информацию из контекста: имя проекта, ветки, снимка и т. п.&lt;br /&gt;
* атрибуты снимка, включая пользовательские атрибуты, заданные при импорте&lt;br /&gt;
* статусы разметки&lt;br /&gt;
* текст и атрибуты комментариев&lt;br /&gt;
&lt;br /&gt;
Формат фильтра определяется следующим шаблоном:&lt;br /&gt;
&lt;br /&gt;
 filter(markers, &amp;lt;predicate expr&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Выражение &amp;lt;code&amp;gt;&amp;lt;predicate expr&amp;gt;&amp;lt;/code&amp;gt; определяет предикат. Объект &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt; содержит массив маркеров из контекста, функция &amp;lt;code&amp;gt;filter&amp;lt;/code&amp;gt; фильтрует данный список по предикату. Таким образом, применение фильтра заключается в фильтрации списка маркеров по указанному предикату.&lt;br /&gt;
&lt;br /&gt;
== Список доступных полей ==&lt;br /&gt;
&lt;br /&gt;
=== Поля маркера (предупреждения) ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Comments&amp;lt;/code&amp;gt; — список комментариев маркера. Объект типа Comment (смотрите ниже)&lt;br /&gt;
* &amp;lt;code&amp;gt;Details&amp;lt;/code&amp;gt; — информация, специфичная для анализатора. Ближайший аналог — fingerprint в SARIF&lt;br /&gt;
* &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt; — имя файла&lt;br /&gt;
* &amp;lt;code&amp;gt;Function&amp;lt;/code&amp;gt; — имя функции, может быть mangled для С++&lt;br /&gt;
* &amp;lt;code&amp;gt;ID&amp;lt;/code&amp;gt; — UUID маркера&lt;br /&gt;
* &amp;lt;code&amp;gt;Invariant&amp;lt;/code&amp;gt; — инвариант маркера. Используется для автопереноса разметки между снимками&lt;br /&gt;
* &amp;lt;code&amp;gt;Lang&amp;lt;/code&amp;gt; — язык детектора&lt;br /&gt;
* &amp;lt;code&amp;gt;Line&amp;lt;/code&amp;gt; — номер строки в файле&lt;br /&gt;
* &amp;lt;code&amp;gt;LocID&amp;lt;/code&amp;gt; — порядковый номер маркера относительно изначального отчета анализатора&lt;br /&gt;
* &amp;lt;code&amp;gt;MTid&amp;lt;/code&amp;gt; — шаблон сообщения&lt;br /&gt;
* &amp;lt;code&amp;gt;Msg&amp;lt;/code&amp;gt; — текст сообщения&lt;br /&gt;
* &amp;lt;code&amp;gt;OrigFunc&amp;lt;/code&amp;gt; — 'человекочитаемое' имя функции. Может быть недоступно&lt;br /&gt;
* &amp;lt;code&amp;gt;Tags&amp;lt;/code&amp;gt; — список тегов (меток) маркера&lt;br /&gt;
* &amp;lt;code&amp;gt;Tool&amp;lt;/code&amp;gt; — модуль анализатора, ответственного за данный детектор&lt;br /&gt;
* &amp;lt;code&amp;gt;Traces&amp;lt;/code&amp;gt; — список трасс маркера. Объект типа Trace (смотрите ниже)&lt;br /&gt;
* &amp;lt;code&amp;gt;WarnClass&amp;lt;/code&amp;gt; — название детектора/класса детекторов&lt;br /&gt;
&lt;br /&gt;
Имена полей также могут использоваться в формате, где первая буква в lowercase.&lt;br /&gt;
&lt;br /&gt;
Помимо использования полей, можно использовать вспомогательные функции для доступа к дополнительной информации:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;severity(item) string&amp;lt;/code&amp;gt; — серьезность детектора (чекера)&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
 filter(markers, severity(#) == &amp;quot;Critical&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
'''Внимание:''' использование в предикатах поля &amp;lt;code&amp;gt;Trace&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;status(item) string&amp;lt;/code&amp;gt; — статус разметки текущего маркера. Пример: &amp;lt;code&amp;gt;filter(markers, status(#) == &amp;quot;Confirmed&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;action(item) string&amp;lt;/code&amp;gt; — статус поля action текущего маркера.  Пример: &amp;lt;code&amp;gt;filter(markers, action(#) == &amp;quot;Ignore&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;mseverity(item) string&amp;lt;/code&amp;gt; — статус поля severity текущего маркера (не путать с severity детектора).  Пример: &amp;lt;code&amp;gt;filter(markers, mseverity(#) == &amp;quot;Critical&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;triaged(item) bool&amp;lt;/code&amp;gt; — возвращает true, если маркер имеет не дефолтную разметку. Пример: &amp;lt;code&amp;gt;filter(markers, triaged(#))&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;get_triaged_by(item) UserInfo&amp;lt;/code&amp;gt; — возвращает структуру с информацией о пользователе, кто произвел разметку&lt;br /&gt;
&lt;br /&gt;
Поля структуры &amp;lt;code&amp;gt;UserInfo&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;login: string&amp;lt;/code&amp;gt; — логин пользователя&lt;br /&gt;
* &amp;lt;code&amp;gt;create_ts: Time (UTC)&amp;lt;/code&amp;gt; — время разметки в UTC формате (RFC3339)&lt;br /&gt;
&lt;br /&gt;
=== Комментарии ===&lt;br /&gt;
Объекты типа &amp;lt;code&amp;gt;Comment&amp;lt;/code&amp;gt; содержатся в поле &amp;lt;code&amp;gt;Comments&amp;lt;/code&amp;gt; маркера. Объект имеет следующие поля:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ID&amp;lt;/code&amp;gt; — UUID комментария&lt;br /&gt;
* &amp;lt;code&amp;gt;Text&amp;lt;/code&amp;gt; — текст комментария&lt;br /&gt;
* &amp;lt;code&amp;gt;CreatedBy&amp;lt;/code&amp;gt; — имя пользователя, кто создал комментарий&lt;br /&gt;
* &amp;lt;code&amp;gt;CreateTs&amp;lt;/code&amp;gt; — время создания комментария (объект типа &amp;lt;code&amp;gt;time.Time&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;UpdateTs&amp;lt;/code&amp;gt; — время обновления комментария (объект типа &amp;lt;code&amp;gt;time.Time&amp;lt;/code&amp;gt;), может быть пустым&lt;br /&gt;
* &amp;lt;code&amp;gt;UpdatedBy&amp;lt;/code&amp;gt; — имя пользователя, кто обновил комментарий&lt;br /&gt;
&lt;br /&gt;
=== Трассы ===&lt;br /&gt;
Маркер может содержать трассу маркера в поле &amp;lt;code&amp;gt;Traces&amp;lt;/code&amp;gt;. Трасса описывается следующими структурами:&lt;br /&gt;
 type Trace struct {&lt;br /&gt;
 	Role      string&lt;br /&gt;
 	Locations []TraceEntry&lt;br /&gt;
 }&lt;br /&gt;
 type TraceEntry struct {&lt;br /&gt;
 	File     string	&lt;br /&gt;
 	Line     uint32&lt;br /&gt;
 	Col  	 uint32	&lt;br /&gt;
 	Info 	 string&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Доступ к полям объекта &amp;lt;code&amp;gt;Trace&amp;lt;/code&amp;gt; может выполняться, используя правила языка &amp;lt;code&amp;gt;go-expr&amp;lt;/code&amp;gt;, описанные ниже.&lt;br /&gt;
&lt;br /&gt;
Имена полей могут использоваться в виде как описано выше, либо в формате lowercase: &amp;lt;code&amp;gt;role, locations, file, line, col, info&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
 filter(markers, any(.Comments, .Text == &amp;quot;Test&amp;quot;) &amp;amp;&amp;amp;&lt;br /&gt;
 		any(.Traces, any(.Locations, .Info == &amp;quot;Boolean expression has constant value&amp;quot;))&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
=== Поля снимка ===&lt;br /&gt;
Для доступа к полям снимка можно использовать переменную &amp;lt;code&amp;gt;snapshot&amp;lt;/code&amp;gt;. Переменная имеет тип структуры со следующими полями&lt;br /&gt;
&lt;br /&gt;
 struct {&lt;br /&gt;
 	ID               string                &lt;br /&gt;
 	Name             string                &lt;br /&gt;
 	SerialID         uint32                &lt;br /&gt;
 	BuildObject      string                &lt;br /&gt;
 	ResultsObject    string                &lt;br /&gt;
 	ImportTime       time.Time             &lt;br /&gt;
 	CreatedBy        string                &lt;br /&gt;
 	CreatedByID      string                &lt;br /&gt;
 	Details          map[string]any&lt;br /&gt;
 	CreateTime       time.Time             &lt;br /&gt;
 	SourcesAvailable bool                  &lt;br /&gt;
 }&lt;br /&gt;
Имена полей могут использоваться в виде, где первая буква в lowercase.&lt;br /&gt;
&lt;br /&gt;
Объекты в поле &amp;lt;code&amp;gt;Details&amp;lt;/code&amp;gt; можно просмотреть, нажав на кнопку &amp;lt;code&amp;gt;View JSON&amp;lt;/code&amp;gt; в WebUI в поле &amp;lt;code&amp;gt;Snapshot Information&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
 filter(markers, &lt;br /&gt;
    snapshot.buildObject == &amp;quot;5b634b75422bd554a8569cc10bfadc3aea77b73e&amp;quot; &amp;amp;&amp;amp;&lt;br /&gt;
    .warnClass matches &amp;quot;DEREF&amp;quot;&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
== Описание языка предикатов ==&lt;br /&gt;
Для написания предикатов используется язык '''Expr'''. Детальное описание всех возможностей можно найти здесь: https://github.com/expr-lang/expr. &lt;br /&gt;
&lt;br /&gt;
Далее описываются конструкции, наиболее подходящие для написания правил фильтрации.&lt;br /&gt;
&lt;br /&gt;
=== Литералы ===&lt;br /&gt;
 Comment /* */ or //&lt;br /&gt;
 Boolean true, false&lt;br /&gt;
 Integer 42, 0x2A, 0o52, 0b101010&lt;br /&gt;
 Float 0.5, .5&lt;br /&gt;
 String &amp;quot;foo&amp;quot;, 'bar'&lt;br /&gt;
 Array [1, 2, 3]&lt;br /&gt;
 Map {a: 1, b: 2, c: 3}&lt;br /&gt;
 Nil nil&lt;br /&gt;
&lt;br /&gt;
=== Строки ===&lt;br /&gt;
Строки могут быть в одинарных и двойных кавычках. Для эскейпа используйте обратный слэш.&lt;br /&gt;
&lt;br /&gt;
Пример однострочного текста:&lt;br /&gt;
 &amp;quot;Hello\nWorld&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Пример многострочного текста:&lt;br /&gt;
 `Hello&lt;br /&gt;
 World`&lt;br /&gt;
&lt;br /&gt;
В многострочном тексте escape-последовательности не поддерживаются.&lt;br /&gt;
&lt;br /&gt;
=== Операторы ===&lt;br /&gt;
 Arithmetic: +, -, *, /, % (modulus), ^ or ** (exponent)&lt;br /&gt;
 Comparison: ==, !=, &amp;lt;, &amp;gt;, &amp;lt;=, &amp;gt;=&lt;br /&gt;
 Logical: not or !, and or &amp;amp;&amp;amp;, or or ||&lt;br /&gt;
 Conditional: ?: (ternary), ?? (nil coalescing), if {} else {} (multiline)&lt;br /&gt;
 Membership: [], ., ?., in&lt;br /&gt;
 String: + (concatenation), contains, startsWith, endsWith&lt;br /&gt;
 Regex: matches&lt;br /&gt;
 Range: ..&lt;br /&gt;
 Slice: [:]&lt;br /&gt;
 Pipe: |&lt;br /&gt;
&lt;br /&gt;
=== Операторы доступа к полю объекта ===&lt;br /&gt;
Можно использовать оператор &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; и оператор &amp;lt;code&amp;gt;[]&amp;lt;/code&amp;gt;:&lt;br /&gt;
 user.Name&lt;br /&gt;
 user[&amp;quot;Name&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
=== Оператор in ===&lt;br /&gt;
Оператор &amp;lt;code&amp;gt;in&amp;lt;/code&amp;gt; для проверки наличия объекта в массиве или мэпе:&lt;br /&gt;
 &amp;quot;John&amp;quot; in [&amp;quot;John&amp;quot;, &amp;quot;Jane&amp;quot;]&lt;br /&gt;
 &amp;quot;name&amp;quot; in {&amp;quot;name&amp;quot;: &amp;quot;John&amp;quot;, &amp;quot;age&amp;quot;: 30}&lt;br /&gt;
&lt;br /&gt;
=== Optional chaining ===&lt;br /&gt;
Оператор &amp;lt;code&amp;gt;?.&amp;lt;/code&amp;gt; может использоваться для доступа к полю структуры или элементу отображения (map) без необходимости проверки, является ли структура или отображение равными &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;. Если структура или отображение имеют значение &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;, результатом выражения будет &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пример вида:&lt;br /&gt;
 author.User?.Name&lt;br /&gt;
&lt;br /&gt;
значит то же самое, что:&lt;br /&gt;
 author.User != nil ? author.User.Name : nil&lt;br /&gt;
&lt;br /&gt;
=== Nil coalescing ===&lt;br /&gt;
Оператор &amp;lt;code&amp;gt;??&amp;lt;/code&amp;gt; может использоваться для возврата левого операнда, если он не равен &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;, в противном случае возвращается правый операнд.&lt;br /&gt;
&lt;br /&gt;
Пример вида:&lt;br /&gt;
 author.User?.Name ?? &amp;quot;Anonymous&amp;quot;&lt;br /&gt;
&lt;br /&gt;
значит то же самое, что:&lt;br /&gt;
 author.User != nil ? author.User.Name : &amp;quot;Anonymous&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Оператор конвейера ===&lt;br /&gt;
Оператор конвейера &amp;lt;code&amp;gt;|&amp;lt;/code&amp;gt; может использоваться для передачи результата выражения левого операнда в качестве первого аргумента выражения правого операнда.&lt;br /&gt;
&lt;br /&gt;
Пример вида:&lt;br /&gt;
 user.Name | lower() | split(&amp;quot; &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
значит то же самое, что:&lt;br /&gt;
 split(lower(user.Name), &amp;quot; &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=== Предикаты ===&lt;br /&gt;
Предикат — это выражение. Предикаты можно использовать в функциях, таких как &amp;lt;code&amp;gt;filter, all, any, one, none&amp;lt;/code&amp;gt; и других.&lt;br /&gt;
 filter(0..9, {# % 2 == 0})&lt;br /&gt;
 filter(tweets, {len(.Content) &amp;gt; 240})&lt;br /&gt;
&lt;br /&gt;
Скобки &amp;lt;code&amp;gt;{ }&amp;lt;/code&amp;gt; можно опускать:&lt;br /&gt;
 filter(tweets, len(.Content) &amp;gt; 240)&lt;br /&gt;
&lt;br /&gt;
=== Операции над строками ===&lt;br /&gt;
 trim(str[, chars])&lt;br /&gt;
 trimPrefix(str, prefix)&lt;br /&gt;
 trimSuffix(str, suffix)&lt;br /&gt;
 upper(str)&lt;br /&gt;
 lower(str)&lt;br /&gt;
 indexOf(str, substring)&lt;br /&gt;
 lastIndexOf(str, substring)&lt;br /&gt;
 hasPrefix(str, prefix)&lt;br /&gt;
 hasSuffix(str, suffix)&lt;br /&gt;
&lt;br /&gt;
Также есть оператор &amp;lt;code&amp;gt;matches&amp;lt;/code&amp;gt; для поиска регулярного выражения в строке:&lt;br /&gt;
 str matches &amp;quot;regular expression&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Для сопоставления целой строки с регулярным выражением следует использовать вариант:&lt;br /&gt;
 str matches &amp;quot;^regex$&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Функции времени ===&lt;br /&gt;
Поддерживаются Go типы для времени и интервалов: &amp;lt;code&amp;gt;time.Time&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;time.Duration&amp;lt;/code&amp;gt; из [https://pkg.go.dev/time time package].&lt;br /&gt;
&lt;br /&gt;
Можно использовать операции сложения и вычитания над объектами с типом &amp;lt;code&amp;gt;time.Time&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 createdAt - now()&lt;br /&gt;
 createdAt + duration(&amp;quot;1h&amp;quot;)&lt;br /&gt;
 createdAt &amp;gt; now() - duration(&amp;quot;1h&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
 date(&amp;quot;2023-08-14&amp;quot;)&lt;br /&gt;
 date(&amp;quot;15:04:05&amp;quot;)&lt;br /&gt;
 date(&amp;quot;2023-08-14T00:00:00Z&amp;quot;)&lt;br /&gt;
 date(&amp;quot;2023-08-14 00:00:00&amp;quot;, &amp;quot;2006-01-02 15:04:05&amp;quot;, &amp;quot;Europe/Zurich&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=== Функции над массивами ===&lt;br /&gt;
* &amp;lt;code&amp;gt;all(array, predicate)&amp;lt;/code&amp;gt; — все объекты должны удовлетворять предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;any(array, predicate)&amp;lt;/code&amp;gt; — должен быть по крайней мере один объект, который удовлетворяет предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;one(array, predicate)&amp;lt;/code&amp;gt; — должен быть только один объект, который удовлетворяет предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;none(array, predicate)&amp;lt;/code&amp;gt; — ни один объект не должен удовлетворять предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;find(array, predicate)&amp;lt;/code&amp;gt; — возвращает первый объект, который удовлетворяет предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;findLast(array, predicate)&amp;lt;/code&amp;gt; — возвращает последний объект, который удовлетворяет предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;count(array[, predicate])&amp;lt;/code&amp;gt; — возвращает число объектов, удовлетворяющих предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;first(array)&amp;lt;/code&amp;gt; — первый объект из массива&lt;br /&gt;
* &amp;lt;code&amp;gt;last(array)&amp;lt;/code&amp;gt; — последний объект из массива&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
 all(tweets, {.Size &amp;lt; 280})&lt;br /&gt;
 any(tweets, {.Size &amp;gt; 280})&lt;br /&gt;
 none(tweets, {.Size &amp;gt; 280})&lt;br /&gt;
 find([1, 2, 3, 4], # &amp;gt; 2) == 3&lt;br /&gt;
 findLast([1, 2, 3, 4], # &amp;gt; 2) == 4&lt;br /&gt;
 count(users, .Age &amp;gt; 18)&lt;br /&gt;
 first([1, 2, 3]) == 1&lt;br /&gt;
 last([1, 2, 3]) == 3&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:Installation&amp;diff=3450</id>
		<title>Help:Installation</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:Installation&amp;diff=3450"/>
		<updated>2025-12-25T10:27:04Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: /* Установка и запуск на Windows */ add Windows limitations note and link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Установка и запуск ==&lt;br /&gt;
Для использования только клиента Svacer достаточно [[Svacer#Релизы|скачать исполняемый файл]] '''svacer''', или установить [[Help:Installation#Svacer|deb/rpm пакет]].&lt;br /&gt;
&lt;br /&gt;
Сервер Svacer можно запустить в [[Help:Installation#docker compose|докере]] или из [[Help:Installation#deb/rpm|deb/rpm пакета]].&lt;br /&gt;
&lt;br /&gt;
=== docker compose ===&lt;br /&gt;
Рекомендуемый и самый простой способ деплоя — развернуть сервер Svacer в докер-контейнерах, воспользовавшиcь [https://svacer.ispras.ru/extra/docker-compose.yml docker-compose.yml] файлом:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;curl -LO https://svacer.ispras.ru/extra/docker-compose.yml&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 docker compose up -d&lt;br /&gt;
&lt;br /&gt;
После запуска контейнеров веб-интерфейс Svacer будет доступен по адресу http://localhost:8080, логин / пароль — admin / admin.&lt;br /&gt;
&lt;br /&gt;
Для сборки своего докер-образа Svacer можете использовать [[Dockerfile]] в качестве референса.&lt;br /&gt;
&lt;br /&gt;
Для указания других параметров сервера можете [[Help:Configuration#Дополнительные параметры при запуске в docker|переопределить команду запуска]] в docker-compose файле.&lt;br /&gt;
&lt;br /&gt;
=== deb/rpm ===&lt;br /&gt;
==== PostgreSQL ====&lt;br /&gt;
{{Note|type=info|text=Disclaimer&lt;br /&gt;
* Рекомендуемая версия PostgreSQL — 15 и выше. С более старыми версиями корректная работа Svacer не гарантируется.&lt;br /&gt;
* Svacer требует эксклюзивного доступа к базе. Использование одной и той же базы для нескольких экземпляров Svacer может приводить к порче данных.}}&lt;br /&gt;
&lt;br /&gt;
Для работы сервера Svacer установите PostgreSQL, следуя [https://www.postgresql.org/download/linux документации postgres]. Для RedHat-based OS нужно дополнительно установить пакет postgresql-contrib соответствующей версии.&lt;br /&gt;
&lt;br /&gt;
Пример для Ubuntu 22:&lt;br /&gt;
&lt;br /&gt;
 sudo apt install -y postgresql-common&lt;br /&gt;
 sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh&lt;br /&gt;
 sudo apt install -y postgresql-17&lt;br /&gt;
&lt;br /&gt;
Пример для Rocky Linux 9.4:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 sudo dnf -qy module disable postgresql&lt;br /&gt;
 sudo dnf install -y postgresql17-server postgresql17-contrib&lt;br /&gt;
 sudo /usr/pgsql-17/bin/postgresql-17-setup initdb&lt;br /&gt;
 sudo systemctl enable postgresql-17&lt;br /&gt;
 sudo systemctl start postgresql-17&lt;br /&gt;
&lt;br /&gt;
==== Браузер для PDF-отчетов ====&lt;br /&gt;
Для создания PDF-отчетов с использованием нового HTML-генератора установите браузер Google Chrome на машину, где запускается сервер Svacer. Рекомендуется устанавливать из официального репозитория, следуя [https://www.google.com/chrome/?platform=linux инструкции с сайта google]. &lt;br /&gt;
&lt;br /&gt;
{{Note|type=info|text=Рекомендуемые системные требования при генерации PDF-отчетов для больших проектов с использованием HTML-генератора: Intel Core i9, 64 GB RAM, SSD, видеокарта Nvidia}}&lt;br /&gt;
&lt;br /&gt;
При запуске Svacer проверит доступность браузера для генерации PDF. Если он не установлен или генерация не работает, будет использован нативный генератор: менее продвинутый, но для него не нужен браузер. Можно явно включить использование нативного генератора, передав опцию &amp;lt;code&amp;gt;--pdf-generator=native&amp;lt;/code&amp;gt; при запуске сервера Svacer.&lt;br /&gt;
&lt;br /&gt;
При невозможности установить Google Chrome, например если нет пакета для вашего дистрибутива Linux, можно установить Chromium. Его пакет в репозиториях, в зависимости от вышей ОС, может называться &amp;lt;code&amp;gt;chromium-browser&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;chromium&amp;lt;/code&amp;gt;. В некоторых случаях генерация с Chromium может не работать. Например, если Svacer установлен из deb-пакета, а Сhromium из snap (на Ubuntu он устанавливается именно так даже при использовании apt) и сервер Svacer запускается от отдельного системного пользователя, от которого Chromium не может запуститься. В этом случае установите Google Chrome, с ним генерация работает.&lt;br /&gt;
&lt;br /&gt;
==== Svacer ====&lt;br /&gt;
На Debian-based OS добавьте apt-репозиторий и установите Svacer из него.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;echo 'deb [signed-by=/usr/share/keyrings/ispras.gpg] https://repo.ispras.ru/apt /' | sudo tee /etc/apt/sources.list.d/ispras.list&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;curl -fsSL https://repo.ispras.ru/apt/key.asc | sudo gpg --dearmor -o /usr/share/keyrings/ispras.gpg&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 sudo apt update&lt;br /&gt;
 sudo apt install -y svacer&lt;br /&gt;
&lt;br /&gt;
На RedHat-based OS добавьте dnf-репозиторий и установите Svacer из него&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;curl -fsSL https://repo.ispras.ru/rpm/ispras.repo | sudo tee /etc/yum.repos.d/ispras.repo&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 sudo dnf install -y svacer&lt;br /&gt;
&lt;br /&gt;
Для создания БД PostgreSQL запустите '''psql''' от учетной записи пользователя '''postgres''' &lt;br /&gt;
&lt;br /&gt;
 sudo su -l postgres&lt;br /&gt;
 psql&lt;br /&gt;
&lt;br /&gt;
И выполните следующие запросы:&lt;br /&gt;
 create database svace;&lt;br /&gt;
 create user svace with encrypted password 'svace';&lt;br /&gt;
 grant all privileges on database svace to svace;&lt;br /&gt;
 alter user svace superuser;&lt;br /&gt;
&lt;br /&gt;
В данном примере создается БД svace и права на нее выдаются пользователю svace с паролем svace. Также этому пользователю выдаются права суперюзера, что необходимо для создания расширений в PostgreSQL. При использовании этих значений по умолчанию дальнейшая конфигурация не требуется и можно переходить к запуску.&lt;br /&gt;
&lt;br /&gt;
При использовании других значений нужно поменять параметры подключения к БД в файле '''/etc/default/svacer'''&lt;br /&gt;
&lt;br /&gt;
 SVACER_ARGS=&amp;quot;--pg postgres://&amp;lt;user&amp;gt;:&amp;lt;password&amp;gt;@127.0.0.1:5432/&amp;lt;database&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
В этой же строке можно указать прочие аргументы для запуска сервера Svacer.&lt;br /&gt;
&lt;br /&gt;
На Astra Linux необходимо в файле '''/etc/parsec/mswitch.conf''' установить параметр &amp;lt;code&amp;gt;zero_if_notfound: yes&amp;lt;/code&amp;gt;, иначе при запуске Svacer будет ошибка подключения к БД вида&lt;br /&gt;
&lt;br /&gt;
 error obtaining MAC configuration for user &amp;quot;svace&amp;quot; (SQLSTATE 57P03)&lt;br /&gt;
&lt;br /&gt;
После создания БД и конфигурации сервера Svacer запустить его можно следующими командами&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl enable svacer&lt;br /&gt;
 sudo systemctl start svacer&lt;br /&gt;
&lt;br /&gt;
После чего проверить успешность запуска командой&lt;br /&gt;
&lt;br /&gt;
 systemctl status svacer&lt;br /&gt;
&lt;br /&gt;
После запуска сервер будет доступен по адресу http://localhost:8080, логин / пароль — admin / admin.&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск на Windows ===&lt;br /&gt;
{{Note|text=При запуске на Windows [[Help:Introduction#Системные_требования|поддерживается не вся функциональность сервера]]}}&lt;br /&gt;
* Скачайте установщик PostgreSQL для Windows: https://www.postgresql.org/download/windows&lt;br /&gt;
* Установите PostgreSQL, выбрав, как минимум, компоненты &amp;quot;PostgreSQL Server&amp;quot; и &amp;quot;Command Line Tools&amp;quot;&lt;br /&gt;
* Задайте пароль на шаге выбора пароля для суперпользователя&lt;br /&gt;
* Остальные параметры при установке можно оставить по умолчанию&lt;br /&gt;
* После установки PostgreSQL откройте консоль, перейдите в директорию, куда установили PostgreSQL, запустите его клиент с указанием пользователя &amp;quot;postgres&amp;quot; и авторизуйтесь с паролем, заданным во время установки&lt;br /&gt;
  cd c:\Program Files\PostgreSQL\15\bin&lt;br /&gt;
  psql -U postgres&lt;br /&gt;
* Запустится консоль управления PostgreSQL. Выполните в ней следующие команды, чтобы создать БД и пользователя для Svacer&lt;br /&gt;
  create database svace;&lt;br /&gt;
  create user svace with encrypted password 'svace';&lt;br /&gt;
  grant all privileges on database svace to svace;&lt;br /&gt;
  alter user svace superuser;&lt;br /&gt;
* Выйдите из консоли PostgreSQL&lt;br /&gt;
* Запустите '''svacer-server.exe''' из консоли с указанием параметров подключения к БД. Если при создании пользователя и БД PostgreSQL вы использовали для них имя по умолчанию 'svace', как в примере выше, то указывать данные для подключения к БД при запуске сервера не обязательно&lt;br /&gt;
  svacer-server.exe run&lt;br /&gt;
* Если создавали пользователя или БД с другими именами, то при запуске сервера надо указать их явно&lt;br /&gt;
  svacer-server.exe run --pg postgres://svacer_user:svacer_password@127.0.0.1:5432/svacer_database&lt;br /&gt;
* После запуска сервера его веб-интерфейс будет доступен по адресу http://localhost:8080, логин / пароль — admin / admin&lt;br /&gt;
&lt;br /&gt;
== Обновление ==&lt;br /&gt;
{{Note|type=reminder|text='''Перед обновлением настоятельно рекомендуется [[Help:Backup|делать резервные копии]]'''}}&lt;br /&gt;
&lt;br /&gt;
Миграции схем БД PostgreSQL и object store происходят автоматически при обновлении на новую версию Svacer. Поэтому для обновления Svacer достаточно остановить сервер старой версии, запустить сервер новой версии, указав ему те же параметры БД и object store, и подождать, пока не пройдет обновление, после чего Svacer запустится как обычно. При больших объемах данных в БД это может занять существенное время, до нескольких часов. Прогресс можно отслеживать по логам сервера. &lt;br /&gt;
&lt;br /&gt;
Версии не имеют обратной совместимости, то есть после обновления на следующую версию, откатиться на предыдущую можно будет, только восстановив БД из бэкапа.&lt;br /&gt;
&lt;br /&gt;
{{Note|type=warn|text=После запуска Svacer при обновлении обязательно дождитесь пока миграция БД завершится. Если прервать процесс во время миграции, принудительно остановив Svacer, база данных может оказаться в неконсистентном состоянии и придется восстанавливать данные из бэкапа.}}&lt;br /&gt;
&lt;br /&gt;
=== Upgrade notes ===&lt;br /&gt;
==== 12-x-x ====&lt;br /&gt;
* Рекомендуем обновить PostgreSQL до версии 15 или выше. С более старыми версиями корректная работа Svacer не гарантируется&lt;br /&gt;
* Если вы использовали аутентификацию с помощью LDAP в версиях Svacer 5-1-X и у вас не работает механизм тегирования или уведомлений (подписки), см [[LDAP_configuration#Некоторые_замечания_для_пользователей,_которые_использовали_LDAP_в_версиях_Svacer_5-1-X|решение проблем с отсутствием статуса пользователя в БД]]&lt;br /&gt;
&lt;br /&gt;
==== 11-x-x ====&lt;br /&gt;
Нет специфических рекомендаций по обновлению.&lt;br /&gt;
&lt;br /&gt;
==== 10-x-x ====&lt;br /&gt;
Нет специфических рекомендаций по обновлению.&lt;br /&gt;
&lt;br /&gt;
==== 9-0-0 ====&lt;br /&gt;
{{Note|type=reminder|text=При обновлении на эту версию рекомендуем не меньше 8GB RAM для корректности миграций}}&lt;br /&gt;
&lt;br /&gt;
Базово, никаких обязательных ручных действий с базой данных или object store при обновлении на 9-0-0 не требуется. Описанные ниже шаги могут помочь увеличить производительность сервера Svacer или решить возможные проблемы.&lt;br /&gt;
&lt;br /&gt;
'''1.''' &lt;br /&gt;
&lt;br /&gt;
В версии 9-0-0 поменялся формат object store, поэтому при обновлении с предыдущих версий Svacer на 9-0-0 или выше будет запущена конвертация object store в новый формат. Конвертация сначала записывает новые данные, а потом, если все прошло успешно, удаляет старые. Из-за этого для конвертации нужно примерно в два раза больше свободного дискового пространства, чем занимает текущий object store. При больших размерах object store и медленном диске конвертация может занять много времени.&lt;br /&gt;
&lt;br /&gt;
Конвертация запустится автоматически при обновлении на 9-0-0, но можно запустить вручную отдельно:&lt;br /&gt;
&lt;br /&gt;
 svacer-server kvconvert --from &amp;lt;path&amp;gt; --to &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расположение object store в файловой системе описано в [[Help:Backup#Бэкап object store вручную|разделе про бэкапы]].&lt;br /&gt;
&lt;br /&gt;
'''2.'''&lt;br /&gt;
&lt;br /&gt;
Перед установкой новой версии рекомендуется выполнить следующий запрос в БД для удаления дубликатов описаний чекеров.&lt;br /&gt;
&lt;br /&gt;
 delete from checkers where id not in (select max(id) from checkers group by (config_id, checker_id, languages, tools));&lt;br /&gt;
&lt;br /&gt;
Если вы уже выполняли этот запрос при [[Help:Installation#8-0-0|обновлении на 8-0-0]], то второй раз запускать не обязательно.&lt;br /&gt;
&lt;br /&gt;
'''3.'''&lt;br /&gt;
&lt;br /&gt;
После обновления на версию 9-0-0 и завершения всех миграций БД (когда станет доступен веб-интерфейс) рекомендуем выполнить команду &amp;lt;code&amp;gt;VACUUM FULL&amp;lt;/code&amp;gt; в PostgreSQL для очистки и оптимизации базы данных.&lt;br /&gt;
&lt;br /&gt;
 psql -h &amp;lt;postgres_host&amp;gt; -U &amp;lt;username&amp;gt; &amp;lt;svacer_database_name&amp;gt; -c 'VACUUM FULL;'&lt;br /&gt;
&lt;br /&gt;
Например: &lt;br /&gt;
&lt;br /&gt;
 psql -h localhost -U svacer svacer_db -c 'VACUUM FULL;'&lt;br /&gt;
&lt;br /&gt;
==== 8-0-0 ====&lt;br /&gt;
Если при обновлении на версию 8-0-0 и выше возникает подобная ошибка&lt;br /&gt;
 Key (config_id, checker_id, languages, tools)=(4cd178ce-a2b2-4692-a45a-f84b145c807b, FB.ICAST_QUESTIONABLE_UNSIGNED_RIGHT_SHIFT, {JAVA}, {SpotBugs}) is duplicated&lt;br /&gt;
Это значит, что в БД есть дубликаты чекеров. Выполните следующий SQL-запрос в PostgreSQL-базе Svacer, чтобы удалить их:&lt;br /&gt;
 delete from checkers where id not in (select max(id) from checkers group by (config_id, checker_id, languages, tools));&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:Introduction&amp;diff=3449</id>
		<title>Help:Introduction</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:Introduction&amp;diff=3449"/>
		<updated>2025-12-25T10:13:29Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: /* Системные требования */ add Windows limitations&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Help]]&lt;br /&gt;
== Введение ==&lt;br /&gt;
&lt;br /&gt;
Svacer предназначен для хранения и обработки результатов статического анализатора Svace и других анализаторов, поддерживающих формат [[Help:Sarif#Загрузка_на_сервер_из_SARIF|SARIF]].&lt;br /&gt;
&lt;br /&gt;
Svacer состоит из двух исполняемых файлов: сервера и клиента&lt;br /&gt;
* Сервер используется для хранения и обработки результатов анализа, для [[Help:Installation|запуска]] нужен PostgreSQL с созданной БД&lt;br /&gt;
* Клиент — для взаимодействия с сервером, для него никакие зависимости не требуются&lt;br /&gt;
&lt;br /&gt;
Запущенный сервер Svacer предоставляет [[Help:UI_manual#Авторизация_в_пользовательском_интерфейсе_сервера_Svacer|web-UI]] и [[Help:Public_API|REST API]] для взаимодействия. &lt;br /&gt;
&lt;br /&gt;
В клиенте Svacer доступны команды для [[Help:Import_from_Svace|импорта]] предупреждений, [[Help:Import_from_Svace#Загрузка_данных_на_сервер|загрузки]] их на сервер и прочего взаимодействия с сервером.&lt;br /&gt;
&lt;br /&gt;
=== Термины ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Project&lt;br /&gt;
| Проект, подлежащий анализу. По умолчанию именем проекта считается имя директории, в которой был запущен ''svace build'' и ''svace analyze''.&lt;br /&gt;
На сервере проект содержит в себе несколько веток с результатами работы анализатора&lt;br /&gt;
|-&lt;br /&gt;
| Branch (ветка)&lt;br /&gt;
| Ветка в проекте с результатами работы анализатора. По умолчанию — master&lt;br /&gt;
|-&lt;br /&gt;
| Snapshot (снимок)&lt;br /&gt;
| Результат работы ''svace analyze'', импортированный в промежуточное хранилище или на сервер. Содержит:&lt;br /&gt;
* имя проекта;&lt;br /&gt;
* имя ветки;&lt;br /&gt;
* результаты анализа (предупреждения);&lt;br /&gt;
* исходники, которые были включены в build, на котором производился анализ;&lt;br /&gt;
* вспомогательная информация для навигации по исходникам;&lt;br /&gt;
* дополнительные данные;&lt;br /&gt;
Допускается импорт снимков без исходного кода и дополнительной информации&lt;br /&gt;
|-&lt;br /&gt;
| Marker (маркер, предупреждение)&lt;br /&gt;
| Предупреждение от статического анализатора с информацией о позиции в исходном файле&lt;br /&gt;
|-&lt;br /&gt;
| Разметка&lt;br /&gt;
| Проставление статуса маркера с опциональным добавлением комментария&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;
| bin/svacer-server&lt;br /&gt;
| Бинарный файл сервера&lt;br /&gt;
|- &lt;br /&gt;
| bin/svacer-server.sig&lt;br /&gt;
| Файл подписи сервера&lt;br /&gt;
|-&lt;br /&gt;
| bin/svacer&lt;br /&gt;
| Бинарный файл клиента&lt;br /&gt;
|-&lt;br /&gt;
| bin/svacerai-server&lt;br /&gt;
| Бинарный файл сервера [[Help:XSvacer:AIAssistant|ИИ-ассистента]]&lt;br /&gt;
|-&lt;br /&gt;
| bin/pdfmerge&amp;lt;/br&amp;gt;bin/libpdfium.so&lt;br /&gt;
| Бинарный файл и библиотека для [[Help:Installation#Генерация_PDF_на_основе_HTML|нового PDF-генератора]]&lt;br /&gt;
|-&lt;br /&gt;
| extra/docker-compose*.yml &lt;br /&gt;
| docker-compose файлы для запуска Svacer в docker-контейнерах&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;
| PostgreSQL&lt;br /&gt;
| Нужен только для сервера. Рекомендуемая версия — 15 и выше. С более старыми версиями корректная работа Svacer не гарантируется.&lt;br /&gt;
|-&lt;br /&gt;
| libc.so&amp;lt;br&amp;gt;libpthread.so&amp;lt;br&amp;gt;libdl.so&amp;lt;br&amp;gt;linux-vdso.so&lt;br /&gt;
| Серверная часть написана на Go с CGO_ENABLED=1 ввиду необходимости читать sqlite-файлы из результатов работы анализатора Svace&lt;br /&gt;
|-&lt;br /&gt;
| Директория для хранения object storage&lt;br /&gt;
| Сервер использует встроенную key-value database для хранения информации об исходном коде: контент-файлов и вспомогательной информации для навигации&lt;br /&gt;
|-&lt;br /&gt;
| Svace&lt;br /&gt;
| Нужен для импорта результатов анализа из .svace-dir. При этом лицензия на Svace нужна только для анализа, для импорта она не требуется&lt;br /&gt;
|}&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;
| 3002&lt;br /&gt;
| Используется для предоставления gRPC API (внутренний API для загрузки данных на сервер)&lt;br /&gt;
|-&lt;br /&gt;
| 8080&lt;br /&gt;
| Используется для REST API и web-сервера для предоставления web-UI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Системные требования ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| CPU&lt;br /&gt;
| x86-64. Для больших проектов рекомендуется не менее 8 ядер&lt;br /&gt;
|-&lt;br /&gt;
| RAM&lt;br /&gt;
| От 4 ГБ. При обновлении между версиями лучше не меньше 8 ГБ. Для больших проектов — 16+ ГБ&lt;br /&gt;
|-&lt;br /&gt;
| HDD&lt;br /&gt;
| От 1 ГБ до нескольких ТБ при хранении множества снимков больших проектов&lt;br /&gt;
|-&lt;br /&gt;
| OS&lt;br /&gt;
| &lt;br /&gt;
* Ubuntu 18 и выше&lt;br /&gt;
* Debian 10 и выше&lt;br /&gt;
* RHEL/CentOS 8&lt;br /&gt;
* Rocky Linux 9 и выше&lt;br /&gt;
* Astra Linux Special Edition 1.7, базовый уровень защищенности&lt;br /&gt;
* Alt Linux p8 и выше&lt;br /&gt;
* Microsoft Windows 10 &lt;br /&gt;
&lt;br /&gt;
Функциональность сервера при запуске на Windows ограничена:&lt;br /&gt;
* Не поддерживается запуск сервера с параметром --svace: не будет работать импорт .svace-dir через WebUI и REST API&lt;br /&gt;
* Не поддерживается [[Help:Installation#Браузер_для_PDF-отчетов|генерация PDF на основе HTML]]&lt;br /&gt;
|-&lt;br /&gt;
| Browser&lt;br /&gt;
|&lt;br /&gt;
Для работы с веб-интерфейсом&lt;br /&gt;
* Chrome 103 и выше&lt;br /&gt;
* Firefox 100 и выше&lt;br /&gt;
* Opera 89 и выше&lt;br /&gt;
* Safari 16 и выше&lt;br /&gt;
* Edge 103 и выше&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Review_replication&amp;diff=3448</id>
		<title>Review replication</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Review_replication&amp;diff=3448"/>
		<updated>2025-12-18T12:14:46Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: minor fixes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Репликация разметки по правилам (экспериментальная функциональность) ==&lt;br /&gt;
При использовании разных версий Svace (или иных анализаторов), разных настроек CI/CD и прочих факторах возможны ситуации, когда снимки (snapshots) в рамках одной ветки (branch) могут иметь различные инварианты и разметка автоматически не переносится. Для решения задачи переноса разметки в таких случаях разработана утилита '''reviewer''', которая позволяет применить декларативно описанные правила переноса к существующей разметке. В дальнейшем данная функциональность будет включена в Svacer и доступна в веб-интерфейсе.&lt;br /&gt;
&lt;br /&gt;
Использование утилиты подразумевает использование CLI команд &amp;lt;code&amp;gt;svacer markup2 export&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;svacer markup2 import&amp;lt;/code&amp;gt; ([[Markup2|описание markup2]]) для выгрузки и импортирования разметки. Утилита reviewer обеспечивает модификацию выгружаемой разметки с целью копирования существующей разметки на неразмеченные элементы. Правила копирования задаются с использованием булевых выражений и набора предопределенных предикатов.&lt;br /&gt;
&lt;br /&gt;
=== Описание утилиты ===&lt;br /&gt;
Утилита reviewer предназначена для Svacer версии 10 и выше. Утилита собрана под Linux, скачать можно [https://svacer.ispras.ru/releases/utils/reviewer отсюда].&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;
|devel.2025-12-18@05:11:18.075773d1&lt;br /&gt;
|&lt;br /&gt;
* Добавлена команда &amp;lt;code&amp;gt;reviewer migrate save&amp;lt;/code&amp;gt; для сохранения разметки и комментариев из базы&lt;br /&gt;
* Добавлена команда &amp;lt;code&amp;gt;reviewer migrate restore&amp;lt;/code&amp;gt; для восстановления разметки и комментариев&lt;br /&gt;
&lt;br /&gt;
Команды предназначены для исправления пропущенной разметки или комментариев при апгрейде со старых версий Svacer на последний релиз. &lt;br /&gt;
&lt;br /&gt;
Команды работают напрямую с базой. Могут также использоваться для бэкапа данных разметки и комментариев&lt;br /&gt;
|-&lt;br /&gt;
|devel.2025-09-15@04:26:40.654d90f2&lt;br /&gt;
|&lt;br /&gt;
* Добавлен флаг &amp;lt;code&amp;gt;--autofix-duplicate-invariants&amp;lt;/code&amp;gt; для дублей инвариантов&lt;br /&gt;
* Добавлен флаг &amp;lt;code&amp;gt;--autofix-all&amp;lt;/code&amp;gt; для дублей комментариев, инвариантов и потенциально иных проблем&lt;br /&gt;
* Добавлена команда &amp;lt;code&amp;gt;safe-copy&amp;lt;/code&amp;gt;для копирования разметки между ветками с автоисправлением дублей комментариев и инвариантов&lt;br /&gt;
|-&lt;br /&gt;
|devel.2025-07-16@07:20:59.90a60fcd&lt;br /&gt;
|&lt;br /&gt;
* Добавлен флаг &amp;lt;code&amp;gt;--autofix-duplicate-comments&amp;lt;/code&amp;gt;  для удаления дублей комментариев, которые по какой-либо причине могут быть в исходных данных&lt;br /&gt;
|-&lt;br /&gt;
|devel.2025-07-14@07:20:15.74259281&lt;br /&gt;
|&lt;br /&gt;
* В журнал операций добавлены old/new статусы при операции replicate&lt;br /&gt;
* Добавлены вспомогательные функции &amp;lt;code&amp;gt;source_review_ct&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;target_review_ct&amp;lt;/code&amp;gt; для получения времени разметки на source и target. Их можно использовать в предикатах&lt;br /&gt;
* Добавлено ассоциирование комментария с разметкой при репликации&lt;br /&gt;
* Добавлен ряд вспомогательных команд&lt;br /&gt;
|-&lt;br /&gt;
|devel.2025-06-03@09:35:03.ab170f00&lt;br /&gt;
|&lt;br /&gt;
* Исправлена работа при репликации разметки между разными проектами/ветками&lt;br /&gt;
|-&lt;br /&gt;
|devel.2025-05-26@06:18:01.853591f1&lt;br /&gt;
|&lt;br /&gt;
* Улучшено HTML-представление отчета&lt;br /&gt;
* Добавлен предикат &amp;lt;code&amp;gt;match_prefix_re&amp;lt;/code&amp;gt; по аналогии с &amp;lt;code&amp;gt;match_suffix_re&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|devel.2025-04-22@06:39:21.a3bc1bc1&lt;br /&gt;
|&lt;br /&gt;
* Добавлены предикаты &amp;lt;code&amp;gt;same_go_path&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;match_go_path&amp;lt;/code&amp;gt; для упрощения написания правил при переносе разметки для Go проектов, где версии модулей меняются&lt;br /&gt;
|-&lt;br /&gt;
|devel.2025-04-21@04:53:47.15a3d5c0&lt;br /&gt;
|&lt;br /&gt;
* Добавлена версия&lt;br /&gt;
* Добавлена генерация журнала изменений&lt;br /&gt;
* Добавлена генерация информации о снимках при работе с сервером&lt;br /&gt;
* В результат записываются только обновленные разметки&lt;br /&gt;
* Добавлена возможность указания снимков в качестве фильтра (при условии работы с сервером)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Использование ====&lt;br /&gt;
 NAME:&lt;br /&gt;
    reviewer - Svacer review help tool&lt;br /&gt;
 &lt;br /&gt;
 USAGE:&lt;br /&gt;
    reviewer [global options] command [command options] [arguments...]&lt;br /&gt;
 &lt;br /&gt;
 VERSION:&lt;br /&gt;
    devel.2025-04-21@04:53:47.15a3d5c0&lt;br /&gt;
 &lt;br /&gt;
 COMMANDS:&lt;br /&gt;
    syntax      Prints help information about rule syntax&lt;br /&gt;
    invariants  Get information about invariants from branch. Output format is ReviewModificationJournal.SnapshotList with invariants  &lt;br /&gt;
    replicate   Replicate non-empty review to invariants according to rules.&lt;br /&gt;
                Review can be loaded either from file(s) or from server. &lt;br /&gt;
 &lt;br /&gt;
                Review is replicated from source project/branch or file to target project/branch or file.&lt;br /&gt;
 &lt;br /&gt;
                If no target project/branch or file is specified, replication is applied to source project/branch or file. This can be used to copy review within the same container.&lt;br /&gt;
 &lt;br /&gt;
                Result is written to stdout or file. Reviewer does not update data on server.&lt;br /&gt;
 &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              Enabled debug output (default: false)&lt;br /&gt;
    --log-file value     Define log file for output&lt;br /&gt;
    --host value         Defines URL to svacer server. Format: &amp;lt;nowiki&amp;gt;http://host:port&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
    --user value         User login. When using env variable SVACER_AUTH_CREDS the format is SVACER_AUTH_CREDS=&amp;lt;login&amp;gt;:&amp;lt;password&amp;gt; (default: admin) [$SVACER_AUTH_CREDS]&lt;br /&gt;
    --password value     User password&lt;br /&gt;
    --ldap_server value  Server for LDAP authentication [$SVACER_LDAP_SERVER]&lt;br /&gt;
    --token value        Defines access token for svacer server [$SVACER_AUTH_TOKEN]&lt;br /&gt;
    --help               Show help (default: false)&lt;br /&gt;
    --version            Print version the program (default: false)&lt;br /&gt;
&lt;br /&gt;
Основная команда — '''replicate''', она позволяет применить декларативные правила к разметке, полученной либо с сервера, либо из файла, куда ранее была выгружена командой &amp;lt;code&amp;gt;svacer markup2 export&amp;lt;/code&amp;gt;. Результат работы команды — файл с разметкой, предназначенный для загрузки в Svacer посредством команды &amp;lt;code&amp;gt;svacer markup2 import&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 NAME:&lt;br /&gt;
    reviewer replicate - Replicate non-empty review to invariants according to rules.&lt;br /&gt;
                         Review can be loaded either from file(s) or from server. &lt;br /&gt;
 &lt;br /&gt;
                         Review is replicated from source project/branch or file to target project/branch or file.&lt;br /&gt;
 &lt;br /&gt;
                         If no target project/branch or file is specified, replication is applied to source project/branch or file. This can be used to copy review within the same container.&lt;br /&gt;
 &lt;br /&gt;
                         Result is written to stdout or file. Reviewer does not update data on server.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 USAGE:&lt;br /&gt;
    reviewer replicate [command options] &amp;lt;file name&amp;gt; - path to result file&lt;br /&gt;
 &lt;br /&gt;
 OPTIONS:&lt;br /&gt;
    --project value          Project name or id&lt;br /&gt;
    --branch value           Branch name or id (default: master)&lt;br /&gt;
    --target-project value   Project name or id of the target project&lt;br /&gt;
    --target-branch value    Branch name or id of the target branch (default: master)&lt;br /&gt;
    --source-snapshot value  Snapshot name or id. Replicate reviews only from given snapshot. Host, project and branch must be provided&lt;br /&gt;
    --target-snapshot value  Snapshot name or id. Replicate reviews only to given snapshot. Host, project and branch must be provided&lt;br /&gt;
    --file value             Load review from file instead of server. File must be in 'json with new line separator' format. File may be gzipped (must have *.gz extension)&lt;br /&gt;
    --target-file value      Load target review from file instead of server. File must be in 'json with new line separator' format. File may be gzipped (must have *.gz extension)&lt;br /&gt;
    --rule value             Path to file containing replicate rules&lt;br /&gt;
    --html                   Produce HTML report describing applied changes. Report is saved to &amp;lt;result file name&amp;gt;.html (default: false)&lt;br /&gt;
    --verbose                Verbose output of rule applications (default: false)&lt;br /&gt;
    --process-all            Process all reviews, even with non-default values (default: false)&lt;br /&gt;
    --skip-comments          Skip comments while replicating review information (default: false)&lt;br /&gt;
    --skip-status            Skip review status and copy only comments while replicating review information (default: false)&lt;br /&gt;
    --journal value          Write journal of modifications to specified file&lt;br /&gt;
    --help                   Show help (default: false)&lt;br /&gt;
&lt;br /&gt;
Опция '''--journal''' позволяет указать файл, куда будет записана информация о проведенных изменениях в JSON формате. Пример такого файла&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
     &amp;quot;actions&amp;quot;: [&lt;br /&gt;
         {&lt;br /&gt;
             &amp;quot;source_invariant&amp;quot;: &amp;quot;LX/DOWQxqWSdqMw1zBGr/A&amp;quot;,&lt;br /&gt;
             &amp;quot;target_invariant&amp;quot;: &amp;quot;7YlVnmb/kAkwyxNBjCagiQ&amp;quot;,&lt;br /&gt;
             &amp;quot;rule&amp;quot;: &amp;quot;unprocessed() &amp;amp;&amp;amp;  // ensure target has no review\n        match_loc(warnclass,file,lang,tool,mtid, line) &amp;amp;&amp;amp; // ensure main fields are the same\n        match_suffix_re (function, \&amp;quot;(.+/)\&amp;quot; /* regexp for prefix */ ) // trim prefix and match suffix&amp;quot;,&lt;br /&gt;
             &amp;quot;source_id&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
             &amp;quot;target_id&amp;quot;: &amp;quot;13&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
     ]&lt;br /&gt;
 } &lt;br /&gt;
&lt;br /&gt;
=== Шаги применения утилиты ===&lt;br /&gt;
'''Задача:''' в проекте myproject на ветке master необходимо перенести существующую разметку по некоторым правилам. Сервер запущен на localhost на порту 8080.&lt;br /&gt;
&lt;br /&gt;
'''Шаги решения:'''&lt;br /&gt;
&lt;br /&gt;
1. Опционально, но рекомендуется выгрузить разметку с ветки в файл, используя команду&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;svacer markup2 --host=http://localhost:8080 --user admin --password admin export --project myproject --branch master --uncompressed --format json --export-all /tmp/myproject.json&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Написать правила переноса разметки (предикатов переноса) в файл &amp;lt;code&amp;gt;/tmp/map.txt&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
3. Если разметка была выгружена (шаг 1 выполнен), то применить утилиту reviewer '''с загрузкой данных из файла'''. Флаг &amp;lt;code&amp;gt;--html&amp;lt;/code&amp;gt; создаст дополнительно HTML с информацией об изменениях, имя файла &amp;lt;code&amp;gt;/tmp/out.json.html&amp;lt;/code&amp;gt;. Журнал изменений будет записан в файл &amp;lt;code&amp;gt;replicate_journal.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 reviewer replicate --file /tmp/myproject.json --rule /tmp/map.txt --journal /tmp/replicate_journal.json --html /tmp/out.json&lt;br /&gt;
&lt;br /&gt;
4. Если разметка не была выгружена (шаг 1 пропущен) применить утилиту reviewer '''с загрузкой данных с сервера'''. Флаг &amp;lt;code&amp;gt;--html&amp;lt;/code&amp;gt; создаст дополнительно HTML с информацией об изменениях, имя файла &amp;lt;code&amp;gt;/tmp/out.json.html&amp;lt;/code&amp;gt;. Журнал изменений будет записан в файл &amp;lt;code&amp;gt;replicate_journal.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;reviewer --host=http://localhost:8080 --user admin --password admin replicate --project myproject --branch master --rule /tmp/map.txt --journal /tmp/replicate_journal.json --html /tmp/out.json&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. Проанализировать созданный журнал изменений и файл &amp;lt;code&amp;gt;/tmp/out.json.html&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. Если результат устраивает, то загрузить обновленную разметку в сервер из файла &amp;lt;code&amp;gt;/tmp/out.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;svacer markup2 --host=http://localhost:8080 --user admin --password admin import --project myproject --branch master /tmp/out.json&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Примечания'''&lt;br /&gt;
&lt;br /&gt;
Разметка в Svacer привязана к инвариантам. Инвариант это некоторый хэш, формируемый из полей предупреждения. Алгоритм формирования хэша описан в [[Help:Match#Описание алгоритма|этой статье]]. В рамках одного снимка все инварианты всегда уникальны.&lt;br /&gt;
&lt;br /&gt;
Команда &amp;lt;code&amp;gt;markup2 export&amp;lt;/code&amp;gt; с флагом &amp;lt;code&amp;gt;--export-all&amp;lt;/code&amp;gt; выгружает все инварианты с ветки с информацией о разметке и комментариях. &lt;br /&gt;
&lt;br /&gt;
При экспорте разметка на инварианте представлена как объект, соответствующий схеме, описанной в статье [[Markup2]]. Технически это:  &lt;br /&gt;
&lt;br /&gt;
* статус (тройка &amp;lt;code&amp;gt;status, severity, action&amp;lt;/code&amp;gt;)&lt;br /&gt;
* набор комментариев &lt;br /&gt;
* массив locations, которые определяют множество мест, имеющих один и тот же инвариант&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм переноса разметки ===&lt;br /&gt;
Входные данные (разметка), полученные из файла или с сервера разбиваются на два вектора source и target. В source включаются все элементы с разметкой, отличной от разметки по умолчанию. В target включаются все оставшиеся элементы. Порядок элементов в source и target соответствует порядку объектов во входных данных (файле). &lt;br /&gt;
&lt;br /&gt;
Если указана опция &amp;lt;code&amp;gt;--process-all&amp;lt;/code&amp;gt; , то в source и target включаются все элементы (данную опцию следует использовать для случаев, если мы хотим заместить существующую разметку, а не перенести разметку на неразмеченные элементы)&lt;br /&gt;
&lt;br /&gt;
Процедура проходит по всем парам &amp;lt;code&amp;gt;(source_item,target_item)&amp;lt;/code&amp;gt; и для каждой пары вычисляет предикаты из файла с правилами в порядке их определения. Если какой-либо предикат вычислен в true, то происходит копирование статусов разметки  и комментариев с &amp;lt;code&amp;gt;source_item&amp;lt;/code&amp;gt; на &amp;lt;code&amp;gt;target_item&amp;lt;/code&amp;gt;. Во избежание перезаписи разметки можно в правилах использовать предикат &amp;lt;code&amp;gt;unprocessed()&amp;lt;/code&amp;gt; описанный ниже.&lt;br /&gt;
&lt;br /&gt;
==== Файл задания предикатов переноса ====&lt;br /&gt;
Формат файла: UTF-8. Правила разделяются &amp;lt;code&amp;gt;;;&amp;lt;/code&amp;gt;. В качестве комментариев допустимы &amp;lt;code&amp;gt;/**/&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Правила — это булевы выражение в синтаксисе [https://expr-lang.org/docs/language-definition go-expr],  выражения использует операторы &amp;lt;code&amp;gt;&amp;amp;&amp;amp;, ||, !&amp;lt;/code&amp;gt;, скобки и следующие дополнительные предикаты: &lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;unprocessed()&amp;lt;/code&amp;gt; — проверка, что target еще не содержит разметки. Рекомендуется использовать, чтобы избежать перезаписи разметки, если несколько правил сработали; при наличии такого предиката разметка будет скопирована лишь один раз для первого сработавшего предиката;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;processed()&amp;lt;/code&amp;gt; — проверка, что target уже содержит какую-либо не дефолтную разметку;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;match_loc(field1, field2, ...)&amp;lt;/code&amp;gt; — проверка, содержат ли locations в source и target хотя бы один общий location, который совпадает по указанным полям. Возможные поля: &amp;lt;code&amp;gt;warnclass, function, details, invariant, line, file, mtid, tool, lang&amp;lt;/code&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
:Пример: &amp;lt;code&amp;gt;match_loc(warnclass,file,lang,tool,line)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;match_loc_strict(field1, field2, ...)&amp;lt;/code&amp;gt; — проверка, содержат ли locations source и target одинаковые location по указанным полям;&lt;br /&gt;
&lt;br /&gt;
:Пример: &amp;lt;code&amp;gt;match_loc_strict(warnclass,file,lang,tool,line)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;match_source_re(field, value)&amp;lt;/code&amp;gt; — проверка, содержит ли location в source запись, где field совпадает с value. Value — Golang regexp;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;match_target_re(field, value)&amp;lt;/code&amp;gt; — проверка, содержит ли location в target запись где field совпадает с value. Value — Golang regexp;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;source_review(status[, severity, action])&amp;lt;/code&amp;gt; — проверка, если разметка source соответствует указанным параметрам. &amp;lt;code&amp;gt;severity, action&amp;lt;/code&amp;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;target_review(status[, severity, action])&amp;lt;/code&amp;gt; — проверка, если разметка target соответствует указанным параметрам. &amp;lt;code&amp;gt;severity, action&amp;lt;/code&amp;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;match_source_range(lower_bound,upper_bound)&amp;lt;/code&amp;gt; — проверка, если в source есть location, где line попадает в указанный диапазон. Значение &amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt; означает отсутствие границы;   &lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;match_target_range(lower_bound,upper_bound)&amp;lt;/code&amp;gt; — проверка, если в target есть location, где line попадает в указанный диапазон. Значение &amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt; означает отсутствие границы;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;match_suffix_re(field, source_prefix[,target_prefix])&amp;lt;/code&amp;gt; — проверка, есть ли location в source и target, который содержит общий суффикс. Суффикс вычисляется путем отрезания префикса source_prefix и target_prefix. Если target_prefix не указан, то считается, что он равен source_prefix. Префикс определяется как Go regexp;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;match_source_id(id1, id2, ...)&amp;lt;/code&amp;gt; — проверка, если внутренний id source разметки совпадает с одним из аргументов;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;match_target_id(id1, id2, ...)&amp;lt;/code&amp;gt; — проверка, если внутренний id target разметки совпадает с одним из аргументов;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;source_review_ct() time.Time&amp;lt;/code&amp;gt; — возвращает время создания разметки в source;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;target_review_ct() time.Time&amp;lt;/code&amp;gt; — возвращает время создания разметки в target;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;source_reviewed_by() string&amp;lt;/code&amp;gt; — возвращает автора разметки в source;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;target_reviewed_by() string&amp;lt;/code&amp;gt; — возвращает автора разметки в target.&lt;br /&gt;
&lt;br /&gt;
==== Пример предиката ====&lt;br /&gt;
 // Перенос разметки для Go, где поменялся формат поля function в последних Svace&lt;br /&gt;
 &lt;br /&gt;
 unprocessed() &amp;amp;&amp;amp;  // ensure target has no review&lt;br /&gt;
         match_loc(warnclass,file,lang,tool,mtid, line) &amp;amp;&amp;amp; // ensure main fields are the same&lt;br /&gt;
         match_suffix_re (function, &amp;quot;(.+/)&amp;quot; /* regexp for prefix */ ) // trim prefix and match suffix&lt;br /&gt;
Файл с тремя предикатами, для случая изменения версий go модулей в пакете go-jmespath (&amp;lt;code&amp;gt;jmespath -&amp;gt; go-jmespath&amp;lt;/code&amp;gt;)&lt;br /&gt;
 // common case for function changes&lt;br /&gt;
 unprocessed() &amp;amp;&amp;amp; &lt;br /&gt;
         match_loc(warnclass,file,lang,tool,mtid, line) &amp;amp;&amp;amp;&lt;br /&gt;
         match_suffix_re (function, &amp;quot;(.+/)&amp;quot; /* regexp for prefix */ ) &lt;br /&gt;
 ;;&lt;br /&gt;
 // handle go-jmespath case&lt;br /&gt;
 unprocessed() &amp;amp;&amp;amp; &lt;br /&gt;
         match_source_re(lang, &amp;quot;GO|Go&amp;quot;) &amp;amp;&amp;amp; match_target_re(lang, &amp;quot;GO|Go&amp;quot;) &amp;amp;&amp;amp; &lt;br /&gt;
         match_loc(warnclass,file,lang,tool,mtid, line, details)&lt;br /&gt;
 ;;&lt;br /&gt;
 // handle go mod versions&lt;br /&gt;
 unprocessed() &amp;amp;&amp;amp; &lt;br /&gt;
         match_loc(warnclass,lang,tool,mtid, line) &amp;amp;&amp;amp;&lt;br /&gt;
         match_source_re(lang, &amp;quot;GO|Go&amp;quot;) &amp;amp;&amp;amp; match_target_re(lang, &amp;quot;GO|Go&amp;quot;) &amp;amp;&amp;amp; &lt;br /&gt;
         same_go_path() &amp;amp;&amp;amp;&lt;br /&gt;
         match_suffix_re (function, &amp;quot;(.+/)&amp;quot; /* regexp for prefix */ ) &lt;br /&gt;
&lt;br /&gt;
==== HTML отчет о результатах переноса ====&lt;br /&gt;
При использовании опции &amp;lt;code&amp;gt;--html&amp;lt;/code&amp;gt;утилита формирует HTML файл с информацией о разметке и операциях по переносу. Файл предназначен для отладки процесса переноса. В будущем, в Svacer UI будет предусмотрен специальный интерфейс для просмотра результатов переноса. &lt;br /&gt;
[[File:ReviewerHTML1.png|none|thumb]]&lt;br /&gt;
&lt;br /&gt;
При наличии переноса разметки в столбце с Review будет запись Review Source со ссылкой на элемент, откуда была перенесена разметка.&lt;br /&gt;
[[File:ReviewerHTMLReport2.png|none|thumb]]&lt;br /&gt;
&lt;br /&gt;
При раскрытии элемента Review Source будут представлены основные поля location, соответствующих исходной разметке, откуда был сделан перенос.&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:AIAssistant&amp;diff=3447</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=3447"/>
		<updated>2025-12-18T11:52:06Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: Undo revision 3442 by Mitrofanov (talk)&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;
== Активация и запуск ИИ-ассистента ==&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;
|Путь к [[Help:XSvacer:AIAssistant#Конфигурация по умолчанию|конфигурационному файлу]]&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; — идентификатор сервиса моделей в [[Help:XSvacer:AIAssistant#Конфигурация по умолчанию|конфигурации]]&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;
|См. [[Help:XSvacer:AIAssistant#Конфигурация по умолчанию|конфигурацию по умолчанию]]&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>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:UI_manual&amp;diff=3441</id>
		<title>Help:UI manual</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:UI_manual&amp;diff=3441"/>
		<updated>2025-12-04T14:47:08Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: review and minor fixes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;На этой странице приведена инструкция по работе в пользовательском интерфейсе сервера Svacer.&lt;br /&gt;
&lt;br /&gt;
== Авторизация в пользовательском интерфейсе сервера Svacer ==&lt;br /&gt;
&lt;br /&gt;
Для авторизации в пользовательском интерфейсе сервера Svacer введите логин и пароль на странице ввода учётных данных. Учётные данные по умолчанию — admin / admin.&lt;br /&gt;
[[File:Авторизация 01.png|thumb|none|x300px|alt=AutorizationMain|Страница ввода учетных данных]]&lt;br /&gt;
&lt;br /&gt;
Если на сервере настроена поддержка протокола LDAP, то войти можно с помощью внешних серверов. Для этого:&lt;br /&gt;
&lt;br /&gt;
# На странице ввода учетных данных перейдите на вкладку '''LDAP'''.&lt;br /&gt;
# Выберите LDAP-сервер в списке, если настроено больше одного сервера авторизации.&lt;br /&gt;
# Нажмите кнопку '''Подробности''' для раскрытия подробной информации о сервере и его доступности.&lt;br /&gt;
# Введите логин и пароль.&lt;br /&gt;
&lt;br /&gt;
[[File:Авторизация LDAP 02.png|thumb|none|x300px|alt=AutorizationLDAP|Страница входа по протоколу LDAP]]&lt;br /&gt;
&lt;br /&gt;
После успешного входа отобразится пользовательский интерфейс сервера Svacer. При этом, если в прошлой сессии пользователь [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выбрал проект, его ветку и снимок]] или [[Help:UI manual#Использование фильтров|применил фильтры]], отобразятся эти проект, ветка и фильтры.&lt;br /&gt;
&lt;br /&gt;
Описание настроек конфигурации сервера Svacer для поддержки аутентификации по LDAP протоколу приведено по [[LDAP configuration|ссылке]].&lt;br /&gt;
&lt;br /&gt;
{{Note|type=info|text=''Чтобы после обновления системы в пользовательском веб-интерфейсе корректно отображались изменения, после авторизации обновите страницу в браузере – нажмите клавишу F5.''}}&lt;br /&gt;
&lt;br /&gt;
== Описание основных элементов пользовательского интерфейса ==&lt;br /&gt;
Все страницы пользовательского интерфейса сервера Svacer устроены единообразно и состоят из двух частей:&lt;br /&gt;
# Верхняя панель – отображается на всех страницах пользовательского интерфейса.&amp;lt;br /&amp;gt;Содержит:&lt;br /&gt;
#* логотип сервера Svacer;&lt;br /&gt;
#* кнопки меню:&lt;br /&gt;
#** '''Разметка''' – [[Help:UI manual#Работа в режиме просмотра кода|просмотр и разметка найденных маркеров]], а также [[Help:UI manual#Сравнение снимков и маркеров|сравнение снимков или отдельных маркеров]];&lt;br /&gt;
#** '''Код''' – [[Help:UI manual#Работа в режиме разметки|просмотр снимков исходного кода]], связанного с результатами анализатора Svace;&lt;br /&gt;
#** '''Проекты''' – [[Help:UI manual#Управление проектами и группами проектов|управление проектами]] (режим доступен только пользователям с ролью admin);&lt;br /&gt;
#** '''Детекторы''' – [[Help:UI manual#Просмотр детекторов|просмотр списка детекторов]];&lt;br /&gt;
#** '''Статистика''' – [[Help:UI manual#Просмотр статистики|просмотр статистики разметки]] по всем проектам, веткам и снимкам, доступным пользователю;&lt;br /&gt;
#** '''Поиск''' – [[Help:UI manual#Глобальный поиск|глобальный поиск]] снимков, маркеров и комментариев к ним;&lt;br /&gt;
#* [[File:Icon settings.png|x25px]] – кнопка для перехода к [[Help:UI manual#Настройка сервера Svacer|настройке системы]];&lt;br /&gt;
#* [[File:Icon RuEng.png|x25px]] – переключатель языка пользовательского интерфейса;&lt;br /&gt;
#* [[File:Icon question mark.png|x25px]] – кнопка для перехода на страницу документации к системе;&lt;br /&gt;
#* [[File:Icon bell.png|25px]] – кнопка для перехода к [[Help:UI manual#Просмотр уведомлений в интерфейсе Системы|уведомлениям]];&lt;br /&gt;
#* [[File:Icon profile.png|x25px]] – кнопка меню пользователя, которое предоставляет следующие функции:&lt;br /&gt;
#** [[Help:UI manual#Настройка профиля пользователя|настройка профиля пользователя]];&lt;br /&gt;
#** [[Help:UI manual#Настройка интерфейса|настройка интерфейса]];&lt;br /&gt;
#** [[Help:UI manual#Настройка уведомлений|настройка уведомлений]];&lt;br /&gt;
#** [[Help:UI manual#Управление лицензией|управление лицензией]];&lt;br /&gt;
#** [[Help:UI manual#Просмотр информации о программе|просмотр информации о программе]];&lt;br /&gt;
#** [[Help:UI manual#Выход из системы|выход из системы]].&lt;br /&gt;
# Рабочая область – область экрана для просмотра информации и ввода, которая соответствует выбранному режиму работы или странице настроек.&lt;br /&gt;
&lt;br /&gt;
:[[File:03 Основные элементы интерфейса – без VSCode.png|thumb|none|upright=3]]&lt;br /&gt;
&lt;br /&gt;
== Базовые функции системы ==&lt;br /&gt;
=== Просмотр уведомлений в интерфейсе Системы===&lt;br /&gt;
Чтобы посмотреть уведомления, нажмите кнопку [[File:Icon bell.png|25px]] в правом верхнем углу экрана.&lt;br /&gt;
&lt;br /&gt;
В правой части экрана отобразится панель со списком уведомлений для авторизованного пользователя:&lt;br /&gt;
&lt;br /&gt;
[[File:Notifications new.png|thumbnone|x300px|alt=NotificationList|Панель уведомлений]]&lt;br /&gt;
&lt;br /&gt;
Нажмите кнопку [[File:Icon cross 01.png|15px]] для удаления уведомления.&lt;br /&gt;
&lt;br /&gt;
Нажмите кнопку '''Очистить''' для удаления всех уведомлений.&lt;br /&gt;
&lt;br /&gt;
=== Настройка профиля пользователя ===&lt;br /&gt;
Для перехода в профиль выберите пункт '''Профиль''' в меню пользователя в правом верхнем углу экрана:&lt;br /&gt;
[[File:06 Меню пользователя — без VSCode.png|thumb|none|250px|alt=UserMenu|Меню пользователя. Переход к настройке профиля]]&lt;br /&gt;
&lt;br /&gt;
В правой части экрана отобразится панель '''Профиль''', на которой можно изменить атрибуты своего профиля (ФИО, контакты), кроме логина, а также [[Help:UI manual#Изменение пароля|поменять пароль]].[[File: 07 Профиль основные параметры.png|thumb|none|x400px|alt=ProfileSetting|Настройки профиля пользователя]]&lt;br /&gt;
&lt;br /&gt;
{{Note|type=info|text=''Пользователь LDAP может скорректировать только '''Организации'''. Остальные атрибуты (ФИО, E-mail), а также функция изменения пароля, недоступны.''}}&lt;br /&gt;
&lt;br /&gt;
=== Изменение пароля ===&lt;br /&gt;
Для изменения пароля:&lt;br /&gt;
:1. Выберите пункт '''Профиль''' в меню пользователя.&lt;br /&gt;
:2. В разделе '''Профиль пользователя''' нажмите на ссылку '''Изменить пароль''':&lt;br /&gt;
:[[File:10_Профиль_изменение пароля.png|thumb|none|450px|Переход к изменению пароля в профиле пользователя]]&lt;br /&gt;
:3. В открывшемся окне:&lt;br /&gt;
::а) Введите текущий пароль.&lt;br /&gt;
::б) Дважды введите новый пароль.&lt;br /&gt;
::в) Нажмите кнопку '''Изменить'''.&lt;br /&gt;
::[[File:11_Профиль_ввод нового пароля.png|thumb|none|350px|Окно изменения пароля]]&lt;br /&gt;
&lt;br /&gt;
=== Настройка интерфейса ===&lt;br /&gt;
Для перехода к настройкам выберите пункт '''Настройки интерфейса''' в меню пользователя в правом верхнем углу экрана:&lt;br /&gt;
[[File:187 Меню пользователя интерфейс.png|thumb|none|250px|alt=UserMenu|Меню пользователя. Переход к настройке интерфейса]]&lt;br /&gt;
&lt;br /&gt;
В правой части экрана отобразится панель '''Настройки интерфейса''' с тремя группами параметров:&lt;br /&gt;
:1. '''Общие'''. Параметры этой группы позволяют:&lt;br /&gt;
::а) Выбрать фильтры, которые будут по умолчанию применяться при повторном входе в систему:&lt;br /&gt;
::*фильтры, установленные в предыдущей сессии (выбрано по умолчанию);&lt;br /&gt;
::*сохраненный пользовательский фильтр.&lt;br /&gt;
::б) Включить или выключить (выбрано по умолчанию) замену снимка на последний загруженный в БД Svacer снимок при открытии сохраненного контекста. &lt;br /&gt;
::Если параметр в состоянии «Выключен», при выборе проекта и ветки открывается последний импортированный снимок.&lt;br /&gt;
::в) Включить или выключить (выбрано по умолчанию) сохранение вкладок с открытыми файлами в каждом контексте.&lt;br /&gt;
::г) Включить (выбрано по умолчанию) или выключить сохранение применённой сортировки значений в таблице маркеров при [[Help:UI manual#Выход из системы|выходе из системы]].&lt;br /&gt;
::д) Включить или выключить (выбрано по умолчанию) механизм генерации PDF-файла на основе HTML при выгрузке отчета с [[Help:UI manual#Таблица маркеров|информацией о маркерах]]. &lt;br /&gt;
{{Note|type=warn|text=''Для использования генерации PDF на основе HTML на сервере Svacer должен быть [[Help:Installation#Браузер для PDF-отчетов|установлен браузер Chromium или Google Chrome]].''}}&lt;br /&gt;
:[[File:08 общие настройки интерфейса.png|thumb|none|600px|alt=UserInterfaceSettings|Настройки интерфейса. Группа параметров «Общие»]]&lt;br /&gt;
:2. '''Навигационная панель'''. Параметры этой группы позволяют:&lt;br /&gt;
::а) Выбрать отображение по умолчанию данных [[Help:UI manual#Вкладка «Детекторы»|на вкладке '''Детекторы''']] навигационной панели:&lt;br /&gt;
::*группировка детекторов по уровням серьезности (выбрано по умолчанию);&lt;br /&gt;
::*отображение детекторов в виде списка.&lt;br /&gt;
:::Выбранное отображение будет применяться [[Help:UI manual#Вкладка «Детекторы»|на вкладке '''Детекторы''']] каждый раз после входа в систему.&lt;br /&gt;
::б) Выбрать отображение по умолчанию данных [[Help:UI manual#Вкладка «Файлы»|на вкладке '''Файлы''']] навигационной панели:&lt;br /&gt;
::*только имя файла (выбрано по умолчанию);&lt;br /&gt;
::*полный путь к файлу.&lt;br /&gt;
::в) Выбрать способ сортировки в колонке '''Маркеры''' [[Help:UI manual#Вкладка «Файлы»|на вкладке '''Файлы''']] панели навигации:&lt;br /&gt;
::*по общему количеству маркеров (выбрано по умолчанию);&lt;br /&gt;
::*по количеству размеченных маркеров.&lt;br /&gt;
:[[File:08_настройки навигационной панели.png|thumb|none|600px|alt=UserInterfaceSettings|Настройки интерфейса. Группа параметров «Навигационная панель»]]&lt;br /&gt;
:3. '''Просмотр кода'''. Параметры этой группы позволяют:&lt;br /&gt;
::а) Включить (выбрано по умолчанию) или выключить использование темной темы (темный фон, светлый текст) при просмотре файлов с исходным кодом.&lt;br /&gt;
::б) Включить или выключить (выбрано по умолчанию) переиспользование [[Help:UI manual#Вкладка с исходным кодом|вкладки с исходным кодом]] в редакторе кода.&lt;br /&gt;
::в) Включить или выключить (выбрано по умолчанию) отображение всех элементов трассы маркера по нажатии на ссылку '''Показать трассу''' [[Help:UI manual#Вкладка с исходным кодом|в виджете маркера]].&lt;br /&gt;
::Если параметр находится в состоянии «Выключен», то будет отображаться только первый элемент трассы.&lt;br /&gt;
::г) Выбрать отображение виджета относительно строки кода, с которой он связан:&lt;br /&gt;
::*	над строкой кода (выбрано по умолчанию);&lt;br /&gt;
::*	под строкой кода.&lt;br /&gt;
:[[File:08 настройки просмотра кода.png|thumb|none|600px|alt=UserInterfaceSettings|Настройки интерфейса. Группа параметров «Просмотр кода»]]&lt;br /&gt;
:Эти настройки сохраняются для учётной записи пользователя и не сбрасываются при новой сессии.&lt;br /&gt;
:Чтобы сбросить параметры любой группы к значениям по умолчанию, нажмите на ссылку '''Сбросить настройки''' внизу панели '''Настройки интерфейса'''.&lt;br /&gt;
&lt;br /&gt;
=== Настройка уведомлений ===&lt;br /&gt;
Система может уведомлять пользователей по каналам E-mail и Telegram о следующих типах операций:&lt;br /&gt;
* добавление (при импорте, копировании, клонировании) и удаление снимков; &lt;br /&gt;
* изменение разметки маркеров; &lt;br /&gt;
* добавление комментариев к маркерам. &lt;br /&gt;
&lt;br /&gt;
Для перехода к настройкам выберите пункт '''Настройки уведомлений''' в меню пользователя в правом верхнем углу экрана:&lt;br /&gt;
[[File:188 Меню пользователя - уведомления.png|thumb|none|250px|Меню пользователя. Переход к настройке уведомлений]]&lt;br /&gt;
&lt;br /&gt;
В правой части экрана отобразится панель '''Настройки уведомлений''' с двумя группами параметров:&lt;br /&gt;
:1. '''Типы уведомлений'''. Параметры этой группы позволяют выбрать канал, по которому будут приходить уведомления, настроить и проверить его. Для этого:&lt;br /&gt;
::а) Включите опцию '''E-mail''' и (или) '''Telegram chat ID'''.&lt;br /&gt;
::При выборе уведомления по '''E-mail''' используется адрес электронной почты, указанный [[Help:UI manual#Настройка профиля пользователя|в профиле пользователя]].&lt;br /&gt;
::б) При выборе уведомления по '''Telegram''' введите '''Telegram chat ID'''.&lt;br /&gt;
::в) Чтобы проверить подключение к каналу нажмите кнопку '''Проверить'''.&lt;br /&gt;
::Отправится тестовое сообщение по указанным реквизитам:&lt;br /&gt;
::[[File:189 Настройки уведомлений.png|thumb|thumb|none|600px|alt=UserInterfaceSettings|Настройки уведомлений]]&lt;br /&gt;
:2. '''Подписки'''. Позволяют выбрать проекты, ветки и события, при возникновении которых будут приходить уведомления. Для этого:&lt;br /&gt;
::а) Для добавления подписки нажмите кнопку '''Добавить''' и в появившейся строке в раскрывающемся списке выберите проект и/или его ветку.&lt;br /&gt;
::Чтобы уведомления приходили при изменениях во всех проектах, доступных пользователю, выберите значение '''Все''' в раскрывающемся списке проектов.&lt;br /&gt;
::[[File:190 Настройки уведомлений. Выбор ветки.png|thumb|thumb|none|600px|alt=UserInterfaceSettings|Настройки уведомлений. Выбор ветки]]&lt;br /&gt;
::б) Выберите объекты, при изменении которых будут приходить уведомления – установите флажки в столбцах '''Снимки''', '''Разметка''', '''Комментарии'''.&lt;br /&gt;
::в) Если требуется получать уведомления о разметке и/или комментариях только в маркерах, в которых пользователь принимал участие, установите флажок в столбце '''Участие''' (доступен, только если установлены флажки в столбцах '''Разметка''' и/или '''Комментарии''').&lt;br /&gt;
::г) Для настройки исключения из подписки на уведомления нажмите кнопку [[File:Icon plus.png|x25px]].&lt;br /&gt;
::Кнопка примет вид [[File:Icon minus.png|x25px]].&lt;br /&gt;
::д) Для удаления подписки на уведомления нажмите кнопку [[File:Icon minus.png|x25px]].&lt;br /&gt;
::По окончании настройки уведомлений нажмите кнопку '''Сохранить'''.&lt;br /&gt;
&lt;br /&gt;
=== Управление лицензией ===&lt;br /&gt;
{{Note|type=info|text=''В версии сервера Svacer 12.0.0 лицензия встроена в дистрибутив и не ограничивает функции системы. Срок действия встроенной лицензии – до 31.12.2027 г.''}}&lt;br /&gt;
&lt;br /&gt;
Чтобы посмотреть текст лицензии системы и копировать его, а также для активации новой лицензии, выберите пункт '''Лицензия''' в меню пользователя в правом верхнем углу экрана.&lt;br /&gt;
В правой части экрана отобразится панель '''Лицензия'''.&lt;br /&gt;
[[File:231 Меню пользователя Переход к просмотру лицензии.png|thumb|none|450px|Меню пользователя. Переход к просмотру лицензии]]&lt;br /&gt;
[[File:232 Панель Лицензия.png|thumb|none|x400px|Панель «Лицензия»]]&lt;br /&gt;
&lt;br /&gt;
Чтобы скопировать текст лицензии, нажмите кнопку [[File:Icon copy link.png|x15px]].&lt;br /&gt;
Чтобы активировать лицензию:&lt;br /&gt;
:1. Нажмите на ссылку '''Активировать новую'''.&lt;br /&gt;
:2. В открывшемся окне '''Активация лицензии''' введите лицензионный ключ и нажмите кнопку '''Активировать'''.&lt;br /&gt;
{{Note|type=warn|text=''Функция активации лицензии доступна пользователям с [[#Серверные доступы|серверным доступом]] '''Администрирование сервера'''.''}}&lt;br /&gt;
[[File:233 Окно Лицензия.png|thumb|none|600px|Окно «Активация лицензии»]]&lt;br /&gt;
&lt;br /&gt;
=== Просмотр информации о программе ===&lt;br /&gt;
Чтобы посмотреть информацию о программе, выберите пункт '''О программе''' в меню пользователя в правом верхнем углу экрана.&lt;br /&gt;
[[File:12_Меню пользователя_о программе — без VSCode.png|thumb|none|250px|Меню пользователя. Переход к просмотру информации о программе]]&lt;br /&gt;
&lt;br /&gt;
Откроется окно с информацией о программе&lt;br /&gt;
[[File:13 1 О программме.png|none|thumb|600x600px|Информация о программе]]&lt;br /&gt;
Нажмите на ссылку в строке '''Документация и релизы''' для перехода на страницу документации к системе и ссылкам для скачивания дистрибутивов релизов Svacer.&lt;br /&gt;
&lt;br /&gt;
Нажмите на ссылку в строке '''Спецификация OpenAPI''' для открытия страницы Swagger с описанием API методов используемых в Svacer.&lt;br /&gt;
&lt;br /&gt;
Нажмите на ссылку '''Telegram''' в строке '''Поддержка и Обратная связь''' для открытия чата с технической поддержкой.&lt;br /&gt;
&lt;br /&gt;
Нажмите на ссылку '''Email''' в строке '''Поддержка и обратная связь''' для отправки сообщения в службу технической поддержки по электронной почте.&lt;br /&gt;
&lt;br /&gt;
== Выбор контекста (проекта, ветки и снимка) ==&lt;br /&gt;
Для работы [[Help:UI manual#Работа в режиме разметки|в режиме разметки]] или [[Help:UI manual#Работа в режиме просмотра кода|режиме просмотра кода]] требуется выбрать проект, ветку и снимок с результатами работы анализатора Svace. &lt;br /&gt;
&lt;br /&gt;
При необходимости список проектов можно отфильтровать по группе проектов. Это можно сделать в блоке, который расположен под [[Help:UI manual#Описание основных элементов пользовательского интерфейса|верхней панелью]]. &lt;br /&gt;
&lt;br /&gt;
[[File:14_Выбор проекта, верки, снимка.png|800px]]&lt;br /&gt;
&lt;br /&gt;
По умолчанию после выбора проекта автоматически выбирается ветка master и последний импортированный снимок, если [[Help:UI manual#Настройка интерфейса|параметр '''При открытии сохраненного контекста заменить снимок на последний загруженный''']] находится в состоянии '''Выключен'''. Если master отсутствует, то ветку нужно выбрать вручную.&lt;br /&gt;
&lt;br /&gt;
== Работа в режиме разметки ==&lt;br /&gt;
Режим разметки предоставляет следующий набор элементов управления:&lt;br /&gt;
:1. Навигационная панель:&lt;br /&gt;
:* [[Help:UI manual#Вкладка «Детекторы»|вкладка '''Детекторы''']];&lt;br /&gt;
:* [[Help:UI manual#Вкладка «Файлы»|вкладка '''Файлы''']].&lt;br /&gt;
:Эту панель можно скрыть. Для этого нажмите кнопку [[File:Button Скрыть навигацию.png|x25px]] в правом верхнем её углу. Чтобы панель раскрыть, нажмите кнопку [[File:Button Паказать навигацию.png|x25px]].&lt;br /&gt;
:2. Центральная панель:&lt;br /&gt;
:* [[Help:UI manual#Вкладка «Информация о снимке»|вкладка '''Информация о снимке''']] – открывается по нажатии кнопки [[File:Icon Information.png|25x25px]];&lt;br /&gt;
:* одна или несколько [[Help:UI manual#Вкладка с исходным кодом|вкладок с исходным кодом''']] (отображаются после выбора файлов в таблице маркеров или навигационной панели);&lt;br /&gt;
:* [[Help:UI manual#Таблица маркеров|таблица маркеров]];&lt;br /&gt;
:3. [[Help:UI manual#Функции правой панели|Правая панель]] с информацией о маркере. &lt;br /&gt;
:Эту панель можно скрыть. Для этого нажмите кнопку [[File:Button Паказать навигацию.png|x25px]] в левом верхнем её углу. Чтобы панель раскрыть, нажмите кнопку [[File:Button Скрыть навигацию.png|x25px]].&lt;br /&gt;
&lt;br /&gt;
[[File:96 Режим разметки. Набор элементов управления.png|800px|thumb|none|Режим разметки. Набор элементов управления]]&lt;br /&gt;
&lt;br /&gt;
=== Функции навигационной панели ===&lt;br /&gt;
==== Вкладка «Детекторы» ====&lt;br /&gt;
На этой вкладке отображается список детекторов Svace, которые сработали в выбранном снимке.&lt;br /&gt;
&lt;br /&gt;
Серьезность (критичность) детектора обозначена цветом:&lt;br /&gt;
* красный – наивысшая серьезность (CRITICAL);&lt;br /&gt;
* желтый – высокая серьезность (MAJOR);&lt;br /&gt;
* белый – обычная серьезность (NORMAL, MINOR, UNDEFINED).&lt;br /&gt;
&lt;br /&gt;
На вкладке '''Детекторы''' пользователю доступны следующие функции:&lt;br /&gt;
:1. Поиск по детекторам и файлам.&lt;br /&gt;
:2. Выгрузка списка отображаемых на панели детекторов и маркеров в файл формата .csv – для этого нажмите кнопку [[File:Button Скачать CSV.png|x25px]]&lt;br /&gt;
:3. Отображение данных в виде списка – для этого нажмите кнопку [[File:icon_list.png|x25px]].&lt;br /&gt;
:4. Группировка детекторов по уровням серьезности (по умолчанию) – для этого нажмите кнопку [[File:icon_tree.png|x25px]].&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;
  16_Детекторы_список.png|Вкладка '''Детекторы''' с данными в виде списка&lt;br /&gt;
  15_Детекторы_группировка.png|Вкладка '''Детекторы''' с группировкой по уровням серьезности&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
:5. Сворачивание и разворачивание дерева детекторов (доступно при любом виде группировки):&lt;br /&gt;
::а) Для сворачивание нажмите кнопку [[File:Button Скрыть таблицу.png|x25px]].  &lt;br /&gt;
::Список детекторов свернется: при примененной группировке отобразятся группы детекторов; при отображении данных в виде списка отобразится список детекторов; кнопка примет вид [[File:Button Показать таблицу.png|x25px]].&lt;br /&gt;
::б) Для разворачивания нажмите кнопку [[File:Button Показать таблицу.png|x25px]]. &lt;br /&gt;
::Список детекторов развернется полностью: при примененной группировке отобразятся группы детекторов с раскрытыми списками детекторов и файлов, в которых они найдены; при отображении данных в виде списка отобразится список детекторов с раскрытыми списками файлов, в которых они найдены; кнопка примет вид [[File:Button Скрыть таблицу.png|x25px]].&lt;br /&gt;
:6. Отображение списка маркеров в файлах, в которых сработал детектор – для этого нажмите кнопку [[File:icon_uncover.png|x15px]] в левой части его имени.&lt;br /&gt;
:[[File:checker_uncover.png|thumb|none|320px|Список маркеров, найденных детектором]]&lt;br /&gt;
:7. [[Help:UI manual#Блокировка разметки|Блокировка всех маркеров]], найденных детектором, для разметки другими пользователями – для этого нажмите кнопку [[File:icon_unlocked.png|x25px]] справа от названия детектора (отображается при наведении курсора).&lt;br /&gt;
:8. Применение фильтра по детектору [[Help:UI manual#Таблица маркеров|в таблице маркеров]] – для этого нажмите на название детектора или название файла в раскрывающемся списке маркеров детектора.&lt;br /&gt;
:9. Применение фильтра по серьезности [[Help:UI manual#Таблица маркеров|в таблице маркеров]] – для этого нажмите на название группы серьезности.&lt;br /&gt;
:10. Отмена фильтров по серьезности, детекторам и файлам – для этого нажмите кнопку [[File:icon_return.png|x25px]].&lt;br /&gt;
:11. Отображение [[Help:UI manual#Вкладка с исходным кодом|на вкладке исходного кода]] содержимого файла, места и содержания маркера, а также подробной информации о маркере [[Help:UI manual#Функции правой панели|на правой панели]] – для этого нажмите на маркер.&lt;br /&gt;
:12. Просмотр фрагмента кода в режиме предпросмотра – для этого нажмите кнопку [[File:icon_preview_code.png|x25px]].&lt;br /&gt;
&lt;br /&gt;
==== Вкладка «Файлы» ====&lt;br /&gt;
На этой вкладке отображается список файлов, в которых найдены маркеры.&lt;br /&gt;
&lt;br /&gt;
[[File:17 Файлы.png|thumb|none|300px|Вкладка '''Файлы''']]&lt;br /&gt;
&lt;br /&gt;
Для каждого файла отображаются: &lt;br /&gt;
* имя;&lt;br /&gt;
* количество найденных маркеров (предупреждений);&lt;br /&gt;
* количество размеченных маркеров;&lt;br /&gt;
* кнопки [[File:Icon plus.png|x25px]] или [[File:Icon minus.png|x25px]] (если применена фильтрация по файлам).&lt;br /&gt;
&lt;br /&gt;
На вкладке '''Файлы''' пользователю доступны следующие функции:&lt;br /&gt;
:1. Просмотр на [[Help:UI manual#Вкладка с исходным кодом|вкладке с исходным кодом]]: содержимого файла, места и содержания маркера, а также подробной информации о маркере [[Help:UI manual#Функции правой панели|на правой панели]] – без включения фильтрации по этому файлу. Для этого нажмите на имя файла.&lt;br /&gt;
:2. Применение фильтра по файлам [[Help:UI manual#Таблица маркеров|в таблице маркеров]] – для этого нажмите кнопку [[File:Icon plus.png|x25px]] в одной или нескольких строках. &lt;br /&gt;
:Фильтр применится, кнопка [[File:Icon plus.png|x25px]] в списке файлов поменяется на [[File:Icon minus.png|x25px]].&lt;br /&gt;
:3. Исключение файла из фильтра по файлам [[Help:UI manual#Таблица маркеров|в таблице маркеров]] – для этого нажмите кнопку [[File:Icon minus.png|x25px]] в строке файла.&lt;br /&gt;
:4. Отмена фильтрации [[Help:UI manual#Таблица маркеров|в таблице маркеров]] для всех выбранных файлов – для этого нажмите кнопку [[File:Icon minus 3.png|x25px]] или кнопку [[File:icon_return.png|x25px]] [[Help:UI manual#Вкладка «Детекторы»|на вкладке '''Детекторы''']].&lt;br /&gt;
:5. [[Help:UI manual#Блокировка разметки|Блокировка всех маркеров]] в файле для разметки другими пользователями – для этого нажмите кнопку [[File:icon_unlocked.png|x25px]] справа от названия файла (отображается при наведении курсора).&lt;br /&gt;
:6. Поиск по имени/пути файла в поле '''Поиск по полному пути'''. Поддерживается поиск с использованием [[Help:UI manual#Использование регулярных выражений|регулярных выражений]].&lt;br /&gt;
:7. Сортировка файлов по количеству маркеров – для этого нажмите кнопку [[File:Icon-expand-all.png|x25px]]&lt;br /&gt;
:8. Выгрузка списка отображаемых на панели файлов в файл формата .csv – для этого нажмите кнопку [[File:button_Скачать CSV.png|25px]]&lt;br /&gt;
:9. Настройка отображения файлов и сортировки в колонке '''Маркеры''' на вкладке '''Файлы''' – для этого нажмите кнопку [[File:icon_gear.png|x25px]] и поменяйте настройки.&lt;br /&gt;
:[[File:18 Временная настройка панели навигации.png|thumb|none|800px|Настройка отображения файлов и сортировки полей]]&lt;br /&gt;
&lt;br /&gt;
=== Функции центральной панели ===&lt;br /&gt;
==== Вкладка «Информация о снимке» ====&lt;br /&gt;
На этой вкладке отображается информация о выбранном снимке.&lt;br /&gt;
&lt;br /&gt;
[[File:19 Информация о снимке.png|thumb|left|600px|Вкладка '''Информация о снимке''']]&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
На вкладке '''Информация о снимке''' пользователю доступны следующие функции:&lt;br /&gt;
:1. Просмотр подробной информации о снимке во всплывающем окне – для этого нажмите кнопку '''Просмотреть JSON'''.&lt;br /&gt;
:2. Экспорт [[Help:UI manual#Экспорт|исходного кода, снимков и разметки]] – для этого нажмите кнопку '''Экспорт''' и выберите подходящий вариант.&lt;br /&gt;
:3. [[Help:UI manual#Импорт разметки|Импорт разметки]] – для этого нажмите кнопку '''Импорт''' и выберите подходящий вариант.&lt;br /&gt;
:4. Переход к более продвинутой навигации по исходному коду с подсветкой маркеров во встроенном Web-IDE  Theia – для этого нажмите кнопку '''Открыть в IDE''' .&lt;br /&gt;
:{{Note|type=warn|text=''Функциональность является экспериментальной, доступна при наличии проектного доступа '''Экспорт снимков''' и запуске веб-приложения Svacer по протоколу HTTPS или на локальном хосте. Список доступных IDE определяется при инсталляции. Если доступна только одна IDE, то раскрывающийся список отсутствует, а IDE открывается сразу по нажатию кнопки '''Открыть в IDE'''. Если функциональность недоступна, кнопка '''Открыть в IDE''' неактивна и отображается иконка'' [[File:Icon attention.png|23x23px]]''.''}}&lt;br /&gt;
:5. Просмотр списка приложенных файлов —  по нажатии кнопки '''Показать''', но только при наличии приложенных файлов.&lt;br /&gt;
:6. Скрытие списка приложенных файлов (возможно только при наличии приложенных файлов) – для этого нажмите на ссылку '''Скрыть'''.&lt;br /&gt;
:7. Удаление приложенного файла (возможно только при наличии приложенных файлов) — для этого нажмите кнопку  [[File:icon_delete.png|x25px]].&lt;br /&gt;
:8. Просмотр пользовательских полей, которые пользователь указал при импорте – доступен по нажатии кнопки '''Показать''', но только при наличии этих полей.&lt;br /&gt;
:9. Просмотр параметров анализа во всплывающем окне – для этого нажмите кнопку '''Показать''' в строке '''Параметры анализа'''.&lt;br /&gt;
:10. Экспорт параметров анализа в формате .txt – для этого нажмите кнопку '''Скачать''' в строке '''Параметры анализа'''.&lt;br /&gt;
:11. [[Help:UI manual#Работа с таблицей статистики|Просмотр таблицы статистики]] – для этого нажмите кнопку '''Показать''' в строке '''Статистика по детекторам'''.&lt;br /&gt;
:Информация в таблице сгруппирована по параметрам детекторов, найденным маркерам и статусу их разметки.&lt;br /&gt;
&lt;br /&gt;
==== Вкладка с исходным кодом ====&lt;br /&gt;
Вкладка открывается только после выбора файла [[Help:UI manual#Вкладка «Детекторы»|на вкладке '''Детекторы''']] или [[Help:UI manual#Вкладка «Файлы»|'''Файлы''']], а также [[Help:UI manual#Таблица маркеров|в таблице маркеров]]. Одновременно может быть открыто несколько вкладок с исходным кодом, если выключена [[Help:UI manual#Настройка профиля пользователя|настройка '''Переиспользование вкладки в редакторе кода''']].&lt;br /&gt;
&lt;br /&gt;
В верхней части вкладки отображаются панель инструментов для работы с файлом [1] и полный путь к файлу [2]. Если в строке кода установлен курсор, то в нижнем правом углу вкладки отображается его позиция [3]:&lt;br /&gt;
[[File:20 Исходный код.png|thumb|none|600px|Полный путь к файлу и позиционирование курсора]]&lt;br /&gt;
&lt;br /&gt;
На вкладке с исходным кодом пользователю доступны следующие функции:&lt;br /&gt;
:1. Отображение кода на весь экран – для этого нажмите кнопку [[File:Icon expand.png|23x23px]] или дважды кликните на вкладку файла. &lt;br /&gt;
:&lt;br /&gt;
:Для возврата к обычному отображению нажмите кнопку [[File:Icon minimize.png|24x24px]] или дважды кликните на вкладку файла.&lt;br /&gt;
:2. Переход к предыдущей или следующей строке, в которую пользователь установил курсор, – для этого используйте кнопки [[File:Button left.png|23x23px]] и [[File:Button right.png]] или сочетания клавиш '''Ctrl&amp;amp;nbsp;+&amp;amp;nbsp;&amp;lt;''' и '''Ctrl&amp;amp;nbsp;+&amp;amp;nbsp;&amp;gt;'''.&lt;br /&gt;
:3. Просмотр и открытие маркеров из списка всех маркеров в данном файле – для этого нажмите кнопку [[File:Icon list 2.png|x25px]].&lt;br /&gt;
:[[File:21 Исходный код Отображение списка маркеров.png|thumb|none|300px|right|Cписок маркеров в файле]]&lt;br /&gt;
:4. Отображение всех маркеров – для этого нажмите кнопку [[File:Icon Скрыть маркеры.png|24x24px]].&lt;br /&gt;
:Кнопка недоступна, если она уже нажата: все маркеры уже отображаются.&lt;br /&gt;
:5. Скрытие всех маркеров и трасс – для этого нажмите кнопку [[File:Icon Показать маркеры.png|24x24px]].&lt;br /&gt;
:Кнопка недоступна, если она уже нажата: все маркеры уже скрыты.&lt;br /&gt;
:6. Добавление комментария к строке кода – можно сделать двумя способами:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button Comment Add.png|x25px]] в левой части строки, рядом с её номером (отображается только если в строке установлен курсор) и введите комментарий.&lt;br /&gt;
::ИЛИ&lt;br /&gt;
::б) Нажмите правой кнопкой мыши на строку и выберите пункт '''Добавить комментарий'''. Этим способом можно добавить несколько комментариев к одной строке.&lt;br /&gt;
:7. Просмотр комментария к строке – можно сделать двумя способами:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button Comment view.png|x25px]] в левой части строки, рядом с её номером.&lt;br /&gt;
::ИЛИ&lt;br /&gt;
::б) Нажмите кнопку [[File:Button Comment view.png|x25px]] на панели инструментов и выберите в списке строку комментария.&lt;br /&gt;
::Отобразится виджет комментария, в котором доступны следующие функции:&lt;br /&gt;
::*добавление дополнительного комментария к этой строке кода по нажатии кнопки [[File:Button Comment Add.png|x25px]];&lt;br /&gt;
::*редактирование текста комментария по нажатии кнопки [[File:icon_edit3.png|x25px]];&lt;br /&gt;
::*удаление комментария по нажатии кнопки [[File:icon_delete 2.png|x25px]].&lt;br /&gt;
:[[File:118 Виджет комментария к строке кода.png|thumb|none|600px|Виджет комментария к строке кода]]&lt;br /&gt;
:8. Просмотр и открытие комментариев из списка всех комментариев в коде – для этого нажмите кнопку [[File:Button Comment view.png|x25px]] справа.&lt;br /&gt;
:9. Отображение всех комментариев в коде – для этого нажмите кнопку [[File:Button_Comment_view_all.png|x25px]] на панели инструментов.&lt;br /&gt;
:Кнопка недоступна, если она уже нажата: все комментарии уже отображаются.&lt;br /&gt;
:10. Скрытие всех комментариев в коде – для этого нажмите кнопку [[File:Button_Comment_hide_all.png|x25px]] на панели инструментов.&lt;br /&gt;
:Кнопка недоступна, если она уже нажата: все комментарии уже скрыты.&lt;br /&gt;
:11. Добавление открытого файла в [[Help:UI manual#Использование фильтров|фильтр]] [[Help:UI manual#Таблица маркеров|таблицы маркеров]] – для этого нажмите кнопку [[File:Icon filter add.png|x25px]] на панели инструментов. &lt;br /&gt;
:Фильтрация применится, вид кнопки поменяется на [[File:Icon filter remove.png|x25px]].&lt;br /&gt;
:12. Исключение файла из [[Help:UI manual#Использование фильтров|фильтра]] [[Help:UI manual#Таблица маркеров|таблицы маркеров]] – для этого нажмите кнопку [[File:Icon filter remove.png|x25px]] на панели инструментов. &lt;br /&gt;
:Фильтрация по этому файлу отменится, вид кнопки поменяется на [[File:Icon filter add.png|x25px]].&lt;br /&gt;
:13. Возврат к исходному маркеру (например, если был выбран другой связанный маркер на вкладке '''Трасса''' [[Help:UI manual#Функции правой панели|правой панели]]) – для этого нажмите кнопку [[File:Icon target.png|x25px]] в верхней части виджета маркера.&lt;br /&gt;
:14. [[Help:UI manual#Разметка маркера|Разметка маркера]] – установите '''Статус''', '''Серьезность''' и '''Действия''' в верхней части виджета маркера.&lt;br /&gt;
:15. Отображение блока элементов трассы в виджете маркера для строки кода – нажмите ссылку '''Показать трассу''' (доступна, если все блоки элементов трассы скрыты).&lt;br /&gt;
::Для последовательного перехода к другим элементам трассы воспользуйтесь кнопками [[File:Button up.png|x25px]] и [[File:Button down.png|x25px]].&lt;br /&gt;
::{{Note|type=info|text=''Отображение только первого элемента трассы или всех элементов трассы маркера по нажатии кнопки '''Показать трассу''' настраивается с помощью [[Help:UI manual#Настройка интерфейса|параметра '''Показывать всю трассу маркера''']].''}}&lt;br /&gt;
::[[File:97 Блок информации о элементе трассы.png|thumb|none|600px|Виджет маркера с блоком элемента трассы]]&lt;br /&gt;
:16. Скрытие блоков элементов трассы в виджете маркера для строки кода – нажмите ссылку '''Скрыть трассу''' (доступна, если хотя бы один блок элемента трассы отображается). &lt;br /&gt;
::Все открытые блоки элементов трассы маркера скроются.&lt;br /&gt;
:17. Переход к строке, в которой объявлена/определена переменная – нажмите правую кнопку мыши на строке исходного кода и выберите пункт '''Перейти к объявлению / Перейти к определению'''.&lt;br /&gt;
:{{Note|type=info|text=''Если для выделенного элемента кода нет объявления или определения, то отобразится сообщение: [[File:150 Объявление не найдено.png|247x247px]] или [[File:151 Определение не найдено.png|254x254px]].''}}&lt;br /&gt;
&lt;br /&gt;
:18. Просмотр ссылок на панели внизу экрана – нажмите правую кнопку мыши на строке исходного кода и выберите пункт '''Найти ссылки'''. На этой панели отображается иерархический список файлов с номерами строк, в которых найдены ссылки:&lt;br /&gt;
:[[File:Исходный_код_Референсы.png|thumb|none|600px|Cписок файлов с номерами строк, в которых найдены ссылки]]&lt;br /&gt;
&lt;br /&gt;
:* Чтобы перейти к строке кода, на которую найдена ссылка, нажмите на ссылку с номером строки на панели [1].&lt;br /&gt;
:* Чтобы посмотреть фрагмент кода, на который найдена ссылка, в режиме предпросмотра, нажмите кнопку [[File:icon_preview_code.png|x25px]] [2].&lt;br /&gt;
:{{Note|type=info|text=''Если для выделенного элемента кода нет ссылок, то отобразится сообщение: [[File:152 Ссылки не найдены.png|213x213px]].''}}&lt;br /&gt;
&lt;br /&gt;
:19. Переход к просмотру выбранного файла [[Help:UI manual#Работа в режиме просмотра кода|в режиме просмотра кода]] – нажмите правую кнопку мыши на строке исходного кода и выберите пункт '''Открыть в режиме Код'''.&lt;br /&gt;
:20. Копирование ссылки на строку кода в буфер обмена – нажмите правую кнопку мыши на строке исходного кода и выберите пункт '''Копировать прямую ссылку'''.  &lt;br /&gt;
::При переходе по этой ссылке будет открываться файл в режиме разметки с курсором на той строке кода, для которой была скопирована ссылка.&lt;br /&gt;
:21. Увеличение и уменьшение размера шрифта кода вместе с отображаемыми виджетами – нажмите правую кнопку мыши на любой строке исходного кода и выберите пункт '''Уменьшить''' или '''Увеличить''', либо установите курсор в любую строку и нажмите сочетание клавиш '''Ctrl&amp;amp;nbsp;+&amp;amp;nbsp;Alt&amp;amp;nbsp;+&amp;amp;nbsp;-''' или '''Ctrl&amp;amp;nbsp;+&amp;amp;nbsp;Alt&amp;amp;nbsp;+&amp;amp;nbsp;='''&lt;br /&gt;
:22. Копирование строки кода – нажмите правую кнопку мыши на строке исходного кода и выберите пункт '''Copy'''.&lt;br /&gt;
:23. Вызов командной строки – нажмите правую кнопку мыши на строке исходного кода и выберите пункт '''Command Palette'''.&lt;br /&gt;
:[[File:25 Исходный код Вызов командной строки.png|thumb|none|600px|Командная строка]]&lt;br /&gt;
&lt;br /&gt;
==== Таблица маркеров ====&lt;br /&gt;
Для раскрытия таблицы маркеров нажмите кнопку [[File:Button Показать таблицу.png|x25px]] в верхней части [[Help:UI manual#Функции центральной панели|центральной панели]], а для её скрытия – [[File:Button Скрыть таблицу.png|x25px]].&lt;br /&gt;
&lt;br /&gt;
В верхней части таблицы находится панель, которая содержит:&lt;br /&gt;
* [[File:Field Детектор.png|x25px]] – поле с информацией [[Help:UI manual#Использование фильтров|о примененных фильтрах]]: как назначенных [[Help:UI manual#Функции навигационной панели|в навигационной панели]], так и с помощью [[Help:UI manual#Настройка и использование пользовательских фильтров|пользовательских фильтров]] и запросов;&lt;br /&gt;
* &amp;lt;span id=&amp;quot;dwl_pdf&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;кнопка [[File:Icon download.png|x25px]] – выгрузка маркеров в файл формата .csv или .pdf: только для [[Help:UI manual#choice|выбранных]] или всех отображаемых маркеров, если ничего не выбрано. Отчет в формате .pdf может быть сгенерирован на основе HTML, так и существующим (нативным) способом. В PDF-отчете, сгенерированном на основе HTML, усовершенствованы стили, доработан титульный лист, актуализирован набор параметров для выгружаемых маркеров и пр.; &lt;br /&gt;
:{{Note|type=warn|text='''''Примечания:'''''&lt;br /&gt;
:* ''если в таблице не отображаются маркеры из-за примененных пользовательских фильтров, то в сгенерированном PDF-отчете будет указано «Нет маркеров (применены фильтры)»;''&lt;br /&gt;
:* ''для использования механизма генерации PDF-отчёта на основе HTML должна быть включена [[Help:UI manual#Настройка интерфейса|одноименная настройка]];''&lt;br /&gt;
:* ''генерация PDF-отчета на основе HTML может занимать больше времени, чем нативная генерация;''&lt;br /&gt;
:* ''спецсимволы (иконки), добавленные в комментариях к маркерам, не отображаются в выгруженном PDF-отчете.''}}&lt;br /&gt;
&lt;br /&gt;
* кнопка [[File:Icon edit.png|x25px]] – переход [[Help:UI manual#Групповая разметка маркеров|к групповой разметке]] выбранных маркеров (доступна, если выбраны маркеры в таблице);&lt;br /&gt;
* кнопка [[File:Button_Comment_Add.png|x25px]] – переход к [[Help:UI manual#Добавление общего комментария к нескольким маркерам|добавлению общего комментария к нескольким выбранным маркерам]].&lt;br /&gt;
&lt;br /&gt;
:[[File:26 Таблица маркеров.png|thumb|none|800px|Таблица маркеров с примененными фильтрами]]&lt;br /&gt;
&lt;br /&gt;
В таблице маркеров пользователю доступны следующие функции:&lt;br /&gt;
:1. Сортировка по значениям столбцов.&lt;br /&gt;
:2. &amp;lt;span id=&amp;quot;choice&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Выбор маркеров для [[Help:UI manual#dwl pdf|выгрузки отчета]], [[Help:UI manual#Групповая разметка маркеров|групповой разметки]] или [[Help:UI manual#Добавление общего комментария к нескольким маркерам|добавления общего комментария к нескольким маркерам]] – для этого установите флажок в строке маркера.&lt;br /&gt;
:3. Просмотр подробной информации о маркере [[Help:UI manual#Функции правой панели|в правой панели]] и его места и содержания [[Help:UI manual#Вкладка с исходным кодом|на вкладке с исходным кодом]] – для этого дважды кликните на строку маркера или нажмите на имя файла в столбце '''Файл'''. Также для выбора можно использовать клавиши ↑ и ↓ – для перемещения по строкам, и Enter – для подтверждения выбора.&lt;br /&gt;
:4. Просмотр детальной информации о маркере в JSON-формате – для этого нажмите правой кнопкой мыши на маркер и выберите пункт '''Просмотреть JSON'''.&lt;br /&gt;
:5. Копирование детальной информации о маркере (JSON маркера) в буфер обмена – для этого нажмите правой кнопкой мыши на маркер и выберите пункт '''Копировать JSON'''.&lt;br /&gt;
:При переходе по этой ссылке будет открываться список маркеров в режиме разметки с открытым маркером (в правой панели и на вкладке с исходным кодом), для которого была скопирована ссылка.&lt;br /&gt;
:6. Копирование ссылки на маркер в буфер обмена – для этого нажмите правой кнопкой мыши на маркер и выберите пункт '''Копировать ссылку на маркер'''.&lt;br /&gt;
:7. Переход к [[Help:UI manual#Сравнение маркеров|сравнению одного маркера с другим]] – для этого нажмите правой кнопкой мыши на маркер и выберите пункт '''Сравнить с ...'''&lt;br /&gt;
&lt;br /&gt;
=== Функции правой панели ===&lt;br /&gt;
Эта панель предоставляет подробную информацию о маркере и его [[Help:UI manual#Разметка маркера|разметке]]:&lt;br /&gt;
* статус [[Help:UI manual#Блокировка разметки|блокировки разметки]];&lt;br /&gt;
* статус [[Help:UI manual#Разметка маркера|разметки, его серьезность и требуемое действие]];&lt;br /&gt;
* автор последней разметки и прочее.&lt;br /&gt;
[[File:27 Правая панель.png|thumb|none|upright=4|Правая панель]]&lt;br /&gt;
&lt;br /&gt;
На правой панели пользователю доступны следующие функции:&lt;br /&gt;
:1. Копирование ссылки на маркер – для этого нажмите кнопку [[File:Icon copy link.png|x25px]].&lt;br /&gt;
:2. [[Help:UI manual#Блокировка разметки|Блокировка маркера]] для разметки другими пользователями – для этого нажмите кнопку [[File:icon_unlocked.png|x25px]] в верхней части правой панели.&lt;br /&gt;
:3. [[Help:UI manual#Разметка маркера|Разметка маркера]] – для этого установите '''Статус''', '''Серьезность''' и '''Действие''' в верхней части правой панели.&lt;br /&gt;
:4. Просмотр истории разметки со связанными комментариями – для этого нажмите кнопку [[File:Icon history.png|x25px]] в верхней части правой панели.&lt;br /&gt;
:[[File:28 История изменения маркера.png|thumb|none|upright=2.5|Пример истории изменения разметки маркера]]&lt;br /&gt;
&lt;br /&gt;
:5. Отображение маркера [[Help:UI manual#Вкладка с исходным кодом|на вкладке с исходным кодом]] нажмите кнопку с именем файла и номером строки в верхней части правой панели.&lt;br /&gt;
:6. Отображение элемента трассы [[Help:UI manual#Вкладка с исходным кодом|на вкладке с исходным кодом]] – для этого нажмите на ссылку с именем файла и номером строки на вкладке '''Трасса''' [1].&lt;br /&gt;
:7. Отображение кода, который соответствует строке трассы, в отдельном окне в режиме предпросмотра – для этого на вкладке '''Трасса''' нажмите кнопку [[File:Icon preview code.png|x25px]] рядом с именем файла и номером строки [2].&lt;br /&gt;
:[[File:31 Предпросмотр кода.png|thumb|none|upright=2.5|Элементы управления для работы с элементом трассы]]&lt;br /&gt;
:8. Просмотр и добавление комментариев к маркеру на вкладке '''Комментарии'''. &lt;br /&gt;
:Комментарии для каждого маркера уникальны. Добавление одинаковых комментариев недоступно.&lt;br /&gt;
:Редактор комментариев поддерживает синтаксис Markdown.&lt;br /&gt;
:Для упоминания пользователя, вставьте '''@''' и введите или выберите его логин. После добавления комментария по нажатии кнопки '''Применить''' указанному пользователю придет [[Help:UI manual#Просмотр уведомлений в интерфейсе Системы|уведомление в интерфейсе системы]] об упоминании с возможностью перехода к маркеру с этим комментарием.&lt;br /&gt;
:9. Редактирование и удаление комментариев на вкладке '''Комментарии''' с помощью кнопок [[File:Icon edit2.png|x25px]] и [[File:Icon delete.png|x25px]]. &lt;br /&gt;
:Если [[Help:UI manual#Работа с проектами|для проекта]] установлен флажок '''Обязательный комментарий при разметке''', то удаление связанного с разметкой комментария недоступно. Его можно только отредактировать.&lt;br /&gt;
:[[File:32 Комментарии.png|thumb|none|upright=1.3|Вкладка '''Комментарии''']]&lt;br /&gt;
:{{Note|type=info|text='''''Примечания''':'' &lt;br /&gt;
:*  ''Пользователь может отредактировать и удалить только свои комментарии. Пользователю с доступом '''Изменение любых комментариев''' доступно редактирование и удаление комментариев всех пользователей. Если такой пользователь внёс изменения, то изначальный автор теряет возможность изменять свой комментарий (если у него нет доступа '''Изменение любых комментариев'''), так как авторство передаётся пользователю, который последним внёс изменения.'' &lt;br /&gt;
:* ''Для отредактированного комментария отображается слово '''изменено''', при наведении курсора на которое отображается сообщение с логином пользователя, изменившего комментарий, и датой редактирования. Текст несохраненного комментария в поле добавления комментария не пропадает при переключении на другой маркер.'' &lt;br /&gt;
:* ''Если открыт режим редактирования комментария, то при переключении на другой маркер режим редактирования закрывается и изменения не сохраняются.''}}&lt;br /&gt;
:10. Ввод, просмотр и редактирования комментария в отдельном диалоговом окне – для этого нажмите кнопку [[File:Button Comment Zoom.png|x25px]] рядом с полем ввода нового комментария или в поле существующего комментария.&lt;br /&gt;
:[[File:120 Окно создания, просмотра и редактирования комментария в отдельном диалоговом окне.png|thumb|none|upright=2|Окно создания, просмотра и редактирования комментария в отдельном диалоговом окне]]&lt;br /&gt;
:11. Просмотр подробной информации на вкладке '''Подробности'''. Содержит два блока: &lt;br /&gt;
:* информация о сработавшем детекторе: серьезность и надежность, а также связанные с ним коды CWE, которые содержат ссылки на описание дефектов безопасности на сайте [https://cwe.mitre.org cwe.mitre.org];&lt;br /&gt;
:* информацией о маркере: текстовые метки маркера, названия снимка и функции, инструмент, язык, текстовое описание и степень доверия, а также кнопки для перехода к просмотру истории маркера и запуску хуков.&lt;br /&gt;
::{{Note|type=info|text=''Svace, начиная с версии 4.0, для некоторых языков поставляется с моделью искусственного интеллекта, которая предсказывает истинность срабатывания маркера на основе предупреждений и собранных метрик. Это значение в Svacer отображается в параметре '''Степень доверия'''.''}}&lt;br /&gt;
::По нажатии на иконку [[File:icon_question_mark2.png|x25px]] справа от названия детектора отображается дополнительная информация о нём. Иконка не отображается, если дополнительная информация отсутствует.&lt;br /&gt;
:[[File:33 Подробная информация о маркере.png|thumb|none|upright=2|Вкладка '''Подробности''']]&lt;br /&gt;
:[[File:121 Окно с дополнительной информацией о детекторе.png|thumb|none|upright=2|Окно с дополнительной информацией о детекторе]]&lt;br /&gt;
&lt;br /&gt;
:12. Просмотр истории обнаружения маркера в снимках данной ветки проекта – для этого на вкладке '''Подробности''' нажмите кнопку '''Показать''' в блоке информации о маркере в строке '''История'''.&lt;br /&gt;
:В окне просмотра истории доступна сортировка записей.&lt;br /&gt;
:[[File:35 История маркера.png|thumb|none|upright=2.5|Пример истории маркера]]&lt;br /&gt;
:13. Просмотр маркера в JSON-формате – для этого на вкладке '''Подробности''' нажмите кнопку '''Показать''' в блоке '''JSON'''.&lt;br /&gt;
:[[File:234 Пример JSON маркера.png|thumb|none|upright=2|Пример JSON маркера]]&lt;br /&gt;
:14. Запуск хуков (скриптов) – для этого нажмите кнопку '''Запустить''' на вкладке '''Подробности''' и в раскрывающемся списке доступных хуков выберите тот, который требуется запустить.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Использование фильтров ===&lt;br /&gt;
==== Общая информация ====&lt;br /&gt;
Настройка и использование фильтров доступны [[Help:UI manual#Работа в режиме разметки|в режиме разметки]].&lt;br /&gt;
&lt;br /&gt;
Существует пять видов фильтров:&lt;br /&gt;
&lt;br /&gt;
# Фильтры [[Help:UI manual#Функции навигационной панели|навигационной панели]] [1]: детекторы, файлы или серьезность.&lt;br /&gt;
# Доступные для разметки – позволяют отобразить только маркеры, которые доступны пользователю для разметки, т. е. при использовании этого фильтра в списке не будут отображаться маркеры, заблокированные другими пользователями. Фильтр применяется по нажатии кнопки [[File:Icon view2.png|x25px]] [2] в правой части блока [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выбора проекта, ветки и снимка]].&lt;br /&gt;
# Размеченный – позволяют отобразить только размеченные маркеры. Фильтр применяется по нажатии кнопки [[File:Icon view.png|x25px]] [3] в правой части блока [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выбора проекта, ветки и снимка]].&lt;br /&gt;
# [[Help:UI manual#Настройка и использование пользовательских фильтров|Пользовательские фильтры]] – доступны по нажатии кнопки [[File:Button Фильтры.png|x25px]] [4] в правой части блока [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выбора проекта, ветки и снимка]].&lt;br /&gt;
# Запрос – фильтр, указанный в поле в верхней части [[Help:UI manual#Таблица маркеров|таблицы маркеров]] [5].&lt;br /&gt;
 &lt;br /&gt;
:[[File:36 Фильтры.png|thumb|none|upright=3|Существующие фильтры]]&lt;br /&gt;
&lt;br /&gt;
Увидеть примененные фильтры (кроме '''Доступные для разметки''') и последовательность их применения можно в поле [[File:field Детектор.png|x25px]] в верхней части [[Help:UI manual#Таблица маркеров|таблицы маркеров]].&lt;br /&gt;
&lt;br /&gt;
Все виды фильтров можно использовать одновременно, но при определенном порядке применения фильтры могут быть сброшены:&lt;br /&gt;
* запрос сбрасывается после применения любого другого фильтра;&lt;br /&gt;
* фильтры [[Help:UI manual#Функции навигационной панели|навигационной панели]] сбрасываются после применения [[Help:UI manual#Настройка и использование пользовательских фильтров|пользовательских фильтров]] и других фильтров [[Help:UI manual#Функции навигационной панели|на навигационной панели]];&lt;br /&gt;
* [[Help:UI manual#Настройка и использование пользовательских фильтров|пользовательские фильтры]] и фильтры [[Help:UI manual#Функции навигационной панели|навигационной панели]] не сбрасываются при применении фильтра '''Размеченный''';&lt;br /&gt;
* при переключении на другой [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|проект, ветку или снимок]] примененные фильтры '''Размеченный''' и  [[Help:UI manual#Настройка и использование пользовательских фильтров|'''Пользовательский''']] не сбрасываются и применяются к выбранному снимку.&lt;br /&gt;
&lt;br /&gt;
По нажатию кнопки [[File:Button Фильтры 2.png|x25px]] в правой части блока [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выбора контекста]] можно отменить примененные фильтры: пользовательский или все.&lt;br /&gt;
&lt;br /&gt;
==== Настройка и использование пользовательских фильтров ====&lt;br /&gt;
Настроить пользовательские фильтры можно [[Help:UI manual#Работа в режиме разметки|в режиме разметки]]. Для этого:&lt;br /&gt;
:1. Нажмите кнопку [[file:button Фильтры.png|x25px]] в правой части блока [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выбора контекста]]. &lt;br /&gt;
:В правой части экрана отобразится панель пользовательских фильтров, которая содержит три вкладки:&lt;br /&gt;
:* '''Пользовательский''' – параметры фильтрации, которые разделены на три группы:&lt;br /&gt;
::* параметры детекторов;&lt;br /&gt;
::* параметры маркеров;&lt;br /&gt;
::* файлы;&lt;br /&gt;
::* [[Afilters|расширенный фильтр]];&lt;br /&gt;
:* '''Сохраненные''' – список [[Help:UI manual#Работа с сохраненными фильтрами|сохраненных фильтров]];&lt;br /&gt;
:* '''Публичные''' – [[Help:UI manual#Работа с публичными фильтрами|список фильтров, доступных всем пользователям]].&lt;br /&gt;
&lt;br /&gt;
:2. Настройте параметры фильтрации на вкладке '''Пользовательский''' – выберите значения в списках полей, нажмите кнопки со значениями, или введите значения.&lt;br /&gt;
:3. Нажмите на кнопку [[File:Icon cancel.png|x15px]] справа от значения в списке, чтобы отменить его выбор.&lt;br /&gt;
:4. Если параметры нужно исключить из поиска, нажмите на кнопку [[File:Icon plus 2.png|x25px]]. &lt;br /&gt;
:Кнопка поменяется на [[File:Icon minus 3.png|x25px]].&lt;br /&gt;
:5. Если параметры нужно включить в поиск, нажмите на кнопку [[File:Icon minus 3.png|x25px]]. &lt;br /&gt;
:Кнопка поменяется на [[File:Icon plus 2.png|x25px]].&lt;br /&gt;
:6. Если в полях '''Метки''', '''Функции''' и '''Файлы''' нужно использовать регулярные выражения:&lt;br /&gt;
::а) Нажмите на кнопку [[File:Button TextTempl.png|x25px]].&lt;br /&gt;
::Кнопка поменяется на [[File:Button Reg.png|x25px]].&lt;br /&gt;
::б) Введите [[Help:UI manual#Использование регулярных выражений|регулярные выражения]]. Используйте новую строку для разделения значений.  &lt;br /&gt;
:7. Если в полях '''Метки''', '''Функции''' и '''Файлы''' нужно использовать текстовые шаблоны:&lt;br /&gt;
::а) Нажмите на кнопку [[File:Button Reg.png|x25px]].&lt;br /&gt;
::Кнопка поменяется на [[File:Button TextTempl.png|x25px]].&lt;br /&gt;
::б) Введите текстовые шаблоны. Используйте новую строку для разделения значений.  &lt;br /&gt;
:8. Для создания сложного фильтра с поиском по предикатам задайте в поле '''Расширенный фильтр''' параметры в формате &amp;lt;code&amp;gt;filter(markers, &amp;lt;predicate expr&amp;gt;)&amp;lt;/code&amp;gt;, где:&lt;br /&gt;
::* &amp;lt;code&amp;gt;filter ()&amp;lt;/code&amp;gt; – функция, которая фильтрует список по предикату;&lt;br /&gt;
::* &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt; – объект, который содержит массив маркеров из контекста;&lt;br /&gt;
::* &amp;lt;code&amp;gt;&amp;lt;predicate expr&amp;gt;&amp;lt;/code&amp;gt; – выражение, которое определяет предикат.&lt;br /&gt;
::Описание используемых в этом фильтре функций, объектов и выражений, а также языка предикатов доступно по нажатии на иконку [[File:Icon question mark2.png|x25px]] и в [[Afilters|статье документации]].&lt;br /&gt;
:9. Нажмите кнопку [[File:Button Очистить.png|x25px]], чтобы очистить все параметры фильтрации.&lt;br /&gt;
:10. &amp;lt;span id=&amp;quot;filters_saved&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Нажмите кнопку [[File:Button Сохранить как.png|x25px]], в открывшемся диалоге введите название и нажмите кнопку '''Сохранить'''.&lt;br /&gt;
:Фильтр сохранится и отобразится на [[Help:UI manual#Работа с сохраненными фильтрами|вкладке '''Сохраненные''']].&lt;br /&gt;
:11. Нажмите кнопку [[File:Button Применить.png|x25px]], чтобы применить фильтр. &lt;br /&gt;
:После применения кнопка фильтра станет зеленой, а ее название поменяется на название сохраненного фильтра.&lt;br /&gt;
::[[File:36 Пользовательские фильтры.png|thumb|none|upright=2|Пользовательские фильтры. Вкладка '''Пользовательский''']]&lt;br /&gt;
&lt;br /&gt;
==== Работа с сохраненными фильтрами ====&lt;br /&gt;
На вкладке '''Сохраненные''' отображаются фильтры, [[Help:UI manual#filters saved|сохраненные на вкладке '''Пользовательский''']], а также [[Help:UI manual#filters published|скопированные с вкладки '''Публичные''']].&lt;br /&gt;
:[[File:37 Фильтры сохраненные.png|thumb|none|upright=2|Пользовательские фильтры. Вкладка '''Сохраненные''']]&lt;br /&gt;
&lt;br /&gt;
Воспользуйтесь функциями управления фильтрами на вкладке '''Сохраненные''':&lt;br /&gt;
:1. Для поиска фильтра введите его название в строке поиска.&lt;br /&gt;
:2. Для сортировки фильтров по названию нажмите кнопку [[File:Button Sort.png|x25px]].&lt;br /&gt;
:3. Для редактирования сохраненного фильтра нажмите кнопку [[File:Icon edit3.png|x25px]] и [[Help:UI manual#Настройка и использование пользовательских фильтров|внесите изменения]].&lt;br /&gt;
:4. Создайте дубликат фильтра – нажмите кнопку [[File:Icon duplicate.png|x25px]].&lt;br /&gt;
:5. &amp;lt;span id=&amp;quot;filters_publishing&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Для публикации фильтра нажмите кнопку [[File:Button share.png|x25px]].&lt;br /&gt;
:Копия сохраненного фильтра отобразится [[Help:UI manual#Работа с публичными фильтрами|на вкладке '''Публичные''']]  и станет доступна другим пользователям.&lt;br /&gt;
:{{Note|type=warn|text=''Функция доступна только пользователям с [[#Серверные доступы|серверным доступом]] '''Управление публичными фильтрами'''''.}}&lt;br /&gt;
:6. Для удаления одного фильтра нажмите кнопку [[File:Icon delete 2.png|x25px]].&lt;br /&gt;
:7. Для удаления нескольких фильтров:&lt;br /&gt;
::а) Выберите фильтры для удаления – установите флажки в левой части названий фильтров или нажмите кнопку '''Выбрать всё'''.&lt;br /&gt;
::б) Нажмите кнопку '''Удалить'''.&lt;br /&gt;
:8. Примените фильтр – нажмите на его название и нажмите кнопку [[File:Button Применить.png|x25px]].&lt;br /&gt;
&lt;br /&gt;
После применения:&lt;br /&gt;
* примененный фильтр будет отмечен [[File:Icon check.png|x25px]];&lt;br /&gt;
* кнопка фильтра станет зеленой, а ее название поменяется на название сохраненного фильтра.&lt;br /&gt;
&lt;br /&gt;
==== Работа с публичными фильтрами ====&lt;br /&gt;
{{Note|type=warn|text=''Создание (публикация), изменение и удаление публичных фильтров доступны пользователям с [[#Серверные доступы|серверным доступом]] '''Управление публичными фильтрами'''''.}}&lt;br /&gt;
&lt;br /&gt;
На вкладке '''Публичные''' отображаются фильтры, [[Help:UI manual#filters publishing|опубликованные на вкладке  '''Сохраненные''']].&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot; heights=&amp;quot;300px&amp;quot; style=&amp;quot;float:left; clear:right; margin-right:1em; margin-left:1em&amp;quot;&amp;gt;&lt;br /&gt;
  153 Пользовательские фильтры. Публичные без доступа.png|Пользовательские фильтры. Вкладка '''Публичные'''. &amp;lt;/br&amp;gt;Вид для пользователя без серверного доступа &amp;lt;/br&amp;gt;'''Управление публичными фильтрами'''&lt;br /&gt;
  154 Пользовательские фильтры. Публичные с доступом.png|Пользовательские фильтры. Вкладка '''Публичные'''. &amp;lt;/br&amp;gt;Вид для пользователя с серверным доступом &amp;lt;/br&amp;gt;'''Управление публичными фильтрами'''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
Воспользуйтесь функциями управления фильтрами на вкладке '''Публичные''':&lt;br /&gt;
:1. Для поиска фильтра введите его название в строке поиска.&lt;br /&gt;
:2. Для сортировки фильтров по названию нажмите кнопку [[File:Button Sort.png|x25px]].&lt;br /&gt;
:3. Чтобы посмотреть параметры фильтра, нажмите кнопку [[File:Button show.png|x25px]].&lt;br /&gt;
:{{Note|type=warn|text=''Функция доступна только пользователям БЕЗ [[#Серверные доступы|серверного доступа]] '''Управление публичными фильтрами.'''''}}&lt;br /&gt;
:4. Для редактирования публичного фильтра нажмите кнопку [[File:Icon edit3.png|x25px]] и [[Help:UI manual#Настройка и использование пользовательских фильтров|внесите изменения]].&lt;br /&gt;
:5. &amp;lt;span id=&amp;quot;filters_published&amp;quot;&amp;gt;Скопируйте публичный фильтр – нажмите кнопку [[File:Icon duplicate.png|x25px]].&amp;lt;/span&amp;gt;&lt;br /&gt;
:Фильтр сохранится и отобразится [[Help:UI manual#Работа с сохраненными фильтрами|на вкладке '''Сохраненные''']].&lt;br /&gt;
:6. Для удаления одного фильтра нажмите кнопку [[File:Icon delete 2.png|x25px]].&lt;br /&gt;
:7. Для удаления нескольких фильтров:&lt;br /&gt;
::а) Выберите фильтры для удаления – установите флажки в левой части названий фильтров или нажмите кнопку '''Выбрать всё'''.&lt;br /&gt;
::б) Нажмите кнопку '''Удалить'''.&lt;br /&gt;
:8. Примените фильтр – нажмите на его название и нажмите кнопку [[File:Button Применить.png|x25px]].&lt;br /&gt;
&lt;br /&gt;
После применения:&lt;br /&gt;
* примененный фильтр будет отмечен [[File:Icon check.png|x25px]];&lt;br /&gt;
* кнопка фильтра станет зеленой, а ее название поменяется на название сохраненного фильтра.&lt;br /&gt;
&lt;br /&gt;
=== Сравнение снимков и маркеров ===&lt;br /&gt;
Чтобы сравнить снимки и маркеры в них:&lt;br /&gt;
:1. [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|Выберите исходный контекст]] – проект, ветку, снимок.&lt;br /&gt;
:2. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] нажмите кнопку [[File:Button Сравнить с.png|x25px]] и в раскрывшемся списке выберите пункт '''Сравнить с…'''.&lt;br /&gt;
:3. В открывшемся окне выберите проект, ветку и снимок для сравнения; нажмите кнопку [[File:Button Применить.png|x25px]].&lt;br /&gt;
:[[File:38 Выбор снимка для сравнения.png|thumb|none|upright=1.5|Выбор проекта, ветки и снимка для сравнения]]&lt;br /&gt;
:Результат сравнения отобразится [[Help:UI manual#Функции навигационной панели|в навигационной панели]] и [[Help:UI manual#Функции центральной панели|центральной панели]], причем:&lt;br /&gt;
:* вкладка '''Информация о снимке''' поменяется на вкладку '''Информация о различиях''' с информацией о двух сравниваемых снимках;&lt;br /&gt;
:* применится первый режим сравнения, в котором найдены результаты.&lt;br /&gt;
:4. Выберите режим сравнения.&lt;br /&gt;
:[[File:39 Выбор режима сравнения.png|800px|thumb|none|Выбор режима сравнения]]&lt;br /&gt;
:[[Help:UI manual#Функции навигационной панели|В навигационной панели]] и [[Help:UI manual#Функции центральной панели|центральной панели]] отобразятся только результаты выбранного режима сравнения. В режимах '''Сопоставленные''' и '''Одинаковые''' [[Help:UI manual#Таблица маркеров|в таблице маркеров]] добавится столбец с номером версии: V1 – маркер в файле текущего снимка, V2 – маркер в файле целевого снимка.&lt;br /&gt;
:{{Note|type=info|text=''Если при просмотре кода файла целевого снимка перейти к просмотру файла [[Help:UI manual#Работа в режиме просмотра кода|в режиме '''Код''']] (команда '''Открыть в режиме код'''), то режим сравнения закроется, отобразится контекст целевого снимка.''}}&lt;br /&gt;
&amp;lt;gallery heights=&amp;quot;210&amp;quot; perrow=&amp;quot;2&amp;quot; mode=&amp;quot;packed&amp;quot; style=&amp;quot;float:left; clear:right; margin-right:1em; margin-left:2em&amp;quot; &amp;quot;=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
File:40 Пример сравнения новые.png|Пример результатов сравнения в режиме '''Только в V1'''&lt;br /&gt;
File:41 Пример сравнения Отсутствующие.png|Пример результатов сравнения в режиме '''Только в V2'''&lt;br /&gt;
File:42 Пример сравнения Сопоставленные.png|Пример результатов сравнения в режиме '''Сопоставленные'''&lt;br /&gt;
File:43 Пример сравнения Одинаковые.png|Пример результатов сравнения в режиме '''Одинаковые'''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
:5. Посмотрите различия в параметрах анализа – нажмите кнопку '''Показать различия''' на вкладке '''Информация о различиях'''.&lt;br /&gt;
:[[File:44 Различия в результатах анализа.png|600px|thumb|none|Сравнение настроек анализа]]&lt;br /&gt;
:6. Посмотрите различия в статистике разметки – нажмите кнопку '''Различия разметок'''.&lt;br /&gt;
:[[File:45 Различия в статистике по детекторам.png|thumb|none|600px|Сравнение статистики разметок]]&lt;br /&gt;
:7. Нажмите кнопку [[File:Icon download CSV.png|x25px]] или [[File:Icon download PDF.png|x25px]], чтобы скачать статистику в формате CSV или PDF.&lt;br /&gt;
:8. Отмените сравнение – нажмите кнопку [[File:Icon cancel 2.png|x25px]] в блоке выбора проекта, ветки и снимка.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сопоставление маркеров ===&lt;br /&gt;
{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектным доступом]] '''Разметка маркеров''' и [[#Серверные доступы|серверным доступом]] '''Администрирование сервера'''''}}&lt;br /&gt;
&lt;br /&gt;
Если при импорте снимка в ветку проекта не все маркеры были автоматически сопоставлены (сформированы инварианты), то такие маркеры можно сопоставить вручную. При сопоставлении маркеров с разметкой, инварианту присваивается разметка маркера из последнего импортированного снимка.&lt;br /&gt;
&lt;br /&gt;
Результат сопоставления, выполненного вручную, можно отменить.&lt;br /&gt;
==== Сопоставление маркеров вручную ====&lt;br /&gt;
Сопоставление маркеров вручную проводится в два этапа:&lt;br /&gt;
:а)	Выбор пар маркеров и их сопоставление, без сохранения в БД.&lt;br /&gt;
:б)	Просмотр выбранных пар и подтверждение операции.&lt;br /&gt;
&lt;br /&gt;
Чтобы вручную сопоставить маркеры:&lt;br /&gt;
:1. [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|Выберите исходный контекст]].&lt;br /&gt;
:2. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] нажмите кнопку [[File:Button Сравнить с.png|x25px]] и в раскрывшемся списке выберите пункт '''Сопоставить маркеры'''.&lt;br /&gt;
:Откроется окно '''Сопоставить маркеры'''.&lt;br /&gt;
&lt;br /&gt;
:3. &amp;lt;span id=&amp;quot;MarksStep1&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Этап 1. На вкладке '''Сопоставление маркеров''':&lt;br /&gt;
::а) Выберите снимок, маркеры которого нужно сопоставить с исходным.&lt;br /&gt;
::Отобразятся две таблицы маркеров: слева – для исходного снимка, а справа – для выбранного.&lt;br /&gt;
::б) Чтобы перед сопоставлением сравнить маркеры, выберите маркеры – по одному в каждой таблице – и нажмите кнопку '''Сравнить''' (расположена над таблицей).    &lt;br /&gt;
::Отобразится окно сравнения выбранных маркеров.&lt;br /&gt;
::Если требуется, повторите операцию для других пар маркеров.&lt;br /&gt;
::в) Выберите маркеры для сопоставления – по одному в каждой таблице – и нажмите кнопку '''Сопоставить''' (расположена над таблицей). Если требуется, повторите операцию для других пар маркеров. &lt;br /&gt;
::Для сопоставленных маркеров справа от названия будет отображаться номер сопоставленной пары.&lt;br /&gt;
::г) Для отмены сопоставления пары маркеров выберите любой сопоставленный маркер и нажмите '''Отменить сопоставление''' (расположена над таблицей). Если требуется, повторите операцию для других пар маркеров.&lt;br /&gt;
::д) Для просмотра фрагмента кода, в котором находится маркер – нажмите кнопку [[File:icon_preview_code.png|x25px]].&lt;br /&gt;
::е) Для отказа от дальнейшего сопоставления и отмены всех изменений нажмите кнопку '''Отмена'''.&lt;br /&gt;
::ж) Для перехода к подтверждению выбора нажмите кнопку '''Далее'''.&lt;br /&gt;
 &lt;br /&gt;
:[[File:122 Выбор снимка и сопоставление пар маркеров.png|800px|thumb|none|Окно '''Сопоставить маркеры'''. Выбор снимка и сопоставление пар маркеров]]&lt;br /&gt;
:[[File:48 Различия исходного кода.png|800px|thumb|none|Окно '''Сравнение маркеров''']]&lt;br /&gt;
&lt;br /&gt;
:4. Этап 2. В открывшейся форме:&lt;br /&gt;
::а) Проверьте список сопоставленных пар маркеров для применения операций сопоставления.&lt;br /&gt;
::б) Для корректировки списка сопоставленных пар маркеров нажмите кнопку '''Назад''' и выполните операции [[Help:UI manual#MarksStep1|Этапа 1]].&lt;br /&gt;
::в) Для отказа от дальнейшего сопоставления и отмены всех изменений нажмите кнопку '''Отмена'''.&lt;br /&gt;
::г) Для запуска операции сопоставления нажмите кнопку '''Подтвердить'''.&lt;br /&gt;
 &lt;br /&gt;
:[[File:123 Подтверждение сопоставления.png|800px|thumb|none|Окно «Сопоставить маркеры». Подтверждение сопоставления]]&lt;br /&gt;
&lt;br /&gt;
:По окончании операции для данной ветки проекта будет изменена конфигурация инвариантов. Всем пользователям, у которых открыт данный контекст, отобразится сообщение:&lt;br /&gt;
 &lt;br /&gt;
:[[File:124 Сообщение об окончании сопоставления отмены.png|800px|thumb|none|Сообщение об окончании операции сопоставления]]&lt;br /&gt;
:{{Note|type=info|text=''При сопоставлении метки маркеров удаляются.''}}&lt;br /&gt;
&lt;br /&gt;
==== Отмена операций сопоставления ====&lt;br /&gt;
Отмена операций ручного сопоставления маркеров проводится в два этапа:&lt;br /&gt;
:а) Выбор операций ручного сопоставления для отмены (отката).&lt;br /&gt;
:б) Просмотр списка всех операций, которые будут отменены, и подтверждение отмены операций сопоставления. &lt;br /&gt;
&lt;br /&gt;
Чтобы отменить (откатить) операции сопоставления:&lt;br /&gt;
:1. [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|Выберите исходный контекст]].&lt;br /&gt;
:2. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] нажмите кнопку [[File:Button Сравнить с.png|x25px]] и в раскрывшемся списке выберите пункт '''Сопоставить маркеры'''.&lt;br /&gt;
:Откроется окно '''Сопоставить маркеры'''.&lt;br /&gt;
:3. Этап 1. На вкладке '''Отмена операций сопоставления''':&lt;br /&gt;
::а) Выберите операции сопоставления маркеров, которые нужно отменить.&lt;br /&gt;
::В списке отображаются операции ручного сопоставления маркеров в исходной ветке проекта.&lt;br /&gt;
::б) Для отказа от продолжения операции нажмите кнопку '''Отмена'''.&lt;br /&gt;
::в) Для перехода к подтверждению выбора нажмите кнопку '''Далее'''.&lt;br /&gt;
 &lt;br /&gt;
:[[File:125 Выбор маркеров для отмены сопоставления.png|800px|thumb|none|Окно «Сопоставить маркеры». Выбор операций сопоставления маркеров для отмены]]&lt;br /&gt;
&lt;br /&gt;
:4. Этап 2. В открывшейся форме:&lt;br /&gt;
::а) Проверьте список операций сопоставления, которые будут отменены. Список операций, помимо выбранных пользователем операций сопоставления, может дополнительно включать другие связанные операции, которые также будут отменены.&lt;br /&gt;
::б) Для корректировки выбранных операций сопоставления маркеров  нажмите кнопку '''Назад''' и измените выбор маркеров.&lt;br /&gt;
::в) Для отказа от продолжения операции нажмите кнопку '''Отмена'''.&lt;br /&gt;
::г) Для запуска операции отмены сопоставления маркеров нажмите кнопку '''Подтвердить'''.&lt;br /&gt;
 &lt;br /&gt;
:[[File:126 Подтверждение отмены сопоставления.png|800px|thumb|none|Окно «Сопоставить маркеры». Подтверждение отмены операций сопоставления]]&lt;br /&gt;
&lt;br /&gt;
:По окончании операции для данной ветки проекта будет изменена конфигурация инвариантов. Всем пользователям, у которых открыт данный контекст, отобразится сообщение:&lt;br /&gt;
 &lt;br /&gt;
:[[File:124 Сообщение об окончании сопоставления отмены.png|800px|thumb|none|Сообщение об окончании операции отмены сопоставления]]&lt;br /&gt;
:{{Note|type=info|text=''При отмене операции сопоставления метки маркеров удаляются.''}}&lt;br /&gt;
&lt;br /&gt;
=== Сравнение маркеров ===&lt;br /&gt;
Чтобы сравнить два маркера:&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходный контекст]].&lt;br /&gt;
:2. Раскройте [[Help:UI manual#Таблица маркеров|таблицу маркеров]].&lt;br /&gt;
:3. Нажмите правой кнопкой мыши на строке маркера и выберите пункт '''Сравнить с ...''' &lt;br /&gt;
:[[File:155 Переход к сравнению маркеров.png|thumb|none|upright=2|Переход к сравнению маркеров]]&lt;br /&gt;
:Откроется окно выбора маркера для сравнения.&lt;br /&gt;
:[[File:46 Выбор маркера для сравнения.png|thumb|none|upright=3|Окно выбора маркера для сравнения]]&lt;br /&gt;
:{{Note|type=info|text=''При сравнении снимков для режимов '''Сопоставленные''' и '''Одинаковые''' в таблице маркеров по клику правой кнопкой мыши на строке маркера доступен пункт '''Сравнение с другой версией'''. При выборе данной команды происходит сравнение маркера с его версией из сравниваемого снимка.''}}&lt;br /&gt;
:4. Выберите проект, ветку и снимок. &lt;br /&gt;
:Отобразится список маркеров в выбранном снимке, где можно ввести запрос для поиска маркеров.&lt;br /&gt;
:[[File:47 Результат сравнения маркеров.png|thumb|none|upright=3|Выбор маркера для сравнения]]&lt;br /&gt;
:5. Дважды кликните на  строке маркера или нажмите кнопку '''Сравнить''', чтобы перейти в окно сравнения маркеров.&lt;br /&gt;
:[[File:48 Различия исходного кода.png|thumb|none|upright=3|Окно сравнения маркеров]]&lt;br /&gt;
&lt;br /&gt;
=== Разметка маркера ===&lt;br /&gt;
Разметка маркера заключается в установке статуса, а также, опционально, серьезности (критичности) и требуемого действия.&lt;br /&gt;
Установка серьезности и действия доступны только после установки статуса.&lt;br /&gt;
Разметить маркер можно [[Help:UI manual#Работа в режиме разметки|в режиме разметки]].&lt;br /&gt;
==== Разметка маркера вручную ====&lt;br /&gt;
Вручную маркер можно разметить тремя способами:&lt;br /&gt;
:1. &amp;lt;span id=&amp;quot;Marking1&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;'''''Способ 1'''''. С помощью кнопок в верхней части [[Help:UI manual#Функции правой панели|правой панели]].&lt;br /&gt;
:2. &amp;lt;span id=&amp;quot;Marking2&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;'''''Способ 2'''''. С помощью кнопок в виджете маркера [[Help:UI manual#Вкладка с исходным кодом|на вкладке с исходным кодом]].&lt;br /&gt;
:Если [[Help:UI manual#Работа с проектами|для проекта]] установлен флаг '''Обязательный комментарий при разметке''', то при разметке с помощью способов [[Help:UI manual#Marking1|1]] и [[Help:UI manual#Marking2|2]] откроется [[Help:UI manual#Marking3|окно разметки]], в котором обязательно нужно ввести комментарий.&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot; heights=&amp;quot;180px&amp;quot; style=&amp;quot;float:left; clear:right; margin-right:1em; margin-left:0&amp;quot;&amp;gt;&lt;br /&gt;
  49 Разметка Статус.png|Выбор статуса разметки маркера&lt;br /&gt;
  50 Разметка Серьезность.png|Выбор серьезности разметки маркера&lt;br /&gt;
  51 Разметка Действие.png|Выбор действия разметки маркера&lt;br /&gt;
  127 Кнопки разметки в виджете маркера.png|Кнопки разметки в виджете маркера на вкладке с исходным кодом&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
:3. '''''Способ 3'''''. В отдельном окне разметки вручную. Для этого:&lt;br /&gt;
::а) Нажмите кнопку [[File:Icon edit.png|x25px]] в верхней части правой панели или в виджете маркера на вкладке с исходным кодом.&lt;br /&gt;
::Откроется &amp;lt;span id=&amp;quot;Marking3&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; окно '''Разметка'''.&lt;br /&gt;
::&amp;lt;gallery heights=&amp;quot;200&amp;quot; perrow=&amp;quot;2&amp;quot; mode=&amp;quot;packed&amp;quot; style=&amp;quot;float:left; clear:right;&amp;quot;&amp;gt;&lt;br /&gt;
  235 Окно Разметка.png|Окно «Разметка» &lt;br /&gt;
  File:99 Окно разметки.png|Окно разметки. Поле '''Комментарий''' – обязательное&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
::б) Выберите статус, а также, опционально, серьезность (критичность) и требуемое действие.&lt;br /&gt;
::в) Введите комментарий.&lt;br /&gt;
::Если [[Help:UI manual#Работа с проектами|для проекта]] установлен флаг '''Обязательный комментарий при разметке''', то добавление комментария обязательно.&lt;br /&gt;
::Редактор комментариев поддерживает синтаксис Markdown.&lt;br /&gt;
::Для упоминания пользователя, вставьте '''@''' и введите или выберите его логин. После добавления комментария по нажатии кнопки '''Применить''' указанному пользователю придет [[Help:UI manual#Просмотр уведомлений в интерфейсе Системы|уведомление в интерфейсе системы]] об упоминании с возможностью перехода к маркеру с этим комментарием.&lt;br /&gt;
::г) Нажмите кнопку '''Применить'''.&lt;br /&gt;
&lt;br /&gt;
Результаты разметки со связанными комментариями отображаются [[Help:UI manual#Функции правой панели|в правой панели]] на вкладке '''Комментарии'''. При этом можно поменять текст комментария, но не результат разметки. Для её изменения нужно заново установить статус, серьезность и действие.&lt;br /&gt;
:[[File:100 Правая панель Комментарии с разметкой.png|300px|thumb|none|Правая панель. Комментарии, добавленные при разметке]]&lt;br /&gt;
&lt;br /&gt;
==== Разметка маркера с помощью ассистента AI ====&lt;br /&gt;
{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектными доступами]] '''Разметка маркеров''' и '''Импорт разметки'''.&amp;lt;br /&amp;gt;Ассистент AI должен быть [[Help:XSvacer:AIAssistant|включен и настроен]].''}}&lt;br /&gt;
Чтобы разметить маркер с помощью ассистента AI:&lt;br /&gt;
:1. Нажмите кнопку [[File:Icon edit.png|x25px]] в верхней части правой панели или в виджете маркера на вкладке с исходным кодом.&lt;br /&gt;
Откроется окно '''Разметка'''.&lt;br /&gt;
:2. Смените режим разметки с помощью переключателя '''Режим разметки с помощью AI'''.&lt;br /&gt;
:3. В отобразившемся режиме разметки выберите '''Модель AI''', с помощью которой ассистент AI рассчитает статус разметки.&lt;br /&gt;
:Спрогнозированный статус и уровень доверия прогнозу отобразятся в этом же окне. Если модель AI не смогла предсказать статус разметки, то отобразится значение '''n/a''' и кнопка '''Применить''' будет неактивна.&lt;br /&gt;
:Если маркер уже размечен и его статус совпадает с прогнозным, то в окне отобразится сообщение об этом и дальнейшая разметка станет недоступна.&lt;br /&gt;
:[[File:236 Окно Разметка AI.png|400px|thumb|none|Окно «Разметка». Режим разметки с помощью ассистента AI]]&lt;br /&gt;
:4. Введите комментарий.&lt;br /&gt;
:5. Нажмите кнопку '''Применить'''.&lt;br /&gt;
Результаты разметки со связанными комментариями отображаются [[Help:UI manual#Функции правой панели|в правой панели]] на вкладке '''Комментарии'''. При этом можно поменять текст комментария, но не результат разметки. Для её изменения нужно заново установить статус, серьезность и действие.&lt;br /&gt;
Комментарий, добавленный при разметке с помощью ассистента AI, дополнительно содержит информацию о проведенной разметке: время, имя модели машинного обучения, уровень доверия прогнозу. Также для такого маркера в правой панели на вкладке '''Подробности''' присвоена метка '''AI'''.&lt;br /&gt;
&amp;lt;gallery heights=&amp;quot;210&amp;quot; perrow=&amp;quot;2&amp;quot; mode=&amp;quot;packed&amp;quot; style=&amp;quot;float:left; clear:right;&amp;gt;&lt;br /&gt;
  237 Разметка комментарий AI.png|Правая панель.&amp;lt;/br&amp;gt;Комментарий, добавленный при разметке с помощью ассистента AI &lt;br /&gt;
  238 Разметка метка AI.png|Правая панель.&amp;lt;/br&amp;gt;Метка AI на вкладке «Подробности»&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Групповая разметка маркеров ===&lt;br /&gt;
==== Групповая разметка маркеров вручную ====&lt;br /&gt;
Для групповой разметки маркеров вручную:&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходные проект, ветку и снимок]].&lt;br /&gt;
:2. Включите отображение [[Help:UI manual#Таблица маркеров|таблицы маркеров]].&lt;br /&gt;
:3. Выберите маркеры для разметки – установите флажки в строках таблицы.&lt;br /&gt;
:4. Нажмите кнопку [[File:icon edit.png|x25px]] (доступна, если выбраны маркеры в таблице).&lt;br /&gt;
:&amp;lt;span id=&amp;quot;GroupMark1&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[File:53 Выбор маркеров для группразметки.png|thumb|none|upright=2.5|Выбор маркеров для групповой разметки]]&lt;br /&gt;
:Отобразится окно для групповой разметки.&lt;br /&gt;
:&amp;lt;span id=&amp;quot;GroupMark2&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[File:54 Окно групповой разметки.png|thumb|none|upright=2.5|Окно групповой разметки]]&lt;br /&gt;
:5. Выберите статус разметки, а затем (опционально) статус серьезности (критичности) и требуемое действие – нажмите кнопки со значениями.&lt;br /&gt;
:6. Добавьте общий комментарий для выбранных маркеров.&amp;lt;br /&amp;gt;&lt;br /&gt;
:Редактор комментариев поддерживает синтаксис Markdown.&lt;br /&gt;
:Для упоминания пользователя, вставьте '''@''' и введите или выберите его логин. После добавления комментария по нажатии кнопки '''Применить''' указанному пользователю придет [[Help:UI manual#Просмотр уведомлений в интерфейсе Системы|уведомление в интерфейсе системы]] об упоминании с возможностью перехода к этому комментарию.&lt;br /&gt;
:После того, как пользователь или ассистент AI присвоил статусы и (или) написал комментарий, станет доступной кнопка '''Применить'''.&amp;lt;br /&amp;gt;&lt;br /&gt;
:{{Note|type=info|text=''Ввод комментария обязателен, если [[Help:UI manual#Работа с проектами|для проекта]] установлен флаг '''Обязательный комментарий при разметке'''''.}}&lt;br /&gt;
:7. Если требуется отменить изменения, нажмите [[File:icon cross 01.png|x15px]] в правом верхнем углу окна или кнопку '''Отмена'''.&amp;lt;br /&amp;gt;Диалоговое окно закроется, изменения не будут применены, выделение с выбранных для разметки маркеров не снимается.&lt;br /&gt;
:8. Нажмите кнопку '''Применить''', чтобы запустить процесс разметки.&amp;lt;br /&amp;gt;&lt;br /&gt;
Прогресс разметки отображается в соответствующем окне. Запущенный процесс можно полностью отменить нажатием кнопки '''Отмена'''.&amp;lt;br /&amp;gt;&lt;br /&gt;
В результате применения разметки текст маркеров [[Help:UI manual#Таблица маркеров|в таблице маркеров]] окрасится в цвет, соответствующий выставленному статусу.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;GroupMark3&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;gallery widths=&amp;quot;400&amp;quot; mode=&amp;quot;nolines&amp;quot; style=&amp;quot;float:center; clear:center; margin-right:1em; margin-left:0&amp;quot;&amp;gt;&lt;br /&gt;
  56 Окно прогресса разметки.png|Окно прогресса разметки&lt;br /&gt;
  57 Результат групповой разметки.png|Пример таблицы маркеров после применения групповой разметки&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Групповая разметка маркеров с помощью ассистента AI ====&lt;br /&gt;
{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектными доступами]] '''Разметка маркеров''' и '''Импорт разметки'''.&amp;lt;br /&amp;gt;Ассистент AI должен быть [[Help:XSvacer:AIAssistant|включен и настроен]].''}}&lt;br /&gt;
Чтобы разметить группу маркеров с помощью ассистента AI:&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходные проект, ветку и снимок]].&lt;br /&gt;
:2. Включите отображение [[Help:UI manual#Таблица маркеров|таблицы маркеров]].&lt;br /&gt;
:3. [[Help:UI manual#GroupMark1|Выберите маркеры для разметки]] – установите флажки в строках таблицы.&lt;br /&gt;
:4. Нажмите кнопку [[File:icon edit.png|x25px]] (доступна, если выбраны маркеры в таблице).&lt;br /&gt;
:[[File:53 Выбор маркеров для группразметки.png|thumb|none|upright=2.5|Выбор маркеров для групповой разметки]]&lt;br /&gt;
:Отобразится [[Help:UI manual#GroupMark2|окно для групповой разметки]].&lt;br /&gt;
:5. Смените режим разметки с помощью переключателя '''Режим разметки с помощью AI'''.&lt;br /&gt;
:6. В отобразившемся режиме разметки выберите '''Модель AI''', с помощью которой ассистент AI рассчитает статус разметки.&lt;br /&gt;
:Спрогнозированный статус и уровень доверия прогнозу отобразятся в этом же окне в строке каждого выбранного маркера. Если модель AI не смогла предсказать статус разметки, то отобразится значение '''n/a''' и установка флажка столбце '''Статус разметки''' будет недоступна. &lt;br /&gt;
:7. Выберите маркеры для разметки – установите флажки в столбце '''Статус разметки'''.&lt;br /&gt;
:Если маркер уже размечен и его статус совпадает с прогнозным, то установка флажка в его строке недоступна.&lt;br /&gt;
:[[File:239 Групповая разметка AI.png|thumb|none|upright=2.5|Окно групповой разметки. Режим разметки с помощью ассистента AI]]&lt;br /&gt;
:8. Добавьте общий комментарий для выбранных маркеров.&amp;lt;br /&amp;gt;&lt;br /&gt;
:Редактор комментариев поддерживает синтаксис Markdown.&lt;br /&gt;
:Для упоминания пользователя, вставьте '''@''' и введите или выберите его логин. После добавления комментария по нажатии кнопки '''Применить''' указанному пользователю придет [[Help:UI manual#Просмотр уведомлений в интерфейсе Системы|уведомление в интерфейсе системы]] об упоминании с возможностью перехода к этому комментарию.&lt;br /&gt;
:После того, как пользователь или ассистент AI присвоил статусы и (или) написал комментарий, станет доступной кнопка '''Применить'''.&amp;lt;br /&amp;gt;&lt;br /&gt;
:{{Note|type=info|text=''Ввод комментария обязателен, если [[Help:UI manual#Работа с проектами|для проекта]] установлен флаг '''Обязательный комментарий при разметке'''''.}}&lt;br /&gt;
:9. Если требуется отменить изменения, нажмите [[File:icon cross 01.png|x15px]] в правом верхнем углу окна или кнопку '''Отмена'''.&amp;lt;br /&amp;gt;Диалоговое окно закроется, изменения не будут применены, выделение с выбранных для разметки маркеров не снимается.&lt;br /&gt;
:10. Нажмите кнопку '''Применить''', чтобы запустить процесс разметки.&amp;lt;br /&amp;gt;&lt;br /&gt;
Прогресс разметки отображается в [[Help:UI manual#GroupMark3|соответствующем окне]]. Запущенный процесс можно полностью отменить нажатием кнопки '''Отмена'''.&amp;lt;br /&amp;gt;&lt;br /&gt;
В результате применения разметки текст маркеров [[Help:UI manual#Таблица маркеров|в таблице маркеров]] окрасится в цвет, соответствующий выставленному статусу.&lt;br /&gt;
&lt;br /&gt;
=== Блокировка разметки маркеров===&lt;br /&gt;
Пользователь может заблокировать другим пользователям возможность [[Help:UI manual#Разметка маркера|размечать маркер]] или [[Help:UI manual#Групповая разметка маркеров|группу маркеров]]. Это позволяет избежать коллизий при разметке маркеров несколькими пользователями.&lt;br /&gt;
&lt;br /&gt;
Для блокировки разметки используйте кнопку [[File:icon unlocked.png|x25px]] в следующих частях пользовательского интерфейса:&lt;br /&gt;
:1. [[Help:UI manual#Вкладка «Детекторы»|На вкладке '''Детекторы''']]. В этом случае блокировка распространяется на все маркеры выбранного детектора в открытом проекте и ветке, для всех снимков ветки.&lt;br /&gt;
:2. [[Help:UI manual#Вкладка «Файлы»|На вкладке '''Файлы''']]. В этом случае блокировка распространяется на все маркеры в выбранном файле в открытом проекте и ветке, для всех снимков ветки.&lt;br /&gt;
:3. В верхней части [[Help:UI manual#Функции правой панели|правой панели]]. В этом случае блокировка распространяется на все эквивалентные маркеры в открытом проекте и ветке, для всех снимков ветки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot; heights=&amp;quot;200px&amp;quot; perrow=&amp;quot;2&amp;quot; style=&amp;quot;float:left; clear:right; margin-right:1em; margin-left:1em&amp;quot;&amp;gt;&lt;br /&gt;
  58 Блокировка на вкладке Детекторы.png|Блокировка маркера на вкладке '''Детекторы'''&lt;br /&gt;
  File:59_Блокировка_на_вкладке_Файлы.png|Блокировка маркера на вкладке '''Файлы'''&lt;br /&gt;
  60_Блокировка_на_правой_панели.png|Блокировка маркера на правой панели&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если один пользователь заблокировал маркер, то другой пользователь не сможет заблокировать детектор, которому принадлежит этот маркер, и файл, в котором этот маркер найден.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Чтобы посмотреть все блокировки, перейдите в раздел [[Help:UI manual#Настройка сервера Svacer|'''Настройки''']] на [[Help:UI manual#Управление блокировками разметки|вкладку '''Блокировки''']]:&lt;br /&gt;
&lt;br /&gt;
[[File:61 Просмотр всех блокировок.png|thumb|none|upright=3.5|Таблица блокировок]]&lt;br /&gt;
&lt;br /&gt;
В этом разделе можно удалить только свои блокировки. Пользователь с доступом '''Удаление блокировок''' может удалить любые блокировки.&lt;br /&gt;
&lt;br /&gt;
=== Добавление комментария к нескольким маркерам ===&lt;br /&gt;
Для добавления комментария к нескольким маркерам одновременно:&lt;br /&gt;
:1. В режиме разметки [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходный контекст]] – проект, ветку, снимок.&lt;br /&gt;
:2. Включите отображение [[Help:UI manual#Таблица Маркеров|таблицы маркеров]].&lt;br /&gt;
:3. Выберите маркеры для разметки – установите флажки в строках таблицы.&lt;br /&gt;
:4. Нажмите кнопку [[File:Button Comment Add.png|x25px]] (доступна, если выбраны маркеры в таблице).&lt;br /&gt;
 &lt;br /&gt;
:[[File:128 Добавление общего комментария 1.png|400px|thumb|none|Выбор маркеров для добавления комментария к нескольким маркерам одновременно]]&lt;br /&gt;
:5. Отобразится окно для добавления комментария к нескольким маркерам одновременно.&lt;br /&gt;
 &lt;br /&gt;
:[[File:129 Добавление общего комментария 2.png|600px|thumb|none|Окно добавления комментария к нескольким маркерам одновременно]]&lt;br /&gt;
:6. Введите комментарий.&lt;br /&gt;
:Редактор комментариев поддерживает синтаксис Markdown.&lt;br /&gt;
:Для упоминания пользователя, вставьте '''@''' и введите или выберите его логин. После добавления комментария по нажатии кнопки '''Применить''' указанному пользователю придет [[Help:UI manual#Просмотр уведомлений в интерфейсе Системы|уведомление в интерфейсе системы]] об упоминании с возможностью перехода к маркеру с этим комментарием.&lt;br /&gt;
:8. Нажмите кнопку '''Сохранить'''.&lt;br /&gt;
&lt;br /&gt;
=== Экспорт ===&lt;br /&gt;
В режиме разметки можно выполнить экспорт:&lt;br /&gt;
* [[Help:UI manual#Экспорт исходного кода с разметкой|исходного кода с разметкой]];&lt;br /&gt;
* [[Help:UI manual#Экспорт снимка в формате snap|снимка в формате snap]];&lt;br /&gt;
* [[Help:UI manual#Экспорт разметки и снимка в SARIF|снимка в формате SARIF]];&lt;br /&gt;
* [[Help:UI manual#Экспорт разметки|разметки в файл]].&lt;br /&gt;
{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектным доступом]] '''Экспорт снимков'''''}}&lt;br /&gt;
&lt;br /&gt;
==== Экспорт исходного кода с разметкой ====&lt;br /&gt;
Чтобы экспортировать с сервера исходный код с разметкой (опционально):&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходный контекст]] – проект, ветку и снимок.&lt;br /&gt;
:2. На вкладке '''Информация о снимке''' нажмите кнопку '''Экспорт''' и выберите пункт '''Исходный код с разметкой'''.&lt;br /&gt;
:[[File:62 Переход к экспорту кода с разметкой.png|600px|thumb|none|Переход к экспорту кода с разметкой]]&lt;br /&gt;
:3. В открывшемся окне:&lt;br /&gt;
::а) Если требуется экспортировать разметку, установите флажок параметра '''Шаблон разметки''' и выберите шаблон для экспорта в списке справа. &lt;br /&gt;
::б) Опционально включите или выключите очистку старых комментариев.&lt;br /&gt;
::в) Опционально включите или выключите экспорт файлов с исходным кодом только выбранных в таблице маркеров или для всех маркеров в таблице, если маркеры не выбраны. &lt;br /&gt;
::г) Опционально заполните поля для удаления префиксов и исключения путей.&lt;br /&gt;
::д) Опционально введите регулярные выражения для очистки дополнительных строк (доступен, если включена очистка старых комментариев).&lt;br /&gt;
::[[File:63 Окно экспорта кода с разметкой.png|600px|thumb|none|Окно экспорта кода с разметкой]]&lt;br /&gt;
&lt;br /&gt;
::Пример удаления префиксов путей: &amp;lt;code&amp;gt;/.build/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::При экспорте можно исключить файлы, соответствующие [[Help:UI manual#Использование регулярных выражений|регулярным выражениям]] в поле '''Исключить пути'''. &lt;br /&gt;
:4. Нажмите кнопку '''Экспортировать'''.&lt;br /&gt;
В итоге создастся архив файлов с исходным кодом и, если был выбран шаблон разметки, то в исходный код будет добавлена актуальная разметка в соответствии с выбранным шаблоном.&lt;br /&gt;
&lt;br /&gt;
==== Экспорт снимка в формате snap ====&lt;br /&gt;
Чтобы экспортировать с сервера исходный код снимка в формате .snap:&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходный контекст]] – проект, ветку и снимок.&lt;br /&gt;
:2. На вкладке '''Информация о снимке''' нажмите кнопку '''Экспорт''' и выберите пункт '''Снимок (*.snap)'''.&lt;br /&gt;
:[[File:192 Разметка. Переход к экспорту снимка в формате snap.png|600px|thumb|none|Переход к экспорту снимка в формате snap]]&lt;br /&gt;
:Запустится формирование файла. При старте и по окончании экспорта пользователю отобразится соответствующее всплывающее сообщение.&lt;br /&gt;
:[[File:193 Сообщение. Экспорт снимка.png|thumb|600px|thumb|none|Пример всплывающих сообщений при старте и окончании экспорта снимка]]&lt;br /&gt;
&lt;br /&gt;
==== Экспорт разметки и снимка в SARIF ====&lt;br /&gt;
Чтобы экспортировать разметку и при необходимости исходный код снимка в файл формата SARIF:&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходный контекст]] – проект, ветку и снимок.&lt;br /&gt;
:2. На вкладке '''Информация о снимке''' нажмите кнопку '''Экспорт''' и выберите пункт '''SARIF'''.&lt;br /&gt;
:[[File:194 Разметка. Переход к экспорту снимка SARIF.png|thumb|600px|thumb|none|Переход к экспорту снимка SARIF]]&lt;br /&gt;
:3. В открывшемся окне:&lt;br /&gt;
::а) Выключите (опционально) формирование названия файла по умолчанию – снимите соответствующий флажок и введите название снимка. &lt;br /&gt;
::б) Опционально включите или выключите экспорт исходных файлов.&lt;br /&gt;
::в) Нажмите кнопку '''Экспортировать'''.&lt;br /&gt;
:[[File:195 Окно экспорта SARIF.png|thumb|600px|thumb|none|Окно экспорта снимка SARIF]]&lt;br /&gt;
:Запустится формирование файла. При старте и по окончании экспорта пользователю отобразится всплывающее сообщение.&lt;br /&gt;
:[[File:220 Сообщение. Экспорт SARIF.png|thumb|400px|thumb|none|Пример всплывающих сообщений при старте и окончании экспорта снимка в SARIF]]&lt;br /&gt;
&lt;br /&gt;
==== Экспорт разметки ====&lt;br /&gt;
Чтобы из ветки проекта экспортировать в файл разметку и/или комментарии:&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходный контекст]] – проект, ветку и снимок.&lt;br /&gt;
:2. На вкладке '''Информация о снимке''' нажмите кнопку '''Экспорт''' и выберите пункт '''Разметка'''.&lt;br /&gt;
:[[File:196 Разметка. Переход к экспорту разметки.png|thumb|thumb|thumb|600px|none|Переход к экспорту разметки]]&lt;br /&gt;
:3. В открывшемся окне:&lt;br /&gt;
::а) Выберите вариант экспорта. &lt;br /&gt;
::б) Если требуется экспортировать неразмеченные маркеры, установите флажок '''Включая разметку со статусом &amp;quot;Undecided&amp;quot;'''.&lt;br /&gt;
::в) Нажмите кнопку '''Экспортировать'''.&lt;br /&gt;
:[[File:197 Окно экспорта разметки.png|thumb|thumb|thumb|600px|none|Окно экспорта разметки]]&lt;br /&gt;
&lt;br /&gt;
=== Импорт разметки ===&lt;br /&gt;
В режиме разметки можно импортировать разметку из двух источников:&lt;br /&gt;
* [[Help:UI manual#Импорт разметки из файла|из файла]];&lt;br /&gt;
* [[Help:UI manual#Импорт разметки из исходного кода|из исходного кода снимка]].&lt;br /&gt;
{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектным доступом]] '''Импорт разметки'''''}}&lt;br /&gt;
&lt;br /&gt;
==== Импорт разметки из файла ====&lt;br /&gt;
Чтобы импортировать файл с разметкой:&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходный контекст]] – проект, ветку и снимок.&lt;br /&gt;
:2. На вкладке '''Информация о снимке''' нажмите кнопку '''Импорт''' и выберите пункт '''Разметка из файла'''.&lt;br /&gt;
:[[File:198 Разметка. Переход к импорту разметки из файла.png|thumb|thumb|thumb|600px|none|Переход к импорту файла с разметкой]]&lt;br /&gt;
:3. В открывшемся окне:&lt;br /&gt;
::а) Выберите файл архива в формате .gz. &lt;br /&gt;
::б) Выберите варианты импорта и действия при наличии конфликта разметки.&lt;br /&gt;
::в) Нажмите кнопку '''Импортировать'''.&lt;br /&gt;
:[[File:199 Окно импорта файла с разметкой.png|thumb|600px|thumb|none|Окно импорта файла с разметкой]]&lt;br /&gt;
:По окончании пользователю отобразится всплывающее сообщение с информацией о выполненной операции.&lt;br /&gt;
:[[File:200 Сообщение. Импорт разметки из файла.png|thumb|thumb|thumb|600px|none|Пример всплывающего сообщения об окончании импорта разметки из файла]]&lt;br /&gt;
&lt;br /&gt;
==== Импорт разметки из исходного кода ====&lt;br /&gt;
Чтобы импортировать разметку из исходного кода снимка в ветку проекта:&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходный контекст]] – проект, ветку и снимок.&lt;br /&gt;
:2. На вкладке '''Информация о снимке''' нажмите кнопку '''Импорт''' и выберите пункт '''Разметка из исходного кода'''.&lt;br /&gt;
:[[File:201 Разметка. Переход к импорту разметки из кода.png|thumb|thumb|thumb|thumb|600px|none|Переход к импорту исходного кода с разметкой]]&lt;br /&gt;
:3. В открывшемся окне выберите шаблон разметки и нажмите кнопку '''Импортировать'''.&lt;br /&gt;
:[[File:134_Импорт_разметки.png|thumb|thumb|thumb|600px|none|Окно импорта исходного кода с разметкой]]&lt;br /&gt;
:По окончании пользователю отобразится всплывающее сообщение с информацией о выполненной операции.&lt;br /&gt;
:[[File:203 Сообщение. Импорт разметки из кода.png|thumb|thumb|thumb|thumb|600px|none|Пример всплывающего сообщения об окончании импорта разметки из исходного кода снимка]]&lt;br /&gt;
&lt;br /&gt;
=== Работа с таблицей статистики ===&lt;br /&gt;
Чтобы посмотреть краткую статистику о разметке маркеров:&lt;br /&gt;
:1. [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|Выберите исходный контекст]].&lt;br /&gt;
:2. Перейдите [[Help:UI manual#Работа в режиме разметки|в режим разметки]].&lt;br /&gt;
:3. На вкладке '''Информация о снимке''' в строке свойства '''Статистика по детекторам''' нажмите кнопку '''Показать'''.&lt;br /&gt;
&lt;br /&gt;
:[[File:64 Переход к просмотру статистики.png|600px|thumb|none|Переход к просмотру статистики]]&lt;br /&gt;
&lt;br /&gt;
:Отобразится таблица статистики:&lt;br /&gt;
:[[File:65 Таблица статистики.png|600px|thumb|none|Таблица статистики]]&lt;br /&gt;
:4. Нажмите кнопку [[File:Icon download CSV.png|x20px]] или [[File:Icon download PDF.png|x20px]], чтобы выгрузить статистику в соответствующем формате.&lt;br /&gt;
:5. Нажмите кнопку [[File:Icon filter.png|x20px]] в строке статистики, чтобы применить [[Help:UI manual#Настройка и использование пользовательских фильтров|пользовательский фильтр]] с параметрами, которые соответствуют выбранному значению.&lt;br /&gt;
&lt;br /&gt;
== Работа в режиме просмотра кода ==&lt;br /&gt;
Режим позволяет посмотреть исходный код снимков, который был обработан анализатором Svace.&lt;br /&gt;
&lt;br /&gt;
Для этого:&lt;br /&gt;
:1. Перейдите в режим просмотра кода по кнопке меню [[File:Button Код.png|x25px]] в верхней части экрана.&lt;br /&gt;
:2. [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|Выберите исходный контекст]].&amp;lt;br&amp;gt;&lt;br /&gt;
:{{Note|type=info|text=''По умолчанию выбран контекст (проект, ветка), заданный ранее в режиме [[Help:UI manual#Работа в режиме разметки|'''Разметка''']]. Если Пользователь перешел в раздел '''Кoд''' из режима сравнения снимков раздела [[Help:UI manual#Работа в режиме разметки|'''Разметка''']], то для изменения контекста требуется отменить режим сравнения.''}}&lt;br /&gt;
:В левой части экрана отобразится иерархический список файлов снимка, а в правой – поле для отображения исходного кода файла.&lt;br /&gt;
:[[File:67 Режим просмотра кода.png|600px|thumb|none|Режим просмотра кода. Начальное состояние]]&lt;br /&gt;
:3. Для поиска файла:&lt;br /&gt;
::а) Кликните на поле поиска или нажмите комбинацию клавиш '''Ctrl+Shift+O'''.&lt;br /&gt;
::б) В открывшемся окне введите поисковый запрос и выберите файл.&lt;br /&gt;
:4. В левой части экрана раскройте группу файлов и нажмите на имя файла.&lt;br /&gt;
:В правой части отобразится исходный код файла.&lt;br /&gt;
:[[File:68 Режим просмотра кода открыт один файл.png|600px|thumb|none|Пример одного открытого файла]]&lt;br /&gt;
:5. Если требуется, откройте другие файлы.&lt;br /&gt;
:Они отобразятся на отдельных вкладках, если выключена [[Help:UI manual#Настройка профиля пользователя|настройка '''Переиспользование вкладки в редакторе кода''']].&lt;br /&gt;
:[[File:69 Режим просмотра кода открыто три файла.png|600px|thumb|none|Пример трёх открытых файлов]]&lt;br /&gt;
:6. Для перехода к предыдущей или следующей строке, в которую пользователь устанавливал курсор, используйте кнопки [[File:Button left.png|x25px]] и [[File:Button right.png|x25px]] или сочетания клавиш '''Ctrl+&amp;lt; и Ctrl+&amp;gt;'''.&lt;br /&gt;
:7. Вызовите функции, доступные по нажатии правой кнопки мыши на строке исходного кода&lt;br /&gt;
:* '''Перейти к объявлению''' – для перехода к строке, в которой объявлена переменная;&lt;br /&gt;
:* '''Перейти к определению''' – для перехода к строке, в которой определена переменная и функция;&lt;br /&gt;
:* '''Найти ссылки''' – для просмотра ссылок в панели с иерархическим списком файлов, именами файлов и номерами строк, в которых найдены ссылки;&lt;br /&gt;
::{{Note|type=info|text=''Если для выделенного элемента кода нет объявления, определения или ссылок, то отобразится сообщение: [[File:150 Объявление не найдено.png|x25px]], [[File:151 Определение не найдено.png|x25px]] или [[File:152 Ссылки не найдены.png|x25px]].''}}&lt;br /&gt;
::[[File:24 Исходный код Cписок файлов со ссылками.png|thumb|none|600px|Cписок файлов с номерами строк, в которых найдены ссылки]]&lt;br /&gt;
:* '''Копировать прямую ссылку''' – копирование ссылки на строку кода в буфер обмена. &lt;br /&gt;
::При переходе по этой ссылке будет открываться файл в режиме просмотра кода с курсором на той строке кода, для которой была скопирована ссылка;&lt;br /&gt;
:* '''Уменьшить''' и '''Увеличить''' – увеличение и уменьшение размера шрифта кода (эти функции также можно вызвать с помощью сочетаний клавиш '''Ctrl+Alt+-''' или '''Ctrl+Alt+=''').&lt;br /&gt;
:* '''Copy''' – для копирования строки в буфер обмена;&lt;br /&gt;
:* '''Command Palette''' – для вызова командной строки.&lt;br /&gt;
:6. Установите курсор в строке кода, чтобы отобразилось его позиционирование в правом нижнем углу.&lt;br /&gt;
:[[File:130 Позиционирование к коде.png|600px|thumb|none|Отображение позиционирования курсора в коде]]&lt;br /&gt;
:7. Сравните файлы – для этого:&lt;br /&gt;
::а) Нажмите правой кнопки мыши на имени файла и выберите пункт '''Сравнить с…'''&lt;br /&gt;
::[[File:156 Переход к сравнению файлов.png|thumb|none|600px|Переход к сравнению файлов]]&lt;br /&gt;
::б) В открывшемся окне выберите файл для сравнения. Для этого выберите проект, ветку и снимок, а затем раскройте группы файлов или воспользуйтесь поисковой строкой, нажмите на имя файла. &lt;br /&gt;
::По умолчанию выбраны проект и ветка исходного контекста.&lt;br /&gt;
::в)  Нажмите кнопку '''Сравнить'''.&lt;br /&gt;
:Откроется окно сравнения файлов.&lt;br /&gt;
 &lt;br /&gt;
:[[File:Code compare 2.png|600px|thumb|none|Окно выбора файла для сравнения]]&lt;br /&gt;
 &lt;br /&gt;
:[[File:Code_compare_3.png|600px|thumb|none|Окно сравнения файлов]]&lt;br /&gt;
&lt;br /&gt;
==Управление проектами и группами проектов==&lt;br /&gt;
В разделе '''Проекты''' отображаются все проекты со всеми ветками и снимками. &lt;br /&gt;
Для удобства работы проекты могут быть [[Help:UI manual#Работа с группами проектов|сгруппированы]]. Один проект может быть включен в несколько групп проектов.&lt;br /&gt;
[[File:101 Раздел Проекты.png|thumb|none|upright=3|Раздел '''Проекты''']]&lt;br /&gt;
&lt;br /&gt;
===Работа с проектами===&lt;br /&gt;
Список проектов отображается в левой части экрана и организован в виде иерархии. При этом:&lt;br /&gt;
* для проектов, разметку маркеров которых нужно в обязательном порядке снабжать комментариями, отображается иконка [[File:Icon comment.png|x25px]];&lt;br /&gt;
* в нижней части списка отображается общее количество проектов и веток с учетом примененных фильтров, а также выбранных проектов и веток.&lt;br /&gt;
В списке доступны:&lt;br /&gt;
* поиск по имени проекта;&lt;br /&gt;
* фильтрация списка по группам проектов;&lt;br /&gt;
* сортировка по названию или дате создания (по умолчанию – по названию).&lt;br /&gt;
При работе с проектами пользователю доступны следующие функции: &lt;br /&gt;
:1.	Загрузка актуальных данных с сервера – для этого нажмите кнопку [[File:Icon refresh.png|x25px]].&lt;br /&gt;
:2.	Просмотр списка веток – для этого нажмите на название проекта.&lt;br /&gt;
:Ветки отобразятся в этом же списке проекта на втором уровне.&lt;br /&gt;
:3.	Просмотр списка снимков – для этого нажмите на название ветки.&lt;br /&gt;
:Список снимков отобразится в виде таблицы в правой части экрана.&lt;br /&gt;
:4.	[[Help:UI manual#Работа с группами проектов|Группировка проектов]].&lt;br /&gt;
:5.	Создание проекта:&lt;br /&gt;
::а) Нажмите кнопку '''Создать проект'''.&lt;br /&gt;
::Откроется окно создания проекта.&lt;br /&gt;
::[[File:102 Создание проекта.png|thumb|none|upright=1.5|Окно создания проекта]]&lt;br /&gt;
::б) Введите название проекта.&lt;br /&gt;
::в) Для выбора одной или нескольких существующих групп кликните на поле '''Группы''' и выберите одно или несколько значений в списке:&lt;br /&gt;
::[[File:157 Окно создания проекта. Выбор существующей группы.png|thumb|none|upright=1.5|Окно создания проекта. Пример выбора существующей группы]]&lt;br /&gt;
::г) Для создания одной новой группы введите ее название и нажмите кнопку '''Создать''' в появившейся форме:&lt;br /&gt;
::[[File:158 Окно создания проекта.Создание одной группы.png|thumb|none|upright=1.5|Окно создания проекта. Пример создания одной группы]]&lt;br /&gt;
::д) Для создания нескольких новых групп введите их названия через запятую и нажмите кнопку '''Создать''' в появившейся форме:&lt;br /&gt;
::[[File:159 Окно создания проекта. Создание нескольких групп.png|thumb|none|upright=1.5|Окно создания проекта. Пример создания двух групп]]&lt;br /&gt;
::е) Установите флажок, если требуется при разметке маркеров обязательно добавлять комментарий.&lt;br /&gt;
::ж) Нажмите кнопку '''Создать'''.&lt;br /&gt;
:При создании проекта автоматически создается ветка '''master'''.&lt;br /&gt;
:При импорте снимка в интерфейсе командной строки проект, при его отсутствии, добавляется автоматически.&lt;br /&gt;
:6.	Добавление ветки: [[File:103 Создание ветки.png|thumb|right|none|upright=1.5|Окно добавления ветки в проект]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке проекта.&lt;br /&gt;
::б) В меню выберите пункт '''Создать ветку'''.&lt;br /&gt;
::в) В открывшемся окне введите название ветки и нажмите кнопку '''Создать'''.&lt;br /&gt;
:При импорте снимка в интерфейсе командной строки ветка, при ее отсутствии, добавляется автоматически.&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
:7. Клонирование проекта со всеми ветками и снимками: [[File:132 Окно клонирования проекта.png|thumb|right|none|upright=1.5|Окно клонирования проекта]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке проекта.&lt;br /&gt;
::б) В меню выберите пункт '''Клонировать'''.&lt;br /&gt;
::в) В открывшемся окне введите название нового проекта, при необходимости скорректируйте группы, в которые будет входить клонированный проект (по умолчанию, группы исходного проекта) и нажмите кнопку '''Клонировать'''.&lt;br /&gt;
&amp;lt;/br&amp;gt; &lt;br /&gt;
:9.	Редактирование параметров проекта:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке проекта.&lt;br /&gt;
::б) В меню выберите пункт '''Редактировать'''.&lt;br /&gt;
::в) В открывшемся окне измените название проекта, скорректируйте список групп, в которые включен проект, и установите или снимите флажок обязательности комментария при разметке и нажмите кнопку '''Сохранить'''.&lt;br /&gt;
:10.	Удаление одного проекта:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке проекта.&lt;br /&gt;
::б) В меню выберите пункт '''Удалить'''.&lt;br /&gt;
::в) Подтвердите удаление.&lt;br /&gt;
:11.	Удаление нескольких проектов с ветками:&lt;br /&gt;
::а) Выберите проекты для удаления – установите флажки в левой части названий проектов и веток или нажмите кнопку '''Выбрать всё'''.&lt;br /&gt;
::б) Нажмите кнопку '''Удалить''' в верхней части списка проектов и подтвердите удаление.&lt;br /&gt;
При удалении проекта удаляются все его ветки и снимки, разрывается связь проекта с группами.&lt;br /&gt;
&lt;br /&gt;
===Работа с группами проектов===&lt;br /&gt;
Работа с группами проектов доступна на отдельной панели '''Группы проектов''', которая отрывается по нажатии кнопки [[File:Icon gear.png|x25px]] в списке проектов. При этом в нижней части списка отображается общее количество групп.&lt;br /&gt;
&lt;br /&gt;
В списке групп доступны:&lt;br /&gt;
* поиск по названию группы;&lt;br /&gt;
* фильтрация списка по проектам.&lt;br /&gt;
&lt;br /&gt;
[[File:104 Панель групп.png|thumb|none|upright=3|Панель '''Группы проектов''']]&lt;br /&gt;
При работе с группами проектов пользователю доступны следующие функции: &lt;br /&gt;
:1.	Просмотр списка связанных с группой проектов – для этого нажмите на название группы.&lt;br /&gt;
:Проекты отобразятся в этом же списке групп на втором уровне.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:2.	Добавление группы: [[File:105 Создание группы.png|thumb|right|none|upright=1.5|Окно '''Создать группу''']]&lt;br /&gt;
::а) Нажмите кнопку '''Создать группу'''.&lt;br /&gt;
::б) В открывшемся окне введите название группы и выберите проекты, которые в неё войдут, нажмите кнопку '''Создать'''.&lt;br /&gt;
:Созданная группа отобразится в списке на панели '''Группы проектов'''.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:3.	Редактирование параметров группы: [[File:106 Редактирование группы.png|thumb|right|none|upright=1.5|Окно Редактировать группу]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Icon edit2.png|x25px]] в строке группы.&lt;br /&gt;
::б) В открывшемся окне измените название группы, скорректируйте состав включенных в группу проектов.&lt;br /&gt;
::в) Нажмите на кнопку [[File:Icon cancel.png|x25px]] справа от названия проекта в списке, чтобы исключить его из группы.&lt;br /&gt;
::г) Нажмите кнопку '''Сохранить'''.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:4.	Исключение одного проекта из группы – для этого нажмите кнопку [[File:Icon hide marks.png|x25px]] в правой части списка проектов группы.&lt;br /&gt;
:5.	Удаление одной группы – для этого нажмите кнопку [[File:Icon delete.png|x25px]] в правой части списка групп и подтвердите удаление.&lt;br /&gt;
:6.	Удаление нескольких групп:&lt;br /&gt;
::а) Выберите группы для удаления – установите флажки в левой части названий групп или нажмите кнопку '''Выбрать всё'''.&lt;br /&gt;
::б) Нажмите кнопку '''Удалить''' в верхней части списка групп проектов и подтвердите удаление.&lt;br /&gt;
:При удалении группы разрывается связь проекта с группой. Сами проекты не удаляются.&lt;br /&gt;
&lt;br /&gt;
===Работа с ветками===&lt;br /&gt;
При работе с ветками проекта пользователю доступны следующие функции: &lt;br /&gt;
:1.	Просмотр списка снимков – для этого нажмите на название ветки в списке проектов.&lt;br /&gt;
:Список снимков отобразится в виде таблицы в правой части экрана.&lt;br /&gt;
:2.	Редактирование ветки: [[File:107 Редактирование ветки.png|thumb|right|upright=1.5|Окно редактирования ветки]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке ветки.&lt;br /&gt;
::б) В меню выберите пункт '''Редактировать'''.&lt;br /&gt;
::в) В открывшемся окне измените название ветки и нажмите кнопку '''Сохранить'''.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:3.	Клонирование ветки проекта: [[File:108 Клонирование ветки.png|thumb|right|upright=1.5|Окно клонирования ветки]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке ветки.&lt;br /&gt;
::б) В меню выберите пункт '''Клонировать'''.&lt;br /&gt;
::в) В открывшемся окне введите название новой ветки и нажмите кнопку '''Клонировать'''.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:4. Экспорт разметки в файл: [[File:197 Окно экспорта разметки.png|thumb|right|upright=1.5|Окно экспорта разметки]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке ветки.&lt;br /&gt;
::б) В меню выберите пункт '''Экспорт разметки'''.&lt;br /&gt;
::Откроется окно экспорта разметки.&lt;br /&gt;
::в) Выберите вариант экспорта.&lt;br /&gt;
::г) Если требуется экспортировать неразмеченные маркеры, установите флажок '''Включая разметку со статусом &amp;quot;Undecided&amp;quot;'''.&lt;br /&gt;
::д) Нажмите кнопку '''Экспортировать'''.&lt;br /&gt;
::{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектным доступом]] '''Экспорт снимков'''''}}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:5. Импорт разметки из файла: [[File:199 Окно импорта файла с разметкой.png|thumb|right|upright=1.5|Окно импорта разметки]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке ветки.&lt;br /&gt;
::б) В меню выберите пункт '''Импорт разметки'''.&lt;br /&gt;
::Откроется окно импорта разметки.&lt;br /&gt;
::в) Выберите файл архива в формате .gz.&lt;br /&gt;
::г) Выберите варианты импорта и действия при наличии конфликта разметки.&lt;br /&gt;
::д) Нажмите кнопку '''Импортировать'''.&lt;br /&gt;
::{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектным доступом]] '''Импорт снимков'''''}}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:6.	Удаление ветки:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке ветки.&lt;br /&gt;
::б) В меню выберите пункт '''Удалить'''.&lt;br /&gt;
::в) Подтвердите удаление.&lt;br /&gt;
::При удалении ветки удаляются все ее снимки.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:7. Очистка разметки: [[File:160 Окно очистки разметки.png|thumb|right|upright=1.5|Окно очистки разметки]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке ветки.&lt;br /&gt;
::б) В меню выберите пункт '''Очистить разметку'''.&lt;br /&gt;
::в) В открывшемся окне выберите вариант очистки.&lt;br /&gt;
::г) Нажмите кнопку '''Очистить'''.&lt;br /&gt;
::{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектными доступами]] '''Управление ветками и снимками''', '''Разметка маркеров''' и [[#Cерверные доступы|серверным доступом]] '''Администрирование сервера'''.''}}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:8.	Копирование разметки в другой контейнер (проект и ветку): [[File:Image.png|thumb|right|upright=1.5|Окно копирования разметки в другой контейнер]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке ветки и в меню выберите пункт '''Копировать разметку'''.&lt;br /&gt;
::б) В открывшемся окне выберите проект и ветку, в которые нужно скопировать разметку, а также действия, которые нужно выполнить при наличии разметки.&lt;br /&gt;
::в) Нажмите кнопку '''Копировать'''.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Разметка в контейнере состоит из множества размеченных маркеров. В целевой ветке уже может находиться разметка. Все множество маркеров в исходной ветке можно разбить на два: &lt;br /&gt;
* «Уникальные» – маркеры, которые есть только в исходной ветке;&lt;br /&gt;
* «Общие» – маркеры, которые есть как в ветке-источнике, так и в ветке-приемнике.&lt;br /&gt;
При выполнении операции копирования разметка в уникальных маркерах всегда копируется в ветку-приемник. Для «Общих» маркеров возможны несколько вариантов продолжения копирования, но по умолчанию выбран пункт '''Не копировать''' – в этом случае разметка в «Общих» маркерах в ветке-приемнике не изменяется.&lt;br /&gt;
&lt;br /&gt;
Если выбрано действие '''Перезаписать''', разметка на «Общих» маркерах в целевом контейнере будет заменена разметкой из ветки-источника. &lt;br /&gt;
&lt;br /&gt;
При выборе действия '''Перезаписать только старую разметку''' разметка из ветки-источника копируется в том случае, если ее метка времени более поздняя, чем та, которая указана в ветке-приемнике на данном маркере.&lt;br /&gt;
&lt;br /&gt;
'''Пример''' &lt;br /&gt;
:Есть несколько контейнеров: &lt;br /&gt;
:* A с разметкой {(M1, D1), (M2, D2), (M3, D3)}&lt;br /&gt;
:* B с разметкой {(M4, D4), (M2, D5), (M3, D6)},&lt;br /&gt;
::где M — это маркер, а D — разметка (включая метку времени).&lt;br /&gt;
&lt;br /&gt;
:Операцию сравнения на разметке обозначим как &amp;gt;. Если метка времени в D1 больше, чем в D2, то D1 &amp;gt; D2.&lt;br /&gt;
:Пусть D2 &amp;gt; D5, а D3 &amp;lt; D6. Тогда операция копирования всегда скопирует разметку D1 (но не сам маркер), так как маркер M1 новый для контейнера B.&lt;br /&gt;
&lt;br /&gt;
:Маркеры M2, M3 — общие для двух контейнеров, поэтому то, какая разметка будет в контейнере-приемнике, будет зависеть от выбранного варианта разрешения конфликта: &lt;br /&gt;
:* если выбран пункт '''Не копировать''', то в контейнере B на маркерах M2, M3 будет разметка D5, D6 соответственно;&lt;br /&gt;
:* если выбран пункт '''Перезаписать''', то на M2, M3 будет разметка D2, D3;&lt;br /&gt;
:* если выбран пункт '''Перезаписать только старую разметку''', то на M2, M3 разметка будет: D2, D6, так как D2 &amp;gt; D5 и D6 &amp;gt; D3.&lt;br /&gt;
:При выполнении копирования наличие маркера в ветке-приемнике не проверяется.&lt;br /&gt;
:При успешном копировании выводится всплывающее сообщение с описанием выполненных операций:&lt;br /&gt;
:[[File:161 Сообщение об успешном копировании разметки.png|thumb|none|upright=2|Пример всплывающего сообщения об успешном копировании разметки]]&lt;br /&gt;
&lt;br /&gt;
===Работа со снимками===&lt;br /&gt;
Список снимков отображается в правой части экрана в виде таблицы после выбора ветки проекта. При этом в нижней части списка отображается общее количество снимков в выбранной ветке и количество выбранных снимков.&lt;br /&gt;
В списке доступны:&lt;br /&gt;
* поиск по названию снимка;&lt;br /&gt;
* сортировка по значениям столбцов (по умолчанию — по дате создания).&lt;br /&gt;
При работе со снимками пользователю доступны следующие функции: &lt;br /&gt;
:1. Импорт снимка из файла – для этого нажмите кнопку '''Импорт''' в верхней части табличного списка снимков и в открывшемся списке выберите один из вариантов импорта: '''Снимок (*.snap)''', '''Архив .svace-dir''' или '''SARIF'''.&lt;br /&gt;
:{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектным доступом]] '''Импорт снимков'''''}}&lt;br /&gt;
:После этого: &lt;br /&gt;
[[File:110 Импорт снимка.png|thumb|right|upright=1.5|Окно импорта снимка из файла в формате snap]]&lt;br /&gt;
::а) Если выбран импорт из файла в формате snap, то в открывшемся окне:&lt;br /&gt;
::* выберите файл в формате .snap;&lt;br /&gt;
::* введите название снимка (опционально);&lt;br /&gt;
::* Задайте [[Edit markers (command line)|правила трансформации, пропуска и дедупликации маркеров]] в поле '''Редактировать маркеры''' – загрузите JSON-файл с правилами или введите их;&lt;br /&gt;
::* нажмите кнопку '''Импортировать'''.&lt;br /&gt;
::{{Note|type=info|text=''Если при импорте снимка из snap-файла название не введено, то будет использовано название исходного снимка (параметр «name» в JSON с информацией о снимке).''}}&lt;br /&gt;
[[File:133 Импорт снимка из архива svace-dir.png|thumb|right|upright=1.5|Окно импорта снимка из архива в формате svace-dir]]&lt;br /&gt;
[[File:133.1_Импорт_снимка_из_архива_svace-dir_-_Поля_опций.png|thumb|right|upright=1.5|Окно импорта снимка из архива в формате svace-dir. Поля опций для расширенных настроек]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
::б) Если выбран импорт архива .svace-dir, то в открывшемся окне:&lt;br /&gt;
::* выберите архив .svace-dir;&lt;br /&gt;
::* введите название снимка (опционально);&lt;br /&gt;
::* выберите шаблон разметки (опционально);&lt;br /&gt;
::* укажите правила префикса пути (опционально);&lt;br /&gt;
::*  укажите расширенные настройки (опционально): для каждой настройки нажмите кнопку '''Добавить''', в появившихся полях выберите опцию и введите её значение; для удаления настройки нажмите кнопку [[File:Icon delete.png|x25px]].&lt;br /&gt;
::После выбора параметра в поле появляется иконка [[File:Icon question mark2.png|x15px]], по наведении курсора на которую можно посмотреть описание;&lt;br /&gt;
::* нажмите кнопку '''Импортировать'''. &lt;br /&gt;
::При старте операции и по ее окончании пользователю отобразятся соответствующие всплывающие сообщения.&lt;br /&gt;
::[[File:210 Сообщение. Импорт svace-dir.png|thumb|none|upright=1.5|Пример всплывающих сообщений при старте и окончании импорта снимка из архива в формате svace-dir]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:217 Импорт снимка SARIF.png|thumb|right|upright=1.5|Окно импорта снимка из файла в формате SARIF]]&lt;br /&gt;
[[File:218 Импорт снимка SARIF - поля опций.png|thumb|right|upright=1.5|Окно импорта снимка из архива в формате SARIF. Поля опций для расширенных настроек]]&lt;br /&gt;
::в) Если выбран импорт из файла в формате SARIF, то в открывшемся окне:&lt;br /&gt;
::*  выберите файл в формате .sarif или .json, либо архив в одном из форматов: .tar, tar.bz2, tar.gz, zip;&lt;br /&gt;
::*  введите название снимка (опционально);&lt;br /&gt;
::*  укажите правила префикса пути (опционально);&lt;br /&gt;
::*  укажите расширенные настройки (опционально): для каждой настройки нажмите кнопку '''Добавить''', в появившихся полях выберите опцию и введите её значение; для удаления настройки нажмите кнопку [[File:Icon delete.png|x25px]].&lt;br /&gt;
::После выбора параметра в поле появляется иконка [[File:Icon question mark2.png|x15px]], по наведении курсора на которую можно посмотреть описание;&lt;br /&gt;
::* нажмите кнопку '''Импортировать'''.&lt;br /&gt;
::При старте операции и по ее окончании пользователю отобразятся соответствующие всплывающие сообщения.&lt;br /&gt;
::[[File:211 Сообщение. Импорт SARIF.png|thumb|none|upright=1.5|Пример всплывающих сообщений при старте и окончании импорта снимка из архива в формате SARIF]]&lt;br /&gt;
:{{Note|type=info|text='''''Примечание:''''' &lt;br /&gt;
:* ''для импорта поддерживаются архивы папки .svace-dir, заархивированные с помощью tar, gz, bz2 или zip (*.tar, *.tar.gz, *.tar.bz2, *.zip);''&lt;br /&gt;
:* ''если при импорте архива .svace-dir название снимка не введено, то оно будет соответствовать времени импорта результатов анализа из Svace;''&lt;br /&gt;
:* ''в поле '''Расширенные настройки''' поддерживается ввод дополнительных опций команды &amp;lt;code&amp;gt;svacer import&amp;lt;/code&amp;gt; – как в интерфейсе командной строки (например, &amp;lt;code&amp;gt;--attach value&amp;lt;/code&amp;gt;). В аргументах дополнительных опций требуется указывать пути относительно архивированной папки. Описание опций можно найти, запустив команду &amp;lt;code&amp;gt;svacer import --help&amp;lt;/code&amp;gt;''.&lt;br /&gt;
:* ''для импорта снимка из snap-файла, .svace-dir  или SARIF может потребоваться много времени: как на загрузку, так и на обработку данных после загрузки. При работе сервера Svacer за reverse proxy их дефолтных значений таймаутов или ограничений на размер загружаемых данных может быть недостаточно, поэтому рекомендуется увеличить эти значения в конфигурационных файлах reverse proxy, см. [[Help:Configuration#Nginx|пример для Nginx]]''}}&lt;br /&gt;
:2. Экспорт снимка – для этого нажмите кнопку [[File:Icon export.png|x25px]] в крайнем правом столбце строки снимка и в открывшемся списке выберите один из вариантов экспорта: '''Экспорт (*.snap)''', '''Экспорт SARIF''' или '''Экспорт кода с разметкой'''.&lt;br /&gt;
:После этого:&lt;br /&gt;
::а) Если выбран экспорт в файл в формате snap, то по окончании его формирования во всплывающем сообщении нажмите кнопку '''Скачать'''.&lt;br /&gt;
::[[File:193 Сообщение. Экспорт снимка.png|thumb|none|upright=1.5|Пример всплывающих сообщений при старте и окончании экспорта снимка]]&lt;br /&gt;
:[[File:195 Окно экспорта SARIF.png|thumb|right|upright=1.5|Окно экспорта снимка SARIF]]&lt;br /&gt;
::б) Если выбран экспорт файла формата SARIF, то в открывшемся окне:&lt;br /&gt;
::* Выключите (опционально) формирование названия файла по умолчанию – снимите соответствующий флажок и введите название снимка.&lt;br /&gt;
::* Опционально включите или выключите экспорт исходных файлов.&lt;br /&gt;
::* Нажмите кнопку '''Экспортировать'''.&lt;br /&gt;
::Запустится формирование файла. При старте и по окончании экспорта пользователю отобразится всплывающее сообщение.&lt;br /&gt;
::[[File:220 Сообщение. Экспорт SARIF.png|thumb|none|upright=1.5|Пример всплывающих сообщений при старте и окончании экспорта снимка в SARIF]]&lt;br /&gt;
:[[File:340 Проекты Окно экспорта кода с разметкой.png||thumb|right|upright=1.5|Окно экспорта кода с разметкой]]&lt;br /&gt;
::в) Если выбран экспорт кода с разметкой, то в открывшемся окне:&lt;br /&gt;
::* Если требуется экспортировать разметку, установите флажок параметра '''Шаблон разметки''' и выберите шаблон для экспорта в списке справа.&lt;br /&gt;
::* Опционально включите или выключите очистку старых комментариев.&lt;br /&gt;
::* Опционально заполните поля для удаления префиксов и исключения путей.&lt;br /&gt;
:::Пример удаления префиксов путей: &amp;lt;code&amp;gt;/.build/&amp;lt;/code&amp;gt;&lt;br /&gt;
::* Опционально введите регулярные выражения для очистки дополнительных строк (доступен, если включена очистка старых комментариев).&lt;br /&gt;
&lt;br /&gt;
::При экспорте можно исключить файлы, соответствующие [[Help:UI manual#Использование регулярных выражений|регулярным выражениям]] в поле '''Исключить пути'''. &lt;br /&gt;
::* Нажмите кнопку '''Экспортировать'''.&lt;br /&gt;
::В итоге создастся архив файлов с исходным кодом и, если был выбран шаблон разметки, то в исходный код будет добавлена актуальная разметка в соответствии с выбранным шаблоном.&lt;br /&gt;
:3.	Переход к разметке маркеров снимка:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в крайнем правом столбце строки снимка.&lt;br /&gt;
::б) В меню выберите пункт '''Разметить'''.&lt;br /&gt;
[[File:111 Редактирование снимка.png|thumb|right|upright=1.5|Окно редактирования снимка]]&lt;br /&gt;
:4.	Редактирование названия снимка:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в крайнем правом столбце строки снимка.&lt;br /&gt;
::б) В меню выберите пункт '''Редактировать'''.&lt;br /&gt;
::в) Поменяйте название и нажмите кнопку '''Сохранить'''.&lt;br /&gt;
[[File:212 Окно Копирование снимков.png|thumb|right|upright=1.5|Окно копирования снимка. Пример для одного снимка]]&lt;br /&gt;
:5.	Копирование одного снимка в другой проект и ветку:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в крайнем правом столбце строки снимка.&lt;br /&gt;
::б) В меню выберите пункт '''Копировать'''.&lt;br /&gt;
::в) В открывшемся окне выберите проект и ветку, в которые нужно добавить копию снимка, нажмите кнопку '''Копировать'''.&lt;br /&gt;
::При старте операции и по ее окончании пользователю отобразятся соответствующие всплывающие сообщения.&lt;br /&gt;
::[[File:213 Сообщение. Копирование снимков.png|thumb|none|upright=1.5|Пример всплывающих сообщений при старте и окончании копирования одного снимка]]&lt;br /&gt;
[[File:214 Окно Копирование нескольких снимков.png|thumb|right|upright=1.5|Окно копирования снимка. Пример для двух снимков]]&lt;br /&gt;
:6. Копирование нескольких снимков в другой проект и ветку:&lt;br /&gt;
::а) Чтобы выбрать для копирования все снимки, установите флажок в заголовке табличного списка снимков.&lt;br /&gt;
::б) Чтобы выбрать несколько снимков, установите флажки в крайнем правом столбце табличного списка.&lt;br /&gt;
::в) Нажмите кнопку '''Копировать''' в верхней части табличного списка снимков.&lt;br /&gt;
::г) В открывшемся окне выберите проект и ветку, в которые нужно добавить копии выбранных снимков, нажмите кнопку '''Копировать'''.&lt;br /&gt;
::При старте операции и по ее окончании пользователю отобразятся соответствующие всплывающие сообщения.&lt;br /&gt;
::[[File:215 Сообщение. Копирование двух снимков.png|thumb|none|upright=1.5|Пример всплывающих сообщений при старте и окончании копирования двух снимков]]&lt;br /&gt;
:[[File:134 Импорт разметки.png|thumb|right|upright=1.5|Окно импорта разметки]]&lt;br /&gt;
:7. Импорт разметки из комментариев исходного кода снимка в активную ветку проекта:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в крайнем правом столбце строки снимка.&lt;br /&gt;
::б) В меню выберите пункт '''Импорт разметки из исходного кода'''.&lt;br /&gt;
::в) В открывшемся окне выберите шаблон разметки и нажмите кнопку '''Импортировать'''.&lt;br /&gt;
::По окончании пользователю отобразится всплывающее сообщение с информацией о выполненной операции. &lt;br /&gt;
::[[File:216 Сообщение. Импорт разметки из кода.png|thumb|none|upright=1.5|Пример всплывающего сообщения об окончании импорта разметки из файла]]&lt;br /&gt;
&lt;br /&gt;
:8.	Просмотр информации о снимке в JSON-формате:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке снимка крайнем правом столбце.&lt;br /&gt;
::б) В меню выберите пункт '''Просмотреть JSON'''.&lt;br /&gt;
:[[File:112 Просмотр JSON снимка.png|thumb|none|upright=3|Окно просмотра информации о снимке в JSON-формате]]&lt;br /&gt;
:9. Удаление одного снимка:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке снимка крайнем правом столбце.&lt;br /&gt;
::б) В меню выберите пункт '''Удалить'''.&lt;br /&gt;
::в) Подтвердите удаление.&lt;br /&gt;
:10. Удаление нескольких снимков:&lt;br /&gt;
::а) Чтобы выбрать для удаления все снимки, установите флажок в заголовке табличного списка снимков.&lt;br /&gt;
::б) Чтобы выбрать несколько снимков, установите флажки в крайнем правом столбце табличного списка.&lt;br /&gt;
::в) Нажмите кнопку '''Удалить''' в верхней части табличного списка снимков и подтвердите удаление.&lt;br /&gt;
&lt;br /&gt;
== Просмотр детекторов ==&lt;br /&gt;
Чтобы посмотреть список всех детекторов, перейдите в раздел '''Детекторы''':&lt;br /&gt;
 &lt;br /&gt;
[[File:135 Раздел Детекторы.png|thumb|none|upright=3|Раздел «Детекторы»]]&lt;br /&gt;
&lt;br /&gt;
В разделе отображается список детекторов той версии  Svace, которая указана вверху раздела.&lt;br /&gt;
&lt;br /&gt;
{{Note|type=info|text=''При обновлении списка детекторов и их параметров в Svace изменения попадают в Svacer при выпуске новой версии системы!''}}&lt;br /&gt;
&lt;br /&gt;
В разделе '''Детекторы''' пользователю доступны следующие функции:&lt;br /&gt;
:1. Поиск детектора по его названию, серьезности, надежности и коду дефекта безопасности CWE.&lt;br /&gt;
:2. Сортировка по значениям столбцов (по умолчанию – по названию детектора).&lt;br /&gt;
:3. Переход к просмотру описания дефекта безопасности на сайте [https://cwe.mitre.org cwe.mitre.org] (открывается в отдельном окне) – для этого нажмите на ссылку в столбце '''CWE'''.&lt;br /&gt;
:4. Просмотр дополнительной информации о детекторе при её наличии – для этого нажмите на иконку [[File:icon_question_mark2.png|x25px]] справа от названия детектора.&lt;br /&gt;
 &lt;br /&gt;
:[[File:121_Окно с дополнительной информацией о детекторе.png|thumb|none|upright=2|Раздел «Детекторы». Пример окна с дополнительной информацией о детекторе]]&lt;br /&gt;
&lt;br /&gt;
:5. Фильтрация списка – для этого:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button Фильтр.png|x25px]].&lt;br /&gt;
::б) В открывшемся окне '''Фильтр''' настройте параметры фильтрации – выберите значения в списках полей или нажмите кнопки со значениями.&lt;br /&gt;
::в) Нажмите кнопку [[File:button_Очистить.png|x25px]], чтобы очистить все параметры фильтрации.&lt;br /&gt;
::г) Нажмите кнопку [[File:button_Применить.png|x25px]], чтобы применить фильтр.&lt;br /&gt;
 &lt;br /&gt;
:[[File:137 Детекторы.Фильтр.png|thumb|none|upright=2|Раздел «детекторы». Окно «Фильтр»]]&lt;br /&gt;
&lt;br /&gt;
:6. Отмена примененных фильтров – для этого нажмите кнопку [[File:Button Фильтр отмена.png|x25px]].&lt;br /&gt;
:7. Выбор отображаемых столбцов – для этого нажмите на кнопку '''Столбцы''' и в открывшемся списке установите или снимите флажки рядом с названиями столбцов.&lt;br /&gt;
:Для настройки скрытия или показа доступны все столбцы, кроме '''Детектор'''. Столбцы '''Статус''' и '''Инструменты''' по умолчанию скрыты.&lt;br /&gt;
:Пользовательская настройка отображения столбцов сохраняется и не сбрасывается при повторном входе пользователя в систему.&lt;br /&gt;
&lt;br /&gt;
:[[File:138 Детекторы выбор столбцов.png|thumb|none|upright=1.5|Раздел «Детекторы». Выбор отображаемых столбцов]]&lt;br /&gt;
&lt;br /&gt;
:8. Экспорт списка детекторов в файл формата PDF – нажмите кнопку '''Экспорт в PDF'''.&lt;br /&gt;
:Файл содержит информацию обо всех детекторах, найденных с помощью строки поиска и фильтров. Настройка отображения столбцов не влияет на выгрузку – файл содержит информацию всех столбцов.&lt;br /&gt;
&lt;br /&gt;
== Просмотр статистики ==&lt;br /&gt;
В разделе '''Статистика''' пользователь может посмотреть статистические данные о разметке по всем проектам, веткам и снимкам, доступным пользователю. Все статистические данные разделены на три группы и отображаются в отдельных дашбордах:&lt;br /&gt;
* [[Help:UI manual#Работа с дашбордом «Общая статистика»|'''Общая статистика''']] – показатели по последним импортированным снимкам в ветках проектов;&lt;br /&gt;
* [[Help:UI manual#Работа с дашбордом «Распределение маркеров»|'''Распределение маркеров''']] – диаграммы с информацией о количестве маркеров и их распределении по серьезности, статусу разметки и языкам;&lt;br /&gt;
* [[Help:UI manual#Работа с дашбордом «Активность по разметке»|'''Активность по разметке''']] – информация об активности пользователей при разметке маркеров.&lt;br /&gt;
&lt;br /&gt;
[[File:162 Раздел Статистика. Начальное состояние.png|thumb|none|upright=3|Раздел '''Статистика'''. Начальное состояние]]&lt;br /&gt;
Чтобы посмотреть информацию:&lt;br /&gt;
:1. Выберите дашборд – нажмите кнопку с его названием в верхней части экрана.&lt;br /&gt;
:2. Выберите [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|контекст]] (опционально). В дашборде '''Общая статистика''' выбор снимка недоступен.&lt;br /&gt;
:2. Нажмите кнопку [[File:Button Play.png|x25px]].&lt;br /&gt;
:Если контекст не был выбран, отобразится статистика по всем проектам, веткам и снимкам, доступным пользователю. При этом информация об их количестве отображается в верхней части каждого дашборда.&lt;br /&gt;
:[[File:163 Раздел Статистика. Контекст не выбран.png|thumb|none|upright=2.5|Раздел '''Статистика'''. Пример дашборда '''Общая статистика'''. Контекст не выбран]]&lt;br /&gt;
:Если контекст был выбран, то отобразится статистика только для выбранных проектов, веток и снимков (кроме '''Общая статистика'''). При этом информация об их количестве отображается в верхней части каждого дашборда.&lt;br /&gt;
:[[File:164 Раздел Статистика. Контекст выбран.png|thumb|none|upright=2.5|Раздел '''Статистика'''. Пример дашборда '''Общая статистика'''. Контекст выбран]]&lt;br /&gt;
&lt;br /&gt;
=== Работа с дашбордом «Общая статистика» ===&lt;br /&gt;
На дашборде '''Общая статистика''' отображается информация о разметке маркеров в последних импортированных снимках в разрезе проектов и веток. Информация представлена в виде блоков со следующими данными:&lt;br /&gt;
* общая информация:&lt;br /&gt;
** названия проекта и ветки;&lt;br /&gt;
** количество снимков в ветке и дата последнего импорта;&lt;br /&gt;
** дата последней разметки маркеров;&lt;br /&gt;
* показатели последнего импортированного снимка:&lt;br /&gt;
** количество строк кода;&lt;br /&gt;
** количество маркеров;&lt;br /&gt;
** плотность маркеров – процентное отношение количества маркеров на тысячу строк кода;&lt;br /&gt;
** процент и количество размеченных маркеров;&lt;br /&gt;
** процент и количество подтвержденных маркеров – со статусом Confirmed;&lt;br /&gt;
** процент и количество критичных маркеров – с серьезностью детектора Critical.&lt;br /&gt;
:[[File:204 Статистика. Общая статистика.png|thumb|none|upright=2.5|Раздел '''Статистика'''. Дашборд '''Общая статистика''']]&lt;br /&gt;
Пользователю доступны следующие функции:&lt;br /&gt;
:1. Поиск информации по названиям проектов и веток.&lt;br /&gt;
:2. Сортировка данных – для этого в поле справа выберите показатель, по которому требуется сортировать информацию:&lt;br /&gt;
:* по датам последних разметки и импорта;&lt;br /&gt;
:* по показателям последнего импортированного снимка.&lt;br /&gt;
:Для изменения порядка сортировки используйте кнопки [[File:Button Sort.png|x25px]] и [[File:Button Sort UP.png|x25px]].&lt;br /&gt;
:3. Переход к последнему импортированному снимку в режиме разметки – нажмите на названия проекта и ветки в блоке.&lt;br /&gt;
&lt;br /&gt;
=== Работа с дашбордом «Распределение маркеров» ===&lt;br /&gt;
На дашборде '''Распределение маркеров''' отображаются три диаграммы:&lt;br /&gt;
* Количество маркеров по серьезности;&lt;br /&gt;
* Количество маркеров по статусу разметки;&lt;br /&gt;
* Распределение маркеров по языкам.&lt;br /&gt;
[[File:165 Раздел Статистика. Информация о выбранном контексте.png|thumb|none|upright=2.5|Раздел '''Статистика'''. Дашборд '''Распределение маркеров''']]&lt;br /&gt;
Пользователю доступны следующие функции:&lt;br /&gt;
:1. Просмотр значения диаграммы – для этого наведите курсор на любой графический элемент любой диаграммы.&lt;br /&gt;
:2. Выгрузка данных диаграммы в файл формата .csv – для этого нажмите кнопку [[File:Button Download.png|x25px]] в любой диаграмме.&lt;br /&gt;
&lt;br /&gt;
=== Работа с дашбордом «Активность по разметке» ===&lt;br /&gt;
На дашборде Активность по разметке отображается информация о действиях пользователей [[Help:UI manual#Работа в режиме разметки|по разметке маркеров]], которая может быть представлена в двух видах:&lt;br /&gt;
* диаграмма '''Активность по разметке''' – отражает активность пользователей по разметке маркеров за выбранный месяц (по умолчанию – текущий месяц). Цвет ячеек на диаграмме отражает количество действий пользователя, выполненных в указанную дату: чем темнее цвет, тем больше действий выполнил пользователь. Эта диаграмма отображается по умолчанию; если вид был переключен, то для возврата к этой диаграмме нажмите кнопку [[File:Button ChangeDiagram1.png|x25px]];&lt;br /&gt;
* диаграмма '''Лидеры по разметке''' – отражает количество действий пользователей при разметке за выбранный период (по умолчанию – период соответствует месяцу, указанному на диаграмме '''Активность по разметке''') с сортировкой по лидерам. Цвет строк на диаграмме отражает количество действий пользователя: чем темнее цвет, тем больше действий выполнил пользователь. Диаграмма отображается по нажатии кнопки [[File:Button ChangeDiagram2.png|x25px]];&lt;br /&gt;
[[File:166 Раздел Статистика. Активность по разметке.png|thumb|none|upright=3|Раздел '''Статистика'''. Дашборд '''Активность по разметке'''. Вид 1: диаграмма '''Активность по разметке''']]&lt;br /&gt;
[[File:167 Раздел Статистика. Лидеры по разметке.png|thumb|none|upright=3|Раздел '''Статистика'''. Дашборд '''Активность по разметке'''. Вид 2: диаграмма '''Лидеры по разметке''']]&lt;br /&gt;
Пользователю доступны следующие функции:&lt;br /&gt;
:1. Просмотр значения диаграммы – для этого наведите курсор на любой графический элемент любой диаграммы.&lt;br /&gt;
:2. Выгрузка данных диаграммы в файл формата .csv – для этого нажмите кнопку [[File:Button Download.png|x25px]] в любой диаграмме&lt;br /&gt;
:3. &amp;lt;span id=&amp;quot;diagrams_details&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;В диаграмме '''Активность по разметке''':&lt;br /&gt;
::а) Поиск конкретного пользователя  – для этого введите фрагмент его логина в поле поиска.&lt;br /&gt;
::б) Просмотр статистики за любой другой месяц – для этого выберите год и месяц в раскрывающихся списках вверху диаграммы.&lt;br /&gt;
::в) Просмотр активности конкретного пользователя за выбранный месяц – для этого нажмите на его логин.&lt;br /&gt;
::Ниже диаграммы '''Активность по разметке''' отобразится список действий по разметке выбранного пользователя. Измененная (неактуальная) разметка отмечена иконкой [[File:Icon archive.png|x25px]].&lt;br /&gt;
::[[File:168 Раздел Статистика. Активность по разметке. Выбранный пользователь.png|thumb|none|upright=3|Раздел '''Статистика'''. Дашборд '''Активность по разметке'''. Диаграмма '''Активность по разметке''' и список действий по разметке выбранного пользователя]]&lt;br /&gt;
::г) Просмотр активности пользователей в конкретный день месяца – для этого нажмите на число.&lt;br /&gt;
::Ниже диаграммы '''Активность по разметке''' отобразится список действий по разметке пользователей за выбранную дату.&lt;br /&gt;
::[[File:169 Раздел Статистика. Активность по разметке. Пользователи за дату.png|thumb|none|upright=3|Раздел '''Статистика'''. Дашборд '''Активность по разметке'''. Диаграмма '''Активность по разметке''' и список действий по разметке пользователей за выбранную дату]]&lt;br /&gt;
::д) Просмотр активности конкретного пользователя в конкретный день месяца – для этого нажмите ячейку таблицы на пересечении строки с логином пользователя и столбца с числом.&lt;br /&gt;
::Ниже диаграммы '''Активность по разметке''' отобразится список действий по разметке выбранного пользователя за выбранную дату.&lt;br /&gt;
::[[File:170 Раздел Статистика. Активность по разметке. Одни пользователь за дату.png|thumb|none|upright=3|Раздел '''Статистика'''. Дашборд '''Активность по разметке'''. Диаграмма '''Активность по разметке''' и список действий по разметке выбранного пользователя за выбранную дату]]&lt;br /&gt;
::е) Включение и выключение отображения информации о неактуальной (измененной) разметке в списке действий пользователя – для этого воспользуйтесь переключателем '''Исключить активность по неактуальной разметке'''.&lt;br /&gt;
::ж) Просмотр маркера в [[Help:UI manual#Работа в режиме разметки|режиме разметки]] – для этого в списке действий нажмите на ссылку с именем файла и номером строки.&lt;br /&gt;
::з) Просмотр информации о маркере – для этого в списке действий нажмите кнопку [[File:Button show.png|x25px]] слева от названия маркера.&lt;br /&gt;
::В правой части экрана отобразится панель с информацией о маркере.&lt;br /&gt;
::[[File:205 Статистика. Активность по разметке. Панель с информацией о маркере.png|thumb|none|upright=3|Панель с информацией о маркере]]&lt;br /&gt;
:4. В диаграмме '''Лидеры по разметке''':&lt;br /&gt;
::а) Поиск конкретного пользователя – для этого введите фрагмент его логина в поле поиска.&lt;br /&gt;
::б) Просмотр статистики за любой другой период времени, кроме текущего месяца – для этого кликните на поле даты вверху диаграммы и вручную введите даты, либо в раскрывшемся календаре выберите диапазон дат: предложенный ('''Сегодня''', '''Вчера''', '''Неделю назад''' и т. п.) или свой.&lt;br /&gt;
::[[File:171 Раздел Статистика. Лидеры по разметке. Выбор дат.png|thumb|none|upright=3|Раздел '''Статистика'''. Дашборд '''Активность по разметке'''. Диаграмма '''Лидеры по разметке'''. Выбор диапазона дат]]&lt;br /&gt;
::в) Просмотр активности конкретного пользователя за указанный период – для этого нажмите на его логин.&lt;br /&gt;
::Ниже диаграммы '''Лидеры по разметке''' отобразится список действий по разметке выбранного пользователя. Измененная (неактуальная) разметка отмечена иконкой [[File:Icon archive.png|x25px]].&lt;br /&gt;
::[[File:172 Раздел Статистика. Лидеры по разметке. Выбранный пользователь.png|thumb|none|upright=3|Раздел '''Статистика'''. Дашборд '''Активность по разметке'''. Диаграмма '''Лидеры по разметке''' и список действий по разметке выбранного пользователя]]&lt;br /&gt;
::г) Включение и выключение отображения в списке действий пользователя по неактуальной (измененной) разметке – для этого воспользуйтесь переключателем '''Исключить активность по неактуальной разметке'''.&lt;br /&gt;
::д) Просмотр маркера в [[Help:UI manual#Работа в режиме разметки|режиме разметки]] – для этого в списке действий нажмите на ссылку с именем файла и номером строки.&lt;br /&gt;
::e) Просмотр информации о маркере – для этого в списке действий нажмите кнопку [[File:Button show.png|x25px]] слева от названия маркера.&lt;br /&gt;
::В правой части экрана отобразится панель с информацией о маркере.&lt;br /&gt;
&lt;br /&gt;
== Глобальный поиск ==&lt;br /&gt;
Глобальный поиск позволяет одновременно по всем доступным пользователю проектам и веткам выполнить поиск в следующих категориях:&lt;br /&gt;
* Маркеры;&lt;br /&gt;
* Комментарии к маркерам;&lt;br /&gt;
* Снимки.&lt;br /&gt;
&lt;br /&gt;
Чтобы воспользоваться глобальным поиском, перейдите в раздел '''Поиск'''.&lt;br /&gt;
[[File:173 Раздел Поиск. Начальное состояние.png|thumb|none|upright=3|Раздел '''Поиск'''. Начальное состояние]]&lt;br /&gt;
&lt;br /&gt;
Для каждой категории реализованы два независимых способа поиска в виде вкладок:&lt;br /&gt;
* '''Базовый поиск''' – единый поисковый запрос по всем атрибутам категории одновременно, с указанием контекста;&lt;br /&gt;
* '''Поиск по полям''' – позволяет задать значения поиска по каждому атрибуту категории в отдельности и указать контекст.&lt;br /&gt;
&lt;br /&gt;
=== Поиск маркеров ===&lt;br /&gt;
Чтобы воспользоваться поиском маркеров:&lt;br /&gt;
:1. Выберите категорию '''Маркеры''' раздела '''Поиск''' (выбран по умолчанию).&lt;br /&gt;
:2. Для базового поиска:&lt;br /&gt;
::а) Перейдите на вкладку '''Базовый поиск''' (открыта по умолчанию).&lt;br /&gt;
::[[File:174 Раздел Поиск. Категория Маркеры. Базовый поиск.png|thumb|none|upright=3|Раздел '''Поиск'''. Категория '''Маркеры'''. Базовый поиск]]&lt;br /&gt;
::б) Введите фрагмент названия маркера, детектора, функции или файла.&lt;br /&gt;
::в) Выберите (опционально) группу проектов, проект, ветку и снимок, в которых нужно найти маркеры. &lt;br /&gt;
::По умолчанию выбраны все группы, проекты, ветки и снимки.&lt;br /&gt;
::г) Нажмите кнопку '''Поиск'''.&lt;br /&gt;
:Отобразятся результаты поиска.&lt;br /&gt;
:[[File:175 Раздел Поиск. Пример результатов поиска в категории Маркеры.png|thumb|none|upright=3|Раздел '''Поиск'''. Пример результатов поиска в категории '''Маркеры''']]&lt;br /&gt;
:3. Для поиска по полям:&lt;br /&gt;
::а) Перейдите на вкладку '''Поиск по полям'''.&lt;br /&gt;
::[[File:176 Раздел Поиск. Категория Маркеры. Поиск по полям.png|thumb|none|upright=3|Раздел '''Поиск'''. Категория '''Маркеры'''. Поиск по полям]]&lt;br /&gt;
::б) Заполните поля поиска.&lt;br /&gt;
::в) Выберите (опционально) группу проектов, проект, ветку и снимок, в которых нужно найти маркеры. &lt;br /&gt;
::По умолчанию выбраны все группы, проекты, ветки и снимки.&lt;br /&gt;
::г) Нажмите кнопку '''Поиск'''.&lt;br /&gt;
:Отобразятся результаты поиска.&lt;br /&gt;
:[[File:177 Раздел Поиск. Пример результатов поиска по полям в категории Маркеры.png|thumb|none|upright=3|Раздел '''Поиск'''. Пример результатов поиска по полям в категории '''Маркеры''']]&lt;br /&gt;
:4. Для очистки значений в полях поиска нажмите кнопку '''Очистить'''.&lt;br /&gt;
:5. Чтобы перейти к найденному файлу с маркером в [[Help:UI manual#Работа в режиме разметки|режиме разметки]], в результатах поиска кликните на ссылку в имени файла с номером строки исходного кода.&lt;br /&gt;
:6. Чтобы посмотреть подробную информацию о найденном маркере, в результатах поиска нажмите кнопку [[File:Button show.png|x25px]].&lt;br /&gt;
Отобразится правая панель с открытой вкладкой '''Подробности'''.&lt;br /&gt;
:[[File:341 Раздел Поиск. Подробная информация о маркере.png|thumb|none|upright=3|Раздел '''Поиск'''. Пример просмотра подробной информации о найденном маркере]]&lt;br /&gt;
&lt;br /&gt;
=== Поиск комментариев к маркерам ===&lt;br /&gt;
Чтобы воспользоваться поиском по комментариям к маркерам:&lt;br /&gt;
:1. Выберите категорию '''Комментарии к маркерам''' раздела '''Поиск'''.&lt;br /&gt;
:2. Для базового поиска:&lt;br /&gt;
::а) Перейдите на вкладку '''Базовый поиск''' (открыта по умолчанию).&lt;br /&gt;
::[[File:178 Раздел Поиск. Категория Комментарии к маркерам. Базовый поиск.png|thumb|none|upright=3|Раздел '''Поиск'''. Категория '''Комментарии к маркерам'''. Базовый поиск]]&lt;br /&gt;
::б) Введите фрагмент комментария или логина его автора.&lt;br /&gt;
::в) Выберите (опционально) группу проектов, проект, ветку и снимок, в которых нужно найти комментарии. &lt;br /&gt;
::По умолчанию выбраны все группы, проекты, ветки и снимки.&lt;br /&gt;
::г) Нажмите кнопку '''Поиск'''.&lt;br /&gt;
:Отобразятся результаты поиска.&lt;br /&gt;
:[[File:179 Раздел Поиск. Пример результатов поиска в категории Комментарии к маркерам.png|thumb|none|upright=3|Раздел '''Поиск'''. Пример результатов поиска в категории '''Комментарии к маркерам''']]&lt;br /&gt;
:3. Для поиска по полям:&lt;br /&gt;
::а) Перейдите на вкладку '''Поиск по полям'''.&lt;br /&gt;
::[[File:180 Раздел Поиск. Категория Комментарии к маркерам. Поиск по полям.png|thumb|none|upright=3|Раздел '''Поиск'''. Категория '''Комментарии к маркерам'''. Поиск по полям]]&lt;br /&gt;
::б) Заполните поля поиска.&lt;br /&gt;
::в) Выберите (опционально) группу проектов, проект, ветку и снимок, в которых нужно найти комментарии. &lt;br /&gt;
::По умолчанию выбраны все группы, проекты, ветки и снимки.&lt;br /&gt;
::г) Нажмите кнопку '''Поиск'''.&lt;br /&gt;
:Отобразятся результаты поиска.&lt;br /&gt;
:[[File:181 Раздел Поиск. Пример результатов поиска по полям в категории Комментарии к маркерам.png|thumb|none|upright=3|Раздел '''Поиск'''. Пример результатов поиска по полям в категории '''Комментарии к маркерам''']]&lt;br /&gt;
:4. Для очистки поискового запроса нажмите кнопку '''Очистить'''.&lt;br /&gt;
:5. Чтобы перейти в [[Help:UI manual#Работа в режиме разметки|режим разметки]] к файлу маркера с найденным комментарием, в результатах поиска кликните на ссылку в имени файла с номером строки исходного кода.&lt;br /&gt;
:6. Чтобы посмотреть подробную информацию о маркере с найденным комментарием, в результатах поиска нажмите кнопку [[File:Button show.png|x25px]]. Отобразится правая панель с открытой вкладкой '''Комментарии'''.&lt;br /&gt;
&lt;br /&gt;
=== Поиск снимков ===&lt;br /&gt;
Чтобы воспользоваться поиском по снимкам:&lt;br /&gt;
:1. Выберите категорию '''Снимки''' раздела '''Поиск'''.&lt;br /&gt;
:2. Для базового поиска:&lt;br /&gt;
::а) Перейдите на вкладку '''Базовый поиск''' (открыта по умолчанию).&lt;br /&gt;
::[[File:182 Раздел Поиск. Категория Снимки. Базовый поиск.png|thumb|none|upright=3|Раздел '''Поиск'''. Категория '''Снимки'''. Базовый поиск]]&lt;br /&gt;
::б) Введите фрагмент названия снимка, пользовательского поля снимка (названия или его значения) или логина пользователя, который импортировал снимок.&lt;br /&gt;
::в) Выберите (опционально) группу проектов, проект, ветку и снимок, в которых нужно найти снимки. &lt;br /&gt;
::По умолчанию выбраны все группы, проекты, ветки и снимки.&lt;br /&gt;
::г) Нажмите кнопку '''Поиск'''.&lt;br /&gt;
:Отобразятся результаты поиска.&lt;br /&gt;
:[[File:183 Раздел Поиск. Пример результатов поиска в категории Снимки.png|thumb|none|upright=3|Раздел '''Поиск'''. Пример результатов поиска в категории '''Снимки''']]&lt;br /&gt;
&lt;br /&gt;
:3. Для поиска по полям:&lt;br /&gt;
::а) Перейдите на вкладку '''Поиск по полям'''.&lt;br /&gt;
::[[File:184 Раздел Поиск. Категория Снимки. Поиск по полям.png|thumb|none|upright=3|Раздел '''Поиск'''. Категория '''Снимки'''. Поиск по полям]]&lt;br /&gt;
::б) Заполните поля поиска.&lt;br /&gt;
::в) Выберите (опционально) группу проектов, проект, ветку и снимок, в которых нужно найти снимки. &lt;br /&gt;
::По умолчанию выбраны все группы, проекты, ветки и снимки.&lt;br /&gt;
::г) Нажмите кнопку '''Поиск'''.&lt;br /&gt;
:Отобразятся результаты поиска.&lt;br /&gt;
:[[File:185 Раздел Поиск. Пример результатов поиска по полям в категории Снимки.png|thumb|none|upright=3|Раздел '''Поиск'''. Пример результатов поиска по полям в категории '''Снимки''']]&lt;br /&gt;
:4. Для очистки поискового запроса нажмите кнопку '''Очистить'''.&lt;br /&gt;
:5. Чтобы посмотреть подробную информацию о найденном снимке, в результатах поиска кликните на ссылку в пути размещения снимка.&lt;br /&gt;
:Найденный снимок откроется в [[Help:UI manual#Работа в режиме разметки|режиме разметки]] со всеми его маркерами.&lt;br /&gt;
&lt;br /&gt;
=== Просмотр истории поиска ===&lt;br /&gt;
Чтобы посмотреть историю поиска, нажмите кнопку '''История поиска''' в разделе '''Поиск'''.&lt;br /&gt;
&lt;br /&gt;
В истории отображаются 100 последних поисковых запросов пользователя.&lt;br /&gt;
[[File:186 Раздел Поиск. Пример истории поиска.png|thumb|none|upright=3|Раздел '''Поиск'''. Пример истории поиска]]&lt;br /&gt;
&lt;br /&gt;
Чтобы повторить поиск из истории, кликните на ссылку с поисковым запросом.&lt;br /&gt;
&lt;br /&gt;
== Настройка сервера Svacer ==&lt;br /&gt;
Перейти в раздел '''Настройки''' можно по нажатии кнопки [[File:Icon settings.png|x25px]] в верхней правой части экрана.&lt;br /&gt;
&lt;br /&gt;
В этом разделе пользователю, в зависимости от роли, доступны следующие функции:&lt;br /&gt;
* [[Help:UI manual#Управление пользователями, ролями и организациями|управление пользователями, ролями и организациями]];&lt;br /&gt;
* [[Help:UI manual#Настройка глобальных фильтров|настройка глобальных фильтров]];&lt;br /&gt;
* [[Help:UI manual#Управление блокировками разметки|управление блокировками]];&lt;br /&gt;
* [[Help:UI manual#Ведение журнала операций|ведение журнала операций]];&lt;br /&gt;
* [[Help:UI manual#Управление шаблонами разметки|управление шаблонами разметки]];&lt;br /&gt;
* [[Help:UI manual#Управление токенами доступа|управление токенами доступа]];&lt;br /&gt;
* [[Help:UI manual#Управление асинхронными задачами|управление асинхронными задачами]];&lt;br /&gt;
* [[Help:UI manual#Просмотр информации о сервере|просмотр информации о сервере]];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Управление пользователями, ролями и организациями===&lt;br /&gt;
==== Управление пользователями ====&lt;br /&gt;
Реестром учетных записей пользователей можно управлять на вкладке '''Пользователи''' в разделе '''Управление пользователями''' страницы '''Настройки'''.&amp;lt;br&amp;gt;&lt;br /&gt;
Для [[LDAP configuration|учетных записей с доступом по LDAP]] рядом с логином отображается индикатор [[File:Icon LDAP.png|x25px]], для учетных записей с доступом по OIDC рядом с логином отображается индикатор [[File:Icon_OIDC.png|x25px]], а для учетных записей с признаком '''Мастер разметки''' – индикатор [[File:Icon markup master.png|x25px]].&amp;lt;br&amp;gt;&lt;br /&gt;
В разделе доступны:&lt;br /&gt;
* поиск по атрибутам учётной записи пользователя;&lt;br /&gt;
* фильтрация списка по типам учётных записей:&lt;br /&gt;
:* все;&lt;br /&gt;
:* системные;&lt;br /&gt;
:* LDAP;&lt;br /&gt;
:* OIDC;&lt;br /&gt;
:* заблокированные;&lt;br /&gt;
:* активные;&lt;br /&gt;
:* по ролям;&lt;br /&gt;
:* по организациям.&lt;br /&gt;
* сортировка по колонкам '''Логин''', '''ФИО''' и '''Дата создания''' (по умолчанию).&lt;br /&gt;
:[[File:74 Вкладка Пользователи на странице Настройки.png|thumb|none|upright=3|Вкладка '''Пользователи''' в разделе '''Управление пользователями''' страницы '''Настройки''']]&lt;br /&gt;
Для управления пользователями:&lt;br /&gt;
:1. Создайте учетную запись пользователя:&lt;br /&gt;
::а) Нажмите кнопку '''Создать'''.&lt;br /&gt;
::Откроется окно добавления учетной записи пользователя.&lt;br /&gt;
::[[File:76 Окно Добавить пользователя.png|thumb|none|upright=1.5|Окно '''Создать пользователя''']]&lt;br /&gt;
::б) Заполните поля:&lt;br /&gt;
::* Логин;&lt;br /&gt;
::* Пароль;&lt;br /&gt;
::* e-mail;&lt;br /&gt;
::* ФИО.&lt;br /&gt;
::в) Выберите [[Help:UI manual#Управление организациями|организации]], в которые должен входить пользователь, а также назначьте ему [[Help:UI manual#Управление ролями|роли]] – выберите значения в раскрывающихся списках полей '''Организации''' и '''Роли''' соответственно. Для отмены выбора нажмите на кнопку [[File:Icon cancel.png|x25px]] справа от значения.&lt;br /&gt;
::г) Включите опции '''Изменить пароль при первом входе в систему''' и '''Мастер разметки'''.&amp;lt;br&amp;gt;&lt;br /&gt;
::{{Note|type=info|text=''Если для учётной записи активирована опция '''Мастер разметки''', есть разрешение на разметку и этот пользователь разметил маркер в каком-либо снимке, то изменить его разметку может только пользователь, в учётной записи которого также активирована опция '''Мастер разметки''' или которому предоставлен [[#Cерверные доступы|серверный доступ]] '''Изменение любой разметки'''.''}}&lt;br /&gt;
::д) Нажмите кнопку '''Создать'''.&lt;br /&gt;
: В таблице со списком пользователей добавится новая запись.&lt;br /&gt;
&lt;br /&gt;
:2. Воспользуйтесь функциями в строке учетной записи в крайнем правом столбце – нажмите кнопку [[File:Button menu.png|x25px]] и выберите пункт:&lt;br /&gt;
:* '''Редактировать''' – для перехода к редактированию данных профиля;&lt;br /&gt;
:* '''Изменить пароль''' – для перехода к изменению пароля;&lt;br /&gt;
:* '''Сбросить настройки пользователя''' – для возврата пользовательских настроек к их значениям по умолчанию;&lt;br /&gt;
:* '''Заблокировать''' – для блокировки учетной записи. В этом случае для учетной записи пользователя блокируется доступ к системе, а в списке рядом с логином учетной записи отображается индикатор [[File:Icon_Archived.png|x25px]];&lt;br /&gt;
:* '''Разблокировать''' – для восстановления доступа пользователя к системе;&lt;br /&gt;
:* '''Настройки уведомлений''' – для настройки уведомлений пользователя об операциях со снимками и маркерами – аналогично [[Help:UI manual#Настройка уведомлений|настройке уведомлений в меню пользователя]];&lt;br /&gt;
::[[File:219 Настройки Настройка уведомлений выбранного пользователя.png|thumb|none|upright=2|Настройки уведомлений выбранного пользователя]]&lt;br /&gt;
:* '''Удалить''' – для удаления учётной записи пользователя;&lt;br /&gt;
:* '''Показать доступы пользователя''' – для отображения списка объединенных доступов всех ролей, назначенных пользователю.&lt;br /&gt;
::[[File:113 Список доступов пользователя.png|thumb|none|upright=3|Список доступов пользователя]]&lt;br /&gt;
::{{Note|type=warn|text=''Функции блокировки и удаления недоступны для системных учетных записей. При изменении логина или списка доступов у авторизованного пользователя, он будет перенаправлен на страницу авторизации.''}}&lt;br /&gt;
&lt;br /&gt;
:3. Воспользуйтесь функциями управления несколькими учётными записями одновременно:&lt;br /&gt;
::а) Чтобы выбрать несколько записей, установите флажки в первом столбце списка пользователей.&lt;br /&gt;
::б) Чтобы выбрать все отображаемые учётные записи, установите один флажок в заголовке столбцов в первом столбце списка.&lt;br /&gt;
::в) Нажмите кнопку '''Действия''' в верхней части списка пользователей и выберите пункт: '''Сбросить настройки пользователя''', '''Заблокировать''', '''Разблокировать''' или '''Удалить'''. В списке активны только действия, доступные всем выбранным учетным записям.&lt;br /&gt;
:4. Для [[LDAP configuration|учетной записи с доступом по LDAP]] обновите данные – в окне редактирования данных профиля пользователя нажмите кнопку '''Загрузить из LDAP'''.&lt;br /&gt;
:Загрузятся параметры профиля пользователя и его контакты из профиля в службе каталогов, если они там указаны.&lt;br /&gt;
:[[File:78 Загрузка данных из LDAP.png|thumb|none|upright=1.5|Загрузка данных из LDAP]]&lt;br /&gt;
&lt;br /&gt;
==== Управление ролями ====&lt;br /&gt;
Реестром ролей можно управлять на вкладке '''Роли''' в разделе '''Управление пользователями''' страницы '''Настройки'''.&lt;br /&gt;
[[File:79 Переход к управлению ролями.png|thumb|none|upright=3|Вкладка '''Роли''' в разделе '''Управление пользователями''' страницы '''Настройки''']]&lt;br /&gt;
{{Note|type=info|text=''Роли [[Help:UI manual#Описание ролевой модели|admin, filter_master и importer]] являются встроенными с особым значением. Их нельзя удалить или изменить.''}}&lt;br /&gt;
&lt;br /&gt;
Доступен поиск по названию роли и сортировка по колонкам '''Название''' (по умолчанию) и '''Пользователи'''. &amp;lt;br&amp;gt;&lt;br /&gt;
Для управления ролями доступны следующие функции:&lt;br /&gt;
:1. Создание новой роли:&lt;br /&gt;
::а) Нажмите кнопку '''Создать'''.&lt;br /&gt;
::[[File:81 Окно добавления роли.png|thumb|none|upright=3|Окно добавления роли]]&lt;br /&gt;
::б) Заполните поля появившейся формы:&lt;br /&gt;
:::*введите название роли;&lt;br /&gt;
:::*в блоке '''Серверные доступы''' выберите доступы – нажмите кнопку '''Выбрать всё''' или установите флажки для активации доступов.&lt;br /&gt;
:::При наведении курсора на иконку [[File:Icon question mark2.png|x25px]] отображается пояснение к доступу.&lt;br /&gt;
:::*в блоке '''Проектные доступы''' выберите тип доступа: группа проектов или определённый проект или его ветка;&lt;br /&gt;
:::*если выбран тип '''Группа проектов''', выберите название группы и установите флажки для активации доступов;&lt;br /&gt;
:::*если выбран тип '''Проект / Ветка''', выберите название проекта или ветки проекта, установите флажки для активации доступов.&lt;br /&gt;
:::Если выбрано значение '''Все''', то доступы будут предоставлены для всех проектов;&lt;br /&gt;
:::*для удаления строки с проектными доступами в блоке '''Проектные доступы''' нажмите кнопку [[File:Icon delete.png|x25px]] в крайнем правом столбце.&lt;br /&gt;
::в) Нажмите кнопку '''Создать'''.&lt;br /&gt;
&lt;br /&gt;
:2.	Просмотр доступов роли, нажмите на ссылку '''Показать доступы''' в столбце '''Доступы'''.&lt;br /&gt;
:[[File:114 Список доступов роли.png|thumb|none|upright=3|Список доступов роли]]&lt;br /&gt;
&lt;br /&gt;
:3.	Редактирование роли:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке роли в крайнем правом столбце.&lt;br /&gt;
::б) В меню выберите пункт '''Редактировать''' и внесите изменения.&lt;br /&gt;
&lt;br /&gt;
:4.	Создание копии роли:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке исходной роли в крайнем правом столбце.&lt;br /&gt;
::б) В меню выберите пункт '''Создать копию'''.&lt;br /&gt;
:В реестр ролей добавится новая запись с именем исходной роли и добавленным порядковым номером копии.&lt;br /&gt;
&lt;br /&gt;
:5.	Просмотр информации о роли в JSON-формате:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке исходной роли в крайнем правом столбце.&lt;br /&gt;
::б) В меню выберите пункт '''Просмотреть JSON'''.&lt;br /&gt;
&lt;br /&gt;
:6.	Удаление роли:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке исходной роли в крайнем правом столбце.&lt;br /&gt;
::б) В меню выберите пункт '''Удалить'''.&lt;br /&gt;
::в) Подтвердите удаление.&lt;br /&gt;
&lt;br /&gt;
:7.	Удаление несколько ролей одновременно:&lt;br /&gt;
::а) Для выбора нескольких записей установите флажки в первом столбце списка ролей.&lt;br /&gt;
::б) Чтобы выбрать все записи, установите один флажок в заголовке столбцов в первом столбце списка ролей.&lt;br /&gt;
::в) Нажмите кнопку '''Удалить''' и подтвердите удаление.&lt;br /&gt;
&lt;br /&gt;
==== Управление организациями ====&lt;br /&gt;
Пользователи могут быть связаны с организациями. Один пользователь может принадлежать нескольким организациям. Организации носят информационный характер и не влияют на права пользователей в системе. &amp;lt;br&amp;gt;&lt;br /&gt;
Реестром организаций можно управлять на вкладке '''Организации''' в разделе '''Управление пользователями''' страницы '''Настройки'''. &lt;br /&gt;
[[File:92 Вкладка Организации на странице Настройки.png|thumb|none|upright=3|Вкладка '''Организации''' в разделе '''Управление пользователями''' страницы '''Настройки''']]&lt;br /&gt;
Доступен поиск по названию и сокращенному названию организации и сортировка по колонкам '''Название''' (по умолчанию), '''Сокращенное название''' и '''Пользователи'''. &lt;br /&gt;
Для управления организациями, доступны следующие функции:&lt;br /&gt;
:1.	Создание организации: &lt;br /&gt;
::а) Нажмите кнопку '''Создать'''.&lt;br /&gt;
::б) Заполните поля появившейся формы.&lt;br /&gt;
::в) Нажмите кнопку '''Создать'''.&lt;br /&gt;
::[[File:93 Окно добавления организации в реестр.png|thumb|none|upright=1.5|Окно добавления организации в реестр]]&lt;br /&gt;
&lt;br /&gt;
:2.	Редактирование организации: &lt;br /&gt;
::а) Нажмите кнопку [[File:Icon edit2.png|x25px]] в крайнем правом столбце.&lt;br /&gt;
::б) В появившейся форме отредактируйте данные организации.&lt;br /&gt;
::в) Нажмите кнопку '''Сохранить'''.&lt;br /&gt;
&lt;br /&gt;
:3.	Удаление организации: &lt;br /&gt;
::а) Нажмите кнопку [[File:Icon delete.png|x25px]] в крайнем правом столбце.&lt;br /&gt;
::б) В появившемся диалоге подтвердите удаление, нажав на кнопку '''Удалить'''.&lt;br /&gt;
&lt;br /&gt;
:4.	Удаление несколько организаций одновременно:&lt;br /&gt;
::а) Для выбора нескольких записей установите флажки в первом столбце списка организаций.&lt;br /&gt;
::б) Чтобы выбрать все организации, установите один флажок в заголовке столбцов в первом столбце списка.&lt;br /&gt;
::в) Нажмите кнопку '''Удалить''' и подтвердите удаление.&lt;br /&gt;
&lt;br /&gt;
=== Настройка глобальных фильтров ===&lt;br /&gt;
В разделе '''Глобальные фильтры''' страницы '''Настройки''' можно настроить глобальные фильтры, применительно [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|к выбранным проекту или ветке проекта]]:&amp;lt;br&amp;gt;&lt;br /&gt;
{{Note|type=info|text=''По умолчанию выбран контекст (проект, ветка), заданный ранее в режиме '''Разметка''', или '''Код'''.''}}&lt;br /&gt;
[[File:82 Вкладка Фильтры на странице Настройки.png|thumb|none|upright=4|Раздел '''Глобальные фильтры''' на странице '''Настройки''']]&lt;br /&gt;
&lt;br /&gt;
В разделе доступен поиск по названию фильтра.&lt;br /&gt;
&lt;br /&gt;
Для настройки фильтров:&lt;br /&gt;
:1. Выберите проект и ветку в верхней строке раздела. По умолчанию указаны проект и ветка, выбранные в разделе '''Разметка'''.&lt;br /&gt;
:2. Чтобы добавить фильтр, нажмите кнопку '''Создать'''.&lt;br /&gt;
:Отобразится новая строка:&lt;br /&gt;
:[[File:83 Новая строка с фильтром.png|thumb|none|upright=4|Новая строка с фильтром]]&lt;br /&gt;
&lt;br /&gt;
:3. Чтобы изменить настройки фильтров:&lt;br /&gt;
::а) Введите или поменяйте название фильтра&lt;br /&gt;
::б) Включите или выключите фильтр – нажмите на значение в столбце '''Статус''', чтобы отобразилась иконка [[File:Icon check2.png|x25px]] (по умолчанию) или [[File:Icon cross 01.png|x25px]].&lt;br /&gt;
::в) Выберите область применения фильтра – нажмите на значение в столбце '''Область''' один или два раза, чтобы отобразилось значение '''ветка''' или '''проект'''.&lt;br /&gt;
::г) Введите [[Help:UI manual#Использование регулярных выражений|регулярное выражение]] или загрузите его из файла в столбцах '''Включить пути по шаблону''', '''Исключить пути по шаблону''' и '''Детекторы'''.&lt;br /&gt;
::{{Note|type=info|text=''Шаблоны регулярных выражений не зависят от регистра и поддерживают следующий синтаксис:''&lt;br /&gt;
:* ''; – для разделения списков значений;''&lt;br /&gt;
:* ''* – любое количество символов;''&lt;br /&gt;
:* ''? – один произвольный символ;''&lt;br /&gt;
:* ''re: – включая значения, определяемые регулярным выражением;''&lt;br /&gt;
:* ''re!: – исключая значения, определяемые регулярным выражением (только для столбца '''Детекторы''').''}}&lt;br /&gt;
::д) Выберите уровни серьезности (критичности) и надежности:&lt;br /&gt;
::* [[File:Icon_critical_on.png|x30px]] – уровень выбран;&lt;br /&gt;
::* [[File:Icon_critical_off.png|x30px]] – уровень не выбран.&lt;br /&gt;
::Для изменения выбора нажмите на название уровня.&lt;br /&gt;
:4. Нажмите кнопку [[File:Icon delete.png|x25px]] в крайнем правом столбце, чтобы удалить один фильтр.&lt;br /&gt;
:5. Чтобы удалить несколько фильтров:&lt;br /&gt;
::а) Для выбора нескольких записей установите флажки в первом столбце списка фильтров.&lt;br /&gt;
::б) Чтобы выбрать все записи, установите один флажок в заголовке столбцов в первом столбце списка фильтров.&lt;br /&gt;
::в) Нажмите кнопку '''Удалить'''.&lt;br /&gt;
:6.	Для сохранения и применения изменений нажмите кнопку '''Применить'''.&lt;br /&gt;
Если не применить изменения, то при переходе в другой раздел системы отобразится сообщение о том, что изменения не применены:&lt;br /&gt;
:[[File:115 Запрос на изменение глобальных фильтров.png|thumb|none|upright=1.5]]&lt;br /&gt;
&lt;br /&gt;
:{{Note|type=warn|text=''После применения глобальных фильтров пользователям, у которых в режиме разметки открыт данный контекст, требуется перезагрузить страницу (нажать клавишу F5) для обновления списка маркеров.''}}&lt;br /&gt;
&lt;br /&gt;
=== Управление блокировками разметки ===&lt;br /&gt;
Чтобы посмотреть список всех [[Help:UI manual#Блокировка разметки|блокировок]], перейдите на вкладку '''Блокировки''' страницы '''Настройки''':&lt;br /&gt;
[[File:61 Просмотр всех блокировок.png|800px|thumb|none|Раздел '''Блокировки''' страницы '''Настройки''']]&lt;br /&gt;
{{Note|type=info|text=''Пользователю отображается  список блокировок в контейнерах, к которым у него есть доступ. Удаление не своих блокировок доступно пользователям с соответствующим доступом.''}}&lt;br /&gt;
&lt;br /&gt;
Доступен поиск по контейнерам, заблокированным сущностям и пользователям, сортировка по всем колонкам (по умолчанию – сортировка по дате).&lt;br /&gt;
&lt;br /&gt;
Для удаления одной блокировки:&lt;br /&gt;
:1.	Нажмите кнопку [[File:Icon delete.png|x25px]] в строке проекта в крайнем правом столбце.&lt;br /&gt;
:2.	Подтвердите удаление.&lt;br /&gt;
Для удаления нескольких блокировок:&lt;br /&gt;
:1.	Чтобы выбрать для удаления все блокировки, установите флажок в заголовке табличного списка.&lt;br /&gt;
:2.	Чтобы выбрать несколько блокировок, установите флажки в крайнем правом столбце табличного списка.&lt;br /&gt;
:3.	Нажмите кнопку '''Удалить''' в верхней части списка.&lt;br /&gt;
&lt;br /&gt;
=== Ведение журнала операций ===&lt;br /&gt;
В разделе '''Журнал операций''' страницы '''Настройки''' доступны просмотр и откат выполнения групповых операций по разметке и комментированию маркеров, таких как импорт разметки, копирование разметки, импорт снимков и т. п.&lt;br /&gt;
[[File:206 Настройки. Журнал операций.png|800px|thumb|none|Раздел '''Журнал операций''' на странице '''Настройки''']]&lt;br /&gt;
В разделе доступны:&lt;br /&gt;
* поиск по названию контейнера, типу операции и её описанию;&lt;br /&gt;
* фильтрация списка:&lt;br /&gt;
** по статусу операции: '''Applied''', '''Reverted''', '''Invalid''';&lt;br /&gt;
** типу операции;&lt;br /&gt;
** генератору операции;&lt;br /&gt;
** автору операции;&lt;br /&gt;
** диапазону дат создания операции;&lt;br /&gt;
* сортировка по всем колонкам, кроме '''Описание'''.&lt;br /&gt;
&lt;br /&gt;
Чтобы откатить выполнение операции, нажмите кнопку [[File:Icon return.png|x25px]] в строке и подтвердите действие в открывшемся окне.&lt;br /&gt;
{{Note|type=warn|text=''Откат своих операций доступен пользователям с [[#Проектные доступы|проектными доступами]] '''Разметка маркеров''' и '''Импорт разметки'''.&amp;lt;br&amp;gt;Откат операций других пользователей доступен пользователям с [[#Проектные доступы|проектным доступом]] '''Разметка маркеров''' и [[#Серверные доступы|серверным доступом]] '''Администрирование сервера''' или серверным доступами '''Изменение любой разметки''' и '''Изменение любых комментариев'''.''}}&lt;br /&gt;
&lt;br /&gt;
=== Управление шаблонами разметки ===&lt;br /&gt;
Управление шаблонами разметки доступно в разделе '''Шаблоны разметки''' страницы '''Настройки''':&lt;br /&gt;
[[File:84 Вкладка Шаблоны на странице Настройки.png|thumb|none|upright=3|Раздел '''Шаблоны разметки''' на странице '''Настройки''']]&lt;br /&gt;
&lt;br /&gt;
Шаблоны разметки нужны для [[Help:UI manual#Импорт разметки|импорта]]/[[Help:UI manual#Экспорт разметки|экспорта разметки]]. С их помощью комментарии в исходном коде будут преобразовываться в разметку на сервере истории и обратно.&lt;br /&gt;
&lt;br /&gt;
Шаблон с именем DEFAULT есть всегда, его нельзя отредактировать или удалить.&lt;br /&gt;
&lt;br /&gt;
{{Note|type=info|text=''Для корректного создания или изменения шаблонов разметки следует обратиться к разработчикам Svacer.''}}&lt;br /&gt;
&lt;br /&gt;
Для управления шаблонами:&lt;br /&gt;
:1. Нажмите кнопку '''Создать'''.&lt;br /&gt;
:Откроется окно создания шаблона.&lt;br /&gt;
:[[File:Добавление шаблона разметки.png|thumb|none|upright=1.5|Окно создания шаблона разметки]]&lt;br /&gt;
:2. Введите название шаблона.&lt;br /&gt;
:3. Нажмите кнопку '''Создать'''.&lt;br /&gt;
:Шаблон появится в списке шаблонов для разметки в правой панели формы&lt;br /&gt;
:4. Отредактируйте поля шаблона разметки:&lt;br /&gt;
:[[File:85 Поля шаблона, доступные для редактирования.png|thumb|none|upright=2.5|Редактирование шаблона разметки]]&lt;br /&gt;
:5. Нажмите '''Сохранить'''.&lt;br /&gt;
:6. Чтобы клонировать существующий шаблон разметки, нажмите кнопку [[File:Icon_clone.png|x20px]] в правой части строки шаблона в списке.&lt;br /&gt;
:7. Для удаления одного шаблона:&lt;br /&gt;
::а) Нажмите кнопку [[File:Icon delete.png|x25px]] в правой части строки шаблона в списке.&lt;br /&gt;
::б) Подтвердите удаление.&lt;br /&gt;
:8. Для удаления нескольких шаблонов:&lt;br /&gt;
::а) Выберите шаблоны для удаления – установите флажки в левой части названий шаблонов или нажмите кнопку '''Выбрать всё'''.&lt;br /&gt;
::б) Нажмите кнопку '''Удалить''' в верхней части списка шаблонов и подтвердите удаление.&lt;br /&gt;
&lt;br /&gt;
=== Управление токенами доступа ===&lt;br /&gt;
Управление персональными токенами доступа выполняется в разделе '''Токены доступа''' на странице '''Настройки'''. &lt;br /&gt;
[[File:207 Настройки. Токены доступа.png|800px|thumb|none|Раздел '''Токены доступа''' на странице '''Настройки''']]&lt;br /&gt;
В разделе доступны:&lt;br /&gt;
* поиск по названию токена и его описанию, а также по логину пользователя;&lt;br /&gt;
* сортировка по всем колонкам, кроме '''Описание'''.&lt;br /&gt;
Для управления токенами доступа:&lt;br /&gt;
:1. Создайте токен:&lt;br /&gt;
::а) Нажмите кнопку '''Создать'''.&lt;br /&gt;
::б) В окне '''Создать токен доступа''' введите название и, опционально, описание токена; выберите срок действия. &lt;br /&gt;
::По умолчанию срок действия токена 90 дней (минимальный срок 1 день, максимальный – 365).&lt;br /&gt;
::в) Нажмите кнопку '''Создать'''.&lt;br /&gt;
::[[File:208 Окно Создание токена доступа.png|thumb|none|upright=1.5|Окно '''Создать токен доступа''']]&lt;br /&gt;
::Отобразится окно с токеном доступа.&lt;br /&gt;
::{{Note|type=warn|text=''Токен отображается только один раз – при создании''}}&lt;br /&gt;
::[[File:209 Токен доступа.png|thumb|none|upright=1.5|Пример токена]]&lt;br /&gt;
::г) Нажмите кнопку '''Скопировать в буфер обмена''' и сохраните токен в надежном месте.&lt;br /&gt;
:2. Для удаления одного токена:&lt;br /&gt;
::а) Нажмите кнопку [[File:Icon delete.png|x25px]] в крайнем правом столбце.&lt;br /&gt;
::б) Подтвердите удаление.&lt;br /&gt;
:3. Для удаления нескольких токенов:&lt;br /&gt;
::а) Чтобы выбрать для удаления все токены, установите флажок в заголовке табличного списка.&lt;br /&gt;
::б) Чтобы выбрать несколько токенов, установите флажки в крайнем правом столбце табличного списка.&lt;br /&gt;
::в) Нажмите кнопку '''Удалить''' в верхней части табличного списка токенов и подтвердите удаление.&lt;br /&gt;
&lt;br /&gt;
=== Управление асинхронными задачами ===&lt;br /&gt;
К асинхронным задачам относятся:&lt;br /&gt;
* экспорт snap и SARIF файлов (в режиме [[Help:UI manual#Экспорт|'''Разметки''']] и в разделе [[Help:UI manual#Работа со снимками|'''Проекты''']]);&lt;br /&gt;
* [[#Работа со снимками|копирование снимков]]. &lt;br /&gt;
Управление этими задачами выполняется в разделе '''Асинхронные задачи''' на странице '''Настройки'''. &lt;br /&gt;
&lt;br /&gt;
В разделе доступны:&lt;br /&gt;
* поиск по идентификатору задачи, её типу, описанию, статусу, а также по логину пользователя;&lt;br /&gt;
* фильтрация списка:&lt;br /&gt;
:* по статусу;&lt;br /&gt;
:* типу задачи;&lt;br /&gt;
:* пользователю;&lt;br /&gt;
:* диапазону дат старта и завершения выполнения задачи;&lt;br /&gt;
* сортировка по всем колонкам, кроме '''Описание'''.&lt;br /&gt;
[[File:342 Настройки. Асинхронные задачи.png|800px|thumb|none|Раздел '''Асинхронные задачи''' на странице '''Настройки''']]&lt;br /&gt;
&lt;br /&gt;
Для управления асинхронными задачами:&lt;br /&gt;
:1. Чтобы посмотреть лог выполнения задачи, нажмите кнопку в крайнем правом столбце.&lt;br /&gt;
:Откроется окно с текстом лога.&lt;br /&gt;
:[[File:343 Окно с текстом лога асинхронной задачи.png|600px|thumb|none|Окно с текстом лога асинхронной задачи]]&lt;br /&gt;
:2. Чтобы скачать лог, нажмите кнопку в крайнем правом столбце или откройте окно с текстом лога и нажмите кнопку '''Скачать лог'''.&lt;br /&gt;
:3. Для удаления истории об одной задаче:&lt;br /&gt;
::а) Нажмите кнопку [[File:Icon delete.png|x25px]] в строке задачи в крайнем правом столбце.&lt;br /&gt;
::б) Подтвердите удаление.&lt;br /&gt;
:4. Для удаления истории о нескольких задачах:&lt;br /&gt;
::а) Чтобы выбрать для удаления все задачи, установите флажок в заголовке табличного списка.&lt;br /&gt;
::б) Чтобы выбрать несколько задач, установите флажки в крайнем левом столбце табличного списка.&lt;br /&gt;
::в) Нажмите кнопку '''Удалить''' в верхней части списка.&lt;br /&gt;
&lt;br /&gt;
=== Просмотр информации о сервере ===&lt;br /&gt;
В разделе '''Информация о сервере''' на странице '''Настройки''' отображаются вкладки:&lt;br /&gt;
* '''Параметры''' – параметры, с которыми запущен сервер;&lt;br /&gt;
* '''Системный лог''' – журнал событий сервера;&lt;br /&gt;
* '''Системный журнал''' – журнал базы данных.&lt;br /&gt;
[[File:344 Настройки. Информация о сервере. Вкладка Параметры.png|thumb|none|upright=3|Раздел '''Информация о сервере''' на странице '''Настройки'''. Вкладка '''Параметры''']]&lt;br /&gt;
[[File:345 Настройки. Информация о сервере. Вкладка Системный лог.png|thumb|none|upright=3|Раздел '''Информация о сервере''' на странице '''Настройки'''. Вкладка '''Системный лог''']]&lt;br /&gt;
[[File:346 Настройки. Информация о сервере. Вкладка Системный журнал.png|thumb|none|upright=3|Раздел '''Информация о сервере''' на странице '''Настройки'''. Вкладка '''Системный журнал''']]&lt;br /&gt;
&lt;br /&gt;
{{Note|type=warn|text=''На вкладке '''Системный лог''' вывод информации ограничен 1 Мб последних данных (значение [[Help:Configuration#Переменные_окружения|настраивается в параметрах сервера]]). При скачивании файл содержит данные лога в полном объеме.''}} &lt;br /&gt;
 &lt;br /&gt;
Доступны функции:&lt;br /&gt;
* поиск параметров по их имени и значению – на вкладке '''Параметры''';&lt;br /&gt;
* копирование записей – на вкладках '''Системный лог''' и '''Системный журнал'''; &lt;br /&gt;
* выгрузка лога в файлы в формате .log по нажатии кнопки '''Скачать''' – на вкладках '''Системный лог''' и '''Системный журнал'''.&lt;br /&gt;
&lt;br /&gt;
== Выход из системы ==&lt;br /&gt;
Для выхода из системы выберите пункт '''Выйти''' в меню пользователя в правом верхнем углу экрана.&lt;br /&gt;
[[File:95 Выход из системы —без VSCode.png|thumb|none|upright=1.5|Выход из системы]]&lt;br /&gt;
&lt;br /&gt;
== Использование регулярных выражений ==&lt;br /&gt;
Регулярные выражения можно использовать:&lt;br /&gt;
* для поиска и фильтрации данных [[Help:UI manual#Функции навигационной панели|в навигационной панели]] [[Help:UI manual#Вкладка «Файлы»|на вкладке '''Файлы''']];&lt;br /&gt;
* в окне настройки [[Help:UI manual#Настройка и использование пользовательских фильтров|пользовательских фильтров]] в блоке '''Файлы''';&lt;br /&gt;
* при [[Help:UI manual#Экспорт исходного кода с разметкой|экспорте кода с разметкой]]; &lt;br /&gt;
* при [[Help:UI manual#Настройка глобальных фильтров|настройке глобальных фильтров]];&lt;br /&gt;
* в полях [[Help:UI manual#Глобальный поиск|глобального поиска]].&lt;br /&gt;
&lt;br /&gt;
Особенности реализации:&lt;br /&gt;
:1. Поиск происходит только по регулярному выражению. Если требуется найти специальный символ в качестве обычного символа, его нужно экранировать (например, точку: &amp;lt;code&amp;gt;\.&amp;lt;/code&amp;gt;)&lt;br /&gt;
:2. При поиске находятся вхождения подстроки в полном пути к файлу (аналогично grep). Если требуется найти по полной строке, используйте символы начала и конца строки: &amp;lt;code&amp;gt;^&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt;&lt;br /&gt;
:3. Поиск не зависит от регистра символов (case insensitive) и поддерживает следующий синтаксис:&lt;br /&gt;
::* ; – для разделения списков значений;&lt;br /&gt;
::* * – любое количество символов;&lt;br /&gt;
::* ? – один произвольный символ.&lt;br /&gt;
:В окне настройки [[Help:UI manual#Настройка и использование пользовательских фильтров|пользовательских фильтров]]  в блоке '''Файлы''' можно применить фильтр как для отображения только маркеров из файлов, которые подходят под паттерн, так и для скрытия таких маркеров. Для переключения между этими режимами используйте кнопки [[File:Icon plus 2.png|x20px]] и [[File:Icon minus 3.png|x20px]], которые расположены рядом с полем ввода. В остальных частях интерфейса следует использовать теги re: и re!:&lt;br /&gt;
&lt;br /&gt;
Примеры регулярных выражений при поиске файлов на вкладке '''Файлы''' или в пользовательском фильтре:&lt;br /&gt;
:1. Поиск файлов с текстом &amp;lt;code&amp;gt;sha&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;md5&amp;lt;/code&amp;gt; в любом месте пути или имени файла:&lt;br /&gt;
:&amp;lt;pre&amp;gt;sha|md5&amp;lt;/pre&amp;gt;&lt;br /&gt;
:2. Отображение только маркеров из файлов с расширением .c:&lt;br /&gt;
:&amp;lt;pre&amp;gt;.*\.c$&amp;lt;/pre&amp;gt;&lt;br /&gt;
:3. Скрытие маркеров из файлов, имя которых начинается с символа &amp;lt;code&amp;gt;q&amp;lt;/code&amp;gt; и которые имеют расширения .с или .сс:&lt;br /&gt;
::а) Используйте выражение &amp;lt;code&amp;gt;/q[^/]*\.c$|/q[^/]*\.cc$&amp;lt;/code&amp;gt;&lt;br /&gt;
::б) Нажмите кнопку [[File:Icon plus 2.png|x20px]] рядом с полем ввода, чтобы она поменялась на [[File:Icon minus 3.png|x20px]]&lt;br /&gt;
:4. Отображение только маркеров из файлов, которые имеют текст &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt; в конце имени файла и с расширением из одного символа:&lt;br /&gt;
:&amp;lt;pre&amp;gt;/.*string\..$&amp;lt;/pre&amp;gt;&lt;br /&gt;
:5. Скрытие маркеров из файлов в директориях &amp;lt;code&amp;gt;asn1&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;pem&amp;lt;/code&amp;gt;:&lt;br /&gt;
::а) Используйте выражение &amp;lt;code&amp;gt;/asn1/|/pem/&amp;lt;/code&amp;gt;&lt;br /&gt;
::б) Нажмите кнопку [[File:Icon plus 2.png|x20px]] рядом с полем ввода, чтобы она поменялась на [[File:Icon minus 3.png|x20px]]&lt;br /&gt;
:6. Отображение только маркеров из файлов, которые имеют в имени три цифры подряд:&lt;br /&gt;
:&amp;lt;pre&amp;gt;.*/.*[0-9]{3}[^/]*$&amp;lt;/pre&amp;gt;&lt;br /&gt;
:где &amp;lt;code&amp;gt;[^/]*$&amp;lt;/code&amp;gt; означает, что после трех цифр и до конца строки может встречаться любой символ, кроме &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;. Это позволяет исключить директории, имеющие три цифры в названии.&lt;br /&gt;
&lt;br /&gt;
== Описание ролевой модели ==&lt;br /&gt;
=== Серверные доступы ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Полномочие (доступ) !! Описание !! Влияние на графический интерфейс !! admin !! filter_master !! importer &lt;br /&gt;
|-&lt;br /&gt;
| Создание проектов &lt;br /&gt;
|| Создание и клонирование проектов. Пользователь, создавший проект, имеет полный доступ к управлению этим проектом &lt;br /&gt;
|| Наличие полномочия делает доступным: &lt;br /&gt;
* раздел [[Help:UI manual#Управление проектами и группами проектов|'''Проекты''']]; &lt;br /&gt;
*  кнопку '''Создать проект'''; &lt;br /&gt;
*  форму создания, клонирования и редактирования проекта.&lt;br /&gt;
&lt;br /&gt;
Наличие доступа предоставляет автору проекта полные права на управление своими проектами, включая разметку (даже при отсутствии у него соответствующего проектного доступа), а также позволяет удалять приложения к снимкам в созданных проектах  &lt;br /&gt;
|| + || – || – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Настройка групп проектов	&lt;br /&gt;
|| Создание, редактирование и удаление групп проектов	&lt;br /&gt;
|| Наличие полномочия делает доступным:&lt;br /&gt;
* раздел [[Help:UI manual#Управление проектами и группами проектов|'''Проекты''']] с кнопкой для перехода к настройке групп;&lt;br /&gt;
* панель [[Help:UI manual#Работа с группами проектов|'''Группы проектов''']] с полным списком проектов в группах.&lt;br /&gt;
Наличие доступа предоставляет права на просмотр маркеров во всех проектах	&lt;br /&gt;
|| + || – || – &lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| Управление пользователями	&lt;br /&gt;
|| Создание, редактирование и удаление пользователей	&lt;br /&gt;
|| Наличие полномочия делает доступной вкладку [[Help:UI manual#Управление пользователями|'''Пользователи''']] в разделе [[Help:UI manual#Управление пользователями, ролями и организациями|'''Настройки – Управление пользователями''']] со всеми функциями управления учетными записями пользователей	&lt;br /&gt;
|| + || – || – &lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| Управление ролями	&lt;br /&gt;
|| Создание, редактирование и удаление ролей	&lt;br /&gt;
|| Наличие полномочия делает доступной вкладку [[Help:UI manual#Управление ролями|'''Роли''']] в разделе [[Help:UI manual#Управление пользователями, ролями и организациями|'''Настройки – Управление пользователями''']] со всеми функциями управления ролями	&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Управление организациями	&lt;br /&gt;
|| Создание, редактирование и удаление организаций	&lt;br /&gt;
|| Наличие полномочия делает доступной вкладку [[Help:UI manual#Управление организациями|'''Организации''']] в разделе [[Help:UI manual#Управление пользователями, ролями и организациями|'''Настройки – Управление пользователями''']] со всеми функциями управления организациями	&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Управление шаблонами разметки	&lt;br /&gt;
|| Создание, редактирование и удаление шаблонов разметки	&lt;br /&gt;
|| Наличие полномочия делает доступным раздел [[Help:UI manual#Управление шаблонами разметки|'''Настройки – Шаблоны разметки''']] со всеми функциями управления учетными записями шаблонами	&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Удаление блокировок	&lt;br /&gt;
|| Просмотр и удаление блокировок всех пользователей	&lt;br /&gt;
|| Наличие полномочия позволяет просматривать и удалять блокировки всех пользователей в разделе [[Help:UI manual#Управление блокировками разметки|'''Настройки – Блокировки''']]&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Администрирование сервера	&lt;br /&gt;
|| Просмотр настроек сервера, системных лог-файлов и выполнение операций по администрированию сервера Svacer, включая активацию лицензии	&lt;br /&gt;
|| Наличие полномочия делает доступным раздел [[Help:UI manual#Просмотр информации о сервере|'''Настройки – Информация о сервере''']]&lt;br /&gt;
Совместно с проектными доступами '''Управление ветками''' и снимками и '''Разметка маркеров''' становится доступна функция очистки разметки и комментариев в ветке&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Управление публичными фильтрами	&lt;br /&gt;
|| Публикация, редактирование и удаление публичных фильтров	&lt;br /&gt;
|| Наличие полномочия позволяет публиковать сохраненные фильтры, а также редактировать и удалять публичные фильтры&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Изменение любой разметки	&lt;br /&gt;
|| Изменение любой разметки маркеров, включая выполненную пользователями с признаком [[Help:UI manual#Управление пользователями, ролями и организациями|'''Мастер разметки''']]&lt;br /&gt;
|| Доступ позволяет переразмечать маркеры (добавлять новую разметку), которые разметили любые пользователи, в том числе те, для которых активирована опция [[Help:UI manual#Управление пользователями, ролями и организациями|'''Мастер разметки''']].&lt;br /&gt;
При этом:&lt;br /&gt;
# Полномочие не предоставляет доступ ко всем проектам. Т. е. пользователь с таким полномочием может изменять разметку только в проектах, к которым у него имеется доступ.&lt;br /&gt;
# Для переразметки маркеров пользователю должен быть предоставлен проектный доступ '''Разметка маркеров'''.&lt;br /&gt;
# Чтобы переразметить заблокированный маркер, сначала нужно [[Help:UI manual#Блокировка разметки маркеров|снять его блокировку]]&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Изменение любых комментариев	&lt;br /&gt;
|| Редактирование и удаление любых пользовательских комментариев к маркерам	&lt;br /&gt;
|| Доступ позволяет изменять/удалять комментарии, которые создали любые пользователи, в том числе те, для которых активирована опция [[Help:UI manual#Управление пользователями, ролями и организациями|'''Мастер разметки''']].&lt;br /&gt;
При этом:&lt;br /&gt;
# Полномочие не предоставляет доступ ко всем проектам. Т. е. пользователь с таким полномочием может изменять разметку только в проектах, к которым у него имеется доступ.&lt;br /&gt;
# Для добавления комментариев пользователю должно быть предоставлено проектное полномочие '''Разметка маркеров'''.&lt;br /&gt;
# Чтобы поменять комментарий к заблокированному маркеру, сначала нужно [[Help:UI manual#Блокировка разметки маркеров|снять его блокировку]]&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Создание резервных копий	&lt;br /&gt;
|| Создание, просмотр и восстановление резервных копий в интерфейсе командной строки	&lt;br /&gt;
|| – 	&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Запуск скриптов	&lt;br /&gt;
|| Запуск скриптов (hooks) по кнопке, расположенной на вкладке '''Подробности''' в правой панели, содержащей информацию о маркере	&lt;br /&gt;
|| Наличие полномочия добавляет строку '''Хуки''' на вкладке '''Подробности''' правой панели с возможностью запуска скриптов&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Проектные доступы===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Полномочие (доступ) !! Описание !! Влияние на графический интерфейс !! admin !! filter_master !! importer &lt;br /&gt;
|-&lt;br /&gt;
| Управление проектом и его ветками	&lt;br /&gt;
|| Редактирование и удаление проекта, включая операции по управлению ветками и снимками проекта, настройке глобальных фильтров, импорту/экспорту разметки и просмотру маркеров	&lt;br /&gt;
|| Наличие полномочия делает доступным:&lt;br /&gt;
* раздел [[Help:UI manual#Управление проектами и группами проектов|'''Проекты''']];&lt;br /&gt;
* все функции управления проектом (проектами в группе) и его содержимым (за исключением разметки маркеров) – т. е. все операции с проектом, ветками и снимками.&lt;br /&gt;
Наличие полномочия позволяет удалять приложения к снимкам и экспортировать разметку с исходным кодом&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Управление ветками и снимками	&lt;br /&gt;
|| Редактирование и удаление ветки проекта, включая операции по управлению снимками, настройке глобальных фильтров, импорту/экспорту разметки и просмотру маркеров	&lt;br /&gt;
|| Наличие полномочия делает доступным:&lt;br /&gt;
* раздел [[Help:UI manual#Управление проектами и группами проектов|'''Проекты''']];&lt;br /&gt;
* все функции управления веткой и снимками проекта (за исключением разметки маркеров) – т. е. доступны все операции с веткой и снимками, но не операции управления проектом.&lt;br /&gt;
Наличие полномочия позволяет удалять приложения к снимкам и экспортировать разметку с исходным кодом.&lt;br /&gt;
Запрещено клонировать ветку при наличии доступа только к этой ветке	&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Настройка глобальных фильтров	&lt;br /&gt;
|| Создание, редактирование и удаление глобальных фильтров	&lt;br /&gt;
|| Наличие полномочия делает доступным раздел [[Help:UI manual#Настройка глобальных фильтров|'''Настройки – Глобальные фильтры''']].&lt;br /&gt;
Список проектов и веток в разделе определяется полномочиями к этим проектам и веткам	&lt;br /&gt;
|| + 	|| + 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Импорт снимков	&lt;br /&gt;
|| Загрузка, редактирование названия и удаление снимков&lt;br /&gt;
|| Наличие полномочия делает доступным:&lt;br /&gt;
* раздел [[Help:UI manual#Управление проектами и группами проектов|'''Проекты''']];&lt;br /&gt;
* функции просмотра проекта и ветки, управления снимками в указанной ветке (включая импорт .svace-dir, SARIF и *.snap), просмотра маркеров в указанном контейнере&lt;br /&gt;
|| + 	|| – 	|| + &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Импорт разметки	&lt;br /&gt;
|| Импорт разметки из файла и комментариев в исходном коде 	&lt;br /&gt;
|| Наличие полномочия делает доступным импорт разметки из файла, импорт разметки из комментариев исходного кода снимка и просмотр маркеров в указанном контейнере	&lt;br /&gt;
|| + 	|| – 	|| + &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Экспорт снимков	&lt;br /&gt;
|| Экспорт данных снимков с разметкой и их открытие в IDE	&lt;br /&gt;
|| Наличие полномочия позволяет:&lt;br /&gt;
&lt;br /&gt;
* экспортировать разметку с исходными кодами;&lt;br /&gt;
* экспортировать снимки в форматах *.snap и SARIF;&lt;br /&gt;
* просматривать код с маркерами в Web-IDE&lt;br /&gt;
|| + 	|| – 	|| + &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Просмотр маркеров	&lt;br /&gt;
|| Просмотр маркеров и кода снимков, просмотр блокировок маркеров	&lt;br /&gt;
|| Наличие полномочия предоставляет доступ к следующим функциям [[Help:UI manual#Работа в режиме разметки|в режиме разметки]]:&lt;br /&gt;
* просмотр и выбор снимков в указанном контейнере;&lt;br /&gt;
* просмотр содержимого снимков и маркеров (без возможности разметки).&lt;br /&gt;
Также наличие полномочия предоставляет доступ к разделу [[Help:UI manual#Управление блокировками разметки|'''Настройки – Блокировки''']], но только в части просмотра блокировок в доступных контейнерах, без возможности их удаления	&lt;br /&gt;
|| +	|| + 	|| + &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Разметка маркеров	&lt;br /&gt;
|| Просмотр и разметка маркеров в снимках, включая добавление комментариев, управление списком блокировок	&lt;br /&gt;
|| Наличие полномочия позволяет пользователю размечать маркеры в указанном контейнере, добавлять комментарии, управлять своими блокировками, т. е. для собственных блокировок доступны кнопки удаления, а блокировки других пользователей доступны только для просмотра.&lt;br /&gt;
При отсутствии полномочия в таблице маркеров недоступны поля для установки флажков, а кнопка групповой разметки неактивна.&lt;br /&gt;
Для разметки маркеров с помощью AI совместно с данным доступом должен быть активен доступ '''Импорт разметки''' &lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Report API	&lt;br /&gt;
|| Использование Report API для получения статистических показателей	&lt;br /&gt;
|| –	&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Известные ограничения ===&lt;br /&gt;
&lt;br /&gt;
* Управление ''своими'' проектами для пользователей только c серверной ролью &amp;quot;Create Projects&amp;quot; без дополнительных прав может не работать для проектов, созданных до Release 7-0-0. &lt;br /&gt;
: Workaround: добавить пользователю явно проектные доступы на каждый необходимый проект.&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:UI_manual&amp;diff=3440</id>
		<title>Help:UI manual</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:UI_manual&amp;diff=3440"/>
		<updated>2025-12-03T15:33:51Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: minor fixes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;На этой странице приведена инструкция по работе в пользовательском интерфейсе сервера Svacer.&lt;br /&gt;
&lt;br /&gt;
== Авторизация в пользовательском интерфейсе сервера Svacer ==&lt;br /&gt;
&lt;br /&gt;
Для авторизации в пользовательском интерфейсе сервера Svacer введите логин и пароль на странице ввода учётных данных. Учётные данные по умолчанию — admin / admin.&lt;br /&gt;
[[File:Авторизация 01.png|thumb|none|x300px|alt=AutorizationMain|Страница ввода учетных данных]]&lt;br /&gt;
&lt;br /&gt;
Если на сервере настроена поддержка протокола LDAP, то войти можно с помощью внешних серверов. Для этого:&lt;br /&gt;
&lt;br /&gt;
# На странице ввода учетных данных перейдите на вкладку '''LDAP'''.&lt;br /&gt;
# Выберите LDAP-сервер в списке, если настроено больше одного сервера авторизации.&lt;br /&gt;
# Нажмите кнопку '''Подробности''' для раскрытия подробной информации о сервере и его доступности.&lt;br /&gt;
# Введите логин и пароль.&lt;br /&gt;
&lt;br /&gt;
[[File:Авторизация LDAP 02.png|thumb|none|x300px|alt=AutorizationLDAP|Страница входа по протоколу LDAP]]&lt;br /&gt;
&lt;br /&gt;
После успешного входа отобразится пользовательский интерфейс сервера Svacer. При этом, если в прошлой сессии пользователь [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выбрал проект, его ветку и снимок]] или [[Help:UI manual#Использование фильтров|применил фильтры]], отобразятся эти проект, ветка и фильтры.&lt;br /&gt;
&lt;br /&gt;
Описание настроек конфигурации сервера Svacer для поддержки аутентификации по LDAP протоколу приведено по [[LDAP configuration|ссылке]].&lt;br /&gt;
&lt;br /&gt;
{{Note|type=info|text=''Чтобы после обновления системы в пользовательском веб-интерфейсе корректно отображались изменения, после авторизации обновите страницу в браузере – нажмите клавишу F5.''}}&lt;br /&gt;
&lt;br /&gt;
== Описание основных элементов пользовательского интерфейса ==&lt;br /&gt;
Все страницы пользовательского интерфейса сервера Svacer устроены единообразно и состоят из двух частей:&lt;br /&gt;
# Верхняя панель – отображается на всех страницах пользовательского интерфейса.&amp;lt;br /&amp;gt;Содержит:&lt;br /&gt;
#* логотип сервера Svacer;&lt;br /&gt;
#* кнопки меню:&lt;br /&gt;
#** '''Разметка''' – [[Help:UI manual#Работа в режиме просмотра кода|просмотр и разметка найденных маркеров]], а также [[Help:UI manual#Сравнение снимков и маркеров|сравнение снимков или отдельных маркеров]];&lt;br /&gt;
#** '''Код''' – [[Help:UI manual#Работа в режиме разметки|просмотр снимков исходного кода]], связанного с результатами анализатора Svace;&lt;br /&gt;
#** '''Проекты''' – [[Help:UI manual#Управление проектами и группами проектов|управление проектами]] (режим доступен только пользователям с ролью admin);&lt;br /&gt;
#** '''Детекторы''' – [[Help:UI manual#Просмотр детекторов|просмотр списка детекторов]];&lt;br /&gt;
#** '''Статистика''' – [[Help:UI manual#Просмотр статистики|просмотр статистики разметки]] по всем проектам, веткам и снимкам, доступным пользователю;&lt;br /&gt;
#** '''Поиск''' – [[Help:UI manual#Глобальный поиск|глобальный поиск]] снимков, маркеров и комментариев к ним;&lt;br /&gt;
#* [[File:Icon settings.png|x25px]] – кнопка для перехода к [[Help:UI manual#Настройка сервера Svacer|настройке системы]];&lt;br /&gt;
#* [[File:Icon RuEng.png|x25px]] – переключатель языка пользовательского интерфейса;&lt;br /&gt;
#* [[File:Icon question mark.png|x25px]] – кнопка для перехода на страницу документации к системе;&lt;br /&gt;
#* [[File:Icon bell.png|25px]] – кнопка для перехода к [[Help:UI manual#Просмотр уведомлений в интерфейсе Системы|уведомлениям]];&lt;br /&gt;
#* [[File:Icon profile.png|x25px]] – кнопка меню пользователя, которое предоставляет следующие функции:&lt;br /&gt;
#** [[Help:UI manual#Настройка профиля пользователя|настройка профиля пользователя]];&lt;br /&gt;
#** [[Help:UI manual#Настройка интерфейса|настройка интерфейса]];&lt;br /&gt;
#** [[Help:UI manual#Настройка уведомлений|настройка уведомлений]];&lt;br /&gt;
#** [[Help:UI manual#Управление лицензией|управление лицензией]];&lt;br /&gt;
#** [[Help:UI manual#Просмотр информации о программе|просмотр информации о программе]];&lt;br /&gt;
#** [[Help:UI manual#Выход из системы|выход из системы]].&lt;br /&gt;
# Рабочая область – область экрана для просмотра информации и ввода, которая соответствует выбранному режиму работы или странице настроек.&lt;br /&gt;
&lt;br /&gt;
:[[File:03 Основные элементы интерфейса – без VSCode.png|thumb|none|upright=3]]&lt;br /&gt;
&lt;br /&gt;
== Базовые функции системы ==&lt;br /&gt;
=== Просмотр уведомлений в интерфейсе Системы===&lt;br /&gt;
Чтобы посмотреть уведомления, нажмите кнопку [[File:Icon bell.png|25px]] в правом верхнем углу экрана.&lt;br /&gt;
&lt;br /&gt;
В правой части экрана отобразится панель со списком уведомлений для авторизованного пользователя:&lt;br /&gt;
&lt;br /&gt;
[[File:Notifications new.png|thumbnone|x300px|alt=NotificationList|Панель уведомлений]]&lt;br /&gt;
&lt;br /&gt;
Нажмите кнопку [[File:Icon cross 01.png|15px]] для удаления уведомления.&lt;br /&gt;
&lt;br /&gt;
Нажмите кнопку '''Очистить''' для удаления всех уведомлений.&lt;br /&gt;
&lt;br /&gt;
=== Настройка профиля пользователя ===&lt;br /&gt;
Для перехода в профиль выберите пункт '''Профиль''' в меню пользователя в правом верхнем углу экрана:&lt;br /&gt;
[[File:06 Меню пользователя — без VSCode.png|thumb|none|250px|alt=UserMenu|Меню пользователя. Переход к настройке профиля]]&lt;br /&gt;
&lt;br /&gt;
В правой части экрана отобразится панель '''Профиль''', на которой можно изменить атрибуты своего профиля (ФИО, контакты), кроме логина, а также [[Help:UI manual#Изменение пароля|поменять пароль]].[[File: 07 Профиль основные параметры.png|thumb|none|x400px|alt=ProfileSetting|Настройки профиля пользователя]]&lt;br /&gt;
&lt;br /&gt;
{{Note|type=info|text=''Пользователь LDAP может скорректировать только '''Организации'''. Остальные атрибуты (ФИО, E-mail), а также функция изменения пароля, недоступны.''}}&lt;br /&gt;
&lt;br /&gt;
=== Изменение пароля ===&lt;br /&gt;
Для изменения пароля:&lt;br /&gt;
:1. Выберите пункт '''Профиль''' в меню пользователя.&lt;br /&gt;
:2. В разделе '''Профиль пользователя''' нажмите на ссылку '''Изменить пароль''':&lt;br /&gt;
:[[File:10_Профиль_изменение пароля.png|thumb|none|450px|Переход к изменению пароля в профиле пользователя]]&lt;br /&gt;
:3. В открывшемся окне:&lt;br /&gt;
::а) Введите текущий пароль.&lt;br /&gt;
::б) Дважды введите новый пароль.&lt;br /&gt;
::в) Нажмите кнопку '''Изменить'''.&lt;br /&gt;
::[[File:11_Профиль_ввод нового пароля.png|thumb|none|350px|Окно изменения пароля]]&lt;br /&gt;
&lt;br /&gt;
=== Настройка интерфейса ===&lt;br /&gt;
Для перехода к настройкам выберите пункт '''Настройки интерфейса''' в меню пользователя в правом верхнем углу экрана:&lt;br /&gt;
[[File:187 Меню пользователя интерфейс.png|thumb|none|250px|alt=UserMenu|Меню пользователя. Переход к настройке интерфейса]]&lt;br /&gt;
&lt;br /&gt;
В правой части экрана отобразится панель '''Настройки интерфейса''' с тремя группами параметров:&lt;br /&gt;
:1. '''Общие'''. Параметры этой группы позволяют:&lt;br /&gt;
::а) Выбрать фильтры, которые будут по умолчанию применяться при повторном входе в систему:&lt;br /&gt;
::*фильтры, установленные в предыдущей сессии (выбрано по умолчанию);&lt;br /&gt;
::*сохраненный пользовательский фильтр.&lt;br /&gt;
::б) Включить или выключить (выбрано по умолчанию) замену снимка на последний загруженный в БД Svacer снимок при открытии сохраненного контекста. &lt;br /&gt;
::Если параметр в состоянии «Выключен», при выборе проекта и ветки открывается последний импортированный снимок.&lt;br /&gt;
::в) Включить или выключить (выбрано по умолчанию) сохранение вкладок с открытыми файлами в каждом контексте.&lt;br /&gt;
::г) Включить (выбрано по умолчанию) или выключить сохранение применённой сортировки значений в таблице маркеров при [[Help:UI manual#Выход из системы|выходе из системы]].&lt;br /&gt;
::д) Включить или выключить (выбрано по умолчанию) механизм генерации PDF-файла на основе HTML при выгрузке отчета с [[Help:UI manual#Таблица маркеров|информацией о маркерах]]. &lt;br /&gt;
{{Note|type=warn|text=''Для использования генерации PDF на основе HTML на сервере Svacer должен быть [[Help:Installation#Браузер для PDF-отчетов|установлен браузер Chromium или Google Chrome]].''}}&lt;br /&gt;
:[[File:08 общие настройки интерфейса.png|thumb|none|600px|alt=UserInterfaceSettings|Настройки интерфейса. Группа параметров «Общие»]]&lt;br /&gt;
:2. '''Навигационная панель'''. Параметры этой группы позволяют:&lt;br /&gt;
::а) Выбрать отображение по умолчанию данных [[Help:UI manual#Вкладка «Детекторы»|на вкладке '''Детекторы''']] навигационной панели:&lt;br /&gt;
::*группировка детекторов по уровням серьезности (выбрано по умолчанию);&lt;br /&gt;
::*отображение детекторов в виде списка.&lt;br /&gt;
:::Выбранное отображение будет применяться [[Help:UI manual#Вкладка «Детекторы»|на вкладке '''Детекторы''']] каждый раз после входа в систему.&lt;br /&gt;
::б) Выбрать отображение по умолчанию данных [[Help:UI manual#Вкладка «Файлы»|на вкладке '''Файлы''']] навигационной панели:&lt;br /&gt;
::*только имя файла (выбрано по умолчанию);&lt;br /&gt;
::*полный путь к файлу.&lt;br /&gt;
::в) Выбрать способ сортировки в колонке '''Маркеры''' [[Help:UI manual#Вкладка «Файлы»|на вкладке '''Файлы''']] панели навигации:&lt;br /&gt;
::*по общему количеству маркеров (выбрано по умолчанию);&lt;br /&gt;
::*по количеству размеченных маркеров.&lt;br /&gt;
:[[File:08_настройки навигационной панели.png|thumb|none|600px|alt=UserInterfaceSettings|Настройки интерфейса. Группа параметров «Навигационная панель»]]&lt;br /&gt;
:3. '''Просмотр кода'''. Параметры этой группы позволяют:&lt;br /&gt;
::а) Включить (выбрано по умолчанию) или выключить использование темной темы (темный фон, светлый текст) при просмотре файлов с исходным кодом.&lt;br /&gt;
::б) Включить или выключить (выбрано по умолчанию) переиспользование [[Help:UI manual#Вкладка с исходным кодом|вкладки с исходным кодом]] в редакторе кода.&lt;br /&gt;
::в) Включить или выключить (выбрано по умолчанию) отображение всех элементов трассы маркера по нажатии на ссылку '''Показать трассу''' [[Help:UI manual#Вкладка с исходным кодом|в виджете маркера]].&lt;br /&gt;
::Если параметр находится в состоянии «Выключен», то будет отображаться только первый элемент трассы.&lt;br /&gt;
::г) Выбрать отображение виджета относительно строки кода, с которой он связан:&lt;br /&gt;
::*	над строкой кода (выбрано по умолчанию);&lt;br /&gt;
::*	под строкой кода.&lt;br /&gt;
:[[File:08 настройки просмотра кода.png|thumb|none|600px|alt=UserInterfaceSettings|Настройки интерфейса. Группа параметров «Просмотр кода»]]&lt;br /&gt;
:Эти настройки сохраняются для учётной записи пользователя и не сбрасываются при новой сессии.&lt;br /&gt;
:Чтобы сбросить параметры любой группы к значениям по умолчанию, нажмите на ссылку '''Сбросить настройки''' внизу панели '''Настройки интерфейса'''.&lt;br /&gt;
&lt;br /&gt;
=== Настройка уведомлений ===&lt;br /&gt;
Система может уведомлять пользователей по каналам E-mail и Telegram о следующих типах операций:&lt;br /&gt;
* добавление (при импорте, копировании, клонировании) и удаление снимков; &lt;br /&gt;
* изменение разметки маркеров; &lt;br /&gt;
* добавление комментариев к маркерам. &lt;br /&gt;
&lt;br /&gt;
Для перехода к настройкам выберите пункт '''Настройки уведомлений''' в меню пользователя в правом верхнем углу экрана:&lt;br /&gt;
[[File:188 Меню пользователя - уведомления.png|thumb|none|250px|Меню пользователя. Переход к настройке уведомлений]]&lt;br /&gt;
&lt;br /&gt;
В правой части экрана отобразится панель '''Настройки уведомлений''' с двумя группами параметров:&lt;br /&gt;
:1. '''Типы уведомлений'''. Параметры этой группы позволяют выбрать канал, по которому будут приходить уведомления, настроить и проверить его. Для этого:&lt;br /&gt;
::а) Включите опцию '''E-mail''' и (или) '''Telegram chat ID'''.&lt;br /&gt;
::При выборе уведомления по '''E-mail''' используется адрес электронной почты, указанный [[Help:UI manual#Настройка профиля пользователя|в профиле пользователя]].&lt;br /&gt;
::б) При выборе уведомления по '''Telegram''' введите '''Telegram chat ID'''.&lt;br /&gt;
::в) Чтобы проверить подключение к каналу нажмите кнопку '''Проверить'''.&lt;br /&gt;
::Отправится тестовое сообщение по указанным реквизитам:&lt;br /&gt;
::[[File:189 Настройки уведомлений.png|thumb|thumb|none|600px|alt=UserInterfaceSettings|Настройки уведомлений]]&lt;br /&gt;
:2. '''Подписки'''. Позволяют выбрать проекты, ветки и события, при возникновении которых будут приходить уведомления. Для этого:&lt;br /&gt;
::а) Для добавления подписки нажмите кнопку '''Добавить''' и в появившейся строке в раскрывающемся списке выберите проект и/или его ветку.&lt;br /&gt;
::Чтобы уведомления приходили при изменениях во всех проектах, доступных пользователю, выберите значение '''Все''' в раскрывающемся списке проектов.&lt;br /&gt;
::[[File:190 Настройки уведомлений. Выбор ветки.png|thumb|thumb|none|600px|alt=UserInterfaceSettings|Настройки уведомлений. Выбор ветки]]&lt;br /&gt;
::б) Выберите объекты, при изменении которых будут приходить уведомления – установите флажки в столбцах '''Снимки''', '''Разметка''', '''Комментарии'''.&lt;br /&gt;
::в) Если требуется получать уведомления о разметке и/или комментариях только в маркерах, в которых пользователь принимал участие, установите флажок в столбце '''Участие''' (доступен, только если установлены флажки в столбцах '''Разметка''' и/или '''Комментарии''').&lt;br /&gt;
::г) Для настройки исключения из подписки на уведомления нажмите кнопку [[File:Icon plus.png|x25px]].&lt;br /&gt;
::Кнопка примет вид [[File:Icon minus.png|x25px]].&lt;br /&gt;
::д) Для удаления подписки на уведомления нажмите кнопку [[File:Icon minus.png|x25px]].&lt;br /&gt;
::По окончании настройки уведомлений нажмите кнопку '''Сохранить'''.&lt;br /&gt;
&lt;br /&gt;
=== Управление лицензией ===&lt;br /&gt;
{{Note|type=info|text=''В версии сервера Svacer 12.0.0 лицензия встроена в дистрибутив и не ограничивает функции системы. Срок действия встроенной лицензии – до 31.12.2027 г.''}}&lt;br /&gt;
&lt;br /&gt;
Чтобы посмотреть текст лицензии системы и копировать его, а также для активации новой лицензии, выберите пункт '''Лицензия''' в меню пользователя в правом верхнем углу экрана.&lt;br /&gt;
В правой части экрана отобразится панель '''Лицензия'''.&lt;br /&gt;
[[File:231 Меню пользователя Переход к просмотру лицензии.png|thumb|none|450px|Меню пользователя. Переход к просмотру лицензии]]&lt;br /&gt;
[[File:232 Панель Лицензия.png|thumb|none|x400px|Панель «Лицензия»]]&lt;br /&gt;
&lt;br /&gt;
Чтобы скопировать текст лицензии, нажмите кнопку [[File:Icon copy link.png|x15px]].&lt;br /&gt;
Чтобы активировать лицензию:&lt;br /&gt;
:1. Нажмите на ссылку '''Активировать новую'''.&lt;br /&gt;
:2. В открывшемся окне '''Активация лицензии''' введите лицензионный ключ и нажмите кнопку '''Активировать'''.&lt;br /&gt;
{{Note|type=warn|text=''Функция активации лицензии доступна пользователям с [[#Серверные доступы|серверным доступом]] '''Администрирование сервера'''.''}}&lt;br /&gt;
[[File:233 Окно Лицензия.png|thumb|none|600px|Окно «Активация лицензии»]]&lt;br /&gt;
&lt;br /&gt;
=== Просмотр информации о программе ===&lt;br /&gt;
Чтобы посмотреть информацию о программе, выберите пункт '''О программе''' в меню пользователя в правом верхнем углу экрана.&lt;br /&gt;
[[File:12_Меню пользователя_о программе — без VSCode.png|thumb|none|250px|Меню пользователя. Переход к просмотру информации о программе]]&lt;br /&gt;
&lt;br /&gt;
Откроется окно с информацией о программе&lt;br /&gt;
[[File:13 1 О программме.png|none|thumb|600x600px|Информация о программе]]&lt;br /&gt;
Нажмите на ссылку в строке '''Документация и релизы''' для перехода на страницу документации к системе и ссылкам для скачивания дистрибутивов релизов Svacer.&lt;br /&gt;
&lt;br /&gt;
Нажмите на ссылку в строке '''Спецификация OpenAPI''' для открытия страницы Swagger с описанием API методов используемых в Svacer.&lt;br /&gt;
&lt;br /&gt;
Нажмите на ссылку '''Telegram''' в строке '''Поддержка и Обратная связь''' для открытия чата с технической поддержкой.&lt;br /&gt;
&lt;br /&gt;
Нажмите на ссылку '''Email''' в строке '''Поддержка и обратная связь''' для отправки сообщения в службу технической поддержки по электронной почте.&lt;br /&gt;
&lt;br /&gt;
== Выбор контекста (проекта, ветки и снимка) ==&lt;br /&gt;
Для работы [[Help:UI manual#Работа в режиме разметки|в режиме разметки]] или [[Help:UI manual#Работа в режиме просмотра кода|режиме просмотра кода]] требуется выбрать проект, ветку и снимок с результатами работы анализатора Svace. &lt;br /&gt;
&lt;br /&gt;
При необходимости список проектов можно отфильтровать по группе проектов. Это можно сделать в блоке, который расположен под [[Help:UI manual#Описание основных элементов пользовательского интерфейса|верхней панелью]]. &lt;br /&gt;
&lt;br /&gt;
[[File:14_Выбор проекта, верки, снимка.png|800px]]&lt;br /&gt;
&lt;br /&gt;
По умолчанию после выбора проекта автоматически выбирается ветка master и последний импортированный снимок, если [[Help:UI manual#Настройка интерфейса|параметр '''При открытии сохраненного контекста заменить снимок на последний загруженный''']] находится в состоянии '''Выключен'''. Если master отсутствует, то ветку нужно выбрать вручную.&lt;br /&gt;
&lt;br /&gt;
== Работа в режиме разметки ==&lt;br /&gt;
Режим разметки предоставляет следующий набор элементов управления:&lt;br /&gt;
:1. Навигационная панель:&lt;br /&gt;
:* [[Help:UI manual#Вкладка «Детекторы»|вкладка '''Детекторы''']];&lt;br /&gt;
:* [[Help:UI manual#Вкладка «Файлы»|вкладка '''Файлы''']].&lt;br /&gt;
:Эту панель можно скрыть. Для этого нажмите кнопку [[File:Button Скрыть навигацию.png|x25px]] в правом верхнем её углу. Чтобы панель раскрыть, нажмите кнопку [[File:Button Паказать навигацию.png|x25px]].&lt;br /&gt;
:2. Центральная панель:&lt;br /&gt;
:* [[Help:UI manual#Вкладка «Информация о снимке»|вкладка '''Информация о снимке''']] – открывается по нажатии кнопки [[File:Icon Information.png|25x25px]];&lt;br /&gt;
:* одна или несколько [[Help:UI manual#Вкладка с исходным кодом|вкладок с исходным кодом''']] (отображаются после выбора файлов в таблице маркеров или навигационной панели);&lt;br /&gt;
:* [[Help:UI manual#Таблица маркеров|таблица маркеров]];&lt;br /&gt;
:3. [[Help:UI manual#Функции правой панели|Правая панель]] с информацией о маркере. &lt;br /&gt;
:Эту панель можно скрыть. Для этого нажмите кнопку [[File:Button Паказать навигацию.png|x25px]] в левом верхнем её углу. Чтобы панель раскрыть, нажмите кнопку [[File:Button Скрыть навигацию.png|x25px]].&lt;br /&gt;
&lt;br /&gt;
[[File:96 Режим разметки. Набор элементов управления.png|800px|thumb|none|Режим разметки. Набор элементов управления]]&lt;br /&gt;
&lt;br /&gt;
=== Функции навигационной панели ===&lt;br /&gt;
==== Вкладка «Детекторы» ====&lt;br /&gt;
На этой вкладке отображается список детекторов Svace, которые сработали в выбранном снимке.&lt;br /&gt;
&lt;br /&gt;
Серьезность (критичность) детектора обозначена цветом:&lt;br /&gt;
* красный – наивысшая серьезность (CRITICAL);&lt;br /&gt;
* желтый – высокая серьезность (MAJOR);&lt;br /&gt;
* белый – обычная серьезность (NORMAL, MINOR, UNDEFINED).&lt;br /&gt;
&lt;br /&gt;
На вкладке '''Детекторы''' пользователю доступны следующие функции:&lt;br /&gt;
:1. Поиск по детекторам и файлам.&lt;br /&gt;
:2. Выгрузка списка отображаемых на панели детекторов и маркеров в файл формата .csv – для этого нажмите кнопку [[File:Button Скачать CSV.png|x25px]]&lt;br /&gt;
:3. Отображение данных в виде списка – для этого нажмите кнопку [[File:icon_list.png|x25px]].&lt;br /&gt;
:4. Группировка детекторов по уровням серьезности (по умолчанию) – для этого нажмите кнопку [[File:icon_tree.png|x25px]].&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;
  16_Детекторы_список.png|Вкладка '''Детекторы''' с данными в виде списка&lt;br /&gt;
  15_Детекторы_группировка.png|Вкладка '''Детекторы''' с группировкой по уровням серьезности&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
:5. Сворачивание и разворачивание дерева детекторов (доступно при любом виде группировки):&lt;br /&gt;
::а) Для сворачивание нажмите кнопку [[File:Button Скрыть таблицу.png|x25px]].  &lt;br /&gt;
::Список детекторов свернется: при примененной группировке отобразятся группы детекторов; при отображении данных в виде списка отобразится список детекторов; кнопка примет вид [[File:Button Показать таблицу.png|x25px]].&lt;br /&gt;
::б) Для разворачивания нажмите кнопку [[File:Button Показать таблицу.png|x25px]]. &lt;br /&gt;
::Список детекторов развернется полностью: при примененной группировке отобразятся группы детекторов с раскрытыми списками детекторов и файлов, в которых они найдены; при отображении данных в виде списка отобразится список детекторов с раскрытыми списками файлов, в которых они найдены; кнопка примет вид [[File:Button Скрыть таблицу.png|x25px]].&lt;br /&gt;
:6. Отображение списка маркеров в файлах, в которых сработал детектор – для этого нажмите кнопку [[File:icon_uncover.png|x15px]] в левой части его имени.&lt;br /&gt;
:[[File:checker_uncover.png|thumb|none|320px|Список маркеров, найденных детектором]]&lt;br /&gt;
:7. [[Help:UI manual#Блокировка разметки|Блокировка всех маркеров]], найденных детектором, для разметки другими пользователями – для этого нажмите кнопку [[File:icon_unlocked.png|x25px]] справа от названия детектора (отображается при наведении курсора).&lt;br /&gt;
:8. Применение фильтра по детектору [[Help:UI manual#Таблица маркеров|в таблице маркеров]] – для этого нажмите на название детектора или название файла в раскрывающемся списке маркеров детектора.&lt;br /&gt;
:9. Применение фильтра по серьезности [[Help:UI manual#Таблица маркеров|в таблице маркеров]] – для этого нажмите на название группы серьезности.&lt;br /&gt;
:10. Отмена фильтров по серьезности, детекторам и файлам – для этого нажмите кнопку [[File:icon_return.png|x25px]].&lt;br /&gt;
:11. Отображение [[Help:UI manual#Вкладка с исходным кодом|на вкладке исходного кода]] содержимого файла, места и содержания маркера, а также подробной информации о маркере [[Help:UI manual#Функции правой панели|на правой панели]] – для этого нажмите на маркер.&lt;br /&gt;
:12. Просмотр фрагмента кода в режиме предпросмотра – для этого нажмите кнопку [[File:icon_preview_code.png|x25px]].&lt;br /&gt;
&lt;br /&gt;
==== Вкладка «Файлы» ====&lt;br /&gt;
На этой вкладке отображается список файлов, в которых найдены маркеры.&lt;br /&gt;
&lt;br /&gt;
[[File:17 Файлы.png|thumb|none|300px|Вкладка '''Файлы''']]&lt;br /&gt;
&lt;br /&gt;
Для каждого файла отображаются: &lt;br /&gt;
* имя;&lt;br /&gt;
* количество найденных маркеров (предупреждений);&lt;br /&gt;
* количество размеченных маркеров;&lt;br /&gt;
* кнопки [[File:Icon plus.png|x25px]] или [[File:Icon minus.png|x25px]] (если применена фильтрация по файлам).&lt;br /&gt;
&lt;br /&gt;
На вкладке '''Файлы''' пользователю доступны следующие функции:&lt;br /&gt;
:1. Просмотр на [[Help:UI manual#Вкладка с исходным кодом|вкладке с исходным кодом]]: содержимого файла, места и содержания маркера, а также подробной информации о маркере [[Help:UI manual#Функции правой панели|на правой панели]] – без включения фильтрации по этому файлу. Для этого нажмите на имя файла.&lt;br /&gt;
:2. Применение фильтра по файлам [[Help:UI manual#Таблица маркеров|в таблице маркеров]] – для этого нажмите кнопку [[File:Icon plus.png|x25px]] в одной или нескольких строках. &lt;br /&gt;
:Фильтр применится, кнопка [[File:Icon plus.png|x25px]] в списке файлов поменяется на [[File:Icon minus.png|x25px]].&lt;br /&gt;
:3. Исключение файла из фильтра по файлам [[Help:UI manual#Таблица маркеров|в таблице маркеров]] – для этого нажмите кнопку [[File:Icon minus.png|x25px]] в строке файла.&lt;br /&gt;
:4. Отмена фильтрации [[Help:UI manual#Таблица маркеров|в таблице маркеров]] для всех выбранных файлов – для этого нажмите кнопку [[File:Icon minus 3.png|x25px]] или кнопку [[File:icon_return.png|x25px]] [[Help:UI manual#Вкладка «Детекторы»|на вкладке '''Детекторы''']].&lt;br /&gt;
:5. [[Help:UI manual#Блокировка разметки|Блокировка всех маркеров]] в файле для разметки другими пользователями – для этого нажмите кнопку [[File:icon_unlocked.png|x25px]] справа от названия файла (отображается при наведении курсора).&lt;br /&gt;
:6. Поиск по имени/пути файла в поле '''Поиск по полному пути'''. Поддерживается поиск с использованием [[Help:UI manual#Использование регулярных выражений|регулярных выражений]].&lt;br /&gt;
:7. Сортировка файлов по количеству маркеров – для этого нажмите кнопку [[File:Icon-expand-all.png|x25px]]&lt;br /&gt;
:8. Выгрузка списка отображаемых на панели файлов в файл формата .csv – для этого нажмите кнопку [[File:button_Скачать CSV.png|25px]]&lt;br /&gt;
:9. Настройка отображения файлов и сортировки в колонке '''Маркеры''' на вкладке '''Файлы''' – для этого нажмите кнопку [[File:icon_gear.png|x25px]] и поменяйте настройки.&lt;br /&gt;
:[[File:18 Временная настройка панели навигации.png|thumb|none|800px|Настройка отображения файлов и сортировки полей]]&lt;br /&gt;
&lt;br /&gt;
=== Функции центральной панели ===&lt;br /&gt;
==== Вкладка «Информация о снимке» ====&lt;br /&gt;
На этой вкладке отображается информация о выбранном снимке.&lt;br /&gt;
&lt;br /&gt;
[[File:19 Информация о снимке.png|thumb|left|600px|Вкладка '''Информация о снимке''']]&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
На вкладке '''Информация о снимке''' пользователю доступны следующие функции:&lt;br /&gt;
:1. Просмотр подробной информации о снимке во всплывающем окне – для этого нажмите кнопку '''Просмотреть JSON'''.&lt;br /&gt;
:2. Экспорт [[Help:UI manual#Экспорт|исходного кода, снимков и разметки]] – для этого нажмите кнопку '''Экспорт''' и выберите подходящий вариант.&lt;br /&gt;
:3. [[Help:UI manual#Импорт разметки|Импорт разметки]] – для этого нажмите кнопку '''Импорт''' и выберите подходящий вариант.&lt;br /&gt;
:4. Переход к более продвинутой навигации по исходному коду с подсветкой маркеров во встроенном Web-IDE  Theia – для этого нажмите кнопку '''Открыть в IDE''' .&lt;br /&gt;
:{{Note|type=warn|text=''Функциональность является экспериментальной, доступна при наличии проектного доступа '''Экспорт снимков''' и запуске веб-приложения Svacer по протоколу HTTPS или на локальном хосте. Список доступных IDE определяется при инсталляции. Если доступна только одна IDE, то раскрывающийся список отсутствует, а IDE открывается сразу по нажатию кнопки '''Открыть в IDE'''. Если функциональность недоступна, кнопка '''Открыть в IDE''' неактивна и отображается иконка'' [[File:Icon attention.png|23x23px]]''.''}}&lt;br /&gt;
:5. Просмотр списка приложенных файлов —  по нажатии кнопки '''Показать''', но только при наличии приложенных файлов.&lt;br /&gt;
:6. Скрытие списка приложенных файлов (возможно только при наличии приложенных файлов) – для этого нажмите на ссылку '''Скрыть'''.&lt;br /&gt;
:7. Удаление приложенного файла (возможно только при наличии приложенных файлов) — для этого нажмите кнопку  [[File:icon_delete.png|x25px]].&lt;br /&gt;
:8. Просмотр пользовательских полей, которые пользователь указал при импорте – доступен по нажатии кнопки '''Показать''', но только при наличии этих полей.&lt;br /&gt;
:9. Просмотр параметров анализа во всплывающем окне – для этого нажмите кнопку '''Показать''' в строке '''Параметры анализа'''.&lt;br /&gt;
:10. Экспорт параметров анализа в формате .txt – для этого нажмите кнопку '''Скачать''' в строке '''Параметры анализа'''.&lt;br /&gt;
:11. [[Help:UI manual#Работа с таблицей статистики|Просмотр таблицы статистики]] – для этого нажмите кнопку '''Показать''' в строке '''Статистика по детекторам'''.&lt;br /&gt;
:Информация в таблице сгруппирована по параметрам детекторов, найденным маркерам и статусу их разметки.&lt;br /&gt;
&lt;br /&gt;
==== Вкладка с исходным кодом ====&lt;br /&gt;
Вкладка открывается только после выбора файла [[Help:UI manual#Вкладка «Детекторы»|на вкладке '''Детекторы''']] или [[Help:UI manual#Вкладка «Файлы»|'''Файлы''']], а также [[Help:UI manual#Таблица маркеров|в таблице маркеров]]. Одновременно может быть открыто несколько вкладок с исходным кодом, если выключена [[Help:UI manual#Настройка профиля пользователя|настройка '''Переиспользование вкладки в редакторе кода''']].&lt;br /&gt;
&lt;br /&gt;
В верхней части вкладки отображаются панель инструментов для работы с файлом [1] и полный путь к файлу [2]. Если в строке кода установлен курсор, то в нижнем правом углу вкладки отображается его позиция [3]:&lt;br /&gt;
[[File:20 Исходный код.png|thumb|none|600px|Полный путь к файлу и позиционирование курсора]]&lt;br /&gt;
&lt;br /&gt;
На вкладке с исходным кодом пользователю доступны следующие функции:&lt;br /&gt;
:1. Отображение кода на весь экран – для этого нажмите кнопку [[File:Icon expand.png|23x23px]] или дважды кликните на вкладку файла. &lt;br /&gt;
:&lt;br /&gt;
:Для возврата к обычному отображению нажмите кнопку [[File:Icon minimize.png|24x24px]] или дважды кликните на вкладку файла.&lt;br /&gt;
:2. Переход к предыдущей или следующей строке, в которую пользователь установил курсор, – для этого используйте кнопки [[File:Button left.png|23x23px]] и [[File:Button right.png]] или сочетания клавиш '''Ctrl&amp;amp;nbsp;+&amp;amp;nbsp;&amp;lt;''' и '''Ctrl&amp;amp;nbsp;+&amp;amp;nbsp;&amp;gt;'''.&lt;br /&gt;
:3. Просмотр и открытие маркеров из списка всех маркеров в данном файле – для этого нажмите кнопку [[File:Icon list 2.png|x25px]].&lt;br /&gt;
:[[File:21 Исходный код Отображение списка маркеров.png|thumb|none|300px|right|Cписок маркеров в файле]]&lt;br /&gt;
:4. Отображение всех маркеров – для этого нажмите кнопку [[File:Icon Скрыть маркеры.png|24x24px]].&lt;br /&gt;
:Кнопка недоступна, если она уже нажата: все маркеры уже отображаются.&lt;br /&gt;
:5. Скрытие всех маркеров и трасс – для этого нажмите кнопку [[File:Icon Показать маркеры.png|24x24px]].&lt;br /&gt;
:Кнопка недоступна, если она уже нажата: все маркеры уже скрыты.&lt;br /&gt;
:6. Добавление комментария к строке кода – можно сделать двумя способами:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button Comment Add.png|x25px]] в левой части строки, рядом с её номером (отображается только если в строке установлен курсор) и введите комментарий.&lt;br /&gt;
::ИЛИ&lt;br /&gt;
::б) Нажмите правой кнопкой мыши на строку и выберите пункт '''Добавить комментарий'''. Этим способом можно добавить несколько комментариев к одной строке.&lt;br /&gt;
:7. Просмотр комментария к строке – можно сделать двумя способами:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button Comment view.png|x25px]] в левой части строки, рядом с её номером.&lt;br /&gt;
::ИЛИ&lt;br /&gt;
::б) Нажмите кнопку [[File:Button Comment view.png|x25px]] на панели инструментов и выберите в списке строку комментария.&lt;br /&gt;
::Отобразится виджет комментария, в котором доступны следующие функции:&lt;br /&gt;
::*добавление дополнительного комментария к этой строке кода по нажатии кнопки [[File:Button Comment Add.png|x25px]];&lt;br /&gt;
::*редактирование текста комментария по нажатии кнопки [[File:icon_edit3.png|x25px]];&lt;br /&gt;
::*удаление комментария по нажатии кнопки [[File:icon_delete 2.png|x25px]].&lt;br /&gt;
:[[File:118 Виджет комментария к строке кода.png|thumb|none|600px|Виджет комментария к строке кода]]&lt;br /&gt;
:8. Просмотр и открытие комментариев из списка всех комментариев в коде – для этого нажмите кнопку [[File:Button Comment view.png|x25px]] справа.&lt;br /&gt;
:9. Отображение всех комментариев в коде – для этого нажмите кнопку [[File:Button_Comment_view_all.png|x25px]] на панели инструментов.&lt;br /&gt;
:Кнопка недоступна, если она уже нажата: все комментарии уже отображаются.&lt;br /&gt;
:10. Скрытие всех комментариев в коде – для этого нажмите кнопку [[File:Button_Comment_hide_all.png|x25px]] на панели инструментов.&lt;br /&gt;
:Кнопка недоступна, если она уже нажата: все комментарии уже скрыты.&lt;br /&gt;
:11. Добавление открытого файла в [[Help:UI manual#Использование фильтров|фильтр]] [[Help:UI manual#Таблица маркеров|таблицы маркеров]] – для этого нажмите кнопку [[File:Icon filter add.png|x25px]] на панели инструментов. &lt;br /&gt;
:Фильтрация применится, вид кнопки поменяется на [[File:Icon filter remove.png|x25px]].&lt;br /&gt;
:12. Исключение файла из [[Help:UI manual#Использование фильтров|фильтра]] [[Help:UI manual#Таблица маркеров|таблицы маркеров]] – для этого нажмите кнопку [[File:Icon filter remove.png|x25px]] на панели инструментов. &lt;br /&gt;
:Фильтрация по этому файлу отменится, вид кнопки поменяется на [[File:Icon filter add.png|x25px]].&lt;br /&gt;
:13. Возврат к исходному маркеру (например, если был выбран другой связанный маркер на вкладке '''Трасса''' [[Help:UI manual#Функции правой панели|правой панели]]) – для этого нажмите кнопку [[File:Icon target.png|x25px]] в верхней части виджета маркера.&lt;br /&gt;
:14. [[Help:UI manual#Разметка маркера|Разметка маркера]] – установите '''Статус''', '''Серьезность''' и '''Действия''' в верхней части виджета маркера.&lt;br /&gt;
:15. Отображение блока элементов трассы в виджете маркера для строки кода – нажмите ссылку '''Показать трассу''' (доступна, если все блоки элементов трассы скрыты).&lt;br /&gt;
::Для последовательного перехода к другим элементам трассы воспользуйтесь кнопками [[File:Button up.png|x25px]] и [[File:Button down.png|x25px]].&lt;br /&gt;
::{{Note|type=info|text=''Отображение только первого элемента трассы или всех элементов трассы маркера по нажатии кнопки '''Показать трассу''' настраивается с помощью [[Help:UI manual#Настройка интерфейса|параметра '''Показывать всю трассу маркера''']].''}}&lt;br /&gt;
::[[File:97 Блок информации о элементе трассы.png|thumb|none|600px|Виджет маркера с блоком элемента трассы]]&lt;br /&gt;
:16. Скрытие блоков элементов трассы в виджете маркера для строки кода – нажмите ссылку '''Скрыть трассу''' (доступна, если хотя бы один блок элемента трассы отображается). &lt;br /&gt;
::Все открытые блоки элементов трассы маркера скроются.&lt;br /&gt;
:17. Переход к строке, в которой объявлена/определена переменная – нажмите правую кнопку мыши на строке исходного кода и выберите пункт '''Перейти к объявлению / Перейти к определению'''.&lt;br /&gt;
:{{Note|type=info|text=''Если для выделенного элемента кода нет объявления или определения, то отобразится сообщение: [[File:150 Объявление не найдено.png|247x247px]] или [[File:151 Определение не найдено.png|254x254px]].''}}&lt;br /&gt;
&lt;br /&gt;
:18. Просмотр ссылок на панели внизу экрана – нажмите правую кнопку мыши на строке исходного кода и выберите пункт '''Найти ссылки'''. На этой панели отображается иерархический список файлов с номерами строк, в которых найдены ссылки:&lt;br /&gt;
:[[File:Исходный_код_Референсы.png|thumb|none|600px|Cписок файлов с номерами строк, в которых найдены ссылки]]&lt;br /&gt;
&lt;br /&gt;
:* Чтобы перейти к строке кода, на которую найдена ссылка, нажмите на ссылку с номером строки на панели [1].&lt;br /&gt;
:* Чтобы посмотреть фрагмент кода, на который найдена ссылка, в режиме предпросмотра, нажмите кнопку [[File:icon_preview_code.png|x25px]] [2].&lt;br /&gt;
:{{Note|type=info|text=''Если для выделенного элемента кода нет ссылок, то отобразится сообщение: [[File:152 Ссылки не найдены.png|213x213px]].''}}&lt;br /&gt;
&lt;br /&gt;
:19. Переход к просмотру выбранного файла [[Help:UI manual#Работа в режиме просмотра кода|в режиме просмотра кода]] – нажмите правую кнопку мыши на строке исходного кода и выберите пункт '''Открыть в режиме Код'''.&lt;br /&gt;
:20. Копирование ссылки на строку кода в буфер обмена – нажмите правую кнопку мыши на строке исходного кода и выберите пункт '''Копировать прямую ссылку'''.  &lt;br /&gt;
::При переходе по этой ссылке будет открываться файл в режиме разметки с курсором на той строке кода, для которой была скопирована ссылка.&lt;br /&gt;
:21. Увеличение и уменьшение размера шрифта кода вместе с отображаемыми виджетами – нажмите правую кнопку мыши на любой строке исходного кода и выберите пункт '''Уменьшить''' или '''Увеличить''', либо установите курсор в любую строку и нажмите сочетание клавиш '''Ctrl&amp;amp;nbsp;+&amp;amp;nbsp;Alt&amp;amp;nbsp;+&amp;amp;nbsp;-''' или '''Ctrl&amp;amp;nbsp;+&amp;amp;nbsp;Alt&amp;amp;nbsp;+&amp;amp;nbsp;='''&lt;br /&gt;
:22. Копирование строки кода – нажмите правую кнопку мыши на строке исходного кода и выберите пункт '''Copy'''.&lt;br /&gt;
:23. Вызов командной строки – нажмите правую кнопку мыши на строке исходного кода и выберите пункт '''Command Palette'''.&lt;br /&gt;
:[[File:25 Исходный код Вызов командной строки.png|thumb|none|600px|Командная строка]]&lt;br /&gt;
&lt;br /&gt;
==== Таблица маркеров ====&lt;br /&gt;
Для раскрытия таблицы маркеров нажмите кнопку [[File:Button Показать таблицу.png|x25px]] в верхней части [[Help:UI manual#Функции центральной панели|центральной панели]], а для её скрытия – [[File:Button Скрыть таблицу.png|x25px]].&lt;br /&gt;
&lt;br /&gt;
В верхней части таблицы находится панель, которая содержит:&lt;br /&gt;
* [[File:Field Детектор.png|x25px]] – поле с информацией [[Help:UI manual#Использование фильтров|о примененных фильтрах]]: как назначенных [[Help:UI manual#Функции навигационной панели|в навигационной панели]], так и с помощью [[Help:UI manual#Настройка и использование пользовательских фильтров|пользовательских фильтров]] и запросов;&lt;br /&gt;
* &amp;lt;span id=&amp;quot;dwl_pdf&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;кнопка [[File:Icon download.png|x25px]] – выгрузка маркеров в файл формата .csv или .pdf: только для [[Help:UI manual#choice|выбранных]] или всех отображаемых маркеров, если ничего не выбрано. Отчет в формате .pdf может быть сгенерирован на основе HTML, так и существующим (нативным) способом. В PDF-отчете, сгенерированном на основе HTML, усовершенствованы стили, доработан титульный лист, актуализирован набор параметров для выгружаемых маркеров и пр.; &lt;br /&gt;
:{{Note|type=warn|text='''''Примечания:'''''&lt;br /&gt;
:* ''если в таблице не отображаются маркеры из-за примененных пользовательских фильтров, то в сгенерированном PDF-отчете будет указано «Нет маркеров (применены фильтры)»;''&lt;br /&gt;
:* ''для использования механизма генерации PDF-отчёта на основе HTML должна быть включена [[Help:UI manual#Настройка интерфейса|одноименная настройка]];''&lt;br /&gt;
:* ''генерация PDF-отчета на основе HTML может занимать больше времени, чем нативная генерация;''&lt;br /&gt;
:* ''спецсимволы (иконки), добавленные в комментариях к маркерам, не отображаются в выгруженном PDF-отчете.''}}&lt;br /&gt;
&lt;br /&gt;
* кнопка [[File:Icon edit.png|x25px]] – переход [[Help:UI manual#Групповая разметка маркеров|к групповой разметке]] выбранных маркеров (доступна, если выбраны маркеры в таблице);&lt;br /&gt;
* кнопка [[File:Button_Comment_Add.png|x25px]] – переход к [[Help:UI manual#Добавление общего комментария к нескольким маркерам|добавлению общего комментария к нескольким выбранным маркерам]].&lt;br /&gt;
&lt;br /&gt;
:[[File:26 Таблица маркеров.png|thumb|none|800px|Таблица маркеров с примененными фильтрами]]&lt;br /&gt;
&lt;br /&gt;
В таблице маркеров пользователю доступны следующие функции:&lt;br /&gt;
:1. Сортировка по значениям столбцов.&lt;br /&gt;
:2. &amp;lt;span id=&amp;quot;choice&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Выбор маркеров для [[Help:UI manual#dwl pdf|выгрузки отчета]], [[Help:UI manual#Групповая разметка маркеров|групповой разметки]] или [[Help:UI manual#Добавление общего комментария к нескольким маркерам|добавления общего комментария к нескольким маркерам]] – для этого установите флажок в строке маркера.&lt;br /&gt;
:3. Просмотр подробной информации о маркере [[Help:UI manual#Функции правой панели|в правой панели]] и его места и содержания [[Help:UI manual#Вкладка с исходным кодом|на вкладке с исходным кодом]] – для этого дважды кликните на строку маркера или нажмите на имя файла в столбце '''Файл'''. Также для выбора можно использовать клавиши ↑ и ↓ – для перемещения по строкам, и Enter – для подтверждения выбора.&lt;br /&gt;
:4. Просмотр детальной информации о маркере в JSON-формате – для этого нажмите правой кнопкой мыши на маркер и выберите пункт '''Просмотреть JSON'''.&lt;br /&gt;
:5. Копирование детальной информации о маркере (JSON маркера) в буфер обмена – для этого нажмите правой кнопкой мыши на маркер и выберите пункт '''Копировать JSON'''.&lt;br /&gt;
:При переходе по этой ссылке будет открываться список маркеров в режиме разметки с открытым маркером (в правой панели и на вкладке с исходным кодом), для которого была скопирована ссылка.&lt;br /&gt;
:6. Копирование ссылки на маркер в буфер обмена – для этого нажмите правой кнопкой мыши на маркер и выберите пункт '''Копировать ссылку на маркер'''.&lt;br /&gt;
:7. Переход к [[Help:UI manual#Сравнение маркеров|сравнению одного маркера с другим]] – для этого нажмите правой кнопкой мыши на маркер и выберите пункт '''Сравнить с ...'''&lt;br /&gt;
&lt;br /&gt;
=== Функции правой панели ===&lt;br /&gt;
Эта панель предоставляет подробную информацию о маркере и его [[Help:UI manual#Разметка маркера|разметке]]:&lt;br /&gt;
* статус [[Help:UI manual#Блокировка разметки|блокировки разметки]];&lt;br /&gt;
* статус [[Help:UI manual#Разметка маркера|разметки, его серьезность и требуемое действие]];&lt;br /&gt;
* автор последней разметки и прочее.&lt;br /&gt;
[[File:27 Правая панель.png|thumb|none|upright=4|Правая панель]]&lt;br /&gt;
&lt;br /&gt;
На правой панели пользователю доступны следующие функции:&lt;br /&gt;
:1. Копирование ссылки на маркер – для этого нажмите кнопку [[File:Icon copy link.png|x25px]].&lt;br /&gt;
:2. [[Help:UI manual#Блокировка разметки|Блокировка маркера]] для разметки другими пользователями – для этого нажмите кнопку [[File:icon_unlocked.png|x25px]] в верхней части правой панели.&lt;br /&gt;
:3. [[Help:UI manual#Разметка маркера|Разметка маркера]] – для этого установите '''Статус''', '''Серьезность''' и '''Действие''' в верхней части правой панели.&lt;br /&gt;
:4. Просмотр истории разметки со связанными комментариями – для этого нажмите кнопку [[File:Icon history.png|x25px]] в верхней части правой панели.&lt;br /&gt;
:[[File:28 История изменения маркера.png|thumb|none|upright=2.5|Пример истории изменения разметки маркера]]&lt;br /&gt;
&lt;br /&gt;
:5. Отображение маркера [[Help:UI manual#Вкладка с исходным кодом|на вкладке с исходным кодом]] нажмите кнопку с именем файла и номером строки в верхней части правой панели.&lt;br /&gt;
:6. Отображение элемента трассы [[Help:UI manual#Вкладка с исходным кодом|на вкладке с исходным кодом]] – для этого нажмите на ссылку с именем файла и номером строки на вкладке '''Трасса''' [1].&lt;br /&gt;
:7. Отображение кода, который соответствует строке трассы, в отдельном окне в режиме предпросмотра – для этого на вкладке '''Трасса''' нажмите кнопку [[File:Icon preview code.png|x25px]] рядом с именем файла и номером строки [2].&lt;br /&gt;
:[[File:31 Предпросмотр кода.png|thumb|none|upright=2.5|Элементы управления для работы с элементом трассы]]&lt;br /&gt;
:8. Просмотр и добавление комментариев к маркеру на вкладке '''Комментарии'''. &lt;br /&gt;
:Комментарии для каждого маркера уникальны. Добавление одинаковых комментариев недоступно.&lt;br /&gt;
:Редактор комментариев поддерживает синтаксис Markdown.&lt;br /&gt;
:Для упоминания пользователя, вставьте '''@''' и введите или выберите его логин. После добавления комментария по нажатии кнопки '''Применить''' указанному пользователю придет [[Help:UI manual#Просмотр уведомлений в интерфейсе Системы|уведомление в интерфейсе системы]] об упоминании с возможностью перехода к маркеру с этим комментарием.&lt;br /&gt;
:9. Редактирование и удаление комментариев на вкладке '''Комментарии''' с помощью кнопок [[File:Icon edit2.png|x25px]] и [[File:Icon delete.png|x25px]]. &lt;br /&gt;
:Если [[Help:UI manual#Работа с проектами|для проекта]] установлен флажок '''Обязательный комментарий при разметке''', то удаление связанного с разметкой комментария недоступно. Его можно только отредактировать.&lt;br /&gt;
:[[File:32 Комментарии.png|thumb|none|upright=1.3|Вкладка '''Комментарии''']]&lt;br /&gt;
:{{Note|type=info|text='''''Примечания''':'' &lt;br /&gt;
:*  ''Пользователь может отредактировать и удалить только свои комментарии. Пользователю с доступом '''Изменение любых комментариев''' доступно редактирование и удаление комментариев всех пользователей. Если такой пользователь внёс изменения, то изначальный автор теряет возможность изменять свой комментарий (если у него нет доступа '''Изменение любых комментариев'''), так как авторство передаётся пользователю, который последним внёс изменения.'' &lt;br /&gt;
:* ''Для отредактированного комментария отображается слово '''изменено''', при наведении курсора на которое отображается сообщение с логином пользователя, изменившего комментарий, и датой редактирования. Текст несохраненного комментария в поле добавления комментария не пропадает при переключении на другой маркер.'' &lt;br /&gt;
:* ''Если открыт режим редактирования комментария, то при переключении на другой маркер режим редактирования закрывается и изменения не сохраняются.''}}&lt;br /&gt;
:10. Ввод, просмотр и редактирования комментария в отдельном диалоговом окне – для этого нажмите кнопку [[File:Button Comment Zoom.png|x25px]] рядом с полем ввода нового комментария или в поле существующего комментария.&lt;br /&gt;
:[[File:120 Окно создания, просмотра и редактирования комментария в отдельном диалоговом окне.png|thumb|none|upright=2|Окно создания, просмотра и редактирования комментария в отдельном диалоговом окне]]&lt;br /&gt;
:11. Просмотр подробной информации на вкладке '''Подробности'''. Содержит два блока: &lt;br /&gt;
:* информация о сработавшем детекторе: серьезность и надежность, а также связанные с ним коды CWE, которые содержат ссылки на описание дефектов безопасности на сайте [https://cwe.mitre.org cwe.mitre.org];&lt;br /&gt;
:* информацией о маркере: текстовые метки маркера, названия снимка и функции, инструмент, язык, текстовое описание и степень доверия, а также кнопки для перехода к просмотру истории маркера и запуску хуков.&lt;br /&gt;
::{{Note|type=info|text=''Svace, начиная с версии 4.0, для некоторых языков поставляется с моделью искусственного интеллекта, которая предсказывает истинность срабатывания маркера на основе предупреждений и собранных метрик. Это значение в Svacer отображается в параметре '''Степень доверия'''.''}}&lt;br /&gt;
::По нажатии на иконку [[File:icon_question_mark2.png|x25px]] справа от названия детектора отображается дополнительная информация о нём. Иконка не отображается, если дополнительная информация отсутствует.&lt;br /&gt;
:[[File:33 Подробная информация о маркере.png|thumb|none|upright=2|Вкладка '''Подробности''']]&lt;br /&gt;
:[[File:121 Окно с дополнительной информацией о детекторе.png|thumb|none|upright=2|Окно с дополнительной информацией о детекторе]]&lt;br /&gt;
&lt;br /&gt;
:12. Просмотр истории обнаружения маркера в снимках данной ветки проекта – для этого на вкладке '''Подробности''' нажмите кнопку '''Показать''' в блоке информации о маркере в строке '''История'''.&lt;br /&gt;
:В окне просмотра истории доступна сортировка записей.&lt;br /&gt;
:[[File:35 История маркера.png|thumb|none|upright=2.5|Пример истории маркера]]&lt;br /&gt;
:13. Просмотр маркера в JSON-формате – для этого на вкладке '''Подробности''' нажмите кнопку '''Показать''' в блоке '''JSON'''.&lt;br /&gt;
:[[File:234 Пример JSON маркера.png|thumb|none|upright=2|Пример JSON маркера]]&lt;br /&gt;
:14. Запуск хуков (скриптов) – для этого нажмите кнопку '''Запустить''' на вкладке '''Подробности''' и в раскрывающемся списке доступных хуков выберите тот, который требуется запустить.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Использование фильтров ===&lt;br /&gt;
==== Общая информация ====&lt;br /&gt;
Настройка и использование фильтров доступны [[Help:UI manual#Работа в режиме разметки|в режиме разметки]].&lt;br /&gt;
&lt;br /&gt;
Существует пять видов фильтров:&lt;br /&gt;
&lt;br /&gt;
# Фильтры [[Help:UI manual#Функции навигационной панели|навигационной панели]] [1]: детекторы, файлы или серьезность.&lt;br /&gt;
# Доступные для разметки – позволяют отобразить только маркеры, которые доступны пользователю для разметки, т. е. при использовании этого фильтра в списке не будут отображаться маркеры, заблокированные другими пользователями. Фильтр применяется по нажатии кнопки [[File:Icon view2.png|x25px]] [2] в правой части блока [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выбора проекта, ветки и снимка]].&lt;br /&gt;
# Размеченный – позволяют отобразить только размеченные маркеры. Фильтр применяется по нажатии кнопки [[File:Icon view.png|x25px]] [3] в правой части блока [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выбора проекта, ветки и снимка]].&lt;br /&gt;
# [[Help:UI manual#Настройка и использование пользовательских фильтров|Пользовательские фильтры]] – доступны по нажатии кнопки [[File:Button Фильтры.png|x25px]] [4] в правой части блока [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выбора проекта, ветки и снимка]].&lt;br /&gt;
# Запрос – фильтр, указанный в поле в верхней части [[Help:UI manual#Таблица маркеров|таблицы маркеров]] [5].&lt;br /&gt;
 &lt;br /&gt;
:[[File:36 Фильтры.png|thumb|none|upright=3|Существующие фильтры]]&lt;br /&gt;
&lt;br /&gt;
Увидеть примененные фильтры (кроме '''Доступные для разметки''') и последовательность их применения можно в поле [[File:field Детектор.png|x25px]] в верхней части [[Help:UI manual#Таблица маркеров|таблицы маркеров]].&lt;br /&gt;
&lt;br /&gt;
Все виды фильтров можно использовать одновременно, но при определенном порядке применения фильтры могут быть сброшены:&lt;br /&gt;
* запрос сбрасывается после применения любого другого фильтра;&lt;br /&gt;
* фильтры [[Help:UI manual#Функции навигационной панели|навигационной панели]] сбрасываются после применения [[Help:UI manual#Настройка и использование пользовательских фильтров|пользовательских фильтров]] и других фильтров [[Help:UI manual#Функции навигационной панели|на навигационной панели]];&lt;br /&gt;
* [[Help:UI manual#Настройка и использование пользовательских фильтров|пользовательские фильтры]] и фильтры [[Help:UI manual#Функции навигационной панели|навигационной панели]] не сбрасываются при применении фильтра '''Размеченный''';&lt;br /&gt;
* при переключении на другой [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|проект, ветку или снимок]] примененные фильтры '''Размеченный''' и  [[Help:UI manual#Настройка и использование пользовательских фильтров|'''Пользовательский''']] не сбрасываются и применяются к выбранному снимку.&lt;br /&gt;
&lt;br /&gt;
По нажатию кнопки [[File:Button Фильтры 2.png|x25px]] в правой части блока [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выбора контекста]] можно отменить примененные фильтры: пользовательский или все.&lt;br /&gt;
&lt;br /&gt;
==== Настройка и использование пользовательских фильтров ====&lt;br /&gt;
Настроить пользовательские фильтры можно [[Help:UI manual#Работа в режиме разметки|в режиме разметки]]. Для этого:&lt;br /&gt;
:1. Нажмите кнопку [[file:button Фильтры.png|x25px]] в правой части блока [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выбора контекста]]. &lt;br /&gt;
:В правой части экрана отобразится панель пользовательских фильтров, которая содержит три вкладки:&lt;br /&gt;
:* '''Пользовательский''' – параметры фильтрации, которые разделены на три группы:&lt;br /&gt;
::* параметры детекторов;&lt;br /&gt;
::* параметры маркеров;&lt;br /&gt;
::* файлы;&lt;br /&gt;
::* [[Afilters|расширенный фильтр]];&lt;br /&gt;
:* '''Сохраненные''' – список [[Help:UI manual#Работа с сохраненными фильтрами|сохраненных фильтров]];&lt;br /&gt;
:* '''Публичные''' – [[Help:UI manual#Работа с публичными фильтрами|список фильтров, доступных всем пользователям]].&lt;br /&gt;
&lt;br /&gt;
:2. Настройте параметры фильтрации на вкладке '''Пользовательский''' – выберите значения в списках полей, нажмите кнопки со значениями, или введите значения.&lt;br /&gt;
:3. Нажмите на кнопку [[File:Icon cancel.png|x15px]] справа от значения в списке, чтобы отменить его выбор.&lt;br /&gt;
:4. Если параметры нужно исключить из поиска, нажмите на кнопку [[File:Icon plus 2.png|x25px]]. &lt;br /&gt;
:Кнопка поменяется на [[File:Icon minus 3.png|x25px]].&lt;br /&gt;
:5. Если параметры нужно включить в поиск, нажмите на кнопку [[File:Icon minus 3.png|x25px]]. &lt;br /&gt;
:Кнопка поменяется на [[File:Icon plus 2.png|x25px]].&lt;br /&gt;
:6. Если в полях '''Метки''', '''Функции''' и '''Файлы''' нужно использовать регулярные выражения:&lt;br /&gt;
::а) Нажмите на кнопку [[File:Button TextTempl.png|x25px]].&lt;br /&gt;
::Кнопка поменяется на [[File:Button Reg.png|x25px]].&lt;br /&gt;
::б) Введите [[Help:UI manual#Использование регулярных выражений|регулярные выражения]]. Используйте новую строку для разделения значений.  &lt;br /&gt;
:7. Если в полях '''Метки''', '''Функции''' и '''Файлы''' нужно использовать текстовые шаблоны:&lt;br /&gt;
::а) Нажмите на кнопку [[File:Button Reg.png|x25px]].&lt;br /&gt;
::Кнопка поменяется на [[File:Button TextTempl.png|x25px]].&lt;br /&gt;
::б) Введите текстовые шаблоны. Используйте новую строку для разделения значений.  &lt;br /&gt;
:8. Для создания сложного фильтра с поиском по предикатам задайте в поле '''Расширенный фильтр''' параметры в формате &amp;lt;code&amp;gt;filter(markers, &amp;lt;predicate expr&amp;gt;)&amp;lt;/code&amp;gt;, где:&lt;br /&gt;
::* &amp;lt;code&amp;gt;filter ()&amp;lt;/code&amp;gt; – функция, которая фильтрует список по предикату;&lt;br /&gt;
::* &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt; – объект, который содержит массив маркеров из контекста;&lt;br /&gt;
::* &amp;lt;code&amp;gt;&amp;lt;predicate expr&amp;gt;&amp;lt;/code&amp;gt; – выражение, которое определяет предикат.&lt;br /&gt;
::Описание используемых в этом фильтре функций, объектов и выражений, а также языка предикатов доступно по нажатии на иконку [[File:Icon question mark2.png|x25px]] и в [[Afilters|статье документации]].&lt;br /&gt;
:9. Нажмите кнопку [[File:Button Очистить.png|x25px]], чтобы очистить все параметры фильтрации.&lt;br /&gt;
:10. &amp;lt;span id=&amp;quot;filters_saved&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Нажмите кнопку [[File:Button Сохранить как.png|x25px]], в открывшемся диалоге введите название и нажмите кнопку '''Сохранить'''.&lt;br /&gt;
:Фильтр сохранится и отобразится на [[Help:UI manual#Работа с сохраненными фильтрами|вкладке '''Сохраненные''']].&lt;br /&gt;
:11. Нажмите кнопку [[File:Button Применить.png|x25px]], чтобы применить фильтр. &lt;br /&gt;
:После применения кнопка фильтра станет зеленой, а ее название поменяется на название сохраненного фильтра.&lt;br /&gt;
::[[File:36 Пользовательские фильтры.png|thumb|none|upright=2|Пользовательские фильтры. Вкладка '''Пользовательский''']]&lt;br /&gt;
&lt;br /&gt;
==== Работа с сохраненными фильтрами ====&lt;br /&gt;
На вкладке '''Сохраненные''' отображаются фильтры, [[Help:UI manual#filters saved|сохраненные на вкладке '''Пользовательский''']], а также [[Help:UI manual#filters published|скопированные с вкладки '''Публичные''']].&lt;br /&gt;
:[[File:37 Фильтры сохраненные.png|thumb|none|upright=2|Пользовательские фильтры. Вкладка '''Сохраненные''']]&lt;br /&gt;
&lt;br /&gt;
Воспользуйтесь функциями управления фильтрами на вкладке '''Сохраненные''':&lt;br /&gt;
:1. Для поиска фильтра введите его название в строке поиска.&lt;br /&gt;
:2. Для сортировки фильтров по названию нажмите кнопку [[File:Button Sort.png|x25px]].&lt;br /&gt;
:3. Для редактирования сохраненного фильтра нажмите кнопку [[File:Icon edit3.png|x25px]] и [[Help:UI manual#Настройка и использование пользовательских фильтров|внесите изменения]].&lt;br /&gt;
:4. Создайте дубликат фильтра – нажмите кнопку [[File:Icon duplicate.png|x25px]].&lt;br /&gt;
:5. &amp;lt;span id=&amp;quot;filters_publishing&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Для публикации фильтра нажмите кнопку [[File:Button share.png|x25px]].&lt;br /&gt;
:Копия сохраненного фильтра отобразится [[Help:UI manual#Работа с публичными фильтрами|на вкладке '''Публичные''']]  и станет доступна другим пользователям.&lt;br /&gt;
:{{Note|type=warn|text=''Функция доступна только пользователям с [[#Серверные доступы|серверным доступом]] '''Управление публичными фильтрами'''''.}}&lt;br /&gt;
:6. Для удаления одного фильтра нажмите кнопку [[File:Icon delete 2.png|x25px]].&lt;br /&gt;
:7. Для удаления нескольких фильтров:&lt;br /&gt;
::а) Выберите фильтры для удаления – установите флажки в левой части названий фильтров или нажмите кнопку '''Выбрать всё'''.&lt;br /&gt;
::б) Нажмите кнопку '''Удалить'''.&lt;br /&gt;
:8. Примените фильтр – нажмите на его название и нажмите кнопку [[File:Button Применить.png|x25px]].&lt;br /&gt;
&lt;br /&gt;
После применения:&lt;br /&gt;
* примененный фильтр будет отмечен [[File:Icon check.png|x25px]];&lt;br /&gt;
* кнопка фильтра станет зеленой, а ее название поменяется на название сохраненного фильтра.&lt;br /&gt;
&lt;br /&gt;
==== Работа с публичными фильтрами ====&lt;br /&gt;
{{Note|type=warn|text=''Создание (публикация), изменение и удаление публичных фильтров доступны пользователям с [[#Серверные доступы|серверным доступом]] '''Управление публичными фильтрами'''''.}}&lt;br /&gt;
&lt;br /&gt;
На вкладке '''Публичные''' отображаются фильтры, [[Help:UI manual#filters publishing|опубликованные на вкладке  '''Сохраненные''']].&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot; heights=&amp;quot;300px&amp;quot; style=&amp;quot;float:left; clear:right; margin-right:1em; margin-left:1em&amp;quot;&amp;gt;&lt;br /&gt;
  153 Пользовательские фильтры. Публичные без доступа.png|Пользовательские фильтры. Вкладка '''Публичные'''. &amp;lt;/br&amp;gt;Вид для пользователя без серверного доступа &amp;lt;/br&amp;gt;'''Управление публичными фильтрами'''&lt;br /&gt;
  154 Пользовательские фильтры. Публичные с доступом.png|Пользовательские фильтры. Вкладка '''Публичные'''. &amp;lt;/br&amp;gt;Вид для пользователя с серверным доступом &amp;lt;/br&amp;gt;'''Управление публичными фильтрами'''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
Воспользуйтесь функциями управления фильтрами на вкладке '''Публичные''':&lt;br /&gt;
:1. Для поиска фильтра введите его название в строке поиска.&lt;br /&gt;
:2. Для сортировки фильтров по названию нажмите кнопку [[File:Button Sort.png|x25px]].&lt;br /&gt;
:3. Чтобы посмотреть параметры фильтра, нажмите кнопку [[File:Button show.png|x25px]].&lt;br /&gt;
:{{Note|type=warn|text=''Функция доступна только пользователям БЕЗ [[#Серверные доступы|серверного доступа]] '''Управление публичными фильтрами.'''''}}&lt;br /&gt;
:4. Для редактирования публичного фильтра нажмите кнопку [[File:Icon edit3.png|x25px]] и [[Help:UI manual#Настройка и использование пользовательских фильтров|внесите изменения]].&lt;br /&gt;
:5. &amp;lt;span id=&amp;quot;filters_published&amp;quot;&amp;gt;Скопируйте публичный фильтр – нажмите кнопку [[File:Icon duplicate.png|x25px]].&amp;lt;/span&amp;gt;&lt;br /&gt;
:Фильтр сохранится и отобразится [[Help:UI manual#Работа с сохраненными фильтрами|на вкладке '''Сохраненные''']].&lt;br /&gt;
:6. Для удаления одного фильтра нажмите кнопку [[File:Icon delete 2.png|x25px]].&lt;br /&gt;
:7. Для удаления нескольких фильтров:&lt;br /&gt;
::а) Выберите фильтры для удаления – установите флажки в левой части названий фильтров или нажмите кнопку '''Выбрать всё'''.&lt;br /&gt;
::б) Нажмите кнопку '''Удалить'''.&lt;br /&gt;
:8. Примените фильтр – нажмите на его название и нажмите кнопку [[File:Button Применить.png|x25px]].&lt;br /&gt;
&lt;br /&gt;
После применения:&lt;br /&gt;
* примененный фильтр будет отмечен [[File:Icon check.png|x25px]];&lt;br /&gt;
* кнопка фильтра станет зеленой, а ее название поменяется на название сохраненного фильтра.&lt;br /&gt;
&lt;br /&gt;
=== Сравнение снимков и маркеров ===&lt;br /&gt;
Чтобы сравнить снимки и маркеры в них:&lt;br /&gt;
:1. [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|Выберите исходный контекст]] – проект, ветку, снимок.&lt;br /&gt;
:2. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] нажмите кнопку [[File:Button Сравнить с.png|x25px]] и в раскрывшемся списке выберите пункт '''Сравнить с…'''.&lt;br /&gt;
:3. В открывшемся окне выберите проект, ветку и снимок для сравнения; нажмите кнопку [[File:Button Применить.png|x25px]].&lt;br /&gt;
:[[File:38 Выбор снимка для сравнения.png|thumb|none|upright=1.5|Выбор проекта, ветки и снимка для сравнения]]&lt;br /&gt;
:Результат сравнения отобразится [[Help:UI manual#Функции навигационной панели|в навигационной панели]] и [[Help:UI manual#Функции центральной панели|центральной панели]], причем:&lt;br /&gt;
:* вкладка '''Информация о снимке''' поменяется на вкладку '''Информация о различиях''' с информацией о двух сравниваемых снимках;&lt;br /&gt;
:* применится первый режим сравнения, в котором найдены результаты.&lt;br /&gt;
:4. Выберите режим сравнения.&lt;br /&gt;
:[[File:39 Выбор режима сравнения.png|800px|thumb|none|Выбор режима сравнения]]&lt;br /&gt;
:[[Help:UI manual#Функции навигационной панели|В навигационной панели]] и [[Help:UI manual#Функции центральной панели|центральной панели]] отобразятся только результаты выбранного режима сравнения. В режимах '''Сопоставленные''' и '''Одинаковые''' [[Help:UI manual#Таблица маркеров|в таблице маркеров]] добавится столбец с номером версии: V1 – маркер в файле текущего снимка, V2 – маркер в файле целевого снимка.&lt;br /&gt;
:{{Note|type=info|text=''Если при просмотре кода файла целевого снимка перейти к просмотру файла [[Help:UI manual#Работа в режиме просмотра кода|в режиме '''Код''']] (команда '''Открыть в режиме код'''), то режим сравнения закроется, отобразится контекст целевого снимка.''}}&lt;br /&gt;
&amp;lt;gallery heights=&amp;quot;210&amp;quot; perrow=&amp;quot;2&amp;quot; mode=&amp;quot;packed&amp;quot; style=&amp;quot;float:left; clear:right; margin-right:1em; margin-left:2em&amp;quot; &amp;quot;=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
File:40 Пример сравнения новые.png|Пример результатов сравнения в режиме '''Только в V1'''&lt;br /&gt;
File:41 Пример сравнения Отсутствующие.png|Пример результатов сравнения в режиме '''Только в V2'''&lt;br /&gt;
File:42 Пример сравнения Сопоставленные.png|Пример результатов сравнения в режиме '''Сопоставленные'''&lt;br /&gt;
File:43 Пример сравнения Одинаковые.png|Пример результатов сравнения в режиме '''Одинаковые'''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
:5. Посмотрите различия в параметрах анализа – нажмите кнопку '''Показать различия''' на вкладке '''Информация о различиях'''.&lt;br /&gt;
:[[File:44 Различия в результатах анализа.png|600px|thumb|none|Сравнение настроек анализа]]&lt;br /&gt;
:6. Посмотрите различия в статистике разметки – нажмите кнопку '''Различия разметок'''.&lt;br /&gt;
:[[File:45 Различия в статистике по детекторам.png|thumb|none|600px|Сравнение статистики разметок]]&lt;br /&gt;
:7. Нажмите кнопку [[File:Icon download CSV.png|x25px]] или [[File:Icon download PDF.png|x25px]], чтобы скачать статистику в формате CSV или PDF.&lt;br /&gt;
:8. Отмените сравнение – нажмите кнопку [[File:Icon cancel 2.png|x25px]] в блоке выбора проекта, ветки и снимка.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сопоставление маркеров ===&lt;br /&gt;
{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектным доступом]] '''Разметка маркеров''' и [[#Серверные доступы|серверным доступом]] '''Администрирование сервера'''''}}&lt;br /&gt;
&lt;br /&gt;
Если при импорте снимка в ветку проекта не все маркеры были автоматически сопоставлены (сформированы инварианты), то такие маркеры можно сопоставить вручную. При сопоставлении маркеров с разметкой, инварианту присваивается разметка маркера из последнего импортированного снимка.&lt;br /&gt;
&lt;br /&gt;
Результат сопоставления, выполненного вручную, можно отменить.&lt;br /&gt;
==== Сопоставление маркеров вручную ====&lt;br /&gt;
Сопоставление маркеров вручную проводится в два этапа:&lt;br /&gt;
:а)	Выбор пар маркеров и их сопоставление, без сохранения в БД.&lt;br /&gt;
:б)	Просмотр выбранных пар и подтверждение операции.&lt;br /&gt;
&lt;br /&gt;
Чтобы вручную сопоставить маркеры:&lt;br /&gt;
:1. [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|Выберите исходный контекст]].&lt;br /&gt;
:2. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] нажмите кнопку [[File:Button Сравнить с.png|x25px]] и в раскрывшемся списке выберите пункт '''Сопоставить маркеры'''.&lt;br /&gt;
:Откроется окно '''Сопоставить маркеры'''.&lt;br /&gt;
&lt;br /&gt;
:3. &amp;lt;span id=&amp;quot;MarksStep1&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Этап 1. На вкладке '''Сопоставление маркеров''':&lt;br /&gt;
::а) Выберите снимок, маркеры которого нужно сопоставить с исходным.&lt;br /&gt;
::Отобразятся две таблицы маркеров: слева – для исходного снимка, а справа – для выбранного.&lt;br /&gt;
::б) Чтобы перед сопоставлением сравнить маркеры, выберите маркеры – по одному в каждой таблице – и нажмите кнопку '''Сравнить''' (расположена над таблицей).    &lt;br /&gt;
::Отобразится окно сравнения выбранных маркеров.&lt;br /&gt;
::Если требуется, повторите операцию для других пар маркеров.&lt;br /&gt;
::в) Выберите маркеры для сопоставления – по одному в каждой таблице – и нажмите кнопку '''Сопоставить''' (расположена над таблицей). Если требуется, повторите операцию для других пар маркеров. &lt;br /&gt;
::Для сопоставленных маркеров справа от названия будет отображаться номер сопоставленной пары.&lt;br /&gt;
::г) Для отмены сопоставления пары маркеров выберите любой сопоставленный маркер и нажмите '''Отменить сопоставление''' (расположена над таблицей). Если требуется, повторите операцию для других пар маркеров.&lt;br /&gt;
::д) Для просмотра фрагмента кода, в котором находится маркер – нажмите кнопку [[File:icon_preview_code.png|x25px]].&lt;br /&gt;
::е) Для отказа от дальнейшего сопоставления и отмены всех изменений нажмите кнопку '''Отмена'''.&lt;br /&gt;
::ж) Для перехода к подтверждению выбора нажмите кнопку '''Далее'''.&lt;br /&gt;
 &lt;br /&gt;
:[[File:122 Выбор снимка и сопоставление пар маркеров.png|800px|thumb|none|Окно '''Сопоставить маркеры'''. Выбор снимка и сопоставление пар маркеров]]&lt;br /&gt;
:[[File:48 Различия исходного кода.png|800px|thumb|none|Окно '''Сравнение маркеров''']]&lt;br /&gt;
&lt;br /&gt;
:4. Этап 2. В открывшейся форме:&lt;br /&gt;
::а) Проверьте список сопоставленных пар маркеров для применения операций сопоставления.&lt;br /&gt;
::б) Для корректировки списка сопоставленных пар маркеров нажмите кнопку '''Назад''' и выполните операции [[Help:UI manual#MarksStep1|Этапа 1]].&lt;br /&gt;
::в) Для отказа от дальнейшего сопоставления и отмены всех изменений нажмите кнопку '''Отмена'''.&lt;br /&gt;
::г) Для запуска операции сопоставления нажмите кнопку '''Подтвердить'''.&lt;br /&gt;
 &lt;br /&gt;
:[[File:123 Подтверждение сопоставления.png|800px|thumb|none|Окно «Сопоставить маркеры». Подтверждение сопоставления]]&lt;br /&gt;
&lt;br /&gt;
:По окончании операции для данной ветки проекта будет изменена конфигурация инвариантов. Всем пользователям, у которых открыт данный контекст, отобразится сообщение:&lt;br /&gt;
 &lt;br /&gt;
:[[File:124 Сообщение об окончании сопоставления отмены.png|800px|thumb|none|Сообщение об окончании операции сопоставления]]&lt;br /&gt;
:{{Note|type=info|text=''При сопоставлении метки маркеров удаляются.''}}&lt;br /&gt;
&lt;br /&gt;
==== Отмена операций сопоставления ====&lt;br /&gt;
Отмена операций ручного сопоставления маркеров проводится в два этапа:&lt;br /&gt;
:а) Выбор операций ручного сопоставления для отмены (отката).&lt;br /&gt;
:б) Просмотр списка всех операций, которые будут отменены, и подтверждение отмены операций сопоставления. &lt;br /&gt;
&lt;br /&gt;
Чтобы отменить (откатить) операции сопоставления:&lt;br /&gt;
:1. [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|Выберите исходный контекст]].&lt;br /&gt;
:2. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] нажмите кнопку [[File:Button Сравнить с.png|x25px]] и в раскрывшемся списке выберите пункт '''Сопоставить маркеры'''.&lt;br /&gt;
:Откроется окно '''Сопоставить маркеры'''.&lt;br /&gt;
:3. Этап 1. На вкладке '''Отмена операций сопоставления''':&lt;br /&gt;
::а) Выберите операции сопоставления маркеров, которые нужно отменить.&lt;br /&gt;
::В списке отображаются операции ручного сопоставления маркеров в исходной ветке проекта.&lt;br /&gt;
::б) Для отказа от продолжения операции нажмите кнопку '''Отмена'''.&lt;br /&gt;
::в) Для перехода к подтверждению выбора нажмите кнопку '''Далее'''.&lt;br /&gt;
 &lt;br /&gt;
:[[File:125 Выбор маркеров для отмены сопоставления.png|800px|thumb|none|Окно «Сопоставить маркеры». Выбор операций сопоставления маркеров для отмены]]&lt;br /&gt;
&lt;br /&gt;
:4. Этап 2. В открывшейся форме:&lt;br /&gt;
::а) Проверьте список операций сопоставления, которые будут отменены. Список операций, помимо выбранных пользователем операций сопоставления, может дополнительно включать другие связанные операции, которые также будут отменены.&lt;br /&gt;
::б) Для корректировки выбранных операций сопоставления маркеров  нажмите кнопку '''Назад''' и измените выбор маркеров.&lt;br /&gt;
::в) Для отказа от продолжения операции нажмите кнопку '''Отмена'''.&lt;br /&gt;
::г) Для запуска операции отмены сопоставления маркеров нажмите кнопку '''Подтвердить'''.&lt;br /&gt;
 &lt;br /&gt;
:[[File:126 Подтверждение отмены сопоставления.png|800px|thumb|none|Окно «Сопоставить маркеры». Подтверждение отмены операций сопоставления]]&lt;br /&gt;
&lt;br /&gt;
:По окончании операции для данной ветки проекта будет изменена конфигурация инвариантов. Всем пользователям, у которых открыт данный контекст, отобразится сообщение:&lt;br /&gt;
 &lt;br /&gt;
:[[File:124 Сообщение об окончании сопоставления отмены.png|800px|thumb|none|Сообщение об окончании операции отмены сопоставления]]&lt;br /&gt;
:{{Note|type=info|text=''При отмене операции сопоставления метки маркеров удаляются.''}}&lt;br /&gt;
&lt;br /&gt;
=== Сравнение маркеров ===&lt;br /&gt;
Чтобы сравнить два маркера:&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходный контекст]].&lt;br /&gt;
:2. Раскройте [[Help:UI manual#Таблица маркеров|таблицу маркеров]].&lt;br /&gt;
:3. Нажмите правой кнопкой мыши на строке маркера и выберите пункт '''Сравнить с ...''' &lt;br /&gt;
:[[File:155 Переход к сравнению маркеров.png|thumb|none|upright=2|Переход к сравнению маркеров]]&lt;br /&gt;
:Откроется окно выбора маркера для сравнения.&lt;br /&gt;
:[[File:46 Выбор маркера для сравнения.png|thumb|none|upright=3|Окно выбора маркера для сравнения]]&lt;br /&gt;
:{{Note|type=info|text=''При сравнении снимков для режимов '''Сопоставленные''' и '''Одинаковые''' в таблице маркеров по клику правой кнопкой мыши на строке маркера доступен пункт '''Сравнение с другой версией'''. При выборе данной команды происходит сравнение маркера с его версией из сравниваемого снимка.''}}&lt;br /&gt;
:4. Выберите проект, ветку и снимок. &lt;br /&gt;
:Отобразится список маркеров в выбранном снимке, где можно ввести запрос для поиска маркеров.&lt;br /&gt;
:[[File:47 Результат сравнения маркеров.png|thumb|none|upright=3|Выбор маркера для сравнения]]&lt;br /&gt;
:5. Дважды кликните на  строке маркера или нажмите кнопку '''Сравнить''', чтобы перейти в окно сравнения маркеров.&lt;br /&gt;
:[[File:48 Различия исходного кода.png|thumb|none|upright=3|Окно сравнения маркеров]]&lt;br /&gt;
&lt;br /&gt;
=== Разметка маркера ===&lt;br /&gt;
Разметка маркера заключается в установке статуса, а также, опционально, серьезности (критичности) и требуемого действия.&lt;br /&gt;
Установка серьезности и действия доступны только после установки статуса.&lt;br /&gt;
Разметить маркер можно [[Help:UI manual#Работа в режиме разметки|в режиме разметки]].&lt;br /&gt;
==== Разметка маркера вручную ====&lt;br /&gt;
Вручную маркер можно разметить тремя способами:&lt;br /&gt;
:1. &amp;lt;span id=&amp;quot;Marking1&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;'''''Способ 1'''''. С помощью кнопок в верхней части [[Help:UI manual#Функции правой панели|правой панели]].&lt;br /&gt;
:2. &amp;lt;span id=&amp;quot;Marking2&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;'''''Способ 2'''''. С помощью кнопок в виджете маркера [[Help:UI manual#Вкладка с исходным кодом|на вкладке с исходным кодом]].&lt;br /&gt;
:Если [[Help:UI manual#Работа с проектами|для проекта]] установлен флаг '''Обязательный комментарий при разметке''', то при разметке с помощью способов [[Help:UI manual#Marking1|1]] и [[Help:UI manual#Marking2|2]] откроется [[Help:UI manual#Marking3|окно разметки]], в котором обязательно нужно ввести комментарий.&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot; heights=&amp;quot;180px&amp;quot; style=&amp;quot;float:left; clear:right; margin-right:1em; margin-left:0&amp;quot;&amp;gt;&lt;br /&gt;
  49 Разметка Статус.png|Выбор статуса разметки маркера&lt;br /&gt;
  50 Разметка Серьезность.png|Выбор серьезности разметки маркера&lt;br /&gt;
  51 Разметка Действие.png|Выбор действия разметки маркера&lt;br /&gt;
  127 Кнопки разметки в виджете маркера.png|Кнопки разметки в виджете маркера на вкладке с исходным кодом&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
:3. '''''Способ 3'''''. В отдельном окне разметки вручную. Для этого:&lt;br /&gt;
::а) Нажмите кнопку [[File:Icon edit.png|x25px]] в верхней части правой панели или в виджете маркера на вкладке с исходным кодом.&lt;br /&gt;
::Откроется &amp;lt;span id=&amp;quot;Marking3&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; окно '''Разметка'''.&lt;br /&gt;
::&amp;lt;gallery heights=&amp;quot;200&amp;quot; perrow=&amp;quot;2&amp;quot; mode=&amp;quot;packed&amp;quot; style=&amp;quot;float:left; clear:right;&amp;quot;&amp;gt;&lt;br /&gt;
  235 Окно Разметка.png|Окно «Разметка» &lt;br /&gt;
  File:99 Окно разметки.png|Окно разметки. Поле '''Комментарий''' – обязательное&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
::б) Выберите статус, а также, опционально, серьезность (критичность) и требуемое действие.&lt;br /&gt;
::в) Введите комментарий.&lt;br /&gt;
::Если [[Help:UI manual#Работа с проектами|для проекта]] установлен флаг '''Обязательный комментарий при разметке''', то добавление комментария обязательно.&lt;br /&gt;
::Редактор комментариев поддерживает синтаксис Markdown.&lt;br /&gt;
::Для упоминания пользователя, вставьте '''@''' и введите или выберите его логин. После добавления комментария по нажатии кнопки '''Применить''' указанному пользователю придет [[Help:UI manual#Просмотр уведомлений в интерфейсе Системы|уведомление в интерфейсе системы]] об упоминании с возможностью перехода к маркеру с этим комментарием.&lt;br /&gt;
::г) Нажмите кнопку '''Применить'''.&lt;br /&gt;
&lt;br /&gt;
Результаты разметки со связанными комментариями отображаются [[Help:UI manual#Функции правой панели|в правой панели]] на вкладке '''Комментарии'''. При этом можно поменять текст комментария, но не результат разметки. Для её изменения нужно заново установить статус, серьезность и действие.&lt;br /&gt;
:[[File:100 Правая панель Комментарии с разметкой.png|300px|thumb|none|Правая панель. Комментарии, добавленные при разметке]]&lt;br /&gt;
&lt;br /&gt;
==== Разметка маркера с помощью ассистента AI ====&lt;br /&gt;
{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектными доступами]] '''Разметка маркеров''' и '''Импорт разметки'''.&amp;lt;br /&amp;gt;Ассистент AI должен быть [[Help:XSvacer:AIAssistant|включен и настроен]].''}}&lt;br /&gt;
Чтобы разметить маркер с помощью ассистента AI:&lt;br /&gt;
:1. Нажмите кнопку [[File:Icon edit.png|x25px]] в верхней части правой панели или в виджете маркера на вкладке с исходным кодом.&lt;br /&gt;
Откроется окно '''Разметка'''.&lt;br /&gt;
:2. Смените режим разметки с помощью переключателя '''Режим разметки с помощью AI'''.&lt;br /&gt;
:3. В отобразившемся режиме разметки выберите '''Модель AI''', с помощью которой ассистент AI рассчитает статус разметки.&lt;br /&gt;
:Спрогнозированный статус и уровень доверия прогнозу отобразятся в этом же окне. Если модель AI не смогла предсказать статус разметки, то отобразится значение '''n/a''' и кнопка '''Применить''' будет неактивна.&lt;br /&gt;
:Если маркер уже размечен и его статус совпадает с прогнозным, то в окне отобразится сообщение об этом и дальнейшая разметка станет недоступна.&lt;br /&gt;
:[[File:236 Окно Разметка AI.png|400px|thumb|none|Окно «Разметка». Режим разметки с помощью ассистента AI]]&lt;br /&gt;
:4. Введите комментарий.&lt;br /&gt;
:5. Нажмите кнопку '''Применить'''.&lt;br /&gt;
Результаты разметки со связанными комментариями отображаются [[Help:UI manual#Функции правой панели|в правой панели]] на вкладке '''Комментарии'''. При этом можно поменять текст комментария, но не результат разметки. Для её изменения нужно заново установить статус, серьезность и действие.&lt;br /&gt;
Комментарий, добавленный при разметке с помощью ассистента AI, дополнительно содержит информацию о проведенной разметке: время, имя модели машинного обучения, уровень доверия прогнозу. Также для такого маркера в правой панели на вкладке '''Подробности''' присвоена метка '''AI'''.&lt;br /&gt;
&amp;lt;gallery heights=&amp;quot;210&amp;quot; perrow=&amp;quot;2&amp;quot; mode=&amp;quot;packed&amp;quot; style=&amp;quot;float:left; clear:right;&amp;gt;&lt;br /&gt;
  237 Разметка комментарий AI.png|Правая панель.&amp;lt;/br&amp;gt;Комментарий, добавленный при разметке с помощью ассистента AI &lt;br /&gt;
  238 Разметка метка AI.png|Правая панель.&amp;lt;/br&amp;gt;Метка AI на вкладке «Подробности»&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Групповая разметка маркеров ===&lt;br /&gt;
==== Групповая разметка маркеров вручную ====&lt;br /&gt;
Для групповой разметки маркеров вручную:&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходные проект, ветку и снимок]].&lt;br /&gt;
:2. Включите отображение [[Help:UI manual#Таблица маркеров|таблицы маркеров]].&lt;br /&gt;
:3. Выберите маркеры для разметки – установите флажки в строках таблицы.&lt;br /&gt;
:4. Нажмите кнопку [[File:icon edit.png|x25px]] (доступна, если выбраны маркеры в таблице).&lt;br /&gt;
:&amp;lt;span id=&amp;quot;GroupMark1&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[File:53 Выбор маркеров для группразметки.png|thumb|none|upright=2.5|Выбор маркеров для групповой разметки]]&lt;br /&gt;
:Отобразится окно для групповой разметки.&lt;br /&gt;
:&amp;lt;span id=&amp;quot;GroupMark2&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[File:54 Окно групповой разметки.png|thumb|none|upright=2.5|Окно групповой разметки]]&lt;br /&gt;
:5. Выберите статус разметки, а затем (опционально) статус серьезности (критичности) и требуемое действие – нажмите кнопки со значениями.&lt;br /&gt;
:6. Добавьте общий комментарий для выбранных маркеров.&amp;lt;br /&amp;gt;&lt;br /&gt;
:Редактор комментариев поддерживает синтаксис Markdown.&lt;br /&gt;
:Для упоминания пользователя, вставьте '''@''' и введите или выберите его логин. После добавления комментария по нажатии кнопки '''Применить''' указанному пользователю придет [[Help:UI manual#Просмотр уведомлений в интерфейсе Системы|уведомление в интерфейсе системы]] об упоминании с возможностью перехода к этому комментарию.&lt;br /&gt;
:После того, как пользователь или ассистент AI присвоил статусы и (или) написал комментарий, станет доступной кнопка '''Применить'''.&amp;lt;br /&amp;gt;&lt;br /&gt;
:{{Note|type=info|text=''Ввод комментария обязателен, если [[Help:UI manual#Работа с проектами|для проекта]] установлен флаг '''Обязательный комментарий при разметке'''''.}}&lt;br /&gt;
:7. Если требуется отменить изменения, нажмите [[File:icon cross 01.png|x15px]] в правом верхнем углу окна или кнопку '''Отмена'''.&amp;lt;br /&amp;gt;Диалоговое окно закроется, изменения не будут применены, выделение с выбранных для разметки маркеров не снимается.&lt;br /&gt;
:8. Нажмите кнопку '''Применить''', чтобы запустить процесс разметки.&amp;lt;br /&amp;gt;&lt;br /&gt;
Прогресс разметки отображается в соответствующем окне. Запущенный процесс можно полностью отменить нажатием кнопки '''Отмена'''.&amp;lt;br /&amp;gt;&lt;br /&gt;
В результате применения разметки текст маркеров [[Help:UI manual#Таблица маркеров|в таблице маркеров]] окрасится в цвет, соответствующий выставленному статусу.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;GroupMark3&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;gallery widths=&amp;quot;400&amp;quot; mode=&amp;quot;nolines&amp;quot; style=&amp;quot;float:center; clear:center; margin-right:1em; margin-left:0&amp;quot;&amp;gt;&lt;br /&gt;
  56 Окно прогресса разметки.png|Окно прогресса разметки&lt;br /&gt;
  57 Результат групповой разметки.png|Пример таблицы маркеров после применения групповой разметки&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Групповая разметка маркеров с помощью ассистента AI ====&lt;br /&gt;
{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектными доступами]] '''Разметка маркеров''' и '''Импорт разметки'''''}}&lt;br /&gt;
Чтобы разметить группу маркеров с помощью ассистента AI:&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходные проект, ветку и снимок]].&lt;br /&gt;
:2. Включите отображение [[Help:UI manual#Таблица маркеров|таблицы маркеров]].&lt;br /&gt;
:3. [[Help:UI manual#GroupMark1|Выберите маркеры для разметки]] – установите флажки в строках таблицы.&lt;br /&gt;
:4. Нажмите кнопку [[File:icon edit.png|x25px]] (доступна, если выбраны маркеры в таблице).&lt;br /&gt;
:[[File:53 Выбор маркеров для группразметки.png|thumb|none|upright=2.5|Выбор маркеров для групповой разметки]]&lt;br /&gt;
:Отобразится [[Help:UI manual#GroupMark2|окно для групповой разметки]].&lt;br /&gt;
:5. Смените режим разметки с помощью переключателя '''Режим разметки с помощью AI'''.&lt;br /&gt;
:6. В отобразившемся режиме разметки выберите '''Модель AI''', с помощью которой ассистент AI рассчитает статус разметки.&lt;br /&gt;
:Спрогнозированный статус и уровень доверия прогнозу отобразятся в этом же окне в строке каждого выбранного маркера. Если модель AI не смогла предсказать статус разметки, то отобразится значение '''n/a''' и установка флажка столбце '''Статус разметки''' будет недоступна. &lt;br /&gt;
:7. Выберите маркеры для разметки – установите флажки в столбце '''Статус разметки'''.&lt;br /&gt;
:Если маркер уже размечен и его статус совпадает с прогнозным, то установка флажка в его строке недоступна.&lt;br /&gt;
:[[File:239 Групповая разметка AI.png|thumb|none|upright=2.5|Окно групповой разметки. Режим разметки с помощью ассистента AI]]&lt;br /&gt;
:8. Добавьте общий комментарий для выбранных маркеров.&amp;lt;br /&amp;gt;&lt;br /&gt;
:Редактор комментариев поддерживает синтаксис Markdown.&lt;br /&gt;
:Для упоминания пользователя, вставьте '''@''' и введите или выберите его логин. После добавления комментария по нажатии кнопки '''Применить''' указанному пользователю придет [[Help:UI manual#Просмотр уведомлений в интерфейсе Системы|уведомление в интерфейсе системы]] об упоминании с возможностью перехода к этому комментарию.&lt;br /&gt;
:После того, как пользователь или ассистент AI присвоил статусы и (или) написал комментарий, станет доступной кнопка '''Применить'''.&amp;lt;br /&amp;gt;&lt;br /&gt;
:{{Note|type=info|text=''Ввод комментария обязателен, если [[Help:UI manual#Работа с проектами|для проекта]] установлен флаг '''Обязательный комментарий при разметке'''''.}}&lt;br /&gt;
:9. Если требуется отменить изменения, нажмите [[File:icon cross 01.png|x15px]] в правом верхнем углу окна или кнопку '''Отмена'''.&amp;lt;br /&amp;gt;Диалоговое окно закроется, изменения не будут применены, выделение с выбранных для разметки маркеров не снимается.&lt;br /&gt;
:10. Нажмите кнопку '''Применить''', чтобы запустить процесс разметки.&amp;lt;br /&amp;gt;&lt;br /&gt;
Прогресс разметки отображается в [[Help:UI manual#GroupMark3|соответствующем окне]]. Запущенный процесс можно полностью отменить нажатием кнопки '''Отмена'''.&amp;lt;br /&amp;gt;&lt;br /&gt;
В результате применения разметки текст маркеров [[Help:UI manual#Таблица маркеров|в таблице маркеров]] окрасится в цвет, соответствующий выставленному статусу.&lt;br /&gt;
&lt;br /&gt;
=== Блокировка разметки маркеров===&lt;br /&gt;
Пользователь может заблокировать другим пользователям возможность [[Help:UI manual#Разметка маркера|размечать маркер]] или [[Help:UI manual#Групповая разметка маркеров|группу маркеров]]. Это позволяет избежать коллизий при разметке маркеров несколькими пользователями.&lt;br /&gt;
&lt;br /&gt;
Для блокировки разметки используйте кнопку [[File:icon unlocked.png|x25px]] в следующих частях пользовательского интерфейса:&lt;br /&gt;
:1. [[Help:UI manual#Вкладка «Детекторы»|На вкладке '''Детекторы''']]. В этом случае блокировка распространяется на все маркеры выбранного детектора в открытом проекте и ветке, для всех снимков ветки.&lt;br /&gt;
:2. [[Help:UI manual#Вкладка «Файлы»|На вкладке '''Файлы''']]. В этом случае блокировка распространяется на все маркеры в выбранном файле в открытом проекте и ветке, для всех снимков ветки.&lt;br /&gt;
:3. В верхней части [[Help:UI manual#Функции правой панели|правой панели]]. В этом случае блокировка распространяется на все эквивалентные маркеры в открытом проекте и ветке, для всех снимков ветки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot; heights=&amp;quot;200px&amp;quot; perrow=&amp;quot;2&amp;quot; style=&amp;quot;float:left; clear:right; margin-right:1em; margin-left:1em&amp;quot;&amp;gt;&lt;br /&gt;
  58 Блокировка на вкладке Детекторы.png|Блокировка маркера на вкладке '''Детекторы'''&lt;br /&gt;
  File:59_Блокировка_на_вкладке_Файлы.png|Блокировка маркера на вкладке '''Файлы'''&lt;br /&gt;
  60_Блокировка_на_правой_панели.png|Блокировка маркера на правой панели&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если один пользователь заблокировал маркер, то другой пользователь не сможет заблокировать детектор, которому принадлежит этот маркер, и файл, в котором этот маркер найден.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Чтобы посмотреть все блокировки, перейдите в раздел [[Help:UI manual#Настройка сервера Svacer|'''Настройки''']] на [[Help:UI manual#Управление блокировками разметки|вкладку '''Блокировки''']]:&lt;br /&gt;
&lt;br /&gt;
[[File:61 Просмотр всех блокировок.png|thumb|none|upright=3.5|Таблица блокировок]]&lt;br /&gt;
&lt;br /&gt;
В этом разделе можно удалить только свои блокировки. Пользователь с доступом '''Удаление блокировок''' может удалить любые блокировки.&lt;br /&gt;
&lt;br /&gt;
=== Добавление комментария к нескольким маркерам ===&lt;br /&gt;
Для добавления комментария к нескольким маркерам одновременно:&lt;br /&gt;
:1. В режиме разметки [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходный контекст]] – проект, ветку, снимок.&lt;br /&gt;
:2. Включите отображение [[Help:UI manual#Таблица Маркеров|таблицы маркеров]].&lt;br /&gt;
:3. Выберите маркеры для разметки – установите флажки в строках таблицы.&lt;br /&gt;
:4. Нажмите кнопку [[File:Button Comment Add.png|x25px]] (доступна, если выбраны маркеры в таблице).&lt;br /&gt;
 &lt;br /&gt;
:[[File:128 Добавление общего комментария 1.png|400px|thumb|none|Выбор маркеров для добавления комментария к нескольким маркерам одновременно]]&lt;br /&gt;
:5. Отобразится окно для добавления комментария к нескольким маркерам одновременно.&lt;br /&gt;
 &lt;br /&gt;
:[[File:129 Добавление общего комментария 2.png|600px|thumb|none|Окно добавления комментария к нескольким маркерам одновременно]]&lt;br /&gt;
:6. Введите комментарий.&lt;br /&gt;
:Редактор комментариев поддерживает синтаксис Markdown.&lt;br /&gt;
:Для упоминания пользователя, вставьте '''@''' и введите или выберите его логин. После добавления комментария по нажатии кнопки '''Применить''' указанному пользователю придет [[Help:UI manual#Просмотр уведомлений в интерфейсе Системы|уведомление в интерфейсе системы]] об упоминании с возможностью перехода к маркеру с этим комментарием.&lt;br /&gt;
:8. Нажмите кнопку '''Сохранить'''.&lt;br /&gt;
&lt;br /&gt;
=== Экспорт ===&lt;br /&gt;
В режиме разметки можно выполнить экспорт:&lt;br /&gt;
* [[Help:UI manual#Экспорт исходного кода с разметкой|исходного кода с разметкой]];&lt;br /&gt;
* [[Help:UI manual#Экспорт снимка в формате snap|снимка в формате snap]];&lt;br /&gt;
* [[Help:UI manual#Экспорт разметки и снимка в SARIF|снимка в формате SARIF]];&lt;br /&gt;
* [[Help:UI manual#Экспорт разметки|разметки в файл]].&lt;br /&gt;
{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектным доступом]] '''Экспорт снимков'''''}}&lt;br /&gt;
&lt;br /&gt;
==== Экспорт исходного кода с разметкой ====&lt;br /&gt;
Чтобы экспортировать с сервера исходный код с разметкой (опционально):&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходный контекст]] – проект, ветку и снимок.&lt;br /&gt;
:2. На вкладке '''Информация о снимке''' нажмите кнопку '''Экспорт''' и выберите пункт '''Исходный код с разметкой'''.&lt;br /&gt;
:[[File:62 Переход к экспорту кода с разметкой.png|600px|thumb|none|Переход к экспорту кода с разметкой]]&lt;br /&gt;
:3. В открывшемся окне:&lt;br /&gt;
::а) Если требуется экспортировать разметку, установите флажок параметра '''Шаблон разметки''' и выберите шаблон для экспорта в списке справа. &lt;br /&gt;
::б) Опционально включите или выключите очистку старых комментариев.&lt;br /&gt;
::в) Опционально включите или выключите экспорт файлов с исходным кодом только выбранных в таблице маркеров или для всех маркеров в таблице, если маркеры не выбраны. &lt;br /&gt;
::г) Опционально заполните поля для удаления префиксов и исключения путей.&lt;br /&gt;
::д) Опционально введите регулярные выражения для очистки дополнительных строк (доступен, если включена очистка старых комментариев).&lt;br /&gt;
::[[File:63 Окно экспорта кода с разметкой.png|600px|thumb|none|Окно экспорта кода с разметкой]]&lt;br /&gt;
&lt;br /&gt;
::Пример удаления префиксов путей: &amp;lt;code&amp;gt;/.build/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::При экспорте можно исключить файлы, соответствующие [[Help:UI manual#Использование регулярных выражений|регулярным выражениям]] в поле '''Исключить пути'''. &lt;br /&gt;
:4. Нажмите кнопку '''Экспортировать'''.&lt;br /&gt;
В итоге создастся архив файлов с исходным кодом и, если был выбран шаблон разметки, то в исходный код будет добавлена актуальная разметка, в соответствии с выбранным шаблоном.&lt;br /&gt;
&lt;br /&gt;
==== Экспорт снимка в формате snap ====&lt;br /&gt;
Чтобы экспортировать с сервера исходный код снимка в формате .snap:&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходный контекст]] – проект, ветку и снимок.&lt;br /&gt;
:2. На вкладке '''Информация о снимке''' нажмите кнопку '''Экспорт''' и выберите пункт '''Снимок (*.snap)'''.&lt;br /&gt;
:[[File:192 Разметка. Переход к экспорту снимка в формате snap.png|600px|thumb|none|Переход к экспорту снимка в формате snap]]&lt;br /&gt;
:Запустится формирование файла. При старте и по окончании экспорта пользователю отобразится соответствующее всплывающее сообщение.&lt;br /&gt;
:[[File:193 Сообщение. Экспорт снимка.png|thumb|600px|thumb|none|Пример всплывающих сообщений при старте и окончании экспорта снимка]]&lt;br /&gt;
&lt;br /&gt;
==== Экспорт разметки и снимка в SARIF ====&lt;br /&gt;
Чтобы экспортировать разметку и при необходимости исходный код снимка в файл формата SARIF:&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходный контекст]] – проект, ветку и снимок.&lt;br /&gt;
:2. На вкладке '''Информация о снимке''' нажмите кнопку '''Экспорт''' и выберите пункт '''SARIF'''.&lt;br /&gt;
:[[File:194 Разметка. Переход к экспорту снимка SARIF.png|thumb|600px|thumb|none|Переход к экспорту снимка SARIF]]&lt;br /&gt;
:3. В открывшемся окне:&lt;br /&gt;
::а) Выключите (опционально) формирование название файла по умолчанию – снимите соответствующий флажок и введите название снимка. &lt;br /&gt;
::б) Опционально включите или выключите экспорт исходных файлов.&lt;br /&gt;
::в) Нажмите кнопку '''Экспортировать'''.&lt;br /&gt;
:[[File:195 Окно экспорта SARIF.png|thumb|600px|thumb|none|Окно экспорта снимка SARIF]]&lt;br /&gt;
:Запустится формирование файла. При старте и по окончании экспорта пользователю отобразится всплывающее сообщение.&lt;br /&gt;
:[[File:220 Сообщение. Экспорт SARIF.png|thumb|400px|thumb|none|Пример всплывающих сообщений при старте и окончании экспорта снимка в SARIF]]&lt;br /&gt;
&lt;br /&gt;
==== Экспорт разметки ====&lt;br /&gt;
Чтобы из ветки проекта экспортировать в файл разметку и/или комментарии:&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходный контекст]] – проект, ветку и снимок.&lt;br /&gt;
:2. На вкладке '''Информация о снимке''' нажмите кнопку '''Экспорт''' и выберите пункт '''Разметка'''.&lt;br /&gt;
:[[File:196 Разметка. Переход к экспорту разметки.png|thumb|thumb|thumb|600px|none|Переход к экспорту разметки]]&lt;br /&gt;
:3. В открывшемся окне:&lt;br /&gt;
::а) Выберите вариант экспорта. &lt;br /&gt;
::б) Если требуется экспортировать неразмеченные маркеры, установите флажок '''Включая разметку со статусом &amp;quot;Undecided&amp;quot;'''.&lt;br /&gt;
::в) Нажмите кнопку '''Экспортировать'''.&lt;br /&gt;
:[[File:197 Окно экспорта разметки.png|thumb|thumb|thumb|600px|none|Окно экспорта разметки]]&lt;br /&gt;
&lt;br /&gt;
=== Импорт разметки ===&lt;br /&gt;
В режиме разметки можно импортировать разметку из двух источников:&lt;br /&gt;
* [[Help:UI manual#Импорт разметки из файла|из файла]];&lt;br /&gt;
* [[Help:UI manual#Импорт разметки из исходного кода|из исходного кода снимка]].&lt;br /&gt;
{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектным доступом]] '''Импорт разметки'''''}}&lt;br /&gt;
&lt;br /&gt;
==== Импорт разметки из файла ====&lt;br /&gt;
Чтобы импортировать файл с разметкой:&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходный контекст]] – проект, ветку и снимок.&lt;br /&gt;
:2. На вкладке '''Информация о снимке''' нажмите кнопку '''Импорт''' и выберите пункт '''Разметка из файла'''.&lt;br /&gt;
:[[File:198 Разметка. Переход к импорту разметки из файла.png|thumb|thumb|thumb|600px|none|Переход к импорту файла с разметкой]]&lt;br /&gt;
:3. В открывшемся окне:&lt;br /&gt;
::а) Выберите файл архива в формате .gz. &lt;br /&gt;
::б) Выберите варианты импорта и действия при наличии конфликта разметки.&lt;br /&gt;
::в) Нажмите кнопку '''Импортировать'''.&lt;br /&gt;
:[[File:199 Окно импорта файла с разметкой.png|thumb|600px|thumb|none|Окно импорта файла с разметкой]]&lt;br /&gt;
:По окончании пользователю отобразится всплывающее сообщение с информацией о выполненной операции.&lt;br /&gt;
:[[File:200 Сообщение. Импорт разметки из файла.png|thumb|thumb|thumb|600px|none|Пример всплывающего сообщения об окончании импорта разметки из файла]]&lt;br /&gt;
&lt;br /&gt;
==== Импорт разметки из исходного кода ====&lt;br /&gt;
Чтобы импортировать разметку из исходного кода снимка в ветку проекта:&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходный контекст]] – проект, ветку и снимок.&lt;br /&gt;
:2. На вкладке '''Информация о снимке''' нажмите кнопку '''Импорт''' и выберите пункт '''Разметка из исходного кода'''.&lt;br /&gt;
:[[File:201 Разметка. Переход к импорту разметки из кода.png|thumb|thumb|thumb|thumb|600px|none|Переход к импорту исходного кода с разметкой]]&lt;br /&gt;
:3. В открывшемся окне выберите шаблон разметки и нажмите кнопку '''Импортировать'''.&lt;br /&gt;
:[[File:134_Импорт_разметки.png|thumb|thumb|thumb|600px|none|Окно импорта исходного кода с разметкой]]&lt;br /&gt;
:По окончании пользователю отобразится всплывающее сообщение с информацией о выполненной операции.&lt;br /&gt;
:[[File:203 Сообщение. Импорт разметки из кода.png|thumb|thumb|thumb|thumb|600px|none|Пример всплывающего сообщения об окончании импорта разметки из исходного кода снимка]]&lt;br /&gt;
&lt;br /&gt;
=== Работа с таблицей статистики ===&lt;br /&gt;
Чтобы посмотреть краткую статистику о разметке маркеров:&lt;br /&gt;
:1. [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|Выберите исходный контекст]].&lt;br /&gt;
:2. Перейдите [[Help:UI manual#Работа в режиме разметки|в режим разметки]].&lt;br /&gt;
:3. На вкладке '''Информация о снимке''' в строке свойства '''Статистика по детекторам''' нажмите кнопку '''Показать'''.&lt;br /&gt;
&lt;br /&gt;
:[[File:64 Переход к просмотру статистики.png|600px|thumb|none|Переход к просмотру статистики]]&lt;br /&gt;
&lt;br /&gt;
:Отобразится таблица статистики:&lt;br /&gt;
:[[File:65 Таблица статистики.png|600px|thumb|none|Таблица статистики]]&lt;br /&gt;
:4. Нажмите кнопку [[File:Icon download CSV.png|x20px]] или [[File:Icon download PDF.png|x20px]], чтобы выгрузить статистику в соответствующем формате.&lt;br /&gt;
:5. Нажмите кнопку [[File:Icon filter.png|x20px]] в строке статистики, чтобы применить [[Help:UI manual#Настройка и использование пользовательских фильтров|пользовательский фильтр]] с параметрами, которые соответствуют выбранному значению.&lt;br /&gt;
&lt;br /&gt;
== Работа в режиме просмотра кода ==&lt;br /&gt;
Режим позволяет посмотреть исходный код снимков, который был обработан анализатором Svace.&lt;br /&gt;
&lt;br /&gt;
Для этого:&lt;br /&gt;
:1. Перейдите в режим просмотра кода по кнопке меню [[File:Button Код.png|x25px]] в верхней части экрана.&lt;br /&gt;
:2. [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|Выберите исходный контекст]].&amp;lt;br&amp;gt;&lt;br /&gt;
:{{Note|type=info|text=''По умолчанию выбран контекст (проект, ветка), заданный ранее в режиме [[Help:UI manual#Работа в режиме разметки|'''Разметка''']]. Если Пользователь перешел в раздел '''Кoд''' из режима сравнения снимков раздела [[Help:UI manual#Работа в режиме разметки|'''Разметка''']], то для изменения контекста требуется отменить режим сравнения.''}}&lt;br /&gt;
:В левой части экрана отобразится иерархический список файлов снимка, а в правой – поле для отображения исходного кода файла.&lt;br /&gt;
:[[File:67 Режим просмотра кода.png|600px|thumb|none|Режим просмотра кода. Начальное состояние]]&lt;br /&gt;
:3. Для поиска файла:&lt;br /&gt;
::а) Кликните на поле поиска или нажмите комбинацию клавиш '''Ctrl+Shift+O'''.&lt;br /&gt;
::б) В открывшемся окне введите поисковый запрос и выберите файл.&lt;br /&gt;
:4. В левой части экрана раскройте группу файлов и нажмите на имя файла.&lt;br /&gt;
:В правой части отобразится исходный код файла.&lt;br /&gt;
:[[File:68 Режим просмотра кода открыт один файл.png|600px|thumb|none|Пример одного открытого файла]]&lt;br /&gt;
:5. Если требуется, откройте другие файлы.&lt;br /&gt;
:Они отобразятся на отдельных вкладках, если выключена [[Help:UI manual#Настройка профиля пользователя|настройка '''Переиспользование вкладки в редакторе кода''']].&lt;br /&gt;
:[[File:69 Режим просмотра кода открыто три файла.png|600px|thumb|none|Пример трёх открытых файлов]]&lt;br /&gt;
:6. Для перехода к предыдущей или следующей строке, в которую пользователь устанавливал курсор, используйте кнопки [[File:Button left.png|x25px]] и [[File:Button right.png|x25px]] или сочетания клавиш '''Ctrl+&amp;lt; и Ctrl+&amp;gt;'''.&lt;br /&gt;
:7. Вызовите функции, доступные по нажатии правой кнопки мыши на строке исходного кода&lt;br /&gt;
:* '''Перейти к объявлению''' – для перехода к строке, в которой объявлена переменная;&lt;br /&gt;
:* '''Перейти к определению''' – для перехода к строке, в которой определена переменная и функция;&lt;br /&gt;
:* '''Найти ссылки''' – для просмотра ссылок в панели с иерархическим списком файлов, именами файлов и номерами строк, в которых найдены ссылки;&lt;br /&gt;
::{{Note|type=info|text=''Если для выделенного элемента кода нет объявления, определения или ссылок, то отобразится сообщение: [[File:150 Объявление не найдено.png|x25px]], [[File:151 Определение не найдено.png|x25px]] или [[File:152 Ссылки не найдены.png|x25px]].''}}&lt;br /&gt;
::[[File:24 Исходный код Cписок файлов со ссылками.png|thumb|none|600px|Cписок файлов с номерами строк, в которых найдены ссылки]]&lt;br /&gt;
:* '''Копировать прямую ссылку''' – копирование ссылки на строку кода в буфер обмена. &lt;br /&gt;
::При переходе по этой ссылке будет открываться файл в режиме просмотра кода с курсором на той строке кода, для которой была скопирована ссылка;&lt;br /&gt;
:* '''Уменьшить''' и '''Увеличить''' – увеличение и уменьшение размера шрифта кода (эти функции также можно вызвать с помощью сочетаний клавиш '''Ctrl+Alt+-''' или '''Ctrl+Alt+=''').&lt;br /&gt;
:* '''Copy''' – для копирования строки в буфер обмена;&lt;br /&gt;
:* '''Command Palette''' – для вызова командной строки.&lt;br /&gt;
:6. Установите курсор в строке кода, чтобы отобразилось его позиционирование в правом нижнем углу.&lt;br /&gt;
:[[File:130 Позиционирование к коде.png|600px|thumb|none|Отображение позиционирования курсора в коде]]&lt;br /&gt;
:7. Сравните файлы – для этого:&lt;br /&gt;
::а) Нажмите правой кнопки мыши на имени файла и выберите пункт '''Сравнить с…'''&lt;br /&gt;
::[[File:156 Переход к сравнению файлов.png|thumb|none|600px|Переход к сравнению файлов]]&lt;br /&gt;
::б) В открывшемся окне выберите файл для сравнения. Для этого выберите проект, ветку и снимок, а затем раскройте группы файлов или воспользуйтесь поисковой строкой, нажмите на имя файла. &lt;br /&gt;
::По умолчанию выбраны проект и ветка исходного контекста.&lt;br /&gt;
::в)  Нажмите кнопку '''Сравнить'''.&lt;br /&gt;
:Откроется окно сравнения файлов.&lt;br /&gt;
 &lt;br /&gt;
:[[File:Code compare 2.png|600px|thumb|none|Окно выбора файла для сравнения]]&lt;br /&gt;
 &lt;br /&gt;
:[[File:Code_compare_3.png|600px|thumb|none|Окно сравнения файлов]]&lt;br /&gt;
&lt;br /&gt;
==Управление проектами и группами проектов==&lt;br /&gt;
В разделе '''Проекты''' отображаются все проекты со всеми ветками и снимками. &lt;br /&gt;
Для удобства работы проекты могут быть [[Help:UI manual#Работа с группами проектов|сгруппированы]]. Один проект может быть включен в несколько групп проектов.&lt;br /&gt;
[[File:101 Раздел Проекты.png|thumb|none|upright=3|Раздел '''Проекты''']]&lt;br /&gt;
&lt;br /&gt;
===Работа с проектами===&lt;br /&gt;
Список проектов отображается в левой части экрана и организован в виде иерархии. При этом:&lt;br /&gt;
* для проектов, разметку маркеров которых нужно в обязательном порядке снабжать комментариями, отображается иконка [[File:Icon comment.png|x25px]];&lt;br /&gt;
* в нижней части списка отображается общее количество проектов и веток с учетом примененных фильтров, а также выбранных проектов и веток.&lt;br /&gt;
В списке доступны:&lt;br /&gt;
* поиск по имени проекта;&lt;br /&gt;
* фильтрация списка по группам проектов;&lt;br /&gt;
* сортировка по названию или дате создания (по умолчанию – по названию).&lt;br /&gt;
При работе с проектами пользователю доступны следующие функции: &lt;br /&gt;
:1.	Загрузка актуальных данных с сервера – для этого нажмите кнопку [[File:Icon refresh.png|x25px]].&lt;br /&gt;
:2.	Просмотр списка веток – для этого нажмите на название проекта.&lt;br /&gt;
:Ветки отобразятся в этом же списке проекта на втором уровне.&lt;br /&gt;
:3.	Просмотр списка снимков – для этого нажмите на название ветки.&lt;br /&gt;
:Список снимков отобразится в виде таблицы в правой части экрана.&lt;br /&gt;
:4.	[[Help:UI manual#Работа с группами проектов|Группировка проектов]].&lt;br /&gt;
:5.	Создание проекта:&lt;br /&gt;
::а) Нажмите кнопку '''Создать проект'''.&lt;br /&gt;
::Откроется окно создания проекта.&lt;br /&gt;
::[[File:102 Создание проекта.png|thumb|none|upright=1.5|Окно создания проекта]]&lt;br /&gt;
::б) Введите название проекта.&lt;br /&gt;
::в) Для выбора одной или нескольких существующих групп кликните на поле '''Группы''' и выберите одно или несколько значений в списке:&lt;br /&gt;
::[[File:157 Окно создания проекта. Выбор существующей группы.png|thumb|none|upright=1.5|Окно создания проекта. Пример выбора существующей группы]]&lt;br /&gt;
::г) Для создания одной новой группы введите ее название и нажмите кнопку '''Создать''' в появившейся форме:&lt;br /&gt;
::[[File:158 Окно создания проекта.Создание одной группы.png|thumb|none|upright=1.5|Окно создания проекта. Пример создания одной группы]]&lt;br /&gt;
::д) Для создания нескольких новых групп введите их названия через запятую и нажмите кнопку '''Создать''' в появившейся форме:&lt;br /&gt;
::[[File:159 Окно создания проекта. Создание нескольких групп.png|thumb|none|upright=1.5|Окно создания проекта. Пример создания двух групп]]&lt;br /&gt;
::е) Установите флажок, если требуется при разметке маркеров обязательно добавлять комментарий.&lt;br /&gt;
::ж) Нажмите кнопку '''Создать'''.&lt;br /&gt;
:При создании проекта автоматически создается ветка '''master'''.&lt;br /&gt;
:При импорте снимка в интерфейсе командной строки проект, при его отсутствии, добавляется автоматически.&lt;br /&gt;
:6.	Добавление ветки: [[File:103 Создание ветки.png|thumb|right|none|upright=1.5|Окно добавления ветки в проект]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке проекта.&lt;br /&gt;
::б) В меню выберите пункт '''Создать ветку'''.&lt;br /&gt;
::в) В открывшемся окне введите название ветки и нажмите кнопку '''Создать'''.&lt;br /&gt;
:При импорте снимка в интерфейсе командной строки ветка, при ее отсутствии, добавляется автоматически.&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
:7. Клонирование проекта со всеми ветками и снимками: [[File:132 Окно клонирования проекта.png|thumb|right|none|upright=1.5|Окно клонирования проекта]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке проекта.&lt;br /&gt;
::б) В меню выберите пункт '''Клонировать'''.&lt;br /&gt;
::в) В открывшемся окне введите название нового проекта, при необходимости скорректируйте группы, в которые будет входить клонированный проект (по умолчанию, группы исходного проекта) и нажмите кнопку '''Клонировать'''.&lt;br /&gt;
&amp;lt;/br&amp;gt; &lt;br /&gt;
:9.	Редактирование параметров проекта:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке проекта.&lt;br /&gt;
::б) В меню выберите пункт '''Редактировать'''.&lt;br /&gt;
::в) В открывшемся окне измените название проекта, скорректируйте список групп, в которые включен проект, и установите или снимите флажок обязательности комментария при разметке и нажмите кнопку '''Сохранить'''.&lt;br /&gt;
:10.	Удаление одного проекта:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке проекта.&lt;br /&gt;
::б) В меню выберите пункт '''Удалить'''.&lt;br /&gt;
::в) Подтвердите удаление.&lt;br /&gt;
:11.	Удаление нескольких проектов с ветками:&lt;br /&gt;
::а) Выберите проекты для удаления – установите флажки в левой части названий проектов и веток или нажмите кнопку '''Выбрать всё'''.&lt;br /&gt;
::б) Нажмите кнопку '''Удалить''' в верхней части списка проектов и подтвердите удаление.&lt;br /&gt;
При удалении проекта удаляются все его ветки и снимки, разрывается связь проекта с группами.&lt;br /&gt;
&lt;br /&gt;
===Работа с группами проектов===&lt;br /&gt;
Работа с группами проектов доступна на отдельной панели '''Группы проектов''', которая отрывается по нажатии кнопки [[File:Icon gear.png|x25px]] в списке проектов. При этом в нижней части списка отображается общее количество групп.&lt;br /&gt;
&lt;br /&gt;
В списке групп доступны:&lt;br /&gt;
* поиск по названию группы;&lt;br /&gt;
* фильтрация списка по проектам.&lt;br /&gt;
&lt;br /&gt;
[[File:104 Панель групп.png|thumb|none|upright=3|Панель '''Группы проектов''']]&lt;br /&gt;
При работе с группами проектов пользователю доступны следующие функции: &lt;br /&gt;
:1.	Просмотр списка связанных с группой проектов – для этого нажмите на название группы.&lt;br /&gt;
:Проекты отобразятся в этом же списке групп на втором уровне.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:2.	Добавление группы: [[File:105 Создание группы.png|thumb|right|none|upright=1.5|Окно '''Создать группу''']]&lt;br /&gt;
::а) Нажмите кнопку '''Создать группу'''.&lt;br /&gt;
::б) В открывшемся окне введите название группы и выберите проекты, которые в неё войдут, нажмите кнопку '''Создать'''.&lt;br /&gt;
:Созданная группа отобразится в списке на панели '''Группы проектов'''.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:3.	Редактирование параметров группы: [[File:106 Редактирование группы.png|thumb|right|none|upright=1.5|Окно Редактировать группу]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Icon edit2.png|x25px]] в строке группы.&lt;br /&gt;
::б) В открывшемся окне измените название группы, скорректируйте состав включенных в группу проектов.&lt;br /&gt;
::в) Нажмите на кнопку [[File:Icon cancel.png|x25px]] справа от названия проекта в списке, чтобы исключить его из группы.&lt;br /&gt;
::г) Нажмите кнопку '''Сохранить'''.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:4.	Исключение одного проекта из группы – для этого нажмите кнопку [[File:Icon hide marks.png|x25px]] в правой части списка проектов группы.&lt;br /&gt;
:5.	Удаление одной группы – для этого нажмите кнопку [[File:Icon delete.png|x25px]] в правой части списка групп и подтвердите удаление.&lt;br /&gt;
:6.	Удаление нескольких групп:&lt;br /&gt;
::а) Выберите группы для удаления – установите флажки в левой части названий групп или нажмите кнопку '''Выбрать всё'''.&lt;br /&gt;
::б) Нажмите кнопку '''Удалить''' в верхней части списка групп проектов и подтвердите удаление.&lt;br /&gt;
:При удалении группы разрывается связь проекта с группой. Сами проекты не удаляются.&lt;br /&gt;
&lt;br /&gt;
===Работа с ветками===&lt;br /&gt;
При работе с ветками проекта пользователю доступны следующие функции: &lt;br /&gt;
:1.	Просмотр списка снимков – для этого нажмите на название ветки в списке проектов.&lt;br /&gt;
:Список снимков отобразится в виде таблицы в правой части экрана.&lt;br /&gt;
:2.	Редактирование ветки: [[File:107 Редактирование ветки.png|thumb|right|upright=1.5|Окно редактирования ветки]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке ветки.&lt;br /&gt;
::б) В меню выберите пункт '''Редактировать'''.&lt;br /&gt;
::в) В открывшемся окне измените название ветки и нажмите кнопку '''Сохранить'''.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:3.	Клонирование ветки проекта: [[File:108 Клонирование ветки.png|thumb|right|upright=1.5|Окно клонирования ветки]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке ветки.&lt;br /&gt;
::б) В меню выберите пункт '''Клонировать'''.&lt;br /&gt;
::в) В открывшемся окне введите название новой ветки и нажмите кнопку '''Клонировать'''.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:4. Экспорт разметки в файл: [[File:197 Окно экспорта разметки.png|thumb|right|upright=1.5|Окно экспорта разметки]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке ветки.&lt;br /&gt;
::б) В меню выберите пункт '''Экспорт разметки'''.&lt;br /&gt;
::Откроется окно экспорта разметки.&lt;br /&gt;
::в) Выберите вариант экспорта.&lt;br /&gt;
::г) Если требуется экспортировать неразмеченные маркеры, установите флажок '''Включая разметку со статусом &amp;quot;Undecided&amp;quot;'''.&lt;br /&gt;
::д) Нажмите кнопку '''Экспортировать'''.&lt;br /&gt;
::{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектным доступом]] '''Экспорт снимков'''''}}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:5. Импорт разметки из файла: [[File:199 Окно импорта файла с разметкой.png|thumb|right|upright=1.5|Окно импорта разметки]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке ветки.&lt;br /&gt;
::б) В меню выберите пункт '''Импорт разметки'''.&lt;br /&gt;
::Откроется окно импорта разметки.&lt;br /&gt;
::в) Выберите файл архива в формате .gz.&lt;br /&gt;
::г) Выберите варианты импорта и действия при наличии конфликта разметки.&lt;br /&gt;
::д) Нажмите кнопку '''Импортировать'''.&lt;br /&gt;
::{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектным доступом]] '''Импорт снимков'''''}}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:6.	Удаление ветки:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке ветки.&lt;br /&gt;
::б) В меню выберите пункт '''Удалить'''.&lt;br /&gt;
::в) Подтвердите удаление.&lt;br /&gt;
::При удалении ветки удаляются все ее снимки.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:7. Очистка разметки: [[File:160 Окно очистки разметки.png|thumb|right|upright=1.5|Окно очистки разметки]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке ветки.&lt;br /&gt;
::б) В меню выберите пункт '''Очистить разметку'''.&lt;br /&gt;
::в) В открывшемся окне выберите вариант очистки.&lt;br /&gt;
::г) Нажмите кнопку '''Очистить'''.&lt;br /&gt;
::{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектными доступами]] '''Управление ветками и снимками''', '''Разметка маркеров''' и [[#Cерверные доступы|серверным доступом]] '''Администрирование сервера'''.''}}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:8.	Копирование разметки в другой контейнер (проект и ветку): [[File:Image.png|thumb|right|upright=1.5|Окно копирования разметки в другой контейнер]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке ветки и в меню выберите пункт '''Копировать разметку'''.&lt;br /&gt;
::б) В открывшемся окне выберите проект и ветку, в которые нужно скопировать разметку, а также действия, которые нужно выполнить при наличии разметки.&lt;br /&gt;
::в) Нажмите кнопку '''Копировать'''.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Разметка в контейнере состоит из множества размеченных маркеров. В целевой ветке уже может находиться разметка. Все множество маркеров в исходной ветке можно разбить на два: &lt;br /&gt;
* «Уникальные» – маркеры, которые есть только в исходной ветке;&lt;br /&gt;
* «Общие» – маркеры, которые есть как в ветке-источнике, так и в ветке-приемнике.&lt;br /&gt;
При выполнении операции копирования разметка в уникальных маркерах всегда копируется в ветку-приемник. Для «Общих» маркеров возможны несколько вариантов продолжения копирования, но по умолчанию выбран пункт '''Не копировать''' – в этом случае разметка в «Общих» маркерах в ветке-приемнике не изменяется.&lt;br /&gt;
&lt;br /&gt;
Если выбрано действие '''Перезаписать''', разметка на «Общих» маркерах в целевом контейнере будет заменена разметкой из ветки-источника. &lt;br /&gt;
&lt;br /&gt;
При выборе действия '''Перезаписать только старую разметку''' разметка из ветки-источника копируется в том случае, если ее метка времени более поздняя, чем та, которая указана в ветке-приемнике на данном маркере.&lt;br /&gt;
&lt;br /&gt;
'''Пример''' &lt;br /&gt;
:Есть несколько контейнеров: &lt;br /&gt;
:* A с разметкой {(M1, D1), (M2, D2), (M3, D3)}&lt;br /&gt;
:* B с разметкой {(M4, D4), (M2, D5), (M3, D6)},&lt;br /&gt;
::где M — это маркер, а D — разметка (включая метку времени).&lt;br /&gt;
&lt;br /&gt;
:Операцию сравнения на разметке обозначим как &amp;gt;. Если метка времени в D1 больше, чем в D2, то D1 &amp;gt; D2.&lt;br /&gt;
:Пусть D2 &amp;gt; D5, а D3 &amp;lt; D6. Тогда операция копирования всегда скопирует разметку D1 (но не сам маркер), так как маркер M1 новый для контейнера B.&lt;br /&gt;
&lt;br /&gt;
:Маркеры M2, M3 — общие для двух контейнеров, поэтому то, какая разметка будет в контейнере-приемнике, будет зависеть от выбранного варианта разрешения конфликта: &lt;br /&gt;
:* если выбран пункт '''Не копировать''', то в контейнере B на маркерах M2, M3 будет разметка D5, D6 соответственно;&lt;br /&gt;
:* если выбран пункт '''Перезаписать''', то на M2, M3 будет разметка D2, D3;&lt;br /&gt;
:* если выбран пункт '''Перезаписать только старую разметку''', то на M2, M3 разметка будет: D2, D6, так как D2 &amp;gt; D5 и D6 &amp;gt; D3.&lt;br /&gt;
:При выполнении копирования наличие маркера в ветке-приемнике не проверяется.&lt;br /&gt;
:При успешном копировании выводится всплывающее сообщение с описанием выполненных операций:&lt;br /&gt;
:[[File:161 Сообщение об успешном копировании разметки.png|thumb|none|upright=2|Пример всплывающего сообщения об успешном копировании разметки]]&lt;br /&gt;
&lt;br /&gt;
===Работа со снимками===&lt;br /&gt;
Список снимков отображается в правой части экрана в виде таблицы после выбора ветки проекта. При этом в нижней части списка отображается общее количество снимков в выбранной ветке и количество выбранных снимков.&lt;br /&gt;
В списке доступны:&lt;br /&gt;
* поиск по названию снимка;&lt;br /&gt;
* сортировка по значениям столбцов (по умолчанию — по дате создания).&lt;br /&gt;
При работе со снимками пользователю доступны следующие функции: &lt;br /&gt;
:1. Импорт снимка из файла – для этого нажмите кнопку '''Импорт''' в верхней части табличного списка снимков и в открывшемся списке выберите один из вариантов импорта: '''Снимок (*.snap)''', '''Архив .svace-dir''' или '''SARIF'''.&lt;br /&gt;
:{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектным доступом]] '''Импорт снимков'''''}}&lt;br /&gt;
:После этого: &lt;br /&gt;
[[File:110 Импорт снимка.png|thumb|right|upright=1.5|Окно импорта снимка из файла в формате snap]]&lt;br /&gt;
::а) Если выбран импорт из файла в формате snap, то в открывшемся окне:&lt;br /&gt;
::* выберите файл в формате .snap;&lt;br /&gt;
::* введите название снимка (опционально);&lt;br /&gt;
::* Задайте [[Edit markers (command line)|правила трансформации, пропуска и дедупликации маркеров]] в поле '''Редактировать маркеры''' – загрузите JSON-файл с правилами или введите их;   &lt;br /&gt;
::* нажмите кнопку '''Импортировать'''.&lt;br /&gt;
::{{Note|type=info|text=''Если при импорте снимка из snap-файла название не введено, то будет использовано название исходного снимка (параметр «name» в JSON с информацией о снимке).''}}&lt;br /&gt;
[[File:133 Импорт снимка из архива svace-dir.png|thumb|right|upright=1.5|Окно импорта снимка из архива в формате svace-dir]]&lt;br /&gt;
[[File:133.1_Импорт_снимка_из_архива_svace-dir_-_Поля_опций.png|thumb|right|upright=1.5|Окно импорта снимка из архива в формате svace-dir. Поля опций для расширенных настроек]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
::б) Если выбран импорт архива .svace-dir, то в открывшемся окне:&lt;br /&gt;
::* выберите архив .svace-dir;&lt;br /&gt;
::* введите название снимка (опционально);&lt;br /&gt;
::* выберите шаблон разметки (опционально);&lt;br /&gt;
::* укажите правила префикса пути (опционально);&lt;br /&gt;
::*  укажите расширенные настройки (опционально): для каждой настройки нажмите кнопку '''Добавить''', в появившихся полях выберите опцию и введите её значение; для удаления настройки нажмите кнопку [[File:Icon delete.png|x25px]].&lt;br /&gt;
::После выбора параметра в поле появляется иконка [[File:Icon question mark2.png|x15px]], по наведении курсора на которую можно посмотреть описание;&lt;br /&gt;
::* нажмите кнопку '''Импортировать'''. &lt;br /&gt;
::При старте операции и по ее окончании пользователю отобразятся соответствующие всплывающие сообщения.&lt;br /&gt;
::[[File:210 Сообщение. Импорт svace-dir.png|thumb|none|upright=1.5|Пример всплывающих сообщений при старте и окончании импорта снимка из архива в формате svace-dir]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:217 Импорт снимка SARIF.png|thumb|right|upright=1.5|Окно импорта снимка из файла в формате SARIF]]&lt;br /&gt;
[[File:218 Импорт снимка SARIF - поля опций.png|thumb|right|upright=1.5|Окно импорта снимка из архива в формате SARIF. Поля опций для расширенных настроек]]&lt;br /&gt;
::в) Если выбран импорт из файла в формате SARIF, то в открывшемся окне:&lt;br /&gt;
::*  выберите файл в формате .sarif или .json, либо архив в одном из форматов: .tar, tar.bz2, tar.gz, zip;&lt;br /&gt;
::*  введите название снимка (опционально);&lt;br /&gt;
::*  укажите правила префикса пути (опционально);&lt;br /&gt;
::*  укажите расширенные настройки (опционально): для каждой настройки нажмите кнопку '''Добавить''', в появившихся полях выберите опцию и введите её значение; для удаления настройки нажмите кнопку [[File:Icon delete.png|x25px]].&lt;br /&gt;
::После выбора параметра в поле появляется иконка [[File:Icon question mark2.png|x15px]], по наведении курсора на которую можно посмотреть описание;&lt;br /&gt;
::* нажмите кнопку '''Импортировать'''.&lt;br /&gt;
::При старте операции и по ее окончании пользователю отобразятся соответствующие всплывающие сообщения.&lt;br /&gt;
::[[File:211 Сообщение. Импорт SARIF.png|thumb|none|upright=1.5|Пример всплывающих сообщений при старте и окончании импорта снимка из архива в формате SARIF]]&lt;br /&gt;
:{{Note|type=info|text='''''Примечание:''''' &lt;br /&gt;
:* ''для импорта поддерживаются архивы папки .svace-dir, заархивированные с помощью tar, gz, bz2 или zip (*.tar, *.tar.gz, *.tar.bz2, *.zip);''&lt;br /&gt;
:* ''если при импорте архива .svace-dir название снимка не введено, то оно будет соответствовать времени импорта результатов анализа из Svace;''&lt;br /&gt;
:* ''в поле '''Расширенные настройки''' поддерживается ввод дополнительных опций команды &amp;lt;code&amp;gt;svacer import&amp;lt;/code&amp;gt; – как в интерфейсе командной строки (например, &amp;lt;code&amp;gt;--attach value&amp;lt;/code&amp;gt;). В аргументах дополнительных опций требуется указывать пути относительно архивированной папки. Описание опций можно найти, запустив команду &amp;lt;code&amp;gt;svacer import --help&amp;lt;/code&amp;gt;''.&lt;br /&gt;
:* ''для импорта снимка из snap-файла, .svace-dir  или SARIF может потребоваться много времени: как на загрузку, так и на обработку данных после загрузки. При работе сервера Svacer за reverse proxy их дефолтных значений таймаутов или ограничений на размер загружаемых данных может быть недостаточно, поэтому рекомендуется увеличить эти значения в конфигурационных файлах reverse proxy, см. [[Help:Configuration#Nginx|пример для Nginx]]''}}&lt;br /&gt;
:2. Экспорт снимка – для этого нажмите кнопку [[File:Icon export.png|x25px]]в крайнем правом столбце строки снимка и в открывшемся списке выберите один из вариантов экспорта: '''Экспорт (*.snap)''', '''Экспорт SARIF''' или '''Экспорт кода с разметкой'''.&lt;br /&gt;
:После этого:&lt;br /&gt;
::а) Если выбран экспорт в файл в формате snap, то по окончании его формирования во всплывающем сообщении нажмите кнопку '''Скачать'''.&lt;br /&gt;
::[[File:193 Сообщение. Экспорт снимка.png|thumb|none|upright=1.5|Пример всплывающих сообщений при старте и окончании экспорта снимка]]&lt;br /&gt;
:[[File:195 Окно экспорта SARIF.png|thumb|right|upright=1.5|Окно экспорта снимка SARIF]]&lt;br /&gt;
::б) Если выбран экспорт файла формата SARIF, то в открывшемся окне:&lt;br /&gt;
::* Выключите (опционально) формирование название файла по умолчанию – снимите соответствующий флажок и введите название снимка.&lt;br /&gt;
::* Опционально включите или выключите экспорт исходных файлов.&lt;br /&gt;
::* Нажмите кнопку '''Экспортировать'''.&lt;br /&gt;
::Запустится формирование файла. При старте и по окончании экспорта пользователю отобразится всплывающее сообщение.&lt;br /&gt;
::[[File:220 Сообщение. Экспорт SARIF.png|thumb|none|upright=1.5|Пример всплывающих сообщений при старте и окончании экспорта снимка в SARIF]]&lt;br /&gt;
:[[File:340 Проекты Окно экспорта кода с разметкой.png||thumb|right|upright=1.5|Окно экспорта кода с разметкой]]&lt;br /&gt;
::в) Если выбран экспорт кода с разметкой, то в открывшемся окне:&lt;br /&gt;
::* Если требуется экспортировать разметку, установите флажок параметра '''Шаблон разметки''' и выберите шаблон для экспорта в списке справа.&lt;br /&gt;
::* Опционально включите или выключите очистку старых комментариев.&lt;br /&gt;
::* Опционально заполните поля для удаления префиксов и исключения путей.&lt;br /&gt;
::* Опционально введите регулярные выражения для очистки дополнительных строк (доступен, если включена очистка старых комментариев).::&lt;br /&gt;
::Пример удаления префиксов путей: &amp;lt;code&amp;gt;/.build/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::При экспорте можно исключить файлы, соответствующие [[Help:UI manual#Использование регулярных выражений|регулярным выражениям]] в поле '''Исключить пути'''. &lt;br /&gt;
::* Нажмите кнопку '''Экспортировать'''.&lt;br /&gt;
::В итоге создастся архив файлов с исходным кодом и, если был выбран шаблон разметки, то в исходный код будет добавлена актуальная разметка, в соответствии с выбранным шаблоном.&lt;br /&gt;
:3.	Переход к разметке маркеров снимка:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в крайнем правом столбце строки снимка.&lt;br /&gt;
::б) В меню выберите пункт '''Разметить'''.&lt;br /&gt;
[[File:111 Редактирование снимка.png|thumb|right|upright=1.5|Окно редактирования снимка]]&lt;br /&gt;
:4.	Редактирование названия снимка:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в крайнем правом столбце строки снимка.&lt;br /&gt;
::б) В меню выберите пункт '''Редактировать'''.&lt;br /&gt;
::в) Поменяйте название и нажмите кнопку '''Сохранить'''.&lt;br /&gt;
[[File:212 Окно Копирование снимков.png|thumb|right|upright=1.5|Окно копирования снимка. Пример для одного снимка]]&lt;br /&gt;
:5.	Копирование одного снимка в другой проект и ветку:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в крайнем правом столбце строки снимка.&lt;br /&gt;
::б) В меню выберите пункт '''Копировать'''.&lt;br /&gt;
::в) В открывшемся окне выберите проект и ветку, в которые нужно добавить копию снимка, нажмите кнопку '''Копировать'''.&lt;br /&gt;
::При старте операции и по ее окончании пользователю отобразятся соответствующие всплывающие сообщения.&lt;br /&gt;
::[[File:213 Сообщение. Копирование снимков.png|thumb|none|upright=1.5|Пример всплывающих сообщений при старте и окончании копирования одного снимка]]&lt;br /&gt;
[[File:214 Окно Копирование нескольких снимков.png|thumb|right|upright=1.5|Окно копирования снимка. Пример для двух снимков]]&lt;br /&gt;
:6. Копирование нескольких снимков в другой проект и ветку:&lt;br /&gt;
::а) Чтобы выбрать для копирования все снимки, установите флажок в заголовке табличного списка снимков.&lt;br /&gt;
::б) Чтобы выбрать несколько снимков, установите флажки в крайнем правом столбце табличного списка.&lt;br /&gt;
::в) Нажмите кнопку '''Копировать''' в верхней части табличного списка снимков.&lt;br /&gt;
::г) В открывшемся окне выберите проект и ветку, в которые нужно добавить копии выбранных снимков, нажмите кнопку '''Копировать'''.&lt;br /&gt;
::При старте операции и по ее окончании пользователю отобразятся соответствующие всплывающие сообщения.&lt;br /&gt;
::[[File:215 Сообщение. Копирование двух снимков.png|thumb|none|upright=1.5|Пример всплывающих сообщений при старте и окончании копирования двух снимков]]&lt;br /&gt;
:[[File:134 Импорт разметки.png|thumb|right|upright=1.5|Окно импорта разметки]]&lt;br /&gt;
:7. Импорт разметки из комментариев исходного кода снимка в активную ветку проекта:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в крайнем правом столбце строки снимка.&lt;br /&gt;
::б) В меню выберите пункт '''Импорт разметки из исходного кода'''.&lt;br /&gt;
::в) В открывшемся окне выберите шаблон разметки и нажмите кнопку '''Импортировать'''.&lt;br /&gt;
::По окончании пользователю отобразится всплывающее сообщение с информацией о выполненной операции. &lt;br /&gt;
::[[File:216 Сообщение. Импорт разметки из кода.png|thumb|none|upright=1.5|Пример всплывающего сообщения об окончании импорта разметки из файла]]&lt;br /&gt;
&lt;br /&gt;
:8.	Просмотр информации о снимке в JSON-формате:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке снимка крайнем правом столбце.&lt;br /&gt;
::б) В меню выберите пункт '''Просмотреть JSON'''.&lt;br /&gt;
:[[File:112 Просмотр JSON снимка.png|thumb|none|upright=3|Окно просмотра информации о снимке в JSON-формате]]&lt;br /&gt;
:9. Удаление одного снимка:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке снимка крайнем правом столбце.&lt;br /&gt;
::б) В меню выберите пункт '''Удалить'''.&lt;br /&gt;
::в) Подтвердите удаление.&lt;br /&gt;
:10. Удаление нескольких снимков:&lt;br /&gt;
::а) Чтобы выбрать для удаления все снимки, установите флажок в заголовке табличного списка снимков.&lt;br /&gt;
::б) Чтобы выбрать несколько снимков, установите флажки в крайнем правом столбце табличного списка.&lt;br /&gt;
::в) Нажмите кнопку '''Удалить''' в верхней части табличного списка снимков и подтвердите удаление.&lt;br /&gt;
&lt;br /&gt;
== Просмотр детекторов ==&lt;br /&gt;
Чтобы посмотреть список всех детекторов, перейдите в раздел '''Детекторы''':&lt;br /&gt;
 &lt;br /&gt;
[[File:135 Раздел Детекторы.png|thumb|none|upright=3|Раздел «Детекторы»]]&lt;br /&gt;
&lt;br /&gt;
В разделе отображается список детекторов той версии  Svace, которая указана вверху раздела.&lt;br /&gt;
&lt;br /&gt;
{{Note|type=info|text=''При обновлении списка детекторов и их параметров в Svace изменения попадают в Svacer при выпуске новой версии системы!''}}&lt;br /&gt;
&lt;br /&gt;
В разделе '''Детекторы''' пользователю доступны следующие функции:&lt;br /&gt;
:1. Поиск детектора по его названию, серьезности, надежности и коду дефекта безопасности CWE.&lt;br /&gt;
:2. Сортировка по значениям столбцов (по умолчанию – по названию детектора).&lt;br /&gt;
:3. Переход к просмотру описания дефекта безопасности на сайте [https://cwe.mitre.org cwe.mitre.org] (открывается в отдельном окне) – для этого нажмите на ссылку в столбце '''CWE'''.&lt;br /&gt;
:4. Просмотр дополнительной информации о детекторе при её наличии – для этого нажмите на иконку [[File:icon_question_mark2.png|x25px]] справа от названия детектора.&lt;br /&gt;
 &lt;br /&gt;
:[[File:121_Окно с дополнительной информацией о детекторе.png|thumb|none|upright=2|Раздел «Детекторы». Пример окна с дополнительной информацией о детекторе]]&lt;br /&gt;
&lt;br /&gt;
:5. Фильтрация списка – для этого:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button Фильтр.png|x25px]].&lt;br /&gt;
::б) В открывшемся окне '''Фильтр''' настройте параметры фильтрации – выберите значения в списках полей или нажмите кнопки со значениями.&lt;br /&gt;
::в) Нажмите кнопку [[File:button_Очистить.png|x25px]], чтобы очистить все параметры фильтрации.&lt;br /&gt;
::г) Нажмите кнопку [[File:button_Применить.png|x25px]], чтобы применить фильтр.&lt;br /&gt;
 &lt;br /&gt;
:[[File:137 Детекторы.Фильтр.png|thumb|none|upright=2|Раздел «детекторы». Окно «Фильтр»]]&lt;br /&gt;
&lt;br /&gt;
:6. Отмена примененных фильтров – для этого нажмите кнопку [[File:Button Фильтр отмена.png|x25px]].&lt;br /&gt;
:7. Выбор отображаемых столбцов – для этого нажмите на кнопку '''Столбцы''' и в открывшемся списке установите или снимите флажки рядом с названиями столбцов.&lt;br /&gt;
:Для настройки скрытия или показа доступны все столбцы, кроме '''Детектор'''. Столбцы '''Статус''' и '''Инструменты''' по умолчанию скрыты.&lt;br /&gt;
:Пользовательская настройка отображения столбцов сохраняется и не сбрасывается при повторном входе пользователя в систему.&lt;br /&gt;
&lt;br /&gt;
:[[File:138 Детекторы выбор столбцов.png|thumb|none|upright=1.5|Раздел «Детекторы». Выбор отображаемых столбцов]]&lt;br /&gt;
&lt;br /&gt;
:8. Экспорт списка детекторов в файл формата PDF – нажмите кнопку '''Экспорт в PDF'''.&lt;br /&gt;
:Файл содержит информацию обо всех детекторах, найденных с помощью строки поиска и фильтров. Настройка отображения столбцов не влияет на выгрузку – файл содержит информацию всех столбцов.&lt;br /&gt;
&lt;br /&gt;
== Просмотр статистики ==&lt;br /&gt;
В разделе '''Статистика''' пользователь может посмотреть статистические данные о разметке по всем проектам, веткам и снимкам, доступным пользователю. Все статистические данные разделены на три группы и отображаются в отдельных дашбордах:&lt;br /&gt;
* [[Help:UI manual#Работа с дашбордом «Общая статистика»|'''Общая статистика''']] – показатели по последним импортированным снимкам в ветках проектов;&lt;br /&gt;
* [[Help:UI manual#Работа с дашбордом «Распределение маркеров»|'''Распределение маркеров''']] – диаграммы с информацией о количестве маркеров и их распределении по серьезности, статусу разметки и языкам;&lt;br /&gt;
* [[Help:UI manual#Работа с дашбордом «Активность по разметке»|'''Активность по разметке''']] – информация об активности пользователей при разметке маркеров.&lt;br /&gt;
&lt;br /&gt;
[[File:162 Раздел Статистика. Начальное состояние.png|thumb|none|upright=3|Раздел '''Статистика'''. Начальное состояние]]&lt;br /&gt;
Чтобы посмотреть информацию:&lt;br /&gt;
:1. Выберите дашборд – нажмите кнопку с его названием в верхней части экрана.&lt;br /&gt;
:2. Выберите [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|контекст]] (опционально). В дашборде '''Общая статистика''' выбор снимка недоступен.&lt;br /&gt;
:2. Нажмите кнопку [[File:Button Play.png|x25px]].&lt;br /&gt;
:Если контекст не был выбран, отобразится статистика по всем проектам, веткам и снимкам, доступным пользователю. При этом информация об их количестве отображается в верхней части каждого дашборда.&lt;br /&gt;
:[[File:163 Раздел Статистика. Контекст не выбран.png|thumb|none|upright=2.5|Раздел '''Статистика'''. Пример дашборда '''Общая статистика'''. Контекст не выбран]]&lt;br /&gt;
:Если контекст был выбран, то отобразится статистика только для выбранных проектов, веток и снимков (кроме '''Общая статистика'''). При этом информация об их количестве отображается в верхней части каждого дашборда.&lt;br /&gt;
:[[File:164 Раздел Статистика. Контекст выбран.png|thumb|none|upright=2.5|Раздел '''Статистика'''. Пример дашборда '''Общая статистика'''. Контекст выбран]]&lt;br /&gt;
&lt;br /&gt;
=== Работа с дашбордом «Общая статистика» ===&lt;br /&gt;
На дашборде '''Общая статистика''' отображается информация о разметке маркеров в последних импортированных снимках в разрезе проектов и веток. Информация представлена в виде блоков со следующими данными:&lt;br /&gt;
* общая информация:&lt;br /&gt;
** названия проекта и ветки;&lt;br /&gt;
** количество снимков в ветке и дата последнего импорта;&lt;br /&gt;
** дата последней разметки маркеров;&lt;br /&gt;
* показатели последнего импортированного снимка:&lt;br /&gt;
** количество строк кода;&lt;br /&gt;
** количество маркеров;&lt;br /&gt;
** плотность маркеров – процентное отношение количества маркеров на тысячу строк кода;&lt;br /&gt;
** процент и количество размеченных маркеров;&lt;br /&gt;
** процент и количество подтвержденных маркеров – со статусом Confirmed;&lt;br /&gt;
** процент и количество критичных маркеров – с серьезностью детектора Critical.&lt;br /&gt;
:[[File:204 Статистика. Общая статистика.png|thumb|none|upright=2.5|Раздел '''Статистика'''. Дашборд '''Общая статистика''']]&lt;br /&gt;
Пользователю доступны следующие функции:&lt;br /&gt;
:1. Поиск информации по названиям проектов и веток.&lt;br /&gt;
:2. Сортировка данных – для этого в поле справа выберите показатель, по которому требуется сортировать информацию:&lt;br /&gt;
:* по датам последних разметки и импорта;&lt;br /&gt;
:* по показателям последнего импортированного снимка.&lt;br /&gt;
:Для изменения порядка сортировки используйте кнопки [[File:Button Sort.png|x25px]] и [[File:Button Sort UP.png|x25px]].&lt;br /&gt;
:3. Переход к последнему импортированному снимку в режиме разметки – нажмите на названия проекта и ветки в блоке.&lt;br /&gt;
&lt;br /&gt;
=== Работа с дашбордом «Распределение маркеров» ===&lt;br /&gt;
На дашборде '''Распределение маркеров''' отображаются три диаграммы:&lt;br /&gt;
* Количество маркеров по серьезности;&lt;br /&gt;
* Количество маркеров по статусу разметки;&lt;br /&gt;
* Распределение маркеров по языкам.&lt;br /&gt;
[[File:165 Раздел Статистика. Информация о выбранном контексте.png|thumb|none|upright=2.5|Раздел '''Статистика'''. Дашборд '''Распределение маркеров''']]&lt;br /&gt;
Пользователю доступны следующие функции:&lt;br /&gt;
:1. Просмотр значения диаграммы – для этого наведите курсор на любой графический элемент любой диаграммы.&lt;br /&gt;
:2. Выгрузка данных диаграммы в файл формата .csv – для этого нажмите кнопку [[File:Button Download.png|x25px]] в любой диаграмме.&lt;br /&gt;
&lt;br /&gt;
=== Работа с дашбордом «Активность по разметке» ===&lt;br /&gt;
На дашборде Активность по разметке отображается информация о действиях пользователей [[Help:UI manual#Работа в режиме разметки|по разметке маркеров]], которая может быть представлена в двух видах:&lt;br /&gt;
* диаграмма '''Активность по разметке''' – отражает активность пользователей по разметке маркеров за выбранный месяц (по умолчанию – текущий месяц). Цвет ячеек на диаграмме отражает количество действий пользователя, выполненных в указанную дату: чем темнее цвет, тем больше действий выполнил пользователь. Эта диаграмма отображается по умолчанию; если вид был переключен, то для возврата к этой диаграмме нажмите кнопку [[File:Button ChangeDiagram1.png|x25px]];&lt;br /&gt;
* диаграмма '''Лидеры по разметке''' – отражает количество действий пользователей при разметке за выбранный период (по умолчанию – период соответствует месяцу, указанному на диаграмме '''Активность по разметке''') с сортировкой по лидерам. Цвет строк на диаграмме отражает количество действий пользователя: чем темнее цвет, тем больше действий выполнил пользователь. Диаграмма отображается по нажатии кнопки [[File:Button ChangeDiagram2.png|x25px]];&lt;br /&gt;
[[File:166 Раздел Статистика. Активность по разметке.png|thumb|none|upright=3|Раздел '''Статистика'''. Дашборд '''Активность по разметке'''. Вид 1: диаграмма '''Активность по разметке''']]&lt;br /&gt;
[[File:167 Раздел Статистика. Лидеры по разметке.png|thumb|none|upright=3|Раздел '''Статистика'''. Дашборд '''Активность по разметке'''. Вид 2: диаграмма '''Лидеры по разметке''']]&lt;br /&gt;
Пользователю доступны следующие функции:&lt;br /&gt;
:1. Просмотр значения диаграммы – для этого наведите курсор на любой графический элемент любой диаграммы.&lt;br /&gt;
:2. Выгрузка данных диаграммы в файл формата .csv – для этого нажмите кнопку [[File:Button Download.png|x25px]] в любой диаграмме&lt;br /&gt;
:3. &amp;lt;span id=&amp;quot;diagrams_details&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;В диаграмме '''Активность по разметке''':&lt;br /&gt;
::а) Поиск конкретного пользователя  – для этого введите фрагмент его логина в поле поиска.&lt;br /&gt;
::б) Просмотр статистики за любой другой месяц – для этого выберите год и месяц в раскрывающихся списках вверху диаграммы.&lt;br /&gt;
::в) Просмотр активности конкретного пользователя за выбранный месяц – для этого нажмите на его логин.&lt;br /&gt;
::Ниже диаграммы '''Активность по разметке''' отобразится список действий по разметке выбранного пользователя. Измененная (неактуальная) разметка отмечена иконкой [[File:Icon archive.png|x25px]].&lt;br /&gt;
::[[File:168 Раздел Статистика. Активность по разметке. Выбранный пользователь.png|thumb|none|upright=3|Раздел '''Статистика'''. Дашборд '''Активность по разметке'''. Диаграмма '''Активность по разметке''' и список действий по разметке выбранного пользователя]]&lt;br /&gt;
::г) Просмотр активности пользователей в конкретный день месяца – для этого нажмите на число.&lt;br /&gt;
::Ниже диаграммы '''Активность по разметке''' отобразится список действий по разметке пользователей за выбранную дату.&lt;br /&gt;
::[[File:169 Раздел Статистика. Активность по разметке. Пользователи за дату.png|thumb|none|upright=3|Раздел '''Статистика'''. Дашборд '''Активность по разметке'''. Диаграмма '''Активность по разметке''' и список действий по разметке пользователей за выбранную дату]]&lt;br /&gt;
::д) Просмотр активности конкретного пользователя в конкретный день месяца – для этого нажмите ячейку таблицы на пересечении строки с логином пользователя и столбца с числом.&lt;br /&gt;
::Ниже диаграммы '''Активность по разметке''' отобразится список действий по разметке выбранного пользователя за выбранную дату.&lt;br /&gt;
::[[File:170 Раздел Статистика. Активность по разметке. Одни пользователь за дату.png|thumb|none|upright=3|Раздел '''Статистика'''. Дашборд '''Активность по разметке'''. Диаграмма '''Активность по разметке''' и список действий по разметке выбранного пользователя за выбранную дату]]&lt;br /&gt;
::е) Включение и выключение отображения информации о неактуальной (измененной) разметке в списке действий пользователя – для этого воспользуйтесь переключателем '''Исключить активность по неактуальной разметке'''.&lt;br /&gt;
::ж) Просмотр маркера в [[Help:UI manual#Работа в режиме разметки|режиме разметки]] – для этого в списке действий нажмите на ссылку с именем файла и номером строки.&lt;br /&gt;
::з) Просмотр информации о маркере – для этого в списке действий нажмите кнопку [[File:Button show.png|x25px]] слева от названия маркера.&lt;br /&gt;
::В правой части экрана отобразится панель с информацией о маркере.&lt;br /&gt;
::[[File:205 Статистика. Активность по разметке. Панель с информацией о маркере.png|thumb|none|upright=3|Панель с информацией о маркере]]&lt;br /&gt;
:4. В диаграмме '''Лидеры по разметке''':&lt;br /&gt;
::а) Поиск конкретного пользователя – для этого введите фрагмент его логина в поле поиска.&lt;br /&gt;
::б) Просмотр статистики за любой другой период времени, кроме текущего месяца – для этого кликните на поле даты вверху диаграммы и вручную введите даты, либо в раскрывшемся календаре выберите диапазон дат: предложенный ('''Сегодня''', '''Вчера''', '''Неделю назад''' и т. п.) или свой.&lt;br /&gt;
::[[File:171 Раздел Статистика. Лидеры по разметке. Выбор дат.png|thumb|none|upright=3|Раздел '''Статистика'''. Дашборд '''Активность по разметке'''. Диаграмма '''Лидеры по разметке'''. Выбор диапазона дат]]&lt;br /&gt;
::в) Просмотр активности конкретного пользователя за указанный период – для этого нажмите на его логин.&lt;br /&gt;
::Ниже диаграммы '''Лидеры по разметке''' отобразится список действий по разметке выбранного пользователя. Измененная (неактуальная) разметка отмечена иконкой [[File:Icon archive.png|x25px]].&lt;br /&gt;
::[[File:172 Раздел Статистика. Лидеры по разметке. Выбранный пользователь.png|thumb|none|upright=3|Раздел '''Статистика'''. Дашборд '''Активность по разметке'''. Диаграмма '''Лидеры по разметке''' и список действий по разметке выбранного пользователя]]&lt;br /&gt;
::г) Включение и выключение отображения в списке действий пользователя по неактуальной (измененной) разметке – для этого воспользуйтесь переключателем '''Исключить активность по неактуальной разметке'''.&lt;br /&gt;
::д) Просмотр маркера в [[Help:UI manual#Работа в режиме разметки|режиме разметки]] – для этого в списке действий нажмите на ссылку с именем файла и номером строки.&lt;br /&gt;
::e) Просмотр информации о маркере – для этого в списке действий нажмите кнопку [[File:Button show.png|x25px]] слева от названия маркера.&lt;br /&gt;
::В правой части экрана отобразится панель с информацией о маркере.&lt;br /&gt;
&lt;br /&gt;
== Глобальный поиск ==&lt;br /&gt;
Глобальный поиск позволяет одновременно по всем доступным пользователю проектам и веткам выполнить поиск в следующих категориях:&lt;br /&gt;
* Маркеры;&lt;br /&gt;
* Комментарии к маркерам;&lt;br /&gt;
* Снимки.&lt;br /&gt;
&lt;br /&gt;
Чтобы воспользоваться глобальным поиском, перейдите в раздел '''Поиск'''.&lt;br /&gt;
[[File:173 Раздел Поиск. Начальное состояние.png|thumb|none|upright=3|Раздел '''Поиск'''. Начальное состояние]]&lt;br /&gt;
&lt;br /&gt;
Для каждой категории реализованы два независимых способа поиска в виде вкладок:&lt;br /&gt;
* '''Базовый поиск''' – единый поисковый запрос по всем атрибутам категории одновременно, с указанием контекста;&lt;br /&gt;
* '''Поиск по полям''' – позволяет задать значения поиска по каждому атрибуту категории в отдельности и указать контекст.&lt;br /&gt;
&lt;br /&gt;
=== Поиск маркеров ===&lt;br /&gt;
Чтобы воспользоваться поиском маркеров:&lt;br /&gt;
:1. Выберите категорию '''Маркеры''' раздела '''Поиск''' (выбран по умолчанию).&lt;br /&gt;
:2. Для базового поиска:&lt;br /&gt;
::а) Перейдите на вкладку '''Базовый поиск''' (открыта по умолчанию).&lt;br /&gt;
::[[File:174 Раздел Поиск. Категория Маркеры. Базовый поиск.png|thumb|none|upright=3|Раздел '''Поиск'''. Категория '''Маркеры'''. Базовый поиск]]&lt;br /&gt;
::б) Введите фрагмент названия маркера, детектора, функции или файла.&lt;br /&gt;
::в) Выберите (опционально) группу проектов, проект, ветку и снимок, в которых нужно найти маркеры. &lt;br /&gt;
::По умолчанию выбраны все группы, проекты, ветки и снимки.&lt;br /&gt;
::г) Нажмите кнопку '''Поиск'''.&lt;br /&gt;
:Отобразятся результаты поиска.&lt;br /&gt;
:[[File:175 Раздел Поиск. Пример результатов поиска в категории Маркеры.png|thumb|none|upright=3|Раздел '''Поиск'''. Пример результатов поиска в категории '''Маркеры''']]&lt;br /&gt;
:3. Для поиска по полям:&lt;br /&gt;
::а) Перейдите на вкладку '''Поиск по полям'''.&lt;br /&gt;
::[[File:176 Раздел Поиск. Категория Маркеры. Поиск по полям.png|thumb|none|upright=3|Раздел '''Поиск'''. Категория '''Маркеры'''. Поиск по полям]]&lt;br /&gt;
::б) Заполните поля поиска.&lt;br /&gt;
::в) Выберите (опционально) группу проектов, проект, ветку и снимок, в которых нужно найти маркеры. &lt;br /&gt;
::По умолчанию выбраны все группы, проекты, ветки и снимки.&lt;br /&gt;
::г) Нажмите кнопку '''Поиск'''.&lt;br /&gt;
:Отобразятся результаты поиска.&lt;br /&gt;
:[[File:177 Раздел Поиск. Пример результатов поиска по полям в категории Маркеры.png|thumb|none|upright=3|Раздел '''Поиск'''. Пример результатов поиска по полям в категории '''Маркеры''']]&lt;br /&gt;
:4. Для очистки значений в полях поиска нажмите кнопку '''Очистить'''.&lt;br /&gt;
:5. Чтобы перейти к найденному файлу с маркером в [[Help:UI manual#Работа в режиме разметки|режиме разметки]], в результатах поиска кликните на ссылку в имени файла с номером строки исходного кода.&lt;br /&gt;
:6. Чтобы посмотреть подробную информацию о найденном маркере, в результатах поиска нажмите кнопку [[File:Button show.png|x25px]].&lt;br /&gt;
Отобразится правая панель с открытой вкладкой '''Подробности'''.&lt;br /&gt;
:[[File:341 Раздел Поиск. Подробная информация о маркере.png|thumb|none|upright=3|Раздел '''Поиск'''. Пример просмотра подробной информации о найденном маркере]]&lt;br /&gt;
&lt;br /&gt;
=== Поиск комментариев к маркерам ===&lt;br /&gt;
Чтобы воспользоваться поиском по комментариям к маркерам:&lt;br /&gt;
:1. Выберите категорию '''Комментарии к маркерам''' раздела '''Поиск'''.&lt;br /&gt;
:2. Для базового поиска:&lt;br /&gt;
::а) Перейдите на вкладку '''Базовый поиск''' (открыта по умолчанию).&lt;br /&gt;
::[[File:178 Раздел Поиск. Категория Комментарии к маркерам. Базовый поиск.png|thumb|none|upright=3|Раздел '''Поиск'''. Категория '''Комментарии к маркерам'''. Базовый поиск]]&lt;br /&gt;
::б) Введите фрагмент комментария или логина его автора.&lt;br /&gt;
::в) Выберите (опционально) группу проектов, проект, ветку и снимок, в которых нужно найти комментарии. &lt;br /&gt;
::По умолчанию выбраны все группы, проекты, ветки и снимки.&lt;br /&gt;
::г) Нажмите кнопку '''Поиск'''.&lt;br /&gt;
:Отобразятся результаты поиска.&lt;br /&gt;
:[[File:179 Раздел Поиск. Пример результатов поиска в категории Комментарии к маркерам.png|thumb|none|upright=3|Раздел '''Поиск'''. Пример результатов поиска в категории '''Комментарии к маркерам''']]&lt;br /&gt;
:3. Для поиска по полям:&lt;br /&gt;
::а) Перейдите на вкладку '''Поиск по полям'''.&lt;br /&gt;
::[[File:180 Раздел Поиск. Категория Комментарии к маркерам. Поиск по полям.png|thumb|none|upright=3|Раздел '''Поиск'''. Категория '''Комментарии к маркерам'''. Поиск по полям]]&lt;br /&gt;
::б) Заполните поля поиска.&lt;br /&gt;
::в) Выберите (опционально) группу проектов, проект, ветку и снимок, в которых нужно найти комментарии. &lt;br /&gt;
::По умолчанию выбраны все группы, проекты, ветки и снимки.&lt;br /&gt;
::г) Нажмите кнопку '''Поиск'''.&lt;br /&gt;
:Отобразятся результаты поиска.&lt;br /&gt;
:[[File:181 Раздел Поиск. Пример результатов поиска по полям в категории Комментарии к маркерам.png|thumb|none|upright=3|Раздел '''Поиск'''. Пример результатов поиска по полям в категории '''Комментарии к маркерам''']]&lt;br /&gt;
:4. Для очистки поискового запроса нажмите кнопку '''Очистить'''.&lt;br /&gt;
:5. Чтобы перейти в [[Help:UI manual#Работа в режиме разметки|режим разметки]] к файлу маркера с найденным комментарием, в результатах поиска кликните на ссылку в имени файла с номером строки исходного кода.&lt;br /&gt;
:6. Чтобы посмотреть подробную информацию о маркере с найденным комментарием, в результатах поиска нажмите кнопку [[File:Button show.png|x25px]]. Отобразится правая панель с открытой вкладкой '''Комментарии'''.&lt;br /&gt;
&lt;br /&gt;
=== Поиск снимков ===&lt;br /&gt;
Чтобы воспользоваться поиском по снимкам:&lt;br /&gt;
:1. Выберите категорию '''Снимки''' раздела '''Поиск'''.&lt;br /&gt;
:2. Для базового поиска:&lt;br /&gt;
::а) Перейдите на вкладку '''Базовый поиск''' (открыта по умолчанию).&lt;br /&gt;
::[[File:182 Раздел Поиск. Категория Снимки. Базовый поиск.png|thumb|none|upright=3|Раздел '''Поиск'''. Категория '''Снимки'''. Базовый поиск]]&lt;br /&gt;
::б) Введите фрагмент названия снимка, пользовательского поля снимка (названия или его значения) или логина пользователя, который импортировал снимок.&lt;br /&gt;
::в) Выберите (опционально) группу проектов, проект, ветку и снимок, в которых нужно найти снимки. &lt;br /&gt;
::По умолчанию выбраны все группы, проекты, ветки и снимки.&lt;br /&gt;
::г) Нажмите кнопку '''Поиск'''.&lt;br /&gt;
:Отобразятся результаты поиска.&lt;br /&gt;
:[[File:183 Раздел Поиск. Пример результатов поиска в категории Снимки.png|thumb|none|upright=3|Раздел '''Поиск'''. Пример результатов поиска в категории '''Снимки''']]&lt;br /&gt;
&lt;br /&gt;
:3. Для поиска по полям:&lt;br /&gt;
::а) Перейдите на вкладку '''Поиск по полям'''.&lt;br /&gt;
::[[File:184 Раздел Поиск. Категория Снимки. Поиск по полям.png|thumb|none|upright=3|Раздел '''Поиск'''. Категория '''Снимки'''. Поиск по полям]]&lt;br /&gt;
::б) Заполните поля поиска.&lt;br /&gt;
::в) Выберите (опционально) группу проектов, проект, ветку и снимок, в которых нужно найти снимки. &lt;br /&gt;
::По умолчанию выбраны все группы, проекты, ветки и снимки.&lt;br /&gt;
::г) Нажмите кнопку '''Поиск'''.&lt;br /&gt;
:Отобразятся результаты поиска.&lt;br /&gt;
:[[File:185 Раздел Поиск. Пример результатов поиска по полям в категории Снимки.png|thumb|none|upright=3|Раздел '''Поиск'''. Пример результатов поиска по полям в категории '''Снимки''']]&lt;br /&gt;
:4. Для очистки поискового запроса нажмите кнопку '''Очистить'''.&lt;br /&gt;
:5. Чтобы посмотреть подробную информацию о найденном снимке, в результатах поиска кликните на ссылку в пути размещения снимка.&lt;br /&gt;
:Найденный снимок откроется в [[Help:UI manual#Работа в режиме разметки|режиме разметки]] со всеми его маркерами.&lt;br /&gt;
&lt;br /&gt;
=== Просмотр истории поиска ===&lt;br /&gt;
Чтобы посмотреть историю поиска, нажмите кнопку '''История поиска''' в разделе '''Поиск'''.&lt;br /&gt;
&lt;br /&gt;
В истории отображаются 100 последних поисковых запросов пользователя.&lt;br /&gt;
[[File:186 Раздел Поиск. Пример истории поиска.png|thumb|none|upright=3|Раздел '''Поиск'''. Пример истории поиска]]&lt;br /&gt;
&lt;br /&gt;
Чтобы повторить поиск из истории, кликните на ссылку с поисковым запросом.&lt;br /&gt;
&lt;br /&gt;
== Настройка сервера Svacer ==&lt;br /&gt;
Перейти в раздел '''Настройки''' можно по нажатии кнопки [[File:Icon settings.png|x25px]] в верхней правой части экрана.&lt;br /&gt;
&lt;br /&gt;
В этом разделе пользователю, в зависимости от роли, доступны следующие функции:&lt;br /&gt;
* [[Help:UI manual#Управление пользователями, ролями и организациями|управление пользователями, ролями и организациями]];&lt;br /&gt;
* [[Help:UI manual#Настройка глобальных фильтров|настройка глобальных фильтров]];&lt;br /&gt;
* [[Help:UI manual#Управление блокировками разметки|управление блокировками]];&lt;br /&gt;
* [[Help:UI manual#Ведение журнала операций|ведение журнала операций]];&lt;br /&gt;
* [[Help:UI manual#Управление шаблонами разметки|управление шаблонами разметки]];&lt;br /&gt;
* [[Help:UI manual#Управление токенами доступа|управление токенами доступа]];&lt;br /&gt;
* [[Help:UI manual#Управление асинхронными задачами|управление асинхронными задачами]];&lt;br /&gt;
* [[Help:UI manual#Просмотр информации о сервере|просмотр информации о сервере]];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Управление пользователями, ролями и организациями===&lt;br /&gt;
==== Управление пользователями ====&lt;br /&gt;
Реестром учетных записей пользователей можно управлять на вкладке '''Пользователи''' в разделе '''Управление пользователями''' страницы '''Настройки'''.&amp;lt;br&amp;gt;&lt;br /&gt;
Для [[LDAP configuration|учетных записей с доступом по LDAP]] рядом с логином отображается индикатор [[File:Icon LDAP.png|x25px]], для учетных записей с доступом по OIDC рядом с логином отображается индикатор [[File:Icon_OIDC.png|x25px]], а для учетных записей с признаком '''Мастер разметки''' – индикатор [[File:Icon markup master.png|x25px]].&amp;lt;br&amp;gt;&lt;br /&gt;
В разделе доступны:&lt;br /&gt;
* поиск по атрибутам учётной записи пользователя;&lt;br /&gt;
* фильтрация списка по типам учётных записей:&lt;br /&gt;
:* все;&lt;br /&gt;
:* системные;&lt;br /&gt;
:* LDAP;&lt;br /&gt;
:* OIDC;&lt;br /&gt;
:* заблокированные;&lt;br /&gt;
:* активные;&lt;br /&gt;
:* по ролям;&lt;br /&gt;
:* по организациям.&lt;br /&gt;
* сортировка по колонкам '''Логин''', '''ФИО''' и '''Дата создания''' (по умолчанию).&lt;br /&gt;
:[[File:74 Вкладка Пользователи на странице Настройки.png|thumb|none|upright=3|Вкладка '''Пользователи''' в разделе '''Управление пользователями''' страницы '''Настройки''']]&lt;br /&gt;
Для управления пользователями:&lt;br /&gt;
:1. Создайте учетную запись пользователя:&lt;br /&gt;
::а) Нажмите кнопку '''Создать'''.&lt;br /&gt;
::Откроется окно добавления учетной записи пользователя.&lt;br /&gt;
::[[File:76 Окно Добавить пользователя.png|thumb|none|upright=1.5|Окно '''Создать пользователя''']]&lt;br /&gt;
::б) Заполните поля:&lt;br /&gt;
::* Логин;&lt;br /&gt;
::* Пароль;&lt;br /&gt;
::* e-mail;&lt;br /&gt;
::* ФИО.&lt;br /&gt;
::в) Выберите [[Help:UI manual#Управление организациями|организации]], в которые должен входить пользователь, а также назначьте ему [[Help:UI manual#Управление ролями|роли]] – выберите значения в раскрывающихся списках полей '''Организации''' и '''Роли''' соответственно. Для отмены выбора нажмите на кнопку [[File:Icon cancel.png|x25px]] справа от значения.&lt;br /&gt;
::г) Включите опции '''Изменить пароль при первом входе в систему''' и '''Мастер разметки'''.&amp;lt;br&amp;gt;&lt;br /&gt;
::{{Note|type=info|text=''Если для учётной записи активирована опция '''Мастер разметки''', есть разрешение на разметку и этот пользователь разметил маркер в каком-либо снимке, то изменить его разметку может только пользователь, в учётной записи которого также активирована опция '''Мастер разметки''' или которому предоставлен [[#Cерверные доступы|серверный доступ]] '''Изменение любой разметки'''.''}}&lt;br /&gt;
::д) Нажмите кнопку '''Создать'''.&lt;br /&gt;
: В таблице со списком пользователей добавится новая запись.&lt;br /&gt;
&lt;br /&gt;
:2. Воспользуйтесь функциями в строке учетной записи в крайнем правом столбце – нажмите кнопку [[File:Button menu.png|x25px]] и выберите пункт:&lt;br /&gt;
:* '''Редактировать''' – для перехода к редактированию данных профиля;&lt;br /&gt;
:* '''Изменить пароль''' – для перехода к изменению пароля;&lt;br /&gt;
:* '''Сбросить настройки пользователя''' – для возврата пользовательских настроек к их значениям по умолчанию;&lt;br /&gt;
:* '''Заблокировать''' – для блокировки учетной записи. В этом случае для учетной записи пользователя блокируется доступ к системе, а в списке рядом с логином учетной записи отображается индикатор [[File:Icon_Archived.png|x25px]];&lt;br /&gt;
:* '''Разблокировать''' – для восстановления доступа пользователя к системе;&lt;br /&gt;
:* '''Настройки уведомлений''' – для настройки уведомлений пользователя об операциях со снимками и маркерами – аналогично [[Help:UI manual#Настройка уведомлений|настройке уведомлений в меню пользователя]];&lt;br /&gt;
::[[File:219 Настройки Настройка уведомлений выбранного пользователя.png|thumb|none|upright=2|Настройки уведомлений выбранного пользователя]]&lt;br /&gt;
:* '''Удалить''' – для удаления учётной записи пользователя;&lt;br /&gt;
:* '''Показать доступы пользователя''' – для отображения списка объединенных доступов всех ролей, назначенных пользователю.&lt;br /&gt;
::[[File:113 Список доступов пользователя.png|thumb|none|upright=3|Список доступов пользователя]]&lt;br /&gt;
::{{Note|type=warn|text=''Функции блокировки и удаления недоступны для системных учетных записей. При изменении логина или списка доступов у авторизованного пользователя, он будет перенаправлен на страницу авторизации.''}}&lt;br /&gt;
&lt;br /&gt;
:3. Воспользуйтесь функциями управления несколькими учётными записями одновременно:&lt;br /&gt;
::а) Чтобы выбрать несколько записей, установите флажки в первом столбце списка пользователей.&lt;br /&gt;
::б) Чтобы выбрать все отображаемые учётные записи, установите один флажок в заголовке столбцов в первом столбце списка.&lt;br /&gt;
::в) Нажмите кнопку '''Действия''' в верхней части списка пользователей и выберите пункт: '''Сбросить настройки пользователя''', '''Заблокировать''', '''Разблокировать''' или '''Удалить'''. В списке активны только действия, доступные всем выбранным учетным записям.&lt;br /&gt;
:4. Для [[LDAP configuration|учетной записи с доступом по LDAP]] обновите данные – в окне редактирования данных профиля пользователя нажмите кнопку '''Загрузить из LDAP'''.&lt;br /&gt;
:Загрузятся параметры профиля пользователя и его контакты из профиля в службе каталогов, если они там указаны.&lt;br /&gt;
:[[File:78 Загрузка данных из LDAP.png|thumb|none|upright=1.5|Загрузка данных из LDAP]]&lt;br /&gt;
&lt;br /&gt;
==== Управление ролями ====&lt;br /&gt;
Реестром ролей можно управлять на вкладке '''Роли''' в разделе '''Управление пользователями''' страницы '''Настройки'''.&lt;br /&gt;
[[File:79 Переход к управлению ролями.png|thumb|none|upright=3|Вкладка '''Роли''' в разделе '''Управление пользователями''' страницы '''Настройки''']]&lt;br /&gt;
{{Note|type=info|text=''Роли [[Help:UI manual#Описание ролевой модели|admin, filter_master и importer]] являются встроенными с особым значением. Их нельзя удалить или изменить.''}}&lt;br /&gt;
&lt;br /&gt;
Доступен поиск по названию роли и сортировка по колонкам '''Название''' (по умолчанию) и '''Пользователи'''. &amp;lt;br&amp;gt;&lt;br /&gt;
Для управления ролями доступны следующие функции:&lt;br /&gt;
:1. Создание новой роли:&lt;br /&gt;
::а) Нажмите кнопку '''Создать'''.&lt;br /&gt;
::[[File:81 Окно добавления роли.png|thumb|none|upright=3|Окно добавления роли]]&lt;br /&gt;
::б) Заполните поля появившейся формы:&lt;br /&gt;
:::*введите название роли;&lt;br /&gt;
:::*в блоке '''Серверные доступы''' выберите доступы – нажмите кнопку '''Выбрать всё''' или установите флажки для активации доступов.&lt;br /&gt;
:::При наведении курсора на иконку [[File:Icon question mark2.png|x25px]] отображается пояснение к доступу.&lt;br /&gt;
:::*в блоке '''Проектные доступы''' выберите тип доступа: группа проектов или определённый проект или его ветка;&lt;br /&gt;
:::*если выбран тип '''Группа проектов''', выберите название группы и установите флажки для активации доступов;&lt;br /&gt;
:::*если выбран тип '''Проект / Ветка''', выберите название проекта или ветки проекта, установите флажки для активации доступов.&lt;br /&gt;
:::Если выбрано значение '''Все''', то доступы будут предоставлены для всех проектов;&lt;br /&gt;
:::*для удаления строки с проектными доступами в блоке '''Проектные доступы''' нажмите кнопку [[File:Icon delete.png|x25px]] в крайнем правом столбце.&lt;br /&gt;
::в) Нажмите кнопку '''Создать'''.&lt;br /&gt;
&lt;br /&gt;
:2.	Просмотр доступов роли, нажмите на ссылку '''Показать доступы''' в столбце '''Доступы'''.&lt;br /&gt;
:[[File:114 Список доступов роли.png|thumb|none|upright=3|Список доступов роли]]&lt;br /&gt;
&lt;br /&gt;
:3.	Редактирование роли:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке роли в крайнем правом столбце.&lt;br /&gt;
::б) В меню выберите пункт '''Редактировать''' и внесите изменения.&lt;br /&gt;
&lt;br /&gt;
:4.	Создание копии роли:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке исходной роли в крайнем правом столбце.&lt;br /&gt;
::б) В меню выберите пункт '''Создать копию'''.&lt;br /&gt;
:В реестр ролей добавится новая запись с именем исходной роли и добавленным порядковым номером копии.&lt;br /&gt;
&lt;br /&gt;
:5.	Просмотр информации о роли в JSON-формате:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке исходной роли в крайнем правом столбце.&lt;br /&gt;
::б) В меню выберите пункт '''Просмотреть JSON'''.&lt;br /&gt;
&lt;br /&gt;
:6.	Удаление роли:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке исходной роли в крайнем правом столбце.&lt;br /&gt;
::б) В меню выберите пункт '''Удалить'''.&lt;br /&gt;
::в) Подтвердите удаление.&lt;br /&gt;
&lt;br /&gt;
:7.	Удаление несколько ролей одновременно:&lt;br /&gt;
::а) Для выбора нескольких записей установите флажки в первом столбце списка ролей.&lt;br /&gt;
::б) Чтобы выбрать все записи, установите один флажок в заголовке столбцов в первом столбце списка ролей.&lt;br /&gt;
::в) Нажмите кнопку '''Удалить''' и подтвердите удаление.&lt;br /&gt;
&lt;br /&gt;
==== Управление организациями ====&lt;br /&gt;
Пользователи могут быть связаны с организациями. Один пользователь может принадлежать нескольким организациям. Организации носят информационный характер и не влияют на права пользователей в системе. &amp;lt;br&amp;gt;&lt;br /&gt;
Реестром организаций можно управлять на вкладке '''Организации''' в разделе '''Управление пользователями''' страницы '''Настройки'''. &lt;br /&gt;
[[File:92 Вкладка Организации на странице Настройки.png|thumb|none|upright=3|Вкладка '''Организации''' в разделе '''Управление пользователями''' страницы '''Настройки''']]&lt;br /&gt;
Доступен поиск по названию и сокращенному названию организации и сортировка по колонкам '''Название''' (по умолчанию), '''Сокращенное название''' и '''Пользователи'''. &lt;br /&gt;
Для управления организациями, доступны следующие функции:&lt;br /&gt;
:1.	Создание организации: &lt;br /&gt;
::а) Нажмите кнопку '''Создать'''.&lt;br /&gt;
::б) Заполните поля появившейся формы.&lt;br /&gt;
::в) Нажмите кнопку '''Создать'''.&lt;br /&gt;
::[[File:93 Окно добавления организации в реестр.png|thumb|none|upright=1.5|Окно добавления организации в реестр]]&lt;br /&gt;
&lt;br /&gt;
:2.	Редактирование организации: &lt;br /&gt;
::а) Нажмите кнопку [[File:Icon edit2.png|x25px]] в крайнем правом столбце.&lt;br /&gt;
::б) В появившейся форме отредактируйте данные организации.&lt;br /&gt;
::в) Нажмите кнопку '''Сохранить'''.&lt;br /&gt;
&lt;br /&gt;
:3.	Удаление организации: &lt;br /&gt;
::а) Нажмите кнопку [[File:Icon delete.png|x25px]] в крайнем правом столбце.&lt;br /&gt;
::б) В появившемся диалоге подтвердите удаление, нажав на кнопку '''Удалить'''.&lt;br /&gt;
&lt;br /&gt;
:4.	Удаление несколько организаций одновременно:&lt;br /&gt;
::а) Для выбора нескольких записей установите флажки в первом столбце списка организаций.&lt;br /&gt;
::б) Чтобы выбрать все организации, установите один флажок в заголовке столбцов в первом столбце списка.&lt;br /&gt;
::в) Нажмите кнопку '''Удалить''' и подтвердите удаление.&lt;br /&gt;
&lt;br /&gt;
=== Настройка глобальных фильтров ===&lt;br /&gt;
В разделе '''Глобальные фильтры''' страницы '''Настройки''' можно настроить глобальные фильтры, применительно [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|к выбранным проекту или ветке проекта]]:&amp;lt;br&amp;gt;&lt;br /&gt;
{{Note|type=info|text=''По умолчанию выбран контекст (проект, ветка), заданный ранее в режиме '''Разметка''', или '''Код'''.''}}&lt;br /&gt;
[[File:82 Вкладка Фильтры на странице Настройки.png|thumb|none|upright=4|Раздел '''Глобальные фильтры''' на странице '''Настройки''']]&lt;br /&gt;
&lt;br /&gt;
В разделе доступен поиск по названию фильтра.&lt;br /&gt;
&lt;br /&gt;
Для настройки фильтров:&lt;br /&gt;
:1. Выберите проект и ветку в верхней строке раздела. По умолчанию указаны проект и ветка, выбранные в разделе '''Разметка'''.&lt;br /&gt;
:2. Чтобы добавить фильтр, нажмите кнопку '''Создать'''.&lt;br /&gt;
:Отобразится новая строка:&lt;br /&gt;
:[[File:83 Новая строка с фильтром.png|thumb|none|upright=4|Новая строка с фильтром]]&lt;br /&gt;
&lt;br /&gt;
:3. Чтобы изменить настройки фильтров:&lt;br /&gt;
::а) Введите или поменяйте название фильтра&lt;br /&gt;
::б) Включите или выключите фильтр – нажмите на значение в столбце '''Статус''', чтобы отобразилась иконка [[File:Icon check2.png|x25px]] (по умолчанию) или [[File:Icon cross 01.png|x25px]].&lt;br /&gt;
::в) Выберите область применения фильтра – нажмите на значение в столбце '''Область''' один или два раза, чтобы отобразилось значение '''ветка''' или '''проект'''.&lt;br /&gt;
::г) Введите [[Help:UI manual#Использование регулярных выражений|регулярное выражение]] или загрузите его из файла в столбцах '''Включить пути по шаблону''', '''Исключить пути по шаблону''' и '''Детекторы'''.&lt;br /&gt;
::{{Note|type=info|text=''Шаблоны регулярных выражений не зависят от регистра и поддерживают следующий синтаксис:''&lt;br /&gt;
:* ''; – для разделения списков значений;''&lt;br /&gt;
:* ''* – любое количество символов;''&lt;br /&gt;
:* ''? – один произвольный символ;''&lt;br /&gt;
:* ''re: – включая значения, определяемые регулярным выражением;''&lt;br /&gt;
:* ''re!: – исключая значения, определяемые регулярным выражением (только для столбца '''Детекторы''').''}}&lt;br /&gt;
::д) Выберите уровни серьезности (критичности) и надежности:&lt;br /&gt;
::* [[File:Icon_critical_on.png|x30px]] – уровень выбран;&lt;br /&gt;
::* [[File:Icon_critical_off.png|x30px]] – уровень не выбран.&lt;br /&gt;
::Для изменения выбора нажмите на название уровня.&lt;br /&gt;
:4. Нажмите кнопку [[File:Icon delete.png|x25px]] в крайнем правом столбце, чтобы удалить один фильтр.&lt;br /&gt;
:5. Чтобы удалить несколько фильтров:&lt;br /&gt;
::а) Для выбора нескольких записей установите флажки в первом столбце списка фильтров.&lt;br /&gt;
::б) Чтобы выбрать все записи, установите один флажок в заголовке столбцов в первом столбце списка фильтров.&lt;br /&gt;
::в) Нажмите кнопку '''Удалить'''.&lt;br /&gt;
:6.	Для сохранения и применения изменений нажмите кнопку '''Применить'''.&lt;br /&gt;
Если не применить изменения, то при переходе в другой раздел системы отобразится сообщение о том, что изменения не применены:&lt;br /&gt;
:[[File:115 Запрос на изменение глобальных фильтров.png|thumb|none|upright=1.5]]&lt;br /&gt;
&lt;br /&gt;
:{{Note|type=warn|text=''После применения глобальных фильтров пользователям, у которых в режиме разметки открыт данный контекст, требуется перезагрузить страницу (нажать клавишу F5) для обновления списка маркеров.''}}&lt;br /&gt;
&lt;br /&gt;
=== Управление блокировками разметки ===&lt;br /&gt;
Чтобы посмотреть список всех [[Help:UI manual#Блокировка разметки|блокировок]], перейдите на вкладку '''Блокировки''' страницы '''Настройки''':&lt;br /&gt;
[[File:61 Просмотр всех блокировок.png|800px|thumb|none|Раздел '''Блокировки''' страницы '''Настройки''']]&lt;br /&gt;
{{Note|type=info|text=''Пользователю отображается  список блокировок в контейнерах, к которым у него есть доступ. Удаление не своих блокировок доступно пользователям с соответствующим доступом.''}}&lt;br /&gt;
&lt;br /&gt;
Доступен поиск по контейнерам, заблокированным сущностям и пользователям, сортировка по всем колонкам (по умолчанию – сортировка по дате).&lt;br /&gt;
&lt;br /&gt;
Для удаления одной блокировки:&lt;br /&gt;
:1.	Нажмите кнопку [[File:Icon delete.png|x25px]] в строке проекта в крайнем правом столбце.&lt;br /&gt;
:2.	Подтвердите удаление.&lt;br /&gt;
Для удаления нескольких блокировок:&lt;br /&gt;
:1.	Чтобы выбрать для удаления все блокировки, установите флажок в заголовке табличного списка.&lt;br /&gt;
:2.	Чтобы выбрать несколько блокировок, установите флажки в крайнем правом столбце табличного списка.&lt;br /&gt;
:3.	Нажмите кнопку '''Удалить''' в верхней части списка.&lt;br /&gt;
&lt;br /&gt;
=== Ведение журнала операций ===&lt;br /&gt;
В разделе '''Журнал операций''' страницы '''Настройки''' доступны просмотр и откат выполнения групповых операций по разметке и комментированию маркеров, таких как импорт разметки, копирование разметки, импорт снимков и т. п.&lt;br /&gt;
[[File:206 Настройки. Журнал операций.png|800px|thumb|none|Раздел '''Журнал операций''' на странице '''Настройки''']]&lt;br /&gt;
В разделе доступны:&lt;br /&gt;
* поиск по названию контейнера, типу операции и её описанию;&lt;br /&gt;
* фильтрация списка:&lt;br /&gt;
** по статусу операции: '''Applied''', '''Reverted''', '''Invalid''';&lt;br /&gt;
** типу операции;&lt;br /&gt;
** генератору операции;&lt;br /&gt;
** автору операции;&lt;br /&gt;
** диапазону дат создания операции;&lt;br /&gt;
* сортировка по всем колонкам, кроме '''Описание'''.&lt;br /&gt;
&lt;br /&gt;
Чтобы откатить выполнение операции, нажмите кнопку [[File:Icon return.png|x25px]] в строке и подтвердите действие в открывшемся окне.&lt;br /&gt;
{{Note|type=warn|text=''Откат своих операций доступен пользователям с [[#Проектные доступы|проектными доступами]] '''Разметка маркеров''' и '''Импорт разметки'''.&amp;lt;br&amp;gt;Откат операций других пользователей доступен пользователям с [[#Проектные доступы|проектным доступом]] '''Разметка маркеров''' и [[#Серверные доступы|серверным доступом]] '''Администрирование сервера''' или серверным доступами '''Изменение любой разметки''' и '''Изменение любых комментариев'''.''}}&lt;br /&gt;
&lt;br /&gt;
=== Управление шаблонами разметки ===&lt;br /&gt;
Управление шаблонами разметки доступно в разделе '''Шаблоны разметки''' страницы '''Настройки''':&lt;br /&gt;
[[File:84 Вкладка Шаблоны на странице Настройки.png|thumb|none|upright=3|Раздел '''Шаблоны разметки''' на странице '''Настройки''']]&lt;br /&gt;
&lt;br /&gt;
Шаблоны разметки нужны для [[Help:UI manual#Импорт разметки|импорта]]/[[Help:UI manual#Экспорт разметки|экспорта разметки]]. С их помощью комментарии в исходном коде будут преобразовываться в разметку на сервере истории и обратно.&lt;br /&gt;
&lt;br /&gt;
Шаблон с именем DEFAULT есть всегда, его нельзя отредактировать или удалить.&lt;br /&gt;
&lt;br /&gt;
{{Note|type=info|text=''Для корректного создания или изменения шаблонов разметки следует обратиться к разработчикам Svacer.''}}&lt;br /&gt;
&lt;br /&gt;
Для управления шаблонами:&lt;br /&gt;
:1. Нажмите кнопку '''Создать'''.&lt;br /&gt;
:Откроется окно создания шаблона.&lt;br /&gt;
:[[File:Добавление шаблона разметки.png|thumb|none|upright=1.5|Окно создания шаблона разметки]]&lt;br /&gt;
:2. Введите название шаблона.&lt;br /&gt;
:3. Нажмите кнопку '''Создать'''.&lt;br /&gt;
:Шаблон появится в списке шаблонов для разметки в правой панели формы&lt;br /&gt;
:4. Отредактируйте поля шаблона разметки:&lt;br /&gt;
:[[File:85 Поля шаблона, доступные для редактирования.png|thumb|none|upright=2.5|Редактирование шаблона разметки]]&lt;br /&gt;
:5. Нажмите '''Сохранить'''.&lt;br /&gt;
:6. Чтобы клонировать существующий шаблон разметки, нажмите кнопку [[File:Icon_clone.png|x20px]] в правой части строки шаблона в списке.&lt;br /&gt;
:7. Для удаления одного шаблона:&lt;br /&gt;
::а) Нажмите кнопку [[File:Icon delete.png|x25px]] в правой части строки шаблона в списке.&lt;br /&gt;
::б) Подтвердите удаление.&lt;br /&gt;
:8. Для удаления нескольких шаблонов:&lt;br /&gt;
::а) Выберите шаблоны для удаления – установите флажки в левой части названий шаблонов или нажмите кнопку '''Выбрать всё'''.&lt;br /&gt;
::б) Нажмите кнопку '''Удалить''' в верхней части списка шаблонов и подтвердите удаление.&lt;br /&gt;
&lt;br /&gt;
=== Управление токенами доступа ===&lt;br /&gt;
Управление персональными токенами доступа выполняется в разделе '''Токены доступа''' на странице '''Настройки'''. &lt;br /&gt;
[[File:207 Настройки. Токены доступа.png|800px|thumb|none|Раздел '''Токены доступа''' на странице '''Настройки''']]&lt;br /&gt;
В разделе доступны:&lt;br /&gt;
* поиск по названию токена и его описанию, а также по логину пользователя;&lt;br /&gt;
* сортировка по всем колонкам, кроме '''Описание'''.&lt;br /&gt;
Для управления токенами доступа:&lt;br /&gt;
:1. Создайте токен:&lt;br /&gt;
::а) Нажмите кнопку '''Создать'''.&lt;br /&gt;
::б) В окне '''Создать токен доступа''' введите название и, опционально, описание токена; выберите срок действия. &lt;br /&gt;
::По умолчанию срок действия токена 90 дней (минимальный срок 1 день, максимальный – 365).&lt;br /&gt;
::в) Нажмите кнопку '''Создать'''.&lt;br /&gt;
::[[File:208 Окно Создание токена доступа.png|thumb|none|upright=1.5|Окно '''Создать токен доступа''']]&lt;br /&gt;
::Отобразится окно с токеном доступа.&lt;br /&gt;
::{{Note|type=warn|text=''Токен отображается только один раз – при создании''}}&lt;br /&gt;
::[[File:209 Токен доступа.png|thumb|none|upright=1.5|Пример токена]]&lt;br /&gt;
::г) Нажмите кнопку '''Скопировать в буфер обмена''' и сохраните токен в надежном месте.&lt;br /&gt;
:2. Для удаления одного токена:&lt;br /&gt;
::а) Нажмите кнопку [[File:Icon delete.png|x25px]] в крайнем правом столбце.&lt;br /&gt;
::б) Подтвердите удаление.&lt;br /&gt;
:3. Для удаления нескольких токенов:&lt;br /&gt;
::а) Чтобы выбрать для удаления все токены, установите флажок в заголовке табличного списка.&lt;br /&gt;
::б) Чтобы выбрать несколько токенов, установите флажки в крайнем правом столбце табличного списка.&lt;br /&gt;
::в) Нажмите кнопку '''Удалить''' в верхней части табличного списка токенов и подтвердите удаление.&lt;br /&gt;
&lt;br /&gt;
=== Управление асинхронными задачами ===&lt;br /&gt;
К асинхронным задачам относятся:&lt;br /&gt;
* экспорт snap и SARIF файлов (в режиме [[Help:UI manual#Экспорт|'''Разметки''']] и в разделе [[Help:UI manual#Работа со снимками|'''Проекты''']]);&lt;br /&gt;
* копирование снимков (см. раздел 4.6.4). &lt;br /&gt;
Управление этими задачами выполняется разделе '''Асинхронные задачи''' на странице '''Настройки'''. &lt;br /&gt;
&lt;br /&gt;
В разделе доступны:&lt;br /&gt;
* поиск по идентификатору задачи, её типу, описанию, статусу, а также по логину пользователя;&lt;br /&gt;
* фильтрация списка:&lt;br /&gt;
:* по статусу;&lt;br /&gt;
:* типу задачи;&lt;br /&gt;
:* пользователю;&lt;br /&gt;
:* диапазону дат старта и окончания выполнения задачи;&lt;br /&gt;
* сортировка по всем колонкам, кроме '''Описание'''.&lt;br /&gt;
[[File:342 Настройки. Асинхронные задачи.png|800px|thumb|none|Раздел '''Асинхронные задачи''' на странице '''Настройки''']]&lt;br /&gt;
&lt;br /&gt;
Для управления асинхронными задачами:&lt;br /&gt;
:1. Чтобы посмотреть лог выполнения задачи, нажмите кнопку в крайнем правом столбце.&lt;br /&gt;
:Откроется окно с текстом лога (Рисунок 205).&lt;br /&gt;
:[[File:343 Окно с текстом лога асинхронной задачи.png|600px|thumb|none|Окно с текстом лога асинхронной задачи]]&lt;br /&gt;
:2. Чтобы скачать лог, нажмите кнопку в крайнем правом столбце или откройте окно с текстом лога и нажмите кнопку '''Скачать лог'''.&lt;br /&gt;
:3. Для удаления истории об одной задаче:&lt;br /&gt;
::а) Нажмите кнопку [[File:Icon delete.png|x25px]] в строке задачи в крайнем правом столбце.&lt;br /&gt;
::б) Подтвердите удаление.&lt;br /&gt;
:4. Для удаления истории о нескольких задачах:&lt;br /&gt;
::а) Чтобы выбрать для удаления все задачи, установите флажок в заголовке табличного списка.&lt;br /&gt;
::б) Чтобы выбрать несколько задач, установите флажки в крайнем правом столбце табличного списка.&lt;br /&gt;
::в) Нажмите кнопку '''Удалить''' в верхней части списка.&lt;br /&gt;
&lt;br /&gt;
=== Просмотр информации о сервере ===&lt;br /&gt;
В разделе '''Информация о сервере''' на странице '''Настройки''' отображаются вкладки:&lt;br /&gt;
* '''Параметры''' – параметры, с которыми запущен сервер;&lt;br /&gt;
* '''Системный лог''' – журнал событий сервера;&lt;br /&gt;
* '''Системный журнал''' – журнал базы данных.&lt;br /&gt;
[[File:344 Настройки. Информация о сервере. Вкладка Параметры.png|thumb|none|upright=3|Раздел '''Информация о сервере''' на странице '''Настройки'''. Вкладка '''Параметры''']]&lt;br /&gt;
[[File:345 Настройки. Информация о сервере. Вкладка Системный лог.png|thumb|none|upright=3|Раздел '''Информация о сервере''' на странице '''Настройки'''. Вкладка '''Системный лог''']]&lt;br /&gt;
[[File:346 Настройки. Информация о сервере. Вкладка Системный журнал.png|thumb|none|upright=3|Раздел '''Информация о сервере''' на странице '''Настройки'''. Вкладка '''Системный журнал''']]&lt;br /&gt;
&lt;br /&gt;
{{Note|type=warn|text=''На вкладке '''Системный лог''' вывод информации ограничен 1 МБ последних данных (значение настраивается в параметрах сервера). При скачивании файл содержит данные лога в полном объеме.''}} &lt;br /&gt;
 &lt;br /&gt;
Доступны функции:&lt;br /&gt;
* поиск параметров по их имени и значению – на вкладке '''Параметры''';&lt;br /&gt;
* копирование записей – на вкладках '''Системный лог''' и '''Системный журнал'''; &lt;br /&gt;
* выгрузка лога в файлы в формате .log по нажатии кнопки '''Скачать''' – на вкладках '''Системный лог''' и '''Системный журнал'''.&lt;br /&gt;
&lt;br /&gt;
== Выход из системы ==&lt;br /&gt;
Для выхода из системы выберите пункт '''Выйти''' в меню пользователя в правом верхнем углу экрана.&lt;br /&gt;
[[File:95 Выход из системы —без VSCode.png|thumb|none|upright=1.5|Выход из системы]]&lt;br /&gt;
&lt;br /&gt;
== Использование регулярных выражений ==&lt;br /&gt;
Регулярные выражения можно использовать:&lt;br /&gt;
* для поиска и фильтрации данных [[Help:UI manual#Функции навигационной панели|в навигационной панели]] [[Help:UI manual#Вкладка «Файлы»|на вкладке '''Файлы''']];&lt;br /&gt;
* в окне настройки [[Help:UI manual#Настройка и использование пользовательских фильтров|пользовательских фильтров]] в блоке '''Файлы''';&lt;br /&gt;
* при [[Help:UI manual#Экспорт исходного кода с разметкой|экспорте кода с разметкой]]; &lt;br /&gt;
* при [[Help:UI manual#Настройка глобальных фильтров|настройке глобальных фильтров]];&lt;br /&gt;
* в полях [[Help:UI manual#Глобальный поиск|глобального поиска]].&lt;br /&gt;
&lt;br /&gt;
Особенности реализации:&lt;br /&gt;
:1. Поиск происходит только по регулярному выражению. Если требуется найти специальный символ в качестве обычного символа, его нужно экранировать (например, точку: &amp;lt;code&amp;gt;\.&amp;lt;/code&amp;gt;)&lt;br /&gt;
:2. При поиске находятся вхождения подстроки в полном пути к файлу (аналогично grep). Если требуется найти по полной строке, используйте символы начала и конца строки: &amp;lt;code&amp;gt;^&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt;&lt;br /&gt;
:3. Поиск не зависит от регистра символов (case insensitive) и поддерживает следующий синтаксис:&lt;br /&gt;
::* ; – для разделения списков значений;&lt;br /&gt;
::* * – любое количество символов;&lt;br /&gt;
::* ? – один произвольный символ.&lt;br /&gt;
:В окне настройки [[Help:UI manual#Настройка и использование пользовательских фильтров|пользовательских фильтров]]  в блоке '''Файлы''' можно применить фильтр как для отображения только маркеров из файлов, которые подходят под паттерн, так и для скрытия таких маркеров. Для переключения между этими режимами используйте кнопки [[File:Icon plus 2.png|x20px]] и [[File:Icon minus 3.png|x20px]], которые расположены рядом с полем ввода. В остальных частях интерфейса следует использовать теги re: и re!:&lt;br /&gt;
&lt;br /&gt;
Примеры регулярных выражений при поиске файлов на вкладке '''Файлы''' или в пользовательском фильтре:&lt;br /&gt;
:1. Поиск файлов с текстом &amp;lt;code&amp;gt;sha&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;md5&amp;lt;/code&amp;gt; в любом месте пути или имени файла:&lt;br /&gt;
:&amp;lt;pre&amp;gt;sha|md5&amp;lt;/pre&amp;gt;&lt;br /&gt;
:2. Отображение только маркеров из файлов с расширением .c:&lt;br /&gt;
:&amp;lt;pre&amp;gt;.*\.c$&amp;lt;/pre&amp;gt;&lt;br /&gt;
:3. Скрытие маркеров из файлов, имя которых начинается с символа &amp;lt;code&amp;gt;q&amp;lt;/code&amp;gt; и которые имеют расширения .с или .сс:&lt;br /&gt;
::а) Используйте выражение &amp;lt;code&amp;gt;/q[^/]*\.c$|/q[^/]*\.cc$&amp;lt;/code&amp;gt;&lt;br /&gt;
::б) Нажмите кнопку [[File:Icon plus 2.png|x20px]] рядом с полем ввода, чтобы она поменялась на [[File:Icon minus 3.png|x20px]]&lt;br /&gt;
:4. Отображение только маркеров из файлов, которые имеют текст &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt; в конце имени файла и с расширением из одного символа:&lt;br /&gt;
:&amp;lt;pre&amp;gt;/.*string\..$&amp;lt;/pre&amp;gt;&lt;br /&gt;
:5. Скрытие маркеров из файлов в директориях &amp;lt;code&amp;gt;asn1&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;pem&amp;lt;/code&amp;gt;:&lt;br /&gt;
::а) Используйте выражение &amp;lt;code&amp;gt;/asn1/|/pem/&amp;lt;/code&amp;gt;&lt;br /&gt;
::б) Нажмите кнопку [[File:Icon plus 2.png|x20px]] рядом с полем ввода, чтобы она поменялась на [[File:Icon minus 3.png|x20px]]&lt;br /&gt;
:6. Отображение только маркеров из файлов, которые имеют в имени три цифры подряд:&lt;br /&gt;
:&amp;lt;pre&amp;gt;.*/.*[0-9]{3}[^/]*$&amp;lt;/pre&amp;gt;&lt;br /&gt;
:где &amp;lt;code&amp;gt;[^/]*$&amp;lt;/code&amp;gt; означает, что после трех цифр и до конца строки может встречаться любой символ, кроме &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;. Это позволяет исключить директории, имеющие три цифры в названии.&lt;br /&gt;
&lt;br /&gt;
== Описание ролевой модели ==&lt;br /&gt;
=== Серверные доступы ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Полномочие (доступ) !! Описание !! Влияние на графический интерфейс !! admin !! filter_master !! importer &lt;br /&gt;
|-&lt;br /&gt;
| Создание проектов &lt;br /&gt;
|| Создание и клонирование проектов. Пользователь, создавший проект, имеет полный доступ к управлению этим проектом &lt;br /&gt;
|| Наличие полномочия делает доступным: &lt;br /&gt;
* раздел [[Help:UI manual#Управление проектами и группами проектов|'''Проекты''']]; &lt;br /&gt;
*  кнопку '''Создать проект'''; &lt;br /&gt;
*  форму создания, клонирования и редактирования проекта.&lt;br /&gt;
&lt;br /&gt;
Наличие доступа предоставляет автору проекта полные права на управление своими проектами, включая разметку (даже при отсутствии у него соответствующего проектного доступа), а также позволяет удалять приложения к снимкам в созданных проектах  &lt;br /&gt;
|| + || – || – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Настройка групп проектов	&lt;br /&gt;
|| Создание, редактирование и удаление групп проектов	&lt;br /&gt;
|| Наличие полномочия делает доступным:&lt;br /&gt;
* раздел [[Help:UI manual#Управление проектами и группами проектов|'''Проекты''']] с кнопкой для перехода к настройке групп;&lt;br /&gt;
* панель [[Help:UI manual#Работа с группами проектов|'''Группы проектов''']] с полным списком проектов в группах.&lt;br /&gt;
Наличие доступа предоставляет права на просмотр маркеров во всех проектах	&lt;br /&gt;
|| + || – || – &lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| Управление пользователями	&lt;br /&gt;
|| Создание, редактирование и удаление пользователей	&lt;br /&gt;
|| Наличие полномочия делает доступной вкладку [[Help:UI manual#Управление пользователями|'''Пользователи''']] в разделе [[Help:UI manual#Управление пользователями, ролями и организациями|'''Настройки – Управление пользователями''']] со всеми функциями управления учетными записями пользователей	&lt;br /&gt;
|| + || – || – &lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| Управление ролями	&lt;br /&gt;
|| Создание, редактирование и удаление ролей	&lt;br /&gt;
|| Наличие полномочия делает доступной вкладку [[Help:UI manual#Управление ролями|'''Роли''']] в разделе [[Help:UI manual#Управление пользователями, ролями и организациями|'''Настройки – Управление пользователями''']] со всеми функциями управления ролями	&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Управление организациями	&lt;br /&gt;
|| Создание, редактирование и удаление организаций	&lt;br /&gt;
|| Наличие полномочия делает доступной вкладку [[Help:UI manual#Управление организациями|'''Организации''']] в разделе [[Help:UI manual#Управление пользователями, ролями и организациями|'''Настройки – Управление пользователями''']] со всеми функциями управления организациями	&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Управление шаблонами разметки	&lt;br /&gt;
|| Создание, редактирование и удаление шаблонов разметки	&lt;br /&gt;
|| Наличие полномочия делает доступным раздел [[Help:UI manual#Управление шаблонами разметки|'''Настройки – Шаблоны разметки''']] со всеми функциями управления учетными записями шаблонами	&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Удаление блокировок	&lt;br /&gt;
|| Просмотр и удаление блокировок всех пользователей	&lt;br /&gt;
|| Наличие полномочия позволяет просматривать и удалять блокировки всех пользователей в разделе [[Help:UI manual#Управление блокировками разметки|'''Настройки – Блокировки''']]&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Администрирование сервера	&lt;br /&gt;
|| Просмотр настроек сервера, системных лог-файлов и выполнение операций по администрированию сервера Svacer, включая активацию лицензии	&lt;br /&gt;
|| Наличие полномочия делает доступным раздел [[Help:UI manual#Просмотр информации о сервере|'''Настройки – Информация о сервере''']]&lt;br /&gt;
Совместно с проектными доступами '''Управление ветками''' и снимками и '''Разметка маркеров''' становится доступна функция очистки разметки и комментариев в ветке&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Управление публичными фильтрами	&lt;br /&gt;
|| Публикация, редактирование и удаление публичных фильтров	&lt;br /&gt;
|| Наличие полномочия позволяет публиковать сохраненные фильтры, а также редактировать и удалять публичные фильтры&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Изменение любой разметки	&lt;br /&gt;
|| Изменение любой разметки маркеров, включая выполненную пользователями с признаком [[Help:UI manual#Управление пользователями, ролями и организациями|'''Мастер разметки''']]&lt;br /&gt;
|| Доступ позволяет переразмечать маркеры (добавлять новую разметку), которые разметили любые пользователи, в том числе те, для которых активирована опция [[Help:UI manual#Управление пользователями, ролями и организациями|'''Мастер разметки''']].&lt;br /&gt;
При этом:&lt;br /&gt;
# Полномочие не предоставляет доступ ко всем проектам. Т. е. пользователь с таким полномочием может изменять разметку только в проектах, к которым у него имеется доступ.&lt;br /&gt;
# Для переразметки маркеров пользователю должен быть предоставлен проектный доступ '''Разметка маркеров'''.&lt;br /&gt;
# Чтобы переразметить заблокированный маркер, сначала нужно [[Help:UI manual#Блокировка разметки маркеров|снять его блокировку]]&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Изменение любых комментариев	&lt;br /&gt;
|| Редактирование и удаление любых пользовательских комментариев к маркерам	&lt;br /&gt;
|| Доступ позволяет изменять/удалять комментарии, которые создали любые пользователи, в том числе те, для которых активирована опция [[Help:UI manual#Управление пользователями, ролями и организациями|'''Мастер разметки''']].&lt;br /&gt;
При этом:&lt;br /&gt;
# Полномочие не предоставляет доступ ко всем проектам. Т. е. пользователь с таким полномочием может изменять разметку только в проектах, к которым у него имеется доступ.&lt;br /&gt;
# Для добавления комментариев пользователю должно быть предоставлено проектное полномочие '''Разметка маркеров'''.&lt;br /&gt;
# Чтобы поменять комментарий к заблокированному маркеру, сначала нужно [[Help:UI manual#Блокировка разметки маркеров|снять его блокировку]]&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Создание резервных копий	&lt;br /&gt;
|| Создание, просмотр и восстановление резервных копий в интерфейсе командной строки	&lt;br /&gt;
|| – 	&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Запуск скриптов	&lt;br /&gt;
|| Запуск скриптов (hooks) по кнопке, расположенной на вкладке '''Подробности''' в правой панели, содержащей информацию о маркере	&lt;br /&gt;
|| Наличие полномочия добавляет строку '''Хуки''' на вкладке '''Подробности''' правой панели с возможностью запуска скриптов&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Проектные доступы===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Полномочие (доступ) !! Описание !! Влияние на графический интерфейс !! admin !! filter_master !! importer &lt;br /&gt;
|-&lt;br /&gt;
| Управление проектом и его ветками	&lt;br /&gt;
|| Редактирование и удаление проекта, включая операции по управлению ветками и снимками проекта, настройке глобальных фильтров, импорту/экспорту разметки и просмотру маркеров	&lt;br /&gt;
|| Наличие полномочия делает доступным:&lt;br /&gt;
* раздел [[Help:UI manual#Управление проектами и группами проектов|'''Проекты''']];&lt;br /&gt;
* все функции управления проектом (проектами в группе) и его содержимым (за исключением разметки маркеров) – т. е. все операции с проектом, ветками и снимками.&lt;br /&gt;
Наличие полномочия позволяет удалять приложения к снимкам и экспортировать разметку с исходным кодом&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Управление ветками и снимками	&lt;br /&gt;
|| Редактирование и удаление ветки проекта, включая операции по управлению снимками, настройке глобальных фильтров, импорту/экспорту разметки и просмотру маркеров	&lt;br /&gt;
|| Наличие полномочия делает доступным:&lt;br /&gt;
* раздел [[Help:UI manual#Управление проектами и группами проектов|'''Проекты''']];&lt;br /&gt;
* все функции управления веткой и снимками проекта (за исключением разметки маркеров) – т. е. доступны все операции с веткой и снимками, но не операции управления проектом.&lt;br /&gt;
Наличие полномочия позволяет удалять приложения к снимкам и экспортировать разметку с исходным кодом.&lt;br /&gt;
Запрещено клонировать ветку при наличии доступа только к этой ветке	&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Настройка глобальных фильтров	&lt;br /&gt;
|| Создание, редактирование и удаление глобальных фильтров	&lt;br /&gt;
|| Наличие полномочия делает доступным раздел [[Help:UI manual#Настройка глобальных фильтров|'''Настройки – Глобальные фильтры''']].&lt;br /&gt;
Список проектов и веток в разделе определяется полномочиями к этим проектам и веткам	&lt;br /&gt;
|| + 	|| + 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Импорт снимков	&lt;br /&gt;
|| Загрузка, редактирование названия и удаление снимков&lt;br /&gt;
|| Наличие полномочия делает доступным:&lt;br /&gt;
* раздел [[Help:UI manual#Управление проектами и группами проектов|'''Проекты''']];&lt;br /&gt;
* функции просмотра проекта и ветки, управления снимками в указанной ветке (включая импорт .svace-dir, SARIF и *.snap), просмотра маркеров в указанном контейнере&lt;br /&gt;
|| + 	|| – 	|| + &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Импорт разметки	&lt;br /&gt;
|| Импорт разметки из файла и комментариев в исходном коде 	&lt;br /&gt;
|| Наличие полномочия делает доступным импорт разметки из файла, импорт разметки из комментариев исходного кода снимка и просмотр маркеров в указанном контейнере	&lt;br /&gt;
|| + 	|| – 	|| + &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Экспорт снимков	&lt;br /&gt;
|| Экспорт данных снимков с разметкой и их открытие в IDE	&lt;br /&gt;
|| Наличие полномочия позволяет:&lt;br /&gt;
&lt;br /&gt;
* экспортировать разметку с исходными кодами;&lt;br /&gt;
* экспортировать снимки в форматах *.snap и SARIF;&lt;br /&gt;
* просматривать код с маркерами в Web-IDE&lt;br /&gt;
|| + 	|| – 	|| + &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Просмотр маркеров	&lt;br /&gt;
|| Просмотр маркеров и кода снимков, просмотр блокировок маркеров	&lt;br /&gt;
|| Наличие полномочия предоставляет доступ к следующим функциям [[Help:UI manual#Работа в режиме разметки|в режиме разметки]]:&lt;br /&gt;
* просмотр и выбор снимков в указанном контейнере;&lt;br /&gt;
* просмотр содержимого снимков и маркеров (без возможности разметки).&lt;br /&gt;
Также наличие полномочия предоставляет доступ к разделу [[Help:UI manual#Управление блокировками разметки|'''Настройки – Блокировки''']], но только в части просмотра блокировок в доступных контейнерах, без возможности их удаления	&lt;br /&gt;
|| +	|| + 	|| + &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Разметка маркеров	&lt;br /&gt;
|| Просмотр и разметка маркеров в снимках, включая добавление комментариев, управление списком блокировок	&lt;br /&gt;
|| Наличие полномочия позволяет пользователю размечать маркеры в указанном контейнере, добавлять комментарии, управлять своими блокировками, т. е. для собственных блокировок доступны кнопки удаления, а блокировки других пользователей доступны только для просмотра.&lt;br /&gt;
При отсутствии полномочия в таблице маркеров недоступны поля для установки флажков, а кнопка групповой разметки – неактивна.&lt;br /&gt;
Для разметки маркеров с помощью AI совместно с данным доступом должен быть активен доступ '''Импорт разметки''' &lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Report API	&lt;br /&gt;
|| Использование Report API для получения статистических показателей	&lt;br /&gt;
|| –	&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Известные ограничения ===&lt;br /&gt;
&lt;br /&gt;
* Управление ''своими'' проектами для пользователей только c серверной ролью &amp;quot;Create Projects&amp;quot; без дополнительных прав может не работать для проектов, созданных до Release 7-0-0. &lt;br /&gt;
: Workaround: добавить пользователю явно проектные доступы на каждый необходимый проект.&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:CLI/cleanup&amp;diff=3439</id>
		<title>Help:CLI/cleanup</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:CLI/cleanup&amp;diff=3439"/>
		<updated>2025-12-03T13:01:32Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: fix pic layout&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Автоматическое удаление снимков =&lt;br /&gt;
&lt;br /&gt;
== Обзор ==&lt;br /&gt;
&lt;br /&gt;
Удаление происходит по умолчанию раз в 24 часа (время можно задать при запуске сервера опцией &amp;lt;code&amp;gt;--snapshots-cleanup-period&amp;lt;/code&amp;gt;, либо в конфигурационном файле, либо переменной окружения &amp;lt;code&amp;gt;SVACER_CLEANUP_SNAPSHOTS_PERIOD&amp;lt;/code&amp;gt;, но не меньше 15 минут). Первое удаление всех подходящих снимков будет выполнено через указанное время после запуска сервера.&lt;br /&gt;
&lt;br /&gt;
Применять может только пользователь с доступом '''ServerOperations'''.&lt;br /&gt;
&lt;br /&gt;
'''Принцип работы:''' происходит проверка всех снимков на соответствие правилам удаления и правилам на запрет удаления, после этого происходит удаление самых старых по времени создания подходящих снимков и заносится отметка в таблицу удаленных снимков и в системный журнал. После этого происходит удаление пустых веток и проектов в соответствии с правилами удаления. Также информация об удалении через cleanup вносится в системный журнал.&lt;br /&gt;
&lt;br /&gt;
== Добавление нового правила удаления ==&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup add-rule --user &amp;lt;user&amp;gt; --password &amp;lt;password&amp;gt; --project &amp;lt;project&amp;gt; --branch &amp;lt;branch&amp;gt; --snapshot &amp;lt;snapshot&amp;gt; --keep-time &amp;lt;nowiki&amp;gt;&amp;lt;time&amp;gt;&amp;lt;/nowiki&amp;gt; --min-snapshots &amp;lt;min&amp;gt; --cleanup-type &amp;lt;type&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Параметры ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--project&amp;lt;/code&amp;gt; — проект, в котором искать снимки для удаления ('''обязательный''', используйте &amp;lt;code&amp;gt;&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; для всех проектов)&lt;br /&gt;
* &amp;lt;code&amp;gt;--branch&amp;lt;/code&amp;gt; — ветка, в которой искать снимки для удаления ('''обязательный''', используйте &amp;lt;code&amp;gt;&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; для всех веток)&lt;br /&gt;
* &amp;lt;code&amp;gt;--snapshot&amp;lt;/code&amp;gt; — снимок, который удалять ('''обязательный''', используйте &amp;lt;code&amp;gt;&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; для всех снимков)&lt;br /&gt;
* &amp;lt;code&amp;gt;--keep-time&amp;lt;/code&amp;gt; — время, которое должно пройти после создания '''(НЕ импорта)''' снимка, чтобы его удалить. Задается в формате Go Duration (например &amp;lt;code&amp;gt;33h5m&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;720h&amp;lt;/code&amp;gt;). По умолчанию '''720 часов''' (30 дней).&lt;br /&gt;
* &amp;lt;code&amp;gt;--min-snapshots&amp;lt;/code&amp;gt; — количество снимков, которое необходимо оставлять в ветке, подходящей под паттерн project + branch. По умолчанию 0&lt;br /&gt;
* &amp;lt;code&amp;gt;--cleanup-type&amp;lt;/code&amp;gt; — тип очистки. Возможные значения - project, branch, snapshot (по умолчанию snapshot). При указании snapshot будут очищаться снимки в соответствии с паттерном проект+ветка+снимок и проверяться &amp;lt;code&amp;gt;keep-time&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;min-snapshots&amp;lt;/code&amp;gt;. При указании branch будут удаляться пустые ветки в соответствии с паттерном project + branch. При указании project Будут удаляться пустые проекты (у которых нет веток) в соответствии с паттерном project. При указании branch или project невозможно указать &amp;lt;code&amp;gt;keep-time&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;min-snapshots&amp;lt;/code&amp;gt;, эти флаги не учитываются.&lt;br /&gt;
&lt;br /&gt;
=== Шаблоны и паттерны ===&lt;br /&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;--snapshot&amp;lt;/code&amp;gt; можно задавать как:&lt;br /&gt;
&lt;br /&gt;
'''1. Имя или ID:'''&lt;br /&gt;
 --project &amp;quot;MyProject&amp;quot;&lt;br /&gt;
 --project &amp;quot;550e8400-e29b-41d4-a716-446655440000&amp;quot;  # UUID проекта&lt;br /&gt;
&lt;br /&gt;
'''2. &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; (любое количество любых символов):'''&lt;br /&gt;
 --project &amp;quot;Dev*&amp;quot;         # DevProject, Development&lt;br /&gt;
 --branch &amp;quot;*test*&amp;quot;        # test, my-test, testing&lt;br /&gt;
 --snapshot &amp;quot;nightly-*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''3. Регулярные выражения (с префиксом &amp;lt;code&amp;gt;re:&amp;lt;/code&amp;gt;):'''&lt;br /&gt;
 --snapshot &amp;quot;re:^v[0-9]+\.[0-9]+\.[0-9]+$&amp;quot;    # v1.0.0, v2.3.5&lt;br /&gt;
 --branch &amp;quot;re:^feature/[0-9]+$&amp;quot;               # feature/123&lt;br /&gt;
&lt;br /&gt;
== Добавление запрета на удаление ==&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup add-exclude-rule --user &amp;lt;user&amp;gt; --password &amp;lt;password&amp;gt; --project &amp;lt;project&amp;gt; --branch &amp;lt;branch&amp;gt; --snapshot &amp;lt;snapshot&amp;gt; --min-snapshots &amp;lt;min&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Параметры ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--project&amp;lt;/code&amp;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;--branch&amp;lt;/code&amp;gt; — ветка ('''обязательный''', используйте &amp;lt;code&amp;gt;&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; для всех веток)&lt;br /&gt;
* &amp;lt;code&amp;gt;--snapshot&amp;lt;/code&amp;gt; — снимок ('''обязательный''', используйте &amp;lt;code&amp;gt;&amp;quot;*&amp;quot;&amp;lt;/code&amp;gt; для всех снимков)&lt;br /&gt;
Флаги проекта, ветки и снимка работают аналогично с флагами в &amp;lt;code&amp;gt;--add-rule&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Удаление правила ==&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup delete --user &amp;lt;user&amp;gt; --password &amp;lt;password&amp;gt; --id &amp;lt;config id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где:&lt;br /&gt;
* &amp;lt;code&amp;gt;--id&amp;lt;/code&amp;gt; — ID конфигурации из таблицы правил или запретов (получить через &amp;lt;code&amp;gt;cleanup list&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Вывести таблицу ==&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup list --user &amp;lt;user&amp;gt; --password &amp;lt;password&amp;gt; --type &amp;lt;rule|exclude-rule|log&amp;gt; --format &amp;lt;table|json&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где:&lt;br /&gt;
* &amp;lt;code&amp;gt;--type&amp;lt;/code&amp;gt; — тип таблицы: &amp;lt;code&amp;gt;rule&amp;lt;/code&amp;gt; — таблица правил удаления (по умолчанию); &amp;lt;code&amp;gt;exclude-rule&amp;lt;/code&amp;gt; — таблица запретов на удаление; &amp;lt;code&amp;gt;log&amp;lt;/code&amp;gt; — таблица удаленных снимков&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--format&amp;lt;/code&amp;gt; — формат вывода: &amp;lt;code&amp;gt;table&amp;lt;/code&amp;gt; — человекочитаемый вывод (по умолчанию); &amp;lt;code&amp;gt;json&amp;lt;/code&amp;gt; — JSON формат&lt;br /&gt;
== Запуск очистки вручную ==&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup run --user &amp;lt;user&amp;gt; --password &amp;lt;password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запускает процесс очистки немедленно (вне расписания).&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&lt;br /&gt;
=== Добавление нового правила ===&lt;br /&gt;
&lt;br /&gt;
'''Удаление по времени'''&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup add-rule --user admin --password admin --project &amp;quot;Devel*&amp;quot; --branch &amp;quot;2025&amp;quot; --snapshot &amp;quot;*&amp;quot; --keep-time &amp;quot;240h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Удалятся снимки старше 240 часов (10 дней) в проектах, начинающихся с &amp;quot;Devel&amp;quot;, в ветке &amp;quot;2025&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''Ограничение количества'''&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup add-rule --user admin --password admin --project &amp;quot;*&amp;quot; --branch &amp;quot;main&amp;quot; --snapshot &amp;quot;*&amp;quot; --min-snapshots 20&lt;br /&gt;
&lt;br /&gt;
В любом проекте, в ветке &amp;quot;main&amp;quot; всегда будет не более 20 снимков, остальные будут удаляться.&lt;br /&gt;
&lt;br /&gt;
'''Очистка пустых веток'''&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup add-rule --user admin --password admin --project &amp;quot;*&amp;quot; --branch &amp;quot;master&amp;quot;  --cleanup-type branch&lt;br /&gt;
&lt;br /&gt;
В любом проекте, в ветке &amp;quot;main&amp;quot; всегда будет не более 20 снимков, остальные будут удаляться.&lt;br /&gt;
&lt;br /&gt;
=== Добавление запрета на удаление ===&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup add-exclude-rule --user admin --password admin --project &amp;quot;Devel*&amp;quot; --branch &amp;quot;2025&amp;quot; --snapshot &amp;quot;test*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Снимки, начинающиеся с &amp;quot;test&amp;quot;, в проектах &amp;quot;Devel*&amp;quot; и ветке &amp;quot;2025&amp;quot; '''никогда не удаляются правилами cleanup'''.&lt;br /&gt;
&lt;br /&gt;
=== Вывод таблицы правил ===&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup list --user admin --password admin --type rule&lt;br /&gt;
[[File:Cleanup rules.png|none|thumb|955x955px]]&lt;br /&gt;
&lt;br /&gt;
=== Вывод таблицы запретов ===&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup list --user admin --password admin --type exclude-rule&lt;br /&gt;
[[File:Cleanup exclude rule table.png|none|thumb|1009x1009px]]&lt;br /&gt;
&lt;br /&gt;
=== Вывод в JSON формате ===&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup list --user admin --password admin --type exclude-rule --format json&lt;br /&gt;
&lt;br /&gt;
Вывод:&lt;br /&gt;
&lt;br /&gt;
 [{&amp;quot;Branch&amp;quot;:&amp;quot;2025&amp;quot;,&amp;quot;CreatedBy&amp;quot;:&amp;quot;admin&amp;quot;,&amp;quot;CreatedById&amp;quot;:&amp;quot;00000000-0000-0000-0000-000000000000&amp;quot;,&amp;quot;ID&amp;quot;:&amp;quot;018fe552-f390-4110-9545-6ef9cbe1a406&amp;quot;,&amp;quot;MinBranchSnapshots&amp;quot;:0,&amp;quot;Project&amp;quot;:&amp;quot;Devel*&amp;quot;,&amp;quot;Snapshot&amp;quot;:&amp;quot;test*&amp;quot;,&amp;quot;create_time&amp;quot;:&amp;quot;2025-10-13T15:00:14.997004Z&amp;quot;}]&lt;br /&gt;
&lt;br /&gt;
=== Удаление правила ===&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup delete --user admin --password admin --id b1895877-1f3c-4b12-ac19-3ff4a7bc5416&lt;br /&gt;
&lt;br /&gt;
=== Использование regex ===&lt;br /&gt;
&lt;br /&gt;
 svacer server cleanup add-rule --user admin --password admin --project &amp;quot;*&amp;quot; --branch &amp;quot;re:^feature/JIRA-[0-9]+$&amp;quot; --snapshot &amp;quot;*&amp;quot; --keep-time 168h&lt;br /&gt;
&lt;br /&gt;
Подходит: &amp;lt;code&amp;gt;feature/JIRA-123&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;feature/JIRA-456&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Не подходит: &amp;lt;code&amp;gt;feature/JIRA-ABC&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;bugfix/JIRA-123&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Regex синтаксис ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Паттерн !! Описание !! Пример&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;^&amp;lt;/code&amp;gt; || Начало строки || &amp;lt;code&amp;gt;^test&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;[^x]&amp;lt;/code&amp;gt; || Отрицание символов || &amp;lt;code&amp;gt;^[^m].*$&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt; || Конец строки || &amp;lt;code&amp;gt;test$&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; || Любой символ || &amp;lt;code&amp;gt;a.c&amp;lt;/code&amp;gt; → abc, a1c&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;.*&amp;lt;/code&amp;gt; || Любое кол-во символов || &amp;lt;code&amp;gt;test.*&amp;lt;/code&amp;gt; → test-123&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;.+&amp;lt;/code&amp;gt; || Один или более || &amp;lt;code&amp;gt;test.+&amp;lt;/code&amp;gt; → test-1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;[0-9]&amp;lt;/code&amp;gt; || Любая цифра || &amp;lt;code&amp;gt;v[0-9]&amp;lt;/code&amp;gt; → v1, v9&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;[a-z]&amp;lt;/code&amp;gt; || Буква (нижний регистр) || &amp;lt;code&amp;gt;[a-z]+&amp;lt;/code&amp;gt; → abc&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;[A-Z]&amp;lt;/code&amp;gt; || Буква (верхний регистр) || &amp;lt;code&amp;gt;[A-Z]+&amp;lt;/code&amp;gt; → ABC&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;(a&amp;amp;#124;b)&amp;lt;/code&amp;gt; || &amp;quot;a&amp;quot; или &amp;quot;b&amp;quot; || &amp;lt;code&amp;gt;(test&amp;amp;#124;prod)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;[0-9]{2,4}&amp;lt;/code&amp;gt; || От 2 до 4 цифр || &amp;lt;code&amp;gt;12&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1234&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Не поддерживается '''negative lookahead''' &amp;lt;code&amp;gt;(?!...)&amp;lt;/code&amp;gt;. Используйте комбинацию правил и запретов.&lt;br /&gt;
&lt;br /&gt;
Для правил отрицания конкретного элемента возможно использовать сложные правила, например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;--branch &amp;quot;re:^(.{0,3}|.{5,}|[^m]...|m[^a]..|ma[^i].|mai[^n])$&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данное правило выбирает все ветки, кроме &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Edit_markers_(command_line)&amp;diff=3438</id>
		<title>Edit markers (command line)</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Edit_markers_(command_line)&amp;diff=3438"/>
		<updated>2025-12-03T12:57:09Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: move experimental note to the message box&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note|type=warn|text=Экспериментальная функциональность}}&lt;br /&gt;
== Обзор ==&lt;br /&gt;
Функциональность '''edit-markers''' позволяет автоматически обрабатывать маркеры при импорте данных с помощью правил, заданных в JSON-файле. Поддерживаются три типа операций:&lt;br /&gt;
&lt;br /&gt;
* '''skip''' — пропуск (удаление) маркеров, соответствующих условию&lt;br /&gt;
* '''change''' — изменение полей маркеров&lt;br /&gt;
* '''deduplicate''' — объединение дублирующихся маркеров. У маркеров, подходящих под правило, объединяются уникальные трассы и остается только один маркер с наименьшим порядковым номером предупреждения (local_id) в файле результатов анализа. Остальные маркеры удаляются.&lt;br /&gt;
Все операции происходят на стороне клиента до загрузки данных на сервер. При импорте результатов Svace, а также sarif (без указания флага --upload) изменяется .svacer-dir. Директория .svace-dir остается неизменной. Снимок остается неизменным при импорте. &lt;br /&gt;
&lt;br /&gt;
Данный функционал работает со снимками, созданными Svacer версии 7-0-0 и новее. Если у вас более старый снимок, то импортируйте и экспортируйте его для возможности работы с edit-markers.&lt;br /&gt;
&lt;br /&gt;
== Использование ==&lt;br /&gt;
&lt;br /&gt;
=== Импорт результатов Svace ===&lt;br /&gt;
&amp;lt;code&amp;gt;svacer import --edit-markers &amp;lt;файл_правил.json&amp;gt; [другие опции]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Применяет правила редактирования к маркерам при импорте результатов анализа Svace.&lt;br /&gt;
&lt;br /&gt;
=== Импорт SARIF ===&lt;br /&gt;
&amp;lt;code&amp;gt;svacer sarif2 import --edit-markers &amp;lt;файл_правил.json&amp;gt; [другие опции]&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Применяет правила при импорте SARIF-файлов.&lt;br /&gt;
&lt;br /&gt;
=== Импорт снимка с редактированием ===&lt;br /&gt;
&amp;lt;code&amp;gt;svacer server import --edit-markers &amp;lt;файл_правил.json&amp;gt; [другие опции]&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Применяет правила к снимку при импорте. Дополнительно можно сохранить отредактированный снимок:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;svacer server import --edit-markers rules.json --save-edited-snapshot edited_snapshot.snap&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Формат файла правил ==&lt;br /&gt;
Правила задаются в виде JSON-файла, содержащего массив объектов правил:&lt;br /&gt;
 [&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;action&amp;quot;: &amp;quot;тип_действия&amp;quot;,&lt;br /&gt;
    &amp;quot;rules&amp;quot;: &amp;quot;условие_или_список_полей&amp;quot;,&lt;br /&gt;
    &amp;quot;change&amp;quot;: { /* только для action: &amp;quot;change&amp;quot; */ }&lt;br /&gt;
  },&lt;br /&gt;
  ...&lt;br /&gt;
 ]&lt;br /&gt;
&lt;br /&gt;
=== Типы действий ===&lt;br /&gt;
&lt;br /&gt;
==== skip — Пропуск маркеров ====&lt;br /&gt;
Удаляет маркеры, соответствующие условию.&lt;br /&gt;
 ...&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;action&amp;quot;: &amp;quot;skip&amp;quot;,&lt;br /&gt;
   &amp;quot;rules&amp;quot;: &amp;quot;file == 'test.cpp' and line &amp;gt; 100&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
==== change — Изменение маркеров ====&lt;br /&gt;
Изменяет указанные поля маркеров.&lt;br /&gt;
 ...&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;action&amp;quot;: &amp;quot;change&amp;quot;,&lt;br /&gt;
   &amp;quot;rules&amp;quot;: &amp;quot;warnclass == 'UNREACHABLE_CODE'&amp;quot;,&lt;br /&gt;
   &amp;quot;change&amp;quot;: {&lt;br /&gt;
     &amp;quot;warnclass&amp;quot;: &amp;quot;IGNORED&amp;quot;,&lt;br /&gt;
     &amp;quot;msg&amp;quot;: &amp;quot;Код помечен как недостижимый&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 ...&lt;br /&gt;
Доступные поля для изменения: &amp;lt;code&amp;gt;warnclass&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;msg&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lang&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tool&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;details&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mtid&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;function&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== deduplicate — Дедупликация ====&lt;br /&gt;
Объединяет маркеры с одинаковыми значениями указанных полей. Один маркер выбирается случайно, все trace от остальных маркеров добавляются к нему.&lt;br /&gt;
 ...&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;action&amp;quot;: &amp;quot;deduplicate&amp;quot;,&lt;br /&gt;
  &amp;quot;rules&amp;quot;: &amp;quot;file,line,warnclass&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 ...&lt;br /&gt;
Поля для группировки (можно указать от 1 до 8): &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;line&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;function&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;warnclass&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lang&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tool&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mtid&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;details&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Доступные поля и операторы ==&lt;br /&gt;
&lt;br /&gt;
=== Поля маркеров ===&lt;br /&gt;
В условиях можно использовать следующие поля:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt; — полный путь к файлу (строка)&lt;br /&gt;
* &amp;lt;code&amp;gt;line&amp;lt;/code&amp;gt; — номер строки (число)&lt;br /&gt;
* &amp;lt;code&amp;gt;function&amp;lt;/code&amp;gt; — имя функции (строка)&lt;br /&gt;
* &amp;lt;code&amp;gt;warnclass&amp;lt;/code&amp;gt; — класс предупреждения (строка)&lt;br /&gt;
* &amp;lt;code&amp;gt;lang&amp;lt;/code&amp;gt; — язык программирования (строка)&lt;br /&gt;
* &amp;lt;code&amp;gt;tool&amp;lt;/code&amp;gt; — инструмент анализа (строка)&lt;br /&gt;
* &amp;lt;code&amp;gt;mtid&amp;lt;/code&amp;gt; — ID типа маркера (строка)&lt;br /&gt;
* &amp;lt;code&amp;gt;msg&amp;lt;/code&amp;gt; — сообщение маркера (строка)&lt;br /&gt;
* &amp;lt;code&amp;gt;details&amp;lt;/code&amp;gt; — детали маркера (строка)&lt;br /&gt;
&lt;br /&gt;
=== Операторы сравнения ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;==&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;!=&amp;lt;/code&amp;gt; — равно, не равно&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;gt;=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;=&amp;lt;/code&amp;gt; — сравнение чисел&lt;br /&gt;
* &amp;lt;code&amp;gt;and&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;or&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;&amp;amp;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;||&amp;lt;/code&amp;gt; — логические операторы&lt;br /&gt;
* &amp;lt;code&amp;gt;not&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; — логическое НЕ&lt;br /&gt;
* &amp;lt;code&amp;gt;in&amp;lt;/code&amp;gt; — проверка вхождения в список (например: &amp;lt;code&amp;gt;warnclass in ['ERROR', 'WARNING']&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;contains&amp;lt;/code&amp;gt; — проверка вхождения подстроки&lt;br /&gt;
&lt;br /&gt;
=== Функции для работы со строками ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;icontains(s, substring)&amp;lt;/code&amp;gt; — содержит подстроку (без учета регистра)&lt;br /&gt;
* &amp;lt;code&amp;gt;hasPrefix(s, prefix)&amp;lt;/code&amp;gt; — начинается с префикса&lt;br /&gt;
* &amp;lt;code&amp;gt;hasSuffix(s, suffix)&amp;lt;/code&amp;gt; — заканчивается суффиксом&lt;br /&gt;
* &amp;lt;code&amp;gt;equalsFold(a, b)&amp;lt;/code&amp;gt; — сравнение строк без учета регистра&lt;br /&gt;
* &amp;lt;code&amp;gt;lower(s)&amp;lt;/code&amp;gt; — преобразование в нижний регистр&lt;br /&gt;
* &amp;lt;code&amp;gt;upper(s)&amp;lt;/code&amp;gt; — преобразование в верхний регистр&lt;br /&gt;
* &amp;lt;code&amp;gt;trim(s)&amp;lt;/code&amp;gt; — удаление пробелов в начале и конце строки&lt;br /&gt;
* &amp;lt;code&amp;gt;replace(s, old, new)&amp;lt;/code&amp;gt; — замена всех вхождений подстроки&lt;br /&gt;
* &amp;lt;code&amp;gt;regex(s, pattern)&amp;lt;/code&amp;gt; — проверка соответствия регулярному выражению&lt;br /&gt;
* &amp;lt;code&amp;gt;nregex(s, pattern)&amp;lt;/code&amp;gt; — проверка НЕсоответствия регулярному выражению&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
Часть примеров используют снимок [https://svacer.ispras.ru/mediawiki/images/6/66/Bash.zip bash]. Детекторы в данном снимке выглядят так:&lt;br /&gt;
[[File:Edit-markers-1.png|center|thumb|967x967px]]&lt;br /&gt;
&lt;br /&gt;
=== Пропуск файлов ===&lt;br /&gt;
В данном примере будут пропущены все файлы, которые находятся в папке &amp;lt;code&amp;gt;/.build/lib&amp;lt;/code&amp;gt;&lt;br /&gt;
 [&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;action&amp;quot;: &amp;quot;skip&amp;quot;,&lt;br /&gt;
    &amp;quot;rules&amp;quot;: &amp;quot;file contains '/.build/lib'&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
 ]&lt;br /&gt;
Сравнивая исходный снимок и снимок, где было применено edit-markers можно увидеть 215 пропущенных детекторов. Все они находятся в папке &amp;lt;code&amp;gt;/.build/lib&amp;lt;/code&amp;gt;&lt;br /&gt;
[[File:Edit-markers-2.png|center|thumb|983x983px]]&lt;br /&gt;
Если необходимо указать название не зависимо от регистра, то можно использовать функцию &amp;lt;code&amp;gt;icontains&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[ { &amp;quot;action&amp;quot;: &amp;quot;skip&amp;quot;, &amp;quot;rules&amp;quot;: &amp;quot;icontains(file, '/.build/lib')&amp;quot; } ]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также после применения edit-markers в информации о снимке указывается, какие правила были применены&lt;br /&gt;
[[File:Edit-marker.png|center|thumb|971x971px]]&lt;br /&gt;
&lt;br /&gt;
=== Изменение класса предупреждений ===&lt;br /&gt;
При необходимости возможно изменение полей маркера. В данном примере изменим warnclass маркеров у которых в названии есть &amp;lt;code&amp;gt;UNREACHABLE_CODE&amp;lt;/code&amp;gt; и находящиеся после 1000 строки, но детектор &amp;lt;code&amp;gt;UNREACHABLE_CODE&amp;lt;/code&amp;gt; изменять не будем.&lt;br /&gt;
 [&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;action&amp;quot;: &amp;quot;change&amp;quot;,&lt;br /&gt;
    &amp;quot;rules&amp;quot;: &amp;quot;warnclass contains 'UNREACHABLE_CODE' and line &amp;gt; 1000&amp;quot;,&lt;br /&gt;
    &amp;quot;change&amp;quot;: {&lt;br /&gt;
      &amp;quot;warnclass&amp;quot;: &amp;quot;UNREACHABLE&amp;quot;,&lt;br /&gt;
      &amp;quot;msg&amp;quot;: &amp;quot;Изменено правилами edit markers&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
 ]&lt;br /&gt;
[[File:Edit-markers-3.png|center|thumb|955x955px]]&lt;br /&gt;
Указанные маркеры изменили свой детектор и описание. &lt;br /&gt;
&lt;br /&gt;
{{Note|text=Серьезность, Надежность и CWE привязаны к названию warnclass (детектора), поэтому, если указать''' '''несуществующий warnclass, то данные поля пропадут.}}&lt;br /&gt;
&lt;br /&gt;
=== Удаление дубликатов ===&lt;br /&gt;
Если необходимо объединить несколько детекторов в один по одинаковым полям, то возможно сделать следующее действие (в качестве полей rules можно указать 8 возможных значений, см. описание deduplicate).&lt;br /&gt;
Например, в снимке содержится множество одинаковых детекторов в одном файле на одной строке.&lt;br /&gt;
[[File:Edit-markers-dedup.png|center|thumb|933x933px]]&lt;br /&gt;
Применив следующее правило все маркеры, которые находятся в одном файле, с одним детектором и на одной строке объединятся в один: выберется один с наименьшим порядковым номером предупреждения в файле результатов анализа (local_id) и у него будет объединенные уникальные трассы всех остальных маркеров.&lt;br /&gt;
 [&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;action&amp;quot;: &amp;quot;deduplicate&amp;quot;,&lt;br /&gt;
    &amp;quot;rules&amp;quot;: &amp;quot;file,warnclass,line&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
 ]&lt;br /&gt;
[[File:Edit-markers-dedup2.png|center|thumb|948x948px]]&lt;br /&gt;
В данном примере у всех маркеров &amp;lt;code&amp;gt;UNUSED_FIELD&amp;lt;/code&amp;gt; на строке 11 в файле &amp;lt;code&amp;gt;AddInstruction.cs&amp;lt;/code&amp;gt; была трасса состоящая из трёх ролей: detected, info, Current function name. Роль detected полностью совпадала во всех маркерах, она была включена один раз, а все остальные роли добавились в объединенный маркер. Оставшиеся дублирующие маркеры были удалены.&lt;br /&gt;
&lt;br /&gt;
=== Комплексный пример ===&lt;br /&gt;
В данном примере пропускаются все маркеры, у которых инструмент равен &amp;lt;code&amp;gt;CSA&amp;lt;/code&amp;gt;, а маркеры, которые имеют детекторы &amp;lt;code&amp;gt;'BAD_COPY_PASTE', 'DEREF_AFTER_NULL', 'UNUSED_VALUE'&amp;lt;/code&amp;gt; или имеют в описании подстроку &amp;lt;code&amp;gt;unsafe&amp;lt;/code&amp;gt; в любом регистре, меняют детектор и описание.&lt;br /&gt;
 [&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;action&amp;quot;: &amp;quot;skip&amp;quot;,&lt;br /&gt;
    &amp;quot;rules&amp;quot;: &amp;quot;tool == 'CSA'&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;action&amp;quot;: &amp;quot;change&amp;quot;,&lt;br /&gt;
    &amp;quot;rules&amp;quot;: &amp;quot;warnclass in ['BAD_COPY_PASTE', 'DEREF_AFTER_NULL', 'UNUSED_VALUE'] or icontains(msg, 'unsafe')&amp;quot;,&lt;br /&gt;
    &amp;quot;change&amp;quot;: {&lt;br /&gt;
      &amp;quot;warnclass&amp;quot;: &amp;quot;HIGH_PRIORITY&amp;quot;,&lt;br /&gt;
      &amp;quot;msg&amp;quot;: &amp;quot;Высокоприоритетное предупреждение&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
 ]&lt;br /&gt;
При сравнении с исходным снимком можно заметить, что 91 предупреждение, у которых инструмент был &amp;lt;code&amp;gt;CSA&amp;lt;/code&amp;gt;, удалены из измененного снимка.&lt;br /&gt;
[[File:Edit-markers-5.png|center|thumb|979x979px]]&lt;br /&gt;
Также были изменены маркеры, в соответствии с правилами.&lt;br /&gt;
[[File:Edit-markers-51.png|center|thumb|980x980px]]&lt;br /&gt;
&lt;br /&gt;
=== Изменение приоритета для определенных классов ===&lt;br /&gt;
Изменение детекторов:&lt;br /&gt;
 [ &lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;action&amp;quot;: &amp;quot;change&amp;quot;,&lt;br /&gt;
    &amp;quot;rules&amp;quot;: &amp;quot;warnclass in ['UNREACHABLE_CODE.TERMINATION', 'UNREACHABLE_CODE.RET', 'UNREACHABLE_CODE.ENUM']&amp;quot;,&lt;br /&gt;
    &amp;quot;change&amp;quot;: {&lt;br /&gt;
      &amp;quot;warnclass&amp;quot;: &amp;quot;UNREACHABLE_CODE&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
 ]&lt;br /&gt;
&lt;br /&gt;
=== Обработка сгенерированных файлов ===&lt;br /&gt;
Пропускаем все маркеры в сгенерированных файлах:&lt;br /&gt;
&lt;br /&gt;
 [ &lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;action&amp;quot;: &amp;quot;skip&amp;quot;,&lt;br /&gt;
    &amp;quot;rules&amp;quot;: &amp;quot;file contains 'generated' or hasPrefix(file, 'vendor/')&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
 ]&lt;br /&gt;
&lt;br /&gt;
=== Дедупликация с последующей фильтрацией ===&lt;br /&gt;
Сначала объединяем дубликаты, потом удаляем ненужные:&lt;br /&gt;
 [&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;action&amp;quot;: &amp;quot;deduplicate&amp;quot;,&lt;br /&gt;
    &amp;quot;rules&amp;quot;: &amp;quot;file,line,warnclass,function&amp;quot;&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;action&amp;quot;: &amp;quot;skip&amp;quot;,&lt;br /&gt;
    &amp;quot;rules&amp;quot;: &amp;quot;icontains(file, 'third_party') or icontains(file, 'external')&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
 ]&lt;br /&gt;
&lt;br /&gt;
=== Работа с регулярными выражениями ===&lt;br /&gt;
В данном примере будут пропущены маркеры, путь к файлу которых НЕ соответствует регулярному выражению. В результате в снимке останутся только маркеры из файлов с расширениями &amp;lt;code&amp;gt;.c&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.cpp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.h&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;.hpp&amp;lt;/code&amp;gt;, находящихся в директории &amp;lt;code&amp;gt;/.build/builtins&amp;lt;/code&amp;gt;. В данном случае мы дважды экранируем: сначала слэш, а потом точку.&lt;br /&gt;
 [&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;action&amp;quot;: &amp;quot;skip&amp;quot;,&lt;br /&gt;
    &amp;quot;rules&amp;quot;: &amp;quot;nregex(file, \&amp;quot;^/\\\\.build/builtins/.*\\\\.(c|cpp|h|hpp)$\&amp;quot;)&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
 ]&lt;br /&gt;
В результате у нас остаются только подходящие маркеры:&lt;br /&gt;
[[File:Edit-markers-8.png|center|thumb|979x979px]]&lt;br /&gt;
&lt;br /&gt;
== Дополнительные опции ==&lt;br /&gt;
&lt;br /&gt;
=== Сохранение отредактированного снимка ===&lt;br /&gt;
При импорте снимка можно сохранить результат применения правил:&lt;br /&gt;
  svacer server import --edit-markers rules.json --save-edited-snapshot result.snap ...&lt;br /&gt;
Обязательно должно быть расширение &amp;lt;code&amp;gt;.snap&amp;lt;/code&amp;gt; для сохранения.&lt;br /&gt;
&lt;br /&gt;
== Важные замечания ==&lt;br /&gt;
&lt;br /&gt;
# '''Порядок правил''' — правила применяются последовательно в порядке их описания в файле&lt;br /&gt;
# '''Валидация''' — при загрузке правил проверяется корректность JSON и соответствие полей&lt;br /&gt;
# '''Формат файла''' — файл правил должен иметь расширение &amp;lt;code&amp;gt;.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# '''Логирование''' — результат применения правил выводится в лог (количество обработанных и удаленных маркеров)&lt;br /&gt;
# '''Поле line в change''' — должно быть строкой с неотрицательным числом&lt;br /&gt;
# '''Поле warnclass в change''' — может принимать только русские и английские буквы, цифры, а также специальные символы, которые находятся на цифровой панели клавиатуры (и печатаются через Shift)&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Afilters&amp;diff=3437</id>
		<title>Afilters</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Afilters&amp;diff=3437"/>
		<updated>2025-12-03T11:17:45Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: add time package link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Advanced filters =&lt;br /&gt;
Поле &amp;quot;Расширенный фильтр&amp;quot; в пользовательских фильтрах предназначено для фильтрации маркеров (предупреждений) по сложным предикатам. &lt;br /&gt;
[[File:Image-afilters-prop.png|thumb]]&lt;br /&gt;
Предикат может использовать:&lt;br /&gt;
&lt;br /&gt;
* поля маркера, его трассы, разметки и комментариев&lt;br /&gt;
* информацию из контекста: имя проекта, ветки, снимка и т. п.&lt;br /&gt;
* атрибуты снимка, включая пользовательские атрибуты, заданные при импорте&lt;br /&gt;
* статусы разметки&lt;br /&gt;
* текст и атрибуты комментариев&lt;br /&gt;
&lt;br /&gt;
Формат фильтра определяется следующим шаблоном:&lt;br /&gt;
&lt;br /&gt;
 filter(markers, &amp;lt;predicate expr&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Выражение &amp;lt;code&amp;gt;&amp;lt;predicate expr&amp;gt;&amp;lt;/code&amp;gt; определяет предикат. Объект &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt; содержит массив маркеров из контекста, функция &amp;lt;code&amp;gt;filter&amp;lt;/code&amp;gt; фильтрует данный список по предикату. Таким образом, применение фильтра заключается в фильтрации списка маркеров по указанному предикату.&lt;br /&gt;
&lt;br /&gt;
== Список доступных полей ==&lt;br /&gt;
&lt;br /&gt;
=== Поля маркера (предупреждения) ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Comments&amp;lt;/code&amp;gt; — список комментариев маркера. Объект типа Comment (смотрите ниже)&lt;br /&gt;
* &amp;lt;code&amp;gt;Details&amp;lt;/code&amp;gt; — информация, специфичная для анализатора. Ближайший аналог — fingerprint в SARIF&lt;br /&gt;
* &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt; — имя файла&lt;br /&gt;
* &amp;lt;code&amp;gt;Function&amp;lt;/code&amp;gt; — имя функции, может быть mangled для С++&lt;br /&gt;
* &amp;lt;code&amp;gt;ID&amp;lt;/code&amp;gt; — UUID маркера&lt;br /&gt;
* &amp;lt;code&amp;gt;Invariant&amp;lt;/code&amp;gt; — инвариант маркера. Используется для автопереноса разметки между снимками&lt;br /&gt;
* &amp;lt;code&amp;gt;Lang&amp;lt;/code&amp;gt; — язык детектора&lt;br /&gt;
* &amp;lt;code&amp;gt;Line&amp;lt;/code&amp;gt; — номер строки в файле&lt;br /&gt;
* &amp;lt;code&amp;gt;LocID&amp;lt;/code&amp;gt; — порядковый номер маркера относительно изначального отчета анализатора&lt;br /&gt;
* &amp;lt;code&amp;gt;MTid&amp;lt;/code&amp;gt; — шаблон сообщения&lt;br /&gt;
* &amp;lt;code&amp;gt;Msg&amp;lt;/code&amp;gt; — текст сообщения&lt;br /&gt;
* &amp;lt;code&amp;gt;OrigFunc&amp;lt;/code&amp;gt; — 'человекочитаемое' имя функции. Может быть недоступно&lt;br /&gt;
* &amp;lt;code&amp;gt;Tags&amp;lt;/code&amp;gt; — список тегов (меток) маркера&lt;br /&gt;
* &amp;lt;code&amp;gt;Tool&amp;lt;/code&amp;gt; — модуль анализатора, ответственного за данный детектор&lt;br /&gt;
* &amp;lt;code&amp;gt;Traces&amp;lt;/code&amp;gt; — список трасс маркера. Объект типа Trace (смотрите ниже)&lt;br /&gt;
* &amp;lt;code&amp;gt;WarnClass&amp;lt;/code&amp;gt; — название детектора/класса детекторов&lt;br /&gt;
&lt;br /&gt;
Имена полей также могут использоваться в формате, где первая буква в lowercase.&lt;br /&gt;
&lt;br /&gt;
Помимо использования полей, можно использовать вспомогательные функции для доступа к дополнительной информации:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;severity(item) string&amp;lt;/code&amp;gt; — серьезность детектора (чекера)&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
 filter(markers, severity(#) == &amp;quot;Critical&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
'''Внимание:''' использование в предикатах поля &amp;lt;code&amp;gt;Trace&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;status(item) string&amp;lt;/code&amp;gt; — статус разметки текущего маркера. Пример: &amp;lt;code&amp;gt;filter(markers, status(#) == &amp;quot;Confirmed&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;action(item) string&amp;lt;/code&amp;gt; — статус поля action текущего маркера.  Пример: &amp;lt;code&amp;gt;filter(markers, action(#) == &amp;quot;Ignore&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;mseverity(item) string&amp;lt;/code&amp;gt; — статус поля severity текущего маркера (не путать с severity детектора).  Пример: &amp;lt;code&amp;gt;filter(markers, mseverity(#) == &amp;quot;Critical&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;triaged(item) bool&amp;lt;/code&amp;gt; — возвращает true, если маркер имеет не дефолтную разметку. Пример: &amp;lt;code&amp;gt;filter(markers, triaged(#))&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;get_triaged_by(item) UserInfo&amp;lt;/code&amp;gt; — возвращает структуру с информацией о пользователе, кто произвел разметку&lt;br /&gt;
&lt;br /&gt;
Поля структуры &amp;lt;code&amp;gt;UserInfo&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;login: string&amp;lt;/code&amp;gt; — логин пользователя&lt;br /&gt;
* &amp;lt;code&amp;gt;create_ts: Time (UTC)&amp;lt;/code&amp;gt; — время разметки в UTC формате (RFC3339)&lt;br /&gt;
&lt;br /&gt;
=== Комментарии ===&lt;br /&gt;
Объекты типа &amp;lt;code&amp;gt;Comment&amp;lt;/code&amp;gt; содержатся в поле &amp;lt;code&amp;gt;Comments&amp;lt;/code&amp;gt; маркера. Объект имеет следующие поля:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ID&amp;lt;/code&amp;gt; — UUID комментария&lt;br /&gt;
* &amp;lt;code&amp;gt;Text&amp;lt;/code&amp;gt; — текст комментария&lt;br /&gt;
* &amp;lt;code&amp;gt;CreatedBy&amp;lt;/code&amp;gt; — имя пользователя, кто создал комментарий&lt;br /&gt;
* &amp;lt;code&amp;gt;CreateTs&amp;lt;/code&amp;gt; — время создания комментария (объект типа &amp;lt;code&amp;gt;time.Time&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;UpdateTs&amp;lt;/code&amp;gt; — время обновления комментария (объект типа &amp;lt;code&amp;gt;time.Time&amp;lt;/code&amp;gt;), может быть пустым&lt;br /&gt;
* &amp;lt;code&amp;gt;UpdatedBy&amp;lt;/code&amp;gt; — имя пользователя, кто обновил комментарий&lt;br /&gt;
&lt;br /&gt;
=== Трассы ===&lt;br /&gt;
Маркер может содержать трассу маркера в поле &amp;lt;code&amp;gt;Traces&amp;lt;/code&amp;gt;. Трасса описывается следующими структурами:&lt;br /&gt;
 type Trace struct {&lt;br /&gt;
 	Role      string&lt;br /&gt;
 	Locations []TraceEntry&lt;br /&gt;
 }&lt;br /&gt;
 type TraceEntry struct {&lt;br /&gt;
 	File     string	&lt;br /&gt;
 	Line     uint32&lt;br /&gt;
 	Col  	 uint32	&lt;br /&gt;
 	Info 	 string&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Доступ к полям объекта &amp;lt;code&amp;gt;Trace&amp;lt;/code&amp;gt; может выполняться, используя правила языка &amp;lt;code&amp;gt;go-expr&amp;lt;/code&amp;gt;, описанные ниже.&lt;br /&gt;
&lt;br /&gt;
Имена полей могут использоваться в виде как описано выше, либо в формате lowercase: &amp;lt;code&amp;gt;role, locations, file, line, col, info&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
 filter(markers, any(.Comments, .Text == &amp;quot;Test&amp;quot;) &amp;amp;&amp;amp;&lt;br /&gt;
 		any(.Traces, any(.Locations, .Info == &amp;quot;Boolean expression has constant value&amp;quot;))&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
=== Поля снимка ===&lt;br /&gt;
Для доступа к полям снимка можно использовать переменную &amp;lt;code&amp;gt;snapshot&amp;lt;/code&amp;gt;. Переменная имеет тип структуры со следующими полями&lt;br /&gt;
&lt;br /&gt;
 struct {&lt;br /&gt;
 	ID               string                &lt;br /&gt;
 	Name             string                &lt;br /&gt;
 	SerialID         uint32                &lt;br /&gt;
 	BuildObject      string                &lt;br /&gt;
 	ResultsObject    string                &lt;br /&gt;
 	ImportTime       time.Time             &lt;br /&gt;
 	CreatedBy        string                &lt;br /&gt;
 	CreatedByID      string                &lt;br /&gt;
 	Details          map[string]any&lt;br /&gt;
 	CreateTime       time.Time             &lt;br /&gt;
 	SourcesAvailable bool                  &lt;br /&gt;
 }&lt;br /&gt;
Имена полей могут использоваться в виде, где первая буква в lowercase.&lt;br /&gt;
&lt;br /&gt;
Объекты в поле &amp;lt;code&amp;gt;Details&amp;lt;/code&amp;gt; можно просмотреть, нажав на кнопку &amp;lt;code&amp;gt;View JSON&amp;lt;/code&amp;gt; в WebUI в поле &amp;lt;code&amp;gt;Snapshot Information&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
 filter(markers, &lt;br /&gt;
    snapshot.buildObject == &amp;quot;5b634b75422bd554a8569cc10bfadc3aea77b73e&amp;quot; &amp;amp;&amp;amp;&lt;br /&gt;
    .warnClass matches &amp;quot;DEREF&amp;quot;&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
== Описание языка предикатов ==&lt;br /&gt;
Для написания предикатов используется язык '''Expr'''. Детальное описание всех возможностей можно найти здесь: https://github.com/expr-lang/expr &lt;br /&gt;
&lt;br /&gt;
Далее описываются конструкции, наиболее подходящие для написания правил фильтрации.&lt;br /&gt;
&lt;br /&gt;
=== Литералы ===&lt;br /&gt;
 Comment /* */ or //&lt;br /&gt;
 Boolean true, false&lt;br /&gt;
 Integer 42, 0x2A, 0o52, 0b101010&lt;br /&gt;
 Float 0.5, .5&lt;br /&gt;
 String &amp;quot;foo&amp;quot;, 'bar'&lt;br /&gt;
 Array [1, 2, 3]&lt;br /&gt;
 Map {a: 1, b: 2, c: 3}&lt;br /&gt;
 Nil nil&lt;br /&gt;
&lt;br /&gt;
=== Строки ===&lt;br /&gt;
Строки могут быть в одинарных и двойных кавычках. Для эскейпа используйте обратный слэш.&lt;br /&gt;
&lt;br /&gt;
Пример однострочного текста:&lt;br /&gt;
 &amp;quot;Hello\nWorld&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Пример многострочного текста:&lt;br /&gt;
 `Hello&lt;br /&gt;
 World`&lt;br /&gt;
&lt;br /&gt;
В многострочном тексте escape-последовательности не поддерживаются.&lt;br /&gt;
&lt;br /&gt;
=== Операторы ===&lt;br /&gt;
 Arithmetic: +, -, *, /, % (modulus), ^ or ** (exponent)&lt;br /&gt;
 Comparison: ==, !=, &amp;lt;, &amp;gt;, &amp;lt;=, &amp;gt;=&lt;br /&gt;
 Logical: not or !, and or &amp;amp;&amp;amp;, or or ||&lt;br /&gt;
 Conditional: ?: (ternary), ?? (nil coalescing), if {} else {} (multiline)&lt;br /&gt;
 Membership: [], ., ?., in&lt;br /&gt;
 String: + (concatenation), contains, startsWith, endsWith&lt;br /&gt;
 Regex: matches&lt;br /&gt;
 Range: ..&lt;br /&gt;
 Slice: [:]&lt;br /&gt;
 Pipe: |&lt;br /&gt;
&lt;br /&gt;
=== Операторы доступа к полю объекта ===&lt;br /&gt;
Можно использовать оператор &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; и оператор &amp;lt;code&amp;gt;[]&amp;lt;/code&amp;gt;:&lt;br /&gt;
 user.Name&lt;br /&gt;
 user[&amp;quot;Name&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
=== Оператор in ===&lt;br /&gt;
Оператор &amp;lt;code&amp;gt;in&amp;lt;/code&amp;gt; для проверки наличия объекта в массиве или мэпе:&lt;br /&gt;
 &amp;quot;John&amp;quot; in [&amp;quot;John&amp;quot;, &amp;quot;Jane&amp;quot;]&lt;br /&gt;
 &amp;quot;name&amp;quot; in {&amp;quot;name&amp;quot;: &amp;quot;John&amp;quot;, &amp;quot;age&amp;quot;: 30}&lt;br /&gt;
&lt;br /&gt;
=== Optional chaining ===&lt;br /&gt;
Оператор &amp;lt;code&amp;gt;?.&amp;lt;/code&amp;gt; может использоваться для доступа к полю структуры или элементу отображения (map) без необходимости проверки, является ли структура или отображение равными &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;. Если структура или отображение имеют значение &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;, результатом выражения будет &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пример вида:&lt;br /&gt;
 author.User?.Name&lt;br /&gt;
&lt;br /&gt;
значит то же самое, что:&lt;br /&gt;
 author.User != nil ? author.User.Name : nil&lt;br /&gt;
&lt;br /&gt;
=== Nil coalescing ===&lt;br /&gt;
Оператор &amp;lt;code&amp;gt;??&amp;lt;/code&amp;gt; может использоваться для возврата левого операнда, если он не равен &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;, в противном случае возвращается правый операнд.&lt;br /&gt;
&lt;br /&gt;
Пример вида:&lt;br /&gt;
 author.User?.Name ?? &amp;quot;Anonymous&amp;quot;&lt;br /&gt;
&lt;br /&gt;
значит то же самое, что:&lt;br /&gt;
 author.User != nil ? author.User.Name : &amp;quot;Anonymous&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Оператор конвейера ===&lt;br /&gt;
Оператор конвейера &amp;lt;code&amp;gt;|&amp;lt;/code&amp;gt; может использоваться для передачи результата выражения левого операнда в качестве первого аргумента выражения правого операнда.&lt;br /&gt;
&lt;br /&gt;
Пример вида:&lt;br /&gt;
 user.Name | lower() | split(&amp;quot; &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
значит то же самое, что:&lt;br /&gt;
 split(lower(user.Name), &amp;quot; &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=== Предикаты ===&lt;br /&gt;
Предикат — это выражение. Предикаты можно использовать в функциях, таких как &amp;lt;code&amp;gt;filter, all, any, one, none&amp;lt;/code&amp;gt; и других.&lt;br /&gt;
 filter(0..9, {# % 2 == 0})&lt;br /&gt;
 filter(tweets, {len(.Content) &amp;gt; 240})&lt;br /&gt;
&lt;br /&gt;
Скобки &amp;lt;code&amp;gt;{ }&amp;lt;/code&amp;gt; можно опускать:&lt;br /&gt;
 filter(tweets, len(.Content) &amp;gt; 240)&lt;br /&gt;
&lt;br /&gt;
=== Операции над строками ===&lt;br /&gt;
 trim(str[, chars])&lt;br /&gt;
 trimPrefix(str, prefix)&lt;br /&gt;
 trimSuffix(str, suffix)&lt;br /&gt;
 upper(str)&lt;br /&gt;
 lower(str)&lt;br /&gt;
 indexOf(str, substring)&lt;br /&gt;
 lastIndexOf(str, substring)&lt;br /&gt;
 hasPrefix(str, prefix)&lt;br /&gt;
 hasSuffix(str, suffix)&lt;br /&gt;
&lt;br /&gt;
Также есть оператор &amp;lt;code&amp;gt;matches&amp;lt;/code&amp;gt; для поиска регулярного выражения в строке:&lt;br /&gt;
 str matches &amp;quot;regular expression&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Для сопоставления целой строки с регулярным выражением следует использовать вариант:&lt;br /&gt;
 str matches &amp;quot;^regex$&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Функции времени ===&lt;br /&gt;
Поддерживаются Go типы для времени и интервалов: &amp;lt;code&amp;gt;time.Time&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;time.Duration&amp;lt;/code&amp;gt; из [https://pkg.go.dev/time time package].&lt;br /&gt;
&lt;br /&gt;
Можно использовать операции сложения и вычитания над объектами с типом &amp;lt;code&amp;gt;time.Time&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 createdAt - now()&lt;br /&gt;
 createdAt + duration(&amp;quot;1h&amp;quot;)&lt;br /&gt;
 createdAt &amp;gt; now() - duration(&amp;quot;1h&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
 date(&amp;quot;2023-08-14&amp;quot;)&lt;br /&gt;
 date(&amp;quot;15:04:05&amp;quot;)&lt;br /&gt;
 date(&amp;quot;2023-08-14T00:00:00Z&amp;quot;)&lt;br /&gt;
 date(&amp;quot;2023-08-14 00:00:00&amp;quot;, &amp;quot;2006-01-02 15:04:05&amp;quot;, &amp;quot;Europe/Zurich&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=== Функции над массивами ===&lt;br /&gt;
* &amp;lt;code&amp;gt;all(array, predicate)&amp;lt;/code&amp;gt; — все объекты должны удовлетворять предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;any(array, predicate)&amp;lt;/code&amp;gt; — должен быть по крайней мере один объект, который удовлетворяет предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;one(array, predicate)&amp;lt;/code&amp;gt; — должен быть только один объект, который удовлетворяет предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;none(array, predicate)&amp;lt;/code&amp;gt; — ни один объект не должен удовлетворять предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;find(array, predicate)&amp;lt;/code&amp;gt; — возвращает первый объект, который удовлетворяет предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;findLast(array, predicate)&amp;lt;/code&amp;gt; — возвращает последний объект, который удовлетворяет предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;count(array[, predicate])&amp;lt;/code&amp;gt; — возвращает число объектов, удовлетворяющих предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;first(array)&amp;lt;/code&amp;gt; — первый объект из массива&lt;br /&gt;
* &amp;lt;code&amp;gt;last(array)&amp;lt;/code&amp;gt; — последний объект из массива&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
 all(tweets, {.Size &amp;lt; 280})&lt;br /&gt;
 any(tweets, {.Size &amp;gt; 280})&lt;br /&gt;
 none(tweets, {.Size &amp;gt; 280})&lt;br /&gt;
 find([1, 2, 3, 4], # &amp;gt; 2) == 3&lt;br /&gt;
 findLast([1, 2, 3, 4], # &amp;gt; 2) == 4&lt;br /&gt;
 count(users, .Age &amp;gt; 18)&lt;br /&gt;
 first([1, 2, 3]) == 1&lt;br /&gt;
 last([1, 2, 3]) == 3&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:UI_manual&amp;diff=3436</id>
		<title>Help:UI manual</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:UI_manual&amp;diff=3436"/>
		<updated>2025-12-03T11:14:09Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: add advanced filters page link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;На этой странице приведена инструкция по работе в пользовательском интерфейсе сервера Svacer.&lt;br /&gt;
&lt;br /&gt;
== Авторизация в пользовательском интерфейсе сервера Svacer ==&lt;br /&gt;
&lt;br /&gt;
Для авторизации в пользовательском интерфейсе сервера Svacer введите логин и пароль на странице ввода учётных данных. Учётные данные по умолчанию — admin / admin.&lt;br /&gt;
[[File:Авторизация 01.png|thumb|none|x300px|alt=AutorizationMain|Страница ввода учетных данных]]&lt;br /&gt;
&lt;br /&gt;
Если на сервере настроена поддержка протокола LDAP, то войти можно с помощью внешних серверов. Для этого:&lt;br /&gt;
&lt;br /&gt;
# На странице ввода учетных данных перейдите на вкладку '''LDAP'''.&lt;br /&gt;
# Выберите LDAP-сервер в списке, если настроено больше одного сервера авторизации.&lt;br /&gt;
# Нажмите кнопку '''Подробности''' для раскрытия подробной информации о сервере и его доступности.&lt;br /&gt;
# Введите логин и пароль.&lt;br /&gt;
&lt;br /&gt;
[[File:Авторизация LDAP 02.png|thumb|none|x300px|alt=AutorizationLDAP|Страница входа по протоколу LDAP]]&lt;br /&gt;
&lt;br /&gt;
После успешного входа отобразится пользовательский интерфейс сервера Svacer. При этом, если в прошлой сессии пользователь [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выбрал проект, его ветку и снимок]] или [[Help:UI manual#Использование фильтров|применил фильтры]], отобразятся эти проект, ветка и фильтры.&lt;br /&gt;
&lt;br /&gt;
Описание настроек конфигурации сервера Svacer для поддержки аутентификации по LDAP протоколу приведено по [[LDAP configuration|ссылке]].&lt;br /&gt;
&lt;br /&gt;
{{Note|type=info|text=''Чтобы после обновления системы в пользовательском веб-интерфейсе корректно отображались изменения, после авторизации обновите страницу в браузере – нажмите клавишу F5.''}}&lt;br /&gt;
&lt;br /&gt;
== Описание основных элементов пользовательского интерфейса ==&lt;br /&gt;
Все страницы пользовательского интерфейса сервера Svacer устроены единообразно и состоят из двух частей:&lt;br /&gt;
# Верхняя панель – отображается на всех страницах пользовательского интерфейса.&amp;lt;br /&amp;gt;Содержит:&lt;br /&gt;
#* логотип сервера Svacer;&lt;br /&gt;
#* кнопки меню:&lt;br /&gt;
#** '''Разметка''' – [[Help:UI manual#Работа в режиме просмотра кода|просмотр и разметка найденных маркеров]], а также [[Help:UI manual#Сравнение снимков и маркеров|сравнение снимков или отдельных маркеров]];&lt;br /&gt;
#** '''Код''' – [[Help:UI manual#Работа в режиме разметки|просмотр снимков исходного кода]], связанного с результатами анализатора Svace;&lt;br /&gt;
#** '''Проекты''' – [[Help:UI manual#Управление проектами и группами проектов|управление проектами]] (режим доступен только пользователям с ролью admin);&lt;br /&gt;
#** '''Детекторы''' – [[Help:UI manual#Просмотр детекторов|просмотр списка детекторов]];&lt;br /&gt;
#** '''Статистика''' – [[Help:UI manual#Просмотр статистики|просмотр статистики разметки]] по всем проектам, веткам и снимкам, доступным пользователю;&lt;br /&gt;
#** '''Поиск''' – [[Help:UI manual#Глобальный поиск|глобальный поиск]] снимков, маркеров и комментариев к ним;&lt;br /&gt;
#* [[File:Icon settings.png|x25px]] – кнопка для перехода к [[Help:UI manual#Настройка сервера Svacer|настройке системы]];&lt;br /&gt;
#* [[File:Icon RuEng.png|x25px]] – переключатель языка пользовательского интерфейса;&lt;br /&gt;
#* [[File:Icon question mark.png|x25px]] – кнопка для перехода на страницу документации к системе;&lt;br /&gt;
#* [[File:Icon bell.png|25px]] – кнопка для перехода к [[Help:UI manual#Просмотр уведомлений в интерфейсе Системы|уведомлениям]];&lt;br /&gt;
#* [[File:Icon profile.png|x25px]] – кнопка меню пользователя, которое предоставляет следующие функции:&lt;br /&gt;
#** [[Help:UI manual#Настройка профиля пользователя|настройка профиля пользователя]];&lt;br /&gt;
#** [[Help:UI manual#Настройка интерфейса|настройка интерфейса]];&lt;br /&gt;
#** [[Help:UI manual#Настройка уведомлений|настройка уведомлений]];&lt;br /&gt;
#** [[Help:UI manual#Управление лицензией|управление лицензией]];&lt;br /&gt;
#** [[Help:UI manual#Просмотр информации о программе|просмотр информации о программе]];&lt;br /&gt;
#** [[Help:UI manual#Выход из системы|выход из системы]].&lt;br /&gt;
# Рабочая область – область экрана для просмотра информации и ввода, которая соответствует выбранному режиму работы или странице настроек.&lt;br /&gt;
&lt;br /&gt;
:[[File:03 Основные элементы интерфейса – без VSCode.png|thumb|none|upright=3]]&lt;br /&gt;
&lt;br /&gt;
== Базовые функции системы ==&lt;br /&gt;
=== Просмотр уведомлений в интерфейсе Системы===&lt;br /&gt;
Чтобы посмотреть уведомления, нажмите кнопку [[File:Icon bell.png|25px]] в правом верхнем углу экрана.&lt;br /&gt;
&lt;br /&gt;
В правой части экрана отобразится панель со списком уведомлений для авторизованного пользователя:&lt;br /&gt;
&lt;br /&gt;
[[File:Notifications new.png|thumbnone|x300px|alt=NotificationList|Панель уведомлений]]&lt;br /&gt;
&lt;br /&gt;
Нажмите кнопку [[File:Icon cross 01.png|15px]] для удаления уведомления.&lt;br /&gt;
&lt;br /&gt;
Нажмите кнопку '''Очистить''' для удаления всех уведомлений.&lt;br /&gt;
&lt;br /&gt;
=== Настройка профиля пользователя ===&lt;br /&gt;
Для перехода в профиль выберите пункт '''Профиль''' в меню пользователя в правом верхнем углу экрана:&lt;br /&gt;
[[File:06 Меню пользователя — без VSCode.png|thumb|none|250px|alt=UserMenu|Меню пользователя. Переход к настройке профиля]]&lt;br /&gt;
&lt;br /&gt;
В правой части экрана отобразится панель '''Профиль''', на которой можно изменить атрибуты своего профиля (ФИО, контакты), кроме логина, а также [[Help:UI manual#Изменение пароля|поменять пароль]].[[File: 07 Профиль основные параметры.png|thumb|none|x400px|alt=ProfileSetting|Настройки профиля пользователя]]&lt;br /&gt;
&lt;br /&gt;
{{Note|type=info|text=''Пользователь LDAP может скорректировать только '''Организации'''. Остальные атрибуты (ФИО, E-mail), а также функция изменения пароля, недоступны.''}}&lt;br /&gt;
&lt;br /&gt;
=== Изменение пароля ===&lt;br /&gt;
Для изменения пароля:&lt;br /&gt;
:1. Выберите пункт '''Профиль''' в меню пользователя.&lt;br /&gt;
:2. В разделе '''Профиль пользователя''' нажмите на ссылку '''Изменить пароль''':&lt;br /&gt;
:[[File:10_Профиль_изменение пароля.png|thumb|none|450px|Переход к изменению пароля в профиле пользователя]]&lt;br /&gt;
:3. В открывшемся окне:&lt;br /&gt;
::а) Введите текущий пароль.&lt;br /&gt;
::б) Дважды введите новый пароль.&lt;br /&gt;
::в) Нажмите кнопку '''Изменить'''.&lt;br /&gt;
::[[File:11_Профиль_ввод нового пароля.png|thumb|none|350px|Окно изменения пароля]]&lt;br /&gt;
&lt;br /&gt;
=== Настройка интерфейса ===&lt;br /&gt;
Для перехода к настройкам выберите пункт '''Настройки интерфейса''' в меню пользователя в правом верхнем углу экрана:&lt;br /&gt;
[[File:187 Меню пользователя интерфейс.png|thumb|none|250px|alt=UserMenu|Меню пользователя. Переход к настройке интерфейса]]&lt;br /&gt;
&lt;br /&gt;
В правой части экрана отобразится панель '''Настройки интерфейса''' с тремя группами параметров:&lt;br /&gt;
:1. '''Общие'''. Параметры этой группы позволяют:&lt;br /&gt;
::а) Выбрать фильтры, которые будут по умолчанию применяться при повторном входе в систему:&lt;br /&gt;
::*фильтры, установленные в предыдущей сессии (выбрано по умолчанию);&lt;br /&gt;
::*сохраненный пользовательский фильтр.&lt;br /&gt;
::б) Включить или выключить (выбрано по умолчанию) замену снимка на последний загруженный в БД Svacer снимок при открытии сохраненного контекста. &lt;br /&gt;
::Если параметр в состоянии «Выключен», при выборе проекта и ветки открывается последний импортированный снимок.&lt;br /&gt;
::в) Включить или выключить (выбрано по умолчанию) сохранение вкладок с открытыми файлами в каждом контексте.&lt;br /&gt;
::г) Включить (выбрано по умолчанию) или выключить сохранение применённой сортировки значений в таблице маркеров при [[Help:UI manual#Выход из системы|выходе из системы]].&lt;br /&gt;
::д) Включить или выключить (выбрано по умолчанию) механизм генерации PDF-файла на основе HTML при выгрузке отчета с [[Help:UI manual#Таблица маркеров|информацией о маркерах]]. &lt;br /&gt;
{{Note|type=warn|text=''Для использования генерации PDF на основе HTML на сервере Svacer должен быть [[Help:Installation#Браузер для PDF-отчетов|установлен браузер Chromium или Google Chrome]].''}}&lt;br /&gt;
:[[File:08 общие настройки интерфейса.png|thumb|none|600px|alt=UserInterfaceSettings|Настройки интерфейса. Группа параметров «Общие»]]&lt;br /&gt;
:2. '''Навигационная панель'''. Параметры этой группы позволяют:&lt;br /&gt;
::а) Выбрать отображение по умолчанию данных [[Help:UI manual#Вкладка «Детекторы»|на вкладке '''Детекторы''']] навигационной панели:&lt;br /&gt;
::*группировка детекторов по уровням серьезности (выбрано по умолчанию);&lt;br /&gt;
::*отображение детекторов в виде списка.&lt;br /&gt;
:::Выбранное отображение будет применяться [[Help:UI manual#Вкладка «Детекторы»|на вкладке '''Детекторы''']] каждый раз после входа в систему.&lt;br /&gt;
::б) Выбрать отображение по умолчанию данных [[Help:UI manual#Вкладка «Файлы»|на вкладке '''Файлы''']] навигационной панели:&lt;br /&gt;
::*только имя файла (выбрано по умолчанию);&lt;br /&gt;
::*полный путь к файлу.&lt;br /&gt;
::в) Выбрать способ сортировки в колонке '''Маркеры''' [[Help:UI manual#Вкладка «Файлы»|на вкладке '''Файлы''']] панели навигации:&lt;br /&gt;
::*по общему количеству маркеров (выбрано по умолчанию);&lt;br /&gt;
::*по количеству размеченных маркеров.&lt;br /&gt;
:[[File:08_настройки навигационной панели.png|thumb|none|600px|alt=UserInterfaceSettings|Настройки интерфейса. Группа параметров «Навигационная панель»]]&lt;br /&gt;
:3. '''Просмотр кода'''. Параметры этой группы позволяют:&lt;br /&gt;
::а) Включить (выбрано по умолчанию) или выключить использование темной темы (темный фон, светлый текст) при просмотре файлов с исходным кодом.&lt;br /&gt;
::б) Включить или выключить (выбрано по умолчанию) переиспользование [[Help:UI manual#Вкладка с исходным кодом|вкладки с исходным кодом]] в редакторе кода.&lt;br /&gt;
::в) Включить или выключить (выбрано по умолчанию) отображение всех элементов трассы маркера по нажатии на ссылку '''Показать трассу''' [[Help:UI manual#Вкладка с исходным кодом|в виджете маркера]].&lt;br /&gt;
::Если параметр находится в состоянии «Выключен», то будет отображаться только первый элемент трассы.&lt;br /&gt;
::г) Выбрать отображение виджета относительно строки кода, с которой он связан:&lt;br /&gt;
::*	над строкой кода (выбрано по умолчанию);&lt;br /&gt;
::*	под строкой кода.&lt;br /&gt;
:[[File:08 настройки просмотра кода.png|thumb|none|600px|alt=UserInterfaceSettings|Настройки интерфейса. Группа параметров «Просмотр кода»]]&lt;br /&gt;
:Эти настройки сохраняются для учётной записи пользователя и не сбрасываются при новой сессии.&lt;br /&gt;
:Чтобы сбросить параметры любой группы к значениям по умолчанию, нажмите на ссылку '''Сбросить настройки''' внизу панели '''Настройки интерфейса'''.&lt;br /&gt;
&lt;br /&gt;
=== Настройка уведомлений ===&lt;br /&gt;
Система может уведомлять пользователей по каналам E-mail и Telegram о следующих типах операций:&lt;br /&gt;
* добавление (при импорте, копировании, клонировании) и удаление снимков; &lt;br /&gt;
* изменение разметки маркеров; &lt;br /&gt;
* добавление комментариев к маркерам. &lt;br /&gt;
&lt;br /&gt;
Для перехода к настройкам выберите пункт '''Настройки уведомлений''' в меню пользователя в правом верхнем углу экрана:&lt;br /&gt;
[[File:188 Меню пользователя - уведомления.png|thumb|none|250px|Меню пользователя. Переход к настройке уведомлений]]&lt;br /&gt;
&lt;br /&gt;
В правой части экрана отобразится панель '''Настройки уведомлений''' с двумя группами параметров:&lt;br /&gt;
:1. '''Типы уведомлений'''. Параметры этой группы позволяют выбрать канал, по которому будут приходить уведомления, настроить и проверить его. Для этого:&lt;br /&gt;
::а) Включите опцию '''E-mail''' и (или) '''Telegram chat ID'''.&lt;br /&gt;
::При выборе уведомления по '''E-mail''' используется адрес электронной почты, указанный [[Help:UI manual#Настройка профиля пользователя|в профиле пользователя]].&lt;br /&gt;
::б) При выборе уведомления по '''Telegram''' введите '''Telegram chat ID'''.&lt;br /&gt;
::в) Чтобы проверить подключение к каналу нажмите кнопку '''Проверить'''.&lt;br /&gt;
::Отправится тестовое сообщение по указанным реквизитам:&lt;br /&gt;
::[[File:189 Настройки уведомлений.png|thumb|thumb|none|600px|alt=UserInterfaceSettings|Настройки уведомлений]]&lt;br /&gt;
:2. '''Подписки'''. Позволяют выбрать проекты, ветки и события, при возникновении которых будут приходить уведомления. Для этого:&lt;br /&gt;
::а) Для добавления подписки нажмите кнопку '''Добавить''' и в появившейся строке в раскрывающемся списке выберите проект и/или его ветку.&lt;br /&gt;
::Чтобы уведомления приходили при изменениях во всех проектах, доступных пользователю, выберите значение '''Все''' в раскрывающемся списке проектов.&lt;br /&gt;
::[[File:190 Настройки уведомлений. Выбор ветки.png|thumb|thumb|none|600px|alt=UserInterfaceSettings|Настройки уведомлений. Выбор ветки]]&lt;br /&gt;
::б) Выберите объекты, при изменении которых будут приходить уведомления – установите флажки в столбцах '''Снимки''', '''Разметка''', '''Комментарии'''.&lt;br /&gt;
::в) Если требуется получать уведомления о разметке и/или комментариях только в маркерах, в которых пользователь принимал участие, установите флажок в столбце '''Участие''' (доступен, только если установлены флажки в столбцах '''Разметка''' и/или '''Комментарии''').&lt;br /&gt;
::г) Для настройки исключения из подписки на уведомления нажмите кнопку [[File:Icon plus.png|x25px]].&lt;br /&gt;
::Кнопка примет вид [[File:Icon minus.png|x25px]].&lt;br /&gt;
::д) Для удаления подписки на уведомления нажмите кнопку [[File:Icon minus.png|x25px]].&lt;br /&gt;
::По окончании настройки уведомлений нажмите кнопку '''Сохранить'''.&lt;br /&gt;
&lt;br /&gt;
=== Управление лицензией ===&lt;br /&gt;
{{Note|type=info|text=''В версии сервера Svacer 12.0.0 лицензия встроена в дистрибутив и не ограничивает функции системы. Срок действия встроенной лицензии – до 31.12.2027 г.''}}&lt;br /&gt;
&lt;br /&gt;
Чтобы посмотреть текст лицензии системы и копировать его, а также для активации новой лицензии, выберите пункт '''Лицензия''' в меню пользователя в правом верхнем углу экрана.&lt;br /&gt;
В правой части экрана отобразится панель '''Лицензия'''.&lt;br /&gt;
[[File:231 Меню пользователя Переход к просмотру лицензии.png|thumb|none|450px|Меню пользователя. Переход к просмотру лицензии]]&lt;br /&gt;
[[File:232 Панель Лицензия.png|thumb|none|x400px|Панель «Лицензия»]]&lt;br /&gt;
&lt;br /&gt;
Чтобы скопировать текст лицензии, нажмите кнопку [[File:Icon copy link.png|x15px]].&lt;br /&gt;
Чтобы активировать лицензию:&lt;br /&gt;
:1. Нажмите на ссылку '''Активировать новую'''.&lt;br /&gt;
:2. В открывшемся окне '''Активация лицензии''' введите лицензионный ключ и нажмите кнопку '''Активировать'''.&lt;br /&gt;
{{Note|type=warn|text=''Функция активации лицензии доступна пользователям с [[#Серверные доступы|серверным доступом]] '''Администрирование сервера'''.''}}&lt;br /&gt;
[[File:233 Окно Лицензия.png|thumb|none|600px|Окно «Активация лицензии»]]&lt;br /&gt;
&lt;br /&gt;
=== Просмотр информации о программе ===&lt;br /&gt;
Чтобы посмотреть информацию о программе, выберите пункт '''О программе''' в меню пользователя в правом верхнем углу экрана.&lt;br /&gt;
[[File:12_Меню пользователя_о программе — без VSCode.png|thumb|none|250px|Меню пользователя. Переход к просмотру информации о программе]]&lt;br /&gt;
&lt;br /&gt;
Откроется окно с информацией о программе&lt;br /&gt;
[[File:13 1 О программме.png|none|thumb|600x600px|Информация о программе]]&lt;br /&gt;
Нажмите на ссылку в строке '''Документация и релизы''' для перехода на страницу документации к системе и ссылкам для скачивания дистрибутивов релизов Svacer.&lt;br /&gt;
&lt;br /&gt;
Нажмите на ссылку в строке '''Спецификация OpenAPI''' для открытия страницы Swagger с описанием API методов используемых в Svacer.&lt;br /&gt;
&lt;br /&gt;
Нажмите на ссылку '''Telegram''' в строке '''Поддержка и Обратная связь''' для открытия чата с технической поддержкой.&lt;br /&gt;
&lt;br /&gt;
Нажмите на ссылку '''Email''' в строке '''Поддержка и обратная связь''' для отправки сообщения в службу технической поддержки по электронной почте.&lt;br /&gt;
&lt;br /&gt;
== Выбор контекста (проекта, ветки и снимка) ==&lt;br /&gt;
Для работы [[Help:UI manual#Работа в режиме разметки|в режиме разметки]] или [[Help:UI manual#Работа в режиме просмотра кода|режиме просмотра кода]] требуется выбрать проект, ветку и снимок с результатами работы анализатора Svace. &lt;br /&gt;
&lt;br /&gt;
При необходимости список проектов можно отфильтровать по группе проектов. Это можно сделать в блоке, который расположен под [[Help:UI manual#Описание основных элементов пользовательского интерфейса|верхней панелью]]. &lt;br /&gt;
&lt;br /&gt;
[[File:14_Выбор проекта, верки, снимка.png|800px]]&lt;br /&gt;
&lt;br /&gt;
По умолчанию после выбора проекта автоматически выбирается ветка master и последний импортированный снимок, если [[Help:UI manual#Настройка интерфейса|параметр '''При открытии сохраненного контекста заменить снимок на последний загруженный''']] находится в состоянии '''Выключен'''. Если master отсутствует, то ветку нужно выбрать вручную.&lt;br /&gt;
&lt;br /&gt;
== Работа в режиме разметки ==&lt;br /&gt;
Режим разметки предоставляет следующий набор элементов управления:&lt;br /&gt;
:1. Навигационная панель:&lt;br /&gt;
:* [[Help:UI manual#Вкладка «Детекторы»|вкладка '''Детекторы''']];&lt;br /&gt;
:* [[Help:UI manual#Вкладка «Файлы»|вкладка '''Файлы''']].&lt;br /&gt;
:Эту панель можно скрыть. Для этого нажмите кнопку [[File:Button Скрыть навигацию.png|x25px]] в правом верхнем её углу. Чтобы панель раскрыть, нажмите кнопку [[File:Button Паказать навигацию.png|x25px]].&lt;br /&gt;
:2. Центральная панель:&lt;br /&gt;
:* [[Help:UI manual#Вкладка «Информация о снимке»|вкладка '''Информация о снимке''']] – открывается по нажатии кнопки [[File:Icon Information.png|25x25px]];&lt;br /&gt;
:* одна или несколько [[Help:UI manual#Вкладка с исходным кодом|вкладок с исходным кодом''']] (отображаются после выбора файлов в таблице маркеров или навигационной панели);&lt;br /&gt;
:* [[Help:UI manual#Таблица маркеров|таблица маркеров]];&lt;br /&gt;
:3. [[Help:UI manual#Функции правой панели|Правая панель]] с информацией о маркере. &lt;br /&gt;
:Эту панель можно скрыть. Для этого нажмите кнопку [[File:Button Паказать навигацию.png|x25px]] в левом верхнем её углу. Чтобы панель раскрыть, нажмите кнопку [[File:Button Скрыть навигацию.png|x25px]].&lt;br /&gt;
&lt;br /&gt;
[[File:96 Режим разметки. Набор элементов управления.png|800px|thumb|none|Режим разметки. Набор элементов управления]]&lt;br /&gt;
&lt;br /&gt;
=== Функции навигационной панели ===&lt;br /&gt;
==== Вкладка «Детекторы» ====&lt;br /&gt;
На этой вкладке отображается список детекторов Svace, которые сработали в выбранном снимке.&lt;br /&gt;
&lt;br /&gt;
Серьезность (критичность) детектора обозначена цветом:&lt;br /&gt;
* красный – наивысшая серьезность (CRITICAL);&lt;br /&gt;
* желтый – высокая серьезность (MAJOR);&lt;br /&gt;
* белый – обычная серьезность (NORMAL, MINOR, UNDEFINED).&lt;br /&gt;
&lt;br /&gt;
На вкладке '''Детекторы''' пользователю доступны следующие функции:&lt;br /&gt;
:1. Поиск по детекторам и файлам.&lt;br /&gt;
:2. Выгрузка списка отображаемых на панели детекторов и маркеров в файл формата .csv – для этого нажмите кнопку [[File:Button Скачать CSV.png|x25px]]&lt;br /&gt;
:3. Отображение данных в виде списка – для этого нажмите кнопку [[File:icon_list.png|x25px]].&lt;br /&gt;
:4. Группировка детекторов по уровням серьезности (по умолчанию) – для этого нажмите кнопку [[File:icon_tree.png|x25px]].&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;
  16_Детекторы_список.png|Вкладка '''Детекторы''' с данными в виде списка&lt;br /&gt;
  15_Детекторы_группировка.png|Вкладка '''Детекторы''' с группировкой по уровням серьезности&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
:5. Сворачивание и разворачивание дерева детекторов (доступно при любом виде группировки):&lt;br /&gt;
::а) Для сворачивание нажмите кнопку [[File:Button Скрыть таблицу.png|x25px]].  &lt;br /&gt;
::Список детекторов свернется: при примененной группировке отобразятся группы детекторов; при отображении данных в виде списка отобразится список детекторов; кнопка примет вид [[File:Button Показать таблицу.png|x25px]].&lt;br /&gt;
::б) Для разворачивания нажмите кнопку [[File:Button Показать таблицу.png|x25px]]. &lt;br /&gt;
::Список детекторов развернется полностью: при примененной группировке отобразятся группы детекторов с раскрытыми списками детекторов и файлов, в которых они найдены; при отображении данных в виде списка отобразится список детекторов с раскрытыми списками файлов, в которых они найдены; кнопка примет вид [[File:Button Скрыть таблицу.png|x25px]].&lt;br /&gt;
:6. Отображение списка маркеров в файлах, в которых сработал детектор – для этого нажмите кнопку [[File:icon_uncover.png|x15px]] в левой части его имени.&lt;br /&gt;
:[[File:checker_uncover.png|thumb|none|320px|Список маркеров, найденных детектором]]&lt;br /&gt;
:7. [[Help:UI manual#Блокировка разметки|Блокировка всех маркеров]], найденных детектором, для разметки другими пользователями – для этого нажмите кнопку [[File:icon_unlocked.png|x25px]] справа от названия детектора (отображается при наведении курсора).&lt;br /&gt;
:8. Применение фильтра по детектору [[Help:UI manual#Таблица маркеров|в таблице маркеров]] – для этого нажмите на название детектора или название файла в раскрывающемся списке маркеров детектора.&lt;br /&gt;
:9. Применение фильтра по серьезности [[Help:UI manual#Таблица маркеров|в таблице маркеров]] – для этого нажмите на название группы серьезности.&lt;br /&gt;
:10. Отмена фильтров по серьезности, детекторам и файлам – для этого нажмите кнопку [[File:icon_return.png|x25px]].&lt;br /&gt;
:11. Отображение [[Help:UI manual#Вкладка с исходным кодом|на вкладке исходного кода]] содержимого файла, места и содержания маркера, а также подробной информации о маркере [[Help:UI manual#Функции правой панели|на правой панели]] – для этого нажмите на маркер.&lt;br /&gt;
:12. Просмотр фрагмента кода в режиме предпросмотра – для этого нажмите кнопку [[File:icon_preview_code.png|x25px]].&lt;br /&gt;
&lt;br /&gt;
==== Вкладка «Файлы» ====&lt;br /&gt;
На этой вкладке отображается список файлов, в которых найдены маркеры.&lt;br /&gt;
&lt;br /&gt;
[[File:17 Файлы.png|thumb|none|300px|Вкладка '''Файлы''']]&lt;br /&gt;
&lt;br /&gt;
Для каждого файла отображаются: &lt;br /&gt;
* имя;&lt;br /&gt;
* количество найденных маркеров (предупреждений);&lt;br /&gt;
* количество размеченных маркеров;&lt;br /&gt;
* кнопки [[File:Icon plus.png|x25px]] или [[File:Icon minus.png|x25px]] (если применена фильтрация по файлам).&lt;br /&gt;
&lt;br /&gt;
На вкладке '''Файлы''' пользователю доступны следующие функции:&lt;br /&gt;
:1. Просмотр на [[Help:UI manual#Вкладка с исходным кодом|вкладке с исходным кодом]]: содержимого файла, места и содержания маркера, а также подробной информации о маркере [[Help:UI manual#Функции правой панели|на правой панели]] – без включения фильтрации по этому файлу. Для этого нажмите на имя файла.&lt;br /&gt;
:2. Применение фильтра по файлам [[Help:UI manual#Таблица маркеров|в таблице маркеров]] – для этого нажмите кнопку [[File:Icon plus.png|x25px]] в одной или нескольких строках. &lt;br /&gt;
:Фильтр применится, кнопка [[File:Icon plus.png|x25px]] в списке файлов поменяется на [[File:Icon minus.png|x25px]].&lt;br /&gt;
:3. Исключение файла из фильтра по файлам [[Help:UI manual#Таблица маркеров|в таблице маркеров]] – для этого нажмите кнопку [[File:Icon minus.png|x25px]] в строке файла.&lt;br /&gt;
:4. Отмена фильтрации [[Help:UI manual#Таблица маркеров|в таблице маркеров]] для всех выбранных файлов – для этого нажмите кнопку [[File:Icon minus 3.png|x25px]] или кнопку [[File:icon_return.png|x25px]] [[Help:UI manual#Вкладка «Детекторы»|на вкладке '''Детекторы''']].&lt;br /&gt;
:5. [[Help:UI manual#Блокировка разметки|Блокировка всех маркеров]] в файле для разметки другими пользователями – для этого нажмите кнопку [[File:icon_unlocked.png|x25px]] справа от названия файла (отображается при наведении курсора).&lt;br /&gt;
:6. Поиск по имени/пути файла в поле '''Поиск по полному пути'''. Поддерживается поиск с использованием [[Help:UI manual#Использование регулярных выражений|регулярных выражений]].&lt;br /&gt;
:7. Сортировка файлов по количеству маркеров – для этого нажмите кнопку [[File:Icon-expand-all.png|x25px]]&lt;br /&gt;
:8. Выгрузка списка отображаемых на панели файлов в файл формата .csv – для этого нажмите кнопку [[File:button_Скачать CSV.png|25px]]&lt;br /&gt;
:9. Настройка отображения файлов и сортировки в колонке '''Маркеры''' на вкладке '''Файлы''' – для этого нажмите кнопку [[File:icon_gear.png|x25px]] и поменяйте настройки.&lt;br /&gt;
:[[File:18 Временная настройка панели навигации.png|thumb|none|800px|Настройка отображения файлов и сортировки полей]]&lt;br /&gt;
&lt;br /&gt;
=== Функции центральной панели ===&lt;br /&gt;
==== Вкладка «Информация о снимке» ====&lt;br /&gt;
На этой вкладке отображается информация о выбранном снимке.&lt;br /&gt;
&lt;br /&gt;
[[File:19 Информация о снимке.png|thumb|left|600px|Вкладка '''Информация о снимке''']]&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
На вкладке '''Информация о снимке''' пользователю доступны следующие функции:&lt;br /&gt;
:1. Просмотр подробной информации о снимке во всплывающем окне – для этого нажмите кнопку '''Просмотреть JSON'''.&lt;br /&gt;
:2. Экспорт [[Help:UI manual#Экспорт|исходного кода, снимков и разметки]] – для этого нажмите кнопку '''Экспорт''' и выберите подходящий вариант.&lt;br /&gt;
:3. [[Help:UI manual#Импорт разметки|Импорт разметки]] – для этого нажмите кнопку '''Импорт''' и выберите подходящий вариант.&lt;br /&gt;
:4. Переход к более продвинутой навигации по исходному коду с подсветкой маркеров во встроенном Web-IDE  Theia – для этого нажмите кнопку '''Открыть в IDE''' .&lt;br /&gt;
:{{Note|type=warn|text=''Функциональность является экспериментальной, доступна при наличии проектного доступа '''Экспорт снимков''' и запуске веб-приложения Svacer по протоколу HTTPS или на локальном хосте. Список доступных IDE определяется при инсталляции. Если доступна только одна IDE, то раскрывающийся список отсутствует, а IDE открывается сразу по нажатию кнопки '''Открыть в IDE'''. Если функциональность недоступна, кнопка '''Открыть в IDE''' неактивна и отображается иконка'' [[File:Icon attention.png|23x23px]]''.''}}&lt;br /&gt;
:5. Просмотр списка приложенных файлов —  по нажатии кнопки '''Показать''', но только при наличии приложенных файлов.&lt;br /&gt;
:6. Скрытие списка приложенных файлов (возможно только при наличии приложенных файлов) – для этого нажмите на ссылку '''Скрыть'''.&lt;br /&gt;
:7. Удаление приложенного файла (возможно только при наличии приложенных файлов) — для этого нажмите кнопку  [[File:icon_delete.png|x25px]].&lt;br /&gt;
:8. Просмотр пользовательских полей, которые пользователь указал при импорте – доступен по нажатии кнопки '''Показать''', но только при наличии этих полей.&lt;br /&gt;
:9. Просмотр параметров анализа во всплывающем окне – для этого нажмите кнопку '''Показать''' в строке '''Параметры анализа'''.&lt;br /&gt;
:10. Экспорт параметров анализа в формате .txt – для этого нажмите кнопку '''Скачать''' в строке '''Параметры анализа'''.&lt;br /&gt;
:11. [[Help:UI manual#Работа с таблицей статистики|Просмотр таблицы статистики]] – для этого нажмите кнопку '''Показать''' в строке '''Статистика по детекторам'''.&lt;br /&gt;
:Информация в таблице сгруппирована по параметрам детекторов, найденным маркерам и статусу их разметки.&lt;br /&gt;
&lt;br /&gt;
==== Вкладка с исходным кодом ====&lt;br /&gt;
Вкладка открывается только после выбора файла [[Help:UI manual#Вкладка «Детекторы»|на вкладке '''Детекторы''']] или [[Help:UI manual#Вкладка «Файлы»|'''Файлы''']], а также [[Help:UI manual#Таблица маркеров|в таблице маркеров]]. Одновременно может быть открыто несколько вкладок с исходным кодом, если выключена [[Help:UI manual#Настройка профиля пользователя|настройка '''Переиспользование вкладки в редакторе кода''']].&lt;br /&gt;
&lt;br /&gt;
В верхней части вкладки отображаются панель инструментов для работы с файлом [1] и полный путь к файлу [2]. Если в строке кода установлен курсор, то в нижнем правом углу вкладки отображается его позиция [3]:&lt;br /&gt;
[[File:20 Исходный код.png|thumb|none|600px|Полный путь к файлу и позиционирование курсора]]&lt;br /&gt;
&lt;br /&gt;
На вкладке с исходным кодом пользователю доступны следующие функции:&lt;br /&gt;
:1. Отображение кода на весь экран – для этого нажмите кнопку [[File:Icon expand.png|23x23px]] или дважды кликните на вкладку файла. &lt;br /&gt;
:&lt;br /&gt;
:Для возврата к обычному отображению нажмите кнопку [[File:Icon minimize.png|24x24px]] или дважды кликните на вкладку файла.&lt;br /&gt;
:2. Переход к предыдущей или следующей строке, в которую пользователь установил курсор, – для этого используйте кнопки [[File:Button left.png|23x23px]] и [[File:Button right.png]] или сочетания клавиш '''Ctrl&amp;amp;nbsp;+&amp;amp;nbsp;&amp;lt;''' и '''Ctrl&amp;amp;nbsp;+&amp;amp;nbsp;&amp;gt;'''.&lt;br /&gt;
:3. Просмотр и открытие маркеров из списка всех маркеров в данном файле – для этого нажмите кнопку [[File:Icon list 2.png|x25px]].&lt;br /&gt;
:[[File:21 Исходный код Отображение списка маркеров.png|thumb|none|300px|right|Cписок маркеров в файле]]&lt;br /&gt;
:4. Отображение всех маркеров – для этого нажмите кнопку [[File:Icon Скрыть маркеры.png|24x24px]].&lt;br /&gt;
:Кнопка недоступна, если она уже нажата; все маркеры уже отображаются.&lt;br /&gt;
:5. Скрытие всех маркеров и трасс – для этого нажмите кнопку [[File:Icon Показать маркеры.png|24x24px]].&lt;br /&gt;
:Кнопка недоступна, если она уже нажата; все маркеры уже скрыты.&lt;br /&gt;
:6. Добавление комментария к строке кода – можно сделать двумя способами:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button Comment Add.png|x25px]] в левой части строки, рядом с её номером (отображается только если в строке установлен курсор) и введите комментарий.&lt;br /&gt;
::ИЛИ&lt;br /&gt;
::б) Нажмите правой кнопкой мыши на строку и выберите пункт '''Добавить комментарий'''. Этим способом можно добавить несколько комментариев к одной строке.&lt;br /&gt;
:7. Просмотр комментария к строке – можно сделать двумя способами:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button Comment view.png|x25px]] в левой части строки, рядом с её номером.&lt;br /&gt;
::ИЛИ&lt;br /&gt;
::б) Нажмите кнопку [[File:Button Comment view.png|x25px]] на панели инструментов и выберите в списке строку комментария.&lt;br /&gt;
::Отобразится виджет комментария, в котором доступны следующие функции:&lt;br /&gt;
::*добавление дополнительного комментария к этой строке кода по нажатии кнопки [[File:Button Comment Add.png|x25px]];&lt;br /&gt;
::*редактирование текста комментария по нажатии кнопки [[File:icon_edit3.png|x25px]];&lt;br /&gt;
::*удаление комментария по нажатии кнопки [[File:icon_delete 2.png|x25px]].&lt;br /&gt;
:[[File:118 Виджет комментария к строке кода.png|thumb|none|600px|Виджет комментария к строке кода]]&lt;br /&gt;
:8. Просмотр и открытие комментариев из списка всех комментариев в коде – для этого нажмите кнопку [[File:Button Comment view.png|x25px]] справа.&lt;br /&gt;
:9. Отображение всех комментариев в коде – для этого нажмите кнопку [[File:Button_Comment_view_all.png|x25px]] в панели инструментов.&lt;br /&gt;
:Кнопка недоступна, если она уже нажата; все комментарии уже отображаются.&lt;br /&gt;
:10. Скрытие всех комментариев в коде – для этого нажмите кнопку [[File:Button_Comment_hide_all.png|x25px]] в панели инструментов.&lt;br /&gt;
:Кнопка недоступна, если она уже нажата; все комментарии уже скрыты.&lt;br /&gt;
:11. Добавление открытого файла в [[Help:UI manual#Использование фильтров|фильтр]] [[Help:UI manual#Таблица маркеров|таблицы маркеров]]  – для этого нажмите кнопку [[File:Icon filter add.png|x25px]] в панели инструментов. &lt;br /&gt;
:Фильтрация применится, вид кнопки поменяется на [[File:Icon filter remove.png|x25px]].&lt;br /&gt;
:12. Исключение файла из [[Help:UI manual#Использование фильтров|фильтра]] [[Help:UI manual#Таблица маркеров|таблицы маркеров]] – для этого нажмите кнопку [[File:Icon filter remove.png|x25px]] в панели инструментов. &lt;br /&gt;
:Фильтрация по этому файлу отменится, вид кнопки поменяется на [[File:Icon filter add.png|x25px]].&lt;br /&gt;
:13. Возврат к исходному маркеру (например, если был выбран другой связанный маркер на вкладке '''Трасса''' [[Help:UI manual#Функции правой панели|правой панели]]) – для этого нажмите кнопку [[File:Icon target.png|x25px]] в верхней части виджета маркера.&lt;br /&gt;
:14. [[Help:UI manual#Разметка маркера|Разметка маркера]] – установите '''Статус''', '''Серьезность''' и '''Действия''' в верхней части виджета маркера.&lt;br /&gt;
:15. Отображение блока элементов трассы в виджете маркера для строки кода – нажмите ссылку '''Показать трассу''' (доступна, если все блоки элементов трассы скрыты).&lt;br /&gt;
::Для последовательного перехода к другим элементам трассы воспользуйтесь кнопками [[File:Button up.png|x25px]] и [[File:Button down.png|x25px]].&lt;br /&gt;
::{{Note|type=info|text=''Отображение только первого элемента трассы или всех элементов трассы маркера по нажатии кнопки '''Показать трассу''' настраивается с помощью [[Help:UI manual#Настройка интерфейса|параметра '''Показывать всю трассу маркера''']].''}}&lt;br /&gt;
::[[File:97 Блок информации о элементе трассы.png|thumb|none|600px|Виджет маркера с блоком элемента трассы]]&lt;br /&gt;
:16. Скрытие блоков элементов трассы в виджете маркера для строки кода – нажмите ссылку '''Скрыть трассу''' (доступна, если хотя бы один блок элемента трассы отображается). &lt;br /&gt;
::Все открытые блоки элементов трассы маркера скроются.&lt;br /&gt;
:17. Переход к строке, в которой объявлена/определена переменная – нажмите правую кнопку мыши на строке исходного кода и выберите пункт '''Перейти к объявлению / Перейти к определению'''.&lt;br /&gt;
:{{Note|type=info|text=''Если для выделенного элемента кода нет объявления или определения, то отобразится сообщение: [[File:150 Объявление не найдено.png|247x247px]] или [[File:151 Определение не найдено.png|254x254px]].''}}&lt;br /&gt;
&lt;br /&gt;
:18. Просмотр ссылок на панели внизу экрана – нажмите правую кнопку мыши на строке исходного кода и выберите пункт '''Найти ссылки'''. На этой панели отображается иерархический список файлов с номерами строк, в которых найдены ссылки:&lt;br /&gt;
:[[File:Исходный_код_Референсы.png|thumb|none|600px|Cписок файлов с номерами строк, в которых найдены ссылки]]&lt;br /&gt;
&lt;br /&gt;
:* Чтобы перейти к строке кода, на которую найдена ссылка, нажмите на ссылку с номером строки на панели [1].&lt;br /&gt;
:* Чтобы посмотреть фрагмент кода, на который найдена ссылка, в режиме предпросмотра, нажмите кнопку [[File:icon_preview_code.png|x25px]] [2].&lt;br /&gt;
:{{Note|type=info|text=''Если для выделенного элемента кода нет ссылок, то отобразится сообщение: [[File:152 Ссылки не найдены.png|213x213px]].''}}&lt;br /&gt;
&lt;br /&gt;
:19. Переход к просмотру выбранного файла [[Help:UI manual#Работа в режиме просмотра кода|в режиме просмотра кода]] – нажмите правую кнопку мыши на строке исходного кода и выберите пункт '''Открыть в режиме Код'''.&lt;br /&gt;
:20. Копирование ссылки на строку кода в буфер обмена – нажмите правую кнопку мыши на строке исходного кода и выберите пункт '''Копировать прямую ссылку'''.  &lt;br /&gt;
::При переходе по этой ссылке будет открываться файл в режиме разметки с курсором на той строке кода, для которой была скопирована ссылка.&lt;br /&gt;
:21. Увеличение и уменьшение размера шрифта кода вместе с отображаемыми виджетами – нажмите правую кнопку мыши на любой строке исходного кода и выберите пункт '''Уменьшить''' или '''Увеличить''', либо установите курсор в любую строку и нажмите сочетание клавиш '''Ctrl&amp;amp;nbsp;+&amp;amp;nbsp;Alt&amp;amp;nbsp;+&amp;amp;nbsp;-''' или '''Ctrl&amp;amp;nbsp;+&amp;amp;nbsp;Alt&amp;amp;nbsp;+&amp;amp;nbsp;='''&lt;br /&gt;
:22. Копирование строки кода – нажмите правую кнопку мыши на строке исходного кода и выберите пункт '''Copy'''.&lt;br /&gt;
:23. Вызов командной строки – нажмите правую кнопку мыши на строке исходного кода и выберите пункт '''Command Palette'''.&lt;br /&gt;
:[[File:25 Исходный код Вызов командной строки.png|thumb|none|600px|Командная строка]]&lt;br /&gt;
&lt;br /&gt;
==== Таблица маркеров ====&lt;br /&gt;
Для раскрытия таблицы маркеров нажмите кнопку [[File:Button Показать таблицу.png|x25px]] в верхней части [[Help:UI manual#Функции центральной панели|центральной панели]], а для её скрытия – [[File:Button Скрыть таблицу.png|x25px]].&lt;br /&gt;
&lt;br /&gt;
В верхней части таблицы находится панель, которая содержит:&lt;br /&gt;
* [[File:Field Детектор.png|x25px]] – поле с информацией [[Help:UI manual#Использование фильтров|о примененных фильтрах]]: как назначенных [[Help:UI manual#Функции навигационной панели|в навигационной панели]], так и с помощью [[Help:UI manual#Настройка и использование пользовательских фильтров|пользовательских фильтров]] и запросов;&lt;br /&gt;
* &amp;lt;span id=&amp;quot;dwl_pdf&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;кнопка [[File:Icon download.png|x25px]] – выгрузка маркеров в файл формата .csv или .pdf: только для [[Help:UI manual#choice|выбранных]] или всех отображаемых маркеров, если ничего не выбрано. Отчет в формате .pdf может быть сгенерирован на основе HTML, так и существующим (нативным) способом. В PDF-отчете, сгенерированном на основе HTML, усовершенствованы стили, доработан титульный лист, актуализирован набор параметров для выгружаемых маркеров и пр.; &lt;br /&gt;
:{{Note|type=warn|text='''''Примечания:'''''&lt;br /&gt;
:* ''если в таблице не отображаются маркеры из-за примененных пользовательских фильтров, то в сгенерированном PDF-отчете будет указано «Нет маркеров (применены фильтры)»;''&lt;br /&gt;
:* ''для использования механизма генерации PDF-отчёта на основе HTML должна быть включена [[Help:UI manual#Настройка интерфейса|одноименная настройка]];''&lt;br /&gt;
:* ''генерация PDF-отчета на основе HTML может занимать больше времени, чем нативная генерация;''&lt;br /&gt;
:* ''спецсимволы (иконки), добавленные в комментариях к маркерам, не отображаются в выгруженном PDF-отчете.''}}&lt;br /&gt;
&lt;br /&gt;
* кнопка [[File:Icon edit.png|x25px]] – переход [[Help:UI manual#Групповая разметка маркеров|к групповой разметке]] выбранных маркеров (доступна, если выбраны маркеры в таблице);&lt;br /&gt;
* кнопка [[File:Button_Comment_Add.png|x25px]] – переход к [[Help:UI manual#Добавление общего комментария к нескольким маркерам|добавлению общего комментария к нескольким выбранным маркерам]].&lt;br /&gt;
&lt;br /&gt;
:[[File:26 Таблица маркеров.png|thumb|none|800px|Таблица маркеров с примененными фильтрами]]&lt;br /&gt;
&lt;br /&gt;
В таблице маркеров пользователю доступны следующие функции:&lt;br /&gt;
:1. Сортировка по значениям столбцов.&lt;br /&gt;
:2. &amp;lt;span id=&amp;quot;choice&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Выбор маркеров для [[Help:UI manual#dwl pdf|выгрузки отчета]], [[Help:UI manual#Групповая разметка маркеров|групповой разметки]] или [[Help:UI manual#Добавление общего комментария к нескольким маркерам|добавления общего комментария к нескольким маркерам]] – для этого установите флажок в строке маркера.&lt;br /&gt;
:3. Просмотр подробной информации о маркере [[Help:UI manual#Функции правой панели|в правой панели]] и его места и содержания [[Help:UI manual#Вкладка с исходным кодом|на вкладке с исходным кодом]] – для этого дважды кликните на строку маркера или нажмите на имя файла в столбце '''Файл'''. Также для выбора можно использовать клавиши ↑ и ↓ – для перемещения по строкам, и Enter – для подтверждения выбора.&lt;br /&gt;
:4. Просмотр детальной информации о маркере в JSON-формате – для этого нажмите правой кнопкой мыши на маркер и выберите пункт '''Просмотреть JSON'''.&lt;br /&gt;
:5. Копирование детальной информации о маркере (JSON маркера) в буфер обмена – для этого нажмите правой кнопкой мыши на маркер и выберите пункт '''Копировать JSON'''.&lt;br /&gt;
:При переходе по этой ссылке будет открываться список маркеров в режиме разметки с открытым маркером (в правой панели и на вкладке с исходным кодом), для которого была скопирована ссылка.&lt;br /&gt;
:6. Копирование ссылки на маркер в буфер обмена – для этого нажмите правой кнопкой мыши на маркер и выберите пункт '''Копировать ссылку на маркер'''.&lt;br /&gt;
:7. Переход к [[Help:UI manual#Сравнение маркеров|сравнению одного маркера с другим]] – для этого нажмите правой кнопкой мыши на маркер и выберите пункт '''Сравнить с ...'''&lt;br /&gt;
&lt;br /&gt;
=== Функции правой панели ===&lt;br /&gt;
Эта панель предоставляет подробную информацию о маркере и его [[Help:UI manual#Разметка маркера|разметке]]:&lt;br /&gt;
* статус [[Help:UI manual#Блокировка разметки|блокировки разметки]];&lt;br /&gt;
* статус [[Help:UI manual#Разметка маркера|разметки, его серьезность и требуемое действие]];&lt;br /&gt;
* автор последней разметки и прочее.&lt;br /&gt;
[[File:27 Правая панель.png|thumb|none|upright=4|Правая панель]]&lt;br /&gt;
&lt;br /&gt;
На правой панели пользователю доступны следующие функции:&lt;br /&gt;
:1. Копирование ссылки на маркер – для этого нажмите кнопку [[File:Icon copy link.png|x25px]].&lt;br /&gt;
:2. [[Help:UI manual#Блокировка разметки|Блокировка маркера]] для разметки другими пользователями – для этого нажмите кнопку [[File:icon_unlocked.png|x25px]] в верхней части правой панели.&lt;br /&gt;
:3. [[Help:UI manual#Разметка маркера|Разметка маркера]] – для этого установите '''Статус''', '''Серьезность''' и '''Действие''' в верхней части правой панели.&lt;br /&gt;
:4. Просмотр истории разметки со связанными комментариями – для этого нажмите кнопку [[File:Icon history.png|x25px]] в верхней части правой панели.&lt;br /&gt;
:[[File:28 История изменения маркера.png|thumb|none|upright=2.5|Пример истории изменения разметки маркера]]&lt;br /&gt;
&lt;br /&gt;
:5. Отображение маркера [[Help:UI manual#Вкладка с исходным кодом|на вкладке с исходным кодом]] нажмите кнопку с именем файла и номером строки в верхней части правой панели.&lt;br /&gt;
:6. Отображение элемента трассы [[Help:UI manual#Вкладка с исходным кодом|на вкладке с исходным кодом]] – для этого нажмите на ссылку с именем файла и номером строки на вкладке '''Трасса''' [1].&lt;br /&gt;
:7. Отображение кода, который соответствует строке трассы, в отдельном окне в режиме предпросмотра – для этого на вкладке '''Трасса''' нажмите кнопку [[File:Icon preview code.png|x25px]] рядом с именем файла и номером строки [2].&lt;br /&gt;
:[[File:31 Предпросмотр кода.png|thumb|none|upright=2.5|Элементы управления для работы с элементом трассы]]&lt;br /&gt;
:8. Просмотр и добавление комментариев к маркеру на вкладке '''Комментарии'''. &lt;br /&gt;
:Комментарии для каждого маркера уникальны. Добавление одинаковых комментариев недоступно.&lt;br /&gt;
:Редактор комментариев поддерживает синтаксис Markdown.&lt;br /&gt;
:Для упоминания пользователя, вставьте '''@''' и введите или выберите его логин. После добавления комментария по нажатии кнопки '''Применить''' указанному пользователю придет [[Help:UI manual#Просмотр уведомлений в интерфейсе Системы|уведомление в интерфейсе системы]] об упоминании с возможностью перехода к маркеру с этим комментарием.&lt;br /&gt;
:9. Редактирование и удаление комментариев на вкладке '''Комментарии''' с помощью кнопок [[File:Icon edit2.png|x25px]] и [[File:Icon delete.png|x25px]]. &lt;br /&gt;
:Если [[Help:UI manual#Работа с проектами|для проекта]] установлен флажок '''Обязательный комментарий при разметке''', то удаление связанного с разметкой комментария недоступно. Его можно только отредактировать.&lt;br /&gt;
:[[File:32 Комментарии.png|thumb|none|upright=1.3|Вкладка '''Комментарии''']]&lt;br /&gt;
:{{Note|type=info|text='''''Примечания''':'' &lt;br /&gt;
:*  ''Пользователь может отредактировать и удалить только свои комментарии. Пользователю с доступом '''Изменение любых комментариев''' доступно редактирование и удаление комментариев всех пользователей. Если такой пользователь внёс изменения, то изначальный автор теряет возможность изменять свой комментарий (если у него нет доступа '''Изменение любых комментариев'''), так как авторство передаётся пользователю, который последним внёс изменения.'' &lt;br /&gt;
:* ''Для отредактированного комментария отображается слово '''изменено''', при наведении курсора на которое отображается сообщение с логином пользователя, изменившего комментарий, и датой редактирования. Текст несохраненного комментария в поле добавления комментария не пропадает при переключении на другой маркер.'' &lt;br /&gt;
:* ''Если открыт режим редактирования комментария, то при переключении на другой маркер режим редактирования закрывается и изменения не сохраняются.''}}&lt;br /&gt;
:10. Ввод, просмотр и редактирования комментария в отдельном диалоговом окне – для этого нажмите кнопку [[File:Button Comment Zoom.png|x25px]] рядом с полем ввода нового комментария или в поле существующего комментария.&lt;br /&gt;
:[[File:120 Окно создания, просмотра и редактирования комментария в отдельном диалоговом окне.png|thumb|none|upright=2|Окно создания, просмотра и редактирования комментария в отдельном диалоговом окне]]&lt;br /&gt;
:11. Просмотр подробной информации на вкладке '''Подробности'''. Содержит два блока: &lt;br /&gt;
:* информация о сработавшем детекторе: серьезность и надежность, а также связанные с ним коды CWE, которые содержат ссылки на описание дефектов безопасности на сайте [https://cwe.mitre.org cwe.mitre.org];&lt;br /&gt;
:* информацией о маркере: текстовые метки маркера, названия снимка и функции, инструмент, язык, текстовое описание и степень доверия, а также кнопки для перехода к просмотру истории маркера и запуску хуков.&lt;br /&gt;
::{{Note|type=info|text=''Svace, начиная с версии 4.0, для некоторых языков поставляется с моделью искусственного интеллекта, которая предсказывает истинность срабатывания маркера на основе предупреждений и собранных метрик. Это значение в Svacer отображается в параметре '''Степень доверия'''.''}}&lt;br /&gt;
::По нажатии на иконку [[File:icon_question_mark2.png|x25px]] справа от названия детектора отображается дополнительная информация о нём. Иконка не отображается, если дополнительная информация отсутствует.&lt;br /&gt;
:[[File:33 Подробная информация о маркере.png|thumb|none|upright=2|Вкладка '''Подробности''']]&lt;br /&gt;
:[[File:121 Окно с дополнительной информацией о детекторе.png|thumb|none|upright=2|Окно с дополнительной информацией о детекторе]]&lt;br /&gt;
&lt;br /&gt;
:12. Просмотр истории обнаружения маркера в снимках данной ветки проекта – для этого на вкладке '''Подробности''' нажмите кнопку '''Показать''' в блоке информации о маркере в строке '''История'''.&lt;br /&gt;
:В окне просмотра истории доступна сортировка записей.&lt;br /&gt;
:[[File:35 История маркера.png|thumb|none|upright=2.5|Пример истории маркера]]&lt;br /&gt;
:13. Просмотр маркера в JSON-формате – для этого на вкладке '''Подробности''' нажмите кнопку '''Показать''' в блоке '''JSON'''.&lt;br /&gt;
:[[File:234 Пример JSON маркера.png|thumb|none|upright=2|Пример JSON маркера]]&lt;br /&gt;
:14. Запуск хуков (скриптов) – для этого нажмите кнопку '''Запустить''' на вкладке '''Подробности''' и в раскрывающемся списке доступных хуков выберите тот, который требуется запустить.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Использование фильтров ===&lt;br /&gt;
==== Общая информация ====&lt;br /&gt;
Настройка и использование фильтров доступны [[Help:UI manual#Работа в режиме разметки|в режиме разметки]].&lt;br /&gt;
&lt;br /&gt;
Существует пять видов фильтров:&lt;br /&gt;
&lt;br /&gt;
# Фильтры [[Help:UI manual#Функции навигационной панели|навигационной панели]] [1]: детекторы, файлы или серьезность.&lt;br /&gt;
# Доступные для разметки – позволяют отобразить только маркеры, которые доступны пользователю для разметки, т. е. при использовании этого фильтра в списке не будут отображаться маркеры, заблокированные другими пользователями. Фильтр применяется по нажатии кнопки [[File:Icon view2.png|x25px]] [2] в правой части блока [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выбора проекта, ветки и снимка]].&lt;br /&gt;
# Размеченный – позволяют отобразить только размеченные маркеры. Фильтр применяется по нажатии кнопки [[File:Icon view.png|x25px]] [3] в правой части блока [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выбора проекта, ветки и снимка]].&lt;br /&gt;
# [[Help:UI manual#Настройка и использование пользовательских фильтров|Пользовательские фильтры]] – доступны по нажатии кнопки [[File:Button Фильтры.png|x25px]] [4] в правой части блока [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выбора проекта, ветки и снимка]].&lt;br /&gt;
# Запрос – фильтр, указанный в поле в верхней части [[Help:UI manual#Таблица маркеров|таблицы маркеров]] [5].&lt;br /&gt;
 &lt;br /&gt;
:[[File:36 Фильтры.png|thumb|none|upright=3|Существующие фильтры]]&lt;br /&gt;
&lt;br /&gt;
Увидеть примененные фильтры (кроме '''Доступные для разметки''') и последовательность их применения можно в поле [[File:field Детектор.png|x25px]] в верхней части [[Help:UI manual#Таблица маркеров|таблицы маркеров]].&lt;br /&gt;
&lt;br /&gt;
Все виды фильтров можно использовать одновременно, но при определенном порядке применения фильтры могут быть сброшены:&lt;br /&gt;
* запрос сбрасывается после применения любого другого фильтра;&lt;br /&gt;
* фильтры [[Help:UI manual#Функции навигационной панели|навигационной панели]] сбрасываются после применения [[Help:UI manual#Настройка и использование пользовательских фильтров|пользовательских фильтров]] и других фильтров [[Help:UI manual#Функции навигационной панели|на навигационной панели]];&lt;br /&gt;
* [[Help:UI manual#Настройка и использование пользовательских фильтров|пользовательские фильтры]] и фильтры [[Help:UI manual#Функции навигационной панели|навигационной панели]] не сбрасываются при применении фильтра '''Размеченный''';&lt;br /&gt;
* при переключении на другой [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|проект, ветку или снимок]] примененные фильтры '''Размеченный''' и  [[Help:UI manual#Настройка и использование пользовательских фильтров|'''Пользовательский''']] не сбрасываются и применяются к выбранному снимку.&lt;br /&gt;
&lt;br /&gt;
По нажатию кнопки [[File:Button Фильтры 2.png|x25px]] в правой части блока [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выбора контекста]] можно отменить примененные фильтры: пользовательский или все.&lt;br /&gt;
&lt;br /&gt;
==== Настройка и использование пользовательских фильтров ====&lt;br /&gt;
Настроить пользовательские фильтры можно [[Help:UI manual#Работа в режиме разметки|в режиме разметки]]. Для этого:&lt;br /&gt;
:1. Нажмите кнопку [[file:button Фильтры.png|x25px]] в правой части блока [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выбора контекста]]. &lt;br /&gt;
:В правой части экрана отобразится панель пользовательских фильтров, которая содержит три вкладки:&lt;br /&gt;
:* '''Пользовательский''' – параметры фильтрации, которые разделены на три группы:&lt;br /&gt;
::* параметры детекторов;&lt;br /&gt;
::* параметры маркеров;&lt;br /&gt;
::* файлы;&lt;br /&gt;
::* [[Afilters|расширенный фильтр]];&lt;br /&gt;
:* '''Сохраненные''' – список [[Help:UI manual#Работа с сохраненными фильтрами|сохраненных фильтров]];&lt;br /&gt;
:* '''Публичные''' – [[Help:UI manual#Работа с публичными фильтрами|список фильтров, доступных всем пользователям]].&lt;br /&gt;
&lt;br /&gt;
:2. Настройте параметры фильтрации на вкладке '''Пользовательский''' – выберите значения в списках полей, нажмите кнопки со значениями, или введите значения.&lt;br /&gt;
:3. Нажмите на кнопку [[File:Icon cancel.png|x15px]] справа от значения в списке, чтобы отменить его выбор.&lt;br /&gt;
:4. Если параметры нужно исключить из поиска, нажмите на кнопку [[File:Icon plus 2.png|x25px]]. &lt;br /&gt;
:Кнопка поменяется на [[File:Icon minus 3.png|x25px]].&lt;br /&gt;
:5. Если параметры нужно включить в поиск, нажмите на кнопку [[File:Icon minus 3.png|x25px]]. &lt;br /&gt;
:Кнопка поменяется на [[File:Icon plus 2.png|x25px]].&lt;br /&gt;
:6. Если в полях '''Метки''', '''Функции''' и '''Файлы''' нужно использовать регулярные выражения:&lt;br /&gt;
::а) Нажмите на кнопку [[File:Button TextTempl.png|x25px]].&lt;br /&gt;
::Кнопка поменяется на [[File:Button Reg.png|x25px]].&lt;br /&gt;
::б) Введите [[Help:UI manual#Использование регулярных выражений|регулярные выражения]]. Используйте новую строку для разделения значений.  &lt;br /&gt;
:7. Если в полях '''Метки''', '''Функции''' и '''Файлы''' нужно использовать текстовые шаблоны:&lt;br /&gt;
::а) Нажмите на кнопку [[File:Button Reg.png|x25px]].&lt;br /&gt;
::Кнопка поменяется на [[File:Button TextTempl.png|x25px]].&lt;br /&gt;
::б) Введите текстовые шаблоны. Используйте новую строку для разделения значений.  &lt;br /&gt;
:8. Для создания сложного фильтра с поиском по предикатам задайте в поле '''Расширенный фильтр''' параметры в формате &amp;lt;code&amp;gt;filter(markers, &amp;lt;predicate expr&amp;gt; )&amp;lt;/code&amp;gt;, где:&lt;br /&gt;
::* &amp;lt;code&amp;gt;filter ()&amp;lt;/code&amp;gt; – функция, которая фильтрует список по предикату;&lt;br /&gt;
::* &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt; – объект, который содержит массив маркеров из контекста;&lt;br /&gt;
::* &amp;lt;code&amp;gt;&amp;lt;predicate expr&amp;gt;&amp;lt;/code&amp;gt; – выражение, которое определяет предикат.&lt;br /&gt;
::Описание используемых в этом фильтре функций, объектов и выражений, а также языка предикатов доступно по нажатии на иконку [[File:Icon question mark2.png|x25px]] и в [[Afilters|статье документации]].&lt;br /&gt;
:9. Нажмите кнопку [[File:Button Очистить.png|x25px]], чтобы очистить все параметры фильтрации.&lt;br /&gt;
:10. &amp;lt;span id=&amp;quot;filters_saved&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Нажмите кнопку [[File:Button Сохранить как.png|x25px]], в открывшемся диалоге введите название и нажмите кнопку '''Сохранить'''.&lt;br /&gt;
:Фильтр сохранится и отобразится на [[Help:UI manual#Работа с сохраненными фильтрами|вкладке '''Сохраненные''']].&lt;br /&gt;
:11. Нажмите кнопку [[File:Button Применить.png|x25px]], чтобы применить фильтр. &lt;br /&gt;
:После применения кнопка фильтра станет зеленой, а ее название поменяется на название сохраненного фильтра.&lt;br /&gt;
::[[File:36 Пользовательские фильтры.png|thumb|none|upright=2|Пользовательские фильтры. Вкладка '''Пользовательский''']]&lt;br /&gt;
&lt;br /&gt;
==== Работа с сохраненными фильтрами ====&lt;br /&gt;
На вкладке '''Сохраненные''' отображаются фильтры, [[Help:UI manual#filters saved|сохраненные на вкладке '''Пользовательский''']], а также [[Help:UI manual#filters published|скопированные с вкладки '''Публичные''']].&lt;br /&gt;
:[[File:37 Фильтры сохраненные.png|thumb|none|upright=2|Пользовательские фильтры. Вкладка '''Сохраненные''']]&lt;br /&gt;
&lt;br /&gt;
Воспользуйтесь функциями управления фильтрами на вкладке '''Сохраненные''':&lt;br /&gt;
:1. Для поиска фильтра введите его название в строке поиска.&lt;br /&gt;
:2. Для сортировки фильтров по названию нажмите кнопку [[File:Button Sort.png|x25px]].&lt;br /&gt;
:3. Для редактирования сохраненного фильтра нажмите кнопку [[File:Icon edit3.png|x25px]] и [[Help:UI manual#Настройка и использование пользовательских фильтров|внесите изменения]].&lt;br /&gt;
:4. Создайте дубликат фильтра – нажмите кнопку [[File:Icon duplicate.png|x25px]].&lt;br /&gt;
:5. &amp;lt;span id=&amp;quot;filters_publishing&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Для публикации фильтра нажмите кнопку [[File:Button share.png|x25px]].&lt;br /&gt;
:Копия сохраненного фильтра отобразится [[Help:UI manual#Работа с публичными фильтрами|на вкладке '''Публичные''']]  и станет доступна другим пользователям.&lt;br /&gt;
:{{Note|type=warn|text=''Функция доступна только пользователям с [[#Серверные доступы|серверным доступом]] '''Управление публичными фильтрами'''''.}}&lt;br /&gt;
:6. Для удаления одного фильтра нажмите кнопку [[File:Icon delete 2.png|x25px]].&lt;br /&gt;
:7. Для удаления нескольких фильтров:&lt;br /&gt;
::а) Выберите фильтры для удаления – установите флажки в левой части названий фильтров или нажмите кнопку '''Выбрать всё'''.&lt;br /&gt;
::б) Нажмите кнопку '''Удалить'''.&lt;br /&gt;
:8. Примените фильтр – нажмите на его название и нажмите кнопку [[File:Button Применить.png|x25px]].&lt;br /&gt;
&lt;br /&gt;
После применения:&lt;br /&gt;
* примененный фильтр будет отмечен [[File:Icon check.png|x25px]];&lt;br /&gt;
* кнопка фильтра станет зеленой, а ее название поменяется на название сохраненного фильтра.&lt;br /&gt;
&lt;br /&gt;
==== Работа с публичными фильтрами ====&lt;br /&gt;
{{Note|type=warn|text=''Создание (публикация), изменение и удаление публичных фильтров доступны пользователям с [[#Серверные доступы|серверным доступом]] '''Управление публичными фильтрами'''''.}}&lt;br /&gt;
&lt;br /&gt;
На вкладке '''Публичные''' отображаются фильтры, [[Help:UI manual#filters publishing|опубликованные на вкладке  '''Сохраненные''']].&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot; heights=&amp;quot;300px&amp;quot; style=&amp;quot;float:left; clear:right; margin-right:1em; margin-left:1em&amp;quot;&amp;gt;&lt;br /&gt;
  153 Пользовательские фильтры. Публичные без доступа.png|Пользовательские фильтры. Вкладка '''Публичные'''. &amp;lt;/br&amp;gt;Вид для пользователя без серверного доступа &amp;lt;/br&amp;gt;'''Управление публичными фильтрами'''&lt;br /&gt;
  154 Пользовательские фильтры. Публичные с доступом.png|Пользовательские фильтры. Вкладка '''Публичные'''. &amp;lt;/br&amp;gt;Вид для пользователя с серверным доступом &amp;lt;/br&amp;gt;'''Управление публичными фильтрами'''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
Воспользуйтесь функциями управления фильтрами на вкладке '''Публичные''':&lt;br /&gt;
:1. Для поиска фильтра введите его название в строке поиска.&lt;br /&gt;
:2. Для сортировки фильтров по названию нажмите кнопку [[File:Button Sort.png|x25px]].&lt;br /&gt;
:3. Чтобы посмотреть параметры фильтра, нажмите кнопку [[File:Button show.png|x25px]].&lt;br /&gt;
:{{Note|type=warn|text=''Функция доступна только пользователям БЕЗ [[#Серверные доступы|серверного доступа]] '''Управление публичными фильтрами.'''''}}&lt;br /&gt;
:4. Для редактирования публичного фильтра нажмите кнопку [[File:Icon edit3.png|x25px]] и [[Help:UI manual#Настройка и использование пользовательских фильтров|внесите изменения]].&lt;br /&gt;
:5. &amp;lt;span id=&amp;quot;filters_published&amp;quot;&amp;gt;Скопируйте публичный фильтр – нажмите кнопку [[File:Icon duplicate.png|x25px]].&amp;lt;/span&amp;gt;&lt;br /&gt;
:Фильтр сохранится и отобразится [[Help:UI manual#Работа с сохраненными фильтрами|на вкладке '''Сохраненные''']].&lt;br /&gt;
:6. Для удаления одного фильтра нажмите кнопку [[File:Icon delete 2.png|x25px]].&lt;br /&gt;
:7. Для удаления нескольких фильтров:&lt;br /&gt;
::а) Выберите фильтры для удаления – установите флажки в левой части названий фильтров или нажмите кнопку '''Выбрать всё'''.&lt;br /&gt;
::б) Нажмите кнопку '''Удалить'''.&lt;br /&gt;
:8. Примените фильтр – нажмите на его название и нажмите кнопку [[File:Button Применить.png|x25px]].&lt;br /&gt;
&lt;br /&gt;
После применения:&lt;br /&gt;
* примененный фильтр будет отмечен [[File:Icon check.png|x25px]];&lt;br /&gt;
* кнопка фильтра станет зеленой, а ее название поменяется на название сохраненного фильтра.&lt;br /&gt;
&lt;br /&gt;
=== Сравнение снимков и маркеров ===&lt;br /&gt;
Чтобы сравнить снимки и маркеры в них:&lt;br /&gt;
:1. [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|Выберите исходный контекст]] – проект, ветку, снимок.&lt;br /&gt;
:2. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] нажмите кнопку [[File:Button Сравнить с.png|x25px]] и в раскрывшемся списке выберите пункт '''Сравнить с…'''.&lt;br /&gt;
:3. В открывшемся окне выберите проект, ветку и снимок для сравнения; нажмите кнопку [[File:Button Применить.png|x25px]].&lt;br /&gt;
:[[File:38 Выбор снимка для сравнения.png|thumb|none|upright=1.5|Выбор проекта, ветки и снимка для сравнения]]&lt;br /&gt;
:Результат сравнения отобразится [[Help:UI manual#Функции навигационной панели|в навигационной панели]] и [[Help:UI manual#Функции центральной панели|центральной панели]], причем:&lt;br /&gt;
:* вкладка '''Информация о снимке''' поменяется на вкладку '''Информация о различиях''' с информацией о двух сравниваемых снимках;&lt;br /&gt;
:* применится первый режим сравнения, в котором найдены результаты.&lt;br /&gt;
:4. Выберите режим сравнения.&lt;br /&gt;
:[[File:39 Выбор режима сравнения.png|800px|thumb|none|Выбор режима сравнения]]&lt;br /&gt;
:[[Help:UI manual#Функции навигационной панели|В навигационной панели]] и [[Help:UI manual#Функции центральной панели|центральной панели]] отобразятся только результаты выбранного режима сравнения. В режимах '''Сопоставленные''' и '''Одинаковые''' [[Help:UI manual#Таблица маркеров|в таблице маркеров]] добавится столбец с номером версии: V1 – маркер в файле текущего снимка, V2 – маркер в файле целевого снимка.&lt;br /&gt;
:{{Note|type=info|text=''Если при просмотре кода файла целевого снимка перейти к просмотру файла [[Help:UI manual#Работа в режиме просмотра кода|в режиме '''Код''']] (команда '''Открыть в режиме код'''), то режим сравнения закроется, отобразится контекст целевого снимка.''}}&lt;br /&gt;
&amp;lt;gallery heights=&amp;quot;210&amp;quot; perrow=&amp;quot;2&amp;quot; mode=&amp;quot;packed&amp;quot; style=&amp;quot;float:left; clear:right; margin-right:1em; margin-left:2em&amp;quot; &amp;quot;=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
File:40 Пример сравнения новые.png|Пример результатов сравнения в режиме '''Только в V1'''&lt;br /&gt;
File:41 Пример сравнения Отсутствующие.png|Пример результатов сравнения в режиме '''Только в V2'''&lt;br /&gt;
File:42 Пример сравнения Сопоставленные.png|Пример результатов сравнения в режиме '''Сопоставленные'''&lt;br /&gt;
File:43 Пример сравнения Одинаковые.png|Пример результатов сравнения в режиме '''Одинаковые'''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
:5. Посмотрите различия в параметрах анализа – нажмите кнопку '''Показать различия''' на вкладке '''Информация о различиях'''.&lt;br /&gt;
:[[File:44 Различия в результатах анализа.png|600px|thumb|none|Сравнение настроек анализа]]&lt;br /&gt;
:6. Посмотрите различия в статистике разметки – нажмите кнопку '''Различия разметок'''.&lt;br /&gt;
:[[File:45 Различия в статистике по детекторам.png|thumb|none|600px|Сравнение статистики разметок]]&lt;br /&gt;
:7. Нажмите кнопку [[File:Icon download CSV.png|x25px]] или [[File:Icon download PDF.png|x25px]], чтобы скачать статистику в формате CSV или PDF.&lt;br /&gt;
:8. Отмените сравнение – нажмите кнопку [[File:Icon cancel 2.png|x25px]] в блоке выбора проекта, ветки и снимка.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сопоставление маркеров ===&lt;br /&gt;
{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектным доступом]] '''Разметка маркеров''' и [[#Серверные доступы|серверным доступом]] '''Администрирование сервера'''''}}&lt;br /&gt;
&lt;br /&gt;
Если при импорте снимка в ветку проекта не все маркеры были автоматически сопоставлены (сформированы инварианты), то такие маркеры можно сопоставить вручную. При сопоставлении маркеров с разметкой, инварианту присваивается разметка маркера из последнего импортированного снимка.&lt;br /&gt;
&lt;br /&gt;
Результат сопоставления, выполненного вручную, можно отменить.&lt;br /&gt;
==== Сопоставление маркеров вручную ====&lt;br /&gt;
Сопоставление маркеров вручную проводится в два этапа:&lt;br /&gt;
:а)	Выбор пар маркеров и их сопоставление, без сохранения в БД.&lt;br /&gt;
:б)	Просмотр выбранных пар и подтверждение операции.&lt;br /&gt;
&lt;br /&gt;
Чтобы вручную сопоставить маркеры:&lt;br /&gt;
:1. [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|Выберите исходный контекст]].&lt;br /&gt;
:2. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] нажмите кнопку [[File:Button Сравнить с.png|x25px]] и в раскрывшемся списке выберите пункт '''Сопоставить маркеры'''.&lt;br /&gt;
:Откроется окно '''Сопоставить маркеры'''.&lt;br /&gt;
&lt;br /&gt;
:3. &amp;lt;span id=&amp;quot;MarksStep1&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Этап 1. На вкладке '''Сопоставление маркеров''':&lt;br /&gt;
::а) Выберите снимок, маркеры которого нужно сопоставить с исходным.&lt;br /&gt;
::Отобразятся две таблицы маркеров: слева – для исходного снимка, а справа – для выбранного.&lt;br /&gt;
::б) Чтобы перед сопоставлением сравнить маркеры, выберите маркеры – по одному в каждой таблице и нажмите кнопку '''Сравнить''' (расположена над таблицей).    &lt;br /&gt;
::Отобразится окно сравнения выбранных маркеров.&lt;br /&gt;
::Если требуется, повторите операцию для других пар маркеров.&lt;br /&gt;
::в) Выберите маркеры для сопоставления – по одному в каждой таблице и нажмите кнопку '''Сопоставить''' (расположена над таблицей). Если требуется, повторите операцию для других пар маркеров. &lt;br /&gt;
::Для сопоставленных маркеров справа от названия будет отображаться номер сопоставленной пары.&lt;br /&gt;
::г) Для отмены сопоставления пары маркеров выберите любой сопоставленный маркер и нажмите '''Отменить сопоставление''' (расположена над таблицей). Если требуется, повторите операцию для других пар маркеров.&lt;br /&gt;
::д) Для просмотра фрагмента кода, в котором находится маркер – нажмите кнопку [[File:icon_preview_code.png|x25px]].&lt;br /&gt;
::е) Для отказа от дальнейшего сопоставления и отмены всех изменений нажмите кнопку '''Отмена'''.&lt;br /&gt;
::ж) Для перехода к подтверждению выбора нажмите кнопку '''Далее'''.&lt;br /&gt;
 &lt;br /&gt;
:[[File:122 Выбор снимка и сопоставление пар маркеров.png|800px|thumb|none|Окно '''Сопоставить маркеры'''. Выбор снимка и сопоставление пар маркеров]]&lt;br /&gt;
:[[File:48 Различия исходного кода.png|800px|thumb|none|Окно '''Сравнение маркеров''']]&lt;br /&gt;
&lt;br /&gt;
:4. Этап 2. В открывшейся форме:&lt;br /&gt;
::а) Проверьте список сопоставленных пар маркеров для применения операций сопоставления.&lt;br /&gt;
::б) Для корректировки списка сопоставленных пар маркеров нажмите кнопку '''Назад''' и выполните операции [[Help:UI manual#MarksStep1|Этапа 1]].&lt;br /&gt;
::в) Для отказа от дальнейшего сопоставления и отмены всех изменений нажмите кнопку '''Отмена'''.&lt;br /&gt;
::г) Для запуска операции сопоставления нажмите кнопку '''Подтвердить'''.&lt;br /&gt;
 &lt;br /&gt;
:[[File:123 Подтверждение сопоставления.png|800px|thumb|none|Окно «Сопоставить маркеры». Подтверждение сопоставления]]&lt;br /&gt;
&lt;br /&gt;
:По окончании операции для данной ветки проекта будет изменена конфигурация инвариантов. Всем пользователям, у которых открыт данный контекст, отобразится сообщение:&lt;br /&gt;
 &lt;br /&gt;
:[[File:124 Сообщение об окончании сопоставления отмены.png|800px|thumb|none|Сообщение об окончании операции сопоставления]]&lt;br /&gt;
:{{Note|type=info|text=''При сопоставлении метки маркеров удаляются.''}}&lt;br /&gt;
&lt;br /&gt;
==== Отмена операций сопоставления ====&lt;br /&gt;
Отмена операций ручного сопоставления маркеров проводится в два этапа:&lt;br /&gt;
:а) Выбор операций ручного сопоставления для отмены (отката).&lt;br /&gt;
:б) Просмотр списка всех операций, которые будут отменены, и подтверждение отмены операций сопоставления. &lt;br /&gt;
&lt;br /&gt;
Чтобы отменить (откатить) операции сопоставления:&lt;br /&gt;
:1. [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|Выберите исходный контекст]].&lt;br /&gt;
:2. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] нажмите кнопку [[File:Button Сравнить с.png|x25px]] и в раскрывшемся списке выберите пункт '''Сопоставить маркеры'''.&lt;br /&gt;
:Откроется окно '''Сопоставить маркеры'''.&lt;br /&gt;
:3. Этап 1. На вкладке '''Отмена операций сопоставления''':&lt;br /&gt;
::а) Выберите операции сопоставления маркеров, которые нужно отменить.&lt;br /&gt;
::В списке отображаются операции ручного сопоставления маркеров в исходной ветке проекта.&lt;br /&gt;
::б) Для отказа от продолжения операции нажмите кнопку '''Отмена'''.&lt;br /&gt;
::в) Для перехода к подтверждению выбора нажмите кнопку '''Далее'''.&lt;br /&gt;
 &lt;br /&gt;
:[[File:125 Выбор маркеров для отмены сопоставления.png|800px|thumb|none|Окно «Сопоставить маркеры». Выбор операций сопоставления маркеров для отмены]]&lt;br /&gt;
&lt;br /&gt;
:4. Этап 2. В открывшейся форме:&lt;br /&gt;
::а) Проверьте список операций сопоставления, которые будут отменены. Список операций, помимо выбранных пользователем операций сопоставления, может дополнительно включать другие связанные операции, которые также будут отменены.&lt;br /&gt;
::б) Для корректировки выбранных операций сопоставления маркеров  нажмите кнопку '''Назад''' и измените выбор маркеров.&lt;br /&gt;
::в) Для отказа от продолжения операции нажмите кнопку '''Отмена'''.&lt;br /&gt;
::г) Для запуска операции отмены сопоставления маркеров нажмите кнопку '''Подтвердить'''.&lt;br /&gt;
 &lt;br /&gt;
:[[File:126 Подтверждение отмены сопоставления.png|800px|thumb|none|Окно «Сопоставить маркеры». Подтверждение отмены операций сопоставления]]&lt;br /&gt;
&lt;br /&gt;
:По окончании операции для данной ветки проекта будет изменена конфигурация инвариантов. Всем пользователям, у которых открыт данный контекст, отобразится сообщение:&lt;br /&gt;
 &lt;br /&gt;
:[[File:124 Сообщение об окончании сопоставления отмены.png|800px|thumb|none|Сообщение об окончании операции отмены сопоставления]]&lt;br /&gt;
:{{Note|type=info|text=''При отмене операции сопоставления метки маркеров удаляются.''}}&lt;br /&gt;
&lt;br /&gt;
=== Сравнение маркеров ===&lt;br /&gt;
Чтобы сравнить два маркера:&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходный контекст]].&lt;br /&gt;
:2. Раскройте [[Help:UI manual#Таблица маркеров|таблицу маркеров]].&lt;br /&gt;
:3. Нажмите правой кнопкой мыши на строке маркера и выберите пункт '''Сравнить с ...''' &lt;br /&gt;
:[[File:155 Переход к сравнению маркеров.png|thumb|none|upright=2|Переход к сравнению маркеров]]&lt;br /&gt;
:Откроется окно выбора маркера для сравнения.&lt;br /&gt;
:[[File:46 Выбор маркера для сравнения.png|thumb|none|upright=3|Окно выбора маркера для сравнения]]&lt;br /&gt;
:{{Note|type=info|text=''При сравнении снимков для режимов '''Сопоставленные''' и '''Одинаковые''' в таблице маркеров по клику правой кнопкой мыши на строке маркера доступен пункт '''Сравнение с другой версией'''. При выборе данной команды происходит сравнение маркера с его версией из сравниваемого снимка.''}}&lt;br /&gt;
:4. Выберите проект, ветку и снимок. &lt;br /&gt;
:Отобразится список маркеров в выбранном снимке, где можно ввести запрос для поиска маркеров.&lt;br /&gt;
:[[File:47 Результат сравнения маркеров.png|thumb|none|upright=3|Выбор маркера для сравнения]]&lt;br /&gt;
:5. Дважды кликните на  строке маркера или нажмите кнопку '''Сравнить''', чтобы перейти в окно сравнения маркеров.&lt;br /&gt;
:[[File:48 Различия исходного кода.png|thumb|none|upright=3|Окно сравнения маркеров]]&lt;br /&gt;
&lt;br /&gt;
=== Разметка маркера ===&lt;br /&gt;
Разметка маркера заключается в установке статуса, а также опционально серьезности (критичности) и требуемого действия.&lt;br /&gt;
Установка серьезности и действия доступны только после установки статуса.&lt;br /&gt;
Разметить маркер можно [[Help:UI manual#Работа в режиме разметки|в режиме разметки]].&lt;br /&gt;
==== Разметка маркера вручную ====&lt;br /&gt;
Вручную маркер можно разметить тремя способами:&lt;br /&gt;
:1. &amp;lt;span id=&amp;quot;Marking1&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;'''''Способ 1'''''. С помощью кнопок в верхней части [[Help:UI manual#Функции правой панели|правой панели]].&lt;br /&gt;
:2. &amp;lt;span id=&amp;quot;Marking2&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;'''''Способ 2'''''. С помощью кнопок в виджете маркера [[Help:UI manual#Вкладка с исходным кодом|на вкладке с исходным кодом]].&lt;br /&gt;
:Если [[Help:UI manual#Работа с проектами|для проекта]] установлен флаг '''Обязательный комментарий при разметке''', то при разметке с помощью способов [[Help:UI manual#Marking1|1]] и [[Help:UI manual#Marking2|2]] откроется [[Help:UI manual#Marking3|окно разметки]], в котором обязательно нужно ввести комментарий.&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot; heights=&amp;quot;180px&amp;quot; style=&amp;quot;float:left; clear:right; margin-right:1em; margin-left:0&amp;quot;&amp;gt;&lt;br /&gt;
  49 Разметка Статус.png|Выбор статуса разметки маркера&lt;br /&gt;
  50 Разметка Серьезность.png|Выбор серьезности разметки маркера&lt;br /&gt;
  51 Разметка Действие.png|Выбор действия разметки маркера&lt;br /&gt;
  127 Кнопки разметки в виджете маркера.png|Кнопки разметки в виджете маркера на вкладке с исходным кодом&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
:3. '''''Способ 3'''''. В отдельном окне разметки вручную. Для этого:&lt;br /&gt;
::а) Нажмите кнопку [[File:Icon edit.png|x25px]] в верхней части правой панели или в виджете маркера на вкладке с исходным кодом.&lt;br /&gt;
::Откроется &amp;lt;span id=&amp;quot;Marking3&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; окно '''Разметка'''.&lt;br /&gt;
&amp;lt;gallery heights=&amp;quot;200&amp;quot; perrow=&amp;quot;2&amp;quot; mode=&amp;quot;packed&amp;quot; style=&amp;quot;float:left; clear:right; margin-right:1em; margin-left:1em&amp;quot;&amp;gt;&lt;br /&gt;
  235 Окно Разметка.png|Окно «Разметка» &lt;br /&gt;
  File:99 Окно разметки.png|Окно разметки. Поле '''Комментарий''' – обязательное&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
::б) Выберите статус, а также опционально серьезность (критичность) и требуемое действие.&lt;br /&gt;
::в) Введите комментарий.&lt;br /&gt;
::Если [[Help:UI manual#Работа с проектами|для проекта]] установлен флаг '''Обязательный комментарий при разметке''', то добавление комментария обязательно.&lt;br /&gt;
::Редактор комментариев поддерживает синтаксис Markdown.&lt;br /&gt;
::Для упоминания пользователя, вставьте '''@''' и введите или выберите его логин. После добавления комментария по нажатии кнопки '''Применить''' указанному пользователю придет [[Help:UI manual#Просмотр уведомлений в интерфейсе Системы|уведомление в интерфейсе системы]] об упоминании с возможностью перехода к маркеру с этим комментарием.&lt;br /&gt;
::г) Нажмите кнопку '''Применить'''.&lt;br /&gt;
&lt;br /&gt;
Результаты разметки со связанными комментариями отображаются [[Help:UI manual#Функции правой панели|в правой панели]] на вкладке '''Комментарии'''. При этом можно поменять текст комментария, но не результат разметки. Для её изменения нужно заново установить статус, серьёзность и действие.&lt;br /&gt;
:[[File:100 Правая панель Комментарии с разметкой.png|300px|thumb|none|Правая панель. Комментарии, добавленные при разметке]]&lt;br /&gt;
&lt;br /&gt;
==== Разметка маркера с помощью ассистента AI ====&lt;br /&gt;
{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектными доступами]] '''Разметка маркеров''' и '''Импорт разметки'''''}}&lt;br /&gt;
Чтобы разметить маркер с помощью ассистента AI:&lt;br /&gt;
:1. Нажмите кнопку [[File:Icon edit.png|x25px]] в верхней части правой панели или в виджете маркера на вкладке с исходным кодом.&lt;br /&gt;
Откроется окно '''Разметка'''.&lt;br /&gt;
:2. Смените режим разметки с помощью переключателя '''Режим разметки с помощью AI'''.&lt;br /&gt;
:3. В отобразившемся режиме разметки выберите '''Модель AI''', с помощью которой ассистент AI рассчитает статус разметки.&lt;br /&gt;
:Спрогнозированный статус и уровень доверия прогнозу отобразятся в этом же окне. Если модель AI не смогла предсказать статус разметки, то отобразится значение '''n/a''' и кнопка '''Применить''' будет неактивна.&lt;br /&gt;
:Если маркер уже размечен и его статус совпадает с прогнозным, то в окне отобразится сообщение об этом и дальнейшая разметка станет недоступна.&lt;br /&gt;
:[[File:236 Окно Разметка AI.png|400px|thumb|none|Окно «Разметка». Режим разметки с помощью ассистента AI]]&lt;br /&gt;
:4. Введите комментарий.&lt;br /&gt;
:5. Нажмите кнопку '''Применить'''.&lt;br /&gt;
Результаты разметки со связанными комментариями отображаются [[Help:UI manual#Функции правой панели|в правой панели]] на вкладке '''Комментарии'''. При этом можно поменять текст комментария, но не результат разметки. Для её изменения нужно заново установить статус, серьёзность и действие.&lt;br /&gt;
Комментарий, добавленный при разметке с помощью ассистента AI, дополнительно содержит информацию о проведенной разметке: время, имя модели машинного обучения, уровень доверия прогнозу. Также для такого маркера в правой панели на вкладке '''Подробности''' присвоена метка '''AI'''.&lt;br /&gt;
&amp;lt;gallery heights=&amp;quot;210&amp;quot; perrow=&amp;quot;2&amp;quot; mode=&amp;quot;packed&amp;quot; style=&amp;quot;float:left; clear:right; margin-right:1em; margin-left:1em&amp;quot;&amp;gt;&lt;br /&gt;
  237 Разметка комментарий AI.png|Правая панель.&amp;lt;/br&amp;gt;Комментарий, добавленный при разметке с помощью ассистента AI &lt;br /&gt;
  238 Разметка метка AI.png|Правая панель.&amp;lt;/br&amp;gt;Метка AI на вкладке «Подробности»&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Групповая разметка маркеров ===&lt;br /&gt;
==== Групповая разметка маркеров вручную ====&lt;br /&gt;
Для групповой разметки маркеров вручную:&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходные проект, ветку и снимок]].&lt;br /&gt;
:2. Включите отображение [[Help:UI manual#Таблица маркеров|таблицы маркеров]].&lt;br /&gt;
:3. Выберите маркеры для разметки – установите флажки в строках таблицы.&lt;br /&gt;
:4. Нажмите кнопку [[File:icon edit.png|x25px]] (доступна, если выбраны маркеры в таблице).&lt;br /&gt;
:&amp;lt;span id=&amp;quot;GroupMark1&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[File:53 Выбор маркеров для группразметки.png|thumb|none|upright=2.5|Выбор маркеров для групповой разметки]]&lt;br /&gt;
:Отобразится окно для групповой разметки.&lt;br /&gt;
:&amp;lt;span id=&amp;quot;GroupMark2&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[File:54 Окно групповой разметки.png|thumb|none|upright=2.5|Окно групповой разметки]]&lt;br /&gt;
:5. Выберите статус разметки, а затем (опционально) статус серьезности (критичности) и требуемое действие – нажмите кнопки со значениями.&lt;br /&gt;
:6. Добавьте общий комментарий для выбранных маркеров.&amp;lt;br /&amp;gt;&lt;br /&gt;
:Редактор комментариев поддерживает синтаксис Markdown.&lt;br /&gt;
:Для упоминания пользователя, вставьте '''@''' и введите или выберите его логин. После добавления комментария по нажатии кнопки '''Применить''' указанному пользователю придет [[Help:UI manual#Просмотр уведомлений в интерфейсе Системы|уведомление в интерфейсе системы]] об упоминании с возможностью перехода к этому комментарию.&lt;br /&gt;
:После того, как пользователь или ассистент AI присвоил статусы и (или) написал комментарий, станет доступной кнопка '''Применить'''.&amp;lt;br /&amp;gt;&lt;br /&gt;
:{{Note|type=info|text=''Ввод комментария обязателен, если [[Help:UI manual#Работа с проектами|для проекта]] установлен флаг '''Обязательный комментарий при разметке'''''.}}&lt;br /&gt;
:7. Если требуется отменить изменения, нажмите [[File:icon cross 01.png|x15px]] в правом верхнем углу окна или кнопку '''Отмена'''.&amp;lt;br /&amp;gt;Диалоговое окно закроется, изменения не будут применены, выделение с выбранных для разметки маркеров не снимается.&lt;br /&gt;
:8. Нажмите кнопку '''Применить''', чтобы запустить процесс разметки.&amp;lt;br /&amp;gt;&lt;br /&gt;
Прогресс разметки отображается в соответствующем окне. Запущенный процесс можно полностью отменить нажатием кнопки '''Отмена'''.&amp;lt;br /&amp;gt;&lt;br /&gt;
В результате применения разметки текст маркеров [[Help:UI manual#Таблица маркеров|в таблице маркеров]] окрасится в цвет, соответствующий выставленному статусу.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;GroupMark3&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;gallery widths=&amp;quot;400&amp;quot; mode=&amp;quot;nolines&amp;quot; style=&amp;quot;float:center; clear:center; margin-right:1em; margin-left:0&amp;quot;&amp;gt;&lt;br /&gt;
  56 Окно прогресса разметки.png|Окно прогресса разметки&lt;br /&gt;
  57 Результат групповой разметки.png|Пример таблицы маркеров после применения групповой разметки&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Групповая разметка маркеров с помощью ассистента AI ====&lt;br /&gt;
{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектными доступами]] '''Разметка маркеров''' и '''Импорт разметки'''''}}&lt;br /&gt;
Чтобы разметить группу маркеров с помощью ассистента AI:&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходные проект, ветку и снимок]].&lt;br /&gt;
:2. Включите отображение [[Help:UI manual#Таблица маркеров|таблицы маркеров]].&lt;br /&gt;
:3. [[Help:UI manual#GroupMark1|Выберите маркеры для разметки]] – установите флажки в строках таблицы.&lt;br /&gt;
:4. Нажмите кнопку [[File:icon edit.png|x25px]] (доступна, если выбраны маркеры в таблице).&lt;br /&gt;
:[[File:53 Выбор маркеров для группразметки.png|thumb|none|upright=2.5|Выбор маркеров для групповой разметки]]&lt;br /&gt;
:Отобразится [[Help:UI manual#GroupMark2|окно для групповой разметки]].&lt;br /&gt;
:5. Смените режим разметки с помощью переключателя '''Режим разметки с помощью AI'''.&lt;br /&gt;
:6. В отобразившемся режиме разметки выберите '''Модель AI''', с помощью которой ассистент AI рассчитает статус разметки.&lt;br /&gt;
:Спрогнозированный статус и уровень доверия прогнозу отобразятся в этом же окне в строке каждого выбранного маркера. Если модель AI не смогла предсказать статус разметки, то отобразится значение '''n/a''' и установка флажка столбце '''Статус разметки''' будет недоступна. &lt;br /&gt;
:7. Выберите маркеры для разметки – установите флажки в столбце '''Статус разметки'''.&lt;br /&gt;
:Если маркер уже размечен и его статус совпадает с прогнозным, то установка флажка в его строке недоступна.&lt;br /&gt;
:[[File:239 Групповая разметка AI.png|thumb|none|upright=2.5|Окно групповой разметки. Режим разметки с помощью ассистента AI]]&lt;br /&gt;
:8. Добавьте общий комментарий для выбранных маркеров.&amp;lt;br /&amp;gt;&lt;br /&gt;
:Редактор комментариев поддерживает синтаксис Markdown.&lt;br /&gt;
:Для упоминания пользователя, вставьте '''@''' и введите или выберите его логин. После добавления комментария по нажатии кнопки '''Применить''' указанному пользователю придет [[Help:UI manual#Просмотр уведомлений в интерфейсе Системы|уведомление в интерфейсе системы]] об упоминании с возможностью перехода к этому комментарию.&lt;br /&gt;
:После того, как пользователь или ассистент AI присвоил статусы и (или) написал комментарий, станет доступной кнопка '''Применить'''.&amp;lt;br /&amp;gt;&lt;br /&gt;
:{{Note|type=info|text=''Ввод комментария обязателен, если [[Help:UI manual#Работа с проектами|для проекта]] установлен флаг '''Обязательный комментарий при разметке'''''.}}&lt;br /&gt;
:9. Если требуется отменить изменения, нажмите [[File:icon cross 01.png|x15px]] в правом верхнем углу окна или кнопку '''Отмена'''.&amp;lt;br /&amp;gt;Диалоговое окно закроется, изменения не будут применены, выделение с выбранных для разметки маркеров не снимается.&lt;br /&gt;
:10. Нажмите кнопку '''Применить''', чтобы запустить процесс разметки.&amp;lt;br /&amp;gt;&lt;br /&gt;
Прогресс разметки отображается в [[Help:UI manual#GroupMark3|соответствующем окне]]. Запущенный процесс можно полностью отменить нажатием кнопки '''Отмена'''.&amp;lt;br /&amp;gt;&lt;br /&gt;
В результате применения разметки текст маркеров [[Help:UI manual#Таблица маркеров|в таблице маркеров]] окрасится в цвет, соответствующий выставленному статусу.&lt;br /&gt;
&lt;br /&gt;
=== Блокировка разметки маркеров===&lt;br /&gt;
Пользователь может заблокировать другим пользователям возможность [[Help:UI manual#Разметка маркера|размечать маркер]] или [[Help:UI manual#Групповая разметка маркеров|группу маркеров]]. Это позволяет избежать коллизий при разметке маркеров несколькими пользователями.&lt;br /&gt;
&lt;br /&gt;
Для блокировки разметки используйте кнопку [[File:icon unlocked.png|x25px]] в следующих частях пользовательского интерфейса:&lt;br /&gt;
:1. [[Help:UI manual#Вкладка «Детекторы»|На вкладке '''Детекторы''']]. В этом случае блокировка распространяется на все маркеры выбранного детектора в открытом проекте и ветке, для всех снимков ветки.&lt;br /&gt;
:2. [[Help:UI manual#Вкладка «Файлы»|На вкладке '''Файлы''']]. В этом случае блокировка распространяется на все маркеры в выбранном файле в открытом проекте и ветке, для всех снимков ветки.&lt;br /&gt;
:3. В верхней части [[Help:UI manual#Функции правой панели|правой панели]]. В этом случае блокировка распространяется на все эквивалентные маркеры в открытом проекте и ветке, для всех снимков ветки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot; heights=&amp;quot;200px&amp;quot; perrow=&amp;quot;2&amp;quot; style=&amp;quot;float:left; clear:right; margin-right:1em; margin-left:1em&amp;quot;&amp;gt;&lt;br /&gt;
  58 Блокировка на вкладке Детекторы.png|Блокировка маркера на вкладке '''Детекторы'''&lt;br /&gt;
  File:59_Блокировка_на_вкладке_Файлы.png|Блокировка маркера на вкладке '''Файлы'''&lt;br /&gt;
  60_Блокировка_на_правой_панели.png|Блокировка маркера на правой панели&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если один пользователь заблокировал маркер, то другой пользователь не сможет заблокировать детектор, которому принадлежит этот маркер, и файл, в котором этот маркер найден.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Чтобы посмотреть все блокировки, перейдите в раздел [[Help:UI manual#Настройка сервера Svacer|'''Настройки''']] на [[Help:UI manual#Управление блокировками разметки|вкладку '''Блокировки''']]:&lt;br /&gt;
&lt;br /&gt;
[[File:61 Просмотр всех блокировок.png|thumb|none|upright=3.5|Таблица блокировок]]&lt;br /&gt;
&lt;br /&gt;
В этом разделе можно удалить только свои блокировки. Пользователь с доступом '''Удаление блокировок''' может удалить любые блокировки.&lt;br /&gt;
&lt;br /&gt;
=== Добавление комментария к нескольким маркерам ===&lt;br /&gt;
Для добавления комментария к нескольким маркерам одновременно:&lt;br /&gt;
:1. В режиме разметки [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходный контекст]] – проект, ветку, снимок.&lt;br /&gt;
:2. Включите отображение [[Help:UI manual#Таблица Маркеров|таблицы маркеров]].&lt;br /&gt;
:3. Выберите маркеры для разметки – установите флажки в строках таблицы.&lt;br /&gt;
:4. Нажмите кнопку [[File:Button Comment Add.png|x25px]] (доступна, если выбраны маркеры в таблице).&lt;br /&gt;
 &lt;br /&gt;
:[[File:128 Добавление общего комментария 1.png|400px|thumb|none|Выбор маркеров для добавления комментария к нескольким маркерам одновременно]]&lt;br /&gt;
:5. Отобразится окно для добавления комментария к нескольким маркерам одновременно.&lt;br /&gt;
 &lt;br /&gt;
:[[File:129 Добавление общего комментария 2.png|600px|thumb|none|Окно добавления комментария к нескольким маркерам одновременно]]&lt;br /&gt;
:6. Введите комментарий.&lt;br /&gt;
:Редактор комментариев поддерживает синтаксис Markdown.&lt;br /&gt;
:Для упоминания пользователя, вставьте '''@''' и введите или выберите его логин. После добавления комментария по нажатии кнопки '''Применить''' указанному пользователю придет [[Help:UI manual#Просмотр уведомлений в интерфейсе Системы|уведомление в интерфейсе системы]] об упоминании с возможностью перехода к маркеру с этим комментарием.&lt;br /&gt;
:8. Нажмите кнопку '''Сохранить'''.&lt;br /&gt;
&lt;br /&gt;
=== Экспорт ===&lt;br /&gt;
В режиме разметки можно выполнить экспорт:&lt;br /&gt;
* [[Help:UI manual#Экспорт исходного кода с разметкой|исходного кода с разметкой]];&lt;br /&gt;
* [[Help:UI manual#Экспорт снимка в формате snap|снимка в формате snap]];&lt;br /&gt;
* [[Help:UI manual#Экспорт разметки и снимка в SARIF|снимка в формате SARIF]];&lt;br /&gt;
* [[Help:UI manual#Экспорт разметки|разметки в файл]].&lt;br /&gt;
{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектным доступом]] '''Экспорт снимков'''''}}&lt;br /&gt;
&lt;br /&gt;
==== Экспорт исходного кода с разметкой ====&lt;br /&gt;
Чтобы экспортировать с сервера исходный код с разметкой (опционально):&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходный контекст]] – проект, ветку и снимок.&lt;br /&gt;
:2. На вкладке '''Информация о снимке''' нажмите кнопку '''Экспорт''' и выберите пункт '''Исходный код с разметкой'''.&lt;br /&gt;
:[[File:62 Переход к экспорту кода с разметкой.png|600px|thumb|none|Переход к экспорту кода с разметкой]]&lt;br /&gt;
:3. В открывшемся окне:&lt;br /&gt;
::а) Если требуется экспортировать разметку, установите флажок параметра '''Шаблон разметки''' и выберите шаблон для экспорта в списке справа. &lt;br /&gt;
::б) Опционально включите или выключите очистку старых комментариев.&lt;br /&gt;
::в) Опционально включите или выключите экспорт файлов с исходным кодом только выбранных в таблице маркеров или для всех маркеров в таблице, если маркеры не выбраны. &lt;br /&gt;
::г) Опционально заполните поля для удаления префиксов и исключения путей.&lt;br /&gt;
::д) Опционально введите регулярные выражения для очистки дополнительных строк (доступен, если включена очистка старых комментариев).&lt;br /&gt;
::[[File:63 Окно экспорта кода с разметкой.png|600px|thumb|none|Окно экспорта кода с разметкой]]&lt;br /&gt;
&lt;br /&gt;
::Пример удаления префиксов путей: &amp;lt;code&amp;gt;/.build/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::При экспорте можно исключить файлы, соответствующие [[Help:UI manual#Использование регулярных выражений|регулярным выражениям]] в поле '''Исключить пути'''. &lt;br /&gt;
:4. Нажмите кнопку '''Экспортировать'''.&lt;br /&gt;
В итоге создастся архив файлов с исходным кодом и, если был выбран шаблон разметки, то в исходный код будет добавлена актуальная разметка, в соответствии с выбранным шаблоном.&lt;br /&gt;
&lt;br /&gt;
==== Экспорт снимка в формате snap ====&lt;br /&gt;
Чтобы экспортировать с сервера исходный код снимка в формате .snap:&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходный контекст]] – проект, ветку и снимок.&lt;br /&gt;
:2. На вкладке '''Информация о снимке''' нажмите кнопку '''Экспорт''' и выберите пункт '''Снимок (*.snap)'''.&lt;br /&gt;
:[[File:192 Разметка. Переход к экспорту снимка в формате snap.png|600px|thumb|none|Переход к экспорту снимка в формате snap]]&lt;br /&gt;
:Запустится формирование файла. При старте и по окончании экспорта пользователю отобразится соответствующее всплывающее сообщение.&lt;br /&gt;
:[[File:193 Сообщение. Экспорт снимка.png|thumb|600px|thumb|none|Пример всплывающих сообщений при старте и окончании экспорта снимка]]&lt;br /&gt;
&lt;br /&gt;
==== Экспорт разметки и снимка в SARIF ====&lt;br /&gt;
Чтобы экспортировать разметку и при необходимости исходный код снимка в файл формата SARIF:&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходный контекст]] – проект, ветку и снимок.&lt;br /&gt;
:2. На вкладке '''Информация о снимке''' нажмите кнопку '''Экспорт''' и выберите пункт '''SARIF'''.&lt;br /&gt;
:[[File:194 Разметка. Переход к экспорту снимка SARIF.png|thumb|600px|thumb|none|Переход к экспорту снимка SARIF]]&lt;br /&gt;
:3. В открывшемся окне:&lt;br /&gt;
::а) Выключите (опционально) формирование название файла по умолчанию – снимите соответствующий флажок и введите название снимка. &lt;br /&gt;
::б) Опционально включите или выключите экспорт исходных файлов.&lt;br /&gt;
::в) Нажмите кнопку '''Экспортировать'''.&lt;br /&gt;
:[[File:195 Окно экспорта SARIF.png|thumb|600px|thumb|none|Окно экспорта снимка SARIF]]&lt;br /&gt;
:Запустится формирование файла. При старте и по окончании экспорта пользователю отобразится всплывающее сообщение.&lt;br /&gt;
:[[File:220 Сообщение. Экспорт SARIF.png|thumb|400px|thumb|none|Пример всплывающих сообщений при старте и окончании экспорта снимка в SARIF]]&lt;br /&gt;
&lt;br /&gt;
==== Экспорт разметки ====&lt;br /&gt;
Чтобы из ветки проекта экспортировать в файл разметку и/или комментарии:&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходный контекст]] – проект, ветку и снимок.&lt;br /&gt;
:2. На вкладке '''Информация о снимке''' нажмите кнопку '''Экспорт''' и выберите пункт '''Разметка'''.&lt;br /&gt;
:[[File:196 Разметка. Переход к экспорту разметки.png|thumb|thumb|thumb|600px|none|Переход к экспорту разметки]]&lt;br /&gt;
:3. В открывшемся окне:&lt;br /&gt;
::а) Выберите вариант экспорта. &lt;br /&gt;
::б) Если требуется экспортировать неразмеченные маркеры, установите флажок '''Включая разметку со статусом &amp;quot;Undecided&amp;quot;'''.&lt;br /&gt;
::в) Нажмите кнопку '''Экспортировать'''.&lt;br /&gt;
:[[File:197 Окно экспорта разметки.png|thumb|thumb|thumb|600px|none|Окно экспорта разметки]]&lt;br /&gt;
&lt;br /&gt;
=== Импорт разметки ===&lt;br /&gt;
В режиме разметки можно импортировать разметку из двух источников:&lt;br /&gt;
* [[Help:UI manual#Импорт разметки из файла|из файла]];&lt;br /&gt;
* [[Help:UI manual#Импорт разметки из исходного кода|из исходного кода снимка]].&lt;br /&gt;
{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектным доступом]] '''Импорт разметки'''''}}&lt;br /&gt;
&lt;br /&gt;
==== Импорт разметки из файла ====&lt;br /&gt;
Чтобы импортировать файл с разметкой:&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходный контекст]] – проект, ветку и снимок.&lt;br /&gt;
:2. На вкладке '''Информация о снимке''' нажмите кнопку '''Импорт''' и выберите пункт '''Разметка из файла'''.&lt;br /&gt;
:[[File:198 Разметка. Переход к импорту разметки из файла.png|thumb|thumb|thumb|600px|none|Переход к импорту файла с разметкой]]&lt;br /&gt;
:3. В открывшемся окне:&lt;br /&gt;
::а) Выберите файл архива в формате .gz. &lt;br /&gt;
::б) Выберите варианты импорта и действия при наличии конфликта разметки.&lt;br /&gt;
::в) Нажмите кнопку '''Импортировать'''.&lt;br /&gt;
:[[File:199 Окно импорта файла с разметкой.png|thumb|600px|thumb|none|Окно импорта файла с разметкой]]&lt;br /&gt;
:По окончании пользователю отобразится всплывающее сообщение с информацией о выполненной операции.&lt;br /&gt;
:[[File:200 Сообщение. Импорт разметки из файла.png|thumb|thumb|thumb|600px|none|Пример всплывающего сообщения об окончании импорта разметки из файла]]&lt;br /&gt;
&lt;br /&gt;
==== Импорт разметки из исходного кода ====&lt;br /&gt;
Чтобы импортировать разметку из исходного кода снимка в ветку проекта:&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходный контекст]] – проект, ветку и снимок.&lt;br /&gt;
:2. На вкладке '''Информация о снимке''' нажмите кнопку '''Импорт''' и выберите пункт '''Разметка из исходного кода'''.&lt;br /&gt;
:[[File:201 Разметка. Переход к импорту разметки из кода.png|thumb|thumb|thumb|thumb|600px|none|Переход к импорту исходного кода с разметкой]]&lt;br /&gt;
:3. В открывшемся окне выберите шаблон разметки и нажмите кнопку '''Импортировать'''.&lt;br /&gt;
:[[File:134_Импорт_разметки.png|thumb|thumb|thumb|600px|none|Окно импорта исходного кода с разметкой]]&lt;br /&gt;
:По окончании пользователю отобразится всплывающее сообщение с информацией о выполненной операции.&lt;br /&gt;
:[[File:203 Сообщение. Импорт разметки из кода.png|thumb|thumb|thumb|thumb|600px|none|Пример всплывающего сообщения об окончании импорта разметки из исходного кода снимка]]&lt;br /&gt;
&lt;br /&gt;
=== Работа с таблицей статистики ===&lt;br /&gt;
Чтобы посмотреть краткую статистику о разметке маркеров:&lt;br /&gt;
:1. [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|Выберите исходный контекст]].&lt;br /&gt;
:2. Перейдите [[Help:UI manual#Работа в режиме разметки|в режим разметки]].&lt;br /&gt;
:3. На вкладке '''Информация о снимке''' в строке свойства '''Статистика по детекторам''' нажмите кнопку '''Показать'''.&lt;br /&gt;
&lt;br /&gt;
:[[File:64 Переход к просмотру статистики.png|600px|thumb|none|Переход к просмотру статистики]]&lt;br /&gt;
&lt;br /&gt;
:Отобразится таблица статистики:&lt;br /&gt;
:[[File:65 Таблица статистики.png|600px|thumb|none|Таблица статистики]]&lt;br /&gt;
:4. Нажмите кнопку [[File:Icon download CSV.png|x20px]] или [[File:Icon download PDF.png|x20px]], чтобы выгрузить статистику в соответствующем формате.&lt;br /&gt;
:5. Нажмите кнопку [[File:Icon filter.png|x20px]] в строке статистики, чтобы применить [[Help:UI manual#Настройка и использование пользовательских фильтров|пользовательский фильтр]] с параметрами, которые соответствуют выбранному значению.&lt;br /&gt;
&lt;br /&gt;
== Работа в режиме просмотра кода ==&lt;br /&gt;
Режим позволяет посмотреть исходный код снимков, который был обработан анализатором Svace.&lt;br /&gt;
&lt;br /&gt;
Для этого:&lt;br /&gt;
:1. Перейдите в режим просмотра кода по кнопке меню [[File:Button Код.png|x25px]] в верхней части экрана.&lt;br /&gt;
:2. [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|Выберите исходный контекст]].&amp;lt;br&amp;gt;&lt;br /&gt;
:{{Note|type=info|text=''По умолчанию выбран контекст (проект, ветка), заданный ранее в режиме [[Help:UI manual#Работа в режиме разметки|'''Разметка''']]. Если Пользователь перешел в раздел '''Кoд''' из режима сравнения снимков раздела [[Help:UI manual#Работа в режиме разметки|'''Разметка''']], то для изменения контекста требуется отменить режим сравнения.''}}&lt;br /&gt;
:В левой части экрана отобразится иерархический список файлов снимка, а в правой – поле для отображения исходного кода файла.&lt;br /&gt;
:[[File:67 Режим просмотра кода.png|600px|thumb|none|Режим просмотра кода. Начальное состояние]]&lt;br /&gt;
:3. Для поиска файла:&lt;br /&gt;
::а) Кликните на поле поиска или нажмите комбинацию клавиш '''Ctrl+Shift+O'''.&lt;br /&gt;
::б) В открывшемся окне введите поисковый запрос и выберите файл.&lt;br /&gt;
:4. В левой части экрана раскройте группу файлов и нажмите на имя файла.&lt;br /&gt;
:В правой части отобразится исходный код файла.&lt;br /&gt;
:[[File:68 Режим просмотра кода открыт один файл.png|600px|thumb|none|Пример одного открытого файла]]&lt;br /&gt;
:5. Если требуется, откройте другие файлы.&lt;br /&gt;
:Они отобразятся на отдельных вкладках, если выключена [[Help:UI manual#Настройка профиля пользователя|настройка '''Переиспользование вкладки в редакторе кода''']].&lt;br /&gt;
:[[File:69 Режим просмотра кода открыто три файла.png|600px|thumb|none|Пример трёх открытых файлов]]&lt;br /&gt;
:6. Для перехода к предыдущей или следующей строке, в которую пользователь устанавливал курсор, используйте кнопки [[File:Button left.png|x25px]] и [[File:Button right.png|x25px]] или сочетания клавиш '''Ctrl+&amp;lt; и Ctrl+&amp;gt;'''.&lt;br /&gt;
:7. Вызовите функции, доступные по нажатии правой кнопки мыши на строке исходного кода&lt;br /&gt;
:* '''Перейти к объявлению''' – для перехода к строке, в которой объявлена переменная;&lt;br /&gt;
:* '''Перейти к определению''' – для перехода к строке, в которой определена переменная и функция;&lt;br /&gt;
:* '''Найти ссылки''' – для просмотра ссылок в панели с иерархическим списком файлов, именами файлов и номерами строк, в которых найдены ссылки;&lt;br /&gt;
::{{Note|type=info|text=''Если для выделенного элемента кода нет объявления, определения или ссылок, то отобразится сообщение: [[File:150 Объявление не найдено.png|x25px]], [[File:151 Определение не найдено.png|x25px]] или [[File:152 Ссылки не найдены.png|x25px]].''}}&lt;br /&gt;
::[[File:24 Исходный код Cписок файлов со ссылками.png|thumb|none|600px|Cписок файлов с номерами строк, в которых найдены ссылки]]&lt;br /&gt;
:* '''Копировать прямую ссылку''' – копирование ссылки на строку кода в буфер обмена. &lt;br /&gt;
::При переходе по этой ссылке будет открываться файл в режиме просмотра кода с курсором на той строке кода, для которой была скопирована ссылка;&lt;br /&gt;
:* '''Уменьшить''' и '''Увеличить''' – увеличение и уменьшение размера шрифта кода (эти функции также можно вызвать с помощью сочетаний клавиш '''Ctrl+Alt+-''' или '''Ctrl+Alt+=''').&lt;br /&gt;
:* '''Copy''' – для копирования строки в буфер обмена;&lt;br /&gt;
:* '''Command Palette''' – для вызова командной строки.&lt;br /&gt;
:6. Установите курсор в строке кода, чтобы отобразилось его позиционирование в правом нижнем углу.&lt;br /&gt;
:[[File:130 Позиционирование к коде.png|600px|thumb|none|Отображение позиционирования курсора в коде]]&lt;br /&gt;
:7. Сравните файлы – для этого:&lt;br /&gt;
::а) Нажмите правой кнопки мыши на имени файла и выберите пункт '''Сравнить с…'''&lt;br /&gt;
::[[File:156 Переход к сравнению файлов.png|thumb|none|600px|Переход к сравнению файлов]]&lt;br /&gt;
::б) В открывшемся окне выберите файл для сравнения. Для этого выберите проект, ветку и снимок, а затем раскройте группы файлов или воспользуйтесь поисковой строкой, нажмите на имя файла. &lt;br /&gt;
::По умолчанию выбраны проект и ветка исходного контекста.&lt;br /&gt;
::в)  Нажмите кнопку '''Сравнить'''.&lt;br /&gt;
:Откроется окно сравнения файлов.&lt;br /&gt;
 &lt;br /&gt;
:[[File:Code compare 2.png|600px|thumb|none|Окно выбора файла для сравнения]]&lt;br /&gt;
 &lt;br /&gt;
:[[File:Code_compare_3.png|600px|thumb|none|Окно сравнения файлов]]&lt;br /&gt;
&lt;br /&gt;
==Управление проектами и группами проектов==&lt;br /&gt;
В разделе '''Проекты''' отображаются все проекты со всеми ветками и снимками. &lt;br /&gt;
Для удобства работы проекты могут быть [[Help:UI manual#Работа с группами проектов|сгруппированы]]. Один проект может быть включен в несколько групп проектов.&lt;br /&gt;
[[File:101 Раздел Проекты.png|thumb|none|upright=3|Раздел '''Проекты''']]&lt;br /&gt;
&lt;br /&gt;
===Работа с проектами===&lt;br /&gt;
Список проектов отображается в левой части экрана и организован в виде иерархии. При этом:&lt;br /&gt;
* для проектов, разметку маркеров которых нужно в обязательном порядке снабжать комментариями, отображается иконка [[File:Icon comment.png|x25px]];&lt;br /&gt;
* в нижней части списка отображается общее количество проектов и веток с учетом примененных фильтров, а также выбранных проектов и веток.&lt;br /&gt;
В списке доступны:&lt;br /&gt;
* поиск по имени проекта;&lt;br /&gt;
* фильтрация списка по группам проектов;&lt;br /&gt;
* сортировка по названию или дате создания (по умолчанию – по названию).&lt;br /&gt;
При работе с проектами пользователю доступны следующие функции: &lt;br /&gt;
:1.	Загрузка актуальных данных с сервера – для этого нажмите кнопку [[File:Icon refresh.png|x25px]].&lt;br /&gt;
:2.	Просмотр списка веток – для этого нажмите на название проекта.&lt;br /&gt;
:Ветки отобразятся в этом же списке проекта на втором уровне.&lt;br /&gt;
:3.	Просмотр списка снимков – для этого нажмите на название ветки.&lt;br /&gt;
:Список снимков отобразится в виде таблицы в правой части экрана.&lt;br /&gt;
:4.	[[Help:UI manual#Работа с группами проектов|Группировка проектов]].&lt;br /&gt;
:5.	Создание проекта:&lt;br /&gt;
::а) Нажмите кнопку '''Создать проект'''.&lt;br /&gt;
::Откроется окно создания проекта.&lt;br /&gt;
::[[File:102 Создание проекта.png|thumb|none|upright=1.5|Окно создания проекта]]&lt;br /&gt;
::б) Введите название проекта.&lt;br /&gt;
::в) Для выбора одной или нескольких существующих групп кликните на поле '''Группы''' и выберите одно или несколько значений в списке:&lt;br /&gt;
::[[File:157 Окно создания проекта. Выбор существующей группы.png|thumb|none|upright=1.5|Окно создания проекта. Пример выбора существующей группы]]&lt;br /&gt;
::г) Для создания одной новой группы введите ее название и нажмите кнопку '''Создать''' в появившейся форме:&lt;br /&gt;
::[[File:158 Окно создания проекта.Создание одной группы.png|thumb|none|upright=1.5|Окно создания проекта. Пример создания одной группы]]&lt;br /&gt;
::д) Для создания нескольких новых групп введите их названия через запятую и нажмите кнопку '''Создать''' в появившейся форме:&lt;br /&gt;
::[[File:159 Окно создания проекта. Создание нескольких групп.png|thumb|none|upright=1.5|Окно создания проекта. Пример создания двух групп]]&lt;br /&gt;
::е) Установите флажок, если требуется при разметке маркеров обязательно добавлять комментарий.&lt;br /&gt;
::ж) Нажмите кнопку '''Создать'''.&lt;br /&gt;
:При создании проекта автоматически создается ветка '''master'''.&lt;br /&gt;
:При импорте снимка в интерфейсе командной строки проект, при его отсутствии, добавляется автоматически.&lt;br /&gt;
:6.	Добавление ветки: [[File:103 Создание ветки.png|thumb|right|none|upright=1.5|Окно добавления ветки в проект]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке проекта.&lt;br /&gt;
::б) В меню выберите пункт '''Создать ветку'''.&lt;br /&gt;
::в) В открывшемся окне введите название ветки и нажмите кнопку '''Создать'''.&lt;br /&gt;
:При импорте снимка в интерфейсе командной строки ветка, при ее отсутствии, добавляется автоматически.&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
:7. Клонирование проекта со всеми ветками и снимками: [[File:132 Окно клонирования проекта.png|thumb|right|none|upright=1.5|Окно клонирования проекта]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке проекта.&lt;br /&gt;
::б) В меню выберите пункт '''Клонировать'''.&lt;br /&gt;
::в) В открывшемся окне введите название нового проекта, при необходимости скорректируйте группы, в которые будет входить клонированный проект (по умолчанию, группы исходного проекта) и нажмите кнопку '''Клонировать'''.&lt;br /&gt;
&amp;lt;/br&amp;gt; &lt;br /&gt;
:9.	Редактирование параметров проекта:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке проекта.&lt;br /&gt;
::б) В меню выберите пункт '''Редактировать'''.&lt;br /&gt;
::в) В открывшемся окне измените название проекта, скорректируйте список групп, в которые включен проект, и установите или снимите флажок обязательности комментария при разметке и нажмите кнопку '''Сохранить'''.&lt;br /&gt;
:10.	Удаление одного проекта:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке проекта.&lt;br /&gt;
::б) В меню выберите пункт '''Удалить'''.&lt;br /&gt;
::в) Подтвердите удаление.&lt;br /&gt;
:11.	Удаление нескольких проектов с ветками:&lt;br /&gt;
::а) Выберите проекты для удаления – установите флажки в левой части названий проектов и веток или нажмите кнопку '''Выбрать всё'''.&lt;br /&gt;
::б) Нажмите кнопку '''Удалить''' в верхней части списка проектов и подтвердите удаление.&lt;br /&gt;
При удалении проекта удаляются все его ветки и снимки, разрывается связь проекта с группами.&lt;br /&gt;
&lt;br /&gt;
===Работа с группами проектов===&lt;br /&gt;
Работа с группами проектов доступна на отдельной панели '''Группы проектов''', которая отрывается по нажатии кнопки [[File:Icon gear.png|x25px]] в списке проектов. При этом в нижней части списка отображается общее количество групп.&lt;br /&gt;
&lt;br /&gt;
В списке групп доступны:&lt;br /&gt;
* поиск по названию группы;&lt;br /&gt;
* фильтрация списка по проектам.&lt;br /&gt;
&lt;br /&gt;
[[File:104 Панель групп.png|thumb|none|upright=3|Панель '''Группы проектов''']]&lt;br /&gt;
При работе с группами проектов пользователю доступны следующие функции: &lt;br /&gt;
:1.	Просмотр списка связанных с группой проектов – для этого нажмите на название группы.&lt;br /&gt;
:Проекты отобразятся в этом же списке групп на втором уровне.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:2.	Добавление группы: [[File:105 Создание группы.png|thumb|right|none|upright=1.5|Окно '''Создать группу''']]&lt;br /&gt;
::а) Нажмите кнопку '''Создать группу'''.&lt;br /&gt;
::б) В открывшемся окне введите название группы и выберите проекты, которые в неё войдут, нажмите кнопку '''Создать'''.&lt;br /&gt;
:Созданная группа отобразится в списке на панели '''Группы проектов'''.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:3.	Редактирование параметров группы: [[File:106 Редактирование группы.png|thumb|right|none|upright=1.5|Окно Редактировать группу]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Icon edit2.png|x25px]] в строке группы.&lt;br /&gt;
::б) В открывшемся окне измените название группы, скорректируйте состав включенных в группу проектов.&lt;br /&gt;
::в) Нажмите на кнопку [[File:Icon cancel.png|x25px]] справа от названия проекта в списке, чтобы исключить его из группы.&lt;br /&gt;
::г) Нажмите кнопку '''Сохранить'''.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:4.	Исключение одного проекта из группы – для этого нажмите кнопку [[File:Icon hide marks.png|x25px]] в правой части списка проектов группы.&lt;br /&gt;
:5.	Удаление одной группы – для этого нажмите кнопку [[File:Icon delete.png|x25px]] в правой части списка групп и подтвердите удаление.&lt;br /&gt;
:6.	Удаление нескольких групп:&lt;br /&gt;
::а) Выберите группы для удаления – установите флажки в левой части названий групп или нажмите кнопку '''Выбрать всё'''.&lt;br /&gt;
::б) Нажмите кнопку '''Удалить''' в верхней части списка групп проектов и подтвердите удаление.&lt;br /&gt;
:При удалении группы разрывается связь проекта с группой. Сами проекты не удаляются.&lt;br /&gt;
&lt;br /&gt;
===Работа с ветками===&lt;br /&gt;
При работе с ветками проекта пользователю доступны следующие функции: &lt;br /&gt;
:1.	Просмотр списка снимков – для этого нажмите на название ветки в списке проектов.&lt;br /&gt;
:Список снимков отобразится в виде таблицы в правой части экрана.&lt;br /&gt;
:2.	Редактирование ветки: [[File:107 Редактирование ветки.png|thumb|right|upright=1.5|Окно редактирования ветки]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке ветки.&lt;br /&gt;
::б) В меню выберите пункт '''Редактировать'''.&lt;br /&gt;
::в) В открывшемся окне измените название ветки и нажмите кнопку '''Сохранить'''.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:3.	Клонирование ветки проекта: [[File:108 Клонирование ветки.png|thumb|right|upright=1.5|Окно клонирования ветки]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке ветки.&lt;br /&gt;
::б) В меню выберите пункт '''Клонировать'''.&lt;br /&gt;
::в) В открывшемся окне введите название новой ветки и нажмите кнопку '''Клонировать'''.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:4. Экспорт разметки в файл: [[File:197 Окно экспорта разметки.png|thumb|right|upright=1.5|Окно экспорта разметки]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке ветки.&lt;br /&gt;
::б) В меню выберите пункт '''Экспорт разметки'''.&lt;br /&gt;
::Откроется окно экспорта разметки.&lt;br /&gt;
::в) Выберите вариант экспорта.&lt;br /&gt;
::г) Если требуется экспортировать неразмеченные маркеры, установите флажок '''Включая разметку со статусом &amp;quot;Undecided&amp;quot;'''.&lt;br /&gt;
::д) Нажмите кнопку '''Экспортировать'''.&lt;br /&gt;
::{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектным доступом]] '''Экспорт снимков'''''}}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:5. Импорт разметки из файла: [[File:199 Окно импорта файла с разметкой.png|thumb|right|upright=1.5|Окно импорта разметки]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке ветки.&lt;br /&gt;
::б) В меню выберите пункт '''Импорт разметки'''.&lt;br /&gt;
::Откроется окно импорта разметки.&lt;br /&gt;
::в) Выберите файл архива в формате .gz.&lt;br /&gt;
::г) Выберите варианты импорта и действия при наличии конфликта разметки.&lt;br /&gt;
::д) Нажмите кнопку '''Импортировать'''.&lt;br /&gt;
::{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектным доступом]] '''Импорт снимков'''''}}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:6.	Удаление ветки:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке ветки.&lt;br /&gt;
::б) В меню выберите пункт '''Удалить'''.&lt;br /&gt;
::в) Подтвердите удаление.&lt;br /&gt;
::При удалении ветки удаляются все ее снимки.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:7. Очистка разметки: [[File:160 Окно очистки разметки.png|thumb|right|upright=1.5|Окно очистки разметки]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке ветки.&lt;br /&gt;
::б) В меню выберите пункт '''Очистить разметку'''.&lt;br /&gt;
::в) В открывшемся окне выберите вариант очистки.&lt;br /&gt;
::г) Нажмите кнопку '''Очистить'''.&lt;br /&gt;
::{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектными доступами]] '''Управление ветками и снимками''', '''Разметка маркеров''' и [[#Cерверные доступы|серверным доступом]] '''Администрирование сервера'''.''}}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:8.	Копирование разметки в другой контейнер (проект и ветку): [[File:Image.png|thumb|right|upright=1.5|Окно копирования разметки в другой контейнер]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке ветки и в меню выберите пункт '''Копировать разметку'''.&lt;br /&gt;
::б) В открывшемся окне выберите проект и ветку, в которые нужно скопировать разметку, а также действия, которые нужно выполнить при наличии разметки.&lt;br /&gt;
::в) Нажмите кнопку '''Копировать'''.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Разметка в контейнере состоит из множества размеченных маркеров. В целевой ветке уже может находиться разметка. Все множество маркеров в исходной ветке можно разбить на два: &lt;br /&gt;
* «Уникальные» – маркеры, которые есть только в исходной ветке;&lt;br /&gt;
* «Общие» – маркеры, которые есть как в ветке-источнике, так и в ветке-приемнике.&lt;br /&gt;
При выполнении операции копирования разметка в уникальных маркерах всегда копируется в ветку-приемник. Для «Общих» маркеров возможны несколько вариантов продолжения копирования, но по умолчанию выбран пункт '''Не копировать''' – в этом случае разметка в «Общих» маркерах в ветке-приемнике не изменяется.&lt;br /&gt;
&lt;br /&gt;
Если выбрано действие '''Перезаписать''', разметка на «Общих» маркерах в целевом контейнере будет заменена разметкой из ветки-источника. &lt;br /&gt;
&lt;br /&gt;
При выборе действия '''Перезаписать только старую разметку''' разметка из ветки-источника копируется в том случае, если ее метка времени более поздняя, чем та, которая указана в ветке-приемнике на данном маркере.&lt;br /&gt;
&lt;br /&gt;
'''Пример''' &lt;br /&gt;
:Есть несколько контейнеров: &lt;br /&gt;
:* A с разметкой {(M1, D1), (M2, D2), (M3, D3)}&lt;br /&gt;
:* B с разметкой {(M4, D4), (M2, D5), (M3, D6)},&lt;br /&gt;
::где M — это маркер, а D — разметка (включая метку времени).&lt;br /&gt;
&lt;br /&gt;
:Операцию сравнения на разметке обозначим как &amp;gt;. Если метка времени в D1 больше, чем в D2, то D1 &amp;gt; D2.&lt;br /&gt;
:Пусть D2 &amp;gt; D5, а D3 &amp;lt; D6. Тогда операция копирования всегда скопирует разметку D1 (но не сам маркер), так как маркер M1 новый для контейнера B.&lt;br /&gt;
&lt;br /&gt;
:Маркеры M2, M3 — общие для двух контейнеров, поэтому то, какая разметка будет в контейнере-приемнике, будет зависеть от выбранного варианта разрешения конфликта: &lt;br /&gt;
:* если выбран пункт '''Не копировать''', то в контейнере B на маркерах M2, M3 будет разметка D5, D6 соответственно;&lt;br /&gt;
:* если выбран пункт '''Перезаписать''', то на M2, M3 будет разметка D2, D3;&lt;br /&gt;
:* если выбран пункт '''Перезаписать только старую разметку''', то на M2, M3 разметка будет: D2, D6, так как D2 &amp;gt; D5 и D6 &amp;gt; D3.&lt;br /&gt;
:При выполнении копирования наличие маркера в ветке-приемнике не проверяется.&lt;br /&gt;
:При успешном копировании выводится всплывающее сообщение с описанием выполненных операций:&lt;br /&gt;
:[[File:161 Сообщение об успешном копировании разметки.png|thumb|none|upright=2|Пример всплывающего сообщения об успешном копировании разметки]]&lt;br /&gt;
&lt;br /&gt;
===Работа со снимками===&lt;br /&gt;
Список снимков отображается в правой части экрана в виде таблицы после выбора ветки проекта. При этом в нижней части списка отображается общее количество снимков в выбранной ветке и количество выбранных снимков.&lt;br /&gt;
В списке доступны:&lt;br /&gt;
* поиск по названию снимка;&lt;br /&gt;
* сортировка по значениям столбцов (по умолчанию — по дате создания).&lt;br /&gt;
При работе со снимками пользователю доступны следующие функции: &lt;br /&gt;
:1. Импорт снимка из файла – для этого нажмите кнопку '''Импорт''' в верхней части табличного списка снимков и в открывшемся списке выберите один из вариантов импорта: '''Снимок (*.snap)''', '''Архив .svace-dir''' или '''SARIF'''.&lt;br /&gt;
:{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектным доступом]] '''Импорт снимков'''''}}&lt;br /&gt;
:После этого: &lt;br /&gt;
[[File:110 Импорт снимка.png|thumb|right|upright=1.5|Окно импорта снимка из файла в формате snap]]&lt;br /&gt;
::а) Если выбран импорт из файла в формате snap, то в открывшемся окне:&lt;br /&gt;
::* выберите файл в формате .snap;&lt;br /&gt;
::* введите название снимка (опционально);&lt;br /&gt;
::* Задайте [[Edit markers (command line)|правила трансформации, пропуска и дедупликации маркеров]] в поле '''Редактировать маркеры''' – загрузите JSON-файл с правилами или введите их;   &lt;br /&gt;
::* нажмите кнопку '''Импортировать'''.&lt;br /&gt;
::{{Note|type=info|text=''Если при импорте снимка из snap-файла название не введено, то будет использовано название исходного снимка (параметр «name» в JSON с информацией о снимке).''}}&lt;br /&gt;
[[File:133 Импорт снимка из архива svace-dir.png|thumb|right|upright=1.5|Окно импорта снимка из архива в формате svace-dir]]&lt;br /&gt;
[[File:133.1_Импорт_снимка_из_архива_svace-dir_-_Поля_опций.png|thumb|right|upright=1.5|Окно импорта снимка из архива в формате svace-dir. Поля опций для расширенных настроек]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
::б) Если выбран импорт архива .svace-dir, то в открывшемся окне:&lt;br /&gt;
::* выберите архив .svace-dir;&lt;br /&gt;
::* введите название снимка (опционально);&lt;br /&gt;
::* выберите шаблон разметки (опционально);&lt;br /&gt;
::* укажите правила префикса пути (опционально);&lt;br /&gt;
::*  укажите расширенные настройки (опционально): для каждой настройки нажмите кнопку '''Добавить''', в появившихся полях выберите опцию и введите её значение; для удаления настройки нажмите кнопку [[File:Icon delete.png|x25px]].&lt;br /&gt;
::После выбора параметра в поле появляется иконка [[File:Icon question mark2.png|x15px]], по наведении курсора на которую можно посмотреть описание;&lt;br /&gt;
::* нажмите кнопку '''Импортировать'''. &lt;br /&gt;
::При старте операции и по ее окончании пользователю отобразятся соответствующие всплывающие сообщения.&lt;br /&gt;
::[[File:210 Сообщение. Импорт svace-dir.png|thumb|none|upright=1.5|Пример всплывающих сообщений при старте и окончании импорта снимка из архива в формате svace-dir]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:217 Импорт снимка SARIF.png|thumb|right|upright=1.5|Окно импорта снимка из файла в формате SARIF]]&lt;br /&gt;
[[File:218 Импорт снимка SARIF - поля опций.png|thumb|right|upright=1.5|Окно импорта снимка из архива в формате SARIF. Поля опций для расширенных настроек]]&lt;br /&gt;
::в) Если выбран импорт из файла в формате SARIF, то в открывшемся окне:&lt;br /&gt;
::*  выберите файл в формате .sarif или .json, либо архив в одном из форматов: .tar, tar.bz2, tar.gz, zip;&lt;br /&gt;
::*  введите название снимка (опционально);&lt;br /&gt;
::*  укажите правила префикса пути (опционально);&lt;br /&gt;
::*  укажите расширенные настройки (опционально): для каждой настройки нажмите кнопку '''Добавить''', в появившихся полях выберите опцию и введите её значение; для удаления настройки нажмите кнопку [[File:Icon delete.png|x25px]].&lt;br /&gt;
::После выбора параметра в поле появляется иконка [[File:Icon question mark2.png|x15px]], по наведении курсора на которую можно посмотреть описание;&lt;br /&gt;
::* нажмите кнопку '''Импортировать'''.&lt;br /&gt;
::При старте операции и по ее окончании пользователю отобразятся соответствующие всплывающие сообщения.&lt;br /&gt;
::[[File:211 Сообщение. Импорт SARIF.png|thumb|none|upright=1.5|Пример всплывающих сообщений при старте и окончании импорта снимка из архива в формате SARIF]]&lt;br /&gt;
:{{Note|type=info|text='''''Примечание:''''' &lt;br /&gt;
:* ''для импорта поддерживаются архивы папки .svace-dir, заархивированные с помощью tar, gz, bz2 или zip (*.tar, *.tar.gz, *.tar.bz2, *.zip);''&lt;br /&gt;
:* ''если при импорте архива .svace-dir название снимка не введено, то оно будет соответствовать времени импорта результатов анализа из Svace;''&lt;br /&gt;
:* ''в поле '''Расширенные настройки''' поддерживается ввод дополнительных опций команды &amp;lt;code&amp;gt;svacer import&amp;lt;/code&amp;gt; – как в интерфейсе командной строки (например, &amp;lt;code&amp;gt;--attach value&amp;lt;/code&amp;gt;). В аргументах дополнительных опций требуется указывать пути относительно архивированной папки. Описание опций можно найти, запустив команду &amp;lt;code&amp;gt;svacer import --help&amp;lt;/code&amp;gt;''.&lt;br /&gt;
:* ''для импорта снимка из snap-файла, .svace-dir  или SARIF может потребоваться много времени: как на загрузку, так и на обработку данных после загрузки. При работе сервера Svacer за reverse proxy их дефолтных значений таймаутов или ограничений на размер загружаемых данных может быть недостаточно, поэтому рекомендуется увеличить эти значения в конфигурационных файлах reverse proxy, см. [[Help:Configuration#Nginx|пример для Nginx]]''}}&lt;br /&gt;
:2. Экспорт снимка – для этого нажмите кнопку [[File:Icon export.png|x25px]]в крайнем правом столбце строки снимка и в открывшемся списке выберите один из вариантов экспорта: '''Экспорт (*.snap)''', '''Экспорт SARIF''' или '''Экспорт кода с разметкой'''.&lt;br /&gt;
:После этого:&lt;br /&gt;
::а) Если выбран экспорт в файл в формате snap, то по окончании его формирования во всплывающем сообщении нажмите кнопку '''Скачать'''.&lt;br /&gt;
::[[File:193 Сообщение. Экспорт снимка.png|thumb|none|upright=1.5|Пример всплывающих сообщений при старте и окончании экспорта снимка]]&lt;br /&gt;
:[[File:195 Окно экспорта SARIF.png|thumb|right|upright=1.5|Окно экспорта снимка SARIF]]&lt;br /&gt;
::б) Если выбран экспорт файла формата SARIF, то в открывшемся окне:&lt;br /&gt;
::* Выключите (опционально) формирование название файла по умолчанию – снимите соответствующий флажок и введите название снимка.&lt;br /&gt;
::* Опционально включите или выключите экспорт исходных файлов.&lt;br /&gt;
::* Нажмите кнопку '''Экспортировать'''.&lt;br /&gt;
::Запустится формирование файла. При старте и по окончании экспорта пользователю отобразится всплывающее сообщение.&lt;br /&gt;
::[[File:220 Сообщение. Экспорт SARIF.png|thumb|none|upright=1.5|Пример всплывающих сообщений при старте и окончании экспорта снимка в SARIF]]&lt;br /&gt;
:[[File:340 Проекты Окно экспорта кода с разметкой.png||thumb|right|upright=1.5|Окно экспорта кода с разметкой]]&lt;br /&gt;
::в) Если выбран экспорт кода с разметкой, то в открывшемся окне:&lt;br /&gt;
::* Если требуется экспортировать разметку, установите флажок параметра '''Шаблон разметки''' и выберите шаблон для экспорта в списке справа.&lt;br /&gt;
::* Опционально включите или выключите очистку старых комментариев.&lt;br /&gt;
::* Опционально заполните поля для удаления префиксов и исключения путей.&lt;br /&gt;
::* Опционально введите регулярные выражения для очистки дополнительных строк (доступен, если включена очистка старых комментариев).::&lt;br /&gt;
::Пример удаления префиксов путей: &amp;lt;code&amp;gt;/.build/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::При экспорте можно исключить файлы, соответствующие [[Help:UI manual#Использование регулярных выражений|регулярным выражениям]] в поле '''Исключить пути'''. &lt;br /&gt;
::* Нажмите кнопку '''Экспортировать'''.&lt;br /&gt;
::В итоге создастся архив файлов с исходным кодом и, если был выбран шаблон разметки, то в исходный код будет добавлена актуальная разметка, в соответствии с выбранным шаблоном.&lt;br /&gt;
:3.	Переход к разметке маркеров снимка:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в крайнем правом столбце строки снимка.&lt;br /&gt;
::б) В меню выберите пункт '''Разметить'''.&lt;br /&gt;
[[File:111 Редактирование снимка.png|thumb|right|upright=1.5|Окно редактирования снимка]]&lt;br /&gt;
:4.	Редактирование названия снимка:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в крайнем правом столбце строки снимка.&lt;br /&gt;
::б) В меню выберите пункт '''Редактировать'''.&lt;br /&gt;
::в) Поменяйте название и нажмите кнопку '''Сохранить'''.&lt;br /&gt;
[[File:212 Окно Копирование снимков.png|thumb|right|upright=1.5|Окно копирования снимка. Пример для одного снимка]]&lt;br /&gt;
:5.	Копирование одного снимка в другой проект и ветку:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в крайнем правом столбце строки снимка.&lt;br /&gt;
::б) В меню выберите пункт '''Копировать'''.&lt;br /&gt;
::в) В открывшемся окне выберите проект и ветку, в которые нужно добавить копию снимка, нажмите кнопку '''Копировать'''.&lt;br /&gt;
::При старте операции и по ее окончании пользователю отобразятся соответствующие всплывающие сообщения.&lt;br /&gt;
::[[File:213 Сообщение. Копирование снимков.png|thumb|none|upright=1.5|Пример всплывающих сообщений при старте и окончании копирования одного снимка]]&lt;br /&gt;
[[File:214 Окно Копирование нескольких снимков.png|thumb|right|upright=1.5|Окно копирования снимка. Пример для двух снимков]]&lt;br /&gt;
:6. Копирование нескольких снимков в другой проект и ветку:&lt;br /&gt;
::а) Чтобы выбрать для копирования все снимки, установите флажок в заголовке табличного списка снимков.&lt;br /&gt;
::б) Чтобы выбрать несколько снимков, установите флажки в крайнем правом столбце табличного списка.&lt;br /&gt;
::в) Нажмите кнопку '''Копировать''' в верхней части табличного списка снимков.&lt;br /&gt;
::г) В открывшемся окне выберите проект и ветку, в которые нужно добавить копии выбранных снимков, нажмите кнопку '''Копировать'''.&lt;br /&gt;
::При старте операции и по ее окончании пользователю отобразятся соответствующие всплывающие сообщения.&lt;br /&gt;
::[[File:215 Сообщение. Копирование двух снимков.png|thumb|none|upright=1.5|Пример всплывающих сообщений при старте и окончании копирования двух снимков]]&lt;br /&gt;
:[[File:134 Импорт разметки.png|thumb|right|upright=1.5|Окно импорта разметки]]&lt;br /&gt;
:7. Импорт разметки из комментариев исходного кода снимка в активную ветку проекта:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в крайнем правом столбце строки снимка.&lt;br /&gt;
::б) В меню выберите пункт '''Импорт разметки из исходного кода'''.&lt;br /&gt;
::в) В открывшемся окне выберите шаблон разметки и нажмите кнопку '''Импортировать'''.&lt;br /&gt;
::По окончании пользователю отобразится всплывающее сообщение с информацией о выполненной операции. &lt;br /&gt;
::[[File:216 Сообщение. Импорт разметки из кода.png|thumb|none|upright=1.5|Пример всплывающего сообщения об окончании импорта разметки из файла]]&lt;br /&gt;
&lt;br /&gt;
:8.	Просмотр информации о снимке в JSON-формате:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке снимка крайнем правом столбце.&lt;br /&gt;
::б) В меню выберите пункт '''Просмотреть JSON'''.&lt;br /&gt;
:[[File:112 Просмотр JSON снимка.png|thumb|none|upright=3|Окно просмотра информации о снимке в JSON-формате]]&lt;br /&gt;
:9. Удаление одного снимка:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке снимка крайнем правом столбце.&lt;br /&gt;
::б) В меню выберите пункт '''Удалить'''.&lt;br /&gt;
::в) Подтвердите удаление.&lt;br /&gt;
:10. Удаление нескольких снимков:&lt;br /&gt;
::а) Чтобы выбрать для удаления все снимки, установите флажок в заголовке табличного списка снимков.&lt;br /&gt;
::б) Чтобы выбрать несколько снимков, установите флажки в крайнем правом столбце табличного списка.&lt;br /&gt;
::в) Нажмите кнопку '''Удалить''' в верхней части табличного списка снимков и подтвердите удаление.&lt;br /&gt;
&lt;br /&gt;
== Просмотр детекторов ==&lt;br /&gt;
Чтобы посмотреть список всех детекторов, перейдите в раздел '''Детекторы''':&lt;br /&gt;
 &lt;br /&gt;
[[File:135 Раздел Детекторы.png|thumb|none|upright=3|Раздел «Детекторы»]]&lt;br /&gt;
&lt;br /&gt;
В разделе отображается список детекторов той версии  Svace, которая указана вверху раздела.&lt;br /&gt;
&lt;br /&gt;
{{Note|type=info|text=''При обновлении списка детекторов и их параметров в Svace изменения попадают в Svacer при выпуске новой версии системы!''}}&lt;br /&gt;
&lt;br /&gt;
В разделе '''Детекторы''' пользователю доступны следующие функции:&lt;br /&gt;
:1. Поиск детектора по его названию, серьезности, надежности и коду дефекта безопасности CWE.&lt;br /&gt;
:2. Сортировка по значениям столбцов (по умолчанию – по названию детектора).&lt;br /&gt;
:3. Переход к просмотру описания дефекта безопасности на сайте [https://cwe.mitre.org cwe.mitre.org] (открывается в отдельном окне) – для этого нажмите на ссылку в столбце '''CWE'''.&lt;br /&gt;
:4. Просмотр дополнительной информации о детекторе при её наличии – для этого нажмите на иконку [[File:icon_question_mark2.png|x25px]] справа от названия детектора.&lt;br /&gt;
 &lt;br /&gt;
:[[File:121_Окно с дополнительной информацией о детекторе.png|thumb|none|upright=2|Раздел «Детекторы». Пример окна с дополнительной информацией о детекторе]]&lt;br /&gt;
&lt;br /&gt;
:5. Фильтрация списка – для этого:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button Фильтр.png|x25px]].&lt;br /&gt;
::б) В открывшемся окне '''Фильтр''' настройте параметры фильтрации – выберите значения в списках полей или нажмите кнопки со значениями.&lt;br /&gt;
::в) Нажмите кнопку [[File:button_Очистить.png|x25px]], чтобы очистить все параметры фильтрации.&lt;br /&gt;
::г) Нажмите кнопку [[File:button_Применить.png|x25px]], чтобы применить фильтр.&lt;br /&gt;
 &lt;br /&gt;
:[[File:137 Детекторы.Фильтр.png|thumb|none|upright=2|Раздел «детекторы». Окно «Фильтр»]]&lt;br /&gt;
&lt;br /&gt;
:6. Отмена примененных фильтров – для этого нажмите кнопку [[File:Button Фильтр отмена.png|x25px]].&lt;br /&gt;
:7. Выбор отображаемых столбцов – для этого нажмите на кнопку '''Столбцы''' и в открывшемся списке установите или снимите флажки рядом с названиями столбцов.&lt;br /&gt;
:Для настройки скрытия или показа доступны все столбцы, кроме '''Детектор'''. Столбцы '''Статус''' и '''Инструменты''' по умолчанию скрыты.&lt;br /&gt;
:Пользовательская настройка отображения столбцов сохраняется и не сбрасывается при повторном входе пользователя в систему.&lt;br /&gt;
&lt;br /&gt;
:[[File:138 Детекторы выбор столбцов.png|thumb|none|upright=1.5|Раздел «Детекторы». Выбор отображаемых столбцов]]&lt;br /&gt;
&lt;br /&gt;
:8. Экспорт списка детекторов в файл формата PDF – нажмите кнопку '''Экспорт в PDF'''.&lt;br /&gt;
:Файл содержит информацию обо всех детекторах, найденных с помощью строки поиска и фильтров. Настройка отображения столбцов не влияет на выгрузку – файл содержит информацию всех столбцов.&lt;br /&gt;
&lt;br /&gt;
== Просмотр статистики ==&lt;br /&gt;
В разделе '''Статистика''' пользователь может посмотреть статистические данные о разметке по всем проектам, веткам и снимкам, доступным пользователю. Все статистические данные разделены на три группы и отображаются в отдельных дашбордах:&lt;br /&gt;
* [[Help:UI manual#Работа с дашбордом «Общая статистика»|'''Общая статистика''']] – показатели по последним импортированным снимкам в ветках проектов;&lt;br /&gt;
* [[Help:UI manual#Работа с дашбордом «Распределение маркеров»|'''Распределение маркеров''']] – диаграммы с информацией о количестве маркеров и их распределении по серьезности, статусу разметки и языкам;&lt;br /&gt;
* [[Help:UI manual#Работа с дашбордом «Активность по разметке»|'''Активность по разметке''']] – информация об активности пользователей при разметке маркеров.&lt;br /&gt;
&lt;br /&gt;
[[File:162 Раздел Статистика. Начальное состояние.png|thumb|none|upright=3|Раздел '''Статистика'''. Начальное состояние]]&lt;br /&gt;
Чтобы посмотреть информацию:&lt;br /&gt;
:1. Выберите дашборд – нажмите кнопку с его названием в верхней части экрана.&lt;br /&gt;
:2. Выберите [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|контекст]] (опционально). В дашборде '''Общая статистика''' выбор снимка недоступен.&lt;br /&gt;
:2. Нажмите кнопку [[File:Button Play.png|x25px]].&lt;br /&gt;
:Если контекст не был выбран, отобразится статистика по всем проектам, веткам и снимкам, доступным пользователю. При этом информация об их количестве отображается в верхней части каждого дашборда.&lt;br /&gt;
:[[File:163 Раздел Статистика. Контекст не выбран.png|thumb|none|upright=2.5|Раздел '''Статистика'''. Пример дашборда '''Общая статистика'''. Контекст не выбран]]&lt;br /&gt;
:Если контекст был выбран, то отобразится статистика только для выбранных проектов, веток и снимков (кроме '''Общая статистика'''). При этом информация об их количестве отображается в верхней части каждого дашборда.&lt;br /&gt;
:[[File:164 Раздел Статистика. Контекст выбран.png|thumb|none|upright=2.5|Раздел '''Статистика'''. Пример дашборда '''Общая статистика'''. Контекст выбран]]&lt;br /&gt;
&lt;br /&gt;
=== Работа с дашбордом «Общая статистика» ===&lt;br /&gt;
На дашборде '''Общая статистика''' отображается информация о разметке маркеров в последних импортированных снимках в разрезе проектов и веток. Информация представлена в виде блоков со следующими данными:&lt;br /&gt;
* общая информация:&lt;br /&gt;
** названия проекта и ветки;&lt;br /&gt;
** количество снимков в ветке и дата последнего импорта;&lt;br /&gt;
** дата последней разметки маркеров;&lt;br /&gt;
* показатели последнего импортированного снимка:&lt;br /&gt;
** количество строк кода;&lt;br /&gt;
** количество маркеров;&lt;br /&gt;
** плотность маркеров – процентное отношение количества маркеров на тысячу строк кода;&lt;br /&gt;
** процент и количество размеченных маркеров;&lt;br /&gt;
** процент и количество подтвержденных маркеров – со статусом Confirmed;&lt;br /&gt;
** процент и количество критичных маркеров – с серьезностью детектора Critical.&lt;br /&gt;
:[[File:204 Статистика. Общая статистика.png|thumb|none|upright=2.5|Раздел '''Статистика'''. Дашборд '''Общая статистика''']]&lt;br /&gt;
Пользователю доступны следующие функции:&lt;br /&gt;
:1. Поиск информации по названиям проектов и веток.&lt;br /&gt;
:2. Сортировка данных – для этого в поле справа выберите показатель, по которому требуется сортировать информацию:&lt;br /&gt;
:* по датам последних разметки и импорта;&lt;br /&gt;
:* по показателям последнего импортированного снимка.&lt;br /&gt;
:Для изменения порядка сортировки используйте кнопки [[File:Button Sort.png|x25px]] и [[File:Button Sort UP.png|x25px]].&lt;br /&gt;
:3. Переход к последнему импортированному снимку в режиме разметки – нажмите на названия проекта и ветки в блоке.&lt;br /&gt;
&lt;br /&gt;
=== Работа с дашбордом «Распределение маркеров» ===&lt;br /&gt;
На дашборде '''Распределение маркеров''' отображаются три диаграммы:&lt;br /&gt;
* Количество маркеров по серьезности;&lt;br /&gt;
* Количество маркеров по статусу разметки;&lt;br /&gt;
* Распределение маркеров по языкам.&lt;br /&gt;
[[File:165 Раздел Статистика. Информация о выбранном контексте.png|thumb|none|upright=2.5|Раздел '''Статистика'''. Дашборд '''Распределение маркеров''']]&lt;br /&gt;
Пользователю доступны следующие функции:&lt;br /&gt;
:1. Просмотр значения диаграммы – для этого наведите курсор на любой графический элемент любой диаграммы.&lt;br /&gt;
:2. Выгрузка данных диаграммы в файл формата .csv – для этого нажмите кнопку [[File:Button Download.png|x25px]] в любой диаграмме.&lt;br /&gt;
&lt;br /&gt;
=== Работа с дашбордом «Активность по разметке» ===&lt;br /&gt;
На дашборде Активность по разметке отображается информация о действиях пользователей [[Help:UI manual#Работа в режиме разметки|по разметке маркеров]], которая может быть представлена в двух видах:&lt;br /&gt;
* диаграмма '''Активность по разметке''' – отражает активность пользователей по разметке маркеров за выбранный месяц (по умолчанию – текущий месяц). Цвет ячеек на диаграмме отражает количество действий пользователя, выполненных в указанную дату: чем темнее цвет, тем больше действий выполнил пользователь. Эта диаграмма отображается по умолчанию; если вид был переключен, то для возврата к этой диаграмме нажмите кнопку [[File:Button ChangeDiagram1.png|x25px]];&lt;br /&gt;
* диаграмма '''Лидеры по разметке''' – отражает количество действий пользователей при разметке за выбранный период (по умолчанию – период соответствует месяцу, указанному на диаграмме '''Активность по разметке''') с сортировкой по лидерам. Цвет строк на диаграмме отражает количество действий пользователя: чем темнее цвет, тем больше действий выполнил пользователь. Диаграмма отображается по нажатии кнопки [[File:Button ChangeDiagram2.png|x25px]];&lt;br /&gt;
[[File:166 Раздел Статистика. Активность по разметке.png|thumb|none|upright=3|Раздел '''Статистика'''. Дашборд '''Активность по разметке'''. Вид 1: диаграмма '''Активность по разметке''']]&lt;br /&gt;
[[File:167 Раздел Статистика. Лидеры по разметке.png|thumb|none|upright=3|Раздел '''Статистика'''. Дашборд '''Активность по разметке'''. Вид 2: диаграмма '''Лидеры по разметке''']]&lt;br /&gt;
Пользователю доступны следующие функции:&lt;br /&gt;
:1. Просмотр значения диаграммы – для этого наведите курсор на любой графический элемент любой диаграммы.&lt;br /&gt;
:2. Выгрузка данных диаграммы в файл формата .csv – для этого нажмите кнопку [[File:Button Download.png|x25px]] в любой диаграмме&lt;br /&gt;
:3. &amp;lt;span id=&amp;quot;diagrams_details&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;В диаграмме '''Активность по разметке''':&lt;br /&gt;
::а) Поиск конкретного пользователя  – для этого введите фрагмент его логина в поле поиска.&lt;br /&gt;
::б) Просмотр статистики за любой другой месяц – для этого выберите год и месяц в раскрывающихся списках вверху диаграммы.&lt;br /&gt;
::в) Просмотр активности конкретного пользователя за выбранный месяц – для этого нажмите на его логин.&lt;br /&gt;
::Ниже диаграммы '''Активность по разметке''' отобразится список действий по разметке выбранного пользователя. Измененная (неактуальная) разметка отмечена иконкой [[File:Icon archive.png|x25px]].&lt;br /&gt;
::[[File:168 Раздел Статистика. Активность по разметке. Выбранный пользователь.png|thumb|none|upright=3|Раздел '''Статистика'''. Дашборд '''Активность по разметке'''. Диаграмма '''Активность по разметке''' и список действий по разметке выбранного пользователя]]&lt;br /&gt;
::г) Просмотр активности пользователей в конкретный день месяца – для этого нажмите на число.&lt;br /&gt;
::Ниже диаграммы '''Активность по разметке''' отобразится список действий по разметке пользователей за выбранную дату.&lt;br /&gt;
::[[File:169 Раздел Статистика. Активность по разметке. Пользователи за дату.png|thumb|none|upright=3|Раздел '''Статистика'''. Дашборд '''Активность по разметке'''. Диаграмма '''Активность по разметке''' и список действий по разметке пользователей за выбранную дату]]&lt;br /&gt;
::д) Просмотр активности конкретного пользователя в конкретный день месяца – для этого нажмите ячейку таблицы на пересечении строки с логином пользователя и столбца с числом.&lt;br /&gt;
::Ниже диаграммы '''Активность по разметке''' отобразится список действий по разметке выбранного пользователя за выбранную дату.&lt;br /&gt;
::[[File:170 Раздел Статистика. Активность по разметке. Одни пользователь за дату.png|thumb|none|upright=3|Раздел '''Статистика'''. Дашборд '''Активность по разметке'''. Диаграмма '''Активность по разметке''' и список действий по разметке выбранного пользователя за выбранную дату]]&lt;br /&gt;
::е) Включение и выключение отображения информации о неактуальной (измененной) разметке в списке действий пользователя – для этого воспользуйтесь переключателем '''Исключить активность по неактуальной разметке'''.&lt;br /&gt;
::ж) Просмотр маркера в [[Help:UI manual#Работа в режиме разметки|режиме разметки]] – для этого в списке действий нажмите на ссылку с именем файла и номером строки.&lt;br /&gt;
::з) Просмотр информации о маркере – для этого в списке действий нажмите кнопку [[File:Button show.png|x25px]] слева от названия маркера.&lt;br /&gt;
::В правой части экрана отобразится панель с информацией о маркере.&lt;br /&gt;
::[[File:205 Статистика. Активность по разметке. Панель с информацией о маркере.png|thumb|none|upright=3|Панель с информацией о маркере]]&lt;br /&gt;
:4. В диаграмме '''Лидеры по разметке''':&lt;br /&gt;
::а) Поиск конкретного пользователя – для этого введите фрагмент его логина в поле поиска.&lt;br /&gt;
::б) Просмотр статистики за любой другой период времени, кроме текущего месяца – для этого кликните на поле даты вверху диаграммы и вручную введите даты, либо в раскрывшемся календаре выберите диапазон дат: предложенный ('''Сегодня''', '''Вчера''', '''Неделю назад''' и т. п.) или свой.&lt;br /&gt;
::[[File:171 Раздел Статистика. Лидеры по разметке. Выбор дат.png|thumb|none|upright=3|Раздел '''Статистика'''. Дашборд '''Активность по разметке'''. Диаграмма '''Лидеры по разметке'''. Выбор диапазона дат]]&lt;br /&gt;
::в) Просмотр активности конкретного пользователя за указанный период – для этого нажмите на его логин.&lt;br /&gt;
::Ниже диаграммы '''Лидеры по разметке''' отобразится список действий по разметке выбранного пользователя. Измененная (неактуальная) разметка отмечена иконкой [[File:Icon archive.png|x25px]].&lt;br /&gt;
::[[File:172 Раздел Статистика. Лидеры по разметке. Выбранный пользователь.png|thumb|none|upright=3|Раздел '''Статистика'''. Дашборд '''Активность по разметке'''. Диаграмма '''Лидеры по разметке''' и список действий по разметке выбранного пользователя]]&lt;br /&gt;
::г) Включение и выключение отображения в списке действий пользователя по неактуальной (измененной) разметке – для этого воспользуйтесь переключателем '''Исключить активность по неактуальной разметке'''.&lt;br /&gt;
::д) Просмотр маркера в [[Help:UI manual#Работа в режиме разметки|режиме разметки]] – для этого в списке действий нажмите на ссылку с именем файла и номером строки.&lt;br /&gt;
::e) Просмотр информации о маркере – для этого в списке действий нажмите кнопку [[File:Button show.png|x25px]] слева от названия маркера.&lt;br /&gt;
::В правой части экрана отобразится панель с информацией о маркере.&lt;br /&gt;
&lt;br /&gt;
== Глобальный поиск ==&lt;br /&gt;
Глобальный поиск позволяет одновременно по всем доступным пользователю проектам и веткам выполнить поиск в следующих категориях:&lt;br /&gt;
* Маркеры;&lt;br /&gt;
* Комментарии к маркерам;&lt;br /&gt;
* Снимки.&lt;br /&gt;
&lt;br /&gt;
Чтобы воспользоваться глобальным поиском, перейдите в раздел '''Поиск'''.&lt;br /&gt;
[[File:173 Раздел Поиск. Начальное состояние.png|thumb|none|upright=3|Раздел '''Поиск'''. Начальное состояние]]&lt;br /&gt;
&lt;br /&gt;
Для каждой категории реализованы два независимых способа поиска в виде вкладок:&lt;br /&gt;
* '''Базовый поиск''' – единый поисковый запрос по всем атрибутам категории одновременно, с указанием контекста;&lt;br /&gt;
* '''Поиск по полям''' – позволяет задать значения поиска по каждому атрибуту категории в отдельности и указать контекст.&lt;br /&gt;
&lt;br /&gt;
=== Поиск маркеров ===&lt;br /&gt;
Чтобы воспользоваться поиском маркеров:&lt;br /&gt;
:1. Выберите категорию '''Маркеры''' раздела '''Поиск''' (выбран по умолчанию).&lt;br /&gt;
:2. Для базового поиска:&lt;br /&gt;
::а) Перейдите на вкладку '''Базовый поиск''' (открыта по умолчанию).&lt;br /&gt;
::[[File:174 Раздел Поиск. Категория Маркеры. Базовый поиск.png|thumb|none|upright=3|Раздел '''Поиск'''. Категория '''Маркеры'''. Базовый поиск]]&lt;br /&gt;
::б) Введите фрагмент названия маркера, детектора, функции или файла.&lt;br /&gt;
::в) Выберите (опционально) группу проектов, проект, ветку и снимок, в которых нужно найти маркеры. &lt;br /&gt;
::По умолчанию выбраны все группы, проекты, ветки и снимки.&lt;br /&gt;
::г) Нажмите кнопку '''Поиск'''.&lt;br /&gt;
:Отобразятся результаты поиска.&lt;br /&gt;
:[[File:175 Раздел Поиск. Пример результатов поиска в категории Маркеры.png|thumb|none|upright=3|Раздел '''Поиск'''. Пример результатов поиска в категории '''Маркеры''']]&lt;br /&gt;
:3. Для поиска по полям:&lt;br /&gt;
::а) Перейдите на вкладку '''Поиск по полям'''.&lt;br /&gt;
::[[File:176 Раздел Поиск. Категория Маркеры. Поиск по полям.png|thumb|none|upright=3|Раздел '''Поиск'''. Категория '''Маркеры'''. Поиск по полям]]&lt;br /&gt;
::б) Заполните поля поиска.&lt;br /&gt;
::в) Выберите (опционально) группу проектов, проект, ветку и снимок, в которых нужно найти маркеры. &lt;br /&gt;
::По умолчанию выбраны все группы, проекты, ветки и снимки.&lt;br /&gt;
::г) Нажмите кнопку '''Поиск'''.&lt;br /&gt;
:Отобразятся результаты поиска.&lt;br /&gt;
:[[File:177 Раздел Поиск. Пример результатов поиска по полям в категории Маркеры.png|thumb|none|upright=3|Раздел '''Поиск'''. Пример результатов поиска по полям в категории '''Маркеры''']]&lt;br /&gt;
:4. Для очистки значений в полях поиска нажмите кнопку '''Очистить'''.&lt;br /&gt;
:5. Чтобы перейти к найденному файлу с маркером в [[Help:UI manual#Работа в режиме разметки|режиме разметки]], в результатах поиска кликните на ссылку в имени файла с номером строки исходного кода.&lt;br /&gt;
:6. Чтобы посмотреть подробную информацию о найденном маркере, в результатах поиска нажмите кнопку [[File:Button show.png|x25px]].&lt;br /&gt;
Отобразится правая панель с открытой вкладкой '''Подробности'''.&lt;br /&gt;
:[[File:341 Раздел Поиск. Подробная информация о маркере.png|thumb|none|upright=3|Раздел '''Поиск'''. Пример просмотра подробной информации о найденном маркере]]&lt;br /&gt;
&lt;br /&gt;
=== Поиск комментариев к маркерам ===&lt;br /&gt;
Чтобы воспользоваться поиском по комментариям к маркерам:&lt;br /&gt;
:1. Выберите категорию '''Комментарии к маркерам''' раздела '''Поиск'''.&lt;br /&gt;
:2. Для базового поиска:&lt;br /&gt;
::а) Перейдите на вкладку '''Базовый поиск''' (открыта по умолчанию).&lt;br /&gt;
::[[File:178 Раздел Поиск. Категория Комментарии к маркерам. Базовый поиск.png|thumb|none|upright=3|Раздел '''Поиск'''. Категория '''Комментарии к маркерам'''. Базовый поиск]]&lt;br /&gt;
::б) Введите фрагмент комментария или логина его автора.&lt;br /&gt;
::в) Выберите (опционально) группу проектов, проект, ветку и снимок, в которых нужно найти комментарии. &lt;br /&gt;
::По умолчанию выбраны все группы, проекты, ветки и снимки.&lt;br /&gt;
::г) Нажмите кнопку '''Поиск'''.&lt;br /&gt;
:Отобразятся результаты поиска.&lt;br /&gt;
:[[File:179 Раздел Поиск. Пример результатов поиска в категории Комментарии к маркерам.png|thumb|none|upright=3|Раздел '''Поиск'''. Пример результатов поиска в категории '''Комментарии к маркерам''']]&lt;br /&gt;
:3. Для поиска по полям:&lt;br /&gt;
::а) Перейдите на вкладку '''Поиск по полям'''.&lt;br /&gt;
::[[File:180 Раздел Поиск. Категория Комментарии к маркерам. Поиск по полям.png|thumb|none|upright=3|Раздел '''Поиск'''. Категория '''Комментарии к маркерам'''. Поиск по полям]]&lt;br /&gt;
::б) Заполните поля поиска.&lt;br /&gt;
::в) Выберите (опционально) группу проектов, проект, ветку и снимок, в которых нужно найти комментарии. &lt;br /&gt;
::По умолчанию выбраны все группы, проекты, ветки и снимки.&lt;br /&gt;
::г) Нажмите кнопку '''Поиск'''.&lt;br /&gt;
:Отобразятся результаты поиска.&lt;br /&gt;
:[[File:181 Раздел Поиск. Пример результатов поиска по полям в категории Комментарии к маркерам.png|thumb|none|upright=3|Раздел '''Поиск'''. Пример результатов поиска по полям в категории '''Комментарии к маркерам''']]&lt;br /&gt;
:4. Для очистки поискового запроса нажмите кнопку '''Очистить'''.&lt;br /&gt;
:5. Чтобы перейти в [[Help:UI manual#Работа в режиме разметки|режим разметки]] к файлу маркера с найденным комментарием, в результатах поиска кликните на ссылку в имени файла с номером строки исходного кода.&lt;br /&gt;
:6. Чтобы посмотреть подробную информацию о маркере с найденным комментарием, в результатах поиска нажмите кнопку [[File:Button show.png|x25px]]. Отобразится правая панель с открытой вкладкой '''Комментарии'''.&lt;br /&gt;
&lt;br /&gt;
=== Поиск снимков ===&lt;br /&gt;
Чтобы воспользоваться поиском по снимкам:&lt;br /&gt;
:1. Выберите категорию '''Снимки''' раздела '''Поиск'''.&lt;br /&gt;
:2. Для базового поиска:&lt;br /&gt;
::а) Перейдите на вкладку '''Базовый поиск''' (открыта по умолчанию).&lt;br /&gt;
::[[File:182 Раздел Поиск. Категория Снимки. Базовый поиск.png|thumb|none|upright=3|Раздел '''Поиск'''. Категория '''Снимки'''. Базовый поиск]]&lt;br /&gt;
::б) Введите фрагмент названия снимка, пользовательского поля снимка (названия или его значения) или логина пользователя, который импортировал снимок.&lt;br /&gt;
::в) Выберите (опционально) группу проектов, проект, ветку и снимок, в которых нужно найти снимки. &lt;br /&gt;
::По умолчанию выбраны все группы, проекты, ветки и снимки.&lt;br /&gt;
::г) Нажмите кнопку '''Поиск'''.&lt;br /&gt;
:Отобразятся результаты поиска.&lt;br /&gt;
:[[File:183 Раздел Поиск. Пример результатов поиска в категории Снимки.png|thumb|none|upright=3|Раздел '''Поиск'''. Пример результатов поиска в категории '''Снимки''']]&lt;br /&gt;
&lt;br /&gt;
:3. Для поиска по полям:&lt;br /&gt;
::а) Перейдите на вкладку '''Поиск по полям'''.&lt;br /&gt;
::[[File:184 Раздел Поиск. Категория Снимки. Поиск по полям.png|thumb|none|upright=3|Раздел '''Поиск'''. Категория '''Снимки'''. Поиск по полям]]&lt;br /&gt;
::б) Заполните поля поиска.&lt;br /&gt;
::в) Выберите (опционально) группу проектов, проект, ветку и снимок, в которых нужно найти снимки. &lt;br /&gt;
::По умолчанию выбраны все группы, проекты, ветки и снимки.&lt;br /&gt;
::г) Нажмите кнопку '''Поиск'''.&lt;br /&gt;
:Отобразятся результаты поиска.&lt;br /&gt;
:[[File:185 Раздел Поиск. Пример результатов поиска по полям в категории Снимки.png|thumb|none|upright=3|Раздел '''Поиск'''. Пример результатов поиска по полям в категории '''Снимки''']]&lt;br /&gt;
:4. Для очистки поискового запроса нажмите кнопку '''Очистить'''.&lt;br /&gt;
:5. Чтобы посмотреть подробную информацию о найденном снимке, в результатах поиска кликните на ссылку в пути размещения снимка.&lt;br /&gt;
:Найденный снимок откроется в [[Help:UI manual#Работа в режиме разметки|режиме разметки]] со всеми его маркерами.&lt;br /&gt;
&lt;br /&gt;
=== Просмотр истории поиска ===&lt;br /&gt;
Чтобы посмотреть историю поиска, нажмите кнопку '''История поиска''' в разделе '''Поиск'''.&lt;br /&gt;
&lt;br /&gt;
В истории отображаются 100 последних поисковых запросов пользователя.&lt;br /&gt;
[[File:186 Раздел Поиск. Пример истории поиска.png|thumb|none|upright=3|Раздел '''Поиск'''. Пример истории поиска]]&lt;br /&gt;
&lt;br /&gt;
Чтобы повторить поиск из истории, кликните на ссылку с поисковым запросом.&lt;br /&gt;
&lt;br /&gt;
== Настройка сервера Svacer ==&lt;br /&gt;
Перейти в раздел '''Настройки''' можно по нажатии кнопки [[File:Icon settings.png|x25px]] в верхней правой части экрана.&lt;br /&gt;
&lt;br /&gt;
В этом разделе пользователю, в зависимости от роли, доступны следующие функции:&lt;br /&gt;
* [[Help:UI manual#Управление пользователями, ролями и организациями|управление пользователями, ролями и организациями]];&lt;br /&gt;
* [[Help:UI manual#Настройка глобальных фильтров|настройка глобальных фильтров]];&lt;br /&gt;
* [[Help:UI manual#Управление блокировками разметки|управление блокировками]];&lt;br /&gt;
* [[Help:UI manual#Ведение журнала операций|ведение журнала операций]];&lt;br /&gt;
* [[Help:UI manual#Управление шаблонами разметки|управление шаблонами разметки]];&lt;br /&gt;
* [[Help:UI manual#Управление токенами доступа|управление токенами доступа]];&lt;br /&gt;
* [[Help:UI manual#Управление асинхронными задачами|управление асинхронными задачами]];&lt;br /&gt;
* [[Help:UI manual#Просмотр информации о сервере|просмотр информации о сервере]];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Управление пользователями, ролями и организациями===&lt;br /&gt;
==== Управление пользователями ====&lt;br /&gt;
Реестром учетных записей пользователей можно управлять на вкладке '''Пользователи''' в разделе '''Управление пользователями''' страницы '''Настройки'''.&amp;lt;br&amp;gt;&lt;br /&gt;
Для [[LDAP configuration|учетных записей с доступом по LDAP]] рядом с логином отображается индикатор [[File:Icon LDAP.png|x25px]], для учетных записей с доступом по OIDC рядом с логином отображается индикатор [[File:Icon_OIDC.png|x25px]], а для учетных записей с признаком '''Мастер разметки''' – индикатор [[File:Icon markup master.png|x25px]].&amp;lt;br&amp;gt;&lt;br /&gt;
В разделе доступны:&lt;br /&gt;
* поиск по атрибутам учётной записи пользователя;&lt;br /&gt;
* фильтрация списка по типам учётных записей:&lt;br /&gt;
:* все;&lt;br /&gt;
:* системные;&lt;br /&gt;
:* LDAP;&lt;br /&gt;
:* OIDC;&lt;br /&gt;
:* заблокированные;&lt;br /&gt;
:* активные;&lt;br /&gt;
:* по ролям;&lt;br /&gt;
:* по организациям.&lt;br /&gt;
* сортировка по колонкам '''Логин''', '''ФИО''' и '''Дата создания''' (по умолчанию).&lt;br /&gt;
:[[File:74 Вкладка Пользователи на странице Настройки.png|thumb|none|upright=3|Вкладка '''Пользователи''' в разделе '''Управление пользователями''' страницы '''Настройки''']]&lt;br /&gt;
Для управления пользователями:&lt;br /&gt;
:1. Создайте учетную запись пользователя:&lt;br /&gt;
::а) Нажмите кнопку '''Создать'''.&lt;br /&gt;
::Откроется окно добавления учетной записи пользователя.&lt;br /&gt;
::[[File:76 Окно Добавить пользователя.png|thumb|none|upright=1.5|Окно '''Создать пользователя''']]&lt;br /&gt;
::б) Заполните поля:&lt;br /&gt;
::* Логин;&lt;br /&gt;
::* Пароль;&lt;br /&gt;
::* e-mail;&lt;br /&gt;
::* ФИО.&lt;br /&gt;
::в) Выберите [[Help:UI manual#Управление организациями|организации]], в которые должен входить пользователь, а также назначьте ему [[Help:UI manual#Управление ролями|роли]] – выберите значения в раскрывающихся списках полей '''Организации''' и '''Роли''' соответственно. Для отмены выбора нажмите на кнопку [[File:Icon cancel.png|x25px]] справа от значения.&lt;br /&gt;
::г) Включите опции '''Изменить пароль при первом входе в систему''' и '''Мастер разметки'''.&amp;lt;br&amp;gt;&lt;br /&gt;
::{{Note|type=info|text=''Если для учётной записи активирована опция '''Мастер разметки''', есть разрешение на разметку и этот пользователь разметил маркер в каком-либо снимке, то изменить его разметку может только пользователь, в учётной записи которого также активирована опция '''Мастер разметки''' или которому предоставлен [[#Cерверные доступы|серверный доступ]] '''Изменение любой разметки'''.''}}&lt;br /&gt;
::д) Нажмите кнопку '''Создать'''.&lt;br /&gt;
: В таблице со списком пользователей добавится новая запись.&lt;br /&gt;
&lt;br /&gt;
:2. Воспользуйтесь функциями в строке учетной записи в крайнем правом столбце – нажмите кнопку [[File:Button menu.png|x25px]] и выберите пункт:&lt;br /&gt;
:* '''Редактировать''' – для перехода к редактированию данных профиля;&lt;br /&gt;
:* '''Изменить пароль''' – для перехода к изменению пароля;&lt;br /&gt;
:* '''Сбросить настройки пользователя''' – для возврата пользовательских настроек к их значениям по умолчанию;&lt;br /&gt;
:* '''Заблокировать''' – для блокировки учетной записи. В этом случае для учетной записи пользователя блокируется доступ к системе, а в списке рядом с логином учетной записи отображается индикатор [[File:Icon_Archived.png|x25px]];&lt;br /&gt;
:* '''Разблокировать''' – для восстановления доступа пользователя к системе;&lt;br /&gt;
:* '''Настройки уведомлений''' – для настройки уведомлений пользователя об операциях со снимками и маркерами – аналогично [[Help:UI manual#Настройка уведомлений|настройке уведомлений в меню пользователя]];&lt;br /&gt;
::[[File:219 Настройки Настройка уведомлений выбранного пользователя.png|thumb|none|upright=2|Настройки уведомлений выбранного пользователя]]&lt;br /&gt;
:* '''Удалить''' – для удаления учётной записи пользователя;&lt;br /&gt;
:* '''Показать доступы пользователя''' – для отображения списка объединенных доступов всех ролей, назначенных пользователю.&lt;br /&gt;
::[[File:113 Список доступов пользователя.png|thumb|none|upright=3|Список доступов пользователя]]&lt;br /&gt;
::{{Note|type=warn|text=''Функции блокировки и удаления недоступны для системных учетных записей. При изменении логина или списка доступов у авторизованного пользователя, он будет перенаправлен на страницу авторизации.''}}&lt;br /&gt;
&lt;br /&gt;
:3. Воспользуйтесь функциями управления несколькими учётными записями одновременно:&lt;br /&gt;
::а) Чтобы выбрать несколько записей, установите флажки в первом столбце списка пользователей.&lt;br /&gt;
::б) Чтобы выбрать все отображаемые учётные записи, установите один флажок в заголовке столбцов в первом столбце списка.&lt;br /&gt;
::в) Нажмите кнопку '''Действия''' в верхней части списка пользователей и выберите пункт: '''Сбросить настройки пользователя''', '''Заблокировать''', '''Разблокировать''' или '''Удалить'''. В списке активны только действия, доступные всем выбранным учетным записям.&lt;br /&gt;
:4. Для [[LDAP configuration|учетной записи с доступом по LDAP]] обновите данные – в окне редактирования данных профиля пользователя нажмите кнопку '''Загрузить из LDAP'''.&lt;br /&gt;
:Загрузятся параметры профиля пользователя и его контакты из профиля в службе каталогов, если они там указаны.&lt;br /&gt;
:[[File:78 Загрузка данных из LDAP.png|thumb|none|upright=1.5|Загрузка данных из LDAP]]&lt;br /&gt;
&lt;br /&gt;
==== Управление ролями ====&lt;br /&gt;
Реестром ролей можно управлять на вкладке '''Роли''' в разделе '''Управление пользователями''' страницы '''Настройки'''.&lt;br /&gt;
[[File:79 Переход к управлению ролями.png|thumb|none|upright=3|Вкладка '''Роли''' в разделе '''Управление пользователями''' страницы '''Настройки''']]&lt;br /&gt;
{{Note|type=info|text=''Роли [[Help:UI manual#Описание ролевой модели|admin, filter_master и importer]] являются встроенными с особым значением. Их нельзя удалить или изменить.''}}&lt;br /&gt;
&lt;br /&gt;
Доступен поиск по названию роли и сортировка по колонкам '''Название''' (по умолчанию) и '''Пользователи'''. &amp;lt;br&amp;gt;&lt;br /&gt;
Для управления ролями доступны следующие функции:&lt;br /&gt;
:1. Создание новой роли:&lt;br /&gt;
::а) Нажмите кнопку '''Создать'''.&lt;br /&gt;
::[[File:81 Окно добавления роли.png|thumb|none|upright=3|Окно добавления роли]]&lt;br /&gt;
::б) Заполните поля появившейся формы:&lt;br /&gt;
:::*введите название роли;&lt;br /&gt;
:::*в блоке '''Серверные доступы''' выберите доступы – нажмите кнопку '''Выбрать всё''' или установите флажки для активации доступов.&lt;br /&gt;
:::При наведении курсора на иконку [[File:Icon question mark2.png|x25px]] отображается пояснение к доступу.&lt;br /&gt;
:::*в блоке '''Проектные доступы''' выберите тип доступа: группа проектов или определённый проект или его ветка;&lt;br /&gt;
:::*если выбран тип '''Группа проектов''', выберите название группы и установите флажки для активации доступов;&lt;br /&gt;
:::*если выбран тип '''Проект / Ветка''', выберите название проекта или ветки проекта, установите флажки для активации доступов.&lt;br /&gt;
:::Если выбрано значение '''Все''', то доступы будут предоставлены для всех проектов;&lt;br /&gt;
:::*для удаления строки с проектными доступами в блоке '''Проектные доступы''' нажмите кнопку [[File:Icon delete.png|x25px]] в крайнем правом столбце.&lt;br /&gt;
::в) Нажмите кнопку '''Создать'''.&lt;br /&gt;
&lt;br /&gt;
:2.	Просмотр доступов роли, нажмите на ссылку '''Показать доступы''' в столбце '''Доступы'''.&lt;br /&gt;
:[[File:114 Список доступов роли.png|thumb|none|upright=3|Список доступов роли]]&lt;br /&gt;
&lt;br /&gt;
:3.	Редактирование роли:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке роли в крайнем правом столбце.&lt;br /&gt;
::б) В меню выберите пункт '''Редактировать''' и внесите изменения.&lt;br /&gt;
&lt;br /&gt;
:4.	Создание копии роли:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке исходной роли в крайнем правом столбце.&lt;br /&gt;
::б) В меню выберите пункт '''Создать копию'''.&lt;br /&gt;
:В реестр ролей добавится новая запись с именем исходной роли и добавленным порядковым номером копии.&lt;br /&gt;
&lt;br /&gt;
:5.	Просмотр информации о роли в JSON-формате:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке исходной роли в крайнем правом столбце.&lt;br /&gt;
::б) В меню выберите пункт '''Просмотреть JSON'''.&lt;br /&gt;
&lt;br /&gt;
:6.	Удаление роли:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке исходной роли в крайнем правом столбце.&lt;br /&gt;
::б) В меню выберите пункт '''Удалить'''.&lt;br /&gt;
::в) Подтвердите удаление.&lt;br /&gt;
&lt;br /&gt;
:7.	Удаление несколько ролей одновременно:&lt;br /&gt;
::а) Для выбора нескольких записей установите флажки в первом столбце списка ролей.&lt;br /&gt;
::б) Чтобы выбрать все записи, установите один флажок в заголовке столбцов в первом столбце списка ролей.&lt;br /&gt;
::в) Нажмите кнопку '''Удалить''' и подтвердите удаление.&lt;br /&gt;
&lt;br /&gt;
==== Управление организациями ====&lt;br /&gt;
Пользователи могут быть связаны с организациями. Один пользователь может принадлежать нескольким организациям. Организации носят информационный характер и не влияют на права пользователей в системе. &amp;lt;br&amp;gt;&lt;br /&gt;
Реестром организаций можно управлять на вкладке '''Организации''' в разделе '''Управление пользователями''' страницы '''Настройки'''. &lt;br /&gt;
[[File:92 Вкладка Организации на странице Настройки.png|thumb|none|upright=3|Вкладка '''Организации''' в разделе '''Управление пользователями''' страницы '''Настройки''']]&lt;br /&gt;
Доступен поиск по названию и сокращенному названию организации и сортировка по колонкам '''Название''' (по умолчанию), '''Сокращенное название''' и '''Пользователи'''. &lt;br /&gt;
Для управления организациями, доступны следующие функции:&lt;br /&gt;
:1.	Создание организации: &lt;br /&gt;
::а) Нажмите кнопку '''Создать'''.&lt;br /&gt;
::б) Заполните поля появившейся формы.&lt;br /&gt;
::в) Нажмите кнопку '''Создать'''.&lt;br /&gt;
::[[File:93 Окно добавления организации в реестр.png|thumb|none|upright=1.5|Окно добавления организации в реестр]]&lt;br /&gt;
&lt;br /&gt;
:2.	Редактирование организации: &lt;br /&gt;
::а) Нажмите кнопку [[File:Icon edit2.png|x25px]] в крайнем правом столбце.&lt;br /&gt;
::б) В появившейся форме отредактируйте данные организации.&lt;br /&gt;
::в) Нажмите кнопку '''Сохранить'''.&lt;br /&gt;
&lt;br /&gt;
:3.	Удаление организации: &lt;br /&gt;
::а) Нажмите кнопку [[File:Icon delete.png|x25px]] в крайнем правом столбце.&lt;br /&gt;
::б) В появившемся диалоге подтвердите удаление, нажав на кнопку '''Удалить'''.&lt;br /&gt;
&lt;br /&gt;
:4.	Удаление несколько организаций одновременно:&lt;br /&gt;
::а) Для выбора нескольких записей установите флажки в первом столбце списка организаций.&lt;br /&gt;
::б) Чтобы выбрать все организации, установите один флажок в заголовке столбцов в первом столбце списка.&lt;br /&gt;
::в) Нажмите кнопку '''Удалить''' и подтвердите удаление.&lt;br /&gt;
&lt;br /&gt;
=== Настройка глобальных фильтров ===&lt;br /&gt;
В разделе '''Глобальные фильтры''' страницы '''Настройки''' можно настроить глобальные фильтры, применительно [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|к выбранным проекту или ветке проекта]]:&amp;lt;br&amp;gt;&lt;br /&gt;
{{Note|type=info|text=''По умолчанию выбран контекст (проект, ветка), заданный ранее в режиме '''Разметка''', или '''Код'''.''}}&lt;br /&gt;
[[File:82 Вкладка Фильтры на странице Настройки.png|thumb|none|upright=4|Раздел '''Глобальные фильтры''' на странице '''Настройки''']]&lt;br /&gt;
&lt;br /&gt;
В разделе доступен поиск по названию фильтра.&lt;br /&gt;
&lt;br /&gt;
Для настройки фильтров:&lt;br /&gt;
:1. Выберите проект и ветку в верхней строке раздела. По умолчанию указаны проект и ветка, выбранные в разделе '''Разметка'''.&lt;br /&gt;
:2. Чтобы добавить фильтр, нажмите кнопку '''Создать'''.&lt;br /&gt;
:Отобразится новая строка:&lt;br /&gt;
:[[File:83 Новая строка с фильтром.png|thumb|none|upright=4|Новая строка с фильтром]]&lt;br /&gt;
&lt;br /&gt;
:3. Чтобы изменить настройки фильтров:&lt;br /&gt;
::а) Введите или поменяйте название фильтра&lt;br /&gt;
::б) Включите или выключите фильтр – нажмите на значение в столбце '''Статус''', чтобы отобразилась иконка [[File:Icon check2.png|x25px]] (по умолчанию) или [[File:Icon cross 01.png|x25px]].&lt;br /&gt;
::в) Выберите область применения фильтра – нажмите на значение в столбце '''Область''' один или два раза, чтобы отобразилось значение '''ветка''' или '''проект'''.&lt;br /&gt;
::г) Введите [[Help:UI manual#Использование регулярных выражений|регулярное выражение]] или загрузите его из файла в столбцах '''Включить пути по шаблону''', '''Исключить пути по шаблону''' и '''Детекторы'''.&lt;br /&gt;
::{{Note|type=info|text=''Шаблоны регулярных выражений не зависят от регистра и поддерживают следующий синтаксис:''&lt;br /&gt;
:* ''; – для разделения списков значений;''&lt;br /&gt;
:* ''* – любое количество символов;''&lt;br /&gt;
:* ''? – один произвольный символ;''&lt;br /&gt;
:* ''re: – включая значения, определяемые регулярным выражением;''&lt;br /&gt;
:* ''re!: – исключая значения, определяемые регулярным выражением (только для столбца '''Детекторы''').''}}&lt;br /&gt;
::д) Выберите уровни серьезности (критичности) и надежности:&lt;br /&gt;
::* [[File:Icon_critical_on.png|x30px]] – уровень выбран;&lt;br /&gt;
::* [[File:Icon_critical_off.png|x30px]] – уровень не выбран.&lt;br /&gt;
::Для изменения выбора нажмите на название уровня.&lt;br /&gt;
:4. Нажмите кнопку [[File:Icon delete.png|x25px]] в крайнем правом столбце, чтобы удалить один фильтр.&lt;br /&gt;
:5. Чтобы удалить несколько фильтров:&lt;br /&gt;
::а) Для выбора нескольких записей установите флажки в первом столбце списка фильтров.&lt;br /&gt;
::б) Чтобы выбрать все записи, установите один флажок в заголовке столбцов в первом столбце списка фильтров.&lt;br /&gt;
::в) Нажмите кнопку '''Удалить'''.&lt;br /&gt;
:6.	Для сохранения и применения изменений нажмите кнопку '''Применить'''.&lt;br /&gt;
Если не применить изменения, то при переходе в другой раздел системы отобразится сообщение о том, что изменения не применены:&lt;br /&gt;
:[[File:115 Запрос на изменение глобальных фильтров.png|thumb|none|upright=1.5]]&lt;br /&gt;
&lt;br /&gt;
:{{Note|type=warn|text=''После применения глобальных фильтров пользователям, у которых в режиме разметки открыт данный контекст, требуется перезагрузить страницу (нажать клавишу F5) для обновления списка маркеров.''}}&lt;br /&gt;
&lt;br /&gt;
=== Управление блокировками разметки ===&lt;br /&gt;
Чтобы посмотреть список всех [[Help:UI manual#Блокировка разметки|блокировок]], перейдите на вкладку '''Блокировки''' страницы '''Настройки''':&lt;br /&gt;
[[File:61 Просмотр всех блокировок.png|800px|thumb|none|Раздел '''Блокировки''' страницы '''Настройки''']]&lt;br /&gt;
{{Note|type=info|text=''Пользователю отображается  список блокировок в контейнерах, к которым у него есть доступ. Удаление не своих блокировок доступно пользователям с соответствующим доступом.''}}&lt;br /&gt;
&lt;br /&gt;
Доступен поиск по контейнерам, заблокированным сущностям и пользователям, сортировка по всем колонкам (по умолчанию – сортировка по дате).&lt;br /&gt;
&lt;br /&gt;
Для удаления одной блокировки:&lt;br /&gt;
:1.	Нажмите кнопку [[File:Icon delete.png|x25px]] в строке проекта в крайнем правом столбце.&lt;br /&gt;
:2.	Подтвердите удаление.&lt;br /&gt;
Для удаления нескольких блокировок:&lt;br /&gt;
:1.	Чтобы выбрать для удаления все блокировки, установите флажок в заголовке табличного списка.&lt;br /&gt;
:2.	Чтобы выбрать несколько блокировок, установите флажки в крайнем правом столбце табличного списка.&lt;br /&gt;
:3.	Нажмите кнопку '''Удалить''' в верхней части списка.&lt;br /&gt;
&lt;br /&gt;
=== Ведение журнала операций ===&lt;br /&gt;
В разделе '''Журнал операций''' страницы '''Настройки''' доступны просмотр и откат выполнения групповых операций по разметке и комментированию маркеров, таких как импорт разметки, копирование разметки, импорт снимков и т. п.&lt;br /&gt;
[[File:206 Настройки. Журнал операций.png|800px|thumb|none|Раздел '''Журнал операций''' на странице '''Настройки''']]&lt;br /&gt;
В разделе доступны:&lt;br /&gt;
* поиск по названию контейнера, типу операции и её описанию;&lt;br /&gt;
* фильтрация списка:&lt;br /&gt;
** по статусу операции: '''Applied''', '''Reverted''', '''Invalid''';&lt;br /&gt;
** типу операции;&lt;br /&gt;
** генератору операции;&lt;br /&gt;
** автору операции;&lt;br /&gt;
** диапазону дат создания операции;&lt;br /&gt;
* сортировка по всем колонкам, кроме '''Описание'''.&lt;br /&gt;
&lt;br /&gt;
Чтобы откатить выполнение операции, нажмите кнопку [[File:Icon return.png|x25px]] в строке и подтвердите действие в открывшемся окне.&lt;br /&gt;
{{Note|type=warn|text=''Откат своих операций доступен пользователям с [[#Проектные доступы|проектными доступами]] '''Разметка маркеров''' и '''Импорт разметки'''.&amp;lt;br&amp;gt;Откат операций других пользователей доступен пользователям с [[#Проектные доступы|проектным доступом]] '''Разметка маркеров''' и [[#Серверные доступы|серверным доступом]] '''Администрирование сервера''' или серверным доступами '''Изменение любой разметки''' и '''Изменение любых комментариев'''.''}}&lt;br /&gt;
&lt;br /&gt;
=== Управление шаблонами разметки ===&lt;br /&gt;
Управление шаблонами разметки доступно в разделе '''Шаблоны разметки''' страницы '''Настройки''':&lt;br /&gt;
[[File:84 Вкладка Шаблоны на странице Настройки.png|thumb|none|upright=3|Раздел '''Шаблоны разметки''' на странице '''Настройки''']]&lt;br /&gt;
&lt;br /&gt;
Шаблоны разметки нужны для [[Help:UI manual#Импорт разметки|импорта]]/[[Help:UI manual#Экспорт разметки|экспорта разметки]]. С их помощью комментарии в исходном коде будут преобразовываться в разметку на сервере истории и обратно.&lt;br /&gt;
&lt;br /&gt;
Шаблон с именем DEFAULT есть всегда, его нельзя отредактировать или удалить.&lt;br /&gt;
&lt;br /&gt;
{{Note|type=info|text=''Для корректного создания или изменения шаблонов разметки следует обратиться к разработчикам Svacer.''}}&lt;br /&gt;
&lt;br /&gt;
Для управления шаблонами:&lt;br /&gt;
:1. Нажмите кнопку '''Создать'''.&lt;br /&gt;
:Откроется окно создания шаблона.&lt;br /&gt;
:[[File:Добавление шаблона разметки.png|thumb|none|upright=1.5|Окно создания шаблона разметки]]&lt;br /&gt;
:2. Введите название шаблона.&lt;br /&gt;
:3. Нажмите кнопку '''Создать'''.&lt;br /&gt;
:Шаблон появится в списке шаблонов для разметки в правой панели формы&lt;br /&gt;
:4. Отредактируйте поля шаблона разметки:&lt;br /&gt;
:[[File:85 Поля шаблона, доступные для редактирования.png|thumb|none|upright=2.5|Редактирование шаблона разметки]]&lt;br /&gt;
:5. Нажмите '''Сохранить'''.&lt;br /&gt;
:6. Чтобы клонировать существующий шаблон разметки, нажмите кнопку [[File:Icon_clone.png|x20px]] в правой части строки шаблона в списке.&lt;br /&gt;
:7. Для удаления одного шаблона:&lt;br /&gt;
::а) Нажмите кнопку [[File:Icon delete.png|x25px]] в правой части строки шаблона в списке.&lt;br /&gt;
::б) Подтвердите удаление.&lt;br /&gt;
:8. Для удаления нескольких шаблонов:&lt;br /&gt;
::а) Выберите шаблоны для удаления – установите флажки в левой части названий шаблонов или нажмите кнопку '''Выбрать всё'''.&lt;br /&gt;
::б) Нажмите кнопку '''Удалить''' в верхней части списка шаблонов и подтвердите удаление.&lt;br /&gt;
&lt;br /&gt;
=== Управление токенами доступа ===&lt;br /&gt;
Управление персональными токенами доступа выполняется в разделе '''Токены доступа''' на странице '''Настройки'''. &lt;br /&gt;
[[File:207 Настройки. Токены доступа.png|800px|thumb|none|Раздел '''Токены доступа''' на странице '''Настройки''']]&lt;br /&gt;
В разделе доступны:&lt;br /&gt;
* поиск по названию токена и его описанию, а также по логину пользователя;&lt;br /&gt;
* сортировка по всем колонкам, кроме '''Описание'''.&lt;br /&gt;
Для управления токенами доступа:&lt;br /&gt;
:1. Создайте токен:&lt;br /&gt;
::а) Нажмите кнопку '''Создать'''.&lt;br /&gt;
::б) В окне '''Создать токен доступа''' введите название и, опционально, описание токена; выберите срок действия. &lt;br /&gt;
::По умолчанию срок действия токена 90 дней (минимальный срок 1 день, максимальный – 365).&lt;br /&gt;
::в) Нажмите кнопку '''Создать'''.&lt;br /&gt;
::[[File:208 Окно Создание токена доступа.png|thumb|none|upright=1.5|Окно '''Создать токен доступа''']]&lt;br /&gt;
::Отобразится окно с токеном доступа.&lt;br /&gt;
::{{Note|type=warn|text=''Токен отображается только один раз – при создании''}}&lt;br /&gt;
::[[File:209 Токен доступа.png|thumb|none|upright=1.5|Пример токена]]&lt;br /&gt;
::г) Нажмите кнопку '''Скопировать в буфер обмена''' и сохраните токен в надежном месте.&lt;br /&gt;
:2. Для удаления одного токена:&lt;br /&gt;
::а) Нажмите кнопку [[File:Icon delete.png|x25px]] в крайнем правом столбце.&lt;br /&gt;
::б) Подтвердите удаление.&lt;br /&gt;
:3. Для удаления нескольких токенов:&lt;br /&gt;
::а) Чтобы выбрать для удаления все токены, установите флажок в заголовке табличного списка.&lt;br /&gt;
::б) Чтобы выбрать несколько токенов, установите флажки в крайнем правом столбце табличного списка.&lt;br /&gt;
::в) Нажмите кнопку '''Удалить''' в верхней части табличного списка токенов и подтвердите удаление.&lt;br /&gt;
&lt;br /&gt;
=== Управление асинхронными задачами ===&lt;br /&gt;
К асинхронным задачам относятся:&lt;br /&gt;
* экспорт snap и SARIF файлов (в режиме [[Help:UI manual#Экспорт|'''Разметки''']] и в разделе [[Help:UI manual#Работа со снимками|'''Проекты''']]);&lt;br /&gt;
* копирование снимков (см. раздел 4.6.4). &lt;br /&gt;
Управление этими задачами выполняется разделе '''Асинхронные задачи''' на странице '''Настройки'''. &lt;br /&gt;
&lt;br /&gt;
В разделе доступны:&lt;br /&gt;
* поиск по идентификатору задачи, её типу, описанию, статусу, а также по логину пользователя;&lt;br /&gt;
* фильтрация списка:&lt;br /&gt;
:* по статусу;&lt;br /&gt;
:* типу задачи;&lt;br /&gt;
:* пользователю;&lt;br /&gt;
:* диапазону дат старта и окончания выполнения задачи;&lt;br /&gt;
* сортировка по всем колонкам, кроме '''Описание'''.&lt;br /&gt;
[[File:342 Настройки. Асинхронные задачи.png|800px|thumb|none|Раздел '''Асинхронные задачи''' на странице '''Настройки''']]&lt;br /&gt;
&lt;br /&gt;
Для управления асинхронными задачами:&lt;br /&gt;
:1. Чтобы посмотреть лог выполнения задачи, нажмите кнопку в крайнем правом столбце.&lt;br /&gt;
:Откроется окно с текстом лога (Рисунок 205).&lt;br /&gt;
:[[File:343 Окно с текстом лога асинхронной задачи.png|600px|thumb|none|Окно с текстом лога асинхронной задачи]]&lt;br /&gt;
:2. Чтобы скачать лог, нажмите кнопку в крайнем правом столбце или откройте окно с текстом лога и нажмите кнопку '''Скачать лог'''.&lt;br /&gt;
:3. Для удаления истории об одной задаче:&lt;br /&gt;
::а) Нажмите кнопку [[File:Icon delete.png|x25px]] в строке задачи в крайнем правом столбце.&lt;br /&gt;
::б) Подтвердите удаление.&lt;br /&gt;
:4. Для удаления истории о нескольких задачах:&lt;br /&gt;
::а) Чтобы выбрать для удаления все задачи, установите флажок в заголовке табличного списка.&lt;br /&gt;
::б) Чтобы выбрать несколько задач, установите флажки в крайнем правом столбце табличного списка.&lt;br /&gt;
::в) Нажмите кнопку '''Удалить''' в верхней части списка.&lt;br /&gt;
&lt;br /&gt;
=== Просмотр информации о сервере ===&lt;br /&gt;
В разделе '''Информация о сервере''' на странице '''Настройки''' отображаются вкладки:&lt;br /&gt;
* '''Параметры''' – параметры, с которыми запущен сервер;&lt;br /&gt;
* '''Системный лог''' – журнал событий сервера;&lt;br /&gt;
* '''Системный журнал''' – журнал базы данных.&lt;br /&gt;
[[File:344 Настройки. Информация о сервере. Вкладка Параметры.png|thumb|none|upright=3|Раздел '''Информация о сервере''' на странице '''Настройки'''. Вкладка '''Параметры''']]&lt;br /&gt;
[[File:345 Настройки. Информация о сервере. Вкладка Системный лог.png|thumb|none|upright=3|Раздел '''Информация о сервере''' на странице '''Настройки'''. Вкладка '''Системный лог''']]&lt;br /&gt;
[[File:346 Настройки. Информация о сервере. Вкладка Системный журнал.png|thumb|none|upright=3|Раздел '''Информация о сервере''' на странице '''Настройки'''. Вкладка '''Системный журнал''']]&lt;br /&gt;
&lt;br /&gt;
{{Note|type=warn|text=''На вкладке '''Системный лог''' вывод информации ограничен 1 МБ последних данных (значение настраивается в параметрах сервера). При скачивании файл содержит данные лога в полном объеме.''}} &lt;br /&gt;
 &lt;br /&gt;
Доступны функции:&lt;br /&gt;
* поиск параметров по их имени и значению – на вкладке '''Параметры''';&lt;br /&gt;
* копирование записей – на вкладках '''Системный лог''' и '''Системный журнал'''; &lt;br /&gt;
* выгрузка лога в файлы в формате .log по нажатии кнопки '''Скачать''' – на вкладках '''Системный лог''' и '''Системный журнал'''.&lt;br /&gt;
&lt;br /&gt;
== Выход из системы ==&lt;br /&gt;
Для выхода из системы выберите пункт '''Выйти''' в меню пользователя в правом верхнем углу экрана.&lt;br /&gt;
[[File:95 Выход из системы —без VSCode.png|thumb|none|upright=1.5|Выход из системы]]&lt;br /&gt;
&lt;br /&gt;
== Использование регулярных выражений ==&lt;br /&gt;
Регулярные выражения можно использовать:&lt;br /&gt;
* для поиска и фильтрации данных [[Help:UI manual#Функции навигационной панели|в навигационной панели]] [[Help:UI manual#Вкладка «Файлы»|на вкладке '''Файлы''']];&lt;br /&gt;
* в окне настройки [[Help:UI manual#Настройка и использование пользовательских фильтров|пользовательских фильтров]] в блоке '''Файлы''';&lt;br /&gt;
* при [[Help:UI manual#Экспорт исходного кода с разметкой|экспорте кода с разметкой]]; &lt;br /&gt;
* при [[Help:UI manual#Настройка глобальных фильтров|настройке глобальных фильтров]];&lt;br /&gt;
* в полях [[Help:UI manual#Глобальный поиск|глобального поиска]].&lt;br /&gt;
&lt;br /&gt;
Особенности реализации:&lt;br /&gt;
:1. Поиск происходит только по регулярному выражению. Если требуется найти специальный символ в качестве обычного символа, его нужно экранировать (например, точку: &amp;lt;code&amp;gt;\.&amp;lt;/code&amp;gt;)&lt;br /&gt;
:2. При поиске находятся вхождения подстроки в полном пути к файлу (аналогично grep). Если требуется найти по полной строке, используйте символы начала и конца строки: &amp;lt;code&amp;gt;^&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt;&lt;br /&gt;
:3. Поиск не зависит от регистра символов (case insensitive) и поддерживает следующий синтаксис:&lt;br /&gt;
::* ; – для разделения списков значений;&lt;br /&gt;
::* * – любое количество символов;&lt;br /&gt;
::* ? – один произвольный символ.&lt;br /&gt;
:В окне настройки [[Help:UI manual#Настройка и использование пользовательских фильтров|пользовательских фильтров]]  в блоке '''Файлы''' можно применить фильтр как для отображения только маркеров из файлов, которые подходят под паттерн, так и для скрытия таких маркеров. Для переключения между этими режимами используйте кнопки [[File:Icon plus 2.png|x20px]] и [[File:Icon minus 3.png|x20px]], которые расположены рядом с полем ввода. В остальных частях интерфейса следует использовать теги re: и re!:&lt;br /&gt;
&lt;br /&gt;
Примеры регулярных выражений при поиске файлов на вкладке '''Файлы''' или в пользовательском фильтре:&lt;br /&gt;
:1. Поиск файлов с текстом &amp;lt;code&amp;gt;sha&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;md5&amp;lt;/code&amp;gt; в любом месте пути или имени файла:&lt;br /&gt;
:&amp;lt;pre&amp;gt;sha|md5&amp;lt;/pre&amp;gt;&lt;br /&gt;
:2. Отображение только маркеров из файлов с расширением .c:&lt;br /&gt;
:&amp;lt;pre&amp;gt;.*\.c$&amp;lt;/pre&amp;gt;&lt;br /&gt;
:3. Скрытие маркеров из файлов, имя которых начинается с символа &amp;lt;code&amp;gt;q&amp;lt;/code&amp;gt; и которые имеют расширения .с или .сс:&lt;br /&gt;
::а) Используйте выражение &amp;lt;code&amp;gt;/q[^/]*\.c$|/q[^/]*\.cc$&amp;lt;/code&amp;gt;&lt;br /&gt;
::б) Нажмите кнопку [[File:Icon plus 2.png|x20px]] рядом с полем ввода, чтобы она поменялась на [[File:Icon minus 3.png|x20px]]&lt;br /&gt;
:4. Отображение только маркеров из файлов, которые имеют текст &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt; в конце имени файла и с расширением из одного символа:&lt;br /&gt;
:&amp;lt;pre&amp;gt;/.*string\..$&amp;lt;/pre&amp;gt;&lt;br /&gt;
:5. Скрытие маркеров из файлов в директориях &amp;lt;code&amp;gt;asn1&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;pem&amp;lt;/code&amp;gt;:&lt;br /&gt;
::а) Используйте выражение &amp;lt;code&amp;gt;/asn1/|/pem/&amp;lt;/code&amp;gt;&lt;br /&gt;
::б) Нажмите кнопку [[File:Icon plus 2.png|x20px]] рядом с полем ввода, чтобы она поменялась на [[File:Icon minus 3.png|x20px]]&lt;br /&gt;
:6. Отображение только маркеров из файлов, которые имеют в имени три цифры подряд:&lt;br /&gt;
:&amp;lt;pre&amp;gt;.*/.*[0-9]{3}[^/]*$&amp;lt;/pre&amp;gt;&lt;br /&gt;
:где &amp;lt;code&amp;gt;[^/]*$&amp;lt;/code&amp;gt; означает, что после трех цифр и до конца строки может встречаться любой символ, кроме &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;. Это позволяет исключить директории, имеющие три цифры в названии.&lt;br /&gt;
&lt;br /&gt;
== Описание ролевой модели ==&lt;br /&gt;
=== Серверные доступы ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Полномочие (доступ) !! Описание !! Влияние на графический интерфейс !! admin !! filter_master !! importer &lt;br /&gt;
|-&lt;br /&gt;
| Создание проектов &lt;br /&gt;
|| Создание и клонирование проектов. Пользователь, создавший проект, имеет полный доступ к управлению этим проектом &lt;br /&gt;
|| Наличие полномочия делает доступным: &lt;br /&gt;
* раздел [[Help:UI manual#Управление проектами и группами проектов|'''Проекты''']]; &lt;br /&gt;
*  кнопку '''Создать проект'''; &lt;br /&gt;
*  форму создания, клонирования и редактирования проекта.&lt;br /&gt;
&lt;br /&gt;
Наличие доступа предоставляет автору проекта полные права на управление своими проектами, включая разметку (даже при отсутствии у него соответствующего проектного доступа), а также позволяет удалять приложения к снимкам в созданных проектах  &lt;br /&gt;
|| + || – || – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Настройка групп проектов	&lt;br /&gt;
|| Создание, редактирование и удаление групп проектов	&lt;br /&gt;
|| Наличие полномочия делает доступным:&lt;br /&gt;
* раздел [[Help:UI manual#Управление проектами и группами проектов|'''Проекты''']] с кнопкой для перехода к настройке групп;&lt;br /&gt;
* панель [[Help:UI manual#Работа с группами проектов|'''Группы проектов''']] с полным списком проектов в группах.&lt;br /&gt;
Наличие доступа предоставляет права на просмотр маркеров во всех проектах	&lt;br /&gt;
|| + || – || – &lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| Управление пользователями	&lt;br /&gt;
|| Создание, редактирование и удаление пользователей	&lt;br /&gt;
|| Наличие полномочия делает доступной вкладку [[Help:UI manual#Управление пользователями|'''Пользователи''']] в разделе [[Help:UI manual#Управление пользователями, ролями и организациями|'''Настройки – Управление пользователями''']] со всеми функциями управления учетными записями пользователей	&lt;br /&gt;
|| + || – || – &lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| Управление ролями	&lt;br /&gt;
|| Создание, редактирование и удаление ролей	&lt;br /&gt;
|| Наличие полномочия делает доступной вкладку [[Help:UI manual#Управление ролями|'''Роли''']] в разделе [[Help:UI manual#Управление пользователями, ролями и организациями|'''Настройки – Управление пользователями''']] со всеми функциями управления ролями	&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Управление организациями	&lt;br /&gt;
|| Создание, редактирование и удаление организаций	&lt;br /&gt;
|| Наличие полномочия делает доступной вкладку [[Help:UI manual#Управление организациями|'''Организации''']] в разделе [[Help:UI manual#Управление пользователями, ролями и организациями|'''Настройки – Управление пользователями''']] со всеми функциями управления организациями	&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Управление шаблонами разметки	&lt;br /&gt;
|| Создание, редактирование и удаление шаблонов разметки	&lt;br /&gt;
|| Наличие полномочия делает доступным раздел [[Help:UI manual#Управление шаблонами разметки|'''Настройки – Шаблоны разметки''']] со всеми функциями управления учетными записями шаблонами	&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Удаление блокировок	&lt;br /&gt;
|| Просмотр и удаление блокировок всех пользователей	&lt;br /&gt;
|| Наличие полномочия позволяет просматривать и удалять блокировки всех пользователей в разделе [[Help:UI manual#Управление блокировками разметки|'''Настройки – Блокировки''']]&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Администрирование сервера	&lt;br /&gt;
|| Просмотр настроек сервера, системных лог-файлов и выполнение операций по администрированию сервера Svacer, включая активацию лицензии	&lt;br /&gt;
|| Наличие полномочия делает доступным раздел [[Help:UI manual#Просмотр информации о сервере|'''Настройки – Информация о сервере''']]&lt;br /&gt;
Совместно с проектными доступами '''Управление ветками''' и снимками и '''Разметка маркеров''' становится доступна функция очистки разметки и комментариев в ветке&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Управление публичными фильтрами	&lt;br /&gt;
|| Публикация, редактирование и удаление публичных фильтров	&lt;br /&gt;
|| Наличие полномочия позволяет публиковать сохраненные фильтры, а также редактировать и удалять публичные фильтры&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Изменение любой разметки	&lt;br /&gt;
|| Изменение любой разметки маркеров, включая выполненную пользователями с признаком [[Help:UI manual#Управление пользователями, ролями и организациями|'''Мастер разметки''']]&lt;br /&gt;
|| Доступ позволяет переразмечать маркеры (добавлять новую разметку), которые разметили любые пользователи, в том числе те, для которых активирована опция [[Help:UI manual#Управление пользователями, ролями и организациями|'''Мастер разметки''']].&lt;br /&gt;
При этом:&lt;br /&gt;
# Полномочие не предоставляет доступ ко всем проектам. Т. е. пользователь с таким полномочием может изменять разметку только в проектах, к которым у него имеется доступ.&lt;br /&gt;
# Для переразметки маркеров пользователю должен быть предоставлен проектный доступ '''Разметка маркеров'''.&lt;br /&gt;
# Чтобы переразметить заблокированный маркер, сначала нужно [[Help:UI manual#Блокировка разметки маркеров|снять его блокировку]]&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Изменение любых комментариев	&lt;br /&gt;
|| Редактирование и удаление любых пользовательских комментариев к маркерам	&lt;br /&gt;
|| Доступ позволяет изменять/удалять комментарии, которые создали любые пользователи, в том числе те, для которых активирована опция [[Help:UI manual#Управление пользователями, ролями и организациями|'''Мастер разметки''']].&lt;br /&gt;
При этом:&lt;br /&gt;
# Полномочие не предоставляет доступ ко всем проектам. Т. е. пользователь с таким полномочием может изменять разметку только в проектах, к которым у него имеется доступ.&lt;br /&gt;
# Для добавления комментариев пользователю должно быть предоставлено проектное полномочие '''Разметка маркеров'''.&lt;br /&gt;
# Чтобы поменять комментарий к заблокированному маркеру, сначала нужно [[Help:UI manual#Блокировка разметки маркеров|снять его блокировку]]&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Создание резервных копий	&lt;br /&gt;
|| Создание, просмотр и восстановление резервных копий в интерфейсе командной строки	&lt;br /&gt;
|| – 	&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Запуск скриптов	&lt;br /&gt;
|| Запуск скриптов (hooks) по кнопке, расположенной на вкладке '''Подробности''' в правой панели, содержащей информацию о маркере	&lt;br /&gt;
|| Наличие полномочия добавляет строку '''Хуки''' на вкладке '''Подробности''' правой панели с возможностью запуска скриптов&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Проектные доступы===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Полномочие (доступ) !! Описание !! Влияние на графический интерфейс !! admin !! filter_master !! importer &lt;br /&gt;
|-&lt;br /&gt;
| Управление проектом и его ветками	&lt;br /&gt;
|| Редактирование и удаление проекта, включая операции по управлению ветками и снимками проекта, настройке глобальных фильтров, импорту/экспорту разметки и просмотру маркеров	&lt;br /&gt;
|| Наличие полномочия делает доступным:&lt;br /&gt;
* раздел [[Help:UI manual#Управление проектами и группами проектов|'''Проекты''']];&lt;br /&gt;
* все функции управления проектом (проектами в группе) и его содержимым (за исключением разметки маркеров) – т. е. все операции с проектом, ветками и снимками.&lt;br /&gt;
Наличие полномочия позволяет удалять приложения к снимкам и экспортировать разметку с исходным кодом&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Управление ветками и снимками	&lt;br /&gt;
|| Редактирование и удаление ветки проекта, включая операции по управлению снимками, настройке глобальных фильтров, импорту/экспорту разметки и просмотру маркеров	&lt;br /&gt;
|| Наличие полномочия делает доступным:&lt;br /&gt;
* раздел [[Help:UI manual#Управление проектами и группами проектов|'''Проекты''']];&lt;br /&gt;
* все функции управления веткой и снимками проекта (за исключением разметки маркеров) – т. е. доступны все операции с веткой и снимками, но не операции управления проектом.&lt;br /&gt;
Наличие полномочия позволяет удалять приложения к снимкам и экспортировать разметку с исходным кодом.&lt;br /&gt;
Запрещено клонировать ветку при наличии доступа только к этой ветке	&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Настройка глобальных фильтров	&lt;br /&gt;
|| Создание, редактирование и удаление глобальных фильтров	&lt;br /&gt;
|| Наличие полномочия делает доступным раздел [[Help:UI manual#Настройка глобальных фильтров|'''Настройки – Глобальные фильтры''']].&lt;br /&gt;
Список проектов и веток в разделе определяется полномочиями к этим проектам и веткам	&lt;br /&gt;
|| + 	|| + 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Импорт снимков	&lt;br /&gt;
|| Загрузка, редактирование названия и удаление снимков&lt;br /&gt;
|| Наличие полномочия делает доступным:&lt;br /&gt;
* раздел [[Help:UI manual#Управление проектами и группами проектов|'''Проекты''']];&lt;br /&gt;
* функции просмотра проекта и ветки, управления снимками в указанной ветке (включая импорт .svace-dir, SARIF и *.snap), просмотра маркеров в указанном контейнере&lt;br /&gt;
|| + 	|| – 	|| + &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Импорт разметки	&lt;br /&gt;
|| Импорт разметки из файла и комментариев в исходном коде 	&lt;br /&gt;
|| Наличие полномочия делает доступным импорт разметки из файла, импорт разметки из комментариев исходного кода снимка и просмотр маркеров в указанном контейнере	&lt;br /&gt;
|| + 	|| – 	|| + &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Экспорт снимков	&lt;br /&gt;
|| Экспорт данных снимков с разметкой и их открытие в IDE	&lt;br /&gt;
|| Наличие полномочия позволяет:&lt;br /&gt;
&lt;br /&gt;
* экспортировать разметку с исходными кодами;&lt;br /&gt;
* экспортировать снимки в форматах *.snap и SARIF;&lt;br /&gt;
* просматривать код с маркерами в Web-IDE&lt;br /&gt;
|| + 	|| – 	|| + &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Просмотр маркеров	&lt;br /&gt;
|| Просмотр маркеров и кода снимков, просмотр блокировок маркеров	&lt;br /&gt;
|| Наличие полномочия предоставляет доступ к следующим функциям [[Help:UI manual#Работа в режиме разметки|в режиме разметки]]:&lt;br /&gt;
* просмотр и выбор снимков в указанном контейнере;&lt;br /&gt;
* просмотр содержимого снимков и маркеров (без возможности разметки).&lt;br /&gt;
Также наличие полномочия предоставляет доступ к разделу [[Help:UI manual#Управление блокировками разметки|'''Настройки – Блокировки''']], но только в части просмотра блокировок в доступных контейнерах, без возможности их удаления	&lt;br /&gt;
|| +	|| + 	|| + &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Разметка маркеров	&lt;br /&gt;
|| Просмотр и разметка маркеров в снимках, включая добавление комментариев, управление списком блокировок	&lt;br /&gt;
|| Наличие полномочия позволяет пользователю размечать маркеры в указанном контейнере, добавлять комментарии, управлять своими блокировками, т. е. для собственных блокировок доступны кнопки удаления, а блокировки других пользователей доступны только для просмотра.&lt;br /&gt;
При отсутствии полномочия в таблице маркеров недоступны поля для установки флажков, а кнопка групповой разметки – неактивна.&lt;br /&gt;
Для разметки маркеров с помощью AI совместно с данным доступом должен быть активен доступ '''Импорт разметки''' &lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Report API	&lt;br /&gt;
|| Использование Report API для получения статистических показателей	&lt;br /&gt;
|| –	&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Известные ограничения ===&lt;br /&gt;
&lt;br /&gt;
* Управление ''своими'' проектами для пользователей только c серверной ролью &amp;quot;Create Projects&amp;quot; без дополнительных прав может не работать для проектов, созданных до Release 7-0-0. &lt;br /&gt;
: Workaround: добавить пользователю явно проектные доступы на каждый необходимый проект.&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Afilters&amp;diff=3435</id>
		<title>Afilters</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Afilters&amp;diff=3435"/>
		<updated>2025-12-03T11:05:20Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: review and minor fixes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Advanced filters =&lt;br /&gt;
Поле &amp;quot;Расширенный фильтр&amp;quot; в пользовательских фильтрах предназначено для фильтрации маркеров (предупреждений) по сложным предикатам. &lt;br /&gt;
[[File:Image-afilters-prop.png|thumb]]&lt;br /&gt;
Предикат может использовать:&lt;br /&gt;
&lt;br /&gt;
* поля маркера, его трассы, разметки и комментариев&lt;br /&gt;
* информацию из контекста: имя проекта, ветки, снимка и т. п.&lt;br /&gt;
* атрибуты снимка, включая пользовательские атрибуты, заданные при импорте&lt;br /&gt;
* статусы разметки&lt;br /&gt;
* текст и атрибуты комментариев&lt;br /&gt;
&lt;br /&gt;
Формат фильтра определяется следующим шаблоном:&lt;br /&gt;
&lt;br /&gt;
 filter(markers, &amp;lt;predicate expr&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Выражение &amp;lt;code&amp;gt;&amp;lt;predicate expr&amp;gt;&amp;lt;/code&amp;gt; определяет предикат. Объект &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt; содержит массив маркеров из контекста, функция &amp;lt;code&amp;gt;filter&amp;lt;/code&amp;gt; фильтрует данный список по предикату. Таким образом, применение фильтра заключается в фильтрации списка маркеров по указанному предикату.&lt;br /&gt;
&lt;br /&gt;
== Список доступных полей ==&lt;br /&gt;
&lt;br /&gt;
=== Поля маркера (предупреждения) ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Comments&amp;lt;/code&amp;gt; — список комментариев маркера. Объект типа Comment (смотрите ниже)&lt;br /&gt;
* &amp;lt;code&amp;gt;Details&amp;lt;/code&amp;gt; — информация, специфичная для анализатора. Ближайший аналог — fingerprint в SARIF&lt;br /&gt;
* &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt; — имя файла&lt;br /&gt;
* &amp;lt;code&amp;gt;Function&amp;lt;/code&amp;gt; — имя функции, может быть mangled для С++&lt;br /&gt;
* &amp;lt;code&amp;gt;ID&amp;lt;/code&amp;gt; — UUID маркера&lt;br /&gt;
* &amp;lt;code&amp;gt;Invariant&amp;lt;/code&amp;gt; — инвариант маркера. Используется для автопереноса разметки между снимками&lt;br /&gt;
* &amp;lt;code&amp;gt;Lang&amp;lt;/code&amp;gt; — язык детектора&lt;br /&gt;
* &amp;lt;code&amp;gt;Line&amp;lt;/code&amp;gt; — номер строки в файле&lt;br /&gt;
* &amp;lt;code&amp;gt;LocID&amp;lt;/code&amp;gt; — порядковый номер маркера относительно изначального отчета анализатора&lt;br /&gt;
* &amp;lt;code&amp;gt;MTid&amp;lt;/code&amp;gt; — шаблон сообщения&lt;br /&gt;
* &amp;lt;code&amp;gt;Msg&amp;lt;/code&amp;gt; — текст сообщения&lt;br /&gt;
* &amp;lt;code&amp;gt;OrigFunc&amp;lt;/code&amp;gt; — 'человекочитаемое' имя функции. Может быть недоступно&lt;br /&gt;
* &amp;lt;code&amp;gt;Tags&amp;lt;/code&amp;gt; — список тегов (меток) маркера&lt;br /&gt;
* &amp;lt;code&amp;gt;Tool&amp;lt;/code&amp;gt; — модуль анализатора, ответственного за данный детектор&lt;br /&gt;
* &amp;lt;code&amp;gt;Traces&amp;lt;/code&amp;gt; — список трасс маркера. Объект типа Trace (смотрите ниже)&lt;br /&gt;
* &amp;lt;code&amp;gt;WarnClass&amp;lt;/code&amp;gt; — название детектора/класса детекторов&lt;br /&gt;
&lt;br /&gt;
Имена полей также могут использоваться в формате, где первая буква в lowercase.&lt;br /&gt;
&lt;br /&gt;
Помимо использования полей, можно использовать вспомогательные функции для доступа к дополнительной информации:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;severity(item) string&amp;lt;/code&amp;gt; — серьезность детектора (чекера)&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
 filter(markers, severity(#) == &amp;quot;Critical&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
'''Внимание:''' использование в предикатах поля &amp;lt;code&amp;gt;Trace&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;status(item) string&amp;lt;/code&amp;gt; — статус разметки текущего маркера. Пример: &amp;lt;code&amp;gt;filter(markers, status(#) == &amp;quot;Confirmed&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;action(item) string&amp;lt;/code&amp;gt; — статус поля action текущего маркера.  Пример: &amp;lt;code&amp;gt;filter(markers, action(#) == &amp;quot;Ignore&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;mseverity(item) string&amp;lt;/code&amp;gt; — статус поля severity текущего маркера (не путать с severity детектора).  Пример: &amp;lt;code&amp;gt;filter(markers, mseverity(#) == &amp;quot;Critical&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;triaged(item) bool&amp;lt;/code&amp;gt; — возвращает true, если маркер имеет не дефолтную разметку. Пример: &amp;lt;code&amp;gt;filter(markers, triaged(#))&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;get_triaged_by(item) UserInfo&amp;lt;/code&amp;gt; — возвращает структуру с информацией о пользователе, кто произвел разметку&lt;br /&gt;
&lt;br /&gt;
Поля структуры &amp;lt;code&amp;gt;UserInfo&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;login: string&amp;lt;/code&amp;gt; — логин пользователя&lt;br /&gt;
* &amp;lt;code&amp;gt;create_ts: Time (UTC)&amp;lt;/code&amp;gt; — время разметки в UTC формате (RFC3339)&lt;br /&gt;
&lt;br /&gt;
=== Комментарии ===&lt;br /&gt;
Объекты типа &amp;lt;code&amp;gt;Comment&amp;lt;/code&amp;gt; содержатся в поле &amp;lt;code&amp;gt;Comments&amp;lt;/code&amp;gt; маркера. Объект имеет следующие поля:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ID&amp;lt;/code&amp;gt; — UUID комментария&lt;br /&gt;
* &amp;lt;code&amp;gt;Text&amp;lt;/code&amp;gt; — текст комментария&lt;br /&gt;
* &amp;lt;code&amp;gt;CreatedBy&amp;lt;/code&amp;gt; — имя пользователя, кто создал комментарий&lt;br /&gt;
* &amp;lt;code&amp;gt;CreateTs&amp;lt;/code&amp;gt; — время создания комментария (объект типа &amp;lt;code&amp;gt;time.Time&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;UpdateTs&amp;lt;/code&amp;gt; — время обновления комментария (объект типа &amp;lt;code&amp;gt;time.Time&amp;lt;/code&amp;gt;), может быть пустым&lt;br /&gt;
* &amp;lt;code&amp;gt;UpdatedBy&amp;lt;/code&amp;gt; — имя пользователя, кто обновил комментарий&lt;br /&gt;
&lt;br /&gt;
=== Трассы ===&lt;br /&gt;
Маркер может содержать трассу маркера в поле &amp;lt;code&amp;gt;Traces&amp;lt;/code&amp;gt;. Трасса описывается следующими структурами:&lt;br /&gt;
 type Trace struct {&lt;br /&gt;
 	Role      string&lt;br /&gt;
 	Locations []TraceEntry&lt;br /&gt;
 }&lt;br /&gt;
 type TraceEntry struct {&lt;br /&gt;
 	File     string	&lt;br /&gt;
 	Line     uint32&lt;br /&gt;
 	Col  	 uint32	&lt;br /&gt;
 	Info 	 string&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Доступ к полям объекта &amp;lt;code&amp;gt;Trace&amp;lt;/code&amp;gt; может выполняться, используя правила языка &amp;lt;code&amp;gt;go-expr&amp;lt;/code&amp;gt;, описанные ниже.&lt;br /&gt;
&lt;br /&gt;
Имена полей могут использоваться в виде как описано выше, либо в формате lowercase: &amp;lt;code&amp;gt;role, locations, file, line, col, info&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
 filter(markers, any(.Comments, .Text == &amp;quot;Test&amp;quot;) &amp;amp;&amp;amp;&lt;br /&gt;
 		any(.Traces, any(.Locations, .Info == &amp;quot;Boolean expression has constant value&amp;quot;))&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
=== Поля снимка ===&lt;br /&gt;
Для доступа к полям снимка можно использовать переменную &amp;lt;code&amp;gt;snapshot&amp;lt;/code&amp;gt;. Переменная имеет тип структуры со следующими полями&lt;br /&gt;
&lt;br /&gt;
 struct {&lt;br /&gt;
 	ID               string                &lt;br /&gt;
 	Name             string                &lt;br /&gt;
 	SerialID         uint32                &lt;br /&gt;
 	BuildObject      string                &lt;br /&gt;
 	ResultsObject    string                &lt;br /&gt;
 	ImportTime       time.Time             &lt;br /&gt;
 	CreatedBy        string                &lt;br /&gt;
 	CreatedByID      string                &lt;br /&gt;
 	Details          map[string]any&lt;br /&gt;
 	CreateTime       time.Time             &lt;br /&gt;
 	SourcesAvailable bool                  &lt;br /&gt;
 }&lt;br /&gt;
Имена полей могут использоваться в виде, где первая буква в lowercase.&lt;br /&gt;
&lt;br /&gt;
Объекты в поле &amp;lt;code&amp;gt;Details&amp;lt;/code&amp;gt; можно просмотреть, нажав на кнопку &amp;lt;code&amp;gt;View JSON&amp;lt;/code&amp;gt; в WebUI в поле &amp;lt;code&amp;gt;Snapshot Information&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
 filter(markers, &lt;br /&gt;
    snapshot.buildObject == &amp;quot;5b634b75422bd554a8569cc10bfadc3aea77b73e&amp;quot; &amp;amp;&amp;amp;&lt;br /&gt;
    .warnClass matches &amp;quot;DEREF&amp;quot;&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
== Описание языка предикатов ==&lt;br /&gt;
Для написания предикатов используется язык '''Expr'''. Детальное описание всех возможностей можно найти здесь: https://github.com/expr-lang/expr &lt;br /&gt;
&lt;br /&gt;
Далее описываются конструкции, наиболее подходящие для написания правил фильтрации.&lt;br /&gt;
&lt;br /&gt;
=== Литералы ===&lt;br /&gt;
 Comment /* */ or //&lt;br /&gt;
 Boolean true, false&lt;br /&gt;
 Integer 42, 0x2A, 0o52, 0b101010&lt;br /&gt;
 Float 0.5, .5&lt;br /&gt;
 String &amp;quot;foo&amp;quot;, 'bar'&lt;br /&gt;
 Array [1, 2, 3]&lt;br /&gt;
 Map {a: 1, b: 2, c: 3}&lt;br /&gt;
 Nil nil&lt;br /&gt;
&lt;br /&gt;
=== Строки ===&lt;br /&gt;
Строки могут быть в одинарных и двойных кавычках. Для эскейпа используйте обратный слэш.&lt;br /&gt;
&lt;br /&gt;
Пример однострочного текста:&lt;br /&gt;
 &amp;quot;Hello\nWorld&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Пример многострочного текста:&lt;br /&gt;
 `Hello&lt;br /&gt;
 World`&lt;br /&gt;
&lt;br /&gt;
В многострочном тексте escape-последовательности не поддерживаются.&lt;br /&gt;
&lt;br /&gt;
=== Операторы ===&lt;br /&gt;
 Arithmetic: +, -, *, /, % (modulus), ^ or ** (exponent)&lt;br /&gt;
 Comparison: ==, !=, &amp;lt;, &amp;gt;, &amp;lt;=, &amp;gt;=&lt;br /&gt;
 Logical: not or !, and or &amp;amp;&amp;amp;, or or ||&lt;br /&gt;
 Conditional: ?: (ternary), ?? (nil coalescing), if {} else {} (multiline)&lt;br /&gt;
 Membership: [], ., ?., in&lt;br /&gt;
 String: + (concatenation), contains, startsWith, endsWith&lt;br /&gt;
 Regex: matches&lt;br /&gt;
 Range: ..&lt;br /&gt;
 Slice: [:]&lt;br /&gt;
 Pipe: |&lt;br /&gt;
&lt;br /&gt;
=== Операторы доступа к полю объекта ===&lt;br /&gt;
Можно использовать оператор &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; и оператор &amp;lt;code&amp;gt;[]&amp;lt;/code&amp;gt;:&lt;br /&gt;
 user.Name&lt;br /&gt;
 user[&amp;quot;Name&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
=== Оператор in ===&lt;br /&gt;
Оператор &amp;lt;code&amp;gt;in&amp;lt;/code&amp;gt; для проверки наличия объекта в массиве или мэпе:&lt;br /&gt;
 &amp;quot;John&amp;quot; in [&amp;quot;John&amp;quot;, &amp;quot;Jane&amp;quot;]&lt;br /&gt;
 &amp;quot;name&amp;quot; in {&amp;quot;name&amp;quot;: &amp;quot;John&amp;quot;, &amp;quot;age&amp;quot;: 30}&lt;br /&gt;
&lt;br /&gt;
=== Optional chaining ===&lt;br /&gt;
Оператор &amp;lt;code&amp;gt;?.&amp;lt;/code&amp;gt; может использоваться для доступа к полю структуры или элементу отображения (map) без необходимости проверки, является ли структура или отображение равными &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;. Если структура или отображение имеют значение &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;, результатом выражения будет &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пример вида:&lt;br /&gt;
 author.User?.Name&lt;br /&gt;
&lt;br /&gt;
значит то же самое, что:&lt;br /&gt;
 author.User != nil ? author.User.Name : nil&lt;br /&gt;
&lt;br /&gt;
=== Nil coalescing ===&lt;br /&gt;
Оператор &amp;lt;code&amp;gt;??&amp;lt;/code&amp;gt; может использоваться для возврата левого операнда, если он не равен &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;, в противном случае возвращается правый операнд.&lt;br /&gt;
&lt;br /&gt;
Пример вида:&lt;br /&gt;
 author.User?.Name ?? &amp;quot;Anonymous&amp;quot;&lt;br /&gt;
&lt;br /&gt;
значит то же самое, что:&lt;br /&gt;
 author.User != nil ? author.User.Name : &amp;quot;Anonymous&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Оператор конвейера ===&lt;br /&gt;
Оператор конвейера &amp;lt;code&amp;gt;|&amp;lt;/code&amp;gt; может использоваться для передачи результата выражения левого операнда в качестве первого аргумента выражения правого операнда.&lt;br /&gt;
&lt;br /&gt;
Пример вида:&lt;br /&gt;
 user.Name | lower() | split(&amp;quot; &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
значит то же самое, что:&lt;br /&gt;
 split(lower(user.Name), &amp;quot; &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=== Предикаты ===&lt;br /&gt;
Предикат — это выражение. Предикаты можно использовать в функциях, таких как &amp;lt;code&amp;gt;filter, all, any, one, none&amp;lt;/code&amp;gt; и других.&lt;br /&gt;
 filter(0..9, {# % 2 == 0})&lt;br /&gt;
 filter(tweets, {len(.Content) &amp;gt; 240})&lt;br /&gt;
&lt;br /&gt;
Скобки &amp;lt;code&amp;gt;{ }&amp;lt;/code&amp;gt; можно опускать:&lt;br /&gt;
 filter(tweets, len(.Content) &amp;gt; 240)&lt;br /&gt;
&lt;br /&gt;
=== Операции над строками ===&lt;br /&gt;
 trim(str[, chars])&lt;br /&gt;
 trimPrefix(str, prefix)&lt;br /&gt;
 trimSuffix(str, suffix)&lt;br /&gt;
 upper(str)&lt;br /&gt;
 lower(str)&lt;br /&gt;
 indexOf(str, substring)&lt;br /&gt;
 lastIndexOf(str, substring)&lt;br /&gt;
 hasPrefix(str, prefix)&lt;br /&gt;
 hasSuffix(str, suffix)&lt;br /&gt;
&lt;br /&gt;
Также есть оператор &amp;lt;code&amp;gt;matches&amp;lt;/code&amp;gt; для поиска регулярного выражения в строке:&lt;br /&gt;
 str matches &amp;quot;regular expression&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Для сопоставления целой строки с регулярным выражением следует использовать вариант:&lt;br /&gt;
 str matches &amp;quot;^regex$&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Функции времени ===&lt;br /&gt;
Поддерживаются Go типы для времени и интервалов: &amp;lt;code&amp;gt;time.Time&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;time.Duration&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Можно использовать операции сложения и вычитания над объектами с типом &amp;lt;code&amp;gt;time.Time&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 createdAt - now()&lt;br /&gt;
 createdAt + duration(&amp;quot;1h&amp;quot;)&lt;br /&gt;
 createdAt &amp;gt; now() - duration(&amp;quot;1h&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
 date(&amp;quot;2023-08-14&amp;quot;)&lt;br /&gt;
 date(&amp;quot;15:04:05&amp;quot;)&lt;br /&gt;
 date(&amp;quot;2023-08-14T00:00:00Z&amp;quot;)&lt;br /&gt;
 date(&amp;quot;2023-08-14 00:00:00&amp;quot;, &amp;quot;2006-01-02 15:04:05&amp;quot;, &amp;quot;Europe/Zurich&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=== Функции над массивами ===&lt;br /&gt;
* &amp;lt;code&amp;gt;all(array, predicate)&amp;lt;/code&amp;gt; — все объекты должны удовлетворять предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;any(array, predicate)&amp;lt;/code&amp;gt; — должен быть по крайней мере один объект, который удовлетворяет предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;one(array, predicate)&amp;lt;/code&amp;gt; — должен быть только один объект, который удовлетворяет предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;none(array, predicate)&amp;lt;/code&amp;gt; — ни один объект не должен удовлетворять предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;find(array, predicate)&amp;lt;/code&amp;gt; — возвращает первый объект, который удовлетворяет предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;findLast(array, predicate)&amp;lt;/code&amp;gt; — возвращает последний объект, который удовлетворяет предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;count(array[, predicate])&amp;lt;/code&amp;gt; — возвращает число объектов, удовлетворяющих предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;first(array)&amp;lt;/code&amp;gt; — первый объект из массива&lt;br /&gt;
* &amp;lt;code&amp;gt;last(array)&amp;lt;/code&amp;gt; — последний объект из массива&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
 all(tweets, {.Size &amp;lt; 280})&lt;br /&gt;
 any(tweets, {.Size &amp;gt; 280})&lt;br /&gt;
 none(tweets, {.Size &amp;gt; 280})&lt;br /&gt;
 find([1, 2, 3, 4], # &amp;gt; 2) == 3&lt;br /&gt;
 findLast([1, 2, 3, 4], # &amp;gt; 2) == 4&lt;br /&gt;
 count(users, .Age &amp;gt; 18)&lt;br /&gt;
 first([1, 2, 3]) == 1&lt;br /&gt;
 last([1, 2, 3]) == 3&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:Backup&amp;diff=3434</id>
		<title>Help:Backup</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:Backup&amp;diff=3434"/>
		<updated>2025-12-03T10:40:06Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: fix installation page link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Создание и восстановление резервной копии ==&lt;br /&gt;
Для переноса Svacer на другой сервер создайте резервные копии БД PostgreSQL и object store как описано ниже и восстановите их на новом сервере.&lt;br /&gt;
{{Note|text=Для бэкапов PostgreSQL можно использовать более продвинутые решения, чем входящий в состав PostgreSQL pg_dump, например [https://github.com/postgrespro/pg_probackup pg_probackup]. В нем поддерживаются инкрементальные бэкапы, валидация бэкапа после создания, и прочие полезные возможности. Описание его настройки и использования смотрите в их [https://postgrespro.github.io/pg_probackup/ документации]}}&lt;br /&gt;
&lt;br /&gt;
=== Если PostgreSQL запущен в виде сервиса ===&lt;br /&gt;
Если PostgreSQL запущен в виде сервиса, то для создания резервной копии БД перейдите в пользователя postgres и запустите создание дампа&lt;br /&gt;
	&lt;br /&gt;
 sudo su -l postgres&lt;br /&gt;
 pg_dump svacer_db &amp;gt; svacer.sql&lt;br /&gt;
&lt;br /&gt;
где svacer_db — имя БД.&lt;br /&gt;
&lt;br /&gt;
В результате дамп БД будет создан в файле svacer.sql&lt;br /&gt;
&lt;br /&gt;
Для восстановления БД из дампа перейдите в пользователя postgres и запустите восстановление&lt;br /&gt;
&lt;br /&gt;
 sudo su -l postgres &lt;br /&gt;
 psql -f svacer.sql svacer_db&lt;br /&gt;
&lt;br /&gt;
Если база не пустая, для очистки перед восстановлением дампа надо удалить ее и создать заново&lt;br /&gt;
&lt;br /&gt;
 psql -c 'drop database svacer_db;'&lt;br /&gt;
 psql -c 'create database svacer_db;'&lt;br /&gt;
&lt;br /&gt;
Если переносите дамп в новый сервер PostgreSQL, создайте пользователя и назначьте ему права на БД, как в [[Help:Installation#Svacer|руководстве по установке]].&lt;br /&gt;
&lt;br /&gt;
=== Если PostgreSQL запущен в docker-контейнере ===&lt;br /&gt;
Если PostgreSQL запущен в docker-контейнере, то для создания резервной копии БД выполните следующую команду&lt;br /&gt;
&lt;br /&gt;
 docker exec -t svacer-postgres pg_dump -U svace svacer_db &amp;gt; svacer.sql&lt;br /&gt;
&lt;br /&gt;
где:&lt;br /&gt;
* svacer-postgres — имя docker-контейнера&lt;br /&gt;
* svace — имя пользователя, под учётной записью которого создана БД&lt;br /&gt;
* svacer_db — имя БД&lt;br /&gt;
&lt;br /&gt;
Для восстановления БД сначала запустите только контейнер PostgreSQL, восстановите базу из бэкапа, после чего запустите контейнер Svacer&lt;br /&gt;
&lt;br /&gt;
 docker compose up -d postgresql&lt;br /&gt;
 cat svacer.sql | docker exec -i svacer-postgres psql -U svace svacer_db&lt;br /&gt;
 docker compose up -d&lt;br /&gt;
&lt;br /&gt;
Если база не пустая, для ее очистки перед восстановлением дампа надо остановить контейнер PostgreSQL и удалить docker volume с базой, после чего запустить контейнер&lt;br /&gt;
&lt;br /&gt;
 docker compose down&lt;br /&gt;
 docker volume rm &amp;lt;postgres_volume_name&amp;gt;&lt;br /&gt;
 docker compose up -d postgresql&lt;br /&gt;
&lt;br /&gt;
=== Бэкап object store в файле ===&lt;br /&gt;
Этот способ хорошо подходит, если object store достаточно большой (десятки гигабайт) и не желательно останавливать сервер Svacer.&lt;br /&gt;
Резервную копию object store можно создать, использовав следующую команду (доступна только пользователю с ролью admin)&lt;br /&gt;
&lt;br /&gt;
 svacer server backup --user admin --password &amp;lt;password&amp;gt; --file &amp;lt;filename&amp;gt;.kvbak&lt;br /&gt;
&lt;br /&gt;
В результате object store будет сохранен в файл '''&amp;lt;filename&amp;gt;.kvbak'''&lt;br /&gt;
&lt;br /&gt;
Для восстановления из резервной копии требуется при запуске сервера указать этот файл в опции '''--load-from-backup'''.&lt;br /&gt;
&lt;br /&gt;
 svacer-server run --pg &amp;lt;postgres_url&amp;gt; --store /home/svacer/new-store --load-from-backup &amp;lt;filename&amp;gt;.kvbak&lt;br /&gt;
&lt;br /&gt;
Восстановление возможно только в пустой object store. То есть в данном примере директория '''/home/svacer/new-store''' должна быть пустой.&lt;br /&gt;
&lt;br /&gt;
=== Бэкап object store в сервере PostgreSQL ===&lt;br /&gt;
Резервную копию object store можно сохранить в PostgreSQL, который используется сервером Svacer. Данный механизм использует функциональность large object store из PostgreSQL. Этот способ хорошо подходит, если object store не очень большой, в пределах нескольких гигабайт.&lt;br /&gt;
&lt;br /&gt;
Создание бэкапа:&lt;br /&gt;
&lt;br /&gt;
 svacer server backup --user admin --password &amp;lt;password&amp;gt; --pg&lt;br /&gt;
&lt;br /&gt;
Бэкап создается в фоновом процессе, пользователь может продолжать работать с сервером. Результат работы команды состоит из ID бэкапа и времени создания. Эти данные печатаются в stdout&lt;br /&gt;
&lt;br /&gt;
 ID = 23 CREATE_TS = 2022-10-06T06:04:33Z &lt;br /&gt;
&lt;br /&gt;
Для печати списка существующих бэкапов используется команда:&lt;br /&gt;
&lt;br /&gt;
 svacer server backup --user admin --password &amp;lt;password&amp;gt; --list-pg&lt;br /&gt;
&lt;br /&gt;
Результат печатается в stdout и включает ID и время создания бэкапа&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 2022-10-06T09:04:36.929+0300    info    Quering server configuration from http://localhost:8080/api/public/server/info&lt;br /&gt;
 2022-10-06T09:04:36.930+0300    info    Server configuration grpc = 3002, rest = 8080&lt;br /&gt;
 2022-10-06T09:04:36.939+0300    info    Logged by user admin&lt;br /&gt;
 2022-10-06T09:04:36.941+0300    info    Backups:&lt;br /&gt;
 ID = 23 CREATE_TS = 2022-10-06T06:04:33Z&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Восстановление object store из бэкапа допустимо только при старте сервера. Для этого следует очистить текущий object store (или указать путь на новую директорию) и использовать следующий флаг при старте:&lt;br /&gt;
&lt;br /&gt;
 svacer-server run --load-from-pg-backup=&amp;lt;id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;id&amp;gt; — ID бэкапа или 0, для использования последнего доступного бэкапа.&lt;br /&gt;
&lt;br /&gt;
Для очистки старых бэкапов используется следующая команда:&lt;br /&gt;
&lt;br /&gt;
 svacer server backup --user admin --password &amp;lt;password&amp;gt; --drop-pg=&amp;lt;lower&amp;gt;:&amp;lt;upper&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;lower&amp;gt; и &amp;lt;upper&amp;gt; — нижняя и верхняя граница ID бэкапов.&lt;br /&gt;
&lt;br /&gt;
При запуске сервера можно указать в переменной окружения SVACER_KV_BACKUP_MAX_AGE время хранения таких бэкапов. Задается в формате [https://pkg.go.dev/time#ParseDuration duration], к примеру 24h, 2h30m, 5m30s. По умолчанию 30 дней (720h). Очистка проводится как часть сборки мусора (т. е. периодичность проверки задается через переменную SVACER_GC_PERIOD).&lt;br /&gt;
&lt;br /&gt;
 SVACER_GC_PERIOD=2h SVACER_KV_BACKUP_MAX_AGE=720h svacer-server run&lt;br /&gt;
&lt;br /&gt;
=== Бэкап object store вручную ===&lt;br /&gt;
Создать бэкап object store можно вручную, просто скопировав директорию object store. Перед этим желательно остановить сервер Svacer для обеспечения целостности данных. Такой способ хорошо подходит, если object store достаточно большой (десятки гигабайт) и возможно остановить сервер Svacer. Для инкрементального бэкапа можно использовать '''rsync'''.&lt;br /&gt;
&lt;br /&gt;
Если директория, где хранить '''object store''' не была явно указана при запуске сервера, по умолчанию он создается в следующей директории:&lt;br /&gt;
&lt;br /&gt;
* ~/.cache/svacer — в OC Linux&lt;br /&gt;
* %LocalAppData%\svacer — в ОС Windows (например, С:\Users\myusername\AppData\Local\svacer)&lt;br /&gt;
&lt;br /&gt;
При восстановлении из резервной копии поместите файлы object store в директорию по умолчанию (см. выше), либо в другую директорию и при запуске сервера Svacer укажите путь к ней одним из способов:&lt;br /&gt;
&lt;br /&gt;
* В переменной окружения SVACER_OBJECTS&lt;br /&gt;
 export SVACER_OBJECTS=/home/user/data/object_store&lt;br /&gt;
 svacer-server run &lt;br /&gt;
* В параметре &amp;lt;code&amp;gt;--store&amp;lt;/code&amp;gt;&lt;br /&gt;
 svacer-server run --store /home/user/data/object_store&lt;br /&gt;
&lt;br /&gt;
При запуске Svacer в docker-контейнере смонтируйте директорию с object store в контейнер как volume и укажите путь к ней в переменной &amp;lt;code&amp;gt;STORE&amp;lt;/code&amp;gt; в файле &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 volumes:&lt;br /&gt;
   - /home/user/data:/data&lt;br /&gt;
 environment:&lt;br /&gt;
   - STORE=/data/object_store&lt;br /&gt;
&lt;br /&gt;
При использовании named docker volume, для восстановления данных временно примонтируйте его к другому контейнеру, скопируйте object store, размонтируйте, и после запустите с ним контейнер Svacer. Подробнее и с примерами — в документации [https://docs.docker.com/storage/volumes/#back-up-restore-or-migrate-data-volumes docker volumes]&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:Import_from_Svace&amp;diff=3433</id>
		<title>Help:Import from Svace</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:Import_from_Svace&amp;diff=3433"/>
		<updated>2025-12-03T10:37:17Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: fix page link (installation &amp;gt; configuration)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CLI команды ==&lt;br /&gt;
  svacer import --svace &amp;lt;path-to-svace&amp;gt;&lt;br /&gt;
  svacer upload&lt;br /&gt;
&lt;br /&gt;
Эти две команды импортируют результаты анализа из '''.svace-dir''' в текущей директории и загрузят их на сервер Svacer по адресу '''localhost:8080'''.&lt;br /&gt;
&lt;br /&gt;
== Процесс импорта ==&lt;br /&gt;
Процесс импорта результатов работы статического анализатора Svace состоит из двух шагов:&lt;br /&gt;
# Дедупликация данных, предобработка, конвертирование во внутренний формат и сохранение результатов в промежуточном хранилище (svacer import).&lt;br /&gt;
# Загрузка данных из промежуточного хранилища на сервер (svacer upload).&lt;br /&gt;
&lt;br /&gt;
Можно импортировать результаты и из других статических анализаторов, поддерживающих [[Help:Sarif#Загрузка на сервер из SARIF|формат SARIF]].&lt;br /&gt;
&lt;br /&gt;
=== Промежуточное хранилище ===&lt;br /&gt;
Промежуточное хранилище используется для хранения результатов, подготовленных для загрузки на сервер. При импорте данных в промежуточное хранилище снимкам назначается уникальный ID, задается имя проекта и ветки. &lt;br /&gt;
Промежуточное хранилище можно использовать для аккумулирования результатов нескольких запусков анализатора, в том числе для различных проектов. &lt;br /&gt;
По умолчанию, промежуточное хранилище создается в директории '''.svacer-dir''' рядом с директорией '''.svace-dir.'''&lt;br /&gt;
Параллельный доступ к хранилищу из разных экземпляров Svacer '''не допускается'''. Если необходимо использовать разделяемое хранилище и конкурентный доступ, Svacer следует запускать в режиме удаленного промежуточного хранилища.&lt;br /&gt;
Процедура импорта c промежуточным хранилищем по умолчанию (размещается в '''&amp;lt;path to project&amp;gt;/.svacer-dir'''):&lt;br /&gt;
&lt;br /&gt;
    svacer import --svace &amp;lt;path to svace&amp;gt; [path to project]&lt;br /&gt;
&lt;br /&gt;
где '''&amp;lt;path to svace&amp;gt;''' — путь к исполняемому файлу svace из дистрибутива svace, '''[path to project]''' — путь к проекту (директории, содержащей .svace-dir). Его можно не указывать, тогда в качестве пути к проекту будет использована текущая директория.&lt;br /&gt;
&lt;br /&gt;
Процедура импорта с явным указанием размещения промежуточного хранилища:&lt;br /&gt;
&lt;br /&gt;
    svacer import --store &amp;lt;path to store&amp;gt; --svace &amp;lt;path to svace&amp;gt; &amp;lt;path to project&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Пользовательские атрибуты ===&lt;br /&gt;
При импорте данных можно ассоциировать пользовательские строковые атрибуты со снимком. Значения атрибутов доступно посредством публичного REST API и интерфейса командной строки. Это позволяет связать дополнительные данные с результатами (например commit ID). Пользовательские атрибуты нельзя модифицировать после импорта данных на сервер.&lt;br /&gt;
Пользовательские атрибуты экспортируются и импортируются как часть информации при использовании функциональности по экспорту и импорту снимков.&lt;br /&gt;
&lt;br /&gt;
Пользовательский атрибут может быть передан при использовании команды import посредством опции '''--field &amp;lt;name&amp;gt;:&amp;lt;value&amp;gt;'''. Опция может быть указана несколько раз в командной строке.&lt;br /&gt;
&lt;br /&gt;
    svacer import ... --field f1:val1 --field f2:val2 ...&lt;br /&gt;
&lt;br /&gt;
Если одно и тоже поле указано несколько раз, то значения поля сохраняются как JSON массив строк. &lt;br /&gt;
'''Допустимое имя''' пользовательского атрибута состоит из латинских букв, цифр, знаков подчеркивание или минуса.&lt;br /&gt;
&lt;br /&gt;
Для получения списка всех пользовательских атрибутов в JSON виде используется следующая команда в командной строке&lt;br /&gt;
&lt;br /&gt;
    '''svacer access''' --project &amp;lt;project name&amp;gt;  --branch &amp;lt;branch name&amp;gt; --snapshot &amp;lt;name or id&amp;gt; --user &amp;lt;user name&amp;gt; --password &amp;lt;password&amp;gt; '''custom_fields'''&lt;br /&gt;
&lt;br /&gt;
Результат операции выдается как JSON объект в stdout. Объект имеет следующую структуру&lt;br /&gt;
    {&lt;br /&gt;
    &amp;quot;field name1&amp;quot;:&amp;quot;value&amp;quot;,&lt;br /&gt;
    &amp;quot;field name2&amp;quot;: [&amp;quot;value&amp;quot;, &amp;quot;value&amp;quot;..]&lt;br /&gt;
    } &lt;br /&gt;
Для получения значения конкретного пользовательского атрибута используется следующая команда&lt;br /&gt;
&lt;br /&gt;
    '''svacer access''' --project &amp;lt;project name&amp;gt;  --branch &amp;lt;branch name&amp;gt; --snapshot &amp;lt;name or id&amp;gt; --user &amp;lt;user name&amp;gt; --password &amp;lt;password&amp;gt; '''custom_fields --get &amp;lt;field name&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
Значение атрибута выводится в stdout как JSON строка или массив.&lt;br /&gt;
=== Клонирование ветки ===&lt;br /&gt;
При импорте данных возможно клонирование ветки (вместе со снимками, разметкой и комментариями) из того же проекта, куда происходит импорт данных.&lt;br /&gt;
&lt;br /&gt;
Для клонирования ветки следует использовать опцию '''--if-no-branch &amp;lt;value&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
    svacer import ... --if-no-branch &amp;lt;value&amp;gt; ...&lt;br /&gt;
&lt;br /&gt;
Значения, которые может принимать опция '''--if-no-branch''':&lt;br /&gt;
&lt;br /&gt;
* '''clone-{name|id}''' — клонировать ветку с заданным именем|id (по умолчанию clone-master)&lt;br /&gt;
* '''create-empty''' — создает пустую ветку&lt;br /&gt;
* '''return-error''' — возвращает ошибку, если для опции '''--branch &amp;lt;branch_name&amp;gt;''' не существует ветки с именем branch_name&lt;br /&gt;
&lt;br /&gt;
{{Note}} Если не указать данную опцию, то будет автоматически клонироваться ветка master, поэтому для избежания ошибок следует убедиться, что ветка master существует, если данная опция не указана, иначе будет выведена ошибка.&lt;br /&gt;
&lt;br /&gt;
==== Клонирование разметки и комментариев ====&lt;br /&gt;
При импорте данных возможно клонирование разметки и комментариев ветки из того же проекта, куда происходит импорт данных.&lt;br /&gt;
&lt;br /&gt;
Для клонирования разметки и комментариев следует использовать опцию '''--clone-review {name|id}'''&lt;br /&gt;
&lt;br /&gt;
    svacer import ... --clone-review {name|id} ...&lt;br /&gt;
&lt;br /&gt;
Данная опция принимает имя или id ветки, из которой необходимо склонировать разметку и комментарии.&lt;br /&gt;
&lt;br /&gt;
Приоритет опции '''--clone-review''' выше, чем у опции '''--if-no-branch''', поэтому возможно клонировать снимки из одной ветки, а разметку и комментарии из другой.&lt;br /&gt;
&lt;br /&gt;
Если ветка с таким именем или id не будет найдена, то при загрузке данных ('''svacer upload ...''', либо '''svacer import --upload ...''') загрузка произойдет, но без склонированной разметки.&lt;br /&gt;
&lt;br /&gt;
=== Прикрепление файлов ===&lt;br /&gt;
При импорте данных возможно прикрепление файлов размером до 300Мб к снимку. Файлы будут доступны пользователю в веб-интерфейсе и посредством интерфейса командной строки. Прикрепленные файлы фиксируются в момент операции импорта и не могут быть модифицированы после загрузки на сервер. Удалить файлы может администратор посредством веб интерфейса. Основное назначение данной функциональности прикрепление некоторой иммутабельной информации к результатам анализа для использования в интеграциях со сторонними системами.&lt;br /&gt;
Прикрепленные файлы являются частью данных, которые экспортируются и импортируются посредством функциональности экспорта и импорта снимков.&lt;br /&gt;
&lt;br /&gt;
Для прикрепления файлов следует использовать опцию '''--attach &amp;lt;file name&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
    svacer import ... --attach file1.txt --attach file2.txt ...&lt;br /&gt;
&lt;br /&gt;
Опция может быть указана несколько раз. После загрузки данных на сервер файлы будут видимы в панели информации о снимке&lt;br /&gt;
&lt;br /&gt;
[[File:SnapshotInfo.png|none|alt=Snapshot Info Window]]&lt;br /&gt;
&lt;br /&gt;
Для получения списка файлов из командной строки  следует использовать команду&lt;br /&gt;
&lt;br /&gt;
    '''svacer access''' --project &amp;lt;project name&amp;gt; --branch &amp;lt;branch name&amp;gt; --snapshot &amp;lt;name or id&amp;gt; --user &amp;lt;user name&amp;gt; --password &amp;lt;password&amp;gt; '''attachments''' --list&lt;br /&gt;
&lt;br /&gt;
Результат работы команды представляет собой JSON массив объектов вида&lt;br /&gt;
    &lt;br /&gt;
    [{&lt;br /&gt;
        &amp;quot;id&amp;quot;: 11,&lt;br /&gt;
        &amp;quot;snapshot_id&amp;quot;: &amp;quot;d99c23f7-9fb9-4f4e-85ac-2539328947e0&amp;quot;,&lt;br /&gt;
        &amp;quot;lid&amp;quot;: 122885,&lt;br /&gt;
        &amp;quot;short_name&amp;quot;: &amp;quot;Makefile&amp;quot;,&lt;br /&gt;
        &amp;quot;description&amp;quot;: &amp;quot;/home/ruseer/static-analysis/svacer/Makefile&amp;quot;,&lt;br /&gt;
        &amp;quot;created_by&amp;quot;: &amp;quot;importer&amp;quot;,&lt;br /&gt;
        &amp;quot;updated_by&amp;quot;: null,&lt;br /&gt;
        &amp;quot;create_ts&amp;quot;: &amp;quot;2022-10-18T06:41:54.532925Z&amp;quot;,&lt;br /&gt;
        &amp;quot;update_ts&amp;quot;: null,&lt;br /&gt;
        &amp;quot;checksum&amp;quot;: &amp;quot;9b1e02a276e810829ac2e38fb775c4ff8d269d0f44fd0fbae40f79a0320389ad&amp;quot;&lt;br /&gt;
    }]&lt;br /&gt;
    &lt;br /&gt;
Для получения содержимого файла из командной строки следует использовать команду&lt;br /&gt;
&lt;br /&gt;
    '''svacer access''' --project &amp;lt;project name&amp;gt;  --branch &amp;lt;branch name&amp;gt; --snapshot &amp;lt;name or id&amp;gt; --user &amp;lt;user name&amp;gt; --password &amp;lt;password&amp;gt; '''attachments''' --get &amp;lt;id&amp;gt; &amp;lt;output file&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Если '''&amp;lt;output file&amp;gt;''' не указан, то результат будет напечатан  в stdout;&lt;br /&gt;
* Если '''&amp;lt;branch&amp;gt;''' не указан, то будет использован ветка master;&lt;br /&gt;
* Если '''&amp;lt;snapshot&amp;gt;''' не указан, то будет использован последний снимок на указанной ветке.&lt;br /&gt;
&lt;br /&gt;
=== Загрузка данных на сервер ===&lt;br /&gt;
{{Note|type=warn|text=При загрузке данных на сервер, а также при прочих взаимодействиях клиента Svacer с сервером Svacer, крайне рекомендуется, чтобы версия клиента совпадала с версией сервера. В случае несовпадения версий возможны непредсказуемые ошибки.}}&lt;br /&gt;
&lt;br /&gt;
Для загрузки данных из промежуточного хранилища на сервер используется команда '''upload''':&lt;br /&gt;
&lt;br /&gt;
 svacer upload --user &amp;lt;user&amp;gt; --password &amp;lt;pwd&amp;gt; --host &amp;lt;host&amp;gt; --port &amp;lt;rest_port&amp;gt; --grpc &amp;lt;grpc_port&amp;gt; &amp;lt;path_to_store&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если отсутствуют параметры:&lt;br /&gt;
* '''--user''' и '''--password''', то используется специальный системный пользователь '''importer''' — он предназначен для импорта данных на сервер;&lt;br /&gt;
* '''--host''', то используется '''locahost''';&lt;br /&gt;
* '''--port''' и '''--grpc''', то используются их значения по умолчанию;&lt;br /&gt;
При загрузке данных на сервер уже загруженные снимки повторно не загружаются. Разделяемая информация (такая как исходные файлы, где один и тот же файл может использоваться в различных анализах и т.п.) также повторно не загружается. &lt;br /&gt;
При сбоях в ходе загрузки проводится повторная загрузка, но при этом загружаются только недостающие данные.&lt;br /&gt;
&lt;br /&gt;
В случае если Svacer запущен с поддержкой SSL/TLS или работает за reverse proxy и доступен по протоколу HTTPS, то для загрузки требуется явно указать протокол в параметре '''--host''', либо добавить опцию '''--ssl'''.&lt;br /&gt;
&lt;br /&gt;
 svacer upload --host https://&amp;lt;url_without_port&amp;gt; &amp;lt;path_to_store&amp;gt;&lt;br /&gt;
 svacer upload --ssl --host &amp;lt;url_without_port&amp;gt; &amp;lt;path_to_store&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом grpc порт (по умолчанию — 3002), по которому идет загрузка данных, на сервере должен быть доступен.&lt;br /&gt;
&lt;br /&gt;
Для информации о загрузке данных на сервер с авторизацией в LDAP см. [[LDAP configuration#Использование CLI сервера Svacer с поддержкой LDAP|Использование CLI Svacer с поддержкой LDAP]].&lt;br /&gt;
&lt;br /&gt;
При загрузке данных на сервер можно включить печать краткой статистики по загруженным результатам. Данная статистика включает информацию о новых и пропущенных предупреждениях, по сравнению с последним ранее загруженным снимком. Выдача краткой статистики возможно в текстовом или JSON виде. Результаты печатаются в stdout.&lt;br /&gt;
&lt;br /&gt;
{{Note|text=Для корректной работы опций &amp;lt;code&amp;gt;--quality-gate&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;--quick-stats&amp;lt;/code&amp;gt; при использовании reverse proxy, в частности Nginx, для gRPC порта Svacer, необходимо в настройках секции http или server добавить инструкцию:&lt;br /&gt;
 underscores_in_headers on;&lt;br /&gt;
См. [[Help:Configuration#Nginx|пример конфига]]}}&lt;br /&gt;
&lt;br /&gt;
 svacer upload ... --quick-stats --out-format text ...&lt;br /&gt;
&lt;br /&gt;
Пример вывода&lt;br /&gt;
 Quick Stats:&lt;br /&gt;
 Previous snapshot   : Snapshot 2022-11-16 10:11:37 +0300&lt;br /&gt;
 Current snapshot    : Snapshot 2022-11-16 10:23:08 +0300&lt;br /&gt;
 New                 : 1&lt;br /&gt;
 Missing             : 0&lt;br /&gt;
 Matched             : 1&lt;br /&gt;
 Same                : 0&lt;br /&gt;
&lt;br /&gt;
 svacer upload ... --quick-stats --out-format json ...&lt;br /&gt;
&lt;br /&gt;
Пример вывода&lt;br /&gt;
 {&amp;quot;branch&amp;quot;:&amp;quot;391f21d1-2173-449c-9d1a-dd846d2a6471&amp;quot;,&amp;quot;snapshot&amp;quot;:&amp;quot;34a1125d-86a3-45d3-9b41-cb5da24ab96e&amp;quot;,&amp;quot;snapshotName&amp;quot;:&amp;quot;Snapshot 2022-11-21 10:19:06 +0300&amp;quot;,&amp;quot;lastSnapshot&amp;quot;:&amp;quot;59657ae8-c3b6-48bc-b586-a6c0580cdb50&amp;quot;,&amp;quot;lastSnapshotName&amp;quot;:&amp;quot;Snapshot 2022-11-21 10:18:09 +0300&amp;quot;,&amp;quot;same&amp;quot;:2}&lt;br /&gt;
&lt;br /&gt;
Формат JSON определяется protobuf3 схемой (ряд полей носит внутренний характер):&lt;br /&gt;
 message ImportSummaryContext {&lt;br /&gt;
   string branch = 1;&lt;br /&gt;
   string snapshot = 2;&lt;br /&gt;
   string snapshotName = 9;&lt;br /&gt;
   string lastSnapshot = 3;  &lt;br /&gt;
   string lastSnapshotName = 4;  &lt;br /&gt;
   int64 new = 5;&lt;br /&gt;
   int64 missing = 6;&lt;br /&gt;
   int64 matched = 7;&lt;br /&gt;
   int64 same = 8;&lt;br /&gt;
   string qualityGate = 10;&lt;br /&gt;
   string baseline_branch_name = 11;&lt;br /&gt;
   string baseline_project_name = 12;&lt;br /&gt;
   string branch_name = 13;&lt;br /&gt;
   string project_name = 14;&lt;br /&gt;
   string project_id = 15;  &lt;br /&gt;
   string baseline_snapshot_id = 16;&lt;br /&gt;
   string baseline_branch_id = 19;&lt;br /&gt;
   string baseline_project_id = 20;&lt;br /&gt;
   string baseline_snapshot_name = 21;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
По умолчанию, если опция по указанию формата выдачи отсутствует, выдача идет в текстовом режиме.&lt;br /&gt;
&lt;br /&gt;
=== Переименование снимка после импорта ===&lt;br /&gt;
&lt;br /&gt;
При необходимости, имя загруженного снимка можно изменить. Данная опция поддерживается только для пользователей с правами администратора сервера.&lt;br /&gt;
&lt;br /&gt;
   svacer container snapshot rename --host &amp;lt;host&amp;gt; --port &amp;lt;port&amp;gt; --user &amp;lt;user name&amp;gt; --password &amp;lt;pwd&amp;gt; --id &amp;lt;snapshot id&amp;gt; --name &amp;lt;snapshot name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Идентификатор снимка можно посмотреть в веб-интерфейсе или получить посредством public API.&lt;br /&gt;
&lt;br /&gt;
=== Модификация путей в разметке при импорте ===&lt;br /&gt;
&lt;br /&gt;
==== Обычное поведение ====&lt;br /&gt;
По умолчанию пути к файлам не меняются, за исключением пути к папки '''.svace-dir''', он будет заменён на '''.build'''. Эту информацию можно увидеть при импорте проекта:&lt;br /&gt;
&lt;br /&gt;
    svacer import --clean .svacer-dir&lt;br /&gt;
    ...&lt;br /&gt;
    info    The path prefix of .svace-dir 'C:\work\generate_files\gen_exp' will be trimmed when converting file paths&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
После этого все маркеры из этой папки и дочерних будут в '''Review''' показывать путь вида '''/.build/test500_1.c''' вместо полного пути для файла '''C:\work\generate_files\gen_exp\test500_1.c'''.&lt;br /&gt;
&lt;br /&gt;
[[File:SimpleSourceCode.png|none|alt=Simple Source Code Window]]&lt;br /&gt;
&lt;br /&gt;
==== Использование --path-prefix ====&lt;br /&gt;
При необходимости модификацию по умолчанию можно заменить через '''--path-prefix'''.&lt;br /&gt;
Значения опции передаются в виде:&lt;br /&gt;
&lt;br /&gt;
    --path-prefix &amp;quot;prefix_for_replace1:value1;prefix_for_replace2:value2; ...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Поддерживается как передача данных сразу в опцию, так и через указание файла содержащего значения. Разумно делать замены для унификации вида проекта, собранного на разных машинах (или из разных папок). При использовании файла допустимо размещать каждую замену на отдельную строчку.&lt;br /&gt;
&lt;br /&gt;
Префиксы путей заменяются только при полном совпадении (включая регистр, даже на Windows).&lt;br /&gt;
Для указания двоеточия в префиксе пути используется удвоенное двоеточие, к примеру (для показа преобразований добавлено  '''--debug'''):&lt;br /&gt;
&lt;br /&gt;
    svacer --debug import --clean --upload --path-prefix &amp;quot;C::\work:work&amp;quot; .svacer-dir&lt;br /&gt;
    ...&lt;br /&gt;
    INFO    Creating regular object store&lt;br /&gt;
    DEBUG   Creating path mapping rule 'C:\work' =&amp;gt; 'work'&lt;br /&gt;
    DEBUG   Creating path mapping rule 'C:/work' =&amp;gt; 'work'&lt;br /&gt;
    DEBUG   Creating path mapping rule '/C_/work' =&amp;gt; 'work'&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
После импорта на сервере можно увидеть файл: '''/work/generate_files/gen_exp/test500_1.c'''&lt;br /&gt;
&lt;br /&gt;
[[File:PathPrefixSourceCode.png|none|alt=PathPrefixSourceCode]]&lt;br /&gt;
&lt;br /&gt;
==== Использование --build-object @auto ====&lt;br /&gt;
При импорте конкретного файла *.svres исходный код может быть загружен, при указании опции '''--build-object @auto'''. В случае, если этот файл лежит в папке .svace-dir, исходный код будет взят из нее. При отсутствии папки .svace-dir файлы будут браться по абсолютным путям из файла *.svres.&lt;br /&gt;
Для указания конкретных директорий поиска подходящих файлов из *.svres следует использовать опцию '''--source-tree''', которую можно указать несколько раз, чтобы задать несколько корневых директорий. Поиск в этих директориях будет происходить только в случае, когда по путям из файла *.svres были найдены не все файлы. В случае успешного сопоставления, на сервер будут загружены соответствующие файлы из директории source tree.&lt;br /&gt;
&lt;br /&gt;
==== Использование --full-paths ====&lt;br /&gt;
Допустимо также полное отключение модификаций путей, для этого импорт надо производить с опцией '''--full-paths'''. Опция блокирует как модификацию по умолчанию '''.build''', так и явные указания через '''--path-prefix'''.&lt;br /&gt;
&lt;br /&gt;
    svacer --debug import --clean --upload --full-paths .svacer-dir&lt;br /&gt;
&lt;br /&gt;
После загрузки на сервере будет виден только полный путь: '''/C_/work/generate_files/gen_exp/test500_1.c'''.&lt;br /&gt;
&lt;br /&gt;
[[File:FullPathsSourceCode.png|none|alt=FullPathsSourceCode window]]&lt;br /&gt;
&lt;br /&gt;
Пути из Windows преобразуются в стиль Linux с небольшим преобразованием символов.&lt;br /&gt;
&lt;br /&gt;
=== Использование quality gate ===&lt;br /&gt;
&lt;br /&gt;
Возможна проверка новых, пропущенных, одинаковых, измененных предупреждений, для этого надо производить импорт с опцией '''--quality-gate'''.&lt;br /&gt;
&lt;br /&gt;
   --quality-gate value    Specify a quality gate. Format: stat_1:severity_1:N_1:[statuses_1],...,stat_k:severity_k:N_k:[statuses_k], stat takes values: new, missing, matched, same, total; severity takes the following values: all, critical, major, normal, minor, undefined, &amp;lt;detector name part&amp;gt;; N is a natural number; statuses - an optional field, specified in square brackets with a separator &amp;quot;;&amp;quot; possible values - confirmed, false_positive, wont_fix, unclear, undecided, when specifying statuses, the quality gate will be searched only for markers that have exactly these statuses, for example [confirmed;wont_fix;undecided]. If the severity of the number N is exceeded, it will out a warning. Also, as a value, you can specify a json or yaml file in which the quality gate is specified.&lt;br /&gt;
&lt;br /&gt;
Флаг принимает на вход тип предупреждений (stat), severity, их количество (N) и их статусы (statuses).&lt;br /&gt;
&lt;br /&gt;
* stat задает тип предупреждений. Возможные значения:&lt;br /&gt;
** '''new''' — присутствует в новом снимке, но отсутствует в старом&lt;br /&gt;
** '''missing''' — присутствует в старом снимке, но отсутствует в новом&lt;br /&gt;
** '''matched''' — присутствуют изменения в файлах, не повлиявшие на выданное предупреждение&lt;br /&gt;
** '''same''' — одинаковые&lt;br /&gt;
** '''total''' — сумма всех вышеперечисленных (то есть количество предупреждений в объединении старого и нового снимков)&lt;br /&gt;
* severity задается либо непосредственным его указанием ('''critical''', '''major''', '''normal''', '''minor''', '''undefined'''), либо '''all''' (все severity), либо частью имени детектора в формате [https://www.postgresql.org/docs/current/functions-matching.html postgres ILIKE]&lt;br /&gt;
* N — порог, после которого вызывается срабатывание. Не включает данное число (т. е. если указать 5, то при нахождении 6 и более вызывается срабатывание quality-gate)&lt;br /&gt;
* statuses — '''опциональное''' поле, в котором можно указать какие статусы (разметку) учитывать при нахождении предупреждений. Возможные значения '''confirmed''', '''false_positive''', '''wont_fix''', '''unclear''', '''undecided'''. Задаются в квадратных скобках с разделителем &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt;. Например &amp;lt;code&amp;gt;[confirmed;wont_fix]&amp;lt;/code&amp;gt;. Если не указать данное поле, то будут учитываться все статусы. При указании в command line рекомендуется значение опции &amp;lt;code&amp;gt;--quality-gate&amp;lt;/code&amp;gt; экранировать в двойные кавычки.&amp;lt;br /&amp;gt;Принципы учета статусов:&lt;br /&gt;
** Если предупреждение размечено в новом снимке (значение не '''undecided'''), разметка берется из нового предупреждения&lt;br /&gt;
** Если в новом снимке нет разметки у данного предупреждения, а в старом есть, то берется разметка из старого предупреждения&lt;br /&gt;
** В остальных случаях у данного предупреждения разметка равна '''undecided'''.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
 --quality-gate &amp;quot;total:critical:0:[confirmed;wont_fix],new:all:10&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Тогда опция сработает, если либо:&lt;br /&gt;
&lt;br /&gt;
# Cтатическим анализатором будут найдены общее количество предупреждений (новых, пропущенных, одинаковых, измененных) с '''severity:critical''' и статусами '''confirmed''' и '''won't fix'''&lt;br /&gt;
# Cтатическим анализатором будут найдены новые предупреждения с любым статусом и severity&lt;br /&gt;
&lt;br /&gt;
Пример вывода:&lt;br /&gt;
 Quality gate exceed:&lt;br /&gt;
 Previous snapshot   : Snapshot 2025-06-16 15:37:09 +0300&lt;br /&gt;
 Current snapshot    : Snapshot 2025-06-16 15:37:39 +0300&lt;br /&gt;
 Stat                : total&lt;br /&gt;
 Severity            : Critical&lt;br /&gt;
 Severity Statuses   : confirmed wont_fix&lt;br /&gt;
 Severity Threshold  : 0&lt;br /&gt;
 Found Severity      : 3&lt;br /&gt;
&lt;br /&gt;
Также quality-gate можно задать файлом в формате json или yaml (не yml).&lt;br /&gt;
&lt;br /&gt;
Пример json файла:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[&amp;quot;total:all:1&amp;quot;, &amp;quot;total:proc:1&amp;quot;]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример yaml файла:&lt;br /&gt;
 - &amp;quot;total:all:1&amp;quot;&lt;br /&gt;
 - &amp;quot;total:proc:1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{{Note|text=Для корректной работы опций &amp;lt;code&amp;gt;--quality-gate&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;--quick-stats&amp;lt;/code&amp;gt; при использовании reverse proxy, в частности Nginx, для gRPC порта Svacer, необходимо в настройках секции http или server добавить инструкцию:&lt;br /&gt;
 underscores_in_headers on;&lt;br /&gt;
См. [[Help:Configuration#Nginx|пример конфига]]}}&lt;br /&gt;
&lt;br /&gt;
==== Флаг --quality-gate-exit-code ====&lt;br /&gt;
В случае срабатывания quality gate можно указать какой exit code от 0 до 125 будет возвращен. &lt;br /&gt;
&lt;br /&gt;
 --quality-gate-exit-code value    Specify the exit code of the application in the range from 0 to 125, which will be issued when the quality-gate is exceeded. The default is 0.&lt;br /&gt;
&lt;br /&gt;
{{Note|text=Значение по умолчанию 0, поэтому без явного задания exit code срабатывание quality-gate не вернет ненулевой статус и при использовании в CI/CD pipeline не будет помечен как failed. Так сделано для упрощения внедрения quality-gate опции в существующий CI/CD. Вначале можно проанализировать логи и если данные корректны, добавить опцию &amp;lt;code&amp;gt;--quality-gate-exit-code&amp;lt;/code&amp;gt; с ненулевым значением.}}&lt;br /&gt;
&lt;br /&gt;
==== Флаг --quality-gate-verbose ====&lt;br /&gt;
Если необходимо выводить информацию и об успешно прошедших quality gate, то нужно добавить флаг &amp;lt;code&amp;gt;--quality-gate-verbose&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример вывода:&lt;br /&gt;
 Quality gate exceed:&lt;br /&gt;
 Previous snapshot   : Snapshot 2025-06-16 15:37:39 +0300&lt;br /&gt;
 Current snapshot    : Snapshot 2025-06-16 16:10:33 +0300&lt;br /&gt;
 Stat                : total&lt;br /&gt;
 Severity            : Critical&lt;br /&gt;
 Severity Statuses   : confirmed wont_fix&lt;br /&gt;
 Severity Threshold  : 0&lt;br /&gt;
 Found Severity      : 3&lt;br /&gt;
 The result of comparison of those who have completed quality gate:&lt;br /&gt;
 Previous snapshot   : Snapshot 2025-06-16 15:37:39 +0300&lt;br /&gt;
 Current snapshot    : Snapshot 2025-06-16 16:10:33 +0300&lt;br /&gt;
 Stat                : new&lt;br /&gt;
 Severity            : All&lt;br /&gt;
 Severity Threshold  : 10&lt;br /&gt;
 Found Severity      : 0&lt;br /&gt;
&lt;br /&gt;
==== Флаг --baseline ====&lt;br /&gt;
Если сравнение необходимо проводить не с предыдущим снимком в этой же ветке, то можно указать флаг &amp;lt;code&amp;gt;--baseline&amp;lt;/code&amp;gt; (также работает для флага &amp;lt;code&amp;gt;--quick-stats&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
 --baseline value    A snapshot to compare (--quality-gate and/or --quick-stats). Format: {project}:::{branch}:::{snapshot} or {project}:::{branch} or {project} use UUID or name. By default, snapshot is the last added, branch is master. If the flag is not specified, then the comparison will be with the latest snapshot from the branch where the snapshot is loaded.&lt;br /&gt;
&lt;br /&gt;
Указывается в формате &amp;lt;code&amp;gt;{project}:::{branch}:::{snapshot}&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;{project}:::{branch}&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;{project}&amp;lt;/code&amp;gt;, используя имена или UUID. По умолчанию используется ветка master (если указан только проект) и последний добавленный снимок (если снимок не указан).&lt;br /&gt;
&lt;br /&gt;
При указании данного флага меняется вывод:&lt;br /&gt;
&lt;br /&gt;
* В текстовом формате добавляются строки об имени проекта, ветки и снимка, с которым сравнивался загружаемый снимок&lt;br /&gt;
* В json формате добавляются имена и id проекта, ветки и снимка, с которым сравнивался загружаемый снимок&lt;br /&gt;
&lt;br /&gt;
Если baseline не может быть точно определен (ошибка в имени проекта, ветки и т. п.), то импорт не производится и выдается ошибка.&lt;br /&gt;
&lt;br /&gt;
==== Флаг --out-file ====&lt;br /&gt;
&lt;br /&gt;
Для указания файла, в который необходимо вывести результаты quality gate, используйте опцию &amp;lt;code&amp;gt;--out-file&amp;lt;/code&amp;gt; (по умолчанию вывод идет в stdout).&lt;br /&gt;
&lt;br /&gt;
==== Флаг --out-format ====&lt;br /&gt;
&lt;br /&gt;
Для указания в каком формате вывести результаты quality gate используйте опцию &amp;lt;code&amp;gt;--out-format&amp;lt;/code&amp;gt;. Принимает значения text (человекочитаемый) и json. По умолчанию text.&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:UI_manual&amp;diff=3432</id>
		<title>Help:UI manual</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:UI_manual&amp;diff=3432"/>
		<updated>2025-12-03T10:35:33Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: fix page link (installation &amp;gt; configuration)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;На этой странице приведена инструкция по работе в пользовательском интерфейсе сервера Svacer.&lt;br /&gt;
&lt;br /&gt;
== Авторизация в пользовательском интерфейсе сервера Svacer ==&lt;br /&gt;
&lt;br /&gt;
Для авторизации в пользовательском интерфейсе сервера Svacer введите логин и пароль на странице ввода учётных данных. Учётные данные по умолчанию — admin / admin.&lt;br /&gt;
[[File:Авторизация 01.png|thumb|none|x300px|alt=AutorizationMain|Страница ввода учетных данных]]&lt;br /&gt;
&lt;br /&gt;
Если на сервере настроена поддержка протокола LDAP, то войти можно с помощью внешних серверов. Для этого:&lt;br /&gt;
&lt;br /&gt;
# На странице ввода учетных данных перейдите на вкладку '''LDAP'''.&lt;br /&gt;
# Выберите LDAP-сервер в списке, если настроено больше одного сервера авторизации.&lt;br /&gt;
# Нажмите кнопку '''Подробности''' для раскрытия подробной информации о сервере и его доступности.&lt;br /&gt;
# Введите логин и пароль.&lt;br /&gt;
&lt;br /&gt;
[[File:Авторизация LDAP 02.png|thumb|none|x300px|alt=AutorizationLDAP|Страница входа по протоколу LDAP]]&lt;br /&gt;
&lt;br /&gt;
После успешного входа отобразится пользовательский интерфейс сервера Svacer. При этом, если в прошлой сессии пользователь [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выбрал проект, его ветку и снимок]] или [[Help:UI manual#Использование фильтров|применил фильтры]], отобразятся эти проект, ветка и фильтры.&lt;br /&gt;
&lt;br /&gt;
Описание настроек конфигурации сервера Svacer для поддержки аутентификации по LDAP протоколу приведено по [[LDAP configuration|ссылке]].&lt;br /&gt;
&lt;br /&gt;
{{Note|type=info|text=''Чтобы после обновления системы в пользовательском веб-интерфейсе корректно отображались изменения, после авторизации обновите страницу в браузере – нажмите клавишу F5.''}}&lt;br /&gt;
&lt;br /&gt;
== Описание основных элементов пользовательского интерфейса ==&lt;br /&gt;
Все страницы пользовательского интерфейса сервера Svacer устроены единообразно и состоят из двух частей:&lt;br /&gt;
# Верхняя панель – отображается на всех страницах пользовательского интерфейса.&amp;lt;br /&amp;gt;Содержит:&lt;br /&gt;
#* логотип сервера Svacer;&lt;br /&gt;
#* кнопки меню:&lt;br /&gt;
#** '''Разметка''' – [[Help:UI manual#Работа в режиме просмотра кода|просмотр и разметка найденных маркеров]], а также [[Help:UI manual#Сравнение снимков и маркеров|сравнение снимков или отдельных маркеров]];&lt;br /&gt;
#** '''Код''' – [[Help:UI manual#Работа в режиме разметки|просмотр снимков исходного кода]], связанного с результатами анализатора Svace;&lt;br /&gt;
#** '''Проекты''' – [[Help:UI manual#Управление проектами и группами проектов|управление проектами]] (режим доступен только пользователям с ролью admin);&lt;br /&gt;
#** '''Детекторы''' – [[Help:UI manual#Просмотр детекторов|просмотр списка детекторов]];&lt;br /&gt;
#** '''Статистика''' – [[Help:UI manual#Просмотр статистики|просмотр статистики разметки]] по всем проектам, веткам и снимкам, доступным пользователю;&lt;br /&gt;
#** '''Поиск''' – [[Help:UI manual#Глобальный поиск|глобальный поиск]] снимков, маркеров и комментариев к ним;&lt;br /&gt;
#* [[File:Icon settings.png|x25px]] – кнопка для перехода к [[Help:UI manual#Настройка сервера Svacer|настройке системы]];&lt;br /&gt;
#* [[File:Icon RuEng.png|x25px]] – переключатель языка пользовательского интерфейса;&lt;br /&gt;
#* [[File:Icon question mark.png|x25px]] – кнопка для перехода на страницу документации к системе;&lt;br /&gt;
#* [[File:Icon bell.png|25px]] – кнопка для перехода к [[Help:UI manual#Просмотр уведомлений в интерфейсе Системы|уведомлениям]];&lt;br /&gt;
#* [[File:Icon profile.png|x25px]] – кнопка меню пользователя, которое предоставляет следующие функции:&lt;br /&gt;
#** [[Help:UI manual#Настройка профиля пользователя|настройка профиля пользователя]];&lt;br /&gt;
#** [[Help:UI manual#Настройка интерфейса|настройка интерфейса]];&lt;br /&gt;
#** [[Help:UI manual#Настройка уведомлений|настройка уведомлений]];&lt;br /&gt;
#** [[Help:UI manual#Управление лицензией|управление лицензией]];&lt;br /&gt;
#** [[Help:UI manual#Просмотр информации о программе|просмотр информации о программе]];&lt;br /&gt;
#** [[Help:UI manual#Выход из системы|выход из системы]].&lt;br /&gt;
# Рабочая область – область экрана для просмотра информации и ввода, которая соответствует выбранному режиму работы или странице настроек.&lt;br /&gt;
&lt;br /&gt;
:[[File:03 Основные элементы интерфейса – без VSCode.png|thumb|none|upright=3]]&lt;br /&gt;
&lt;br /&gt;
== Базовые функции системы ==&lt;br /&gt;
=== Просмотр уведомлений в интерфейсе Системы===&lt;br /&gt;
Чтобы посмотреть уведомления, нажмите кнопку [[File:Icon bell.png|25px]] в правом верхнем углу экрана.&lt;br /&gt;
&lt;br /&gt;
В правой части экрана отобразится панель со списком уведомлений для авторизованного пользователя:&lt;br /&gt;
&lt;br /&gt;
[[File:Notifications new.png|thumbnone|x300px|alt=NotificationList|Панель уведомлений]]&lt;br /&gt;
&lt;br /&gt;
Нажмите кнопку [[File:Icon cross 01.png|15px]] для удаления уведомления.&lt;br /&gt;
&lt;br /&gt;
Нажмите кнопку '''Очистить''' для удаления всех уведомлений.&lt;br /&gt;
&lt;br /&gt;
=== Настройка профиля пользователя ===&lt;br /&gt;
Для перехода в профиль выберите пункт '''Профиль''' в меню пользователя в правом верхнем углу экрана:&lt;br /&gt;
[[File:06 Меню пользователя — без VSCode.png|thumb|none|250px|alt=UserMenu|Меню пользователя. Переход к настройке профиля]]&lt;br /&gt;
&lt;br /&gt;
В правой части экрана отобразится панель '''Профиль''', на которой можно изменить атрибуты своего профиля (ФИО, контакты), кроме логина, а также [[Help:UI manual#Изменение пароля|поменять пароль]].[[File: 07 Профиль основные параметры.png|thumb|none|x400px|alt=ProfileSetting|Настройки профиля пользователя]]&lt;br /&gt;
&lt;br /&gt;
{{Note|type=info|text=''Пользователь LDAP может скорректировать только '''Организации'''. Остальные атрибуты (ФИО, E-mail), а также функция изменения пароля, недоступны.''}}&lt;br /&gt;
&lt;br /&gt;
=== Изменение пароля ===&lt;br /&gt;
Для изменения пароля:&lt;br /&gt;
:1. Выберите пункт '''Профиль''' в меню пользователя.&lt;br /&gt;
:2. В разделе '''Профиль пользователя''' нажмите на ссылку '''Изменить пароль''':&lt;br /&gt;
:[[File:10_Профиль_изменение пароля.png|thumb|none|450px|Переход к изменению пароля в профиле пользователя]]&lt;br /&gt;
:3. В открывшемся окне:&lt;br /&gt;
::а) Введите текущий пароль.&lt;br /&gt;
::б) Дважды введите новый пароль.&lt;br /&gt;
::в) Нажмите кнопку '''Изменить'''.&lt;br /&gt;
::[[File:11_Профиль_ввод нового пароля.png|thumb|none|350px|Окно изменения пароля]]&lt;br /&gt;
&lt;br /&gt;
=== Настройка интерфейса ===&lt;br /&gt;
Для перехода к настройкам выберите пункт '''Настройки интерфейса''' в меню пользователя в правом верхнем углу экрана:&lt;br /&gt;
[[File:187 Меню пользователя интерфейс.png|thumb|none|250px|alt=UserMenu|Меню пользователя. Переход к настройке интерфейса]]&lt;br /&gt;
&lt;br /&gt;
В правой части экрана отобразится панель '''Настройки интерфейса''' с тремя группами параметров:&lt;br /&gt;
:1. '''Общие'''. Параметры этой группы позволяют:&lt;br /&gt;
::а) Выбрать фильтры, которые будут по умолчанию применяться при повторном входе в систему:&lt;br /&gt;
::*фильтры, установленные в предыдущей сессии (выбрано по умолчанию);&lt;br /&gt;
::*сохраненный пользовательский фильтр.&lt;br /&gt;
::б) Включить или выключить (выбрано по умолчанию) замену снимка на последний загруженный в БД Svacer снимок при открытии сохраненного контекста. &lt;br /&gt;
::Если параметр в состоянии «Выключен», при выборе проекта и ветки открывается последний импортированный снимок.&lt;br /&gt;
::в) Включить или выключить (выбрано по умолчанию) сохранение вкладок с открытыми файлами в каждом контексте.&lt;br /&gt;
::г) Включить (выбрано по умолчанию) или выключить сохранение применённой сортировки значений в таблице маркеров при [[Help:UI manual#Выход из системы|выходе из системы]].&lt;br /&gt;
::д) Включить или выключить (выбрано по умолчанию) механизм генерации PDF-файла на основе HTML при выгрузке отчета с [[Help:UI manual#Таблица маркеров|информацией о маркерах]]. &lt;br /&gt;
{{Note|type=warn|text=''Для использования генерации PDF на основе HTML на сервере Svacer должен быть [[Help:Installation#Браузер для PDF-отчетов|установлен браузер Chromium или Google Chrome]].''}}&lt;br /&gt;
:[[File:08 общие настройки интерфейса.png|thumb|none|600px|alt=UserInterfaceSettings|Настройки интерфейса. Группа параметров «Общие»]]&lt;br /&gt;
:2. '''Навигационная панель'''. Параметры этой группы позволяют:&lt;br /&gt;
::а) Выбрать отображение по умолчанию данных [[Help:UI manual#Вкладка «Детекторы»|на вкладке '''Детекторы''']] навигационной панели:&lt;br /&gt;
::*группировка детекторов по уровням серьезности (выбрано по умолчанию);&lt;br /&gt;
::*отображение детекторов в виде списка.&lt;br /&gt;
:::Выбранное отображение будет применяться [[Help:UI manual#Вкладка «Детекторы»|на вкладке '''Детекторы''']] каждый раз после входа в систему.&lt;br /&gt;
::б) Выбрать отображение по умолчанию данных [[Help:UI manual#Вкладка «Файлы»|на вкладке '''Файлы''']] навигационной панели:&lt;br /&gt;
::*только имя файла (выбрано по умолчанию);&lt;br /&gt;
::*полный путь к файлу.&lt;br /&gt;
::в) Выбрать способ сортировки в колонке '''Маркеры''' [[Help:UI manual#Вкладка «Файлы»|на вкладке '''Файлы''']] панели навигации:&lt;br /&gt;
::*по общему количеству маркеров (выбрано по умолчанию);&lt;br /&gt;
::*по количеству размеченных маркеров.&lt;br /&gt;
:[[File:08_настройки навигационной панели.png|thumb|none|600px|alt=UserInterfaceSettings|Настройки интерфейса. Группа параметров «Навигационная панель»]]&lt;br /&gt;
:3. '''Просмотр кода'''. Параметры этой группы позволяют:&lt;br /&gt;
::а) Включить (выбрано по умолчанию) или выключить использование темной темы (темный фон, светлый текст) при просмотре файлов с исходным кодом.&lt;br /&gt;
::б) Включить или выключить (выбрано по умолчанию) переиспользование [[Help:UI manual#Вкладка с исходным кодом|вкладки с исходным кодом]] в редакторе кода.&lt;br /&gt;
::в) Включить или выключить (выбрано по умолчанию) отображение всех элементов трассы маркера по нажатии на ссылку '''Показать трассу''' [[Help:UI manual#Вкладка с исходным кодом|в виджете маркера]].&lt;br /&gt;
::Если параметр находится в состоянии «Выключен», то будет отображаться только первый элемент трассы.&lt;br /&gt;
::г) Выбрать отображение виджета относительно строки кода, с которой он связан:&lt;br /&gt;
::*	над строкой кода (выбрано по умолчанию);&lt;br /&gt;
::*	под строкой кода.&lt;br /&gt;
:[[File:08 настройки просмотра кода.png|thumb|none|600px|alt=UserInterfaceSettings|Настройки интерфейса. Группа параметров «Просмотр кода»]]&lt;br /&gt;
:Эти настройки сохраняются для учётной записи пользователя и не сбрасываются при новой сессии.&lt;br /&gt;
:Чтобы сбросить параметры любой группы к значениям по умолчанию, нажмите на ссылку '''Сбросить настройки''' внизу панели '''Настройки интерфейса'''.&lt;br /&gt;
&lt;br /&gt;
=== Настройка уведомлений ===&lt;br /&gt;
Система может уведомлять пользователей по каналам E-mail и Telegram о следующих типах операций:&lt;br /&gt;
* добавление (при импорте, копировании, клонировании) и удаление снимков; &lt;br /&gt;
* изменение разметки маркеров; &lt;br /&gt;
* добавление комментариев к маркерам. &lt;br /&gt;
&lt;br /&gt;
Для перехода к настройкам выберите пункт '''Настройки уведомлений''' в меню пользователя в правом верхнем углу экрана:&lt;br /&gt;
[[File:188 Меню пользователя - уведомления.png|thumb|none|250px|Меню пользователя. Переход к настройке уведомлений]]&lt;br /&gt;
&lt;br /&gt;
В правой части экрана отобразится панель '''Настройки уведомлений''' с двумя группами параметров:&lt;br /&gt;
:1. '''Типы уведомлений'''. Параметры этой группы позволяют выбрать канал, по которому будут приходить уведомления, настроить и проверить его. Для этого:&lt;br /&gt;
::а) Включите опцию '''E-mail''' и (или) '''Telegram chat ID'''.&lt;br /&gt;
::При выборе уведомления по '''E-mail''' используется адрес электронной почты, указанный [[Help:UI manual#Настройка профиля пользователя|в профиле пользователя]].&lt;br /&gt;
::б) При выборе уведомления по '''Telegram''' введите '''Telegram chat ID'''.&lt;br /&gt;
::в) Чтобы проверить подключение к каналу нажмите кнопку '''Проверить'''.&lt;br /&gt;
::Отправится тестовое сообщение по указанным реквизитам:&lt;br /&gt;
::[[File:189 Настройки уведомлений.png|thumb|thumb|none|600px|alt=UserInterfaceSettings|Настройки уведомлений]]&lt;br /&gt;
:2. '''Подписки'''. Позволяют выбрать проекты, ветки и события, при возникновении которых будут приходить уведомления. Для этого:&lt;br /&gt;
::а) Для добавления подписки нажмите кнопку '''Добавить''' и в появившейся строке в раскрывающемся списке выберите проект и/или его ветку.&lt;br /&gt;
::Чтобы уведомления приходили при изменениях во всех проектах, доступных пользователю, выберите значение '''Все''' в раскрывающемся списке проектов.&lt;br /&gt;
::[[File:190 Настройки уведомлений. Выбор ветки.png|thumb|thumb|none|600px|alt=UserInterfaceSettings|Настройки уведомлений. Выбор ветки]]&lt;br /&gt;
::б) Выберите объекты, при изменении которых будут приходить уведомления – установите флажки в столбцах '''Снимки''', '''Разметка''', '''Комментарии'''.&lt;br /&gt;
::в) Если требуется получать уведомления о разметке и/или комментариях только в маркерах, в которых пользователь принимал участие, установите флажок в столбце '''Участие''' (доступен, только если установлены флажки в столбцах '''Разметка''' и/или '''Комментарии''').&lt;br /&gt;
::г) Для настройки исключения из подписки на уведомления нажмите кнопку [[File:Icon plus.png|x25px]].&lt;br /&gt;
::Кнопка примет вид [[File:Icon minus.png|x25px]].&lt;br /&gt;
::д) Для удаления подписки на уведомления нажмите кнопку [[File:Icon minus.png|x25px]].&lt;br /&gt;
::По окончании настройки уведомлений нажмите кнопку '''Сохранить'''.&lt;br /&gt;
&lt;br /&gt;
=== Управление лицензией ===&lt;br /&gt;
{{Note|type=info|text=''В версии сервера Svacer 12.0.0 лицензия встроена в дистрибутив и не ограничивает функции системы. Срок действия встроенной лицензии – до 31.12.2027 г.''}}&lt;br /&gt;
&lt;br /&gt;
Чтобы посмотреть текст лицензии системы и копировать его, а также для активации новой лицензии, выберите пункт '''Лицензия''' в меню пользователя в правом верхнем углу экрана.&lt;br /&gt;
В правой части экрана отобразится панель '''Лицензия'''.&lt;br /&gt;
[[File:231 Меню пользователя Переход к просмотру лицензии.png|thumb|none|450px|Меню пользователя. Переход к просмотру лицензии]]&lt;br /&gt;
[[File:232 Панель Лицензия.png|thumb|none|x400px|Панель «Лицензия»]]&lt;br /&gt;
&lt;br /&gt;
Чтобы скопировать текст лицензии, нажмите кнопку [[File:Icon copy link.png|x15px]].&lt;br /&gt;
Чтобы активировать лицензию:&lt;br /&gt;
:1. Нажмите на ссылку '''Активировать новую'''.&lt;br /&gt;
:2. В открывшемся окне '''Активация лицензии''' введите лицензионный ключ и нажмите кнопку '''Активировать'''.&lt;br /&gt;
{{Note|type=warn|text=''Функция активации лицензии доступна пользователям с [[#Серверные доступы|серверным доступом]] '''Администрирование сервера'''.''}}&lt;br /&gt;
[[File:233 Окно Лицензия.png|thumb|none|600px|Окно «Активация лицензии»]]&lt;br /&gt;
&lt;br /&gt;
=== Просмотр информации о программе ===&lt;br /&gt;
Чтобы посмотреть информацию о программе, выберите пункт '''О программе''' в меню пользователя в правом верхнем углу экрана.&lt;br /&gt;
[[File:12_Меню пользователя_о программе — без VSCode.png|thumb|none|250px|Меню пользователя. Переход к просмотру информации о программе]]&lt;br /&gt;
&lt;br /&gt;
Откроется окно с информацией о программе&lt;br /&gt;
[[File:13 1 О программме.png|none|thumb|600x600px|Информация о программе]]&lt;br /&gt;
Нажмите на ссылку в строке '''Документация и релизы''' для перехода на страницу документации к системе и ссылкам для скачивания дистрибутивов релизов Svacer.&lt;br /&gt;
&lt;br /&gt;
Нажмите на ссылку в строке '''Спецификация OpenAPI''' для открытия страницы Swagger с описанием API методов используемых в Svacer.&lt;br /&gt;
&lt;br /&gt;
Нажмите на ссылку '''Telegram''' в строке '''Поддержка и Обратная связь''' для открытия чата с технической поддержкой.&lt;br /&gt;
&lt;br /&gt;
Нажмите на ссылку '''Email''' в строке '''Поддержка и обратная связь''' для отправки сообщения в службу технической поддержки по электронной почте.&lt;br /&gt;
&lt;br /&gt;
== Выбор контекста (проекта, ветки и снимка) ==&lt;br /&gt;
Для работы [[Help:UI manual#Работа в режиме разметки|в режиме разметки]] или [[Help:UI manual#Работа в режиме просмотра кода|режиме просмотра кода]] требуется выбрать проект, ветку и снимок с результатами работы анализатора Svace. &lt;br /&gt;
&lt;br /&gt;
При необходимости список проектов можно отфильтровать по группе проектов. Это можно сделать в блоке, который расположен под [[Help:UI manual#Описание основных элементов пользовательского интерфейса|верхней панелью]]. &lt;br /&gt;
&lt;br /&gt;
[[File:14_Выбор проекта, верки, снимка.png|800px]]&lt;br /&gt;
&lt;br /&gt;
По умолчанию после выбора проекта автоматически выбирается ветка master и последний импортированный снимок, если [[Help:UI manual#Настройка интерфейса|параметр '''При открытии сохраненного контекста заменить снимок на последний загруженный''']] находится в состоянии '''Выключен'''. Если master отсутствует, то ветку нужно выбрать вручную.&lt;br /&gt;
&lt;br /&gt;
== Работа в режиме разметки ==&lt;br /&gt;
Режим разметки предоставляет следующий набор элементов управления:&lt;br /&gt;
:1. Навигационная панель:&lt;br /&gt;
:* [[Help:UI manual#Вкладка «Детекторы»|вкладка '''Детекторы''']];&lt;br /&gt;
:* [[Help:UI manual#Вкладка «Файлы»|вкладка '''Файлы''']].&lt;br /&gt;
:Эту панель можно скрыть. Для этого нажмите кнопку [[File:Button Скрыть навигацию.png|x25px]] в правом верхнем её углу. Чтобы панель раскрыть, нажмите кнопку [[File:Button Паказать навигацию.png|x25px]].&lt;br /&gt;
:2. Центральная панель:&lt;br /&gt;
:* [[Help:UI manual#Вкладка «Информация о снимке»|вкладка '''Информация о снимке''']] – открывается по нажатии кнопки [[File:Icon Information.png|25x25px]];&lt;br /&gt;
:* одна или несколько [[Help:UI manual#Вкладка с исходным кодом|вкладок с исходным кодом''']] (отображаются после выбора файлов в таблице маркеров или навигационной панели);&lt;br /&gt;
:* [[Help:UI manual#Таблица маркеров|таблица маркеров]];&lt;br /&gt;
:3. [[Help:UI manual#Функции правой панели|Правая панель]] с информацией о маркере. &lt;br /&gt;
:Эту панель можно скрыть. Для этого нажмите кнопку [[File:Button Паказать навигацию.png|x25px]] в левом верхнем её углу. Чтобы панель раскрыть, нажмите кнопку [[File:Button Скрыть навигацию.png|x25px]].&lt;br /&gt;
&lt;br /&gt;
[[File:96 Режим разметки. Набор элементов управления.png|800px|thumb|none|Режим разметки. Набор элементов управления]]&lt;br /&gt;
&lt;br /&gt;
=== Функции навигационной панели ===&lt;br /&gt;
==== Вкладка «Детекторы» ====&lt;br /&gt;
На этой вкладке отображается список детекторов Svace, которые сработали в выбранном снимке.&lt;br /&gt;
&lt;br /&gt;
Серьезность (критичность) детектора обозначена цветом:&lt;br /&gt;
* красный – наивысшая серьезность (CRITICAL);&lt;br /&gt;
* желтый – высокая серьезность (MAJOR);&lt;br /&gt;
* белый – обычная серьезность (NORMAL, MINOR, UNDEFINED).&lt;br /&gt;
&lt;br /&gt;
На вкладке '''Детекторы''' пользователю доступны следующие функции:&lt;br /&gt;
:1. Поиск по детекторам и файлам.&lt;br /&gt;
:2. Выгрузка списка отображаемых на панели детекторов и маркеров в файл формата .csv – для этого нажмите кнопку [[File:Button Скачать CSV.png|x25px]]&lt;br /&gt;
:3. Отображение данных в виде списка – для этого нажмите кнопку [[File:icon_list.png|x25px]].&lt;br /&gt;
:4. Группировка детекторов по уровням серьезности (по умолчанию) – для этого нажмите кнопку [[File:icon_tree.png|x25px]].&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;
  16_Детекторы_список.png|Вкладка '''Детекторы''' с данными в виде списка&lt;br /&gt;
  15_Детекторы_группировка.png|Вкладка '''Детекторы''' с группировкой по уровням серьезности&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
:5. Сворачивание и разворачивание дерева детекторов (доступно при любом виде группировки):&lt;br /&gt;
::а) Для сворачивание нажмите кнопку [[File:Button Скрыть таблицу.png|x25px]].  &lt;br /&gt;
::Список детекторов свернется: при примененной группировке отобразятся группы детекторов; при отображении данных в виде списка отобразится список детекторов; кнопка примет вид [[File:Button Показать таблицу.png|x25px]].&lt;br /&gt;
::б) Для разворачивания нажмите кнопку [[File:Button Показать таблицу.png|x25px]]. &lt;br /&gt;
::Список детекторов развернется полностью: при примененной группировке отобразятся группы детекторов с раскрытыми списками детекторов и файлов, в которых они найдены; при отображении данных в виде списка отобразится список детекторов с раскрытыми списками файлов, в которых они найдены; кнопка примет вид [[File:Button Скрыть таблицу.png|x25px]].&lt;br /&gt;
:6. Отображение списка маркеров в файлах, в которых сработал детектор – для этого нажмите кнопку [[File:icon_uncover.png|x15px]] в левой части его имени.&lt;br /&gt;
:[[File:checker_uncover.png|thumb|none|320px|Список маркеров, найденных детектором]]&lt;br /&gt;
:7. [[Help:UI manual#Блокировка разметки|Блокировка всех маркеров]], найденных детектором, для разметки другими пользователями – для этого нажмите кнопку [[File:icon_unlocked.png|x25px]] справа от названия детектора (отображается при наведении курсора).&lt;br /&gt;
:8. Применение фильтра по детектору [[Help:UI manual#Таблица маркеров|в таблице маркеров]] – для этого нажмите на название детектора или название файла в раскрывающемся списке маркеров детектора.&lt;br /&gt;
:9. Применение фильтра по серьезности [[Help:UI manual#Таблица маркеров|в таблице маркеров]] – для этого нажмите на название группы серьезности.&lt;br /&gt;
:10. Отмена фильтров по серьезности, детекторам и файлам – для этого нажмите кнопку [[File:icon_return.png|x25px]].&lt;br /&gt;
:11. Отображение [[Help:UI manual#Вкладка с исходным кодом|на вкладке исходного кода]] содержимого файла, места и содержания маркера, а также подробной информации о маркере [[Help:UI manual#Функции правой панели|на правой панели]] – для этого нажмите на маркер.&lt;br /&gt;
:12. Просмотр фрагмента кода в режиме предпросмотра – для этого нажмите кнопку [[File:icon_preview_code.png|x25px]].&lt;br /&gt;
&lt;br /&gt;
==== Вкладка «Файлы» ====&lt;br /&gt;
На этой вкладке отображается список файлов, в которых найдены маркеры.&lt;br /&gt;
&lt;br /&gt;
[[File:17 Файлы.png|thumb|none|300px|Вкладка '''Файлы''']]&lt;br /&gt;
&lt;br /&gt;
Для каждого файла отображаются: &lt;br /&gt;
* имя;&lt;br /&gt;
* количество найденных маркеров (предупреждений);&lt;br /&gt;
* количество размеченных маркеров;&lt;br /&gt;
* кнопки [[File:Icon plus.png|x25px]] или [[File:Icon minus.png|x25px]] (если применена фильтрация по файлам).&lt;br /&gt;
&lt;br /&gt;
На вкладке '''Файлы''' пользователю доступны следующие функции:&lt;br /&gt;
:1. Просмотр на [[Help:UI manual#Вкладка с исходным кодом|вкладке с исходным кодом]]: содержимого файла, места и содержания маркера, а также подробной информации о маркере [[Help:UI manual#Функции правой панели|на правой панели]] – без включения фильтрации по этому файлу. Для этого нажмите на имя файла.&lt;br /&gt;
:2. Применение фильтра по файлам [[Help:UI manual#Таблица маркеров|в таблице маркеров]] – для этого нажмите кнопку [[File:Icon plus.png|x25px]] в одной или нескольких строках. &lt;br /&gt;
:Фильтр применится, кнопка [[File:Icon plus.png|x25px]] в списке файлов поменяется на [[File:Icon minus.png|x25px]].&lt;br /&gt;
:3. Исключение файла из фильтра по файлам [[Help:UI manual#Таблица маркеров|в таблице маркеров]] – для этого нажмите кнопку [[File:Icon minus.png|x25px]] в строке файла.&lt;br /&gt;
:4. Отмена фильтрации [[Help:UI manual#Таблица маркеров|в таблице маркеров]] для всех выбранных файлов – для этого нажмите кнопку [[File:Icon minus 3.png|x25px]] или кнопку [[File:icon_return.png|x25px]] [[Help:UI manual#Вкладка «Детекторы»|на вкладке '''Детекторы''']].&lt;br /&gt;
:5. [[Help:UI manual#Блокировка разметки|Блокировка всех маркеров]] в файле для разметки другими пользователями – для этого нажмите кнопку [[File:icon_unlocked.png|x25px]] справа от названия файла (отображается при наведении курсора).&lt;br /&gt;
:6. Поиск по имени/пути файла в поле '''Поиск по полному пути'''. Поддерживается поиск с использованием [[Help:UI manual#Использование регулярных выражений|регулярных выражений]].&lt;br /&gt;
:7. Сортировка файлов по количеству маркеров – для этого нажмите кнопку [[File:Icon-expand-all.png|x25px]]&lt;br /&gt;
:8. Выгрузка списка отображаемых на панели файлов в файл формата .csv – для этого нажмите кнопку [[File:button_Скачать CSV.png|25px]]&lt;br /&gt;
:9. Настройка отображения файлов и сортировки в колонке '''Маркеры''' на вкладке '''Файлы''' – для этого нажмите кнопку [[File:icon_gear.png|x25px]] и поменяйте настройки.&lt;br /&gt;
:[[File:18 Временная настройка панели навигации.png|thumb|none|800px|Настройка отображения файлов и сортировки полей]]&lt;br /&gt;
&lt;br /&gt;
=== Функции центральной панели ===&lt;br /&gt;
==== Вкладка «Информация о снимке» ====&lt;br /&gt;
На этой вкладке отображается информация о выбранном снимке.&lt;br /&gt;
&lt;br /&gt;
[[File:19 Информация о снимке.png|thumb|left|600px|Вкладка '''Информация о снимке''']]&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
На вкладке '''Информация о снимке''' пользователю доступны следующие функции:&lt;br /&gt;
:1. Просмотр подробной информации о снимке во всплывающем окне – для этого нажмите кнопку '''Просмотреть JSON'''.&lt;br /&gt;
:2. Экспорт [[Help:UI manual#Экспорт|исходного кода, снимков и разметки]] – для этого нажмите кнопку '''Экспорт''' и выберите подходящий вариант.&lt;br /&gt;
:3. [[Help:UI manual#Импорт разметки|Импорт разметки]] – для этого нажмите кнопку '''Импорт''' и выберите подходящий вариант.&lt;br /&gt;
:4. Переход к более продвинутой навигации по исходному коду с подсветкой маркеров во встроенном Web-IDE  Theia – для этого нажмите кнопку '''Открыть в IDE''' .&lt;br /&gt;
:{{Note|type=warn|text=''Функциональность является экспериментальной, доступна при наличии проектного доступа '''Экспорт снимков''' и запуске веб-приложения Svacer по протоколу HTTPS или на локальном хосте. Список доступных IDE определяется при инсталляции. Если доступна только одна IDE, то раскрывающийся список отсутствует, а IDE открывается сразу по нажатию кнопки '''Открыть в IDE'''. Если функциональность недоступна, кнопка '''Открыть в IDE''' неактивна и отображается иконка'' [[File:Icon attention.png|23x23px]]''.''}}&lt;br /&gt;
:5. Просмотр списка приложенных файлов —  по нажатии кнопки '''Показать''', но только при наличии приложенных файлов.&lt;br /&gt;
:6. Скрытие списка приложенных файлов (возможно только при наличии приложенных файлов) – для этого нажмите на ссылку '''Скрыть'''.&lt;br /&gt;
:7. Удаление приложенного файла (возможно только при наличии приложенных файлов) — для этого нажмите кнопку  [[File:icon_delete.png|x25px]].&lt;br /&gt;
:8. Просмотр пользовательских полей, которые пользователь указал при импорте – доступен по нажатии кнопки '''Показать''', но только при наличии этих полей.&lt;br /&gt;
:9. Просмотр параметров анализа во всплывающем окне – для этого нажмите кнопку '''Показать''' в строке '''Параметры анализа'''.&lt;br /&gt;
:10. Экспорт параметров анализа в формате .txt – для этого нажмите кнопку '''Скачать''' в строке '''Параметры анализа'''.&lt;br /&gt;
:11. [[Help:UI manual#Работа с таблицей статистики|Просмотр таблицы статистики]] – для этого нажмите кнопку '''Показать''' в строке '''Статистика по детекторам'''.&lt;br /&gt;
:Информация в таблице сгруппирована по параметрам детекторов, найденным маркерам и статусу их разметки.&lt;br /&gt;
&lt;br /&gt;
==== Вкладка с исходным кодом ====&lt;br /&gt;
Вкладка открывается только после выбора файла [[Help:UI manual#Вкладка «Детекторы»|на вкладке '''Детекторы''']] или [[Help:UI manual#Вкладка «Файлы»|'''Файлы''']], а также [[Help:UI manual#Таблица маркеров|в таблице маркеров]]. Одновременно может быть открыто несколько вкладок с исходным кодом, если выключена [[Help:UI manual#Настройка профиля пользователя|настройка '''Переиспользование вкладки в редакторе кода''']].&lt;br /&gt;
&lt;br /&gt;
В верхней части вкладки отображаются панель инструментов для работы с файлом [1] и полный путь к файлу [2]. Если в строке кода установлен курсор, то в нижнем правом углу вкладки отображается его позиция [3]:&lt;br /&gt;
[[File:20 Исходный код.png|thumb|none|600px|Полный путь к файлу и позиционирование курсора]]&lt;br /&gt;
&lt;br /&gt;
На вкладке с исходным кодом пользователю доступны следующие функции:&lt;br /&gt;
:1. Отображение кода на весь экран – для этого нажмите кнопку [[File:Icon expand.png|23x23px]] или дважды кликните на вкладку файла. &lt;br /&gt;
:&lt;br /&gt;
:Для возврата к обычному отображению нажмите кнопку [[File:Icon minimize.png|24x24px]] или дважды кликните на вкладку файла.&lt;br /&gt;
:2. Переход к предыдущей или следующей строке, в которую пользователь установил курсор, – для этого используйте кнопки [[File:Button left.png|23x23px]] и [[File:Button right.png]] или сочетания клавиш '''Ctrl&amp;amp;nbsp;+&amp;amp;nbsp;&amp;lt;''' и '''Ctrl&amp;amp;nbsp;+&amp;amp;nbsp;&amp;gt;'''.&lt;br /&gt;
:3. Просмотр и открытие маркеров из списка всех маркеров в данном файле – для этого нажмите кнопку [[File:Icon list 2.png|x25px]].&lt;br /&gt;
:[[File:21 Исходный код Отображение списка маркеров.png|thumb|none|300px|right|Cписок маркеров в файле]]&lt;br /&gt;
:4. Отображение всех маркеров – для этого нажмите кнопку [[File:Icon Скрыть маркеры.png|24x24px]].&lt;br /&gt;
:Кнопка недоступна, если она уже нажата; все маркеры уже отображаются.&lt;br /&gt;
:5. Скрытие всех маркеров и трасс – для этого нажмите кнопку [[File:Icon Показать маркеры.png|24x24px]].&lt;br /&gt;
:Кнопка недоступна, если она уже нажата; все маркеры уже скрыты.&lt;br /&gt;
:6. Добавление комментария к строке кода – можно сделать двумя способами:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button Comment Add.png|x25px]] в левой части строки, рядом с её номером (отображается только если в строке установлен курсор) и введите комментарий.&lt;br /&gt;
::ИЛИ&lt;br /&gt;
::б) Нажмите правой кнопкой мыши на строку и выберите пункт '''Добавить комментарий'''. Этим способом можно добавить несколько комментариев к одной строке.&lt;br /&gt;
:7. Просмотр комментария к строке – можно сделать двумя способами:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button Comment view.png|x25px]] в левой части строки, рядом с её номером.&lt;br /&gt;
::ИЛИ&lt;br /&gt;
::б) Нажмите кнопку [[File:Button Comment view.png|x25px]] на панели инструментов и выберите в списке строку комментария.&lt;br /&gt;
::Отобразится виджет комментария, в котором доступны следующие функции:&lt;br /&gt;
::*добавление дополнительного комментария к этой строке кода по нажатии кнопки [[File:Button Comment Add.png|x25px]];&lt;br /&gt;
::*редактирование текста комментария по нажатии кнопки [[File:icon_edit3.png|x25px]];&lt;br /&gt;
::*удаление комментария по нажатии кнопки [[File:icon_delete 2.png|x25px]].&lt;br /&gt;
:[[File:118 Виджет комментария к строке кода.png|thumb|none|600px|Виджет комментария к строке кода]]&lt;br /&gt;
:8. Просмотр и открытие комментариев из списка всех комментариев в коде – для этого нажмите кнопку [[File:Button Comment view.png|x25px]] справа.&lt;br /&gt;
:9. Отображение всех комментариев в коде – для этого нажмите кнопку [[File:Button_Comment_view_all.png|x25px]] в панели инструментов.&lt;br /&gt;
:Кнопка недоступна, если она уже нажата; все комментарии уже отображаются.&lt;br /&gt;
:10. Скрытие всех комментариев в коде – для этого нажмите кнопку [[File:Button_Comment_hide_all.png|x25px]] в панели инструментов.&lt;br /&gt;
:Кнопка недоступна, если она уже нажата; все комментарии уже скрыты.&lt;br /&gt;
:11. Добавление открытого файла в [[Help:UI manual#Использование фильтров|фильтр]] [[Help:UI manual#Таблица маркеров|таблицы маркеров]]  – для этого нажмите кнопку [[File:Icon filter add.png|x25px]] в панели инструментов. &lt;br /&gt;
:Фильтрация применится, вид кнопки поменяется на [[File:Icon filter remove.png|x25px]].&lt;br /&gt;
:12. Исключение файла из [[Help:UI manual#Использование фильтров|фильтра]] [[Help:UI manual#Таблица маркеров|таблицы маркеров]] – для этого нажмите кнопку [[File:Icon filter remove.png|x25px]] в панели инструментов. &lt;br /&gt;
:Фильтрация по этому файлу отменится, вид кнопки поменяется на [[File:Icon filter add.png|x25px]].&lt;br /&gt;
:13. Возврат к исходному маркеру (например, если был выбран другой связанный маркер на вкладке '''Трасса''' [[Help:UI manual#Функции правой панели|правой панели]]) – для этого нажмите кнопку [[File:Icon target.png|x25px]] в верхней части виджета маркера.&lt;br /&gt;
:14. [[Help:UI manual#Разметка маркера|Разметка маркера]] – установите '''Статус''', '''Серьезность''' и '''Действия''' в верхней части виджета маркера.&lt;br /&gt;
:15. Отображение блока элементов трассы в виджете маркера для строки кода – нажмите ссылку '''Показать трассу''' (доступна, если все блоки элементов трассы скрыты).&lt;br /&gt;
::Для последовательного перехода к другим элементам трассы воспользуйтесь кнопками [[File:Button up.png|x25px]] и [[File:Button down.png|x25px]].&lt;br /&gt;
::{{Note|type=info|text=''Отображение только первого элемента трассы или всех элементов трассы маркера по нажатии кнопки '''Показать трассу''' настраивается с помощью [[Help:UI manual#Настройка интерфейса|параметра '''Показывать всю трассу маркера''']].''}}&lt;br /&gt;
::[[File:97 Блок информации о элементе трассы.png|thumb|none|600px|Виджет маркера с блоком элемента трассы]]&lt;br /&gt;
:16. Скрытие блоков элементов трассы в виджете маркера для строки кода – нажмите ссылку '''Скрыть трассу''' (доступна, если хотя бы один блок элемента трассы отображается). &lt;br /&gt;
::Все открытые блоки элементов трассы маркера скроются.&lt;br /&gt;
:17. Переход к строке, в которой объявлена/определена переменная – нажмите правую кнопку мыши на строке исходного кода и выберите пункт '''Перейти к объявлению / Перейти к определению'''.&lt;br /&gt;
:{{Note|type=info|text=''Если для выделенного элемента кода нет объявления или определения, то отобразится сообщение: [[File:150 Объявление не найдено.png|247x247px]] или [[File:151 Определение не найдено.png|254x254px]].''}}&lt;br /&gt;
&lt;br /&gt;
:18. Просмотр ссылок на панели внизу экрана – нажмите правую кнопку мыши на строке исходного кода и выберите пункт '''Найти ссылки'''. На этой панели отображается иерархический список файлов с номерами строк, в которых найдены ссылки:&lt;br /&gt;
:[[File:Исходный_код_Референсы.png|thumb|none|600px|Cписок файлов с номерами строк, в которых найдены ссылки]]&lt;br /&gt;
&lt;br /&gt;
:* Чтобы перейти к строке кода, на которую найдена ссылка, нажмите на ссылку с номером строки на панели [1].&lt;br /&gt;
:* Чтобы посмотреть фрагмент кода, на который найдена ссылка, в режиме предпросмотра, нажмите кнопку [[File:icon_preview_code.png|x25px]] [2].&lt;br /&gt;
:{{Note|type=info|text=''Если для выделенного элемента кода нет ссылок, то отобразится сообщение: [[File:152 Ссылки не найдены.png|213x213px]].''}}&lt;br /&gt;
&lt;br /&gt;
:19. Переход к просмотру выбранного файла [[Help:UI manual#Работа в режиме просмотра кода|в режиме просмотра кода]] – нажмите правую кнопку мыши на строке исходного кода и выберите пункт '''Открыть в режиме Код'''.&lt;br /&gt;
:20. Копирование ссылки на строку кода в буфер обмена – нажмите правую кнопку мыши на строке исходного кода и выберите пункт '''Копировать прямую ссылку'''.  &lt;br /&gt;
::При переходе по этой ссылке будет открываться файл в режиме разметки с курсором на той строке кода, для которой была скопирована ссылка.&lt;br /&gt;
:21. Увеличение и уменьшение размера шрифта кода вместе с отображаемыми виджетами – нажмите правую кнопку мыши на любой строке исходного кода и выберите пункт '''Уменьшить''' или '''Увеличить''', либо установите курсор в любую строку и нажмите сочетание клавиш '''Ctrl&amp;amp;nbsp;+&amp;amp;nbsp;Alt&amp;amp;nbsp;+&amp;amp;nbsp;-''' или '''Ctrl&amp;amp;nbsp;+&amp;amp;nbsp;Alt&amp;amp;nbsp;+&amp;amp;nbsp;='''&lt;br /&gt;
:22. Копирование строки кода – нажмите правую кнопку мыши на строке исходного кода и выберите пункт '''Copy'''.&lt;br /&gt;
:23. Вызов командной строки – нажмите правую кнопку мыши на строке исходного кода и выберите пункт '''Command Palette'''.&lt;br /&gt;
:[[File:25 Исходный код Вызов командной строки.png|thumb|none|600px|Командная строка]]&lt;br /&gt;
&lt;br /&gt;
==== Таблица маркеров ====&lt;br /&gt;
Для раскрытия таблицы маркеров нажмите кнопку [[File:Button Показать таблицу.png|x25px]] в верхней части [[Help:UI manual#Функции центральной панели|центральной панели]], а для её скрытия – [[File:Button Скрыть таблицу.png|x25px]].&lt;br /&gt;
&lt;br /&gt;
В верхней части таблицы находится панель, которая содержит:&lt;br /&gt;
* [[File:Field Детектор.png|x25px]] – поле с информацией [[Help:UI manual#Использование фильтров|о примененных фильтрах]]: как назначенных [[Help:UI manual#Функции навигационной панели|в навигационной панели]], так и с помощью [[Help:UI manual#Настройка и использование пользовательских фильтров|пользовательских фильтров]] и запросов;&lt;br /&gt;
* &amp;lt;span id=&amp;quot;dwl_pdf&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;кнопка [[File:Icon download.png|x25px]] – выгрузка маркеров в файл формата .csv или .pdf: только для [[Help:UI manual#choice|выбранных]] или всех отображаемых маркеров, если ничего не выбрано. Отчет в формате .pdf может быть сгенерирован на основе HTML, так и существующим (нативным) способом. В PDF-отчете, сгенерированном на основе HTML, усовершенствованы стили, доработан титульный лист, актуализирован набор параметров для выгружаемых маркеров и пр.; &lt;br /&gt;
:{{Note|type=warn|text='''''Примечания:'''''&lt;br /&gt;
:* ''если в таблице не отображаются маркеры из-за примененных пользовательских фильтров, то в сгенерированном PDF-отчете будет указано «Нет маркеров (применены фильтры)»;''&lt;br /&gt;
:* ''для использования механизма генерации PDF-отчёта на основе HTML должна быть включена [[Help:UI manual#Настройка интерфейса|одноименная настройка]];''&lt;br /&gt;
:* ''генерация PDF-отчета на основе HTML может занимать больше времени, чем нативная генерация;''&lt;br /&gt;
:* ''спецсимволы (иконки), добавленные в комментариях к маркерам, не отображаются в выгруженном PDF-отчете.''}}&lt;br /&gt;
&lt;br /&gt;
* кнопка [[File:Icon edit.png|x25px]] – переход [[Help:UI manual#Групповая разметка маркеров|к групповой разметке]] выбранных маркеров (доступна, если выбраны маркеры в таблице);&lt;br /&gt;
* кнопка [[File:Button_Comment_Add.png|x25px]] – переход к [[Help:UI manual#Добавление общего комментария к нескольким маркерам|добавлению общего комментария к нескольким выбранным маркерам]].&lt;br /&gt;
&lt;br /&gt;
:[[File:26 Таблица маркеров.png|thumb|none|800px|Таблица маркеров с примененными фильтрами]]&lt;br /&gt;
&lt;br /&gt;
В таблице маркеров пользователю доступны следующие функции:&lt;br /&gt;
:1. Сортировка по значениям столбцов.&lt;br /&gt;
:2. &amp;lt;span id=&amp;quot;choice&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Выбор маркеров для [[Help:UI manual#dwl pdf|выгрузки отчета]], [[Help:UI manual#Групповая разметка маркеров|групповой разметки]] или [[Help:UI manual#Добавление общего комментария к нескольким маркерам|добавления общего комментария к нескольким маркерам]] – для этого установите флажок в строке маркера.&lt;br /&gt;
:3. Просмотр подробной информации о маркере [[Help:UI manual#Функции правой панели|в правой панели]] и его места и содержания [[Help:UI manual#Вкладка с исходным кодом|на вкладке с исходным кодом]] – для этого дважды кликните на строку маркера или нажмите на имя файла в столбце '''Файл'''. Также для выбора можно использовать клавиши ↑ и ↓ – для перемещения по строкам, и Enter – для подтверждения выбора.&lt;br /&gt;
:4. Просмотр детальной информации о маркере в JSON-формате – для этого нажмите правой кнопкой мыши на маркер и выберите пункт '''Просмотреть JSON'''.&lt;br /&gt;
:5. Копирование детальной информации о маркере (JSON маркера) в буфер обмена – для этого нажмите правой кнопкой мыши на маркер и выберите пункт '''Копировать JSON'''.&lt;br /&gt;
:При переходе по этой ссылке будет открываться список маркеров в режиме разметки с открытым маркером (в правой панели и на вкладке с исходным кодом), для которого была скопирована ссылка.&lt;br /&gt;
:6. Копирование ссылки на маркер в буфер обмена – для этого нажмите правой кнопкой мыши на маркер и выберите пункт '''Копировать ссылку на маркер'''.&lt;br /&gt;
:7. Переход к [[Help:UI manual#Сравнение маркеров|сравнению одного маркера с другим]] – для этого нажмите правой кнопкой мыши на маркер и выберите пункт '''Сравнить с ...'''&lt;br /&gt;
&lt;br /&gt;
=== Функции правой панели ===&lt;br /&gt;
Эта панель предоставляет подробную информацию о маркере и его [[Help:UI manual#Разметка маркера|разметке]]:&lt;br /&gt;
* статус [[Help:UI manual#Блокировка разметки|блокировки разметки]];&lt;br /&gt;
* статус [[Help:UI manual#Разметка маркера|разметки, его серьезность и требуемое действие]];&lt;br /&gt;
* автор последней разметки и прочее.&lt;br /&gt;
[[File:27 Правая панель.png|thumb|none|upright=4|Правая панель]]&lt;br /&gt;
&lt;br /&gt;
На правой панели пользователю доступны следующие функции:&lt;br /&gt;
:1. Копирование ссылки на маркер – для этого нажмите кнопку [[File:Icon copy link.png|x25px]].&lt;br /&gt;
:2. [[Help:UI manual#Блокировка разметки|Блокировка маркера]] для разметки другими пользователями – для этого нажмите кнопку [[File:icon_unlocked.png|x25px]] в верхней части правой панели.&lt;br /&gt;
:3. [[Help:UI manual#Разметка маркера|Разметка маркера]] – для этого установите '''Статус''', '''Серьезность''' и '''Действие''' в верхней части правой панели.&lt;br /&gt;
:4. Просмотр истории разметки со связанными комментариями – для этого нажмите кнопку [[File:Icon history.png|x25px]] в верхней части правой панели.&lt;br /&gt;
:[[File:28 История изменения маркера.png|thumb|none|upright=2.5|Пример истории изменения разметки маркера]]&lt;br /&gt;
&lt;br /&gt;
:5. Отображение маркера [[Help:UI manual#Вкладка с исходным кодом|на вкладке с исходным кодом]] нажмите кнопку с именем файла и номером строки в верхней части правой панели.&lt;br /&gt;
:6. Отображение элемента трассы [[Help:UI manual#Вкладка с исходным кодом|на вкладке с исходным кодом]] – для этого нажмите на ссылку с именем файла и номером строки на вкладке '''Трасса''' [1].&lt;br /&gt;
:7. Отображение кода, который соответствует строке трассы, в отдельном окне в режиме предпросмотра – для этого на вкладке '''Трасса''' нажмите кнопку [[File:Icon preview code.png|x25px]] рядом с именем файла и номером строки [2].&lt;br /&gt;
:[[File:31 Предпросмотр кода.png|thumb|none|upright=2.5|Элементы управления для работы с элементом трассы]]&lt;br /&gt;
:8. Просмотр и добавление комментариев к маркеру на вкладке '''Комментарии'''. &lt;br /&gt;
:Комментарии для каждого маркера уникальны. Добавление одинаковых комментариев недоступно.&lt;br /&gt;
:Редактор комментариев поддерживает синтаксис Markdown.&lt;br /&gt;
:Для упоминания пользователя, вставьте '''@''' и введите или выберите его логин. После добавления комментария по нажатии кнопки '''Применить''' указанному пользователю придет [[Help:UI manual#Просмотр уведомлений в интерфейсе Системы|уведомление в интерфейсе системы]] об упоминании с возможностью перехода к маркеру с этим комментарием.&lt;br /&gt;
:9. Редактирование и удаление комментариев на вкладке '''Комментарии''' с помощью кнопок [[File:Icon edit2.png|x25px]] и [[File:Icon delete.png|x25px]]. &lt;br /&gt;
:Если [[Help:UI manual#Работа с проектами|для проекта]] установлен флажок '''Обязательный комментарий при разметке''', то удаление связанного с разметкой комментария недоступно. Его можно только отредактировать.&lt;br /&gt;
:[[File:32 Комментарии.png|thumb|none|upright=1.3|Вкладка '''Комментарии''']]&lt;br /&gt;
:{{Note|type=info|text='''''Примечания''':'' &lt;br /&gt;
:*  ''Пользователь может отредактировать и удалить только свои комментарии. Пользователю с доступом '''Изменение любых комментариев''' доступно редактирование и удаление комментариев всех пользователей. Если такой пользователь внёс изменения, то изначальный автор теряет возможность изменять свой комментарий (если у него нет доступа '''Изменение любых комментариев'''), так как авторство передаётся пользователю, который последним внёс изменения.'' &lt;br /&gt;
:* ''Для отредактированного комментария отображается слово '''изменено''', при наведении курсора на которое отображается сообщение с логином пользователя, изменившего комментарий, и датой редактирования. Текст несохраненного комментария в поле добавления комментария не пропадает при переключении на другой маркер.'' &lt;br /&gt;
:* ''Если открыт режим редактирования комментария, то при переключении на другой маркер режим редактирования закрывается и изменения не сохраняются.''}}&lt;br /&gt;
:10. Ввод, просмотр и редактирования комментария в отдельном диалоговом окне – для этого нажмите кнопку [[File:Button Comment Zoom.png|x25px]] рядом с полем ввода нового комментария или в поле существующего комментария.&lt;br /&gt;
:[[File:120 Окно создания, просмотра и редактирования комментария в отдельном диалоговом окне.png|thumb|none|upright=2|Окно создания, просмотра и редактирования комментария в отдельном диалоговом окне]]&lt;br /&gt;
:11. Просмотр подробной информации на вкладке '''Подробности'''. Содержит два блока: &lt;br /&gt;
:* информация о сработавшем детекторе: серьезность и надежность, а также связанные с ним коды CWE, которые содержат ссылки на описание дефектов безопасности на сайте [https://cwe.mitre.org cwe.mitre.org];&lt;br /&gt;
:* информацией о маркере: текстовые метки маркера, названия снимка и функции, инструмент, язык, текстовое описание и степень доверия, а также кнопки для перехода к просмотру истории маркера и запуску хуков.&lt;br /&gt;
::{{Note|type=info|text=''Svace, начиная с версии 4.0, для некоторых языков поставляется с моделью искусственного интеллекта, которая предсказывает истинность срабатывания маркера на основе предупреждений и собранных метрик. Это значение в Svacer отображается в параметре '''Степень доверия'''.''}}&lt;br /&gt;
::По нажатии на иконку [[File:icon_question_mark2.png|x25px]] справа от названия детектора отображается дополнительная информация о нём. Иконка не отображается, если дополнительная информация отсутствует.&lt;br /&gt;
:[[File:33 Подробная информация о маркере.png|thumb|none|upright=2|Вкладка '''Подробности''']]&lt;br /&gt;
:[[File:121 Окно с дополнительной информацией о детекторе.png|thumb|none|upright=2|Окно с дополнительной информацией о детекторе]]&lt;br /&gt;
&lt;br /&gt;
:12. Просмотр истории обнаружения маркера в снимках данной ветки проекта – для этого на вкладке '''Подробности''' нажмите кнопку '''Показать''' в блоке информации о маркере в строке '''История'''.&lt;br /&gt;
:В окне просмотра истории доступна сортировка записей.&lt;br /&gt;
:[[File:35 История маркера.png|thumb|none|upright=2.5|Пример истории маркера]]&lt;br /&gt;
:13. Просмотр маркера в JSON-формате – для этого на вкладке '''Подробности''' нажмите кнопку '''Показать''' в блоке '''JSON'''.&lt;br /&gt;
:[[File:234 Пример JSON маркера.png|thumb|none|upright=2|Пример JSON маркера]]&lt;br /&gt;
:14. Запуск хуков (скриптов) – для этого нажмите кнопку '''Запустить''' на вкладке '''Подробности''' и в раскрывающемся списке доступных хуков выберите тот, который требуется запустить.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Использование фильтров ===&lt;br /&gt;
==== Общая информация ====&lt;br /&gt;
Настройка и использование фильтров доступны [[Help:UI manual#Работа в режиме разметки|в режиме разметки]].&lt;br /&gt;
&lt;br /&gt;
Существует пять видов фильтров:&lt;br /&gt;
&lt;br /&gt;
# Фильтры [[Help:UI manual#Функции навигационной панели|навигационной панели]] [1]: детекторы, файлы или серьезность.&lt;br /&gt;
# Доступные для разметки – позволяют отобразить только маркеры, которые доступны пользователю для разметки, т. е. при использовании этого фильтра в списке не будут отображаться маркеры, заблокированные другими пользователями. Фильтр применяется по нажатии кнопки [[File:Icon view2.png|x25px]] [2] в правой части блока [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выбора проекта, ветки и снимка]].&lt;br /&gt;
# Размеченный – позволяют отобразить только размеченные маркеры. Фильтр применяется по нажатии кнопки [[File:Icon view.png|x25px]] [3] в правой части блока [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выбора проекта, ветки и снимка]].&lt;br /&gt;
# [[Help:UI manual#Настройка и использование пользовательских фильтров|Пользовательские фильтры]] – доступны по нажатии кнопки [[File:Button Фильтры.png|x25px]] [4] в правой части блока [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выбора проекта, ветки и снимка]].&lt;br /&gt;
# Запрос – фильтр, указанный в поле в верхней части [[Help:UI manual#Таблица маркеров|таблицы маркеров]] [5].&lt;br /&gt;
 &lt;br /&gt;
:[[File:36 Фильтры.png|thumb|none|upright=3|Существующие фильтры]]&lt;br /&gt;
&lt;br /&gt;
Увидеть примененные фильтры (кроме '''Доступные для разметки''') и последовательность их применения можно в поле [[File:field Детектор.png|x25px]] в верхней части [[Help:UI manual#Таблица маркеров|таблицы маркеров]].&lt;br /&gt;
&lt;br /&gt;
Все виды фильтров можно использовать одновременно, но при определенном порядке применения фильтры могут быть сброшены:&lt;br /&gt;
* запрос сбрасывается после применения любого другого фильтра;&lt;br /&gt;
* фильтры [[Help:UI manual#Функции навигационной панели|навигационной панели]] сбрасываются после применения [[Help:UI manual#Настройка и использование пользовательских фильтров|пользовательских фильтров]] и других фильтров [[Help:UI manual#Функции навигационной панели|на навигационной панели]];&lt;br /&gt;
* [[Help:UI manual#Настройка и использование пользовательских фильтров|пользовательские фильтры]] и фильтры [[Help:UI manual#Функции навигационной панели|навигационной панели]] не сбрасываются при применении фильтра '''Размеченный''';&lt;br /&gt;
* при переключении на другой [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|проект, ветку или снимок]] примененные фильтры '''Размеченный''' и  [[Help:UI manual#Настройка и использование пользовательских фильтров|'''Пользовательский''']] не сбрасываются и применяются к выбранному снимку.&lt;br /&gt;
&lt;br /&gt;
По нажатию кнопки [[File:Button Фильтры 2.png|x25px]] в правой части блока [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выбора контекста]] можно отменить примененные фильтры: пользовательский или все.&lt;br /&gt;
&lt;br /&gt;
==== Настройка и использование пользовательских фильтров ====&lt;br /&gt;
Настроить пользовательские фильтры можно [[Help:UI manual#Работа в режиме разметки|в режиме разметки]]. Для этого:&lt;br /&gt;
:1. Нажмите кнопку [[file:button Фильтры.png|x25px]] в правой части блока [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выбора контекста]]. &lt;br /&gt;
:В правой части экрана отобразится панель пользовательских фильтров, которая содержит три вкладки:&lt;br /&gt;
:* '''Пользовательский''' – параметры фильтрации, которые разделены на три группы:&lt;br /&gt;
::* параметры детекторов;&lt;br /&gt;
::* параметры маркеров;&lt;br /&gt;
::* файлы;&lt;br /&gt;
::* расширенный фильтр;&lt;br /&gt;
:* '''Сохраненные''' – список [[Help:UI manual#Работа с сохраненными фильтрами|сохраненных фильтров]];&lt;br /&gt;
:* '''Публичные''' – [[Help:UI manual#Работа с публичными фильтрами|список фильтров, доступных всем пользователям]].&lt;br /&gt;
&lt;br /&gt;
:2. Настройте параметры фильтрации на вкладке '''Пользовательский''' – выберите значения в списках полей, нажмите кнопки со значениями, или введите значения.&lt;br /&gt;
:3. Нажмите на кнопку [[File:Icon cancel.png|x15px]] справа от значения в списке, чтобы отменить его выбор.&lt;br /&gt;
:4. Если параметры нужно исключить из поиска, нажмите на кнопку [[File:Icon plus 2.png|x25px]]. &lt;br /&gt;
:Кнопка поменяется на [[File:Icon minus 3.png|x25px]].&lt;br /&gt;
:5. Если параметры нужно включить в поиск, нажмите на кнопку [[File:Icon minus 3.png|x25px]]. &lt;br /&gt;
:Кнопка поменяется на [[File:Icon plus 2.png|x25px]].&lt;br /&gt;
:6. Если в полях '''Метки''', '''Функции''' и '''Файлы''' нужно использовать регулярные выражения:&lt;br /&gt;
::а) Нажмите на кнопку [[File:Button TextTempl.png|x25px]].&lt;br /&gt;
::Кнопка поменяется на [[File:Button Reg.png|x25px]].&lt;br /&gt;
::б) Введите [[Help:UI manual#Использование регулярных выражений|регулярные выражения]]. Используйте новую строку для разделения значений.  &lt;br /&gt;
:7. Если в полях '''Метки''', '''Функции''' и '''Файлы''' нужно использовать текстовые шаблоны:&lt;br /&gt;
::а) Нажмите на кнопку [[File:Button Reg.png|x25px]].&lt;br /&gt;
::Кнопка поменяется на [[File:Button TextTempl.png|x25px]].&lt;br /&gt;
::б) Введите текстовые шаблоны. Используйте новую строку для разделения значений.  &lt;br /&gt;
:8. Для создания сложного фильтра с поиском по предикатам задайте в поле '''Расширенный фильтр''' параметры в формате &amp;lt;code&amp;gt;filter(markers, &amp;lt;predicate expr&amp;gt; )&amp;lt;/code&amp;gt;, где:&lt;br /&gt;
::* &amp;lt;code&amp;gt;filter ()&amp;lt;/code&amp;gt; – функция, которая фильтрует список по предикату;&lt;br /&gt;
::* &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt; – объект, который содержит массив маркеров из контекста;&lt;br /&gt;
::* &amp;lt;code&amp;gt;&amp;lt;predicate expr&amp;gt;&amp;lt;/code&amp;gt; – выражение, которое определяет предикат.&lt;br /&gt;
::Описание используемых в этом фильтре функций, объектов и выражений, а также языка предикатов доступно по нажатии на иконку [[File:Icon question mark2.png|x25px]].&lt;br /&gt;
:9. Нажмите кнопку [[File:Button Очистить.png|x25px]], чтобы очистить все параметры фильтрации.&lt;br /&gt;
:10. &amp;lt;span id=&amp;quot;filters_saved&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Нажмите кнопку [[File:Button Сохранить как.png|x25px]], в открывшемся диалоге введите название и нажмите кнопку '''Сохранить'''.&lt;br /&gt;
:Фильтр сохранится и отобразится на [[Help:UI manual#Работа с сохраненными фильтрами|вкладке '''Сохраненные''']].&lt;br /&gt;
:11. Нажмите кнопку [[File:Button Применить.png|x25px]], чтобы применить фильтр. &lt;br /&gt;
:После применения кнопка фильтра станет зеленой, а ее название поменяется на название сохраненного фильтра.&lt;br /&gt;
::[[File:36 Пользовательские фильтры.png|thumb|none|upright=2|Пользовательские фильтры. Вкладка '''Пользовательский''']]&lt;br /&gt;
&lt;br /&gt;
==== Работа с сохраненными фильтрами ====&lt;br /&gt;
На вкладке '''Сохраненные''' отображаются фильтры, [[Help:UI manual#filters saved|сохраненные на вкладке '''Пользовательский''']], а также [[Help:UI manual#filters published|скопированные с вкладки '''Публичные''']].&lt;br /&gt;
:[[File:37 Фильтры сохраненные.png|thumb|none|upright=2|Пользовательские фильтры. Вкладка '''Сохраненные''']]&lt;br /&gt;
&lt;br /&gt;
Воспользуйтесь функциями управления фильтрами на вкладке '''Сохраненные''':&lt;br /&gt;
:1. Для поиска фильтра введите его название в строке поиска.&lt;br /&gt;
:2. Для сортировки фильтров по названию нажмите кнопку [[File:Button Sort.png|x25px]].&lt;br /&gt;
:3. Для редактирования сохраненного фильтра нажмите кнопку [[File:Icon edit3.png|x25px]] и [[Help:UI manual#Настройка и использование пользовательских фильтров|внесите изменения]].&lt;br /&gt;
:4. Создайте дубликат фильтра – нажмите кнопку [[File:Icon duplicate.png|x25px]].&lt;br /&gt;
:5. &amp;lt;span id=&amp;quot;filters_publishing&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Для публикации фильтра нажмите кнопку [[File:Button share.png|x25px]].&lt;br /&gt;
:Копия сохраненного фильтра отобразится [[Help:UI manual#Работа с публичными фильтрами|на вкладке '''Публичные''']]  и станет доступна другим пользователям.&lt;br /&gt;
:{{Note|type=warn|text=''Функция доступна только пользователям с [[#Серверные доступы|серверным доступом]] '''Управление публичными фильтрами'''''.}}&lt;br /&gt;
:6. Для удаления одного фильтра нажмите кнопку [[File:Icon delete 2.png|x25px]].&lt;br /&gt;
:7. Для удаления нескольких фильтров:&lt;br /&gt;
::а) Выберите фильтры для удаления – установите флажки в левой части названий фильтров или нажмите кнопку '''Выбрать всё'''.&lt;br /&gt;
::б) Нажмите кнопку '''Удалить'''.&lt;br /&gt;
:8. Примените фильтр – нажмите на его название и нажмите кнопку [[File:Button Применить.png|x25px]].&lt;br /&gt;
&lt;br /&gt;
После применения:&lt;br /&gt;
* примененный фильтр будет отмечен [[File:Icon check.png|x25px]];&lt;br /&gt;
* кнопка фильтра станет зеленой, а ее название поменяется на название сохраненного фильтра.&lt;br /&gt;
&lt;br /&gt;
==== Работа с публичными фильтрами ====&lt;br /&gt;
{{Note|type=warn|text=''Создание (публикация), изменение и удаление публичных фильтров доступны пользователям с [[#Серверные доступы|серверным доступом]] '''Управление публичными фильтрами'''''.}}&lt;br /&gt;
&lt;br /&gt;
На вкладке '''Публичные''' отображаются фильтры, [[Help:UI manual#filters publishing|опубликованные на вкладке  '''Сохраненные''']].&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot; heights=&amp;quot;300px&amp;quot; style=&amp;quot;float:left; clear:right; margin-right:1em; margin-left:1em&amp;quot;&amp;gt;&lt;br /&gt;
  153 Пользовательские фильтры. Публичные без доступа.png|Пользовательские фильтры. Вкладка '''Публичные'''. &amp;lt;/br&amp;gt;Вид для пользователя без серверного доступа &amp;lt;/br&amp;gt;'''Управление публичными фильтрами'''&lt;br /&gt;
  154 Пользовательские фильтры. Публичные с доступом.png|Пользовательские фильтры. Вкладка '''Публичные'''. &amp;lt;/br&amp;gt;Вид для пользователя с серверным доступом &amp;lt;/br&amp;gt;'''Управление публичными фильтрами'''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
Воспользуйтесь функциями управления фильтрами на вкладке '''Публичные''':&lt;br /&gt;
:1. Для поиска фильтра введите его название в строке поиска.&lt;br /&gt;
:2. Для сортировки фильтров по названию нажмите кнопку [[File:Button Sort.png|x25px]].&lt;br /&gt;
:3. Чтобы посмотреть параметры фильтра, нажмите кнопку [[File:Button show.png|x25px]].&lt;br /&gt;
:{{Note|type=warn|text=''Функция доступна только пользователям БЕЗ [[#Серверные доступы|серверного доступа]] '''Управление публичными фильтрами.'''''}}&lt;br /&gt;
:4. Для редактирования публичного фильтра нажмите кнопку [[File:Icon edit3.png|x25px]] и [[Help:UI manual#Настройка и использование пользовательских фильтров|внесите изменения]].&lt;br /&gt;
:5. &amp;lt;span id=&amp;quot;filters_published&amp;quot;&amp;gt;Скопируйте публичный фильтр – нажмите кнопку [[File:Icon duplicate.png|x25px]].&amp;lt;/span&amp;gt;&lt;br /&gt;
:Фильтр сохранится и отобразится [[Help:UI manual#Работа с сохраненными фильтрами|на вкладке '''Сохраненные''']].&lt;br /&gt;
:6. Для удаления одного фильтра нажмите кнопку [[File:Icon delete 2.png|x25px]].&lt;br /&gt;
:7. Для удаления нескольких фильтров:&lt;br /&gt;
::а) Выберите фильтры для удаления – установите флажки в левой части названий фильтров или нажмите кнопку '''Выбрать всё'''.&lt;br /&gt;
::б) Нажмите кнопку '''Удалить'''.&lt;br /&gt;
:8. Примените фильтр – нажмите на его название и нажмите кнопку [[File:Button Применить.png|x25px]].&lt;br /&gt;
&lt;br /&gt;
После применения:&lt;br /&gt;
* примененный фильтр будет отмечен [[File:Icon check.png|x25px]];&lt;br /&gt;
* кнопка фильтра станет зеленой, а ее название поменяется на название сохраненного фильтра.&lt;br /&gt;
&lt;br /&gt;
=== Сравнение снимков и маркеров ===&lt;br /&gt;
Чтобы сравнить снимки и маркеры в них:&lt;br /&gt;
:1. [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|Выберите исходный контекст]] – проект, ветку, снимок.&lt;br /&gt;
:2. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] нажмите кнопку [[File:Button Сравнить с.png|x25px]] и в раскрывшемся списке выберите пункт '''Сравнить с…'''.&lt;br /&gt;
:3. В открывшемся окне выберите проект, ветку и снимок для сравнения; нажмите кнопку [[File:Button Применить.png|x25px]].&lt;br /&gt;
:[[File:38 Выбор снимка для сравнения.png|thumb|none|upright=1.5|Выбор проекта, ветки и снимка для сравнения]]&lt;br /&gt;
:Результат сравнения отобразится [[Help:UI manual#Функции навигационной панели|в навигационной панели]] и [[Help:UI manual#Функции центральной панели|центральной панели]], причем:&lt;br /&gt;
:* вкладка '''Информация о снимке''' поменяется на вкладку '''Информация о различиях''' с информацией о двух сравниваемых снимках;&lt;br /&gt;
:* применится первый режим сравнения, в котором найдены результаты.&lt;br /&gt;
:4. Выберите режим сравнения.&lt;br /&gt;
:[[File:39 Выбор режима сравнения.png|800px|thumb|none|Выбор режима сравнения]]&lt;br /&gt;
:[[Help:UI manual#Функции навигационной панели|В навигационной панели]] и [[Help:UI manual#Функции центральной панели|центральной панели]] отобразятся только результаты выбранного режима сравнения. В режимах '''Сопоставленные''' и '''Одинаковые''' [[Help:UI manual#Таблица маркеров|в таблице маркеров]] добавится столбец с номером версии: V1 – маркер в файле текущего снимка, V2 – маркер в файле целевого снимка.&lt;br /&gt;
:{{Note|type=info|text=''Если при просмотре кода файла целевого снимка перейти к просмотру файла [[Help:UI manual#Работа в режиме просмотра кода|в режиме '''Код''']] (команда '''Открыть в режиме код'''), то режим сравнения закроется, отобразится контекст целевого снимка.''}}&lt;br /&gt;
&amp;lt;gallery heights=&amp;quot;210&amp;quot; perrow=&amp;quot;2&amp;quot; mode=&amp;quot;packed&amp;quot; style=&amp;quot;float:left; clear:right; margin-right:1em; margin-left:2em&amp;quot; &amp;quot;=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
File:40 Пример сравнения новые.png|Пример результатов сравнения в режиме '''Только в V1'''&lt;br /&gt;
File:41 Пример сравнения Отсутствующие.png|Пример результатов сравнения в режиме '''Только в V2'''&lt;br /&gt;
File:42 Пример сравнения Сопоставленные.png|Пример результатов сравнения в режиме '''Сопоставленные'''&lt;br /&gt;
File:43 Пример сравнения Одинаковые.png|Пример результатов сравнения в режиме '''Одинаковые'''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
:5. Посмотрите различия в параметрах анализа – нажмите кнопку '''Показать различия''' на вкладке '''Информация о различиях'''.&lt;br /&gt;
:[[File:44 Различия в результатах анализа.png|600px|thumb|none|Сравнение настроек анализа]]&lt;br /&gt;
:6. Посмотрите различия в статистике разметки – нажмите кнопку '''Различия разметок'''.&lt;br /&gt;
:[[File:45 Различия в статистике по детекторам.png|thumb|none|600px|Сравнение статистики разметок]]&lt;br /&gt;
:7. Нажмите кнопку [[File:Icon download CSV.png|x25px]] или [[File:Icon download PDF.png|x25px]], чтобы скачать статистику в формате CSV или PDF.&lt;br /&gt;
:8. Отмените сравнение – нажмите кнопку [[File:Icon cancel 2.png|x25px]] в блоке выбора проекта, ветки и снимка.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Сопоставление маркеров ===&lt;br /&gt;
{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектным доступом]] '''Разметка маркеров''' и [[#Серверные доступы|серверным доступом]] '''Администрирование сервера'''''}}&lt;br /&gt;
&lt;br /&gt;
Если при импорте снимка в ветку проекта не все маркеры были автоматически сопоставлены (сформированы инварианты), то такие маркеры можно сопоставить вручную. При сопоставлении маркеров с разметкой, инварианту присваивается разметка маркера из последнего импортированного снимка.&lt;br /&gt;
&lt;br /&gt;
Результат сопоставления, выполненного вручную, можно отменить.&lt;br /&gt;
==== Сопоставление маркеров вручную ====&lt;br /&gt;
Сопоставление маркеров вручную проводится в два этапа:&lt;br /&gt;
:а)	Выбор пар маркеров и их сопоставление, без сохранения в БД.&lt;br /&gt;
:б)	Просмотр выбранных пар и подтверждение операции.&lt;br /&gt;
&lt;br /&gt;
Чтобы вручную сопоставить маркеры:&lt;br /&gt;
:1. [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|Выберите исходный контекст]].&lt;br /&gt;
:2. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] нажмите кнопку [[File:Button Сравнить с.png|x25px]] и в раскрывшемся списке выберите пункт '''Сопоставить маркеры'''.&lt;br /&gt;
:Откроется окно '''Сопоставить маркеры'''.&lt;br /&gt;
&lt;br /&gt;
:3. &amp;lt;span id=&amp;quot;MarksStep1&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Этап 1. На вкладке '''Сопоставление маркеров''':&lt;br /&gt;
::а) Выберите снимок, маркеры которого нужно сопоставить с исходным.&lt;br /&gt;
::Отобразятся две таблицы маркеров: слева – для исходного снимка, а справа – для выбранного.&lt;br /&gt;
::б) Чтобы перед сопоставлением сравнить маркеры, выберите маркеры – по одному в каждой таблице и нажмите кнопку '''Сравнить''' (расположена над таблицей).    &lt;br /&gt;
::Отобразится окно сравнения выбранных маркеров.&lt;br /&gt;
::Если требуется, повторите операцию для других пар маркеров.&lt;br /&gt;
::в) Выберите маркеры для сопоставления – по одному в каждой таблице и нажмите кнопку '''Сопоставить''' (расположена над таблицей). Если требуется, повторите операцию для других пар маркеров. &lt;br /&gt;
::Для сопоставленных маркеров справа от названия будет отображаться номер сопоставленной пары.&lt;br /&gt;
::г) Для отмены сопоставления пары маркеров выберите любой сопоставленный маркер и нажмите '''Отменить сопоставление''' (расположена над таблицей). Если требуется, повторите операцию для других пар маркеров.&lt;br /&gt;
::д) Для просмотра фрагмента кода, в котором находится маркер – нажмите кнопку [[File:icon_preview_code.png|x25px]].&lt;br /&gt;
::е) Для отказа от дальнейшего сопоставления и отмены всех изменений нажмите кнопку '''Отмена'''.&lt;br /&gt;
::ж) Для перехода к подтверждению выбора нажмите кнопку '''Далее'''.&lt;br /&gt;
 &lt;br /&gt;
:[[File:122 Выбор снимка и сопоставление пар маркеров.png|800px|thumb|none|Окно '''Сопоставить маркеры'''. Выбор снимка и сопоставление пар маркеров]]&lt;br /&gt;
:[[File:48 Различия исходного кода.png|800px|thumb|none|Окно '''Сравнение маркеров''']]&lt;br /&gt;
&lt;br /&gt;
:4. Этап 2. В открывшейся форме:&lt;br /&gt;
::а) Проверьте список сопоставленных пар маркеров для применения операций сопоставления.&lt;br /&gt;
::б) Для корректировки списка сопоставленных пар маркеров нажмите кнопку '''Назад''' и выполните операции [[Help:UI manual#MarksStep1|Этапа 1]].&lt;br /&gt;
::в) Для отказа от дальнейшего сопоставления и отмены всех изменений нажмите кнопку '''Отмена'''.&lt;br /&gt;
::г) Для запуска операции сопоставления нажмите кнопку '''Подтвердить'''.&lt;br /&gt;
 &lt;br /&gt;
:[[File:123 Подтверждение сопоставления.png|800px|thumb|none|Окно «Сопоставить маркеры». Подтверждение сопоставления]]&lt;br /&gt;
&lt;br /&gt;
:По окончании операции для данной ветки проекта будет изменена конфигурация инвариантов. Всем пользователям, у которых открыт данный контекст, отобразится сообщение:&lt;br /&gt;
 &lt;br /&gt;
:[[File:124 Сообщение об окончании сопоставления отмены.png|800px|thumb|none|Сообщение об окончании операции сопоставления]]&lt;br /&gt;
:{{Note|type=info|text=''При сопоставлении метки маркеров удаляются.''}}&lt;br /&gt;
&lt;br /&gt;
==== Отмена операций сопоставления ====&lt;br /&gt;
Отмена операций ручного сопоставления маркеров проводится в два этапа:&lt;br /&gt;
:а) Выбор операций ручного сопоставления для отмены (отката).&lt;br /&gt;
:б) Просмотр списка всех операций, которые будут отменены, и подтверждение отмены операций сопоставления. &lt;br /&gt;
&lt;br /&gt;
Чтобы отменить (откатить) операции сопоставления:&lt;br /&gt;
:1. [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|Выберите исходный контекст]].&lt;br /&gt;
:2. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] нажмите кнопку [[File:Button Сравнить с.png|x25px]] и в раскрывшемся списке выберите пункт '''Сопоставить маркеры'''.&lt;br /&gt;
:Откроется окно '''Сопоставить маркеры'''.&lt;br /&gt;
:3. Этап 1. На вкладке '''Отмена операций сопоставления''':&lt;br /&gt;
::а) Выберите операции сопоставления маркеров, которые нужно отменить.&lt;br /&gt;
::В списке отображаются операции ручного сопоставления маркеров в исходной ветке проекта.&lt;br /&gt;
::б) Для отказа от продолжения операции нажмите кнопку '''Отмена'''.&lt;br /&gt;
::в) Для перехода к подтверждению выбора нажмите кнопку '''Далее'''.&lt;br /&gt;
 &lt;br /&gt;
:[[File:125 Выбор маркеров для отмены сопоставления.png|800px|thumb|none|Окно «Сопоставить маркеры». Выбор операций сопоставления маркеров для отмены]]&lt;br /&gt;
&lt;br /&gt;
:4. Этап 2. В открывшейся форме:&lt;br /&gt;
::а) Проверьте список операций сопоставления, которые будут отменены. Список операций, помимо выбранных пользователем операций сопоставления, может дополнительно включать другие связанные операции, которые также будут отменены.&lt;br /&gt;
::б) Для корректировки выбранных операций сопоставления маркеров  нажмите кнопку '''Назад''' и измените выбор маркеров.&lt;br /&gt;
::в) Для отказа от продолжения операции нажмите кнопку '''Отмена'''.&lt;br /&gt;
::г) Для запуска операции отмены сопоставления маркеров нажмите кнопку '''Подтвердить'''.&lt;br /&gt;
 &lt;br /&gt;
:[[File:126 Подтверждение отмены сопоставления.png|800px|thumb|none|Окно «Сопоставить маркеры». Подтверждение отмены операций сопоставления]]&lt;br /&gt;
&lt;br /&gt;
:По окончании операции для данной ветки проекта будет изменена конфигурация инвариантов. Всем пользователям, у которых открыт данный контекст, отобразится сообщение:&lt;br /&gt;
 &lt;br /&gt;
:[[File:124 Сообщение об окончании сопоставления отмены.png|800px|thumb|none|Сообщение об окончании операции отмены сопоставления]]&lt;br /&gt;
:{{Note|type=info|text=''При отмене операции сопоставления метки маркеров удаляются.''}}&lt;br /&gt;
&lt;br /&gt;
=== Сравнение маркеров ===&lt;br /&gt;
Чтобы сравнить два маркера:&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходный контекст]].&lt;br /&gt;
:2. Раскройте [[Help:UI manual#Таблица маркеров|таблицу маркеров]].&lt;br /&gt;
:3. Нажмите правой кнопкой мыши на строке маркера и выберите пункт '''Сравнить с ...''' &lt;br /&gt;
:[[File:155 Переход к сравнению маркеров.png|thumb|none|upright=2|Переход к сравнению маркеров]]&lt;br /&gt;
:Откроется окно выбора маркера для сравнения.&lt;br /&gt;
:[[File:46 Выбор маркера для сравнения.png|thumb|none|upright=3|Окно выбора маркера для сравнения]]&lt;br /&gt;
:{{Note|type=info|text=''При сравнении снимков для режимов '''Сопоставленные''' и '''Одинаковые''' в таблице маркеров по клику правой кнопкой мыши на строке маркера доступен пункт '''Сравнение с другой версией'''. При выборе данной команды происходит сравнение маркера с его версией из сравниваемого снимка.''}}&lt;br /&gt;
:4. Выберите проект, ветку и снимок. &lt;br /&gt;
:Отобразится список маркеров в выбранном снимке, где можно ввести запрос для поиска маркеров.&lt;br /&gt;
:[[File:47 Результат сравнения маркеров.png|thumb|none|upright=3|Выбор маркера для сравнения]]&lt;br /&gt;
:5. Дважды кликните на  строке маркера или нажмите кнопку '''Сравнить''', чтобы перейти в окно сравнения маркеров.&lt;br /&gt;
:[[File:48 Различия исходного кода.png|thumb|none|upright=3|Окно сравнения маркеров]]&lt;br /&gt;
&lt;br /&gt;
=== Разметка маркера ===&lt;br /&gt;
Разметка маркера заключается в установке статуса, а также опционально серьезности (критичности) и требуемого действия.&lt;br /&gt;
Установка серьезности и действия доступны только после установки статуса.&lt;br /&gt;
Разметить маркер можно [[Help:UI manual#Работа в режиме разметки|в режиме разметки]].&lt;br /&gt;
==== Разметка маркера вручную ====&lt;br /&gt;
Вручную маркер можно разметить тремя способами:&lt;br /&gt;
:1. &amp;lt;span id=&amp;quot;Marking1&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;'''''Способ 1'''''. С помощью кнопок в верхней части [[Help:UI manual#Функции правой панели|правой панели]].&lt;br /&gt;
:2. &amp;lt;span id=&amp;quot;Marking2&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;'''''Способ 2'''''. С помощью кнопок в виджете маркера [[Help:UI manual#Вкладка с исходным кодом|на вкладке с исходным кодом]].&lt;br /&gt;
:Если [[Help:UI manual#Работа с проектами|для проекта]] установлен флаг '''Обязательный комментарий при разметке''', то при разметке с помощью способов [[Help:UI manual#Marking1|1]] и [[Help:UI manual#Marking2|2]] откроется [[Help:UI manual#Marking3|окно разметки]], в котором обязательно нужно ввести комментарий.&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot; heights=&amp;quot;180px&amp;quot; style=&amp;quot;float:left; clear:right; margin-right:1em; margin-left:0&amp;quot;&amp;gt;&lt;br /&gt;
  49 Разметка Статус.png|Выбор статуса разметки маркера&lt;br /&gt;
  50 Разметка Серьезность.png|Выбор серьезности разметки маркера&lt;br /&gt;
  51 Разметка Действие.png|Выбор действия разметки маркера&lt;br /&gt;
  127 Кнопки разметки в виджете маркера.png|Кнопки разметки в виджете маркера на вкладке с исходным кодом&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
:3. '''''Способ 3'''''. В отдельном окне разметки вручную. Для этого:&lt;br /&gt;
::а) Нажмите кнопку [[File:Icon edit.png|x25px]] в верхней части правой панели или в виджете маркера на вкладке с исходным кодом.&lt;br /&gt;
::Откроется &amp;lt;span id=&amp;quot;Marking3&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; окно '''Разметка'''.&lt;br /&gt;
&amp;lt;gallery heights=&amp;quot;200&amp;quot; perrow=&amp;quot;2&amp;quot; mode=&amp;quot;packed&amp;quot; style=&amp;quot;float:left; clear:right; margin-right:1em; margin-left:1em&amp;quot;&amp;gt;&lt;br /&gt;
  235 Окно Разметка.png|Окно «Разметка» &lt;br /&gt;
  File:99 Окно разметки.png|Окно разметки. Поле '''Комментарий''' – обязательное&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
::б) Выберите статус, а также опционально серьезность (критичность) и требуемое действие.&lt;br /&gt;
::в) Введите комментарий.&lt;br /&gt;
::Если [[Help:UI manual#Работа с проектами|для проекта]] установлен флаг '''Обязательный комментарий при разметке''', то добавление комментария обязательно.&lt;br /&gt;
::Редактор комментариев поддерживает синтаксис Markdown.&lt;br /&gt;
::Для упоминания пользователя, вставьте '''@''' и введите или выберите его логин. После добавления комментария по нажатии кнопки '''Применить''' указанному пользователю придет [[Help:UI manual#Просмотр уведомлений в интерфейсе Системы|уведомление в интерфейсе системы]] об упоминании с возможностью перехода к маркеру с этим комментарием.&lt;br /&gt;
::г) Нажмите кнопку '''Применить'''.&lt;br /&gt;
&lt;br /&gt;
Результаты разметки со связанными комментариями отображаются [[Help:UI manual#Функции правой панели|в правой панели]] на вкладке '''Комментарии'''. При этом можно поменять текст комментария, но не результат разметки. Для её изменения нужно заново установить статус, серьёзность и действие.&lt;br /&gt;
:[[File:100 Правая панель Комментарии с разметкой.png|300px|thumb|none|Правая панель. Комментарии, добавленные при разметке]]&lt;br /&gt;
&lt;br /&gt;
==== Разметка маркера с помощью ассистента AI ====&lt;br /&gt;
{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектными доступами]] '''Разметка маркеров''' и '''Импорт разметки'''''}}&lt;br /&gt;
Чтобы разметить маркер с помощью ассистента AI:&lt;br /&gt;
:1. Нажмите кнопку [[File:Icon edit.png|x25px]] в верхней части правой панели или в виджете маркера на вкладке с исходным кодом.&lt;br /&gt;
Откроется окно '''Разметка'''.&lt;br /&gt;
:2. Смените режим разметки с помощью переключателя '''Режим разметки с помощью AI'''.&lt;br /&gt;
:3. В отобразившемся режиме разметки выберите '''Модель AI''', с помощью которой ассистент AI рассчитает статус разметки.&lt;br /&gt;
:Спрогнозированный статус и уровень доверия прогнозу отобразятся в этом же окне. Если модель AI не смогла предсказать статус разметки, то отобразится значение '''n/a''' и кнопка '''Применить''' будет неактивна.&lt;br /&gt;
:Если маркер уже размечен и его статус совпадает с прогнозным, то в окне отобразится сообщение об этом и дальнейшая разметка станет недоступна.&lt;br /&gt;
:[[File:236 Окно Разметка AI.png|400px|thumb|none|Окно «Разметка». Режим разметки с помощью ассистента AI]]&lt;br /&gt;
:4. Введите комментарий.&lt;br /&gt;
:5. Нажмите кнопку '''Применить'''.&lt;br /&gt;
Результаты разметки со связанными комментариями отображаются [[Help:UI manual#Функции правой панели|в правой панели]] на вкладке '''Комментарии'''. При этом можно поменять текст комментария, но не результат разметки. Для её изменения нужно заново установить статус, серьёзность и действие.&lt;br /&gt;
Комментарий, добавленный при разметке с помощью ассистента AI, дополнительно содержит информацию о проведенной разметке: время, имя модели машинного обучения, уровень доверия прогнозу. Также для такого маркера в правой панели на вкладке '''Подробности''' присвоена метка '''AI'''.&lt;br /&gt;
&amp;lt;gallery heights=&amp;quot;210&amp;quot; perrow=&amp;quot;2&amp;quot; mode=&amp;quot;packed&amp;quot; style=&amp;quot;float:left; clear:right; margin-right:1em; margin-left:1em&amp;quot;&amp;gt;&lt;br /&gt;
  237 Разметка комментарий AI.png|Правая панель.&amp;lt;/br&amp;gt;Комментарий, добавленный при разметке с помощью ассистента AI &lt;br /&gt;
  238 Разметка метка AI.png|Правая панель.&amp;lt;/br&amp;gt;Метка AI на вкладке «Подробности»&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Групповая разметка маркеров ===&lt;br /&gt;
==== Групповая разметка маркеров вручную ====&lt;br /&gt;
Для групповой разметки маркеров вручную:&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходные проект, ветку и снимок]].&lt;br /&gt;
:2. Включите отображение [[Help:UI manual#Таблица маркеров|таблицы маркеров]].&lt;br /&gt;
:3. Выберите маркеры для разметки – установите флажки в строках таблицы.&lt;br /&gt;
:4. Нажмите кнопку [[File:icon edit.png|x25px]] (доступна, если выбраны маркеры в таблице).&lt;br /&gt;
:&amp;lt;span id=&amp;quot;GroupMark1&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[File:53 Выбор маркеров для группразметки.png|thumb|none|upright=2.5|Выбор маркеров для групповой разметки]]&lt;br /&gt;
:Отобразится окно для групповой разметки.&lt;br /&gt;
:&amp;lt;span id=&amp;quot;GroupMark2&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[File:54 Окно групповой разметки.png|thumb|none|upright=2.5|Окно групповой разметки]]&lt;br /&gt;
:5. Выберите статус разметки, а затем (опционально) статус серьезности (критичности) и требуемое действие – нажмите кнопки со значениями.&lt;br /&gt;
:6. Добавьте общий комментарий для выбранных маркеров.&amp;lt;br /&amp;gt;&lt;br /&gt;
:Редактор комментариев поддерживает синтаксис Markdown.&lt;br /&gt;
:Для упоминания пользователя, вставьте '''@''' и введите или выберите его логин. После добавления комментария по нажатии кнопки '''Применить''' указанному пользователю придет [[Help:UI manual#Просмотр уведомлений в интерфейсе Системы|уведомление в интерфейсе системы]] об упоминании с возможностью перехода к этому комментарию.&lt;br /&gt;
:После того, как пользователь или ассистент AI присвоил статусы и (или) написал комментарий, станет доступной кнопка '''Применить'''.&amp;lt;br /&amp;gt;&lt;br /&gt;
:{{Note|type=info|text=''Ввод комментария обязателен, если [[Help:UI manual#Работа с проектами|для проекта]] установлен флаг '''Обязательный комментарий при разметке'''''.}}&lt;br /&gt;
:7. Если требуется отменить изменения, нажмите [[File:icon cross 01.png|x15px]] в правом верхнем углу окна или кнопку '''Отмена'''.&amp;lt;br /&amp;gt;Диалоговое окно закроется, изменения не будут применены, выделение с выбранных для разметки маркеров не снимается.&lt;br /&gt;
:8. Нажмите кнопку '''Применить''', чтобы запустить процесс разметки.&amp;lt;br /&amp;gt;&lt;br /&gt;
Прогресс разметки отображается в соответствующем окне. Запущенный процесс можно полностью отменить нажатием кнопки '''Отмена'''.&amp;lt;br /&amp;gt;&lt;br /&gt;
В результате применения разметки текст маркеров [[Help:UI manual#Таблица маркеров|в таблице маркеров]] окрасится в цвет, соответствующий выставленному статусу.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;GroupMark3&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;gallery widths=&amp;quot;400&amp;quot; mode=&amp;quot;nolines&amp;quot; style=&amp;quot;float:center; clear:center; margin-right:1em; margin-left:0&amp;quot;&amp;gt;&lt;br /&gt;
  56 Окно прогресса разметки.png|Окно прогресса разметки&lt;br /&gt;
  57 Результат групповой разметки.png|Пример таблицы маркеров после применения групповой разметки&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Групповая разметка маркеров с помощью ассистента AI ====&lt;br /&gt;
{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектными доступами]] '''Разметка маркеров''' и '''Импорт разметки'''''}}&lt;br /&gt;
Чтобы разметить группу маркеров с помощью ассистента AI:&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходные проект, ветку и снимок]].&lt;br /&gt;
:2. Включите отображение [[Help:UI manual#Таблица маркеров|таблицы маркеров]].&lt;br /&gt;
:3. [[Help:UI manual#GroupMark1|Выберите маркеры для разметки]] – установите флажки в строках таблицы.&lt;br /&gt;
:4. Нажмите кнопку [[File:icon edit.png|x25px]] (доступна, если выбраны маркеры в таблице).&lt;br /&gt;
:[[File:53 Выбор маркеров для группразметки.png|thumb|none|upright=2.5|Выбор маркеров для групповой разметки]]&lt;br /&gt;
:Отобразится [[Help:UI manual#GroupMark2|окно для групповой разметки]].&lt;br /&gt;
:5. Смените режим разметки с помощью переключателя '''Режим разметки с помощью AI'''.&lt;br /&gt;
:6. В отобразившемся режиме разметки выберите '''Модель AI''', с помощью которой ассистент AI рассчитает статус разметки.&lt;br /&gt;
:Спрогнозированный статус и уровень доверия прогнозу отобразятся в этом же окне в строке каждого выбранного маркера. Если модель AI не смогла предсказать статус разметки, то отобразится значение '''n/a''' и установка флажка столбце '''Статус разметки''' будет недоступна. &lt;br /&gt;
:7. Выберите маркеры для разметки – установите флажки в столбце '''Статус разметки'''.&lt;br /&gt;
:Если маркер уже размечен и его статус совпадает с прогнозным, то установка флажка в его строке недоступна.&lt;br /&gt;
:[[File:239 Групповая разметка AI.png|thumb|none|upright=2.5|Окно групповой разметки. Режим разметки с помощью ассистента AI]]&lt;br /&gt;
:8. Добавьте общий комментарий для выбранных маркеров.&amp;lt;br /&amp;gt;&lt;br /&gt;
:Редактор комментариев поддерживает синтаксис Markdown.&lt;br /&gt;
:Для упоминания пользователя, вставьте '''@''' и введите или выберите его логин. После добавления комментария по нажатии кнопки '''Применить''' указанному пользователю придет [[Help:UI manual#Просмотр уведомлений в интерфейсе Системы|уведомление в интерфейсе системы]] об упоминании с возможностью перехода к этому комментарию.&lt;br /&gt;
:После того, как пользователь или ассистент AI присвоил статусы и (или) написал комментарий, станет доступной кнопка '''Применить'''.&amp;lt;br /&amp;gt;&lt;br /&gt;
:{{Note|type=info|text=''Ввод комментария обязателен, если [[Help:UI manual#Работа с проектами|для проекта]] установлен флаг '''Обязательный комментарий при разметке'''''.}}&lt;br /&gt;
:9. Если требуется отменить изменения, нажмите [[File:icon cross 01.png|x15px]] в правом верхнем углу окна или кнопку '''Отмена'''.&amp;lt;br /&amp;gt;Диалоговое окно закроется, изменения не будут применены, выделение с выбранных для разметки маркеров не снимается.&lt;br /&gt;
:10. Нажмите кнопку '''Применить''', чтобы запустить процесс разметки.&amp;lt;br /&amp;gt;&lt;br /&gt;
Прогресс разметки отображается в [[Help:UI manual#GroupMark3|соответствующем окне]]. Запущенный процесс можно полностью отменить нажатием кнопки '''Отмена'''.&amp;lt;br /&amp;gt;&lt;br /&gt;
В результате применения разметки текст маркеров [[Help:UI manual#Таблица маркеров|в таблице маркеров]] окрасится в цвет, соответствующий выставленному статусу.&lt;br /&gt;
&lt;br /&gt;
=== Блокировка разметки маркеров===&lt;br /&gt;
Пользователь может заблокировать другим пользователям возможность [[Help:UI manual#Разметка маркера|размечать маркер]] или [[Help:UI manual#Групповая разметка маркеров|группу маркеров]]. Это позволяет избежать коллизий при разметке маркеров несколькими пользователями.&lt;br /&gt;
&lt;br /&gt;
Для блокировки разметки используйте кнопку [[File:icon unlocked.png|x25px]] в следующих частях пользовательского интерфейса:&lt;br /&gt;
:1. [[Help:UI manual#Вкладка «Детекторы»|На вкладке '''Детекторы''']]. В этом случае блокировка распространяется на все маркеры выбранного детектора в открытом проекте и ветке, для всех снимков ветки.&lt;br /&gt;
:2. [[Help:UI manual#Вкладка «Файлы»|На вкладке '''Файлы''']]. В этом случае блокировка распространяется на все маркеры в выбранном файле в открытом проекте и ветке, для всех снимков ветки.&lt;br /&gt;
:3. В верхней части [[Help:UI manual#Функции правой панели|правой панели]]. В этом случае блокировка распространяется на все эквивалентные маркеры в открытом проекте и ветке, для всех снимков ветки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;packed&amp;quot; heights=&amp;quot;200px&amp;quot; perrow=&amp;quot;2&amp;quot; style=&amp;quot;float:left; clear:right; margin-right:1em; margin-left:1em&amp;quot;&amp;gt;&lt;br /&gt;
  58 Блокировка на вкладке Детекторы.png|Блокировка маркера на вкладке '''Детекторы'''&lt;br /&gt;
  File:59_Блокировка_на_вкладке_Файлы.png|Блокировка маркера на вкладке '''Файлы'''&lt;br /&gt;
  60_Блокировка_на_правой_панели.png|Блокировка маркера на правой панели&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;br clear=all /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если один пользователь заблокировал маркер, то другой пользователь не сможет заблокировать детектор, которому принадлежит этот маркер, и файл, в котором этот маркер найден.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Чтобы посмотреть все блокировки, перейдите в раздел [[Help:UI manual#Настройка сервера Svacer|'''Настройки''']] на [[Help:UI manual#Управление блокировками разметки|вкладку '''Блокировки''']]:&lt;br /&gt;
&lt;br /&gt;
[[File:61 Просмотр всех блокировок.png|thumb|none|upright=3.5|Таблица блокировок]]&lt;br /&gt;
&lt;br /&gt;
В этом разделе можно удалить только свои блокировки. Пользователь с доступом '''Удаление блокировок''' может удалить любые блокировки.&lt;br /&gt;
&lt;br /&gt;
=== Добавление комментария к нескольким маркерам ===&lt;br /&gt;
Для добавления комментария к нескольким маркерам одновременно:&lt;br /&gt;
:1. В режиме разметки [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходный контекст]] – проект, ветку, снимок.&lt;br /&gt;
:2. Включите отображение [[Help:UI manual#Таблица Маркеров|таблицы маркеров]].&lt;br /&gt;
:3. Выберите маркеры для разметки – установите флажки в строках таблицы.&lt;br /&gt;
:4. Нажмите кнопку [[File:Button Comment Add.png|x25px]] (доступна, если выбраны маркеры в таблице).&lt;br /&gt;
 &lt;br /&gt;
:[[File:128 Добавление общего комментария 1.png|400px|thumb|none|Выбор маркеров для добавления комментария к нескольким маркерам одновременно]]&lt;br /&gt;
:5. Отобразится окно для добавления комментария к нескольким маркерам одновременно.&lt;br /&gt;
 &lt;br /&gt;
:[[File:129 Добавление общего комментария 2.png|600px|thumb|none|Окно добавления комментария к нескольким маркерам одновременно]]&lt;br /&gt;
:6. Введите комментарий.&lt;br /&gt;
:Редактор комментариев поддерживает синтаксис Markdown.&lt;br /&gt;
:Для упоминания пользователя, вставьте '''@''' и введите или выберите его логин. После добавления комментария по нажатии кнопки '''Применить''' указанному пользователю придет [[Help:UI manual#Просмотр уведомлений в интерфейсе Системы|уведомление в интерфейсе системы]] об упоминании с возможностью перехода к маркеру с этим комментарием.&lt;br /&gt;
:8. Нажмите кнопку '''Сохранить'''.&lt;br /&gt;
&lt;br /&gt;
=== Экспорт ===&lt;br /&gt;
В режиме разметки можно выполнить экспорт:&lt;br /&gt;
* [[Help:UI manual#Экспорт исходного кода с разметкой|исходного кода с разметкой]];&lt;br /&gt;
* [[Help:UI manual#Экспорт снимка в формате snap|снимка в формате snap]];&lt;br /&gt;
* [[Help:UI manual#Экспорт разметки и снимка в SARIF|снимка в формате SARIF]];&lt;br /&gt;
* [[Help:UI manual#Экспорт разметки|разметки в файл]].&lt;br /&gt;
{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектным доступом]] '''Экспорт снимков'''''}}&lt;br /&gt;
&lt;br /&gt;
==== Экспорт исходного кода с разметкой ====&lt;br /&gt;
Чтобы экспортировать с сервера исходный код с разметкой (опционально):&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходный контекст]] – проект, ветку и снимок.&lt;br /&gt;
:2. На вкладке '''Информация о снимке''' нажмите кнопку '''Экспорт''' и выберите пункт '''Исходный код с разметкой'''.&lt;br /&gt;
:[[File:62 Переход к экспорту кода с разметкой.png|600px|thumb|none|Переход к экспорту кода с разметкой]]&lt;br /&gt;
:3. В открывшемся окне:&lt;br /&gt;
::а) Если требуется экспортировать разметку, установите флажок параметра '''Шаблон разметки''' и выберите шаблон для экспорта в списке справа. &lt;br /&gt;
::б) Опционально включите или выключите очистку старых комментариев.&lt;br /&gt;
::в) Опционально включите или выключите экспорт файлов с исходным кодом только выбранных в таблице маркеров или для всех маркеров в таблице, если маркеры не выбраны. &lt;br /&gt;
::г) Опционально заполните поля для удаления префиксов и исключения путей.&lt;br /&gt;
::д) Опционально введите регулярные выражения для очистки дополнительных строк (доступен, если включена очистка старых комментариев).&lt;br /&gt;
::[[File:63 Окно экспорта кода с разметкой.png|600px|thumb|none|Окно экспорта кода с разметкой]]&lt;br /&gt;
&lt;br /&gt;
::Пример удаления префиксов путей: &amp;lt;code&amp;gt;/.build/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::При экспорте можно исключить файлы, соответствующие [[Help:UI manual#Использование регулярных выражений|регулярным выражениям]] в поле '''Исключить пути'''. &lt;br /&gt;
:4. Нажмите кнопку '''Экспортировать'''.&lt;br /&gt;
В итоге создастся архив файлов с исходным кодом и, если был выбран шаблон разметки, то в исходный код будет добавлена актуальная разметка, в соответствии с выбранным шаблоном.&lt;br /&gt;
&lt;br /&gt;
==== Экспорт снимка в формате snap ====&lt;br /&gt;
Чтобы экспортировать с сервера исходный код снимка в формате .snap:&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходный контекст]] – проект, ветку и снимок.&lt;br /&gt;
:2. На вкладке '''Информация о снимке''' нажмите кнопку '''Экспорт''' и выберите пункт '''Снимок (*.snap)'''.&lt;br /&gt;
:[[File:192 Разметка. Переход к экспорту снимка в формате snap.png|600px|thumb|none|Переход к экспорту снимка в формате snap]]&lt;br /&gt;
:Запустится формирование файла. При старте и по окончании экспорта пользователю отобразится соответствующее всплывающее сообщение.&lt;br /&gt;
:[[File:193 Сообщение. Экспорт снимка.png|thumb|600px|thumb|none|Пример всплывающих сообщений при старте и окончании экспорта снимка]]&lt;br /&gt;
&lt;br /&gt;
==== Экспорт разметки и снимка в SARIF ====&lt;br /&gt;
Чтобы экспортировать разметку и при необходимости исходный код снимка в файл формата SARIF:&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходный контекст]] – проект, ветку и снимок.&lt;br /&gt;
:2. На вкладке '''Информация о снимке''' нажмите кнопку '''Экспорт''' и выберите пункт '''SARIF'''.&lt;br /&gt;
:[[File:194 Разметка. Переход к экспорту снимка SARIF.png|thumb|600px|thumb|none|Переход к экспорту снимка SARIF]]&lt;br /&gt;
:3. В открывшемся окне:&lt;br /&gt;
::а) Выключите (опционально) формирование название файла по умолчанию – снимите соответствующий флажок и введите название снимка. &lt;br /&gt;
::б) Опционально включите или выключите экспорт исходных файлов.&lt;br /&gt;
::в) Нажмите кнопку '''Экспортировать'''.&lt;br /&gt;
:[[File:195 Окно экспорта SARIF.png|thumb|600px|thumb|none|Окно экспорта снимка SARIF]]&lt;br /&gt;
:Запустится формирование файла. При старте и по окончании экспорта пользователю отобразится всплывающее сообщение.&lt;br /&gt;
:[[File:220 Сообщение. Экспорт SARIF.png|thumb|400px|thumb|none|Пример всплывающих сообщений при старте и окончании экспорта снимка в SARIF]]&lt;br /&gt;
&lt;br /&gt;
==== Экспорт разметки ====&lt;br /&gt;
Чтобы из ветки проекта экспортировать в файл разметку и/или комментарии:&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходный контекст]] – проект, ветку и снимок.&lt;br /&gt;
:2. На вкладке '''Информация о снимке''' нажмите кнопку '''Экспорт''' и выберите пункт '''Разметка'''.&lt;br /&gt;
:[[File:196 Разметка. Переход к экспорту разметки.png|thumb|thumb|thumb|600px|none|Переход к экспорту разметки]]&lt;br /&gt;
:3. В открывшемся окне:&lt;br /&gt;
::а) Выберите вариант экспорта. &lt;br /&gt;
::б) Если требуется экспортировать неразмеченные маркеры, установите флажок '''Включая разметку со статусом &amp;quot;Undecided&amp;quot;'''.&lt;br /&gt;
::в) Нажмите кнопку '''Экспортировать'''.&lt;br /&gt;
:[[File:197 Окно экспорта разметки.png|thumb|thumb|thumb|600px|none|Окно экспорта разметки]]&lt;br /&gt;
&lt;br /&gt;
=== Импорт разметки ===&lt;br /&gt;
В режиме разметки можно импортировать разметку из двух источников:&lt;br /&gt;
* [[Help:UI manual#Импорт разметки из файла|из файла]];&lt;br /&gt;
* [[Help:UI manual#Импорт разметки из исходного кода|из исходного кода снимка]].&lt;br /&gt;
{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектным доступом]] '''Импорт разметки'''''}}&lt;br /&gt;
&lt;br /&gt;
==== Импорт разметки из файла ====&lt;br /&gt;
Чтобы импортировать файл с разметкой:&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходный контекст]] – проект, ветку и снимок.&lt;br /&gt;
:2. На вкладке '''Информация о снимке''' нажмите кнопку '''Импорт''' и выберите пункт '''Разметка из файла'''.&lt;br /&gt;
:[[File:198 Разметка. Переход к импорту разметки из файла.png|thumb|thumb|thumb|600px|none|Переход к импорту файла с разметкой]]&lt;br /&gt;
:3. В открывшемся окне:&lt;br /&gt;
::а) Выберите файл архива в формате .gz. &lt;br /&gt;
::б) Выберите варианты импорта и действия при наличии конфликта разметки.&lt;br /&gt;
::в) Нажмите кнопку '''Импортировать'''.&lt;br /&gt;
:[[File:199 Окно импорта файла с разметкой.png|thumb|600px|thumb|none|Окно импорта файла с разметкой]]&lt;br /&gt;
:По окончании пользователю отобразится всплывающее сообщение с информацией о выполненной операции.&lt;br /&gt;
:[[File:200 Сообщение. Импорт разметки из файла.png|thumb|thumb|thumb|600px|none|Пример всплывающего сообщения об окончании импорта разметки из файла]]&lt;br /&gt;
&lt;br /&gt;
==== Импорт разметки из исходного кода ====&lt;br /&gt;
Чтобы импортировать разметку из исходного кода снимка в ветку проекта:&lt;br /&gt;
:1. [[Help:UI manual#Работа в режиме разметки|В режиме разметки]] [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|выберите исходный контекст]] – проект, ветку и снимок.&lt;br /&gt;
:2. На вкладке '''Информация о снимке''' нажмите кнопку '''Импорт''' и выберите пункт '''Разметка из исходного кода'''.&lt;br /&gt;
:[[File:201 Разметка. Переход к импорту разметки из кода.png|thumb|thumb|thumb|thumb|600px|none|Переход к импорту исходного кода с разметкой]]&lt;br /&gt;
:3. В открывшемся окне выберите шаблон разметки и нажмите кнопку '''Импортировать'''.&lt;br /&gt;
:[[File:134_Импорт_разметки.png|thumb|thumb|thumb|600px|none|Окно импорта исходного кода с разметкой]]&lt;br /&gt;
:По окончании пользователю отобразится всплывающее сообщение с информацией о выполненной операции.&lt;br /&gt;
:[[File:203 Сообщение. Импорт разметки из кода.png|thumb|thumb|thumb|thumb|600px|none|Пример всплывающего сообщения об окончании импорта разметки из исходного кода снимка]]&lt;br /&gt;
&lt;br /&gt;
=== Работа с таблицей статистики ===&lt;br /&gt;
Чтобы посмотреть краткую статистику о разметке маркеров:&lt;br /&gt;
:1. [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|Выберите исходный контекст]].&lt;br /&gt;
:2. Перейдите [[Help:UI manual#Работа в режиме разметки|в режим разметки]].&lt;br /&gt;
:3. На вкладке '''Информация о снимке''' в строке свойства '''Статистика по детекторам''' нажмите кнопку '''Показать'''.&lt;br /&gt;
&lt;br /&gt;
:[[File:64 Переход к просмотру статистики.png|600px|thumb|none|Переход к просмотру статистики]]&lt;br /&gt;
&lt;br /&gt;
:Отобразится таблица статистики:&lt;br /&gt;
:[[File:65 Таблица статистики.png|600px|thumb|none|Таблица статистики]]&lt;br /&gt;
:4. Нажмите кнопку [[File:Icon download CSV.png|x20px]] или [[File:Icon download PDF.png|x20px]], чтобы выгрузить статистику в соответствующем формате.&lt;br /&gt;
:5. Нажмите кнопку [[File:Icon filter.png|x20px]] в строке статистики, чтобы применить [[Help:UI manual#Настройка и использование пользовательских фильтров|пользовательский фильтр]] с параметрами, которые соответствуют выбранному значению.&lt;br /&gt;
&lt;br /&gt;
== Работа в режиме просмотра кода ==&lt;br /&gt;
Режим позволяет посмотреть исходный код снимков, который был обработан анализатором Svace.&lt;br /&gt;
&lt;br /&gt;
Для этого:&lt;br /&gt;
:1. Перейдите в режим просмотра кода по кнопке меню [[File:Button Код.png|x25px]] в верхней части экрана.&lt;br /&gt;
:2. [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|Выберите исходный контекст]].&amp;lt;br&amp;gt;&lt;br /&gt;
:{{Note|type=info|text=''По умолчанию выбран контекст (проект, ветка), заданный ранее в режиме [[Help:UI manual#Работа в режиме разметки|'''Разметка''']]. Если Пользователь перешел в раздел '''Кoд''' из режима сравнения снимков раздела [[Help:UI manual#Работа в режиме разметки|'''Разметка''']], то для изменения контекста требуется отменить режим сравнения.''}}&lt;br /&gt;
:В левой части экрана отобразится иерархический список файлов снимка, а в правой – поле для отображения исходного кода файла.&lt;br /&gt;
:[[File:67 Режим просмотра кода.png|600px|thumb|none|Режим просмотра кода. Начальное состояние]]&lt;br /&gt;
:3. Для поиска файла:&lt;br /&gt;
::а) Кликните на поле поиска или нажмите комбинацию клавиш '''Ctrl+Shift+O'''.&lt;br /&gt;
::б) В открывшемся окне введите поисковый запрос и выберите файл.&lt;br /&gt;
:4. В левой части экрана раскройте группу файлов и нажмите на имя файла.&lt;br /&gt;
:В правой части отобразится исходный код файла.&lt;br /&gt;
:[[File:68 Режим просмотра кода открыт один файл.png|600px|thumb|none|Пример одного открытого файла]]&lt;br /&gt;
:5. Если требуется, откройте другие файлы.&lt;br /&gt;
:Они отобразятся на отдельных вкладках, если выключена [[Help:UI manual#Настройка профиля пользователя|настройка '''Переиспользование вкладки в редакторе кода''']].&lt;br /&gt;
:[[File:69 Режим просмотра кода открыто три файла.png|600px|thumb|none|Пример трёх открытых файлов]]&lt;br /&gt;
:6. Для перехода к предыдущей или следующей строке, в которую пользователь устанавливал курсор, используйте кнопки [[File:Button left.png|x25px]] и [[File:Button right.png|x25px]] или сочетания клавиш '''Ctrl+&amp;lt; и Ctrl+&amp;gt;'''.&lt;br /&gt;
:7. Вызовите функции, доступные по нажатии правой кнопки мыши на строке исходного кода&lt;br /&gt;
:* '''Перейти к объявлению''' – для перехода к строке, в которой объявлена переменная;&lt;br /&gt;
:* '''Перейти к определению''' – для перехода к строке, в которой определена переменная и функция;&lt;br /&gt;
:* '''Найти ссылки''' – для просмотра ссылок в панели с иерархическим списком файлов, именами файлов и номерами строк, в которых найдены ссылки;&lt;br /&gt;
::{{Note|type=info|text=''Если для выделенного элемента кода нет объявления, определения или ссылок, то отобразится сообщение: [[File:150 Объявление не найдено.png|x25px]], [[File:151 Определение не найдено.png|x25px]] или [[File:152 Ссылки не найдены.png|x25px]].''}}&lt;br /&gt;
::[[File:24 Исходный код Cписок файлов со ссылками.png|thumb|none|600px|Cписок файлов с номерами строк, в которых найдены ссылки]]&lt;br /&gt;
:* '''Копировать прямую ссылку''' – копирование ссылки на строку кода в буфер обмена. &lt;br /&gt;
::При переходе по этой ссылке будет открываться файл в режиме просмотра кода с курсором на той строке кода, для которой была скопирована ссылка;&lt;br /&gt;
:* '''Уменьшить''' и '''Увеличить''' – увеличение и уменьшение размера шрифта кода (эти функции также можно вызвать с помощью сочетаний клавиш '''Ctrl+Alt+-''' или '''Ctrl+Alt+=''').&lt;br /&gt;
:* '''Copy''' – для копирования строки в буфер обмена;&lt;br /&gt;
:* '''Command Palette''' – для вызова командной строки.&lt;br /&gt;
:6. Установите курсор в строке кода, чтобы отобразилось его позиционирование в правом нижнем углу.&lt;br /&gt;
:[[File:130 Позиционирование к коде.png|600px|thumb|none|Отображение позиционирования курсора в коде]]&lt;br /&gt;
:7. Сравните файлы – для этого:&lt;br /&gt;
::а) Нажмите правой кнопки мыши на имени файла и выберите пункт '''Сравнить с…'''&lt;br /&gt;
::[[File:156 Переход к сравнению файлов.png|thumb|none|600px|Переход к сравнению файлов]]&lt;br /&gt;
::б) В открывшемся окне выберите файл для сравнения. Для этого выберите проект, ветку и снимок, а затем раскройте группы файлов или воспользуйтесь поисковой строкой, нажмите на имя файла. &lt;br /&gt;
::По умолчанию выбраны проект и ветка исходного контекста.&lt;br /&gt;
::в)  Нажмите кнопку '''Сравнить'''.&lt;br /&gt;
:Откроется окно сравнения файлов.&lt;br /&gt;
 &lt;br /&gt;
:[[File:Code compare 2.png|600px|thumb|none|Окно выбора файла для сравнения]]&lt;br /&gt;
 &lt;br /&gt;
:[[File:Code_compare_3.png|600px|thumb|none|Окно сравнения файлов]]&lt;br /&gt;
&lt;br /&gt;
==Управление проектами и группами проектов==&lt;br /&gt;
В разделе '''Проекты''' отображаются все проекты со всеми ветками и снимками. &lt;br /&gt;
Для удобства работы проекты могут быть [[Help:UI manual#Работа с группами проектов|сгруппированы]]. Один проект может быть включен в несколько групп проектов.&lt;br /&gt;
[[File:101 Раздел Проекты.png|thumb|none|upright=3|Раздел '''Проекты''']]&lt;br /&gt;
&lt;br /&gt;
===Работа с проектами===&lt;br /&gt;
Список проектов отображается в левой части экрана и организован в виде иерархии. При этом:&lt;br /&gt;
* для проектов, разметку маркеров которых нужно в обязательном порядке снабжать комментариями, отображается иконка [[File:Icon comment.png|x25px]];&lt;br /&gt;
* в нижней части списка отображается общее количество проектов и веток с учетом примененных фильтров, а также выбранных проектов и веток.&lt;br /&gt;
В списке доступны:&lt;br /&gt;
* поиск по имени проекта;&lt;br /&gt;
* фильтрация списка по группам проектов;&lt;br /&gt;
* сортировка по названию или дате создания (по умолчанию – по названию).&lt;br /&gt;
При работе с проектами пользователю доступны следующие функции: &lt;br /&gt;
:1.	Загрузка актуальных данных с сервера – для этого нажмите кнопку [[File:Icon refresh.png|x25px]].&lt;br /&gt;
:2.	Просмотр списка веток – для этого нажмите на название проекта.&lt;br /&gt;
:Ветки отобразятся в этом же списке проекта на втором уровне.&lt;br /&gt;
:3.	Просмотр списка снимков – для этого нажмите на название ветки.&lt;br /&gt;
:Список снимков отобразится в виде таблицы в правой части экрана.&lt;br /&gt;
:4.	[[Help:UI manual#Работа с группами проектов|Группировка проектов]].&lt;br /&gt;
:5.	Создание проекта:&lt;br /&gt;
::а) Нажмите кнопку '''Создать проект'''.&lt;br /&gt;
::Откроется окно создания проекта.&lt;br /&gt;
::[[File:102 Создание проекта.png|thumb|none|upright=1.5|Окно создания проекта]]&lt;br /&gt;
::б) Введите название проекта.&lt;br /&gt;
::в) Для выбора одной или нескольких существующих групп кликните на поле '''Группы''' и выберите одно или несколько значений в списке:&lt;br /&gt;
::[[File:157 Окно создания проекта. Выбор существующей группы.png|thumb|none|upright=1.5|Окно создания проекта. Пример выбора существующей группы]]&lt;br /&gt;
::г) Для создания одной новой группы введите ее название и нажмите кнопку '''Создать''' в появившейся форме:&lt;br /&gt;
::[[File:158 Окно создания проекта.Создание одной группы.png|thumb|none|upright=1.5|Окно создания проекта. Пример создания одной группы]]&lt;br /&gt;
::д) Для создания нескольких новых групп введите их названия через запятую и нажмите кнопку '''Создать''' в появившейся форме:&lt;br /&gt;
::[[File:159 Окно создания проекта. Создание нескольких групп.png|thumb|none|upright=1.5|Окно создания проекта. Пример создания двух групп]]&lt;br /&gt;
::е) Установите флажок, если требуется при разметке маркеров обязательно добавлять комментарий.&lt;br /&gt;
::ж) Нажмите кнопку '''Создать'''.&lt;br /&gt;
:При создании проекта автоматически создается ветка '''master'''.&lt;br /&gt;
:При импорте снимка в интерфейсе командной строки проект, при его отсутствии, добавляется автоматически.&lt;br /&gt;
:6.	Добавление ветки: [[File:103 Создание ветки.png|thumb|right|none|upright=1.5|Окно добавления ветки в проект]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке проекта.&lt;br /&gt;
::б) В меню выберите пункт '''Создать ветку'''.&lt;br /&gt;
::в) В открывшемся окне введите название ветки и нажмите кнопку '''Создать'''.&lt;br /&gt;
:При импорте снимка в интерфейсе командной строки ветка, при ее отсутствии, добавляется автоматически.&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
:7. Клонирование проекта со всеми ветками и снимками: [[File:132 Окно клонирования проекта.png|thumb|right|none|upright=1.5|Окно клонирования проекта]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке проекта.&lt;br /&gt;
::б) В меню выберите пункт '''Клонировать'''.&lt;br /&gt;
::в) В открывшемся окне введите название нового проекта, при необходимости скорректируйте группы, в которые будет входить клонированный проект (по умолчанию, группы исходного проекта) и нажмите кнопку '''Клонировать'''.&lt;br /&gt;
&amp;lt;/br&amp;gt; &lt;br /&gt;
:9.	Редактирование параметров проекта:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке проекта.&lt;br /&gt;
::б) В меню выберите пункт '''Редактировать'''.&lt;br /&gt;
::в) В открывшемся окне измените название проекта, скорректируйте список групп, в которые включен проект, и установите или снимите флажок обязательности комментария при разметке и нажмите кнопку '''Сохранить'''.&lt;br /&gt;
:10.	Удаление одного проекта:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке проекта.&lt;br /&gt;
::б) В меню выберите пункт '''Удалить'''.&lt;br /&gt;
::в) Подтвердите удаление.&lt;br /&gt;
:11.	Удаление нескольких проектов с ветками:&lt;br /&gt;
::а) Выберите проекты для удаления – установите флажки в левой части названий проектов и веток или нажмите кнопку '''Выбрать всё'''.&lt;br /&gt;
::б) Нажмите кнопку '''Удалить''' в верхней части списка проектов и подтвердите удаление.&lt;br /&gt;
При удалении проекта удаляются все его ветки и снимки, разрывается связь проекта с группами.&lt;br /&gt;
&lt;br /&gt;
===Работа с группами проектов===&lt;br /&gt;
Работа с группами проектов доступна на отдельной панели '''Группы проектов''', которая отрывается по нажатии кнопки [[File:Icon gear.png|x25px]] в списке проектов. При этом в нижней части списка отображается общее количество групп.&lt;br /&gt;
&lt;br /&gt;
В списке групп доступны:&lt;br /&gt;
* поиск по названию группы;&lt;br /&gt;
* фильтрация списка по проектам.&lt;br /&gt;
&lt;br /&gt;
[[File:104 Панель групп.png|thumb|none|upright=3|Панель '''Группы проектов''']]&lt;br /&gt;
При работе с группами проектов пользователю доступны следующие функции: &lt;br /&gt;
:1.	Просмотр списка связанных с группой проектов – для этого нажмите на название группы.&lt;br /&gt;
:Проекты отобразятся в этом же списке групп на втором уровне.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:2.	Добавление группы: [[File:105 Создание группы.png|thumb|right|none|upright=1.5|Окно '''Создать группу''']]&lt;br /&gt;
::а) Нажмите кнопку '''Создать группу'''.&lt;br /&gt;
::б) В открывшемся окне введите название группы и выберите проекты, которые в неё войдут, нажмите кнопку '''Создать'''.&lt;br /&gt;
:Созданная группа отобразится в списке на панели '''Группы проектов'''.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:3.	Редактирование параметров группы: [[File:106 Редактирование группы.png|thumb|right|none|upright=1.5|Окно Редактировать группу]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Icon edit2.png|x25px]] в строке группы.&lt;br /&gt;
::б) В открывшемся окне измените название группы, скорректируйте состав включенных в группу проектов.&lt;br /&gt;
::в) Нажмите на кнопку [[File:Icon cancel.png|x25px]] справа от названия проекта в списке, чтобы исключить его из группы.&lt;br /&gt;
::г) Нажмите кнопку '''Сохранить'''.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:4.	Исключение одного проекта из группы – для этого нажмите кнопку [[File:Icon hide marks.png|x25px]] в правой части списка проектов группы.&lt;br /&gt;
:5.	Удаление одной группы – для этого нажмите кнопку [[File:Icon delete.png|x25px]] в правой части списка групп и подтвердите удаление.&lt;br /&gt;
:6.	Удаление нескольких групп:&lt;br /&gt;
::а) Выберите группы для удаления – установите флажки в левой части названий групп или нажмите кнопку '''Выбрать всё'''.&lt;br /&gt;
::б) Нажмите кнопку '''Удалить''' в верхней части списка групп проектов и подтвердите удаление.&lt;br /&gt;
:При удалении группы разрывается связь проекта с группой. Сами проекты не удаляются.&lt;br /&gt;
&lt;br /&gt;
===Работа с ветками===&lt;br /&gt;
При работе с ветками проекта пользователю доступны следующие функции: &lt;br /&gt;
:1.	Просмотр списка снимков – для этого нажмите на название ветки в списке проектов.&lt;br /&gt;
:Список снимков отобразится в виде таблицы в правой части экрана.&lt;br /&gt;
:2.	Редактирование ветки: [[File:107 Редактирование ветки.png|thumb|right|upright=1.5|Окно редактирования ветки]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке ветки.&lt;br /&gt;
::б) В меню выберите пункт '''Редактировать'''.&lt;br /&gt;
::в) В открывшемся окне измените название ветки и нажмите кнопку '''Сохранить'''.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:3.	Клонирование ветки проекта: [[File:108 Клонирование ветки.png|thumb|right|upright=1.5|Окно клонирования ветки]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке ветки.&lt;br /&gt;
::б) В меню выберите пункт '''Клонировать'''.&lt;br /&gt;
::в) В открывшемся окне введите название новой ветки и нажмите кнопку '''Клонировать'''.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:4. Экспорт разметки в файл: [[File:197 Окно экспорта разметки.png|thumb|right|upright=1.5|Окно экспорта разметки]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке ветки.&lt;br /&gt;
::б) В меню выберите пункт '''Экспорт разметки'''.&lt;br /&gt;
::Откроется окно экспорта разметки.&lt;br /&gt;
::в) Выберите вариант экспорта.&lt;br /&gt;
::г) Если требуется экспортировать неразмеченные маркеры, установите флажок '''Включая разметку со статусом &amp;quot;Undecided&amp;quot;'''.&lt;br /&gt;
::д) Нажмите кнопку '''Экспортировать'''.&lt;br /&gt;
::{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектным доступом]] '''Экспорт снимков'''''}}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:5. Импорт разметки из файла: [[File:199 Окно импорта файла с разметкой.png|thumb|right|upright=1.5|Окно импорта разметки]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке ветки.&lt;br /&gt;
::б) В меню выберите пункт '''Импорт разметки'''.&lt;br /&gt;
::Откроется окно импорта разметки.&lt;br /&gt;
::в) Выберите файл архива в формате .gz.&lt;br /&gt;
::г) Выберите варианты импорта и действия при наличии конфликта разметки.&lt;br /&gt;
::д) Нажмите кнопку '''Импортировать'''.&lt;br /&gt;
::{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектным доступом]] '''Импорт снимков'''''}}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:6.	Удаление ветки:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке ветки.&lt;br /&gt;
::б) В меню выберите пункт '''Удалить'''.&lt;br /&gt;
::в) Подтвердите удаление.&lt;br /&gt;
::При удалении ветки удаляются все ее снимки.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:7. Очистка разметки: [[File:160 Окно очистки разметки.png|thumb|right|upright=1.5|Окно очистки разметки]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке ветки.&lt;br /&gt;
::б) В меню выберите пункт '''Очистить разметку'''.&lt;br /&gt;
::в) В открывшемся окне выберите вариант очистки.&lt;br /&gt;
::г) Нажмите кнопку '''Очистить'''.&lt;br /&gt;
::{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектными доступами]] '''Управление ветками и снимками''', '''Разметка маркеров''' и [[#Cерверные доступы|серверным доступом]] '''Администрирование сервера'''.''}}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:8.	Копирование разметки в другой контейнер (проект и ветку): [[File:Image.png|thumb|right|upright=1.5|Окно копирования разметки в другой контейнер]]&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке ветки и в меню выберите пункт '''Копировать разметку'''.&lt;br /&gt;
::б) В открывшемся окне выберите проект и ветку, в которые нужно скопировать разметку, а также действия, которые нужно выполнить при наличии разметки.&lt;br /&gt;
::в) Нажмите кнопку '''Копировать'''.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Разметка в контейнере состоит из множества размеченных маркеров. В целевой ветке уже может находиться разметка. Все множество маркеров в исходной ветке можно разбить на два: &lt;br /&gt;
* «Уникальные» – маркеры, которые есть только в исходной ветке;&lt;br /&gt;
* «Общие» – маркеры, которые есть как в ветке-источнике, так и в ветке-приемнике.&lt;br /&gt;
При выполнении операции копирования разметка в уникальных маркерах всегда копируется в ветку-приемник. Для «Общих» маркеров возможны несколько вариантов продолжения копирования, но по умолчанию выбран пункт '''Не копировать''' – в этом случае разметка в «Общих» маркерах в ветке-приемнике не изменяется.&lt;br /&gt;
&lt;br /&gt;
Если выбрано действие '''Перезаписать''', разметка на «Общих» маркерах в целевом контейнере будет заменена разметкой из ветки-источника. &lt;br /&gt;
&lt;br /&gt;
При выборе действия '''Перезаписать только старую разметку''' разметка из ветки-источника копируется в том случае, если ее метка времени более поздняя, чем та, которая указана в ветке-приемнике на данном маркере.&lt;br /&gt;
&lt;br /&gt;
'''Пример''' &lt;br /&gt;
:Есть несколько контейнеров: &lt;br /&gt;
:* A с разметкой {(M1, D1), (M2, D2), (M3, D3)}&lt;br /&gt;
:* B с разметкой {(M4, D4), (M2, D5), (M3, D6)},&lt;br /&gt;
::где M — это маркер, а D — разметка (включая метку времени).&lt;br /&gt;
&lt;br /&gt;
:Операцию сравнения на разметке обозначим как &amp;gt;. Если метка времени в D1 больше, чем в D2, то D1 &amp;gt; D2.&lt;br /&gt;
:Пусть D2 &amp;gt; D5, а D3 &amp;lt; D6. Тогда операция копирования всегда скопирует разметку D1 (но не сам маркер), так как маркер M1 новый для контейнера B.&lt;br /&gt;
&lt;br /&gt;
:Маркеры M2, M3 — общие для двух контейнеров, поэтому то, какая разметка будет в контейнере-приемнике, будет зависеть от выбранного варианта разрешения конфликта: &lt;br /&gt;
:* если выбран пункт '''Не копировать''', то в контейнере B на маркерах M2, M3 будет разметка D5, D6 соответственно;&lt;br /&gt;
:* если выбран пункт '''Перезаписать''', то на M2, M3 будет разметка D2, D3;&lt;br /&gt;
:* если выбран пункт '''Перезаписать только старую разметку''', то на M2, M3 разметка будет: D2, D6, так как D2 &amp;gt; D5 и D6 &amp;gt; D3.&lt;br /&gt;
:При выполнении копирования наличие маркера в ветке-приемнике не проверяется.&lt;br /&gt;
:При успешном копировании выводится всплывающее сообщение с описанием выполненных операций:&lt;br /&gt;
:[[File:161 Сообщение об успешном копировании разметки.png|thumb|none|upright=2|Пример всплывающего сообщения об успешном копировании разметки]]&lt;br /&gt;
&lt;br /&gt;
===Работа со снимками===&lt;br /&gt;
Список снимков отображается в правой части экрана в виде таблицы после выбора ветки проекта. При этом в нижней части списка отображается общее количество снимков в выбранной ветке и количество выбранных снимков.&lt;br /&gt;
В списке доступны:&lt;br /&gt;
* поиск по названию снимка;&lt;br /&gt;
* сортировка по значениям столбцов (по умолчанию — по дате создания).&lt;br /&gt;
При работе со снимками пользователю доступны следующие функции: &lt;br /&gt;
:1. Импорт снимка из файла – для этого нажмите кнопку '''Импорт''' в верхней части табличного списка снимков и в открывшемся списке выберите один из вариантов импорта: '''Снимок (*.snap)''', '''Архив .svace-dir''' или '''SARIF'''.&lt;br /&gt;
:{{Note|type=warn|text=''Функциональность доступна пользователям с [[#Проектные доступы|проектным доступом]] '''Импорт снимков'''''}}&lt;br /&gt;
:После этого: &lt;br /&gt;
[[File:110 Импорт снимка.png|thumb|right|upright=1.5|Окно импорта снимка из файла в формате snap]]&lt;br /&gt;
::а) Если выбран импорт из файла в формате snap, то в открывшемся окне:&lt;br /&gt;
::* выберите файл в формате .snap;&lt;br /&gt;
::* введите название снимка (опционально);&lt;br /&gt;
::* Задайте [[Edit markers (command line)|правила трансформации, пропуска и дедупликации маркеров]] в поле '''Редактировать маркеры''' – загрузите JSON-файл с правилами или введите их;   &lt;br /&gt;
::* нажмите кнопку '''Импортировать'''.&lt;br /&gt;
::{{Note|type=info|text=''Если при импорте снимка из snap-файла название не введено, то будет использовано название исходного снимка (параметр «name» в JSON с информацией о снимке).''}}&lt;br /&gt;
[[File:133 Импорт снимка из архива svace-dir.png|thumb|right|upright=1.5|Окно импорта снимка из архива в формате svace-dir]]&lt;br /&gt;
[[File:133.1_Импорт_снимка_из_архива_svace-dir_-_Поля_опций.png|thumb|right|upright=1.5|Окно импорта снимка из архива в формате svace-dir. Поля опций для расширенных настроек]] &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
::б) Если выбран импорт архива .svace-dir, то в открывшемся окне:&lt;br /&gt;
::* выберите архив .svace-dir;&lt;br /&gt;
::* введите название снимка (опционально);&lt;br /&gt;
::* выберите шаблон разметки (опционально);&lt;br /&gt;
::* укажите правила префикса пути (опционально);&lt;br /&gt;
::*  укажите расширенные настройки (опционально): для каждой настройки нажмите кнопку '''Добавить''', в появившихся полях выберите опцию и введите её значение; для удаления настройки нажмите кнопку [[File:Icon delete.png|x25px]].&lt;br /&gt;
::После выбора параметра в поле появляется иконка [[File:Icon question mark2.png|x15px]], по наведении курсора на которую можно посмотреть описание;&lt;br /&gt;
::* нажмите кнопку '''Импортировать'''. &lt;br /&gt;
::При старте операции и по ее окончании пользователю отобразятся соответствующие всплывающие сообщения.&lt;br /&gt;
::[[File:210 Сообщение. Импорт svace-dir.png|thumb|none|upright=1.5|Пример всплывающих сообщений при старте и окончании импорта снимка из архива в формате svace-dir]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File:217 Импорт снимка SARIF.png|thumb|right|upright=1.5|Окно импорта снимка из файла в формате SARIF]]&lt;br /&gt;
[[File:218 Импорт снимка SARIF - поля опций.png|thumb|right|upright=1.5|Окно импорта снимка из архива в формате SARIF. Поля опций для расширенных настроек]]&lt;br /&gt;
::в) Если выбран импорт из файла в формате SARIF, то в открывшемся окне:&lt;br /&gt;
::*  выберите файл в формате .sarif или .json, либо архив в одном из форматов: .tar, tar.bz2, tar.gz, zip;&lt;br /&gt;
::*  введите название снимка (опционально);&lt;br /&gt;
::*  укажите правила префикса пути (опционально);&lt;br /&gt;
::*  укажите расширенные настройки (опционально): для каждой настройки нажмите кнопку '''Добавить''', в появившихся полях выберите опцию и введите её значение; для удаления настройки нажмите кнопку [[File:Icon delete.png|x25px]].&lt;br /&gt;
::После выбора параметра в поле появляется иконка [[File:Icon question mark2.png|x15px]], по наведении курсора на которую можно посмотреть описание;&lt;br /&gt;
::* нажмите кнопку '''Импортировать'''.&lt;br /&gt;
::При старте операции и по ее окончании пользователю отобразятся соответствующие всплывающие сообщения.&lt;br /&gt;
::[[File:211 Сообщение. Импорт SARIF.png|thumb|none|upright=1.5|Пример всплывающих сообщений при старте и окончании импорта снимка из архива в формате SARIF]]&lt;br /&gt;
:{{Note|type=info|text='''''Примечание:''''' &lt;br /&gt;
:* ''для импорта поддерживаются архивы папки .svace-dir, заархивированные с помощью tar, gz, bz2 или zip (*.tar, *.tar.gz, *.tar.bz2, *.zip);''&lt;br /&gt;
:* ''если при импорте архива .svace-dir название снимка не введено, то оно будет соответствовать времени импорта результатов анализа из Svace;''&lt;br /&gt;
:* ''в поле '''Расширенные настройки''' поддерживается ввод дополнительных опций команды &amp;lt;code&amp;gt;svacer import&amp;lt;/code&amp;gt; – как в интерфейсе командной строки (например, &amp;lt;code&amp;gt;--attach value&amp;lt;/code&amp;gt;). В аргументах дополнительных опций требуется указывать пути относительно архивированной папки. Описание опций можно найти, запустив команду &amp;lt;code&amp;gt;svacer import --help&amp;lt;/code&amp;gt;''.&lt;br /&gt;
:* ''для импорта снимка из snap-файла, .svace-dir  или SARIF может потребоваться много времени: как на загрузку, так и на обработку данных после загрузки. При работе сервера Svacer за reverse proxy их дефолтных значений таймаутов или ограничений на размер загружаемых данных может быть недостаточно, поэтому рекомендуется увеличить эти значения в конфигурационных файлах reverse proxy, см. [[Help:Configuration#Nginx|пример для Nginx]]''}}&lt;br /&gt;
:2. Экспорт снимка – для этого нажмите кнопку [[File:Icon export.png|x25px]]в крайнем правом столбце строки снимка и в открывшемся списке выберите один из вариантов экспорта: '''Экспорт (*.snap)''', '''Экспорт SARIF''' или '''Экспорт кода с разметкой'''.&lt;br /&gt;
:После этого:&lt;br /&gt;
::а) Если выбран экспорт в файл в формате snap, то по окончании его формирования во всплывающем сообщении нажмите кнопку '''Скачать'''.&lt;br /&gt;
::[[File:193 Сообщение. Экспорт снимка.png|thumb|none|upright=1.5|Пример всплывающих сообщений при старте и окончании экспорта снимка]]&lt;br /&gt;
:[[File:195 Окно экспорта SARIF.png|thumb|right|upright=1.5|Окно экспорта снимка SARIF]]&lt;br /&gt;
::б) Если выбран экспорт файла формата SARIF, то в открывшемся окне:&lt;br /&gt;
::* Выключите (опционально) формирование название файла по умолчанию – снимите соответствующий флажок и введите название снимка.&lt;br /&gt;
::* Опционально включите или выключите экспорт исходных файлов.&lt;br /&gt;
::* Нажмите кнопку '''Экспортировать'''.&lt;br /&gt;
::Запустится формирование файла. При старте и по окончании экспорта пользователю отобразится всплывающее сообщение.&lt;br /&gt;
::[[File:220 Сообщение. Экспорт SARIF.png|thumb|none|upright=1.5|Пример всплывающих сообщений при старте и окончании экспорта снимка в SARIF]]&lt;br /&gt;
:[[File:340 Проекты Окно экспорта кода с разметкой.png||thumb|right|upright=1.5|Окно экспорта кода с разметкой]]&lt;br /&gt;
::в) Если выбран экспорт кода с разметкой, то в открывшемся окне:&lt;br /&gt;
::* Если требуется экспортировать разметку, установите флажок параметра '''Шаблон разметки''' и выберите шаблон для экспорта в списке справа.&lt;br /&gt;
::* Опционально включите или выключите очистку старых комментариев.&lt;br /&gt;
::* Опционально заполните поля для удаления префиксов и исключения путей.&lt;br /&gt;
::* Опционально введите регулярные выражения для очистки дополнительных строк (доступен, если включена очистка старых комментариев).::&lt;br /&gt;
::Пример удаления префиксов путей: &amp;lt;code&amp;gt;/.build/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::При экспорте можно исключить файлы, соответствующие [[Help:UI manual#Использование регулярных выражений|регулярным выражениям]] в поле '''Исключить пути'''. &lt;br /&gt;
::* Нажмите кнопку '''Экспортировать'''.&lt;br /&gt;
::В итоге создастся архив файлов с исходным кодом и, если был выбран шаблон разметки, то в исходный код будет добавлена актуальная разметка, в соответствии с выбранным шаблоном.&lt;br /&gt;
:3.	Переход к разметке маркеров снимка:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в крайнем правом столбце строки снимка.&lt;br /&gt;
::б) В меню выберите пункт '''Разметить'''.&lt;br /&gt;
[[File:111 Редактирование снимка.png|thumb|right|upright=1.5|Окно редактирования снимка]]&lt;br /&gt;
:4.	Редактирование названия снимка:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в крайнем правом столбце строки снимка.&lt;br /&gt;
::б) В меню выберите пункт '''Редактировать'''.&lt;br /&gt;
::в) Поменяйте название и нажмите кнопку '''Сохранить'''.&lt;br /&gt;
[[File:212 Окно Копирование снимков.png|thumb|right|upright=1.5|Окно копирования снимка. Пример для одного снимка]]&lt;br /&gt;
:5.	Копирование одного снимка в другой проект и ветку:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в крайнем правом столбце строки снимка.&lt;br /&gt;
::б) В меню выберите пункт '''Копировать'''.&lt;br /&gt;
::в) В открывшемся окне выберите проект и ветку, в которые нужно добавить копию снимка, нажмите кнопку '''Копировать'''.&lt;br /&gt;
::При старте операции и по ее окончании пользователю отобразятся соответствующие всплывающие сообщения.&lt;br /&gt;
::[[File:213 Сообщение. Копирование снимков.png|thumb|none|upright=1.5|Пример всплывающих сообщений при старте и окончании копирования одного снимка]]&lt;br /&gt;
[[File:214 Окно Копирование нескольких снимков.png|thumb|right|upright=1.5|Окно копирования снимка. Пример для двух снимков]]&lt;br /&gt;
:6. Копирование нескольких снимков в другой проект и ветку:&lt;br /&gt;
::а) Чтобы выбрать для копирования все снимки, установите флажок в заголовке табличного списка снимков.&lt;br /&gt;
::б) Чтобы выбрать несколько снимков, установите флажки в крайнем правом столбце табличного списка.&lt;br /&gt;
::в) Нажмите кнопку '''Копировать''' в верхней части табличного списка снимков.&lt;br /&gt;
::г) В открывшемся окне выберите проект и ветку, в которые нужно добавить копии выбранных снимков, нажмите кнопку '''Копировать'''.&lt;br /&gt;
::При старте операции и по ее окончании пользователю отобразятся соответствующие всплывающие сообщения.&lt;br /&gt;
::[[File:215 Сообщение. Копирование двух снимков.png|thumb|none|upright=1.5|Пример всплывающих сообщений при старте и окончании копирования двух снимков]]&lt;br /&gt;
:[[File:134 Импорт разметки.png|thumb|right|upright=1.5|Окно импорта разметки]]&lt;br /&gt;
:7. Импорт разметки из комментариев исходного кода снимка в активную ветку проекта:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в крайнем правом столбце строки снимка.&lt;br /&gt;
::б) В меню выберите пункт '''Импорт разметки из исходного кода'''.&lt;br /&gt;
::в) В открывшемся окне выберите шаблон разметки и нажмите кнопку '''Импортировать'''.&lt;br /&gt;
::По окончании пользователю отобразится всплывающее сообщение с информацией о выполненной операции. &lt;br /&gt;
::[[File:216 Сообщение. Импорт разметки из кода.png|thumb|none|upright=1.5|Пример всплывающего сообщения об окончании импорта разметки из файла]]&lt;br /&gt;
&lt;br /&gt;
:8.	Просмотр информации о снимке в JSON-формате:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке снимка крайнем правом столбце.&lt;br /&gt;
::б) В меню выберите пункт '''Просмотреть JSON'''.&lt;br /&gt;
:[[File:112 Просмотр JSON снимка.png|thumb|none|upright=3|Окно просмотра информации о снимке в JSON-формате]]&lt;br /&gt;
:9. Удаление одного снимка:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке снимка крайнем правом столбце.&lt;br /&gt;
::б) В меню выберите пункт '''Удалить'''.&lt;br /&gt;
::в) Подтвердите удаление.&lt;br /&gt;
:10. Удаление нескольких снимков:&lt;br /&gt;
::а) Чтобы выбрать для удаления все снимки, установите флажок в заголовке табличного списка снимков.&lt;br /&gt;
::б) Чтобы выбрать несколько снимков, установите флажки в крайнем правом столбце табличного списка.&lt;br /&gt;
::в) Нажмите кнопку '''Удалить''' в верхней части табличного списка снимков и подтвердите удаление.&lt;br /&gt;
&lt;br /&gt;
== Просмотр детекторов ==&lt;br /&gt;
Чтобы посмотреть список всех детекторов, перейдите в раздел '''Детекторы''':&lt;br /&gt;
 &lt;br /&gt;
[[File:135 Раздел Детекторы.png|thumb|none|upright=3|Раздел «Детекторы»]]&lt;br /&gt;
&lt;br /&gt;
В разделе отображается список детекторов той версии  Svace, которая указана вверху раздела.&lt;br /&gt;
&lt;br /&gt;
{{Note|type=info|text=''При обновлении списка детекторов и их параметров в Svace изменения попадают в Svacer при выпуске новой версии системы!''}}&lt;br /&gt;
&lt;br /&gt;
В разделе '''Детекторы''' пользователю доступны следующие функции:&lt;br /&gt;
:1. Поиск детектора по его названию, серьезности, надежности и коду дефекта безопасности CWE.&lt;br /&gt;
:2. Сортировка по значениям столбцов (по умолчанию – по названию детектора).&lt;br /&gt;
:3. Переход к просмотру описания дефекта безопасности на сайте [https://cwe.mitre.org cwe.mitre.org] (открывается в отдельном окне) – для этого нажмите на ссылку в столбце '''CWE'''.&lt;br /&gt;
:4. Просмотр дополнительной информации о детекторе при её наличии – для этого нажмите на иконку [[File:icon_question_mark2.png|x25px]] справа от названия детектора.&lt;br /&gt;
 &lt;br /&gt;
:[[File:121_Окно с дополнительной информацией о детекторе.png|thumb|none|upright=2|Раздел «Детекторы». Пример окна с дополнительной информацией о детекторе]]&lt;br /&gt;
&lt;br /&gt;
:5. Фильтрация списка – для этого:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button Фильтр.png|x25px]].&lt;br /&gt;
::б) В открывшемся окне '''Фильтр''' настройте параметры фильтрации – выберите значения в списках полей или нажмите кнопки со значениями.&lt;br /&gt;
::в) Нажмите кнопку [[File:button_Очистить.png|x25px]], чтобы очистить все параметры фильтрации.&lt;br /&gt;
::г) Нажмите кнопку [[File:button_Применить.png|x25px]], чтобы применить фильтр.&lt;br /&gt;
 &lt;br /&gt;
:[[File:137 Детекторы.Фильтр.png|thumb|none|upright=2|Раздел «детекторы». Окно «Фильтр»]]&lt;br /&gt;
&lt;br /&gt;
:6. Отмена примененных фильтров – для этого нажмите кнопку [[File:Button Фильтр отмена.png|x25px]].&lt;br /&gt;
:7. Выбор отображаемых столбцов – для этого нажмите на кнопку '''Столбцы''' и в открывшемся списке установите или снимите флажки рядом с названиями столбцов.&lt;br /&gt;
:Для настройки скрытия или показа доступны все столбцы, кроме '''Детектор'''. Столбцы '''Статус''' и '''Инструменты''' по умолчанию скрыты.&lt;br /&gt;
:Пользовательская настройка отображения столбцов сохраняется и не сбрасывается при повторном входе пользователя в систему.&lt;br /&gt;
&lt;br /&gt;
:[[File:138 Детекторы выбор столбцов.png|thumb|none|upright=1.5|Раздел «Детекторы». Выбор отображаемых столбцов]]&lt;br /&gt;
&lt;br /&gt;
:8. Экспорт списка детекторов в файл формата PDF – нажмите кнопку '''Экспорт в PDF'''.&lt;br /&gt;
:Файл содержит информацию обо всех детекторах, найденных с помощью строки поиска и фильтров. Настройка отображения столбцов не влияет на выгрузку – файл содержит информацию всех столбцов.&lt;br /&gt;
&lt;br /&gt;
== Просмотр статистики ==&lt;br /&gt;
В разделе '''Статистика''' пользователь может посмотреть статистические данные о разметке по всем проектам, веткам и снимкам, доступным пользователю. Все статистические данные разделены на три группы и отображаются в отдельных дашбордах:&lt;br /&gt;
* [[Help:UI manual#Работа с дашбордом «Общая статистика»|'''Общая статистика''']] – показатели по последним импортированным снимкам в ветках проектов;&lt;br /&gt;
* [[Help:UI manual#Работа с дашбордом «Распределение маркеров»|'''Распределение маркеров''']] – диаграммы с информацией о количестве маркеров и их распределении по серьезности, статусу разметки и языкам;&lt;br /&gt;
* [[Help:UI manual#Работа с дашбордом «Активность по разметке»|'''Активность по разметке''']] – информация об активности пользователей при разметке маркеров.&lt;br /&gt;
&lt;br /&gt;
[[File:162 Раздел Статистика. Начальное состояние.png|thumb|none|upright=3|Раздел '''Статистика'''. Начальное состояние]]&lt;br /&gt;
Чтобы посмотреть информацию:&lt;br /&gt;
:1. Выберите дашборд – нажмите кнопку с его названием в верхней части экрана.&lt;br /&gt;
:2. Выберите [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|контекст]] (опционально). В дашборде '''Общая статистика''' выбор снимка недоступен.&lt;br /&gt;
:2. Нажмите кнопку [[File:Button Play.png|x25px]].&lt;br /&gt;
:Если контекст не был выбран, отобразится статистика по всем проектам, веткам и снимкам, доступным пользователю. При этом информация об их количестве отображается в верхней части каждого дашборда.&lt;br /&gt;
:[[File:163 Раздел Статистика. Контекст не выбран.png|thumb|none|upright=2.5|Раздел '''Статистика'''. Пример дашборда '''Общая статистика'''. Контекст не выбран]]&lt;br /&gt;
:Если контекст был выбран, то отобразится статистика только для выбранных проектов, веток и снимков (кроме '''Общая статистика'''). При этом информация об их количестве отображается в верхней части каждого дашборда.&lt;br /&gt;
:[[File:164 Раздел Статистика. Контекст выбран.png|thumb|none|upright=2.5|Раздел '''Статистика'''. Пример дашборда '''Общая статистика'''. Контекст выбран]]&lt;br /&gt;
&lt;br /&gt;
=== Работа с дашбордом «Общая статистика» ===&lt;br /&gt;
На дашборде '''Общая статистика''' отображается информация о разметке маркеров в последних импортированных снимках в разрезе проектов и веток. Информация представлена в виде блоков со следующими данными:&lt;br /&gt;
* общая информация:&lt;br /&gt;
** названия проекта и ветки;&lt;br /&gt;
** количество снимков в ветке и дата последнего импорта;&lt;br /&gt;
** дата последней разметки маркеров;&lt;br /&gt;
* показатели последнего импортированного снимка:&lt;br /&gt;
** количество строк кода;&lt;br /&gt;
** количество маркеров;&lt;br /&gt;
** плотность маркеров – процентное отношение количества маркеров на тысячу строк кода;&lt;br /&gt;
** процент и количество размеченных маркеров;&lt;br /&gt;
** процент и количество подтвержденных маркеров – со статусом Confirmed;&lt;br /&gt;
** процент и количество критичных маркеров – с серьезностью детектора Critical.&lt;br /&gt;
:[[File:204 Статистика. Общая статистика.png|thumb|none|upright=2.5|Раздел '''Статистика'''. Дашборд '''Общая статистика''']]&lt;br /&gt;
Пользователю доступны следующие функции:&lt;br /&gt;
:1. Поиск информации по названиям проектов и веток.&lt;br /&gt;
:2. Сортировка данных – для этого в поле справа выберите показатель, по которому требуется сортировать информацию:&lt;br /&gt;
:* по датам последних разметки и импорта;&lt;br /&gt;
:* по показателям последнего импортированного снимка.&lt;br /&gt;
:Для изменения порядка сортировки используйте кнопки [[File:Button Sort.png|x25px]] и [[File:Button Sort UP.png|x25px]].&lt;br /&gt;
:3. Переход к последнему импортированному снимку в режиме разметки – нажмите на названия проекта и ветки в блоке.&lt;br /&gt;
&lt;br /&gt;
=== Работа с дашбордом «Распределение маркеров» ===&lt;br /&gt;
На дашборде '''Распределение маркеров''' отображаются три диаграммы:&lt;br /&gt;
* Количество маркеров по серьезности;&lt;br /&gt;
* Количество маркеров по статусу разметки;&lt;br /&gt;
* Распределение маркеров по языкам.&lt;br /&gt;
[[File:165 Раздел Статистика. Информация о выбранном контексте.png|thumb|none|upright=2.5|Раздел '''Статистика'''. Дашборд '''Распределение маркеров''']]&lt;br /&gt;
Пользователю доступны следующие функции:&lt;br /&gt;
:1. Просмотр значения диаграммы – для этого наведите курсор на любой графический элемент любой диаграммы.&lt;br /&gt;
:2. Выгрузка данных диаграммы в файл формата .csv – для этого нажмите кнопку [[File:Button Download.png|x25px]] в любой диаграмме.&lt;br /&gt;
&lt;br /&gt;
=== Работа с дашбордом «Активность по разметке» ===&lt;br /&gt;
На дашборде Активность по разметке отображается информация о действиях пользователей [[Help:UI manual#Работа в режиме разметки|по разметке маркеров]], которая может быть представлена в двух видах:&lt;br /&gt;
* диаграмма '''Активность по разметке''' – отражает активность пользователей по разметке маркеров за выбранный месяц (по умолчанию – текущий месяц). Цвет ячеек на диаграмме отражает количество действий пользователя, выполненных в указанную дату: чем темнее цвет, тем больше действий выполнил пользователь. Эта диаграмма отображается по умолчанию; если вид был переключен, то для возврата к этой диаграмме нажмите кнопку [[File:Button ChangeDiagram1.png|x25px]];&lt;br /&gt;
* диаграмма '''Лидеры по разметке''' – отражает количество действий пользователей при разметке за выбранный период (по умолчанию – период соответствует месяцу, указанному на диаграмме '''Активность по разметке''') с сортировкой по лидерам. Цвет строк на диаграмме отражает количество действий пользователя: чем темнее цвет, тем больше действий выполнил пользователь. Диаграмма отображается по нажатии кнопки [[File:Button ChangeDiagram2.png|x25px]];&lt;br /&gt;
[[File:166 Раздел Статистика. Активность по разметке.png|thumb|none|upright=3|Раздел '''Статистика'''. Дашборд '''Активность по разметке'''. Вид 1: диаграмма '''Активность по разметке''']]&lt;br /&gt;
[[File:167 Раздел Статистика. Лидеры по разметке.png|thumb|none|upright=3|Раздел '''Статистика'''. Дашборд '''Активность по разметке'''. Вид 2: диаграмма '''Лидеры по разметке''']]&lt;br /&gt;
Пользователю доступны следующие функции:&lt;br /&gt;
:1. Просмотр значения диаграммы – для этого наведите курсор на любой графический элемент любой диаграммы.&lt;br /&gt;
:2. Выгрузка данных диаграммы в файл формата .csv – для этого нажмите кнопку [[File:Button Download.png|x25px]] в любой диаграмме&lt;br /&gt;
:3. &amp;lt;span id=&amp;quot;diagrams_details&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;В диаграмме '''Активность по разметке''':&lt;br /&gt;
::а) Поиск конкретного пользователя  – для этого введите фрагмент его логина в поле поиска.&lt;br /&gt;
::б) Просмотр статистики за любой другой месяц – для этого выберите год и месяц в раскрывающихся списках вверху диаграммы.&lt;br /&gt;
::в) Просмотр активности конкретного пользователя за выбранный месяц – для этого нажмите на его логин.&lt;br /&gt;
::Ниже диаграммы '''Активность по разметке''' отобразится список действий по разметке выбранного пользователя. Измененная (неактуальная) разметка отмечена иконкой [[File:Icon archive.png|x25px]].&lt;br /&gt;
::[[File:168 Раздел Статистика. Активность по разметке. Выбранный пользователь.png|thumb|none|upright=3|Раздел '''Статистика'''. Дашборд '''Активность по разметке'''. Диаграмма '''Активность по разметке''' и список действий по разметке выбранного пользователя]]&lt;br /&gt;
::г) Просмотр активности пользователей в конкретный день месяца – для этого нажмите на число.&lt;br /&gt;
::Ниже диаграммы '''Активность по разметке''' отобразится список действий по разметке пользователей за выбранную дату.&lt;br /&gt;
::[[File:169 Раздел Статистика. Активность по разметке. Пользователи за дату.png|thumb|none|upright=3|Раздел '''Статистика'''. Дашборд '''Активность по разметке'''. Диаграмма '''Активность по разметке''' и список действий по разметке пользователей за выбранную дату]]&lt;br /&gt;
::д) Просмотр активности конкретного пользователя в конкретный день месяца – для этого нажмите ячейку таблицы на пересечении строки с логином пользователя и столбца с числом.&lt;br /&gt;
::Ниже диаграммы '''Активность по разметке''' отобразится список действий по разметке выбранного пользователя за выбранную дату.&lt;br /&gt;
::[[File:170 Раздел Статистика. Активность по разметке. Одни пользователь за дату.png|thumb|none|upright=3|Раздел '''Статистика'''. Дашборд '''Активность по разметке'''. Диаграмма '''Активность по разметке''' и список действий по разметке выбранного пользователя за выбранную дату]]&lt;br /&gt;
::е) Включение и выключение отображения информации о неактуальной (измененной) разметке в списке действий пользователя – для этого воспользуйтесь переключателем '''Исключить активность по неактуальной разметке'''.&lt;br /&gt;
::ж) Просмотр маркера в [[Help:UI manual#Работа в режиме разметки|режиме разметки]] – для этого в списке действий нажмите на ссылку с именем файла и номером строки.&lt;br /&gt;
::з) Просмотр информации о маркере – для этого в списке действий нажмите кнопку [[File:Button show.png|x25px]] слева от названия маркера.&lt;br /&gt;
::В правой части экрана отобразится панель с информацией о маркере.&lt;br /&gt;
::[[File:205 Статистика. Активность по разметке. Панель с информацией о маркере.png|thumb|none|upright=3|Панель с информацией о маркере]]&lt;br /&gt;
:4. В диаграмме '''Лидеры по разметке''':&lt;br /&gt;
::а) Поиск конкретного пользователя – для этого введите фрагмент его логина в поле поиска.&lt;br /&gt;
::б) Просмотр статистики за любой другой период времени, кроме текущего месяца – для этого кликните на поле даты вверху диаграммы и вручную введите даты, либо в раскрывшемся календаре выберите диапазон дат: предложенный ('''Сегодня''', '''Вчера''', '''Неделю назад''' и т. п.) или свой.&lt;br /&gt;
::[[File:171 Раздел Статистика. Лидеры по разметке. Выбор дат.png|thumb|none|upright=3|Раздел '''Статистика'''. Дашборд '''Активность по разметке'''. Диаграмма '''Лидеры по разметке'''. Выбор диапазона дат]]&lt;br /&gt;
::в) Просмотр активности конкретного пользователя за указанный период – для этого нажмите на его логин.&lt;br /&gt;
::Ниже диаграммы '''Лидеры по разметке''' отобразится список действий по разметке выбранного пользователя. Измененная (неактуальная) разметка отмечена иконкой [[File:Icon archive.png|x25px]].&lt;br /&gt;
::[[File:172 Раздел Статистика. Лидеры по разметке. Выбранный пользователь.png|thumb|none|upright=3|Раздел '''Статистика'''. Дашборд '''Активность по разметке'''. Диаграмма '''Лидеры по разметке''' и список действий по разметке выбранного пользователя]]&lt;br /&gt;
::г) Включение и выключение отображения в списке действий пользователя по неактуальной (измененной) разметке – для этого воспользуйтесь переключателем '''Исключить активность по неактуальной разметке'''.&lt;br /&gt;
::д) Просмотр маркера в [[Help:UI manual#Работа в режиме разметки|режиме разметки]] – для этого в списке действий нажмите на ссылку с именем файла и номером строки.&lt;br /&gt;
::e) Просмотр информации о маркере – для этого в списке действий нажмите кнопку [[File:Button show.png|x25px]] слева от названия маркера.&lt;br /&gt;
::В правой части экрана отобразится панель с информацией о маркере.&lt;br /&gt;
&lt;br /&gt;
== Глобальный поиск ==&lt;br /&gt;
Глобальный поиск позволяет одновременно по всем доступным пользователю проектам и веткам выполнить поиск в следующих категориях:&lt;br /&gt;
* Маркеры;&lt;br /&gt;
* Комментарии к маркерам;&lt;br /&gt;
* Снимки.&lt;br /&gt;
&lt;br /&gt;
Чтобы воспользоваться глобальным поиском, перейдите в раздел '''Поиск'''.&lt;br /&gt;
[[File:173 Раздел Поиск. Начальное состояние.png|thumb|none|upright=3|Раздел '''Поиск'''. Начальное состояние]]&lt;br /&gt;
&lt;br /&gt;
Для каждой категории реализованы два независимых способа поиска в виде вкладок:&lt;br /&gt;
* '''Базовый поиск''' – единый поисковый запрос по всем атрибутам категории одновременно, с указанием контекста;&lt;br /&gt;
* '''Поиск по полям''' – позволяет задать значения поиска по каждому атрибуту категории в отдельности и указать контекст.&lt;br /&gt;
&lt;br /&gt;
=== Поиск маркеров ===&lt;br /&gt;
Чтобы воспользоваться поиском маркеров:&lt;br /&gt;
:1. Выберите категорию '''Маркеры''' раздела '''Поиск''' (выбран по умолчанию).&lt;br /&gt;
:2. Для базового поиска:&lt;br /&gt;
::а) Перейдите на вкладку '''Базовый поиск''' (открыта по умолчанию).&lt;br /&gt;
::[[File:174 Раздел Поиск. Категория Маркеры. Базовый поиск.png|thumb|none|upright=3|Раздел '''Поиск'''. Категория '''Маркеры'''. Базовый поиск]]&lt;br /&gt;
::б) Введите фрагмент названия маркера, детектора, функции или файла.&lt;br /&gt;
::в) Выберите (опционально) группу проектов, проект, ветку и снимок, в которых нужно найти маркеры. &lt;br /&gt;
::По умолчанию выбраны все группы, проекты, ветки и снимки.&lt;br /&gt;
::г) Нажмите кнопку '''Поиск'''.&lt;br /&gt;
:Отобразятся результаты поиска.&lt;br /&gt;
:[[File:175 Раздел Поиск. Пример результатов поиска в категории Маркеры.png|thumb|none|upright=3|Раздел '''Поиск'''. Пример результатов поиска в категории '''Маркеры''']]&lt;br /&gt;
:3. Для поиска по полям:&lt;br /&gt;
::а) Перейдите на вкладку '''Поиск по полям'''.&lt;br /&gt;
::[[File:176 Раздел Поиск. Категория Маркеры. Поиск по полям.png|thumb|none|upright=3|Раздел '''Поиск'''. Категория '''Маркеры'''. Поиск по полям]]&lt;br /&gt;
::б) Заполните поля поиска.&lt;br /&gt;
::в) Выберите (опционально) группу проектов, проект, ветку и снимок, в которых нужно найти маркеры. &lt;br /&gt;
::По умолчанию выбраны все группы, проекты, ветки и снимки.&lt;br /&gt;
::г) Нажмите кнопку '''Поиск'''.&lt;br /&gt;
:Отобразятся результаты поиска.&lt;br /&gt;
:[[File:177 Раздел Поиск. Пример результатов поиска по полям в категории Маркеры.png|thumb|none|upright=3|Раздел '''Поиск'''. Пример результатов поиска по полям в категории '''Маркеры''']]&lt;br /&gt;
:4. Для очистки значений в полях поиска нажмите кнопку '''Очистить'''.&lt;br /&gt;
:5. Чтобы перейти к найденному файлу с маркером в [[Help:UI manual#Работа в режиме разметки|режиме разметки]], в результатах поиска кликните на ссылку в имени файла с номером строки исходного кода.&lt;br /&gt;
:6. Чтобы посмотреть подробную информацию о найденном маркере, в результатах поиска нажмите кнопку [[File:Button show.png|x25px]].&lt;br /&gt;
Отобразится правая панель с открытой вкладкой '''Подробности'''.&lt;br /&gt;
:[[File:341 Раздел Поиск. Подробная информация о маркере.png|thumb|none|upright=3|Раздел '''Поиск'''. Пример просмотра подробной информации о найденном маркере]]&lt;br /&gt;
&lt;br /&gt;
=== Поиск комментариев к маркерам ===&lt;br /&gt;
Чтобы воспользоваться поиском по комментариям к маркерам:&lt;br /&gt;
:1. Выберите категорию '''Комментарии к маркерам''' раздела '''Поиск'''.&lt;br /&gt;
:2. Для базового поиска:&lt;br /&gt;
::а) Перейдите на вкладку '''Базовый поиск''' (открыта по умолчанию).&lt;br /&gt;
::[[File:178 Раздел Поиск. Категория Комментарии к маркерам. Базовый поиск.png|thumb|none|upright=3|Раздел '''Поиск'''. Категория '''Комментарии к маркерам'''. Базовый поиск]]&lt;br /&gt;
::б) Введите фрагмент комментария или логина его автора.&lt;br /&gt;
::в) Выберите (опционально) группу проектов, проект, ветку и снимок, в которых нужно найти комментарии. &lt;br /&gt;
::По умолчанию выбраны все группы, проекты, ветки и снимки.&lt;br /&gt;
::г) Нажмите кнопку '''Поиск'''.&lt;br /&gt;
:Отобразятся результаты поиска.&lt;br /&gt;
:[[File:179 Раздел Поиск. Пример результатов поиска в категории Комментарии к маркерам.png|thumb|none|upright=3|Раздел '''Поиск'''. Пример результатов поиска в категории '''Комментарии к маркерам''']]&lt;br /&gt;
:3. Для поиска по полям:&lt;br /&gt;
::а) Перейдите на вкладку '''Поиск по полям'''.&lt;br /&gt;
::[[File:180 Раздел Поиск. Категория Комментарии к маркерам. Поиск по полям.png|thumb|none|upright=3|Раздел '''Поиск'''. Категория '''Комментарии к маркерам'''. Поиск по полям]]&lt;br /&gt;
::б) Заполните поля поиска.&lt;br /&gt;
::в) Выберите (опционально) группу проектов, проект, ветку и снимок, в которых нужно найти комментарии. &lt;br /&gt;
::По умолчанию выбраны все группы, проекты, ветки и снимки.&lt;br /&gt;
::г) Нажмите кнопку '''Поиск'''.&lt;br /&gt;
:Отобразятся результаты поиска.&lt;br /&gt;
:[[File:181 Раздел Поиск. Пример результатов поиска по полям в категории Комментарии к маркерам.png|thumb|none|upright=3|Раздел '''Поиск'''. Пример результатов поиска по полям в категории '''Комментарии к маркерам''']]&lt;br /&gt;
:4. Для очистки поискового запроса нажмите кнопку '''Очистить'''.&lt;br /&gt;
:5. Чтобы перейти в [[Help:UI manual#Работа в режиме разметки|режим разметки]] к файлу маркера с найденным комментарием, в результатах поиска кликните на ссылку в имени файла с номером строки исходного кода.&lt;br /&gt;
:6. Чтобы посмотреть подробную информацию о маркере с найденным комментарием, в результатах поиска нажмите кнопку [[File:Button show.png|x25px]]. Отобразится правая панель с открытой вкладкой '''Комментарии'''.&lt;br /&gt;
&lt;br /&gt;
=== Поиск снимков ===&lt;br /&gt;
Чтобы воспользоваться поиском по снимкам:&lt;br /&gt;
:1. Выберите категорию '''Снимки''' раздела '''Поиск'''.&lt;br /&gt;
:2. Для базового поиска:&lt;br /&gt;
::а) Перейдите на вкладку '''Базовый поиск''' (открыта по умолчанию).&lt;br /&gt;
::[[File:182 Раздел Поиск. Категория Снимки. Базовый поиск.png|thumb|none|upright=3|Раздел '''Поиск'''. Категория '''Снимки'''. Базовый поиск]]&lt;br /&gt;
::б) Введите фрагмент названия снимка, пользовательского поля снимка (названия или его значения) или логина пользователя, который импортировал снимок.&lt;br /&gt;
::в) Выберите (опционально) группу проектов, проект, ветку и снимок, в которых нужно найти снимки. &lt;br /&gt;
::По умолчанию выбраны все группы, проекты, ветки и снимки.&lt;br /&gt;
::г) Нажмите кнопку '''Поиск'''.&lt;br /&gt;
:Отобразятся результаты поиска.&lt;br /&gt;
:[[File:183 Раздел Поиск. Пример результатов поиска в категории Снимки.png|thumb|none|upright=3|Раздел '''Поиск'''. Пример результатов поиска в категории '''Снимки''']]&lt;br /&gt;
&lt;br /&gt;
:3. Для поиска по полям:&lt;br /&gt;
::а) Перейдите на вкладку '''Поиск по полям'''.&lt;br /&gt;
::[[File:184 Раздел Поиск. Категория Снимки. Поиск по полям.png|thumb|none|upright=3|Раздел '''Поиск'''. Категория '''Снимки'''. Поиск по полям]]&lt;br /&gt;
::б) Заполните поля поиска.&lt;br /&gt;
::в) Выберите (опционально) группу проектов, проект, ветку и снимок, в которых нужно найти снимки. &lt;br /&gt;
::По умолчанию выбраны все группы, проекты, ветки и снимки.&lt;br /&gt;
::г) Нажмите кнопку '''Поиск'''.&lt;br /&gt;
:Отобразятся результаты поиска.&lt;br /&gt;
:[[File:185 Раздел Поиск. Пример результатов поиска по полям в категории Снимки.png|thumb|none|upright=3|Раздел '''Поиск'''. Пример результатов поиска по полям в категории '''Снимки''']]&lt;br /&gt;
:4. Для очистки поискового запроса нажмите кнопку '''Очистить'''.&lt;br /&gt;
:5. Чтобы посмотреть подробную информацию о найденном снимке, в результатах поиска кликните на ссылку в пути размещения снимка.&lt;br /&gt;
:Найденный снимок откроется в [[Help:UI manual#Работа в режиме разметки|режиме разметки]] со всеми его маркерами.&lt;br /&gt;
&lt;br /&gt;
=== Просмотр истории поиска ===&lt;br /&gt;
Чтобы посмотреть историю поиска, нажмите кнопку '''История поиска''' в разделе '''Поиск'''.&lt;br /&gt;
&lt;br /&gt;
В истории отображаются 100 последних поисковых запросов пользователя.&lt;br /&gt;
[[File:186 Раздел Поиск. Пример истории поиска.png|thumb|none|upright=3|Раздел '''Поиск'''. Пример истории поиска]]&lt;br /&gt;
&lt;br /&gt;
Чтобы повторить поиск из истории, кликните на ссылку с поисковым запросом.&lt;br /&gt;
&lt;br /&gt;
== Настройка сервера Svacer ==&lt;br /&gt;
Перейти в раздел '''Настройки''' можно по нажатии кнопки [[File:Icon settings.png|x25px]] в верхней правой части экрана.&lt;br /&gt;
&lt;br /&gt;
В этом разделе пользователю, в зависимости от роли, доступны следующие функции:&lt;br /&gt;
* [[Help:UI manual#Управление пользователями, ролями и организациями|управление пользователями, ролями и организациями]];&lt;br /&gt;
* [[Help:UI manual#Настройка глобальных фильтров|настройка глобальных фильтров]];&lt;br /&gt;
* [[Help:UI manual#Управление блокировками разметки|управление блокировками]];&lt;br /&gt;
* [[Help:UI manual#Ведение журнала операций|ведение журнала операций]];&lt;br /&gt;
* [[Help:UI manual#Управление шаблонами разметки|управление шаблонами разметки]];&lt;br /&gt;
* [[Help:UI manual#Управление токенами доступа|управление токенами доступа]];&lt;br /&gt;
* [[Help:UI manual#Управление асинхронными задачами|управление асинхронными задачами]];&lt;br /&gt;
* [[Help:UI manual#Просмотр информации о сервере|просмотр информации о сервере]];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Управление пользователями, ролями и организациями===&lt;br /&gt;
==== Управление пользователями ====&lt;br /&gt;
Реестром учетных записей пользователей можно управлять на вкладке '''Пользователи''' в разделе '''Управление пользователями''' страницы '''Настройки'''.&amp;lt;br&amp;gt;&lt;br /&gt;
Для [[LDAP configuration|учетных записей с доступом по LDAP]] рядом с логином отображается индикатор [[File:Icon LDAP.png|x25px]], для учетных записей с доступом по OIDC рядом с логином отображается индикатор [[File:Icon_OIDC.png|x25px]], а для учетных записей с признаком '''Мастер разметки''' – индикатор [[File:Icon markup master.png|x25px]].&amp;lt;br&amp;gt;&lt;br /&gt;
В разделе доступны:&lt;br /&gt;
* поиск по атрибутам учётной записи пользователя;&lt;br /&gt;
* фильтрация списка по типам учётных записей:&lt;br /&gt;
:* все;&lt;br /&gt;
:* системные;&lt;br /&gt;
:* LDAP;&lt;br /&gt;
:* OIDC;&lt;br /&gt;
:* заблокированные;&lt;br /&gt;
:* активные;&lt;br /&gt;
:* по ролям;&lt;br /&gt;
:* по организациям.&lt;br /&gt;
* сортировка по колонкам '''Логин''', '''ФИО''' и '''Дата создания''' (по умолчанию).&lt;br /&gt;
:[[File:74 Вкладка Пользователи на странице Настройки.png|thumb|none|upright=3|Вкладка '''Пользователи''' в разделе '''Управление пользователями''' страницы '''Настройки''']]&lt;br /&gt;
Для управления пользователями:&lt;br /&gt;
:1. Создайте учетную запись пользователя:&lt;br /&gt;
::а) Нажмите кнопку '''Создать'''.&lt;br /&gt;
::Откроется окно добавления учетной записи пользователя.&lt;br /&gt;
::[[File:76 Окно Добавить пользователя.png|thumb|none|upright=1.5|Окно '''Создать пользователя''']]&lt;br /&gt;
::б) Заполните поля:&lt;br /&gt;
::* Логин;&lt;br /&gt;
::* Пароль;&lt;br /&gt;
::* e-mail;&lt;br /&gt;
::* ФИО.&lt;br /&gt;
::в) Выберите [[Help:UI manual#Управление организациями|организации]], в которые должен входить пользователь, а также назначьте ему [[Help:UI manual#Управление ролями|роли]] – выберите значения в раскрывающихся списках полей '''Организации''' и '''Роли''' соответственно. Для отмены выбора нажмите на кнопку [[File:Icon cancel.png|x25px]] справа от значения.&lt;br /&gt;
::г) Включите опции '''Изменить пароль при первом входе в систему''' и '''Мастер разметки'''.&amp;lt;br&amp;gt;&lt;br /&gt;
::{{Note|type=info|text=''Если для учётной записи активирована опция '''Мастер разметки''', есть разрешение на разметку и этот пользователь разметил маркер в каком-либо снимке, то изменить его разметку может только пользователь, в учётной записи которого также активирована опция '''Мастер разметки''' или которому предоставлен [[#Cерверные доступы|серверный доступ]] '''Изменение любой разметки'''.''}}&lt;br /&gt;
::д) Нажмите кнопку '''Создать'''.&lt;br /&gt;
: В таблице со списком пользователей добавится новая запись.&lt;br /&gt;
&lt;br /&gt;
:2. Воспользуйтесь функциями в строке учетной записи в крайнем правом столбце – нажмите кнопку [[File:Button menu.png|x25px]] и выберите пункт:&lt;br /&gt;
:* '''Редактировать''' – для перехода к редактированию данных профиля;&lt;br /&gt;
:* '''Изменить пароль''' – для перехода к изменению пароля;&lt;br /&gt;
:* '''Сбросить настройки пользователя''' – для возврата пользовательских настроек к их значениям по умолчанию;&lt;br /&gt;
:* '''Заблокировать''' – для блокировки учетной записи. В этом случае для учетной записи пользователя блокируется доступ к системе, а в списке рядом с логином учетной записи отображается индикатор [[File:Icon_Archived.png|x25px]];&lt;br /&gt;
:* '''Разблокировать''' – для восстановления доступа пользователя к системе;&lt;br /&gt;
:* '''Настройки уведомлений''' – для настройки уведомлений пользователя об операциях со снимками и маркерами – аналогично [[Help:UI manual#Настройка уведомлений|настройке уведомлений в меню пользователя]];&lt;br /&gt;
::[[File:219 Настройки Настройка уведомлений выбранного пользователя.png|thumb|none|upright=2|Настройки уведомлений выбранного пользователя]]&lt;br /&gt;
:* '''Удалить''' – для удаления учётной записи пользователя;&lt;br /&gt;
:* '''Показать доступы пользователя''' – для отображения списка объединенных доступов всех ролей, назначенных пользователю.&lt;br /&gt;
::[[File:113 Список доступов пользователя.png|thumb|none|upright=3|Список доступов пользователя]]&lt;br /&gt;
::{{Note|type=warn|text=''Функции блокировки и удаления недоступны для системных учетных записей. При изменении логина или списка доступов у авторизованного пользователя, он будет перенаправлен на страницу авторизации.''}}&lt;br /&gt;
&lt;br /&gt;
:3. Воспользуйтесь функциями управления несколькими учётными записями одновременно:&lt;br /&gt;
::а) Чтобы выбрать несколько записей, установите флажки в первом столбце списка пользователей.&lt;br /&gt;
::б) Чтобы выбрать все отображаемые учётные записи, установите один флажок в заголовке столбцов в первом столбце списка.&lt;br /&gt;
::в) Нажмите кнопку '''Действия''' в верхней части списка пользователей и выберите пункт: '''Сбросить настройки пользователя''', '''Заблокировать''', '''Разблокировать''' или '''Удалить'''. В списке активны только действия, доступные всем выбранным учетным записям.&lt;br /&gt;
:4. Для [[LDAP configuration|учетной записи с доступом по LDAP]] обновите данные – в окне редактирования данных профиля пользователя нажмите кнопку '''Загрузить из LDAP'''.&lt;br /&gt;
:Загрузятся параметры профиля пользователя и его контакты из профиля в службе каталогов, если они там указаны.&lt;br /&gt;
:[[File:78 Загрузка данных из LDAP.png|thumb|none|upright=1.5|Загрузка данных из LDAP]]&lt;br /&gt;
&lt;br /&gt;
==== Управление ролями ====&lt;br /&gt;
Реестром ролей можно управлять на вкладке '''Роли''' в разделе '''Управление пользователями''' страницы '''Настройки'''.&lt;br /&gt;
[[File:79 Переход к управлению ролями.png|thumb|none|upright=3|Вкладка '''Роли''' в разделе '''Управление пользователями''' страницы '''Настройки''']]&lt;br /&gt;
{{Note|type=info|text=''Роли [[Help:UI manual#Описание ролевой модели|admin, filter_master и importer]] являются встроенными с особым значением. Их нельзя удалить или изменить.''}}&lt;br /&gt;
&lt;br /&gt;
Доступен поиск по названию роли и сортировка по колонкам '''Название''' (по умолчанию) и '''Пользователи'''. &amp;lt;br&amp;gt;&lt;br /&gt;
Для управления ролями доступны следующие функции:&lt;br /&gt;
:1. Создание новой роли:&lt;br /&gt;
::а) Нажмите кнопку '''Создать'''.&lt;br /&gt;
::[[File:81 Окно добавления роли.png|thumb|none|upright=3|Окно добавления роли]]&lt;br /&gt;
::б) Заполните поля появившейся формы:&lt;br /&gt;
:::*введите название роли;&lt;br /&gt;
:::*в блоке '''Серверные доступы''' выберите доступы – нажмите кнопку '''Выбрать всё''' или установите флажки для активации доступов.&lt;br /&gt;
:::При наведении курсора на иконку [[File:Icon question mark2.png|x25px]] отображается пояснение к доступу.&lt;br /&gt;
:::*в блоке '''Проектные доступы''' выберите тип доступа: группа проектов или определённый проект или его ветка;&lt;br /&gt;
:::*если выбран тип '''Группа проектов''', выберите название группы и установите флажки для активации доступов;&lt;br /&gt;
:::*если выбран тип '''Проект / Ветка''', выберите название проекта или ветки проекта, установите флажки для активации доступов.&lt;br /&gt;
:::Если выбрано значение '''Все''', то доступы будут предоставлены для всех проектов;&lt;br /&gt;
:::*для удаления строки с проектными доступами в блоке '''Проектные доступы''' нажмите кнопку [[File:Icon delete.png|x25px]] в крайнем правом столбце.&lt;br /&gt;
::в) Нажмите кнопку '''Создать'''.&lt;br /&gt;
&lt;br /&gt;
:2.	Просмотр доступов роли, нажмите на ссылку '''Показать доступы''' в столбце '''Доступы'''.&lt;br /&gt;
:[[File:114 Список доступов роли.png|thumb|none|upright=3|Список доступов роли]]&lt;br /&gt;
&lt;br /&gt;
:3.	Редактирование роли:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке роли в крайнем правом столбце.&lt;br /&gt;
::б) В меню выберите пункт '''Редактировать''' и внесите изменения.&lt;br /&gt;
&lt;br /&gt;
:4.	Создание копии роли:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке исходной роли в крайнем правом столбце.&lt;br /&gt;
::б) В меню выберите пункт '''Создать копию'''.&lt;br /&gt;
:В реестр ролей добавится новая запись с именем исходной роли и добавленным порядковым номером копии.&lt;br /&gt;
&lt;br /&gt;
:5.	Просмотр информации о роли в JSON-формате:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке исходной роли в крайнем правом столбце.&lt;br /&gt;
::б) В меню выберите пункт '''Просмотреть JSON'''.&lt;br /&gt;
&lt;br /&gt;
:6.	Удаление роли:&lt;br /&gt;
::а) Нажмите кнопку [[File:Button menu.png|x25px]] в строке исходной роли в крайнем правом столбце.&lt;br /&gt;
::б) В меню выберите пункт '''Удалить'''.&lt;br /&gt;
::в) Подтвердите удаление.&lt;br /&gt;
&lt;br /&gt;
:7.	Удаление несколько ролей одновременно:&lt;br /&gt;
::а) Для выбора нескольких записей установите флажки в первом столбце списка ролей.&lt;br /&gt;
::б) Чтобы выбрать все записи, установите один флажок в заголовке столбцов в первом столбце списка ролей.&lt;br /&gt;
::в) Нажмите кнопку '''Удалить''' и подтвердите удаление.&lt;br /&gt;
&lt;br /&gt;
==== Управление организациями ====&lt;br /&gt;
Пользователи могут быть связаны с организациями. Один пользователь может принадлежать нескольким организациям. Организации носят информационный характер и не влияют на права пользователей в системе. &amp;lt;br&amp;gt;&lt;br /&gt;
Реестром организаций можно управлять на вкладке '''Организации''' в разделе '''Управление пользователями''' страницы '''Настройки'''. &lt;br /&gt;
[[File:92 Вкладка Организации на странице Настройки.png|thumb|none|upright=3|Вкладка '''Организации''' в разделе '''Управление пользователями''' страницы '''Настройки''']]&lt;br /&gt;
Доступен поиск по названию и сокращенному названию организации и сортировка по колонкам '''Название''' (по умолчанию), '''Сокращенное название''' и '''Пользователи'''. &lt;br /&gt;
Для управления организациями, доступны следующие функции:&lt;br /&gt;
:1.	Создание организации: &lt;br /&gt;
::а) Нажмите кнопку '''Создать'''.&lt;br /&gt;
::б) Заполните поля появившейся формы.&lt;br /&gt;
::в) Нажмите кнопку '''Создать'''.&lt;br /&gt;
::[[File:93 Окно добавления организации в реестр.png|thumb|none|upright=1.5|Окно добавления организации в реестр]]&lt;br /&gt;
&lt;br /&gt;
:2.	Редактирование организации: &lt;br /&gt;
::а) Нажмите кнопку [[File:Icon edit2.png|x25px]] в крайнем правом столбце.&lt;br /&gt;
::б) В появившейся форме отредактируйте данные организации.&lt;br /&gt;
::в) Нажмите кнопку '''Сохранить'''.&lt;br /&gt;
&lt;br /&gt;
:3.	Удаление организации: &lt;br /&gt;
::а) Нажмите кнопку [[File:Icon delete.png|x25px]] в крайнем правом столбце.&lt;br /&gt;
::б) В появившемся диалоге подтвердите удаление, нажав на кнопку '''Удалить'''.&lt;br /&gt;
&lt;br /&gt;
:4.	Удаление несколько организаций одновременно:&lt;br /&gt;
::а) Для выбора нескольких записей установите флажки в первом столбце списка организаций.&lt;br /&gt;
::б) Чтобы выбрать все организации, установите один флажок в заголовке столбцов в первом столбце списка.&lt;br /&gt;
::в) Нажмите кнопку '''Удалить''' и подтвердите удаление.&lt;br /&gt;
&lt;br /&gt;
=== Настройка глобальных фильтров ===&lt;br /&gt;
В разделе '''Глобальные фильтры''' страницы '''Настройки''' можно настроить глобальные фильтры, применительно [[Help:UI manual#Выбор контекста (проекта, ветки и снимка)|к выбранным проекту или ветке проекта]]:&amp;lt;br&amp;gt;&lt;br /&gt;
{{Note|type=info|text=''По умолчанию выбран контекст (проект, ветка), заданный ранее в режиме '''Разметка''', или '''Код'''.''}}&lt;br /&gt;
[[File:82 Вкладка Фильтры на странице Настройки.png|thumb|none|upright=4|Раздел '''Глобальные фильтры''' на странице '''Настройки''']]&lt;br /&gt;
&lt;br /&gt;
В разделе доступен поиск по названию фильтра.&lt;br /&gt;
&lt;br /&gt;
Для настройки фильтров:&lt;br /&gt;
:1. Выберите проект и ветку в верхней строке раздела. По умолчанию указаны проект и ветка, выбранные в разделе '''Разметка'''.&lt;br /&gt;
:2. Чтобы добавить фильтр, нажмите кнопку '''Создать'''.&lt;br /&gt;
:Отобразится новая строка:&lt;br /&gt;
:[[File:83 Новая строка с фильтром.png|thumb|none|upright=4|Новая строка с фильтром]]&lt;br /&gt;
&lt;br /&gt;
:3. Чтобы изменить настройки фильтров:&lt;br /&gt;
::а) Введите или поменяйте название фильтра&lt;br /&gt;
::б) Включите или выключите фильтр – нажмите на значение в столбце '''Статус''', чтобы отобразилась иконка [[File:Icon check2.png|x25px]] (по умолчанию) или [[File:Icon cross 01.png|x25px]].&lt;br /&gt;
::в) Выберите область применения фильтра – нажмите на значение в столбце '''Область''' один или два раза, чтобы отобразилось значение '''ветка''' или '''проект'''.&lt;br /&gt;
::г) Введите [[Help:UI manual#Использование регулярных выражений|регулярное выражение]] или загрузите его из файла в столбцах '''Включить пути по шаблону''', '''Исключить пути по шаблону''' и '''Детекторы'''.&lt;br /&gt;
::{{Note|type=info|text=''Шаблоны регулярных выражений не зависят от регистра и поддерживают следующий синтаксис:''&lt;br /&gt;
:* ''; – для разделения списков значений;''&lt;br /&gt;
:* ''* – любое количество символов;''&lt;br /&gt;
:* ''? – один произвольный символ;''&lt;br /&gt;
:* ''re: – включая значения, определяемые регулярным выражением;''&lt;br /&gt;
:* ''re!: – исключая значения, определяемые регулярным выражением (только для столбца '''Детекторы''').''}}&lt;br /&gt;
::д) Выберите уровни серьезности (критичности) и надежности:&lt;br /&gt;
::* [[File:Icon_critical_on.png|x30px]] – уровень выбран;&lt;br /&gt;
::* [[File:Icon_critical_off.png|x30px]] – уровень не выбран.&lt;br /&gt;
::Для изменения выбора нажмите на название уровня.&lt;br /&gt;
:4. Нажмите кнопку [[File:Icon delete.png|x25px]] в крайнем правом столбце, чтобы удалить один фильтр.&lt;br /&gt;
:5. Чтобы удалить несколько фильтров:&lt;br /&gt;
::а) Для выбора нескольких записей установите флажки в первом столбце списка фильтров.&lt;br /&gt;
::б) Чтобы выбрать все записи, установите один флажок в заголовке столбцов в первом столбце списка фильтров.&lt;br /&gt;
::в) Нажмите кнопку '''Удалить'''.&lt;br /&gt;
:6.	Для сохранения и применения изменений нажмите кнопку '''Применить'''.&lt;br /&gt;
Если не применить изменения, то при переходе в другой раздел системы отобразится сообщение о том, что изменения не применены:&lt;br /&gt;
:[[File:115 Запрос на изменение глобальных фильтров.png|thumb|none|upright=1.5]]&lt;br /&gt;
&lt;br /&gt;
:{{Note|type=warn|text=''После применения глобальных фильтров пользователям, у которых в режиме разметки открыт данный контекст, требуется перезагрузить страницу (нажать клавишу F5) для обновления списка маркеров.''}}&lt;br /&gt;
&lt;br /&gt;
=== Управление блокировками разметки ===&lt;br /&gt;
Чтобы посмотреть список всех [[Help:UI manual#Блокировка разметки|блокировок]], перейдите на вкладку '''Блокировки''' страницы '''Настройки''':&lt;br /&gt;
[[File:61 Просмотр всех блокировок.png|800px|thumb|none|Раздел '''Блокировки''' страницы '''Настройки''']]&lt;br /&gt;
{{Note|type=info|text=''Пользователю отображается  список блокировок в контейнерах, к которым у него есть доступ. Удаление не своих блокировок доступно пользователям с соответствующим доступом.''}}&lt;br /&gt;
&lt;br /&gt;
Доступен поиск по контейнерам, заблокированным сущностям и пользователям, сортировка по всем колонкам (по умолчанию – сортировка по дате).&lt;br /&gt;
&lt;br /&gt;
Для удаления одной блокировки:&lt;br /&gt;
:1.	Нажмите кнопку [[File:Icon delete.png|x25px]] в строке проекта в крайнем правом столбце.&lt;br /&gt;
:2.	Подтвердите удаление.&lt;br /&gt;
Для удаления нескольких блокировок:&lt;br /&gt;
:1.	Чтобы выбрать для удаления все блокировки, установите флажок в заголовке табличного списка.&lt;br /&gt;
:2.	Чтобы выбрать несколько блокировок, установите флажки в крайнем правом столбце табличного списка.&lt;br /&gt;
:3.	Нажмите кнопку '''Удалить''' в верхней части списка.&lt;br /&gt;
&lt;br /&gt;
=== Ведение журнала операций ===&lt;br /&gt;
В разделе '''Журнал операций''' страницы '''Настройки''' доступны просмотр и откат выполнения групповых операций по разметке и комментированию маркеров, таких как импорт разметки, копирование разметки, импорт снимков и т. п.&lt;br /&gt;
[[File:206 Настройки. Журнал операций.png|800px|thumb|none|Раздел '''Журнал операций''' на странице '''Настройки''']]&lt;br /&gt;
В разделе доступны:&lt;br /&gt;
* поиск по названию контейнера, типу операции и её описанию;&lt;br /&gt;
* фильтрация списка:&lt;br /&gt;
** по статусу операции: '''Applied''', '''Reverted''', '''Invalid''';&lt;br /&gt;
** типу операции;&lt;br /&gt;
** генератору операции;&lt;br /&gt;
** автору операции;&lt;br /&gt;
** диапазону дат создания операции;&lt;br /&gt;
* сортировка по всем колонкам, кроме '''Описание'''.&lt;br /&gt;
&lt;br /&gt;
Чтобы откатить выполнение операции, нажмите кнопку [[File:Icon return.png|x25px]] в строке и подтвердите действие в открывшемся окне.&lt;br /&gt;
{{Note|type=warn|text=''Откат своих операций доступен пользователям с [[#Проектные доступы|проектными доступами]] '''Разметка маркеров''' и '''Импорт разметки'''.&amp;lt;br&amp;gt;Откат операций других пользователей доступен пользователям с [[#Проектные доступы|проектным доступом]] '''Разметка маркеров''' и [[#Серверные доступы|серверным доступом]] '''Администрирование сервера''' или серверным доступами '''Изменение любой разметки''' и '''Изменение любых комментариев'''.''}}&lt;br /&gt;
&lt;br /&gt;
=== Управление шаблонами разметки ===&lt;br /&gt;
Управление шаблонами разметки доступно в разделе '''Шаблоны разметки''' страницы '''Настройки''':&lt;br /&gt;
[[File:84 Вкладка Шаблоны на странице Настройки.png|thumb|none|upright=3|Раздел '''Шаблоны разметки''' на странице '''Настройки''']]&lt;br /&gt;
&lt;br /&gt;
Шаблоны разметки нужны для [[Help:UI manual#Импорт разметки|импорта]]/[[Help:UI manual#Экспорт разметки|экспорта разметки]]. С их помощью комментарии в исходном коде будут преобразовываться в разметку на сервере истории и обратно.&lt;br /&gt;
&lt;br /&gt;
Шаблон с именем DEFAULT есть всегда, его нельзя отредактировать или удалить.&lt;br /&gt;
&lt;br /&gt;
{{Note|type=info|text=''Для корректного создания или изменения шаблонов разметки следует обратиться к разработчикам Svacer.''}}&lt;br /&gt;
&lt;br /&gt;
Для управления шаблонами:&lt;br /&gt;
:1. Нажмите кнопку '''Создать'''.&lt;br /&gt;
:Откроется окно создания шаблона.&lt;br /&gt;
:[[File:Добавление шаблона разметки.png|thumb|none|upright=1.5|Окно создания шаблона разметки]]&lt;br /&gt;
:2. Введите название шаблона.&lt;br /&gt;
:3. Нажмите кнопку '''Создать'''.&lt;br /&gt;
:Шаблон появится в списке шаблонов для разметки в правой панели формы&lt;br /&gt;
:4. Отредактируйте поля шаблона разметки:&lt;br /&gt;
:[[File:85 Поля шаблона, доступные для редактирования.png|thumb|none|upright=2.5|Редактирование шаблона разметки]]&lt;br /&gt;
:5. Нажмите '''Сохранить'''.&lt;br /&gt;
:6. Чтобы клонировать существующий шаблон разметки, нажмите кнопку [[File:Icon_clone.png|x20px]] в правой части строки шаблона в списке.&lt;br /&gt;
:7. Для удаления одного шаблона:&lt;br /&gt;
::а) Нажмите кнопку [[File:Icon delete.png|x25px]] в правой части строки шаблона в списке.&lt;br /&gt;
::б) Подтвердите удаление.&lt;br /&gt;
:8. Для удаления нескольких шаблонов:&lt;br /&gt;
::а) Выберите шаблоны для удаления – установите флажки в левой части названий шаблонов или нажмите кнопку '''Выбрать всё'''.&lt;br /&gt;
::б) Нажмите кнопку '''Удалить''' в верхней части списка шаблонов и подтвердите удаление.&lt;br /&gt;
&lt;br /&gt;
=== Управление токенами доступа ===&lt;br /&gt;
Управление персональными токенами доступа выполняется в разделе '''Токены доступа''' на странице '''Настройки'''. &lt;br /&gt;
[[File:207 Настройки. Токены доступа.png|800px|thumb|none|Раздел '''Токены доступа''' на странице '''Настройки''']]&lt;br /&gt;
В разделе доступны:&lt;br /&gt;
* поиск по названию токена и его описанию, а также по логину пользователя;&lt;br /&gt;
* сортировка по всем колонкам, кроме '''Описание'''.&lt;br /&gt;
Для управления токенами доступа:&lt;br /&gt;
:1. Создайте токен:&lt;br /&gt;
::а) Нажмите кнопку '''Создать'''.&lt;br /&gt;
::б) В окне '''Создать токен доступа''' введите название и, опционально, описание токена; выберите срок действия. &lt;br /&gt;
::По умолчанию срок действия токена 90 дней (минимальный срок 1 день, максимальный – 365).&lt;br /&gt;
::в) Нажмите кнопку '''Создать'''.&lt;br /&gt;
::[[File:208 Окно Создание токена доступа.png|thumb|none|upright=1.5|Окно '''Создать токен доступа''']]&lt;br /&gt;
::Отобразится окно с токеном доступа.&lt;br /&gt;
::{{Note|type=warn|text=''Токен отображается только один раз – при создании''}}&lt;br /&gt;
::[[File:209 Токен доступа.png|thumb|none|upright=1.5|Пример токена]]&lt;br /&gt;
::г) Нажмите кнопку '''Скопировать в буфер обмена''' и сохраните токен в надежном месте.&lt;br /&gt;
:2. Для удаления одного токена:&lt;br /&gt;
::а) Нажмите кнопку [[File:Icon delete.png|x25px]] в крайнем правом столбце.&lt;br /&gt;
::б) Подтвердите удаление.&lt;br /&gt;
:3. Для удаления нескольких токенов:&lt;br /&gt;
::а) Чтобы выбрать для удаления все токены, установите флажок в заголовке табличного списка.&lt;br /&gt;
::б) Чтобы выбрать несколько токенов, установите флажки в крайнем правом столбце табличного списка.&lt;br /&gt;
::в) Нажмите кнопку '''Удалить''' в верхней части табличного списка токенов и подтвердите удаление.&lt;br /&gt;
&lt;br /&gt;
=== Управление асинхронными задачами ===&lt;br /&gt;
К асинхронным задачам относятся:&lt;br /&gt;
* экспорт snap и SARIF файлов (в режиме [[Help:UI manual#Экспорт|'''Разметки''']] и в разделе [[Help:UI manual#Работа со снимками|'''Проекты''']]);&lt;br /&gt;
* копирование снимков (см. раздел 4.6.4). &lt;br /&gt;
Управление этими задачами выполняется разделе '''Асинхронные задачи''' на странице '''Настройки'''. &lt;br /&gt;
&lt;br /&gt;
В разделе доступны:&lt;br /&gt;
* поиск по идентификатору задачи, её типу, описанию, статусу, а также по логину пользователя;&lt;br /&gt;
* фильтрация списка:&lt;br /&gt;
:* по статусу;&lt;br /&gt;
:* типу задачи;&lt;br /&gt;
:* пользователю;&lt;br /&gt;
:* диапазону дат старта и окончания выполнения задачи;&lt;br /&gt;
* сортировка по всем колонкам, кроме '''Описание'''.&lt;br /&gt;
[[File:342 Настройки. Асинхронные задачи.png|800px|thumb|none|Раздел '''Асинхронные задачи''' на странице '''Настройки''']]&lt;br /&gt;
&lt;br /&gt;
Для управления асинхронными задачами:&lt;br /&gt;
:1. Чтобы посмотреть лог выполнения задачи, нажмите кнопку в крайнем правом столбце.&lt;br /&gt;
:Откроется окно с текстом лога (Рисунок 205).&lt;br /&gt;
:[[File:343 Окно с текстом лога асинхронной задачи.png|600px|thumb|none|Окно с текстом лога асинхронной задачи]]&lt;br /&gt;
:2. Чтобы скачать лог, нажмите кнопку в крайнем правом столбце или откройте окно с текстом лога и нажмите кнопку '''Скачать лог'''.&lt;br /&gt;
:3. Для удаления истории об одной задаче:&lt;br /&gt;
::а) Нажмите кнопку [[File:Icon delete.png|x25px]] в строке задачи в крайнем правом столбце.&lt;br /&gt;
::б) Подтвердите удаление.&lt;br /&gt;
:4. Для удаления истории о нескольких задачах:&lt;br /&gt;
::а) Чтобы выбрать для удаления все задачи, установите флажок в заголовке табличного списка.&lt;br /&gt;
::б) Чтобы выбрать несколько задач, установите флажки в крайнем правом столбце табличного списка.&lt;br /&gt;
::в) Нажмите кнопку '''Удалить''' в верхней части списка.&lt;br /&gt;
&lt;br /&gt;
=== Просмотр информации о сервере ===&lt;br /&gt;
В разделе '''Информация о сервере''' на странице '''Настройки''' отображаются вкладки:&lt;br /&gt;
* '''Параметры''' – параметры, с которыми запущен сервер;&lt;br /&gt;
* '''Системный лог''' – журнал событий сервера;&lt;br /&gt;
* '''Системный журнал''' – журнал базы данных.&lt;br /&gt;
[[File:344 Настройки. Информация о сервере. Вкладка Параметры.png|thumb|none|upright=3|Раздел '''Информация о сервере''' на странице '''Настройки'''. Вкладка '''Параметры''']]&lt;br /&gt;
[[File:345 Настройки. Информация о сервере. Вкладка Системный лог.png|thumb|none|upright=3|Раздел '''Информация о сервере''' на странице '''Настройки'''. Вкладка '''Системный лог''']]&lt;br /&gt;
[[File:346 Настройки. Информация о сервере. Вкладка Системный журнал.png|thumb|none|upright=3|Раздел '''Информация о сервере''' на странице '''Настройки'''. Вкладка '''Системный журнал''']]&lt;br /&gt;
&lt;br /&gt;
{{Note|type=warn|text=''На вкладке '''Системный лог''' вывод информации ограничен 1 МБ последних данных (значение настраивается в параметрах сервера). При скачивании файл содержит данные лога в полном объеме.''}} &lt;br /&gt;
 &lt;br /&gt;
Доступны функции:&lt;br /&gt;
* поиск параметров по их имени и значению – на вкладке '''Параметры''';&lt;br /&gt;
* копирование записей – на вкладках '''Системный лог''' и '''Системный журнал'''; &lt;br /&gt;
* выгрузка лога в файлы в формате .log по нажатии кнопки '''Скачать''' – на вкладках '''Системный лог''' и '''Системный журнал'''.&lt;br /&gt;
&lt;br /&gt;
== Выход из системы ==&lt;br /&gt;
Для выхода из системы выберите пункт '''Выйти''' в меню пользователя в правом верхнем углу экрана.&lt;br /&gt;
[[File:95 Выход из системы —без VSCode.png|thumb|none|upright=1.5|Выход из системы]]&lt;br /&gt;
&lt;br /&gt;
== Использование регулярных выражений ==&lt;br /&gt;
Регулярные выражения можно использовать:&lt;br /&gt;
* для поиска и фильтрации данных [[Help:UI manual#Функции навигационной панели|в навигационной панели]] [[Help:UI manual#Вкладка «Файлы»|на вкладке '''Файлы''']];&lt;br /&gt;
* в окне настройки [[Help:UI manual#Настройка и использование пользовательских фильтров|пользовательских фильтров]] в блоке '''Файлы''';&lt;br /&gt;
* при [[Help:UI manual#Экспорт исходного кода с разметкой|экспорте кода с разметкой]]; &lt;br /&gt;
* при [[Help:UI manual#Настройка глобальных фильтров|настройке глобальных фильтров]];&lt;br /&gt;
* в полях [[Help:UI manual#Глобальный поиск|глобального поиска]].&lt;br /&gt;
&lt;br /&gt;
Особенности реализации:&lt;br /&gt;
:1. Поиск происходит только по регулярному выражению. Если требуется найти специальный символ в качестве обычного символа, его нужно экранировать (например, точку: &amp;lt;code&amp;gt;\.&amp;lt;/code&amp;gt;)&lt;br /&gt;
:2. При поиске находятся вхождения подстроки в полном пути к файлу (аналогично grep). Если требуется найти по полной строке, используйте символы начала и конца строки: &amp;lt;code&amp;gt;^&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt;&lt;br /&gt;
:3. Поиск не зависит от регистра символов (case insensitive) и поддерживает следующий синтаксис:&lt;br /&gt;
::* ; – для разделения списков значений;&lt;br /&gt;
::* * – любое количество символов;&lt;br /&gt;
::* ? – один произвольный символ.&lt;br /&gt;
:В окне настройки [[Help:UI manual#Настройка и использование пользовательских фильтров|пользовательских фильтров]]  в блоке '''Файлы''' можно применить фильтр как для отображения только маркеров из файлов, которые подходят под паттерн, так и для скрытия таких маркеров. Для переключения между этими режимами используйте кнопки [[File:Icon plus 2.png|x20px]] и [[File:Icon minus 3.png|x20px]], которые расположены рядом с полем ввода. В остальных частях интерфейса следует использовать теги re: и re!:&lt;br /&gt;
&lt;br /&gt;
Примеры регулярных выражений при поиске файлов на вкладке '''Файлы''' или в пользовательском фильтре:&lt;br /&gt;
:1. Поиск файлов с текстом &amp;lt;code&amp;gt;sha&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;md5&amp;lt;/code&amp;gt; в любом месте пути или имени файла:&lt;br /&gt;
:&amp;lt;pre&amp;gt;sha|md5&amp;lt;/pre&amp;gt;&lt;br /&gt;
:2. Отображение только маркеров из файлов с расширением .c:&lt;br /&gt;
:&amp;lt;pre&amp;gt;.*\.c$&amp;lt;/pre&amp;gt;&lt;br /&gt;
:3. Скрытие маркеров из файлов, имя которых начинается с символа &amp;lt;code&amp;gt;q&amp;lt;/code&amp;gt; и которые имеют расширения .с или .сс:&lt;br /&gt;
::а) Используйте выражение &amp;lt;code&amp;gt;/q[^/]*\.c$|/q[^/]*\.cc$&amp;lt;/code&amp;gt;&lt;br /&gt;
::б) Нажмите кнопку [[File:Icon plus 2.png|x20px]] рядом с полем ввода, чтобы она поменялась на [[File:Icon minus 3.png|x20px]]&lt;br /&gt;
:4. Отображение только маркеров из файлов, которые имеют текст &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt; в конце имени файла и с расширением из одного символа:&lt;br /&gt;
:&amp;lt;pre&amp;gt;/.*string\..$&amp;lt;/pre&amp;gt;&lt;br /&gt;
:5. Скрытие маркеров из файлов в директориях &amp;lt;code&amp;gt;asn1&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;pem&amp;lt;/code&amp;gt;:&lt;br /&gt;
::а) Используйте выражение &amp;lt;code&amp;gt;/asn1/|/pem/&amp;lt;/code&amp;gt;&lt;br /&gt;
::б) Нажмите кнопку [[File:Icon plus 2.png|x20px]] рядом с полем ввода, чтобы она поменялась на [[File:Icon minus 3.png|x20px]]&lt;br /&gt;
:6. Отображение только маркеров из файлов, которые имеют в имени три цифры подряд:&lt;br /&gt;
:&amp;lt;pre&amp;gt;.*/.*[0-9]{3}[^/]*$&amp;lt;/pre&amp;gt;&lt;br /&gt;
:где &amp;lt;code&amp;gt;[^/]*$&amp;lt;/code&amp;gt; означает, что после трех цифр и до конца строки может встречаться любой символ, кроме &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;. Это позволяет исключить директории, имеющие три цифры в названии.&lt;br /&gt;
&lt;br /&gt;
== Описание ролевой модели ==&lt;br /&gt;
=== Серверные доступы ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Полномочие (доступ) !! Описание !! Влияние на графический интерфейс !! admin !! filter_master !! importer &lt;br /&gt;
|-&lt;br /&gt;
| Создание проектов &lt;br /&gt;
|| Создание и клонирование проектов. Пользователь, создавший проект, имеет полный доступ к управлению этим проектом &lt;br /&gt;
|| Наличие полномочия делает доступным: &lt;br /&gt;
* раздел [[Help:UI manual#Управление проектами и группами проектов|'''Проекты''']]; &lt;br /&gt;
*  кнопку '''Создать проект'''; &lt;br /&gt;
*  форму создания, клонирования и редактирования проекта.&lt;br /&gt;
&lt;br /&gt;
Наличие доступа предоставляет автору проекта полные права на управление своими проектами, включая разметку (даже при отсутствии у него соответствующего проектного доступа), а также позволяет удалять приложения к снимкам в созданных проектах  &lt;br /&gt;
|| + || – || – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Настройка групп проектов	&lt;br /&gt;
|| Создание, редактирование и удаление групп проектов	&lt;br /&gt;
|| Наличие полномочия делает доступным:&lt;br /&gt;
* раздел [[Help:UI manual#Управление проектами и группами проектов|'''Проекты''']] с кнопкой для перехода к настройке групп;&lt;br /&gt;
* панель [[Help:UI manual#Работа с группами проектов|'''Группы проектов''']] с полным списком проектов в группах.&lt;br /&gt;
Наличие доступа предоставляет права на просмотр маркеров во всех проектах	&lt;br /&gt;
|| + || – || – &lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| Управление пользователями	&lt;br /&gt;
|| Создание, редактирование и удаление пользователей	&lt;br /&gt;
|| Наличие полномочия делает доступной вкладку [[Help:UI manual#Управление пользователями|'''Пользователи''']] в разделе [[Help:UI manual#Управление пользователями, ролями и организациями|'''Настройки – Управление пользователями''']] со всеми функциями управления учетными записями пользователей	&lt;br /&gt;
|| + || – || – &lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| Управление ролями	&lt;br /&gt;
|| Создание, редактирование и удаление ролей	&lt;br /&gt;
|| Наличие полномочия делает доступной вкладку [[Help:UI manual#Управление ролями|'''Роли''']] в разделе [[Help:UI manual#Управление пользователями, ролями и организациями|'''Настройки – Управление пользователями''']] со всеми функциями управления ролями	&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Управление организациями	&lt;br /&gt;
|| Создание, редактирование и удаление организаций	&lt;br /&gt;
|| Наличие полномочия делает доступной вкладку [[Help:UI manual#Управление организациями|'''Организации''']] в разделе [[Help:UI manual#Управление пользователями, ролями и организациями|'''Настройки – Управление пользователями''']] со всеми функциями управления организациями	&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Управление шаблонами разметки	&lt;br /&gt;
|| Создание, редактирование и удаление шаблонов разметки	&lt;br /&gt;
|| Наличие полномочия делает доступным раздел [[Help:UI manual#Управление шаблонами разметки|'''Настройки – Шаблоны разметки''']] со всеми функциями управления учетными записями шаблонами	&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Удаление блокировок	&lt;br /&gt;
|| Просмотр и удаление блокировок всех пользователей	&lt;br /&gt;
|| Наличие полномочия позволяет просматривать и удалять блокировки всех пользователей в разделе [[Help:UI manual#Управление блокировками разметки|'''Настройки – Блокировки''']]&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Администрирование сервера	&lt;br /&gt;
|| Просмотр настроек сервера, системных лог-файлов и выполнение операций по администрированию сервера Svacer, включая активацию лицензии	&lt;br /&gt;
|| Наличие полномочия делает доступным раздел [[Help:UI manual#Просмотр информации о сервере|'''Настройки – Информация о сервере''']]&lt;br /&gt;
Совместно с проектными доступами '''Управление ветками''' и снимками и '''Разметка маркеров''' становится доступна функция очистки разметки и комментариев в ветке&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Управление публичными фильтрами	&lt;br /&gt;
|| Публикация, редактирование и удаление публичных фильтров	&lt;br /&gt;
|| Наличие полномочия позволяет публиковать сохраненные фильтры, а также редактировать и удалять публичные фильтры&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Изменение любой разметки	&lt;br /&gt;
|| Изменение любой разметки маркеров, включая выполненную пользователями с признаком [[Help:UI manual#Управление пользователями, ролями и организациями|'''Мастер разметки''']]&lt;br /&gt;
|| Доступ позволяет переразмечать маркеры (добавлять новую разметку), которые разметили любые пользователи, в том числе те, для которых активирована опция [[Help:UI manual#Управление пользователями, ролями и организациями|'''Мастер разметки''']].&lt;br /&gt;
При этом:&lt;br /&gt;
# Полномочие не предоставляет доступ ко всем проектам. Т. е. пользователь с таким полномочием может изменять разметку только в проектах, к которым у него имеется доступ.&lt;br /&gt;
# Для переразметки маркеров пользователю должен быть предоставлен проектный доступ '''Разметка маркеров'''.&lt;br /&gt;
# Чтобы переразметить заблокированный маркер, сначала нужно [[Help:UI manual#Блокировка разметки маркеров|снять его блокировку]]&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Изменение любых комментариев	&lt;br /&gt;
|| Редактирование и удаление любых пользовательских комментариев к маркерам	&lt;br /&gt;
|| Доступ позволяет изменять/удалять комментарии, которые создали любые пользователи, в том числе те, для которых активирована опция [[Help:UI manual#Управление пользователями, ролями и организациями|'''Мастер разметки''']].&lt;br /&gt;
При этом:&lt;br /&gt;
# Полномочие не предоставляет доступ ко всем проектам. Т. е. пользователь с таким полномочием может изменять разметку только в проектах, к которым у него имеется доступ.&lt;br /&gt;
# Для добавления комментариев пользователю должно быть предоставлено проектное полномочие '''Разметка маркеров'''.&lt;br /&gt;
# Чтобы поменять комментарий к заблокированному маркеру, сначала нужно [[Help:UI manual#Блокировка разметки маркеров|снять его блокировку]]&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Создание резервных копий	&lt;br /&gt;
|| Создание, просмотр и восстановление резервных копий в интерфейсе командной строки	&lt;br /&gt;
|| – 	&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Запуск скриптов	&lt;br /&gt;
|| Запуск скриптов (hooks) по кнопке, расположенной на вкладке '''Подробности''' в правой панели, содержащей информацию о маркере	&lt;br /&gt;
|| Наличие полномочия добавляет строку '''Хуки''' на вкладке '''Подробности''' правой панели с возможностью запуска скриптов&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Проектные доступы===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Полномочие (доступ) !! Описание !! Влияние на графический интерфейс !! admin !! filter_master !! importer &lt;br /&gt;
|-&lt;br /&gt;
| Управление проектом и его ветками	&lt;br /&gt;
|| Редактирование и удаление проекта, включая операции по управлению ветками и снимками проекта, настройке глобальных фильтров, импорту/экспорту разметки и просмотру маркеров	&lt;br /&gt;
|| Наличие полномочия делает доступным:&lt;br /&gt;
* раздел [[Help:UI manual#Управление проектами и группами проектов|'''Проекты''']];&lt;br /&gt;
* все функции управления проектом (проектами в группе) и его содержимым (за исключением разметки маркеров) – т. е. все операции с проектом, ветками и снимками.&lt;br /&gt;
Наличие полномочия позволяет удалять приложения к снимкам и экспортировать разметку с исходным кодом&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Управление ветками и снимками	&lt;br /&gt;
|| Редактирование и удаление ветки проекта, включая операции по управлению снимками, настройке глобальных фильтров, импорту/экспорту разметки и просмотру маркеров	&lt;br /&gt;
|| Наличие полномочия делает доступным:&lt;br /&gt;
* раздел [[Help:UI manual#Управление проектами и группами проектов|'''Проекты''']];&lt;br /&gt;
* все функции управления веткой и снимками проекта (за исключением разметки маркеров) – т. е. доступны все операции с веткой и снимками, но не операции управления проектом.&lt;br /&gt;
Наличие полномочия позволяет удалять приложения к снимкам и экспортировать разметку с исходным кодом.&lt;br /&gt;
Запрещено клонировать ветку при наличии доступа только к этой ветке	&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Настройка глобальных фильтров	&lt;br /&gt;
|| Создание, редактирование и удаление глобальных фильтров	&lt;br /&gt;
|| Наличие полномочия делает доступным раздел [[Help:UI manual#Настройка глобальных фильтров|'''Настройки – Глобальные фильтры''']].&lt;br /&gt;
Список проектов и веток в разделе определяется полномочиями к этим проектам и веткам	&lt;br /&gt;
|| + 	|| + 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Импорт снимков	&lt;br /&gt;
|| Загрузка, редактирование названия и удаление снимков&lt;br /&gt;
|| Наличие полномочия делает доступным:&lt;br /&gt;
* раздел [[Help:UI manual#Управление проектами и группами проектов|'''Проекты''']];&lt;br /&gt;
* функции просмотра проекта и ветки, управления снимками в указанной ветке (включая импорт .svace-dir, SARIF и *.snap), просмотра маркеров в указанном контейнере&lt;br /&gt;
|| + 	|| – 	|| + &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Импорт разметки	&lt;br /&gt;
|| Импорт разметки из файла и комментариев в исходном коде 	&lt;br /&gt;
|| Наличие полномочия делает доступным импорт разметки из файла, импорт разметки из комментариев исходного кода снимка и просмотр маркеров в указанном контейнере	&lt;br /&gt;
|| + 	|| – 	|| + &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Экспорт снимков	&lt;br /&gt;
|| Экспорт данных снимков с разметкой и их открытие в IDE	&lt;br /&gt;
|| Наличие полномочия позволяет:&lt;br /&gt;
&lt;br /&gt;
* экспортировать разметку с исходными кодами;&lt;br /&gt;
* экспортировать снимки в форматах *.snap и SARIF;&lt;br /&gt;
* просматривать код с маркерами в Web-IDE&lt;br /&gt;
|| + 	|| – 	|| + &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Просмотр маркеров	&lt;br /&gt;
|| Просмотр маркеров и кода снимков, просмотр блокировок маркеров	&lt;br /&gt;
|| Наличие полномочия предоставляет доступ к следующим функциям [[Help:UI manual#Работа в режиме разметки|в режиме разметки]]:&lt;br /&gt;
* просмотр и выбор снимков в указанном контейнере;&lt;br /&gt;
* просмотр содержимого снимков и маркеров (без возможности разметки).&lt;br /&gt;
Также наличие полномочия предоставляет доступ к разделу [[Help:UI manual#Управление блокировками разметки|'''Настройки – Блокировки''']], но только в части просмотра блокировок в доступных контейнерах, без возможности их удаления	&lt;br /&gt;
|| +	|| + 	|| + &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Разметка маркеров	&lt;br /&gt;
|| Просмотр и разметка маркеров в снимках, включая добавление комментариев, управление списком блокировок	&lt;br /&gt;
|| Наличие полномочия позволяет пользователю размечать маркеры в указанном контейнере, добавлять комментарии, управлять своими блокировками, т. е. для собственных блокировок доступны кнопки удаления, а блокировки других пользователей доступны только для просмотра.&lt;br /&gt;
При отсутствии полномочия в таблице маркеров недоступны поля для установки флажков, а кнопка групповой разметки – неактивна.&lt;br /&gt;
Для разметки маркеров с помощью AI совместно с данным доступом должен быть активен доступ '''Импорт разметки''' &lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Report API	&lt;br /&gt;
|| Использование Report API для получения статистических показателей	&lt;br /&gt;
|| –	&lt;br /&gt;
|| + 	|| – 	|| – &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Известные ограничения ===&lt;br /&gt;
&lt;br /&gt;
* Управление ''своими'' проектами для пользователей только c серверной ролью &amp;quot;Create Projects&amp;quot; без дополнительных прав может не работать для проектов, созданных до Release 7-0-0. &lt;br /&gt;
: Workaround: добавить пользователю явно проектные доступы на каждый необходимый проект.&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Notifications&amp;diff=3431</id>
		<title>Notifications</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Notifications&amp;diff=3431"/>
		<updated>2025-12-03T10:33:23Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: fix page link (installation &amp;gt; configuration)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Механизм подписок на внутренние события Svacer ==&lt;br /&gt;
&lt;br /&gt;
=== Общие принципы ===&lt;br /&gt;
&lt;br /&gt;
В Svacer реализован механизм оповещения пользователей на некоторые классы событий, возникающих в Svacer в результате работы пользователей в системе. Оповещение пользователей возможны с использованием следующих сервисов:&lt;br /&gt;
&lt;br /&gt;
* Электронная почта&lt;br /&gt;
* Индивидуальный чат пользователя мессенджера telegram с ботом&lt;br /&gt;
&lt;br /&gt;
Существует три класса внутренних событий, на которые возможно получение оповещения:&lt;br /&gt;
&lt;br /&gt;
* разметка маркера(ов), в том числе групповая (REVIEW)&lt;br /&gt;
* создание/редактирование и удаление комментария к маркеру (COMMENT)&lt;br /&gt;
* добавление/удаление снимков (SNAPSHOT)&lt;br /&gt;
* удаление контейнеров (веток, проектов)&lt;br /&gt;
&lt;br /&gt;
Задание условий, по которым происходит оповещение конкретного пользователя определяется сущностью – подписка. Подписки для каждого пользователя индивидуальны и не ограничены в количестве. Каждая подписка отражает следующие условия сработки механизма оповещения:&lt;br /&gt;
&lt;br /&gt;
* Цель&lt;br /&gt;
* Класс события&lt;br /&gt;
* Флаг&lt;br /&gt;
* Тип подписки&lt;br /&gt;
&lt;br /&gt;
'''Цель''' – определяет объект, в отношении которого должно произойти событие, чтобы пользователь получил оповещение. Возможна подписка на проекты и ветки&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Класс события''' – определяет один из трех классов события, описанных выше (кроме удаления контейнеров)&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Флаг''' – дополнительное условие к активации подписки. Возможны следующие значения:&amp;lt;br /&amp;gt;&lt;br /&gt;
:''Участие'' – подписка приведет к созданию сообщения пользователю только в том случае, если в указанной цели есть какая-либо активность пользователя (разметка или комментарий), кому подписка принадлежит&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Тип подписки''' – подписка может иметь &amp;quot;исключающее&amp;quot; свойство, когда она подавляет создание сообщений. Полезно при исключении некоторых целей из списка срабатывания (например, когда есть подписка на проект, но некоторые ветки не требуют внимания)&lt;br /&gt;
&lt;br /&gt;
Пользователи могут настраивать каналы оповещения (почта или telegram) посредством изменения своего '''профиля подписок'''. Профиль подписок не включает в себя сами подписки, а позволяет контролировать только механизм доставки создаваемых подписками сообщений. Профиль можно изменять как в GUI, так и через команды CLI.&lt;br /&gt;
&lt;br /&gt;
==== Некоторые детали работы механизма подписок ====&lt;br /&gt;
&lt;br /&gt;
Механизм подписок может удерживать некоторые сообщения, накапливая их в очереди, для минимизации числа соединений с сервером (почтовым или telegram). Отправка сообщений происходит 1 раз в 30 секунд, в связи с чем могут быть задержки с получением сообщений.&lt;br /&gt;
&lt;br /&gt;
Кроме того, действия по разметке маркера могут быть аккумулированы в одно сообщение, если они происходят достаточно быстро (несколько событий на одном маркере для одной подписки в пределах 20 секунд).&lt;br /&gt;
&lt;br /&gt;
В некоторых случаях, при активности большого количества пользователей со средней суммарной активностью пользователей приблизительно в 3072 события разметки в минуту, сообщения могут быть отброшены системой, чтобы не приводить к спаму.&lt;br /&gt;
&lt;br /&gt;
Для предотвращения создания большого количества соединений с почтовым сервером (при активной работе пользователей или средств автоматизации) возможно использование специального флага в конфигурации – saveConection, который позволяет переиспользовать уже созданное ранее соединение с почтовым сервером. Соединение закрывается автоматически через 10 секунд простоя.&lt;br /&gt;
&lt;br /&gt;
Для отправки сообщений через мессенджер telegram сервер Svacer требует идентификатор заранее созданного бота. При этом бот используется только для отправки сообщений и не находится в запущенном состоянии постоянно (нет постоянного соединения с серверами telegram). &lt;br /&gt;
&lt;br /&gt;
=== Конфигурация  ===&lt;br /&gt;
&lt;br /&gt;
По умолчанию механизм подписок не активен. Для его активации необходимо подготовить секцию subscription в конфигурационном файле Svacer. Примерный конфигурационный файл указан ниже&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;subscription:&lt;br /&gt;
 enabled: true&lt;br /&gt;
 trace: false&lt;br /&gt;
 advanced: &lt;br /&gt;
  transport_queue_len: 256&lt;br /&gt;
  transport_worker_period: 30000000000&lt;br /&gt;
  trace_dir: /tmp&lt;br /&gt;
 telegram:&lt;br /&gt;
  enabled: true&lt;br /&gt;
  botID: &amp;amp;quot;7865..........&amp;amp;quot;&lt;br /&gt;
 mail:&lt;br /&gt;
  enabled: true&lt;br /&gt;
  smtpAddress: &amp;amp;quot;smtp.local&amp;amp;quot;&lt;br /&gt;
  smtpPort: 25&lt;br /&gt;
  smtpUsername: &amp;amp;quot;&amp;amp;quot;&lt;br /&gt;
  smtpPassword: &amp;amp;quot;&amp;amp;quot;&lt;br /&gt;
  caCerts: &amp;amp;quot;&amp;amp;quot;&lt;br /&gt;
  smtpAuth: &amp;amp;quot;noauth&amp;amp;quot;&lt;br /&gt;
  from: &amp;amp;quot;mailer@local&amp;amp;quot;&lt;br /&gt;
  tls: true&lt;br /&gt;
  saveConnection: false&lt;br /&gt;
  debug: false&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note|type=reminder|text=При конфигурировании службы необходимо явно указать значение advanced.transport_worker_period для избежания проблемы повышенной загрузки CPU. Значение указывается в наносекундах}}&lt;br /&gt;
&lt;br /&gt;
==== Описание параметров конфигурации ====&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| subscription.enabled&lt;br /&gt;
| Состояние службы при старте сервера Svacer&lt;br /&gt;
|-&lt;br /&gt;
| subscription.trace&lt;br /&gt;
| Позволяет фиксировать работу службы в виде набора файлов, создаваемых во временной папке ОС (/tmp/ для ОС Linux)&lt;br /&gt;
|-&lt;br /&gt;
| telegram.enabled&lt;br /&gt;
| Состояние канала доставки сообщений посредством мессенджера telegram при запуске сервера&lt;br /&gt;
|-&lt;br /&gt;
| telegram.botID&lt;br /&gt;
| Идентификатор бота, который будет использован для отправки сообщений&lt;br /&gt;
|-&lt;br /&gt;
| mail.enabled&lt;br /&gt;
| Состояние канала доставки сообщений с помощью электронной почты при запуске сервера&lt;br /&gt;
|-&lt;br /&gt;
| mail.smtpAddress&lt;br /&gt;
| Адрес почтового сервера, который будет использован для отправки сообщений&lt;br /&gt;
|-&lt;br /&gt;
| mail.smtpPort&lt;br /&gt;
| Параметр, задающий порт на котором работает почтовый сервер. По умолчанию используется значение 25&lt;br /&gt;
|-&lt;br /&gt;
| mail.smtpAuth&lt;br /&gt;
| Параметр, задающий тип аутентификации, используемой клиентом. Возможны варианты: noauth, plain, login&lt;br /&gt;
|-&lt;br /&gt;
| mail.smtpUsername (mail.smtpPassword)&lt;br /&gt;
| Параметры, задающие учетную запись от имени которой будет происходить рассылка сообщений. В случае аутентификации noauth, должны быть указаны пустые значения&lt;br /&gt;
|-&lt;br /&gt;
| mail.caCerts&lt;br /&gt;
| Параметр, задающий сертификаты CA. Значения поля аналогичны значениям соответствующего поля из конфигурации сервера для работы по протоколу TLS (нативный режим). Если указано пустое значение, то поддержка TLS будет сконфигурирована в небезопасном режиме с доверием любому сертификату сервера&lt;br /&gt;
|-&lt;br /&gt;
| mail.from&lt;br /&gt;
| Поле, указывающее почтовый адрес, от имени которого будет осуществлять рассылка&lt;br /&gt;
|-&lt;br /&gt;
| mail.tls&lt;br /&gt;
| Использовать или нет tls для соединения с сервером&lt;br /&gt;
|-&lt;br /&gt;
| mail.debug&lt;br /&gt;
| Выводить отладочную информацию протокола взаимодействия с почтовым сервером&lt;br /&gt;
|-&lt;br /&gt;
| saveConnection&lt;br /&gt;
| Сохранять уже установленное соединение с почтовым сервером (в течении 10 секунд после последней активности)&lt;br /&gt;
|-&lt;br /&gt;
|advanced.transport_queue_len&lt;br /&gt;
|Значение по умолчанию — 256. Определяет максимальный размер буфера накапливаемых сообщений. Если буфер полный, новые сообщения будут игнорироваться (о чем будет сообщение в логах сервера)&lt;br /&gt;
|-&lt;br /&gt;
|advanced.transport_worker_period&lt;br /&gt;
|Значение по умолчанию — 30. Определяет период срабатывания очереди сообщения в наносекундах&lt;br /&gt;
|-&lt;br /&gt;
|advanced.trace_dir&lt;br /&gt;
|Значение по умолчанию определяется типом системы (Для Linux — /tmp). Позволяет указать папку, в которой будут размещаться отладочные файлы работы службы оповещений&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note|type=reminder|text=Для работы службы необходимо запускать Svacer  с опцией '''[[Help:Configuration#Указание_public-url|public-url]]'''. Без указания этой опции служба не будет активирована, так как создаваемые в процессе ее работы ссылки должны содержать правильные URL}}&lt;br /&gt;
&lt;br /&gt;
==== Особенности работы почтового клиента, используемого Svacer ====&lt;br /&gt;
&lt;br /&gt;
''Поддержка TLS''. Если флаг mail.tls установлен, то соединение с сервером изначально будет установлено по протоколу TLS. В противном случае, изначально будет установлено обычное TCP соединение, и уже после команды STARTTLS стороны перейдут на протокол TLS. В случае если TLS соединение не сможет быть установлено, клиент будет пытаться работать без TLS соединения. &lt;br /&gt;
&lt;br /&gt;
Для облегчения проверки конфигурации сервера Svacer для отправки почтовых сообщений можно использовать команду cli (см. подробнее ниже): &lt;br /&gt;
&lt;br /&gt;
 svacer subscription transport mail test --config mail.yaml&lt;br /&gt;
&lt;br /&gt;
=== Команды CLI для работы с механизмом подписок ===&lt;br /&gt;
&lt;br /&gt;
Все команды собраны в группу ''svacer subscription''. Доступны следующие подкоманды:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;transport&amp;lt;/code&amp;gt; – функции по работе (конфигурации) используемых механизмов доставки сообщений (mail, tg)&lt;br /&gt;
* &amp;lt;code&amp;gt;profile&amp;lt;/code&amp;gt; – управление профилем подписки пользователя&lt;br /&gt;
* &amp;lt;code&amp;gt;admin&amp;lt;/code&amp;gt; – управление службой подписок&lt;br /&gt;
* &amp;lt;code&amp;gt;create&amp;lt;/code&amp;gt; – cоздание новой подписки&lt;br /&gt;
* &amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt; – просмотр списка подписок&lt;br /&gt;
* &amp;lt;code&amp;gt;delete&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;
==== Команды управления подписками ====&lt;br /&gt;
&lt;br /&gt;
Для управления подписками пользователя используются следующие команды:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;create&amp;lt;/code&amp;gt; – создание подписки&lt;br /&gt;
* &amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt; – перечесление подписок пользователя&lt;br /&gt;
* &amp;lt;code&amp;gt;delete&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;
{{Note|text=Во всех командах присутствуют стандартные для CLI Svacer флаги подключения к серверу (--host, --port, --grpc, --user, --password, --ssl и другие). Группа этих флагов в дальнейшем будет обозначаться как [svacer_conn]}}&lt;br /&gt;
&lt;br /&gt;
===== Создание подписки (команда 'create') =====&lt;br /&gt;
&lt;br /&gt;
Общий формат команды:&lt;br /&gt;
&lt;br /&gt;
 svacer subscription create [svacer_conn] [опции]&lt;br /&gt;
&lt;br /&gt;
'''Опции:'''&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;project&amp;lt;/code&amp;gt; – имя или ID проекта&lt;br /&gt;
* &amp;lt;code&amp;gt;branch&amp;lt;/code&amp;gt; – имя или ID ветки&lt;br /&gt;
* &amp;lt;code&amp;gt;marker&amp;lt;/code&amp;gt; – ID маркера&lt;br /&gt;
* &amp;lt;code&amp;gt;exclude&amp;lt;/code&amp;gt; – подписка имеет исключающий характер (по умолчанию &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;my-activities&amp;lt;/code&amp;gt; – оповещение только в случае событий на маркерах, где была собственная активность (разметка, комментарий) (по умолчанию &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;review&amp;lt;/code&amp;gt; – подписаться на события REVIEW&lt;br /&gt;
* &amp;lt;code&amp;gt;snapshot&amp;lt;/code&amp;gt; – подписаться на события SNAPSHOT&lt;br /&gt;
* &amp;lt;code&amp;gt;comment&amp;lt;/code&amp;gt; – подписаться на события COMMENT&lt;br /&gt;
* &amp;lt;code&amp;gt;all-events&amp;lt;/code&amp;gt; – подписаться на все классы событий&lt;br /&gt;
&lt;br /&gt;
{{Note}} При создании подписки важно указывать имена или ID одновременно во всех требуемых флагах. Например, команда:&lt;br /&gt;
&lt;br /&gt;
 svacer subscription create --project darpa --branch 1111-2222-333333333&lt;br /&gt;
&lt;br /&gt;
не будет корректно обработана. При использовании ID цели можно не указывать родительские сущности (например, проект для ветки)&lt;br /&gt;
&lt;br /&gt;
'''Пример использования:'''&lt;br /&gt;
&lt;br /&gt;
Подписаться на события REVIEW в проекте &amp;amp;quot;MyProject&amp;amp;quot; и ветке &amp;amp;quot;MyBranch&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;svacer subscription create --project MyProject --branch MyBranch --review&amp;lt;/pre&amp;gt;&lt;br /&gt;
Подписаться на все события в проекте &amp;amp;quot;MyProject&amp;amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;svacer subscription create --project MyProject --all-events&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Получение списка подписок (команда list) =====&lt;br /&gt;
&lt;br /&gt;
Общий формат команды:&lt;br /&gt;
&lt;br /&gt;
 svacer subscription list [svacer_conn] [опции]&lt;br /&gt;
&lt;br /&gt;
'''Опции:'''&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;all&amp;lt;/code&amp;gt; – вывести все подписки всех пользователей (требуется роль admin)&lt;br /&gt;
* &amp;lt;code&amp;gt;humanize&amp;lt;/code&amp;gt; – вывести в удобном для чтения виде&lt;br /&gt;
&lt;br /&gt;
'''Пример использования:'''&lt;br /&gt;
&lt;br /&gt;
Вывести все подписки пользователя 'user' в формате JSON (по умолчанию):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;svacer subscription list --user user --password 1234&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вывести все подписки пользователя 'user' в удобном формате&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;svacer subscription list --user user --password 1234 --humanize&amp;lt;/pre&amp;gt;&lt;br /&gt;
Вывести все подписки всех пользователей&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;svacer subscription list --user admin --password admin --all --humanize&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Удаление подписки (команда delete) =====&lt;br /&gt;
&lt;br /&gt;
Общий формат команды:&lt;br /&gt;
&lt;br /&gt;
 svacer subscription delete [svacer_conn] [опции]&lt;br /&gt;
&lt;br /&gt;
'''Опции:'''&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;all&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;
'''Пример использования:'''&lt;br /&gt;
&lt;br /&gt;
Удалить подписку пользователя user1&lt;br /&gt;
&lt;br /&gt;
 svacer subscription delete --user user1 --password 1234 --id 1234&lt;br /&gt;
&lt;br /&gt;
Полный ID можно не указывать, достаточно указать несколько первых символов идентификатора, достаточных для однозначной идентификации подписки&lt;br /&gt;
&lt;br /&gt;
===== Обновление подписки (команда update) =====&lt;br /&gt;
&lt;br /&gt;
Общий формат команды:&lt;br /&gt;
&lt;br /&gt;
 svacer subscription update [svacer_conn] [опции]&lt;br /&gt;
&lt;br /&gt;
'''Опции:'''&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; – ID подписки для обновления&lt;br /&gt;
* &amp;lt;code&amp;gt;only-my-activities&amp;lt;/code&amp;gt; – установка флага my-activities для подписки (по умолчанию &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
'''Пример использования:'''&lt;br /&gt;
&lt;br /&gt;
Установить флаг my-activities для подписки, ID которой начинается с символов f1f2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;svacer subscription update --id f1f2 --only-my-activities true&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Команды настройки и управления каналами доставки сообщений ====&lt;br /&gt;
&lt;br /&gt;
В Svacer поддерживаются два канала доставки сообщений — электронная почта и мессенджер Telegram. Для облегчения конфигурации данных каналов используются подкоманды команды &amp;lt;code&amp;gt;svacer subscription transport&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;mail&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Подкоманда 'mail''''&lt;br /&gt;
&lt;br /&gt;
Предназначена для облегчения конфигурации почтового клиента Svacer. Общий формат команды:&lt;br /&gt;
&lt;br /&gt;
 svacer subscription transport mail [опции]&lt;br /&gt;
&lt;br /&gt;
'''Опции:'''&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--to&amp;lt;/code&amp;gt; — почтовый адрес для отправки тестового сообщения&lt;br /&gt;
* &amp;lt;code&amp;gt;--config&amp;lt;/code&amp;gt; — секция mail конфигурационного файла в формате YAML&lt;br /&gt;
&lt;br /&gt;
В качестве параметра обязательно передать файл в формате yaml, содержимое которого соответствует секции mail конфигурационного файла для службы. Содержимое такого файла может следующим:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;  enabled: true&lt;br /&gt;
  smtpAddress: &amp;amp;quot;smtp.mail.local&amp;amp;quot;&lt;br /&gt;
  smtpPort: 25&lt;br /&gt;
  smtpUsername: &amp;amp;quot;&amp;amp;quot;&lt;br /&gt;
  smtpPassword: &amp;amp;quot;&amp;amp;quot;&lt;br /&gt;
  smtpAuth: &amp;amp;quot;noauth&amp;amp;quot;&lt;br /&gt;
  from: &amp;amp;quot;sender@mail.local&amp;amp;quot;&lt;br /&gt;
  debug: true&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Пример использования:'''&lt;br /&gt;
&lt;br /&gt;
Отправить тестовое письмо на адрес &amp;lt;code&amp;gt;admin@mail.org&amp;lt;/code&amp;gt;, используя конфигурацию &amp;lt;code&amp;gt;test.yaml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;svacer subscription transport mail test --config test.yaml --to admin@mail.org&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Группа команд администрирования службы (admin) ====&lt;br /&gt;
&lt;br /&gt;
Данные команды требуют роль admin и предназначены для управления некоторыми параметрами самой службы. Доступные подкоманды:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;service&amp;lt;/code&amp;gt; – управление службой подписок&amp;lt;br /&amp;gt;&lt;br /&gt;
Общий формат команды:&lt;br /&gt;
&lt;br /&gt;
 svacer subscription admin service [svacer_conn] [опции]&lt;br /&gt;
&lt;br /&gt;
'''Опции'''&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;enable&amp;lt;/code&amp;gt; – включение/выключение службы&lt;br /&gt;
* &amp;lt;code&amp;gt;use-mail&amp;lt;/code&amp;gt; – включение/выключение канала передачи сообщений через электронную почту&lt;br /&gt;
* &amp;lt;code&amp;gt;use-tg&amp;lt;/code&amp;gt; – включение/выключение канала передачи сообщений через Telegram&lt;br /&gt;
&lt;br /&gt;
Если запускать команду без указания флагов, то будет выведена информация о текущем состоянии службы с рядом параметров.&lt;br /&gt;
&lt;br /&gt;
{{Note|text=При использовании флагов use-mail, use-tg не происходит повторное считывание конфигурационного файла. Для того, чтобы флаги use-mail и use-tg корректно применились их необходимо запускать одновременно с флагом --enable true, предварительно отключив службу с помощью флага --enable false}}&lt;br /&gt;
&lt;br /&gt;
==== Группа команд управления профилем пользователя (profile) ====&lt;br /&gt;
&lt;br /&gt;
Команда предназначена для управление профилем пользователя и имеет следующий формат:&lt;br /&gt;
&lt;br /&gt;
 svacer subscription profile [svacer_conn] [update] [опции]&lt;br /&gt;
&lt;br /&gt;
'''Опции (актуальны для подкоманды update):'''&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;use-mail&amp;lt;/code&amp;gt; – использовать канал передачи сообщений через электронную почту&lt;br /&gt;
* &amp;lt;code&amp;gt;use-tg&amp;lt;/code&amp;gt; – использовать канал передачи сообщений через Telegram&lt;br /&gt;
* &amp;lt;code&amp;gt;mail&amp;lt;/code&amp;gt; – изменить почтовый адрес&lt;br /&gt;
* &amp;lt;code&amp;gt;tg-chat-id&amp;lt;/code&amp;gt; – установить ID чата для сообщений Telegram&lt;br /&gt;
* &amp;lt;code&amp;gt;tg-user-id&amp;lt;/code&amp;gt; – установить ID пользователя для сообщений Telegram&lt;br /&gt;
* &amp;lt;code&amp;gt;enable&amp;lt;/code&amp;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;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;#!/bin/bash -x&lt;br /&gt;
#Общие параметры подключения к Svacer&lt;br /&gt;
HOST=&amp;amp;quot;--host 10.0.0.10 --port 8888&amp;amp;quot;&lt;br /&gt;
#Тестовые проекты&lt;br /&gt;
PROJECT1=&amp;amp;quot;NET6&amp;amp;quot;&lt;br /&gt;
PROJECT2=&amp;amp;quot;darpa&amp;amp;quot;&lt;br /&gt;
PROJECT3=&amp;amp;quot;large&amp;amp;quot;&lt;br /&gt;
PROJECT3_BRANCH1=&amp;amp;quot;master&amp;amp;quot;&lt;br /&gt;
#Параметры аутентификации пользователей&lt;br /&gt;
USER1=&amp;amp;quot;--user admin_1 --password password&amp;amp;quot;&lt;br /&gt;
USER2=&amp;amp;quot;--user admin_2 --password password&amp;amp;quot;&lt;br /&gt;
USER3=&amp;amp;quot;--user admin_3 --password password&amp;amp;quot;&lt;br /&gt;
USER4=&amp;amp;quot;--user admin_4 --password password&amp;amp;quot;&lt;br /&gt;
USER5=&amp;amp;quot;--user admin_5 --password password&amp;amp;quot;&lt;br /&gt;
USER6=&amp;amp;quot;--user admin_6 --password password&amp;amp;quot;&lt;br /&gt;
USER7=&amp;amp;quot;--user admin_7 --password password&amp;amp;quot;&lt;br /&gt;
#ID пользователя в Telegram&lt;br /&gt;
TG_USER_ID=721941843&lt;br /&gt;
TG_CHAT_ID=$TG_USER_ID&lt;br /&gt;
&lt;br /&gt;
#Команда создания подписки&lt;br /&gt;
CREATE_SN=&amp;amp;quot;./svacer subscription create&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
#User1 - подписка на все, но с флагом myactivities&lt;br /&gt;
$CREATE_SN $HOST $USER1 --all-events --my-activities&lt;br /&gt;
#User2 - подписка на проект1, только снимки&lt;br /&gt;
$CREATE_SN $HOST $USER2 --project $PROJECT1 --snapshot&lt;br /&gt;
#User2 - подписка на проект2, только разметка&lt;br /&gt;
$CREATE_SN $HOST $USER2 --project $PROJECT2 --review&lt;br /&gt;
#User2 - подписка на проект3, только комментарии&lt;br /&gt;
$CREATE_SN $HOST $USER2 --project $PROJECT3 --comment&lt;br /&gt;
#User3 - подписка на проект3, исключая ветку1, все события&lt;br /&gt;
$CREATE_SN $HOST $USER3 --project $PROJECT3 --all-events&lt;br /&gt;
$CREATE_SN $HOST $USER3 --project $PROJECT3 --branch $PROJECT3_BRANCH1 --exclude&lt;br /&gt;
#User4 - подписка на проект2,  все события&lt;br /&gt;
$CREATE_SN $HOST $USER4 --project $PROJECT2 --all-events&lt;br /&gt;
#User5 - подписка на проект3,  все события&lt;br /&gt;
$CREATE_SN $HOST $USER5 --project $PROJECT3 --all-events&lt;br /&gt;
#User6 - подписка на все проекты, все события&lt;br /&gt;
$CREATE_SN $HOST $USER6  --all-events&lt;br /&gt;
#User7 - подписка на все проекты, все события&lt;br /&gt;
$CREATE_SN $HOST $USER7  --all-events&lt;br /&gt;
&lt;br /&gt;
#Команда работы с профилем&lt;br /&gt;
ENABLE_NTFY_MAIL=&amp;amp;quot;./svacer subscription profile&amp;amp;quot;&lt;br /&gt;
#User1, включить получение сообщений по почте, по Telegram, установить адрес электронной почты для сообщений, указать ID пользователя для получения сообщений в Telegram&lt;br /&gt;
$ENABLE_NTFY_MAIL $HOST $USER1  update --enable true --use-mail true --mail user1@mb1lo.ru --use-tg true --tg-user-id $TG_USER_ID --tg-chat-id $TG_CHAT_ID&lt;br /&gt;
#User2, отключить получение всех сообщений (подписки останутся)&lt;br /&gt;
$ENABLE_NTFY_MAIL $HOST $USER2  update --enable false&lt;br /&gt;
#User3, отключить получение собщений по Telegram&lt;br /&gt;
$ENABLE_NTFY_MAIL $HOST $USER3  update --use-tg false&lt;br /&gt;
#User4, изменить параметры канала Telegram&lt;br /&gt;
$ENABLE_NTFY_MAIL $HOST $USER4  update --tg-user-id $TG_USER_ID --tg-chat-id $TG_CHAT_ID&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Пример конфигурационного файла для активации службы уведомлений при запуске Svacer ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;subscription:&lt;br /&gt;
 enabled: true&lt;br /&gt;
 telegram:&lt;br /&gt;
  enabled: true&lt;br /&gt;
  botID: &amp;amp;quot;7861931704:AAEHfp035U10pJk0lIjo1lYJj1e837qv7j4&amp;amp;quot;&lt;br /&gt;
 mail:&lt;br /&gt;
  enabled: true&lt;br /&gt;
  smtpAddress: &amp;amp;quot;mail-server.ispras.ru&amp;amp;quot;&lt;br /&gt;
  smtpPort: 25&lt;br /&gt;
  smtpUsername: &amp;amp;quot;&amp;amp;quot;&lt;br /&gt;
  smtpPassword: &amp;amp;quot;&amp;amp;quot;&lt;br /&gt;
  smtpAuth: &amp;amp;quot;noauth&amp;amp;quot;&lt;br /&gt;
  from: &amp;amp;quot;relay@ispras.ru&amp;amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В примере выше подразумевается наличие почтового сервера, не требующего аутентификации. В примере ниже указан случай отправки сообщений от конкретного пользователя&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;subscription:&lt;br /&gt;
 enabled: true&lt;br /&gt;
 telegram:&lt;br /&gt;
  enabled: true&lt;br /&gt;
  botID: &amp;amp;quot;7861931704:AAEHfp035U10pJk0lIjo1lYJj1e837qv7j4&amp;amp;quot;&lt;br /&gt;
 mail:&lt;br /&gt;
  enabled: true&lt;br /&gt;
  smtpAddress: &amp;amp;quot;mail.ispras.ru&amp;amp;quot;&lt;br /&gt;
  smtpPort: 25&lt;br /&gt;
  smtpUsername: &amp;amp;quot;user@ispras.ru&amp;amp;quot;&lt;br /&gt;
  smtpPassword: &amp;amp;quot;abrakadabra&amp;amp;quot;&lt;br /&gt;
  smtpAuth: &amp;amp;quot;plain&amp;amp;quot;&lt;br /&gt;
  from: &amp;amp;quot;user@ispras.ru&amp;amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В следующем примере устанавливается соединение TLS с почтовым сервером&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;subscription:&lt;br /&gt;
 enabled: true&lt;br /&gt;
 telegram:&lt;br /&gt;
  enabled: true&lt;br /&gt;
  botID: &amp;amp;quot;7861931704:AAEHfp035U10pJk0lIjo1lYJj1e837qv7j4&amp;amp;quot;&lt;br /&gt;
 mail:&lt;br /&gt;
  enabled: true&lt;br /&gt;
  smtpAddress: &amp;amp;quot;mail.ispras.ru&amp;amp;quot;&lt;br /&gt;
  smtpPort: 465&lt;br /&gt;
  smtpUsername: &amp;amp;quot;user@ispras.ru&amp;amp;quot;&lt;br /&gt;
  smtpPassword: &amp;amp;quot;abrakadabra&amp;amp;quot;&lt;br /&gt;
  smtpAuth: &amp;amp;quot;plain&amp;amp;quot;&lt;br /&gt;
  from: &amp;amp;quot;user@ispras.ru&amp;amp;quot;&lt;br /&gt;
  tls: true&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В следующем примере устанавливается соединение TLS с помощью команды STARTTLS с почтовым сервером (в консоль будут также выведены отладочные сообщения почтового клиента)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;subscription:&lt;br /&gt;
 enabled: true&lt;br /&gt;
 telegram:&lt;br /&gt;
  enabled: true&lt;br /&gt;
  botID: &amp;amp;quot;7861931704:AAEHfp035U10pJk0lIjo1lYJj1e837qv7j4&amp;amp;quot;&lt;br /&gt;
 mail:&lt;br /&gt;
  enabled: true&lt;br /&gt;
  smtpAddress: &amp;amp;quot;mail.ispras.ru&amp;amp;quot;&lt;br /&gt;
  smtpPort: 587&lt;br /&gt;
  smtpUsername: &amp;amp;quot;user@ispras.ru&amp;amp;quot;&lt;br /&gt;
  smtpPassword: &amp;amp;quot;abrakadabra&amp;amp;quot;&lt;br /&gt;
  smtpAuth: &amp;amp;quot;plain&amp;amp;quot;&lt;br /&gt;
  from: &amp;amp;quot;user@ispras.ru&amp;amp;quot;&lt;br /&gt;
  tls: false&lt;br /&gt;
  debug: true&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом сервер mail.ispras.ru работает на всех портах: на 465 принимаются только TLS соединения, на 587 — обычные соединения с переходом на TLS впоследствии, на 25 — обычные соединения (без TLS)&lt;br /&gt;
&lt;br /&gt;
=== Пример конфигурации службы с запуском ее вручную через команду cli ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;subscription:&lt;br /&gt;
 enabled: false&lt;br /&gt;
 telegram:&lt;br /&gt;
  enabled: true&lt;br /&gt;
  botID: &amp;amp;quot;7861931704:AAEHfp035U10pJk0lIjo1lYJj1e837qv7j4&amp;amp;quot;&lt;br /&gt;
 mail:&lt;br /&gt;
  enabled: true&lt;br /&gt;
  smtpAddress: &amp;amp;quot;mail.ispras.ru&amp;amp;quot;&lt;br /&gt;
  smtpPort: 587&lt;br /&gt;
  smtpUsername: &amp;amp;quot;user@ispras.ru&amp;amp;quot;&lt;br /&gt;
  smtpPassword: &amp;amp;quot;abrakadabra&amp;amp;quot;&lt;br /&gt;
  smtpAuth: &amp;amp;quot;plain&amp;amp;quot;&lt;br /&gt;
  from: &amp;amp;quot;user@ispras.ru&amp;amp;quot;&lt;br /&gt;
  tls: false&amp;lt;/pre&amp;gt;&lt;br /&gt;
После запуска сервера Svacer можно активировать службу с помощью команды&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;svacer subscription admin service --user admin --password admin --enable true&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Pipelines&amp;diff=3430</id>
		<title>Pipelines</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Pipelines&amp;diff=3430"/>
		<updated>2025-12-03T10:19:36Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: fix page link (installation &amp;gt; configuration)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Статический анализ и загрузка результатов ===&lt;br /&gt;
Самый базовый пример пайплайна Gitlab-CI. Сборка и анализ запускаются в докер-контейнере, где уже установлен Svace, Svacer и базовые пакеты для сборки (метапакет build-essential). Репозиторий в пайплайне не клонируется, поскольку файл пайплайна .gitlab-ci.yml уже находится в анализируемом репозитории.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
image: registry.ispras.ru/demo/docker-images/ubuntu-svace-svacer:focal-3.4.240902-9.0.2 &lt;br /&gt;
&lt;br /&gt;
analyze:&lt;br /&gt;
  stage: build&lt;br /&gt;
&lt;br /&gt;
  script:&lt;br /&gt;
    - ./configure&lt;br /&gt;
    - /opt/svace/bin/svace build --init make&lt;br /&gt;
    - /opt/svace/bin/svace analyze&lt;br /&gt;
    - /usr/bin/svacer import --svace /opt/svace/bin/svace --project bash &lt;br /&gt;
    - /usr/bin/svacer upload --host https://svacer.ispras.ru&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Использование quality gate ===&lt;br /&gt;
&lt;br /&gt;
{{Note|text=В версии 9.х.х был баг в quality-gate: он всегда возвращал 0, даже если задан другой exit code. В версии 10.0.0 это исправили.}}&lt;br /&gt;
&lt;br /&gt;
В этом примере пайплайна из Gitlab-CI после этапов сборки и анализа запускается импорт результатов с указанием имен проекта, ветки и снимка, взятых из CI-переменных, а при загрузке используется quality-gate, который меняет статус пайплайна в зависимости от результатов статического анализа.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
image: registry.ispras.ru/demo/docker-images/ubuntu-svace-svacer:focal-3.4.240902-9.0.2 &lt;br /&gt;
&lt;br /&gt;
analyze:&lt;br /&gt;
  stage: build&lt;br /&gt;
&lt;br /&gt;
  tags:&lt;br /&gt;
  - docker&lt;br /&gt;
  - linux&lt;br /&gt;
&lt;br /&gt;
  script:&lt;br /&gt;
    - apt update &lt;br /&gt;
    - apt install -y git python3 pkg-config mesa-common-dev libgl-dev libglu1-mesa-dev freeglut3-dev libx11-dev libxi-dev libxrandr-dev &lt;br /&gt;
    - git clone --recurse-submodules -j`nproc` https://github.com/ArtifexSoftware/mupdf.git&lt;br /&gt;
    - cd mupdf&lt;br /&gt;
    - /opt/svace/bin/svace build --init make -j`nproc`&lt;br /&gt;
    - /opt/svace/bin/svace analyze&lt;br /&gt;
    - /usr/bin/svacer import --svace /opt/svace/bin/svace --project &amp;quot;${CI_PROJECT_NAMESPACE}-${CI_PROJECT_NAME}&amp;quot; --branch $CI_COMMIT_REF_NAME --snapshot &amp;quot;$CI_COMMIT_SHORT_SHA - `date -R`&amp;quot;&lt;br /&gt;
    - /usr/bin/svacer upload --host https://svacer.ispras.ru --quick-stats --quality-gate total:critical:0 --quality-gate-exit-code 1&lt;br /&gt;
&lt;br /&gt;
  allow_failure:&lt;br /&gt;
    exit_codes: &lt;br /&gt;
      - 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* В начале ставятся специфические зависимости, необходимые для сборки mupdf&lt;br /&gt;
* Клонируется репозиторий с его сабмодулями&lt;br /&gt;
* Запускается сборка с перехватом ее статическим анализатором (svace build)&lt;br /&gt;
* Запускается анализ (svace analyze)&lt;br /&gt;
* После фазы анализа запускается импорт данных анализа в Svacer (svacer import). На этом этапе указывается имя проекта, ветки и снимка, которые будут отображаться в интерфейсе Svacer-сервера после загрузки. Имена берутся из CI-переменных гитлаба, к имени снимка добавляется текущая дата&lt;br /&gt;
* На этапе загрузки (svacer upload) добавляются две опции: '''quality-gate''' и '''quality-gate-exit-code''' ([[Help:Import_from_Svace#Использование_quality_gate|документация по quality gate]])&lt;br /&gt;
:* &amp;lt;code&amp;gt;--quality-gate total:critical:0&amp;lt;/code&amp;gt; — quality gate сработает, если статическим анализатором будут найдены предупреждения с severity:critical &lt;br /&gt;
:* &amp;lt;code&amp;gt;--quality-gate-exit-code 1&amp;lt;/code&amp;gt; — в случае срабатывания quality gate команда вернет exit code 1&lt;br /&gt;
* Далее в пайплайне указываем, что exit code 1 считается как допустимый failure. Гитлаб в этом случае отобразит статус пайплайна '''Warning'''. Если quality gate не сработает (предупреждений с severity:critical не будет найдено), пайплайн завершитcя со статусом '''Passed'''&lt;br /&gt;
&lt;br /&gt;
[[File:Pipeline-warning.png|frame|none]]&lt;br /&gt;
&lt;br /&gt;
{{Note|text=Для корректной работы опций &amp;lt;code&amp;gt;--quality-gate&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;--quick-stats&amp;lt;/code&amp;gt; при использовании reverse proxy, в частности Nginx, для gRPC порта Svacer, необходимо в настройках секции http или server добавить инструкцию:&lt;br /&gt;
 underscores_in_headers on;&lt;br /&gt;
См. [[Help:Configuration#Nginx|пример конфига]]}}&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Changelog&amp;diff=3429</id>
		<title>Changelog</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Changelog&amp;diff=3429"/>
		<updated>2025-12-03T10:18:07Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: fix page link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Release 12-0-0 ===&lt;br /&gt;
28.11.2025&lt;br /&gt;
&lt;br /&gt;
* API методы на fullmarkers позволяют [[Help:Public_API#Примеры_использования_фильтров_в_public_api|указать фильтр]] с полем фильтрации по 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; для [[Help:Configuration#Переменные_окружения|контроля таймаута]] на ожидание начала импорта результатов и &amp;lt;code&amp;gt;SVACER_NUM_PARALLEL_IMPORTS&amp;lt;/code&amp;gt; на [[Help:Configuration#Переменные_окружения|ограничение числа параллельных импортов]]. По умолчанию значения 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-интерфейсе, ограничен. Размер [[Help:Configuration#Переменные_окружения|задается переменной окружения]] SVACER_TAIL_LOG_SIZE (по умолчанию 1Мб). Показывается последний кусок не более SVACER_TAIL_LOG_SIZE. Сам лог файл не ограничивается в размерах и кнопка выгрузки лога выгружает полный лог&lt;br /&gt;
* ['''Экспериментально'''] Можно [[Help:Configuration#Переменные_окружения|указать 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-клиента svacer&lt;br /&gt;
* При запуске сервера можно указать флаг &amp;lt;code&amp;gt;--force-invariant-refresh&amp;lt;/code&amp;gt; для принудительной регенерации инвариантов. Это может решить проблему с переносом разметки&lt;br /&gt;
* Добавлена переменная окружения SVACER_INV_GEN_JOBS для контроля числа параллельных заданий при регенерации инвариантов. При ограниченных ресурсах машины рекомендуем ставить значение 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#Активация_и_запуск_ИИ-ассистента|деплой ИИ-ассистента]]: добавили его сервис в 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; с указанием опции &amp;lt;code&amp;gt;quick-stat&amp;lt;/code&amp;gt;. Данный флаг позволяет получать ссылку на 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:Configuration#Механизм интеграции с внешними системами посредством Webhook-ов|Webhooks]]&lt;br /&gt;
* Добавлена [[Help:Configuration#Настройка защиты от перебора паролей пользователей|защита от перебора пароля пользователя]]&lt;br /&gt;
* Добавлена возможность задать [[Help:Configuration#Настройка парольной политики внутреннего механизма аутентификации Svacer|парольную политику безопасности]] для пользователей, использующих встроенный механизм аутентификации Svacer &lt;br /&gt;
* Добавлена возможность задать [[Help:Configuration#Задание вкладки по умолчанию на странице входа в GUI Svacer (а также отключение внутреннего механизма аутентификации Svacer)|вкладку по умолчанию]] для страницы входа в систему &lt;br /&gt;
* Исправлена ошибка, приводящая к разрастанию базы данных&lt;br /&gt;
* Исправлена ошибка, связанная с невозможностью в ряде случаев использовать механизм подписок&lt;br /&gt;
* Форма [[Help:UI_manual#Разметка_маркера_с_помощью_ассистента_AI|разметки]] с помощью [[Help:XSvacer:AIAssistant|ИИ-ассистента]] реализована в основном интерфейсе 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#deb/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>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Afilters&amp;diff=3428</id>
		<title>Afilters</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Afilters&amp;diff=3428"/>
		<updated>2025-12-02T15:40:18Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: minor fixes after partial review&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Advanced filters =&lt;br /&gt;
Поле &amp;quot;Расширенный фильтр&amp;quot; в пользовательских фильтрах предназначено для фильтрации маркеров (предупреждений) по сложным предикатам. &lt;br /&gt;
[[File:Image-afilters-prop.png|thumb]]&lt;br /&gt;
Предикат может использовать:&lt;br /&gt;
&lt;br /&gt;
* поля маркера, его трассы, разметки и комментариев&lt;br /&gt;
* информацию из контекста: имя проекта, ветки, снимка и т. п.&lt;br /&gt;
* атрибуты снимка, включая пользовательские атрибуты, заданные при импорте&lt;br /&gt;
* статусы разметки&lt;br /&gt;
* текст и атрибуты комментариев&lt;br /&gt;
&lt;br /&gt;
Формат фильтра определяется следующим шаблоном:&lt;br /&gt;
&lt;br /&gt;
 filter(markers, &amp;lt;predicate expr&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Выражение &amp;lt;code&amp;gt;&amp;lt;predicate expr&amp;gt;&amp;lt;/code&amp;gt; определяет предикат. Объект &amp;lt;code&amp;gt;markers&amp;lt;/code&amp;gt; содержит массив маркеров из контекста, функция &amp;lt;code&amp;gt;filter&amp;lt;/code&amp;gt; фильтрует данный список по предикату. Таким образом, применение фильтра заключается в фильтрации списка маркеров по указанному предикату.&lt;br /&gt;
&lt;br /&gt;
== Список доступных полей ==&lt;br /&gt;
&lt;br /&gt;
=== Поля маркера (предупреждения) ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Comments&amp;lt;/code&amp;gt; — список комментариев маркера. Объект типа Comment (смотрите ниже)&lt;br /&gt;
* &amp;lt;code&amp;gt;Details&amp;lt;/code&amp;gt; — информация, специфичная для анализатора. Ближайший аналог — fingerprint в SARIF&lt;br /&gt;
* &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt; — имя файла&lt;br /&gt;
* &amp;lt;code&amp;gt;Function&amp;lt;/code&amp;gt; — имя функции, может быть mangled для С++&lt;br /&gt;
* &amp;lt;code&amp;gt;ID&amp;lt;/code&amp;gt; — UUID маркера&lt;br /&gt;
* &amp;lt;code&amp;gt;Invariant&amp;lt;/code&amp;gt; — инвариант маркера. Используется для автопереноса разметки между снимками&lt;br /&gt;
* &amp;lt;code&amp;gt;Lang&amp;lt;/code&amp;gt; — язык детектора&lt;br /&gt;
* &amp;lt;code&amp;gt;Line&amp;lt;/code&amp;gt; — номер строки в файле&lt;br /&gt;
* &amp;lt;code&amp;gt;LocID&amp;lt;/code&amp;gt; — порядковый номер маркера относительно изначального отчета анализатора&lt;br /&gt;
* &amp;lt;code&amp;gt;MTid&amp;lt;/code&amp;gt; — шаблон сообщения&lt;br /&gt;
* &amp;lt;code&amp;gt;Msg&amp;lt;/code&amp;gt; — текст сообщения&lt;br /&gt;
* &amp;lt;code&amp;gt;OrigFunc&amp;lt;/code&amp;gt; — 'человекочитаемое' имя функции. Может быть недоступно&lt;br /&gt;
* &amp;lt;code&amp;gt;Tags&amp;lt;/code&amp;gt; — список тегов (меток) маркера&lt;br /&gt;
* &amp;lt;code&amp;gt;Tool&amp;lt;/code&amp;gt; — модуль анализатора, ответственного за данный детектор&lt;br /&gt;
* &amp;lt;code&amp;gt;Traces&amp;lt;/code&amp;gt; — список трасс маркера. Объект типа Trace (смотрите ниже)&lt;br /&gt;
* &amp;lt;code&amp;gt;WarnClass&amp;lt;/code&amp;gt; — название детектора/класса детекторов&lt;br /&gt;
&lt;br /&gt;
Имена полей также могут использоваться в формате, где первая буква в lowercase.&lt;br /&gt;
&lt;br /&gt;
Помимо использования полей, можно использовать вспомогательные функции для доступа к дополнительной информации:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;severity(item) string&amp;lt;/code&amp;gt; — серьезность детектора (чекера)&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
 filter(markers, severity(#) == &amp;quot;Critical&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
'''Внимание:''' использование в предикатах поля &amp;lt;code&amp;gt;Trace&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;status(item) string&amp;lt;/code&amp;gt; — статус разметки текущего маркера. Пример: &amp;lt;code&amp;gt;filter(markers, status(#) == &amp;quot;Confirmed&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;action(item) string&amp;lt;/code&amp;gt; — статус поля action текущего маркера.  Пример: &amp;lt;code&amp;gt;filter(markers, action(#) == &amp;quot;Ignore&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;mseverity(item) string&amp;lt;/code&amp;gt; — статус поля severity текущего маркера (не путать с severity детектора).  Пример: &amp;lt;code&amp;gt;filter(markers, mseverity(#) == &amp;quot;Critical&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;triaged(item) bool&amp;lt;/code&amp;gt; — возвращает true, если маркер имеет не дефолтную разметку. Пример: &amp;lt;code&amp;gt;filter(markers, triaged(#))&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;get_triaged_by(item) UserInfo&amp;lt;/code&amp;gt; — возвращает структуру с информацией о пользователе, кто произвел разметку&lt;br /&gt;
&lt;br /&gt;
Поля структуры &amp;lt;code&amp;gt;UserInfo&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;login: string&amp;lt;/code&amp;gt; — логин пользователя&lt;br /&gt;
* &amp;lt;code&amp;gt;create_ts: Time (UTC)&amp;lt;/code&amp;gt; — время разметки в UTC формате (RFC3339)&lt;br /&gt;
&lt;br /&gt;
=== Комментарии ===&lt;br /&gt;
Объекты типа &amp;lt;code&amp;gt;Comment&amp;lt;/code&amp;gt; содержатся в поле &amp;lt;code&amp;gt;Comments&amp;lt;/code&amp;gt; маркера. Объект имеет следующие поля:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ID&amp;lt;/code&amp;gt; — UUID комментария&lt;br /&gt;
* &amp;lt;code&amp;gt;Text&amp;lt;/code&amp;gt; — текст комментария&lt;br /&gt;
* &amp;lt;code&amp;gt;CreatedBy&amp;lt;/code&amp;gt; — имя пользователя, кто создал комментарий&lt;br /&gt;
* &amp;lt;code&amp;gt;CreateTs&amp;lt;/code&amp;gt; — время создания комментария (объект типа &amp;lt;code&amp;gt;time.Time&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;UpdateTs&amp;lt;/code&amp;gt; — время обновления комментария (объект типа &amp;lt;code&amp;gt;time.Time&amp;lt;/code&amp;gt;), может быть пустым&lt;br /&gt;
* &amp;lt;code&amp;gt;UpdatedBy&amp;lt;/code&amp;gt; — имя пользователя, кто обновил комментарий&lt;br /&gt;
&lt;br /&gt;
=== Трассы ===&lt;br /&gt;
Маркер может содержать трассу маркера в поле &amp;lt;code&amp;gt;Traces&amp;lt;/code&amp;gt;. Трасса описывается следующими структурами:&lt;br /&gt;
 type Trace struct {&lt;br /&gt;
 	Role      string&lt;br /&gt;
 	Locations []TraceEntry&lt;br /&gt;
 }&lt;br /&gt;
 type TraceEntry struct {&lt;br /&gt;
 	File     string	&lt;br /&gt;
 	Line     uint32&lt;br /&gt;
 	Col  	 uint32	&lt;br /&gt;
 	Info 	 string&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Доступ к полям объекта &amp;lt;code&amp;gt;Trace&amp;lt;/code&amp;gt; может выполняться, используя правила языка &amp;lt;code&amp;gt;go-expr&amp;lt;/code&amp;gt;, описанные ниже.&lt;br /&gt;
&lt;br /&gt;
Имена полей могут использоваться в виде как описано выше, либо в формате lowercase: &amp;lt;code&amp;gt;role, locations, file, line, col, info&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
 filter(markers, any(.Comments, .Text == &amp;quot;Test&amp;quot;) &amp;amp;&amp;amp;&lt;br /&gt;
 		any(.Traces, any(.Locations, .Info == &amp;quot;Boolean expression has constant value&amp;quot;))&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
=== Поля снимка ===&lt;br /&gt;
Для доступа к полям снимка можно использовать переменную &amp;lt;code&amp;gt;snapshot&amp;lt;/code&amp;gt;. Переменная имеет тип структуры со следующими полями&lt;br /&gt;
&lt;br /&gt;
 struct {&lt;br /&gt;
 	ID               string                &lt;br /&gt;
 	Name             string                &lt;br /&gt;
 	SerialID         uint32                &lt;br /&gt;
 	BuildObject      string                &lt;br /&gt;
 	ResultsObject    string                &lt;br /&gt;
 	ImportTime       time.Time             &lt;br /&gt;
 	CreatedBy        string                &lt;br /&gt;
 	CreatedByID      string                &lt;br /&gt;
 	Details          map[string]any&lt;br /&gt;
 	CreateTime       time.Time             &lt;br /&gt;
 	SourcesAvailable bool                  &lt;br /&gt;
 }&lt;br /&gt;
Имена полей могут использоваться в виде, где первая буква в lowercase.&lt;br /&gt;
&lt;br /&gt;
Объекты в поле &amp;lt;code&amp;gt;Details&amp;lt;/code&amp;gt; можно просмотреть, нажав на кнопку &amp;lt;code&amp;gt;View JSON&amp;lt;/code&amp;gt; в WebUI в поле &amp;lt;code&amp;gt;Snapshot Information&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
 filter(markers, &lt;br /&gt;
    snapshot.buildObject == &amp;quot;5b634b75422bd554a8569cc10bfadc3aea77b73e&amp;quot; &amp;amp;&amp;amp;&lt;br /&gt;
    .warnClass matches &amp;quot;DEREF&amp;quot;&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
== Описание языка предикатов ==&lt;br /&gt;
Для написания предикатов используется язык '''Expr'''. Детальное описание всех возможностей можно найти здесь: https://github.com/expr-lang/expr &lt;br /&gt;
&lt;br /&gt;
Далее описываются конструкции, наиболее подходящие для написания правил фильтрации.&lt;br /&gt;
&lt;br /&gt;
=== Литералы ===&lt;br /&gt;
 Comment /* */ or //&lt;br /&gt;
 Boolean true, false&lt;br /&gt;
 Integer 42, 0x2A, 0o52, 0b101010&lt;br /&gt;
 Float 0.5, .5&lt;br /&gt;
 String &amp;quot;foo&amp;quot;, 'bar'&lt;br /&gt;
 Array [1, 2, 3]&lt;br /&gt;
 Map {a: 1, b: 2, c: 3}&lt;br /&gt;
 Nil nil&lt;br /&gt;
&lt;br /&gt;
=== Строки ===&lt;br /&gt;
Строки могут быть в одинарных и двойных кавычках. Для эскейпа используйте обратный слэш.&lt;br /&gt;
&lt;br /&gt;
Пример однострочного текста:&lt;br /&gt;
 &amp;quot;Hello\nWorld&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Пример многострочного текста:&lt;br /&gt;
 `Hello&lt;br /&gt;
 World`&lt;br /&gt;
&lt;br /&gt;
В многострочном тексте escape-последовательности не поддерживаются.&lt;br /&gt;
&lt;br /&gt;
=== Операторы ===&lt;br /&gt;
 Arithmetic: +, -, *, /, % (modulus), ^ or ** (exponent)&lt;br /&gt;
 Comparison: ==, !=, &amp;lt;, &amp;gt;, &amp;lt;=, &amp;gt;=&lt;br /&gt;
 Logical: not or !, and or &amp;amp;&amp;amp;, or or ||&lt;br /&gt;
 Conditional: ?: (ternary), ?? (nil coalescing), if {} else {} (multiline)&lt;br /&gt;
 Membership:  [], ., ?., in&lt;br /&gt;
 String:  + (concatenation), contains, startsWith, endsWith&lt;br /&gt;
 Regex:  matches&lt;br /&gt;
 Range ..&lt;br /&gt;
 Slice [:]&lt;br /&gt;
 Pipe |&lt;br /&gt;
&lt;br /&gt;
=== Операторы доступа к полю объекта ===&lt;br /&gt;
Можно использовать оператор точка &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; и оператор &amp;lt;code&amp;gt;[]&amp;lt;/code&amp;gt;:&lt;br /&gt;
     &amp;lt;code&amp;gt;user.Name&lt;br /&gt;
     user[&amp;quot;Name&amp;quot;]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Оператор in ===&lt;br /&gt;
Оператор &amp;lt;code&amp;gt;in&amp;lt;/code&amp;gt; для проверки наличия объекта в массиве или мэпе:&lt;br /&gt;
     &amp;lt;code&amp;gt;&amp;quot;John&amp;quot; in [&amp;quot;John&amp;quot;, &amp;quot;Jane&amp;quot;]&lt;br /&gt;
     &amp;quot;name&amp;quot; in {&amp;quot;name&amp;quot;: &amp;quot;John&amp;quot;, &amp;quot;age&amp;quot;: 30}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Optional chaining ===&lt;br /&gt;
Оператор &amp;lt;code&amp;gt;?.&amp;lt;/code&amp;gt; может использоваться для доступа к полю структуры или элементу отображения (map) без необходимости проверки, является ли структура или отображение равными &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;. Если структура или отображение имеют значение &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;, результатом выражения будет &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пример вида:&lt;br /&gt;
     &amp;lt;code&amp;gt;author.User?.Name&amp;lt;/code&amp;gt;&lt;br /&gt;
значит тоже самое, что:&lt;br /&gt;
     &amp;lt;code&amp;gt;author.User != nil ? author.User.Name : nil&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nil coalescing ===&lt;br /&gt;
Оператор &amp;lt;code&amp;gt;??&amp;lt;/code&amp;gt; может использоваться для возврата левого операнда, если он не равен &amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;, в противном случае возвращается правый операнд.&lt;br /&gt;
&lt;br /&gt;
Пример вида:&lt;br /&gt;
     &amp;lt;code&amp;gt;author.User?.Name ?? &amp;quot;Anonymous&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
значит тоже самое, что:&lt;br /&gt;
     &amp;lt;code&amp;gt;author.User != nil ? author.User.Name : &amp;quot;Anonymous&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Оператор конвейера ===&lt;br /&gt;
Оператор конвейера &amp;lt;code&amp;gt;|&amp;lt;/code&amp;gt; может использоваться для передачи результата выражения левого операнда в качестве первого аргумента выражения правого операнда.&lt;br /&gt;
&lt;br /&gt;
Пример вида:&lt;br /&gt;
     &amp;lt;code&amp;gt;user.Name | lower() | split(&amp;quot; &amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
значит тоже самое, что:&lt;br /&gt;
     &amp;lt;code&amp;gt;split(lower(user.Name), &amp;quot; &amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Предикаты ===&lt;br /&gt;
Предикат — это выражение. Предикаты можно использовать в функциях, таких как filter, all, any, one, none и других.&lt;br /&gt;
 &amp;lt;code&amp;gt;filter(0..9, {# % 2 == 0})&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;filter(tweets, {len(.Content) &amp;gt; 240})&amp;lt;/code&amp;gt;&lt;br /&gt;
Скобки можно опускать  &amp;lt;code&amp;gt;{&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;:&lt;br /&gt;
     &amp;lt;code&amp;gt;filter(tweets, len(.Content) &amp;gt; 240)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Операции над строками ===&lt;br /&gt;
 &amp;lt;code&amp;gt;trim(str[, chars])&lt;br /&gt;
 trimPrefix(str, prefix)&lt;br /&gt;
 trimSuffix(str, suffix)&lt;br /&gt;
 upper(str)&lt;br /&gt;
 lower(str)&lt;br /&gt;
 indexOf(str, substring)&lt;br /&gt;
 lastIndexOf(str, substring)&lt;br /&gt;
 hasPrefix(str, prefix)&lt;br /&gt;
 hasSuffix(str, suffix)&amp;lt;/code&amp;gt;&lt;br /&gt;
Так же есть оператор &amp;lt;code&amp;gt;matches&amp;lt;/code&amp;gt; для поиска регулярного выражения в строке:&lt;br /&gt;
     &amp;lt;code&amp;gt;str matches &amp;quot;regular expression&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
Для сопоставления целой строки с регулярным выражением следует использовать вариант:&lt;br /&gt;
     &amp;lt;code&amp;gt;str matches &amp;quot;^regex$&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Функции времени ===&lt;br /&gt;
Поддерживаются Go типы для времени и интервалов (&amp;lt;code&amp;gt;time.Time&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;time.Duration&amp;lt;/code&amp;gt;) time package.&lt;br /&gt;
&lt;br /&gt;
Можно использовать операции сложения и вычитания над объектами с типом &amp;lt;code&amp;gt;time.Time&amp;lt;/code&amp;gt;.&lt;br /&gt;
 &amp;lt;code&amp;gt;createdAt - now()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;createdAt + duration(&amp;quot;1h&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;createdAt &amp;gt; now() - duration(&amp;quot;1h&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;date(&amp;quot;2023-08-14&amp;quot;)&lt;br /&gt;
 date(&amp;quot;15:04:05&amp;quot;)&lt;br /&gt;
 date(&amp;quot;2023-08-14T00:00:00Z&amp;quot;)&lt;br /&gt;
 date(&amp;quot;2023-08-14 00:00:00&amp;quot;, &amp;quot;2006-01-02 15:04:05&amp;quot;, &amp;quot;Europe/Zurich&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Функции над массивами ===&lt;br /&gt;
* &amp;lt;code&amp;gt;all(array, predicate)&amp;lt;/code&amp;gt; — все объекты должны удовлетворять предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;any(array, predicate)&amp;lt;/code&amp;gt; — должен быть по крайней мере один объект, который удовлетворяет предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;one(array, predicate)&amp;lt;/code&amp;gt; — должен быть только один объект, который удовлетворяет предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;none(array, predicate)&amp;lt;/code&amp;gt; — ни один объект не должен удовлетворять предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;find(array, predicate)&amp;lt;/code&amp;gt; — возвращает первый объект, который удовлетворяет предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;findLast(array, predicate)&amp;lt;/code&amp;gt; — возвращает последний объект, который удовлетворяет предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;count(array[, predicate])&amp;lt;/code&amp;gt; — возвращает число объектов, удовлетворяющих предикату&lt;br /&gt;
* &amp;lt;code&amp;gt;first(array)&amp;lt;/code&amp;gt; — первый объект из массива&lt;br /&gt;
* &amp;lt;code&amp;gt;last(array)&amp;lt;/code&amp;gt; — последний объект из массива&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
 all(tweets, {.Size &amp;lt; 280})&lt;br /&gt;
 any(tweets, {.Size &amp;gt; 280})&lt;br /&gt;
 none(tweets, {.Size &amp;gt; 280})&lt;br /&gt;
 find([1, 2, 3, 4], # &amp;gt; 2) == 3&lt;br /&gt;
 findLast([1, 2, 3, 4], # &amp;gt; 2) == 4&lt;br /&gt;
 count(users, .Age &amp;gt; 18)&lt;br /&gt;
 first([1, 2, 3]) == 1&lt;br /&gt;
 last([1, 2, 3]) == 3&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer:AIAssistant:Deploy&amp;diff=3427</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=3427"/>
		<updated>2025-12-01T14:26:46Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: Redirected page to Help:XSvacer:AIAssistant&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Help:XSvacer:AIAssistant]]&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Changelog&amp;diff=3426</id>
		<title>Changelog</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Changelog&amp;diff=3426"/>
		<updated>2025-12-01T14:23:37Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: more AI-assistant links fixes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Release 12-0-0 ===&lt;br /&gt;
28.11.2025&lt;br /&gt;
&lt;br /&gt;
* API методы на fullmarkers позволяют [[Help:Public_API#Примеры_использования_фильтров_в_public_api|указать фильтр]] с полем фильтрации по 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; для [[Help:Configuration#Переменные_окружения|контроля таймаута]] на ожидание начала импорта результатов и &amp;lt;code&amp;gt;SVACER_NUM_PARALLEL_IMPORTS&amp;lt;/code&amp;gt; на [[Help:Configuration#Переменные_окружения|ограничение числа параллельных импортов]]. По умолчанию значения 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-интерфейсе, ограничен. Размер [[Help:Configuration#Переменные_окружения|задается переменной окружения]] SVACER_TAIL_LOG_SIZE (по умолчанию 1Мб). Показывается последний кусок не более SVACER_TAIL_LOG_SIZE. Сам лог файл не ограничивается в размерах и кнопка выгрузки лога выгружает полный лог&lt;br /&gt;
* ['''Экспериментально'''] Можно [[Help:Configuration#Переменные_окружения|указать 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-клиента svacer&lt;br /&gt;
* При запуске сервера можно указать флаг &amp;lt;code&amp;gt;--force-invariant-refresh&amp;lt;/code&amp;gt; для принудительной регенерации инвариантов. Это может решить проблему с переносом разметки&lt;br /&gt;
* Добавлена переменная окружения SVACER_INV_GEN_JOBS для контроля числа параллельных заданий при регенерации инвариантов. При ограниченных ресурсах машины рекомендуем ставить значение 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#Активация_и_запуск_ИИ-ассистента|деплой ИИ-ассистента]]: добавили его сервис в 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; с указанием опции &amp;lt;code&amp;gt;quick-stat&amp;lt;/code&amp;gt;. Данный флаг позволяет получать ссылку на 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:Configuration#Механизм интеграции с внешними системами посредством Webhook-ов|Webhooks]]&lt;br /&gt;
* Добавлена [[Help:Configuration#Настройка защиты от перебора паролей пользователей|защита от перебора пароля пользователя]]&lt;br /&gt;
* Добавлена возможность задать [[Help:Configuration#Настройка парольной политики внутреннего механизма аутентификации Svacer|парольную политику безопасности]] для пользователей, использующих встроенный механизм аутентификации Svacer &lt;br /&gt;
* Добавлена возможность задать [[Help:Configuration#Задание вкладки по умолчанию на странице входа в GUI Svacer (а также отключение внутреннего механизма аутентификации Svacer)|вкладку по умолчанию]] для страницы входа в систему &lt;br /&gt;
* Исправлена ошибка, приводящая к разрастанию базы данных&lt;br /&gt;
* Исправлена ошибка, связанная с невозможностью в ряде случаев использовать механизм подписок&lt;br /&gt;
* Форма [[Help:UI_manual#Разметка_маркера_с_помощью_ассистента_AI|разметки]] с помощью [[Help:XSvacer:AIAssistant|ИИ-ассистента]] реализована в основном интерфейсе 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>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Changelog&amp;diff=3425</id>
		<title>Changelog</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Changelog&amp;diff=3425"/>
		<updated>2025-12-01T14:20:01Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: fix AI assistant deploy link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Release 12-0-0 ===&lt;br /&gt;
28.11.2025&lt;br /&gt;
&lt;br /&gt;
* API методы на fullmarkers позволяют [[Help:Public_API#Примеры_использования_фильтров_в_public_api|указать фильтр]] с полем фильтрации по 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; для [[Help:Configuration#Переменные_окружения|контроля таймаута]] на ожидание начала импорта результатов и &amp;lt;code&amp;gt;SVACER_NUM_PARALLEL_IMPORTS&amp;lt;/code&amp;gt; на [[Help:Configuration#Переменные_окружения|ограничение числа параллельных импортов]]. По умолчанию значения 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-интерфейсе, ограничен. Размер [[Help:Configuration#Переменные_окружения|задается переменной окружения]] SVACER_TAIL_LOG_SIZE (по умолчанию 1Мб). Показывается последний кусок не более SVACER_TAIL_LOG_SIZE. Сам лог файл не ограничивается в размерах и кнопка выгрузки лога выгружает полный лог&lt;br /&gt;
* ['''Экспериментально'''] Можно [[Help:Configuration#Переменные_окружения|указать 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-клиента svacer&lt;br /&gt;
* При запуске сервера можно указать флаг &amp;lt;code&amp;gt;--force-invariant-refresh&amp;lt;/code&amp;gt; для принудительной регенерации инвариантов. Это может решить проблему с переносом разметки&lt;br /&gt;
* Добавлена переменная окружения SVACER_INV_GEN_JOBS для контроля числа параллельных заданий при регенерации инвариантов. При ограниченных ресурсах машины рекомендуем ставить значение 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#Активация_и_запуск_ИИ-ассистента|деплой ИИ-ассистента]]: добавили его сервис в 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; с указанием опции &amp;lt;code&amp;gt;quick-stat&amp;lt;/code&amp;gt;. Данный флаг позволяет получать ссылку на 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:Configuration#Механизм интеграции с внешними системами посредством Webhook-ов|Webhooks]]&lt;br /&gt;
* Добавлена [[Help:Configuration#Настройка защиты от перебора паролей пользователей|защита от перебора пароля пользователя]]&lt;br /&gt;
* Добавлена возможность задать [[Help:Configuration#Настройка парольной политики внутреннего механизма аутентификации Svacer|парольную политику безопасности]] для пользователей, использующих встроенный механизм аутентификации Svacer &lt;br /&gt;
* Добавлена возможность задать [[Help:Configuration#Задание вкладки по умолчанию на странице входа в 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>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Metrics&amp;diff=3419</id>
		<title>Metrics</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Metrics&amp;diff=3419"/>
		<updated>2025-11-28T14:49:32Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: add new metrics&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Включение метрик ===&lt;br /&gt;
Для включения метрик запустите сервер Svacer с переменной окружения '''SVACER_TRACE_OPTIONS=prom_metrics_on'''&lt;br /&gt;
&lt;br /&gt;
 SVACER_TRACE_OPTIONS=prom_metrics_on svacer-server run&lt;br /&gt;
&lt;br /&gt;
После этого метрики будут доступны по URL вашего сервера на '''/api/metrics'''&lt;br /&gt;
 &amp;lt;pre&amp;gt;http://localhost:8080/api/metrics&amp;lt;/pre&amp;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;
|svacer_active_imports&lt;br /&gt;
|Number of active imports of svace/sarif results&lt;br /&gt;
|-&lt;br /&gt;
|svacer_active_pdf_exports&lt;br /&gt;
|Number of active pdf export tasks&lt;br /&gt;
|-&lt;br /&gt;
|svacer_active_snapshot_exports&lt;br /&gt;
|Number of active snapshot exports&lt;br /&gt;
|-&lt;br /&gt;
|svacer_active_snapshot_imports&lt;br /&gt;
|Number of active snapshot imports&lt;br /&gt;
|-&lt;br /&gt;
|svacer_comment_changes_since_start&lt;br /&gt;
|The total number of comment additions/deletions/modifications since start&lt;br /&gt;
|-&lt;br /&gt;
|svacer_import_results_since_start&lt;br /&gt;
|The total number of imported results since last server start&lt;br /&gt;
|-&lt;br /&gt;
|svacer_import_snapshots_since_start&lt;br /&gt;
|The total number of imported snapshots since last server start&lt;br /&gt;
|-&lt;br /&gt;
|svacer_object_store_read_ampl&lt;br /&gt;
|The current read amplification of the database. It's computed as the number of sublevels in L0 + the number of non-empty levels below L0&lt;br /&gt;
|-&lt;br /&gt;
|svacer_object_store_size&lt;br /&gt;
|Approximate size of the object store&lt;br /&gt;
|-&lt;br /&gt;
|svacer_object_store_vsize&lt;br /&gt;
|VirtualSize is the sum of the sizes of the virtual sstables in the latest version. BackingTableSize - VirtualSize gives an estimate for the space amplification caused by not compacting virtual sstables&lt;br /&gt;
|-&lt;br /&gt;
|svacer_pgxpool_acquire_count&lt;br /&gt;
|Cumulative count of successful acquires from the pool&lt;br /&gt;
|-&lt;br /&gt;
|svacer_pgxpool_acquire_duration_ns&lt;br /&gt;
|Total duration of all successful acquires from the pool in nanoseconds&lt;br /&gt;
|-&lt;br /&gt;
|svacer_pgxpool_acquired_conns&lt;br /&gt;
|Number of currently acquired connections in the pool&lt;br /&gt;
|-&lt;br /&gt;
|svacer_pgxpool_canceled_acquire_count&lt;br /&gt;
|Cumulative count of acquires from the pool that were canceled by a context&lt;br /&gt;
|-&lt;br /&gt;
|svacer_pgxpool_constructing_conns&lt;br /&gt;
|Number of conns with construction in progress in the pool&lt;br /&gt;
|-&lt;br /&gt;
|svacer_pgxpool_empty_acquire&lt;br /&gt;
|Cumulative count of successful acquires from the pool that waited for a resource to be released or constructed because the pool was empty&lt;br /&gt;
|-&lt;br /&gt;
|svacer_pgxpool_idle_conns&lt;br /&gt;
|Number of currently idle conns in the pool&lt;br /&gt;
|-&lt;br /&gt;
|svacer_pgxpool_max_conns&lt;br /&gt;
|Maximum size of the pool&lt;br /&gt;
|-&lt;br /&gt;
|svacer_pgxpool_max_idle_destroy_count&lt;br /&gt;
|Cumulative count of connections destroyed because they exceeded MaxConnIdleTime&lt;br /&gt;
|-&lt;br /&gt;
|svacer_pgxpool_max_lifetime_destroy_count&lt;br /&gt;
|Cumulative count of connections destroyed because they exceeded MaxConnLifetime&lt;br /&gt;
|-&lt;br /&gt;
|svacer_pgxpool_new_conns_count&lt;br /&gt;
|Cumulative count of new connections opened&lt;br /&gt;
|-&lt;br /&gt;
|svacer_pgxpool_total_conns&lt;br /&gt;
|Total number of resources currently in the pool. The value is the sum of ConstructingConns, AcquiredConns, and IdleConns&lt;br /&gt;
|-&lt;br /&gt;
|svacer_rest_import_sarif&lt;br /&gt;
|The total number of import sarif requests via REST endpoint&lt;br /&gt;
|-&lt;br /&gt;
|svacer_rest_import_sarif_failed&lt;br /&gt;
|The total number of failed import sarif requests via REST endpoint&lt;br /&gt;
|-&lt;br /&gt;
|svacer_rest_import_sarif_success&lt;br /&gt;
|The total number of success import sarif requests via REST endpoint&lt;br /&gt;
|-&lt;br /&gt;
|svacer_rest_import_svace_dirs&lt;br /&gt;
|The total number of import svace dir requests via REST endpoint&lt;br /&gt;
|-&lt;br /&gt;
|svacer_rest_import_svace_dirs_failed&lt;br /&gt;
|The total number of failed import svace dir requests via REST endpoint&lt;br /&gt;
|-&lt;br /&gt;
|svacer_rest_import_svace_dirs_success&lt;br /&gt;
|The total number of success import svace dir requests via REST endpoint&lt;br /&gt;
|-&lt;br /&gt;
|svacer_rest_num_tokens_issued&lt;br /&gt;
|The total number of login tokens issued&lt;br /&gt;
|-&lt;br /&gt;
|svacer_rest_num_tokens_removed&lt;br /&gt;
|The total number of login tokens removed&lt;br /&gt;
|-&lt;br /&gt;
|svacer_review_changes_since_start&lt;br /&gt;
|The total number of review modifications since start&lt;br /&gt;
|-&lt;br /&gt;
|svacer_total_branches_count&lt;br /&gt;
|Total number of branches on server&lt;br /&gt;
|-&lt;br /&gt;
|svacer_total_ldap_users_count&lt;br /&gt;
|Total number of LDAP users on server&lt;br /&gt;
|-&lt;br /&gt;
|svacer_total_projects_count&lt;br /&gt;
|Total number of projects on server&lt;br /&gt;
|-&lt;br /&gt;
|svacer_total_snapshots_count&lt;br /&gt;
|Total number of projects on server&lt;br /&gt;
|-&lt;br /&gt;
|svacer_total_users_count&lt;br /&gt;
|Total number of non-LDAP users on server&lt;br /&gt;
|-&lt;br /&gt;
|svacer_wsocket_sessions_counter&lt;br /&gt;
|The total number of active web socket connections&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Добавление в Prometheus ===&lt;br /&gt;
Для сбора метрик Прометеусом добавьте в его конфиг-файл '''/etc/prometheus/prometheus.yml''' подобную запись, поменяв название, хост и порт на те что у вас&lt;br /&gt;
&lt;br /&gt;
 - job_name: svacer-metrics-example&lt;br /&gt;
   metrics_path: /api/metrics&lt;br /&gt;
   static_configs:&lt;br /&gt;
     - targets: ['svacer.ispras.ru:8080']&lt;br /&gt;
&lt;br /&gt;
=== Grafana dashboard ===&lt;br /&gt;
Для визуализации метрик в [https://grafana.com Grafana] импортируете dashboard из файла [[Media:Grafana-dashboard-svacer.json|grafana-dashboard-svacer.json]]. В диалоге импорта выберите собирающий метрики Prometheus в качестве data source.&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=3418</id>
		<title>Svacer</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=3418"/>
		<updated>2025-11-28T12:01:18Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: remove ai-demo: it's a part of the svacer demo now&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 12.x.x&lt;br /&gt;
# [[Help:Introduction|Введение]]&lt;br /&gt;
# [[Help:Installation|Установка и обновление]]&lt;br /&gt;
# [[Help:Configuration|Настройка сервера]]&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;
# [[Help:Utils|Дополнительные утилиты]]&lt;br /&gt;
# [[Metrics|Prometheus-метрики]]&lt;br /&gt;
# [[Pipelines|Примеры пайплайнов]]&lt;br /&gt;
# [[Notifications|Уведомления]]&lt;br /&gt;
&lt;br /&gt;
=== Релизы ===&lt;br /&gt;
Также доступны в виде docker-образа на [https://hub.docker.com/r/ispras/svacer docker hub] и как пакеты в [[Help:Installation#Установка и запуск из deb/rpm пакета|репозиториях]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! version !! distrib !! linux bin !! windows bin !! deb/rpm !! doc&lt;br /&gt;
!svace checkers version&lt;br /&gt;
|-&lt;br /&gt;
| 12.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12-0-0-linux.tar.gz svacer-12-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12-0-0-windows.zip svacer-12-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer_12.0-0_amd64.deb svacer_12.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12.0-0.x86_64.rpm svacer-12.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 12-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 12-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Svacer#Документация|Documentation 12.x.x]]&lt;br /&gt;
|4.0.251120&lt;br /&gt;
|-&lt;br /&gt;
| 11.2.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11-2-0-linux.tar.gz svacer-11-2-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11-2-0-windows.zip svacer-11-2-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer_11.2-0_amd64.deb svacer_11.2-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11.2-0.x86_64.rpm svacer-11.2-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-2-0|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 11.1.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11-1-0-linux.tar.gz svacer-11-1-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11-1-0-windows.zip svacer-11-1-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer_11.1-0_amd64.deb svacer_11.1-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11.1-0.x86_64.rpm svacer-11.1-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-1-0|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 11.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11-0-0-linux.tar.gz svacer-11-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11-0-0-windows.zip svacer-11-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer_11.0-0_amd64.deb svacer_11.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11.0-0.x86_64.rpm svacer-11.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 11-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.1&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10-0-1-linux.tar.gz svacer-10-0-1-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10-0-1-windows.zip svacer-10-0-1-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer_10.0-1_amd64.deb svacer_10.0-1_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10.0-1.x86_64.rpm svacer-10.0-1.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 10-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 10.x.x]]&lt;br /&gt;
|4.0.241102&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10-0-0-linux.tar.gz svacer-10-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10-0-0-windows.zip svacer-10-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer_10.0-0_amd64.deb svacer_10.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10.0-0.x86_64.rpm svacer-10.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 10-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 10-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 10.x.x]]&lt;br /&gt;
|4.0.241102&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.2&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-9-0-2.zip svacer-9-0-2.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer_9.0-2_amd64.deb svacer_9.0-2_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-9.0-2.x86_64.rpm svacer-9.0-2.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 9-0-2|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#9-0-0|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.1&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-9-0-1.zip svacer-9-0-1.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer_9.0-1_amd64.deb svacer_9.0-1_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-9.0-1.x86_64.rpm svacer-9.0-1.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 9-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#9-0-0|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&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]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&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]]&amp;lt;br /&amp;gt;[[Documentation 8.x.x]]&lt;br /&gt;
|3.4.0&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]]&amp;lt;br /&amp;gt;[[Documentation 8.x.x]]&lt;br /&gt;
|3.4.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[https://svacer.ispras.ru/releases Предыдущие релизы] | [https://nextcloud.ispras.ru/index.php/s/x4r4cMJAMr5RZtd?path=%2F Еще более старые релизы]&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;
https://svacer-demo.ispras.ru&lt;br /&gt;
&lt;br /&gt;
* admin / admin — логин / пароль администратора&lt;br /&gt;
* user / user — логин / пароль пользователя&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=3417</id>
		<title>Svacer</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=3417"/>
		<updated>2025-11-28T11:58:11Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: add release notes&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 12.x.x&lt;br /&gt;
# [[Help:Introduction|Введение]]&lt;br /&gt;
# [[Help:Installation|Установка и обновление]]&lt;br /&gt;
# [[Help:Configuration|Настройка сервера]]&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;
# [[Help:Utils|Дополнительные утилиты]]&lt;br /&gt;
# [[Metrics|Prometheus-метрики]]&lt;br /&gt;
# [[Pipelines|Примеры пайплайнов]]&lt;br /&gt;
# [[Notifications|Уведомления]]&lt;br /&gt;
&lt;br /&gt;
=== Релизы ===&lt;br /&gt;
Также доступны в виде docker-образа на [https://hub.docker.com/r/ispras/svacer docker hub] и как пакеты в [[Help:Installation#Установка и запуск из deb/rpm пакета|репозиториях]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! version !! distrib !! linux bin !! windows bin !! deb/rpm !! doc&lt;br /&gt;
!svace checkers version&lt;br /&gt;
|-&lt;br /&gt;
| 12.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12-0-0-linux.tar.gz svacer-12-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12-0-0-windows.zip svacer-12-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer_12.0-0_amd64.deb svacer_12.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12.0-0.x86_64.rpm svacer-12.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 12-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 12-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Svacer#Документация|Documentation 12.x.x]]&lt;br /&gt;
|4.0.251120&lt;br /&gt;
|-&lt;br /&gt;
| 11.2.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11-2-0-linux.tar.gz svacer-11-2-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11-2-0-windows.zip svacer-11-2-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer_11.2-0_amd64.deb svacer_11.2-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11.2-0.x86_64.rpm svacer-11.2-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-2-0|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 11.1.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11-1-0-linux.tar.gz svacer-11-1-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11-1-0-windows.zip svacer-11-1-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer_11.1-0_amd64.deb svacer_11.1-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11.1-0.x86_64.rpm svacer-11.1-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-1-0|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 11.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11-0-0-linux.tar.gz svacer-11-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11-0-0-windows.zip svacer-11-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer_11.0-0_amd64.deb svacer_11.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11.0-0.x86_64.rpm svacer-11.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 11-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.1&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10-0-1-linux.tar.gz svacer-10-0-1-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10-0-1-windows.zip svacer-10-0-1-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer_10.0-1_amd64.deb svacer_10.0-1_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10.0-1.x86_64.rpm svacer-10.0-1.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 10-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 10.x.x]]&lt;br /&gt;
|4.0.241102&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10-0-0-linux.tar.gz svacer-10-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10-0-0-windows.zip svacer-10-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer_10.0-0_amd64.deb svacer_10.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10.0-0.x86_64.rpm svacer-10.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 10-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 10-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 10.x.x]]&lt;br /&gt;
|4.0.241102&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.2&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-9-0-2.zip svacer-9-0-2.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer_9.0-2_amd64.deb svacer_9.0-2_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-9.0-2.x86_64.rpm svacer-9.0-2.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 9-0-2|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#9-0-0|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.1&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-9-0-1.zip svacer-9-0-1.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer_9.0-1_amd64.deb svacer_9.0-1_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-9.0-1.x86_64.rpm svacer-9.0-1.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 9-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#9-0-0|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&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]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&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]]&amp;lt;br /&amp;gt;[[Documentation 8.x.x]]&lt;br /&gt;
|3.4.0&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]]&amp;lt;br /&amp;gt;[[Documentation 8.x.x]]&lt;br /&gt;
|3.4.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[https://svacer.ispras.ru/releases Предыдущие релизы] | [https://nextcloud.ispras.ru/index.php/s/x4r4cMJAMr5RZtd?path=%2F Еще более старые релизы]&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;
https://svacer-demo.ispras.ru&lt;br /&gt;
&lt;br /&gt;
* admin / admin — логин / пароль администратора&lt;br /&gt;
* user / user — логин / пароль пользователя&lt;br /&gt;
&lt;br /&gt;
https://svacer-ai-demo.ispras.ru/ — [[Help:XSvacer:AIAssistant|ИИ-ассистент]]&lt;br /&gt;
* admin / admin&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=3416</id>
		<title>Svacer</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=3416"/>
		<updated>2025-11-28T11:52:21Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: fix documentation link&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 12.x.x&lt;br /&gt;
# [[Help:Introduction|Введение]]&lt;br /&gt;
# [[Help:Installation|Установка и обновление]]&lt;br /&gt;
# [[Help:Configuration|Настройка сервера]]&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;
# [[Help:Utils|Дополнительные утилиты]]&lt;br /&gt;
# [[Metrics|Prometheus-метрики]]&lt;br /&gt;
# [[Pipelines|Примеры пайплайнов]]&lt;br /&gt;
# [[Notifications|Уведомления]]&lt;br /&gt;
&lt;br /&gt;
=== Релизы ===&lt;br /&gt;
Также доступны в виде docker-образа на [https://hub.docker.com/r/ispras/svacer docker hub] и как пакеты в [[Help:Installation#Установка и запуск из deb/rpm пакета|репозиториях]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! version !! distrib !! linux bin !! windows bin !! deb/rpm !! doc&lt;br /&gt;
!svace checkers version&lt;br /&gt;
|-&lt;br /&gt;
| 12.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12-0-0-linux.tar.gz svacer-12-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12-0-0-windows.zip svacer-12-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer_12.0-0_amd64.deb svacer_12.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12.0-0.x86_64.rpm svacer-12.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 12-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Svacer#Документация|Documentation 12.x.x]]&lt;br /&gt;
|4.0.251120&lt;br /&gt;
|-&lt;br /&gt;
| 11.2.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11-2-0-linux.tar.gz svacer-11-2-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11-2-0-windows.zip svacer-11-2-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer_11.2-0_amd64.deb svacer_11.2-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11.2-0.x86_64.rpm svacer-11.2-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-2-0|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 11.1.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11-1-0-linux.tar.gz svacer-11-1-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11-1-0-windows.zip svacer-11-1-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer_11.1-0_amd64.deb svacer_11.1-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11.1-0.x86_64.rpm svacer-11.1-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-1-0|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 11.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11-0-0-linux.tar.gz svacer-11-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11-0-0-windows.zip svacer-11-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer_11.0-0_amd64.deb svacer_11.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11.0-0.x86_64.rpm svacer-11.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 11-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.1&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10-0-1-linux.tar.gz svacer-10-0-1-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10-0-1-windows.zip svacer-10-0-1-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer_10.0-1_amd64.deb svacer_10.0-1_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10.0-1.x86_64.rpm svacer-10.0-1.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 10-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 10.x.x]]&lt;br /&gt;
|4.0.241102&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10-0-0-linux.tar.gz svacer-10-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10-0-0-windows.zip svacer-10-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer_10.0-0_amd64.deb svacer_10.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10.0-0.x86_64.rpm svacer-10.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 10-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 10-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 10.x.x]]&lt;br /&gt;
|4.0.241102&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.2&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-9-0-2.zip svacer-9-0-2.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer_9.0-2_amd64.deb svacer_9.0-2_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-9.0-2.x86_64.rpm svacer-9.0-2.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 9-0-2|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#9-0-0|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.1&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-9-0-1.zip svacer-9-0-1.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer_9.0-1_amd64.deb svacer_9.0-1_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-9.0-1.x86_64.rpm svacer-9.0-1.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 9-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#9-0-0|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&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]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&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]]&amp;lt;br /&amp;gt;[[Documentation 8.x.x]]&lt;br /&gt;
|3.4.0&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]]&amp;lt;br /&amp;gt;[[Documentation 8.x.x]]&lt;br /&gt;
|3.4.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[https://svacer.ispras.ru/releases Предыдущие релизы] | [https://nextcloud.ispras.ru/index.php/s/x4r4cMJAMr5RZtd?path=%2F Еще более старые релизы]&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;
https://svacer-demo.ispras.ru&lt;br /&gt;
&lt;br /&gt;
* admin / admin — логин / пароль администратора&lt;br /&gt;
* user / user — логин / пароль пользователя&lt;br /&gt;
&lt;br /&gt;
https://svacer-ai-demo.ispras.ru/ — [[Help:XSvacer:AIAssistant|ИИ-ассистент]]&lt;br /&gt;
* admin / admin&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=3415</id>
		<title>Svacer</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=3415"/>
		<updated>2025-11-28T11:51:38Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: fix documentation link&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 12.x.x&lt;br /&gt;
# [[Help:Introduction|Введение]]&lt;br /&gt;
# [[Help:Installation|Установка и обновление]]&lt;br /&gt;
# [[Help:Configuration|Настройка сервера]]&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;
# [[Help:Utils|Дополнительные утилиты]]&lt;br /&gt;
# [[Metrics|Prometheus-метрики]]&lt;br /&gt;
# [[Pipelines|Примеры пайплайнов]]&lt;br /&gt;
# [[Notifications|Уведомления]]&lt;br /&gt;
&lt;br /&gt;
=== Релизы ===&lt;br /&gt;
Также доступны в виде docker-образа на [https://hub.docker.com/r/ispras/svacer docker hub] и как пакеты в [[Help:Installation#Установка и запуск из deb/rpm пакета|репозиториях]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! version !! distrib !! linux bin !! windows bin !! deb/rpm !! doc&lt;br /&gt;
!svace checkers version&lt;br /&gt;
|-&lt;br /&gt;
| 12.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12-0-0-linux.tar.gz svacer-12-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12-0-0-windows.zip svacer-12-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer_12.0-0_amd64.deb svacer_12.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12.0-0.x86_64.rpm svacer-12.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 12-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 12.x.x]]&lt;br /&gt;
|4.0.251120&lt;br /&gt;
|-&lt;br /&gt;
| 11.2.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11-2-0-linux.tar.gz svacer-11-2-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11-2-0-windows.zip svacer-11-2-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer_11.2-0_amd64.deb svacer_11.2-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11.2-0.x86_64.rpm svacer-11.2-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-2-0|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Svacer#Документация|Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 11.1.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11-1-0-linux.tar.gz svacer-11-1-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11-1-0-windows.zip svacer-11-1-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer_11.1-0_amd64.deb svacer_11.1-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11.1-0.x86_64.rpm svacer-11.1-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-1-0|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Svacer#Документация|Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 11.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11-0-0-linux.tar.gz svacer-11-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11-0-0-windows.zip svacer-11-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer_11.0-0_amd64.deb svacer_11.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11.0-0.x86_64.rpm svacer-11.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 11-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Svacer#Документация|Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.1&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10-0-1-linux.tar.gz svacer-10-0-1-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10-0-1-windows.zip svacer-10-0-1-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer_10.0-1_amd64.deb svacer_10.0-1_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10.0-1.x86_64.rpm svacer-10.0-1.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 10-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 10.x.x]]&lt;br /&gt;
|4.0.241102&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10-0-0-linux.tar.gz svacer-10-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10-0-0-windows.zip svacer-10-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer_10.0-0_amd64.deb svacer_10.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10.0-0.x86_64.rpm svacer-10.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 10-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 10-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 10.x.x]]&lt;br /&gt;
|4.0.241102&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.2&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-9-0-2.zip svacer-9-0-2.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer_9.0-2_amd64.deb svacer_9.0-2_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-9.0-2.x86_64.rpm svacer-9.0-2.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 9-0-2|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#9-0-0|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.1&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-9-0-1.zip svacer-9-0-1.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer_9.0-1_amd64.deb svacer_9.0-1_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-9.0-1.x86_64.rpm svacer-9.0-1.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 9-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#9-0-0|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&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]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&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]]&amp;lt;br /&amp;gt;[[Documentation 8.x.x]]&lt;br /&gt;
|3.4.0&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]]&amp;lt;br /&amp;gt;[[Documentation 8.x.x]]&lt;br /&gt;
|3.4.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[https://svacer.ispras.ru/releases Предыдущие релизы] | [https://nextcloud.ispras.ru/index.php/s/x4r4cMJAMr5RZtd?path=%2F Еще более старые релизы]&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;
https://svacer-demo.ispras.ru&lt;br /&gt;
&lt;br /&gt;
* admin / admin — логин / пароль администратора&lt;br /&gt;
* user / user — логин / пароль пользователя&lt;br /&gt;
&lt;br /&gt;
https://svacer-ai-demo.ispras.ru/ — [[Help:XSvacer:AIAssistant|ИИ-ассистент]]&lt;br /&gt;
* admin / admin&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=3414</id>
		<title>Svacer</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=3414"/>
		<updated>2025-11-28T11:16:53Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: add release 12-0-0&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 12.x.x&lt;br /&gt;
# [[Help:Introduction|Введение]]&lt;br /&gt;
# [[Help:Installation|Установка и обновление]]&lt;br /&gt;
# [[Help:Configuration|Настройка сервера]]&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;
# [[Help:Utils|Дополнительные утилиты]]&lt;br /&gt;
# [[Metrics|Prometheus-метрики]]&lt;br /&gt;
# [[Pipelines|Примеры пайплайнов]]&lt;br /&gt;
# [[Notifications|Уведомления]]&lt;br /&gt;
&lt;br /&gt;
=== Релизы ===&lt;br /&gt;
Также доступны в виде docker-образа на [https://hub.docker.com/r/ispras/svacer docker hub] и как пакеты в [[Help:Installation#Установка и запуск из deb/rpm пакета|репозиториях]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! version !! distrib !! linux bin !! windows bin !! deb/rpm !! doc&lt;br /&gt;
!svace checkers version&lt;br /&gt;
|-&lt;br /&gt;
| 12.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12-0-0-linux.tar.gz svacer-12-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12-0-0-windows.zip svacer-12-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-12-0-0/svacer_12.0-0_amd64.deb svacer_12.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-12-0-0/svacer-12.0-0.x86_64.rpm svacer-12.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 12-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 11.x.x]]&lt;br /&gt;
|4.0.251120&lt;br /&gt;
|-&lt;br /&gt;
| 11.2.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11-2-0-linux.tar.gz svacer-11-2-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11-2-0-windows.zip svacer-11-2-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer_11.2-0_amd64.deb svacer_11.2-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11.2-0.x86_64.rpm svacer-11.2-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-2-0|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Svacer#Документация|Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 11.1.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11-1-0-linux.tar.gz svacer-11-1-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11-1-0-windows.zip svacer-11-1-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer_11.1-0_amd64.deb svacer_11.1-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11.1-0.x86_64.rpm svacer-11.1-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-1-0|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Svacer#Документация|Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 11.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11-0-0-linux.tar.gz svacer-11-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11-0-0-windows.zip svacer-11-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer_11.0-0_amd64.deb svacer_11.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11.0-0.x86_64.rpm svacer-11.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 11-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Svacer#Документация|Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.1&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10-0-1-linux.tar.gz svacer-10-0-1-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10-0-1-windows.zip svacer-10-0-1-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer_10.0-1_amd64.deb svacer_10.0-1_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10.0-1.x86_64.rpm svacer-10.0-1.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 10-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 10.x.x]]&lt;br /&gt;
|4.0.241102&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10-0-0-linux.tar.gz svacer-10-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10-0-0-windows.zip svacer-10-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer_10.0-0_amd64.deb svacer_10.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10.0-0.x86_64.rpm svacer-10.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 10-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 10-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 10.x.x]]&lt;br /&gt;
|4.0.241102&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.2&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-9-0-2.zip svacer-9-0-2.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer_9.0-2_amd64.deb svacer_9.0-2_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-9.0-2.x86_64.rpm svacer-9.0-2.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 9-0-2|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#9-0-0|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.1&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-9-0-1.zip svacer-9-0-1.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer_9.0-1_amd64.deb svacer_9.0-1_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-9.0-1.x86_64.rpm svacer-9.0-1.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 9-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#9-0-0|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&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]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&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]]&amp;lt;br /&amp;gt;[[Documentation 8.x.x]]&lt;br /&gt;
|3.4.0&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]]&amp;lt;br /&amp;gt;[[Documentation 8.x.x]]&lt;br /&gt;
|3.4.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[https://svacer.ispras.ru/releases Предыдущие релизы] | [https://nextcloud.ispras.ru/index.php/s/x4r4cMJAMr5RZtd?path=%2F Еще более старые релизы]&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;
https://svacer-demo.ispras.ru&lt;br /&gt;
&lt;br /&gt;
* admin / admin — логин / пароль администратора&lt;br /&gt;
* user / user — логин / пароль пользователя&lt;br /&gt;
&lt;br /&gt;
https://svacer-ai-demo.ispras.ru/ — [[Help:XSvacer:AIAssistant|ИИ-ассистент]]&lt;br /&gt;
* admin / admin&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Dockerfile&amp;diff=3413</id>
		<title>Dockerfile</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Dockerfile&amp;diff=3413"/>
		<updated>2025-11-28T11:01:33Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: dockerfile for 12-0-0&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Для сборки докер-образа Svacer мы используем следующий Dockerfile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FROM ubuntu:22.04&lt;br /&gt;
&lt;br /&gt;
LABEL maintainer=&amp;quot;akuzmin@ispras.ru&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ARG DEBIAN_FRONTEND=noninteractive&lt;br /&gt;
&lt;br /&gt;
RUN apt update &amp;amp;&amp;amp; apt install -y --no-install-recommends curl ca-certificates jq \&lt;br /&gt;
    &amp;amp;&amp;amp; touch /etc/default/google-chrome \&lt;br /&gt;
    &amp;amp;&amp;amp; curl -sL --output chrome.deb https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb \&lt;br /&gt;
    &amp;amp;&amp;amp; apt install -y ./chrome.deb \&lt;br /&gt;
    &amp;amp;&amp;amp; rm -rf /var/cache/apt/archives /var/lib/apt/lists/* chrome.deb \&lt;br /&gt;
    &amp;amp;&amp;amp; mkdir -p /svacer/bin &amp;amp;&amp;amp; mkdir -p /svacer/store&lt;br /&gt;
&lt;br /&gt;
COPY svacer-server /svacer/bin/&lt;br /&gt;
COPY svacer-server.sig /svacer/bin/&lt;br /&gt;
COPY svacer /svacer/bin/&lt;br /&gt;
COPY libpdfium.so /svacer/bin/&lt;br /&gt;
COPY pdfmerge /svacer/bin/&lt;br /&gt;
COPY start.sh /svacer/bin/&lt;br /&gt;
&lt;br /&gt;
WORKDIR /svacer/bin&lt;br /&gt;
&lt;br /&gt;
ENV PATH=/svacer/bin:$PATH&lt;br /&gt;
ENV DEBUG=false&lt;br /&gt;
ENV PPROF_PORT=''&lt;br /&gt;
ENV STORE=/svacer/store&lt;br /&gt;
ENV SVACER_PG_URL=postgres://svace:svace@127.0.0.1:5432/svace?pool_max_conns=20&lt;br /&gt;
ENV LDAP_CONFIG=''&lt;br /&gt;
ENV PUBLIC_URL=''&lt;br /&gt;
ENV WEBIDE_ENABLE=false&lt;br /&gt;
ENV XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_CONTAINERHOSTCONFIGMOUNTS_PROJECTROOTBIND_DISABLED=true&lt;br /&gt;
ENV XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_CONTAINERHOSTCONFIGMOUNTS_PROJECTROOTVOLUME_DISABLED=false&lt;br /&gt;
ENV XSVACER_WEBIDE_THEIA_DEFAULT_DOCKER_CONTAINERNETWORKINGCONFIGENDPOINTS_SVACER_DISABLED=false&lt;br /&gt;
ENV AIASSISTANT_ENABLE=false&lt;br /&gt;
ENV XSVACER_AIASSISTANT_ASSISTANTHOSTURL=http://svacerai-server:7001/&lt;br /&gt;
&lt;br /&gt;
EXPOSE 8080&lt;br /&gt;
EXPOSE 3002&lt;br /&gt;
&lt;br /&gt;
CMD [&amp;quot;/svacer/bin/start.sh&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
HEALTHCHECK --timeout=10s --retries=4 CMD curl --fail http://localhost:8080/api/health || exit 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Documentation_11.x.x&amp;diff=3412</id>
		<title>Documentation 11.x.x</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Documentation_11.x.x&amp;diff=3412"/>
		<updated>2025-11-28T10:57:11Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: create documentation 11-0-0 page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://svacer.ispras.ru/mediawiki/index.php?title=Help:Introduction&amp;amp;oldid=2985 Введение]&amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://svacer.ispras.ru/mediawiki/index.php?title=Help:Installation&amp;amp;oldid=3038 Установка и обновление]&amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://svacer.ispras.ru/mediawiki/index.php?title=Help:Import_from_Svace&amp;amp;oldid=3036 Импорт из Svace]&amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://svacer.ispras.ru/mediawiki/index.php?title=Help:Backup&amp;amp;oldid=2060 Резервное копирование]&amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://svacer.ispras.ru/mediawiki/index.php?title=Help:UI_manual&amp;amp;oldid=2982 Использование веб-интерфейса]&amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://svacer.ispras.ru/mediawiki/index.php?title=Help:Public_API&amp;amp;oldid=2450 Public REST API]&amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://svacer.ispras.ru/mediawiki/index.php?title=Help:CLI&amp;amp;oldid=2956 CLI]&amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://svacer.ispras.ru/mediawiki/index.php?title=LDAP_configuration&amp;amp;oldid=2955 LDAP]&amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://svacer.ispras.ru/mediawiki/index.php?title=OIDC&amp;amp;oldid=2961 OpenID Connect]&amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://svacer.ispras.ru/mediawiki/index.php?title=Help:Sarif&amp;amp;oldid=3022 SARIF]&amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://svacer.ispras.ru/mediawiki/index.php?title=Help:Statistics&amp;amp;oldid=2028 Статистика]&amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://svacer.ispras.ru/mediawiki/index.php?title=Help:Match&amp;amp;oldid=3006 Механизмы сопоставления предупреждений и переноса разметки]&amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://svacer.ispras.ru/mediawiki/index.php?title=Help:XSvacer&amp;amp;oldid=3011 XSvacer — расширение функциональности Svacer]&amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://svacer.ispras.ru/mediawiki/index.php?title=Help:Utils&amp;amp;oldid=2645 Дополнительные утилиты]&amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://svacer.ispras.ru/mediawiki/index.php?title=Metrics&amp;amp;oldid=2080 Prometheus-метрики]&amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://svacer.ispras.ru/mediawiki/index.php?title=Pipelines&amp;amp;oldid=3034 Примеры пайплайнов]&amp;lt;/span&amp;gt;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://svacer.ispras.ru/mediawiki/index.php?title=Notifications&amp;amp;oldid=2970 Уведомления]&amp;lt;/span&amp;gt;&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:Utils&amp;diff=3411</id>
		<title>Help:Utils</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:Utils&amp;diff=3411"/>
		<updated>2025-11-28T10:55:21Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: minor fixes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Утилиты ==&lt;br /&gt;
=== pfixer ===&lt;br /&gt;
pfixer — утилита для исправления путей при экспорте снимков в файл. Замена путей в существующем снимке опасна, поэтому предлагается делать экспорт снимка с заменой путей. После, при необходимости, исходный снимок можно удалить с сервера. Утилита также работает со снимками в &amp;lt;code&amp;gt;.snap&amp;lt;/code&amp;gt; файлах. &lt;br /&gt;
&lt;br /&gt;
Начиная с версии &amp;lt;code&amp;gt;&amp;gt;=devel.2025-08-19&amp;lt;/code&amp;gt; включает флаг &amp;lt;code&amp;gt;--autofix&amp;lt;/code&amp;gt; для исправления ряда проблем с дублями связей разметки и комментариев при импорте. Опцию можно использовать при обнаружении ошибок вида &amp;lt;code&amp;gt;ERROR: duplicate key value violates unique constraint &amp;quot;group_review_comments_idx_group_review_id&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Поддерживаются версии Svacer, начиная с 7-0-0, но в дистрибутив утилита входит с версии 10-0-0. Актуальную версию можно [https://svacer.ispras.ru/releases/utils/pfixer скачать отсюда].&lt;br /&gt;
&lt;br /&gt;
Для работы с утилитой необходимо создать файл содержащий правила замены путей. Это должен быть юниксовый текстовый файл (разделитель строк &amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt;). Его можно указать через опцию &amp;lt;code&amp;gt;--map-file&amp;lt;/code&amp;gt; или через stdin. Каждая строчка должна содержать заменяемый префикс и значение, разделённые двоеточием. Если префикс должен быть удалён, для замены используется знак &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;префикс1&amp;gt;:&amp;lt;замена1&amp;gt;&lt;br /&gt;
 &amp;lt;префикс2&amp;gt;:&amp;lt;замена2&amp;gt;&lt;br /&gt;
 &amp;lt;префикс3&amp;gt;:&amp;lt;замена3&amp;gt;&lt;br /&gt;
 &amp;lt;префикс4&amp;gt;:-&lt;br /&gt;
&lt;br /&gt;
Также есть возможность использовать [https://pkg.go.dev/regexp#Regexp.ReplaceAllString регулярные выражения] (в экспериментальной стадии) из языка Go. В этом случае надо использовать знак '@' в начале строки. Можно использовать $var для ссылок на группы в регулярном выражении.&lt;br /&gt;
&lt;br /&gt;
 @&amp;lt;регулярное_выражение1&amp;gt;:&amp;lt;замена&amp;gt;&lt;br /&gt;
 @&amp;lt;регулярное_выражение2&amp;gt;:-&lt;br /&gt;
&lt;br /&gt;
Все правила упорядочиваются перед заменой, применяется самое длинное подходящее правило. Процесс прерывается в случае, если пути конфликтуют после замены (два пути превратились в один).&lt;br /&gt;
&lt;br /&gt;
Авторизацию на сервере можно передать через опции &amp;lt;code&amp;gt;--credentials &amp;lt;login:password&amp;gt;&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;--token &amp;lt;token&amp;gt;&amp;lt;/code&amp;gt; — сразу токен авторизации.&lt;br /&gt;
&lt;br /&gt;
Исходный снимок с сервера можно передать в виде URL.&lt;br /&gt;
&lt;br /&gt;
'''Примеры'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 pfixer --source http://svacer/mode/review/project/{project}/branch/{branch}/snapshot/{snapshot} --output updated.snap --credentials login:password --map-file map.txt&lt;br /&gt;
 pfixer --source input.snap --output updated.snap -map-file map.txt --log-file test.log&lt;br /&gt;
 pfixer --source input.snap --output updated.snap --log-file test.log | cat map.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== reviewer ===&lt;br /&gt;
Утилита для репликации разметки по декларативно описанным правилам. &lt;br /&gt;
&lt;br /&gt;
Подробнее в отдельной статье: [[Review_replication]]&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Changelog&amp;diff=3410</id>
		<title>Changelog</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Changelog&amp;diff=3410"/>
		<updated>2025-11-28T10:17:04Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: review and fixes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Release 12-0-0 ===&lt;br /&gt;
28.11.2025&lt;br /&gt;
&lt;br /&gt;
* API методы на fullmarkers позволяют [[Help:Public_API#Примеры_использования_фильтров_в_public_api|указать фильтр]] с полем фильтрации по 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; для [[Help:Configuration#Переменные_окружения|контроля таймаута]] на ожидание начала импорта результатов и &amp;lt;code&amp;gt;SVACER_NUM_PARALLEL_IMPORTS&amp;lt;/code&amp;gt; на [[Help:Configuration#Переменные_окружения|ограничение числа параллельных импортов]]. По умолчанию значения 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-интерфейсе, ограничен. Размер [[Help:Configuration#Переменные_окружения|задается переменной окружения]] SVACER_TAIL_LOG_SIZE (по умолчанию 1Мб). Показывается последний кусок не более SVACER_TAIL_LOG_SIZE. Сам лог файл не ограничивается в размерах и кнопка выгрузки лога выгружает полный лог&lt;br /&gt;
* ['''Экспериментально'''] Можно [[Help:Configuration#Переменные_окружения|указать 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-клиента svacer&lt;br /&gt;
* При запуске сервера можно указать флаг &amp;lt;code&amp;gt;--force-invariant-refresh&amp;lt;/code&amp;gt; для принудительной регенерации инвариантов. Это может решить проблему с переносом разметки&lt;br /&gt;
* Добавлена переменная окружения SVACER_INV_GEN_JOBS для контроля числа параллельных заданий при регенерации инвариантов. При ограниченных ресурсах машины рекомендуем ставить значение 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; с указанием опции &amp;lt;code&amp;gt;quick-stat&amp;lt;/code&amp;gt;. Данный флаг позволяет получать ссылку на 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:Configuration#Механизм интеграции с внешними системами посредством Webhook-ов|Webhooks]]&lt;br /&gt;
* Добавлена [[Help:Configuration#Настройка защиты от перебора паролей пользователей|защита от перебора пароля пользователя]]&lt;br /&gt;
* Добавлена возможность задать [[Help:Configuration#Настройка парольной политики внутреннего механизма аутентификации Svacer|парольную политику безопасности]] для пользователей, использующих встроенный механизм аутентификации Svacer &lt;br /&gt;
* Добавлена возможность задать [[Help:Configuration#Задание вкладки по умолчанию на странице входа в 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>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:Configuration&amp;diff=3409</id>
		<title>Help:Configuration</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:Configuration&amp;diff=3409"/>
		<updated>2025-11-28T09:27:14Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: fix mistype&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Настройки аутентификации в Svacer ==&lt;br /&gt;
В Svacer возможны четыре способа аутентификации пользователей&lt;br /&gt;
&lt;br /&gt;
# Встроенный&lt;br /&gt;
# С помощью LDAP сервера&lt;br /&gt;
# Через утилиту oauth_proxy (по протоколу OIDC)&lt;br /&gt;
# Посредством Personal Access Token (PAT)&lt;br /&gt;
&lt;br /&gt;
Ниже рассматривается настройка аутентификации посредством внутреннего механизма аутентификации. Для настройки [[LDAP]], [[Help:CLI#Personal Access Token|PAT]] или [[OIDC]] аутентификации см. соответствующие разделы документации.&lt;br /&gt;
&lt;br /&gt;
=== Настройка внутреннего механизма аутентификации Svacer ===&lt;br /&gt;
&lt;br /&gt;
==== Настройка парольной политики внутреннего механизма аутентификации Svacer ====&lt;br /&gt;
Настройки параметров встроенного механизма аутентификации возможны посредством секции '''auth.svacer''' конфигурационного файла Svacer. Ниже приведен пример настроек:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;auth:&lt;br /&gt;
  svacer:&lt;br /&gt;
    password:&lt;br /&gt;
       min_length: 10&lt;br /&gt;
       complexity:&lt;br /&gt;
        - &amp;amp;quot;[a-z]&amp;amp;quot;&lt;br /&gt;
        - &amp;amp;quot;[A-Z]&amp;amp;quot;&lt;br /&gt;
        - &amp;amp;quot;[0-9]&amp;amp;quot;&lt;br /&gt;
        - &amp;amp;quot;[!#]&amp;amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Параметр '''min_length''' задает минимальную возможную длину пароля в системе. Данный критерий используется при смене пароля пользователя и не влияет на текущие пароли пользователей.&lt;br /&gt;
&lt;br /&gt;
Параметр '''complexity''' содержит набор регулярных выражений, задающих требования к паролю с точки зрения наличия в нем определенных символов. При задании такого списка выражений Svacer будет проверять задаваемый пользователем новый пароль на предмет удовлетворения всем этим требованиям. Каждое выражение в списке — полноценное выражение, поддерживаемое языком golang.&lt;br /&gt;
&lt;br /&gt;
Указанные выше настройки применяются только к внутренним учетным записям пользователей Svacer. По умолчанию данные настройки отключены (нет требований на минимальную длину и сложность пароля).&lt;br /&gt;
&lt;br /&gt;
==== Задание вкладки по умолчанию на странице входа в GUI Svacer (а также отключение внутреннего механизма аутентификации Svacer) ====&lt;br /&gt;
В случае интеграции Svacer с LDAP, можно указать Svacer какую вкладку — Svacer или LDAP — использовать по умолчанию. Для этого используется параметр '''auth.svacer.default'''. Если данный параметр установлен в значение '''true''', то вкладкой по умолчанию будет вкладка Svacer, иначе — вкладка LDAP.&lt;br /&gt;
&lt;br /&gt;
Также возможно полностью отключить механизм внутренней аутентификации Svacer с помощью параметра '''auth.svacer.enabled'''.&lt;br /&gt;
&lt;br /&gt;
Ниже приведен пример конфигурационного файла Svacer для задания вкладки LDAP по умолчанию (в случае наличие интеграции с LDAP сервером)&amp;lt;pre class=&amp;quot;plaintext&amp;quot;&amp;gt;auth:&lt;br /&gt;
  svacer:&lt;br /&gt;
    enabled: true&lt;br /&gt;
    default: false&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка защиты от перебора паролей пользователей ===&lt;br /&gt;
Для случаев аутентификации с помощью LDAP сервера и с помощью встроенного механизма аутентификации реализован механизм блокировки учетных записей пользователей в том случае, если количество неудачных попыток входа превышает заданное в настройках число. По умолчанию защита отключена. Ниже приведен пример секции конфигурационного файла Svacer, задающего правила блокировки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;plaintext&amp;quot;&amp;gt;security:&lt;br /&gt;
  login:&lt;br /&gt;
    max_attempts: 5&lt;br /&gt;
    lock_time: 2m&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Время, на которое происходит блокировка учетной записи пользователя, указывается в формате golang/time: 1s,1m,60m и т. д.&lt;br /&gt;
&lt;br /&gt;
В случае активации защиты данный механизм также защищает аутентификацию посредством вызовов соответствующих точек входа public API.&lt;br /&gt;
&lt;br /&gt;
Блокировка не влияет на работу уже зарегистрированных пользователей.&lt;br /&gt;
&lt;br /&gt;
Для принудительной разблокировки пользователей можно использовать команды cli (требуются права управления сервером):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;svacer user-provider unlock --user admin --password admin --login locked_user&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка TLS ==&lt;br /&gt;
Svacer может быть сконфигурирован для поддержки TLS несколькими способами. Первый способ — использовать reverse proxy с поддержкой HTTPS и проксированием в Svacer по HTTP, второй — запуск Svacer с нативной поддержкой TLS.&lt;br /&gt;
&lt;br /&gt;
=== Reverse proxy ===&lt;br /&gt;
Данный способ позволяет обеспечить безопасную передачу данных только по протоколу HTTPS, данные по протоколу gRPC передаются в незащищенном виде.&lt;br /&gt;
&lt;br /&gt;
==== Nginx ====&lt;br /&gt;
Создайте конфигурационный файл с подобным содержанием в '''/etc/nginx/sites-enabled/''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen 443 ssl;&lt;br /&gt;
    listen [::]:443 ssl;&lt;br /&gt;
&lt;br /&gt;
    server_name svacer.ispras.ru;&lt;br /&gt;
&lt;br /&gt;
    # for large data transfers and continuous connections&lt;br /&gt;
    client_max_body_size        0;&lt;br /&gt;
    proxy_connect_timeout       600;&lt;br /&gt;
    proxy_send_timeout          600;&lt;br /&gt;
    proxy_read_timeout          600;&lt;br /&gt;
    send_timeout                600;&lt;br /&gt;
&lt;br /&gt;
    # path to ssl-certificate and key&lt;br /&gt;
    ssl_certificate /etc/ssl/certs/svacer.ispras.ru.crt;&lt;br /&gt;
    ssl_certificate_key /etc/ssl/private/svacer.ispras.ru.key;&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        include proxy_params;&lt;br /&gt;
&lt;br /&gt;
        # to make WebSockets work&lt;br /&gt;
        proxy_http_version  1.1;&lt;br /&gt;
        proxy_set_header    Upgrade $http_upgrade;&lt;br /&gt;
        proxy_set_header    Connection &amp;quot;upgrade&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        # svacer HTTP URL&lt;br /&gt;
        proxy_pass http://127.0.0.1:8080;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# proxy gRPC port if required&lt;br /&gt;
server {&lt;br /&gt;
    listen 13002 http2;&lt;br /&gt;
    underscores_in_headers on;&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        grpc_pass grpc://127.0.0.1:3002;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В этом конфигурационном файле укажите нужное имя сервера, пути к сертификату (можно использовать fullchain-сертификат) и ключу, а также адрес сервера Svacer, куда проксировать. После этого перезапустите Nginx.&lt;br /&gt;
  systemctl restart nginx&lt;br /&gt;
&lt;br /&gt;
Если ваш сервер виден из интернета и его внешний IP-адрес привязан к доменному имени, можете использовать Let's Encrypt и Certbot для получения валидного SSL-сертификата. См. [https://www.nginx.com/blog/using-free-ssltls-certificates-from-lets-encrypt-with-nginx/ эту инструкцию].&lt;br /&gt;
&lt;br /&gt;
==== Apache ====&lt;br /&gt;
Включите нужные модули в Apache&lt;br /&gt;
  sudo a2enmod ssl proxy proxy_http rewrite&lt;br /&gt;
&lt;br /&gt;
Создайте конфигурационный файл с подобным содержанием в '''/etc/apache2/sites-enabled/'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
    SSLEngine On&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyTimeout 600&lt;br /&gt;
    &lt;br /&gt;
    # path to ssl-certificate and key&lt;br /&gt;
    SSLCertificateFile /etc/ssl/certs/svacer.ispras.ru.crt&lt;br /&gt;
    SSLCertificateKeyFile /etc/ssl/private/svacer.ispras.ru.key&lt;br /&gt;
    &lt;br /&gt;
    # svacer HTTP URL&lt;br /&gt;
    ProxyPass / http://127.0.0.1:8080/&lt;br /&gt;
    ProxyPassReverse / http://127.0.0.1:8080/&lt;br /&gt;
&lt;br /&gt;
    # to make WebSockets work&lt;br /&gt;
    ProxyPass /api/ws/ ws://127.0.0.1:8080/api/ws/&lt;br /&gt;
    ProxyPassReverse /api/ws/ ws://127.0.0.1:8080/api/ws/&lt;br /&gt;
    RewriteEngine on&lt;br /&gt;
    RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]&lt;br /&gt;
    RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]&lt;br /&gt;
    RewriteRule /api/ws/(.*) ws://127.0.0.1:8080%{REQUEST_URI} [P]&lt;br /&gt;
&lt;br /&gt;
    ServerName svacer.ispras.ru&lt;br /&gt;
    ServerAdmin svacer@ispras.ru&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В этом конфигурационном файле укажите нужное имя сервера, пути к сертификату (можно использовать fullchain-сертификат) и ключу, а также адрес сервера Svacer, куда проксировать. После этого перезапустите Apache.&lt;br /&gt;
  systemctl restart apache2&lt;br /&gt;
&lt;br /&gt;
=== Нативно ===&lt;br /&gt;
Этот способ позволяет обеспечить безопасную передачу данных как по протоколу HTTPS, так и по протоколу gRPC. Если сервер запускается с поддержкой TLS, то эта опция относится как к протоколу HTTPS, так и к протоколу gRPC.&lt;br /&gt;
По умолчанию сервер запускается без поддержки TLS, при этом в логах отображается информация об этом.&lt;br /&gt;
 TLS for REST and gRPC DISABLED&lt;br /&gt;
&lt;br /&gt;
Для запуска сервера с поддержкой TLS необходимо указать сертификат сервера и соответствующий закрытый ключ.&lt;br /&gt;
 svacer-server run --ssl-cert svacer.crt --ssl-key svacer.key&lt;br /&gt;
&lt;br /&gt;
При этом ключ должен быть в незашифрованном виде. Права доступа к файлу должны быть 0600. В файле сертификата можно указывать цепочку сертификатов. В этом случае сервер, при подключении клиента, будет возвращать всю цепочку. Первым сертификатом в цепочке всегда должен идти сертификат сервера Svacer. Формат файла — PEM. TLS соединение активируется и для протокола REST и для протокола gRPC. &lt;br /&gt;
&lt;br /&gt;
Работа сервера по проктолу TLS сопровождается следующей записью в логе:&lt;br /&gt;
 Using TLS for REST and gRPC protocols&lt;br /&gt;
&lt;br /&gt;
Работа с таким сервером через CLI происходит как обычно. Для указания необходимости подключаться по TLS можно явно указать протокол в параметре '''--host''', либо добавить опцию '''--ssl'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 svacer upload --host https://example.com&lt;br /&gt;
 svacer upload --ssl --host example.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Также в клиенте можно определить параметр '''--ssl-ca-certs'''. Он позволяет задать доверенные сертификаты корневых центров. Указывается шаблон файлов (с *) или конкретный файл. Путь к директории должен быть абсолютным. В случае отсутствия этого параметра используется TLS, но сертификат сервера не проверяется. Этому случаю соответствует запись в логе клиента:&lt;br /&gt;
 Using weak TLS configuration, because no CA certificate found&lt;br /&gt;
&lt;br /&gt;
Если сертификаты были загружены, в логе будет строчка:&lt;br /&gt;
 added 1 ca certs from /home/user/svacer/svacer.crt&lt;br /&gt;
&lt;br /&gt;
Для администрирования сервера в плане используемого сертификата (например, замена при истечении срока действия) добавлена область в CLI svacer admin: '''server:config'''. В данной области есть 3 команды: '''show''', '''reload''', '''update'''. ID в этом случае нужно всегда указывать в значение '''ssl.cert'''.&lt;br /&gt;
 &lt;br /&gt;
* '''show''' — отображает текущий используемый сертификат&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;pre&amp;gt;svacer admin --ssl --host example.com --user admin --password admin --scope server:config --id ssl.cert --action show&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''reload''' — заставляет сервер перечитать использованные при старте сервера файлы с сертификатом и ключом&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;pre&amp;gt;svacer admin --ssl --host example.com --user admin --password admin --scope server:config --id ssl.cert --action reload&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''update''' — позволяет переслать на сервер новый сертификат (и ключ, если надо) и записать их в указанные при старте сервера файлы. При использовании этой команды нужно сформировать файл с новым сертификатом и, при необходимости, ключом, в формате PEM (используете '''cat''' для объединения сертификата и ключа в один файл) и указать этот файл в параметре value. Если в файле не будет указан закрытый ключ, то сервером будет использован текущий (тот, что был указан при запуске). Данная команда также изменит файлы сертификата и ключа (если он указан), указанные при старте сервера, на новые значения.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;pre&amp;gt;svacer admin --ssl --host example.com --user admin --password admin --scope server:config --id ssl.cert --action update --value svacer.pem&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Некоторое время после обновления сертификата сервер может использовать старые сертификаты (для уже установленных соединений). Для новых соединений будет использован обновленный сертификат.&lt;br /&gt;
&lt;br /&gt;
В конфигурационном файле Svacer можно указать минимальную и максимальные версии TLS, поддерживаемые сервером. Для этого необходимо в конфигурационном файле указать параметры &amp;lt;code&amp;gt;minVersion&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;maxVersion&amp;lt;/code&amp;gt; в разделе security.tls. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
security:&lt;br /&gt;
  tls:&lt;br /&gt;
    minVersion: tls11&lt;br /&gt;
    maxVersion: tls12&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Интеграция с хранилищем секретов Infisical ==&lt;br /&gt;
В Svacer реализована поддержка получения секретов из хранилища секретов [https://infisical.com/ Infisical]. Подробную информацию об интеграции см. в статье [[Infisical|Интеграция с хранилищем секретов Infisical]].&lt;br /&gt;
&lt;br /&gt;
== Механизм интеграции с внешними системами посредством Webhook-ов ==&lt;br /&gt;
&lt;br /&gt;
=== Общий принцип работы ===&lt;br /&gt;
&lt;br /&gt;
Механизм webhook-ов настраивается в конфигурационном файле в секции '''webhook'''. Механизм срабатывает при получении по внутренней шине одного из поддерживаемых событий Svacer. Каждое из внутренних событий преобразуется в событие вызова webhook-а (см. [[Help:Configuration#Модель поддерживаемых событий|Модель поддерживаемых событий]]) и отправляется на обработку в каждую из настроенных целей, которыми являются http-обработчики. Отправкой занимаются работники (их количество настраивается в конфигурационном файле в параметре '''workers_count'''). У каждой цели есть общая очередь, размер которой составляет 500 событий. Если очередь переполняется, будет выдаваться соответствующее сообщение в лог-файле Svacer.&lt;br /&gt;
&lt;br /&gt;
Работники поддерживают протокол https (в том числе самоподписанные сертификаты). Для указания корневого сертификата можно использовать параметр '''ca_certs''' конфигурационного файла. Работникам можно указать таймаут соединения с webhook-сервером (в мс, по умолчанию 1000мс, параметр '''timeout''') и количество попыток отправки (по умолчанию — одна попытка, параметр '''retry_count''').&lt;br /&gt;
&lt;br /&gt;
В настройках можно указать фильтр на отправляемые события (параметр '''filter'''). Фильтр указывается посредством задания выражения. В выражениях используется [https://github.com/expr-lang/expr синтаксис go-expr]. Фильтр возможно указать в количестве одной штуки на одну цель. Если фильтр после вычисления дает значение true, событие будет отправлено в цель.&lt;br /&gt;
&lt;br /&gt;
Также реализован журнал событий отправки webhook-ов, размер которого может быть указан в конфигурационном файле (параметр '''journal_length'''). По умолчанию он равен 86400 записей — по 1 записи на каждую секунду суток. Журнал может быть использован для отладки механизма отправки событий в цель. Содержимое журнала хранится в памяти. При достижении журналом максимального размера, самые старые записи заменяются новыми.&lt;br /&gt;
&lt;br /&gt;
Для настройки аутентификации работника можно использовать параметр '''headers''', который представляет собой список значений вида '''key:value'''. Данные пары будут добавлены в заголовки каждого http-запроса, выполняемого работником.&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация ===&lt;br /&gt;
&lt;br /&gt;
Возможный пример конфигурационного файла, в котором указана отправка на сервер test-host.local событий, связанных с разметкой маркера.&lt;br /&gt;
&lt;br /&gt;
 webhook:&lt;br /&gt;
  enabled: true&lt;br /&gt;
  journal_length: 86400&lt;br /&gt;
  targets:&lt;br /&gt;
   - url: &amp;quot;&amp;lt;nowiki&amp;gt;https://test-host.local:8080/webhook&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
     workers_count: 1&lt;br /&gt;
     enabled: true     &lt;br /&gt;
     filter: &amp;quot;Type == EventReviewMarker and Payload.Status != 'Undecided'&amp;quot;&lt;br /&gt;
     ca_certs: &amp;quot;/etc/ssl/certs/ca.crt&amp;quot;&lt;br /&gt;
     retry_count: 3&lt;br /&gt;
     timeout: 1000&lt;br /&gt;
     headers:&lt;br /&gt;
        - &amp;quot;password:12345&amp;quot;&lt;br /&gt;
        - &amp;quot;Authorization: Bearer eyJh .... &amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== CLI ===&lt;br /&gt;
&lt;br /&gt;
Для взаимодействия с механизмом webhook реализованы две cli команды:&lt;br /&gt;
&lt;br /&gt;
 svacer server webhook journal&lt;br /&gt;
 svacer server webhook stat&lt;br /&gt;
&lt;br /&gt;
Первая команда позволяет посмотреть записи журнала отправки событий. Вторая команда позволяет вывести статистику по работе службы (особенно интересными могут быть поля '''sendError''' и '''skip''').&lt;br /&gt;
&lt;br /&gt;
Пример вывода для первой команды (с флагом '''--humanize'''; если флага нет, то вывод будет в формате json):&lt;br /&gt;
&lt;br /&gt;
 ==================== #1 ======================&lt;br /&gt;
 Time: 2025-07-01 12:25:52.25343534 +0300 MSK&lt;br /&gt;
 Created by: admin&lt;br /&gt;
 Error: &lt;br /&gt;
 Success: true&lt;br /&gt;
 SvacerKind: UpdateMarkerReview&lt;br /&gt;
 EventType: EventReviewMarker&lt;br /&gt;
 TargetURL: &amp;lt;nowiki&amp;gt;https://swarm-mgr.home:8080/webhook&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 ProcessTime: 6 ms&lt;br /&gt;
 ==================== #2 ======================&lt;br /&gt;
 Time: 2025-07-01 12:25:54.202850322 +0300 MSK&lt;br /&gt;
 Created by: admin&lt;br /&gt;
 Error: &lt;br /&gt;
 Success: true&lt;br /&gt;
 SvacerKind: UpdateMarkerReview&lt;br /&gt;
 EventType: EventReviewMarker&lt;br /&gt;
 TargetURL: &amp;lt;nowiki&amp;gt;https://swarm-mgr.home:8080/webhook&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 ProcessTime: 3 ms&lt;br /&gt;
&lt;br /&gt;
Пример вывода команды статистики:&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
 &amp;quot;enabled&amp;quot;: true,&lt;br /&gt;
 &amp;quot;targets&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;enabled&amp;quot;: true,&lt;br /&gt;
   &amp;quot;url&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;https://swarm-mgr.home:8080/webhook&amp;lt;/nowiki&amp;gt;&amp;quot;,&lt;br /&gt;
   &amp;quot;filtered&amp;quot;: 0,&lt;br /&gt;
   &amp;quot;sendSuccess&amp;quot;: 3,&lt;br /&gt;
   &amp;quot;sentError&amp;quot;: 0,&lt;br /&gt;
   &amp;quot;submitted&amp;quot;: 3,&lt;br /&gt;
   &amp;quot;skip&amp;quot;: 0&lt;br /&gt;
  }&lt;br /&gt;
 ]&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== Модель поддерживаемых событий ====&lt;br /&gt;
 syntax = &amp;quot;proto3&amp;quot;;&lt;br /&gt;
 import &amp;quot;google/protobuf/any.proto&amp;quot;;&lt;br /&gt;
 option go_package=&amp;quot;svacer/proto/webhook&amp;quot;;&lt;br /&gt;
 package webhook;&lt;br /&gt;
 &lt;br /&gt;
 enum EventType {&lt;br /&gt;
     EventNone = 0;&lt;br /&gt;
     EventTest = 1;&lt;br /&gt;
     EventReviewMarker = 2;&lt;br /&gt;
     EventPurgeReview = 3;&lt;br /&gt;
     EventGroupReview = 4;&lt;br /&gt;
     EventImportSnapshot = 5;&lt;br /&gt;
     EventCopySnapshot = 6;&lt;br /&gt;
     EventNewComment = 7;&lt;br /&gt;
     EventUpdateComment = 8;&lt;br /&gt;
     EventNewContainer = 9;&lt;br /&gt;
     EventDeleteContainer = 10;&lt;br /&gt;
     EventUpdateContainer  =11;&lt;br /&gt;
     EventImportMarkup = 12;&lt;br /&gt;
     EventDeleteSnapshot = 13;&lt;br /&gt;
     UpdateSnapshot = 14;&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 message MarkerDetails {&lt;br /&gt;
     string id = 1;&lt;br /&gt;
     string file = 2;&lt;br /&gt;
     string line = 3;&lt;br /&gt;
     string lang = 4;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message Event {&lt;br /&gt;
     uint64 timestamp = 1;&lt;br /&gt;
     EventType type = 2;&lt;br /&gt;
     string created_by = 3;&lt;br /&gt;
     google.protobuf.Any payload = 4;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadMarkerReview {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string snapshot_id = 5;&lt;br /&gt;
     string snapshot_name = 6;&lt;br /&gt;
     repeated MarkerDetails markers = 7;&lt;br /&gt;
     string comment = 8;&lt;br /&gt;
     string severity = 9;&lt;br /&gt;
     string action = 10;&lt;br /&gt;
     string status = 11;&lt;br /&gt;
     bool group_review = 12;&lt;br /&gt;
     string created_by_id = 13;&lt;br /&gt;
     string created_by_login = 14;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadPurgeReview {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string created_by_id = 5;&lt;br /&gt;
     string created_by_login = 6;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadImportSnapshot {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string snapshot_id = 5;&lt;br /&gt;
     string snapshot_name = 6;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadMarkerComment {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string snapshot_id = 5;&lt;br /&gt;
     string snapshot_name = 6;&lt;br /&gt;
     MarkerDetails marker = 7;&lt;br /&gt;
     string comment = 8;&lt;br /&gt;
     string created_by_id = 9;&lt;br /&gt;
     string created_by_login = 10;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadCopySnapshot {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string snapshot_id = 5;&lt;br /&gt;
     string snapshot_name = 6;&lt;br /&gt;
     string created_by_id = 7;&lt;br /&gt;
     string created_by_login = 8;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message Container {    &lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     Container source = 5;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadNewContainer {&lt;br /&gt;
     repeated Container containers = 1;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadDeleteContainer {&lt;br /&gt;
     repeated Container projects = 1;&lt;br /&gt;
     repeated Container branches = 2;    &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadUpdateContainer {&lt;br /&gt;
     Container container = 1;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message CopyResult {&lt;br /&gt;
    uint64 total = 1;&lt;br /&gt;
 	uint64 applied_reviews = 2;&lt;br /&gt;
 	uint64 applied_comments = 3;&lt;br /&gt;
 	uint64 skipped_reviews = 4;&lt;br /&gt;
 	uint64 duplicate_reviews = 5;&lt;br /&gt;
 	uint64 duplicate_comments = 6;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadImportMarkup {&lt;br /&gt;
     Container source=1;&lt;br /&gt;
     Container target=2;&lt;br /&gt;
     CopyResult copy_result =3;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message Snapshot {    &lt;br /&gt;
     string snapshot_id = 1;&lt;br /&gt;
     string snapshot_name = 2;&lt;br /&gt;
     Container container = 3;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadDeleteSnapshots {&lt;br /&gt;
      repeated Snapshot snapshots = 1;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadUpdateSnapshot {&lt;br /&gt;
     string snapshot_id = 1;&lt;br /&gt;
     string snapshot_name = 2;&lt;br /&gt;
     Container container  = 3;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Выбор сетевых интерфейсов и портов сервера ==&lt;br /&gt;
* По умолчанию web-сервер запускается на всех сетевых интерфейсах, на порту 8080 ('''0.0.0.0:8080'''). Для указания конкретного сетевого интерфейса можно использовать опцию '''--listen &amp;lt;network interface&amp;gt;''', для указания другого порта: '''--port &amp;lt;port_number&amp;gt;.&lt;br /&gt;
* Аналогично для grpc-сервера: по умолчанию — '''0.0.0.0:3002''', для выбора конкретного интерфейса: '''--listen-grpc &amp;lt;network_interface&amp;gt;''', для указания другого порта: '''--grpc &amp;lt;port_number&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
 svacer-server run --listen 127.0.0.1 --port 9090 --listen-grpc 127.0.0.1 --grpc 3004&lt;br /&gt;
&lt;br /&gt;
При попытке запуска на порту &amp;lt; 1024 от непривилегированного пользователя (например, от пользователя svacer при установке из deb/rpm пакета), сервер Svacer не запустится с ошибкой &lt;br /&gt;
&lt;br /&gt;
 ERROR: port 443 is privileged, please check current user permissions or set another rest api port&lt;br /&gt;
&lt;br /&gt;
В таком случае надо выдать capabilities на открытие привилегированных портов файлу сервера Svacer. Это нужно будет делать при каждом обновлении версии сервера&lt;br /&gt;
&lt;br /&gt;
 sudo setcap 'cap_net_bind_service=+ep' /usr/bin/svacer-server&lt;br /&gt;
&lt;br /&gt;
== Увеличение лимита открытых файлов ==&lt;br /&gt;
Актуально только для Linux.&lt;br /&gt;
&lt;br /&gt;
Если проекты большие, или их много, в object store создается большое количество файлов. Для нормальной работы сервера Svacer при этом рекомендуется увеличивать системный лимит количества одновременно открытых файлов. &lt;br /&gt;
&lt;br /&gt;
В POSIX таких лимита два:&lt;br /&gt;
* soft nofiles — текущее максимальное значение&lt;br /&gt;
* hard nofiles — общесистемное максимальное значение&lt;br /&gt;
&lt;br /&gt;
В большинстве систем hard значение достаточно большое, а soft обычно маленькое, что и приводит к проблемам. Пример на Debian 11:&lt;br /&gt;
&lt;br /&gt;
  $ ulimit -Sn&lt;br /&gt;
  1024&lt;br /&gt;
  $ ulimit -Hn&lt;br /&gt;
  1048576&lt;br /&gt;
&lt;br /&gt;
Начиная с версии 6-0-0 Svacer пытается автоматически увеличить soft limit до значения hard limit при запуске, а начиная с версии 8-0-0 — проверяет, что увеличить удалось и выводит сообщение с текущим лимитом. Если видите в логах подобную запись — у soft и hard одно, достаточно большое значение — значит все в порядке.&lt;br /&gt;
&lt;br /&gt;
  Open files limit (soft and hard): 1048576&lt;br /&gt;
&lt;br /&gt;
Для более ранних версий, или если на вашем дистрибутиве Linux это не работает автоматически, можете увеличить лимит вручную одним из следующих способов:&lt;br /&gt;
&lt;br /&gt;
* Перед запуском Svacer выполнить из консоли команду, увеличив лимит для текущей сессии&lt;br /&gt;
  ulimit -Sn 16384&lt;br /&gt;
&lt;br /&gt;
* Либо один раз увеличить на уровне системы — в файл '''/etc/security/limits.conf''' добавить&lt;br /&gt;
&lt;br /&gt;
  * soft nofile 16384&lt;br /&gt;
&lt;br /&gt;
* Если запускаете Svacer как сервис systemd, добавьте параметр '''LimitNOFILE''' в секцию '''[Service]''' файла описания сервиса.&lt;br /&gt;
:В файле из deb/rpm пакета релиза Svacer этот параметр уже добавлен&lt;br /&gt;
&lt;br /&gt;
  [Service]&lt;br /&gt;
  LimitNOFILE=16384&lt;br /&gt;
&lt;br /&gt;
После чего выполните следующие команды, чтобы прочитать обновленный конфиг и перезапустить с ним Svacer&lt;br /&gt;
&lt;br /&gt;
  sudo systemctl daemon-reload&lt;br /&gt;
  sudo systemctl restart svacer.service&lt;br /&gt;
&lt;br /&gt;
== Установка пути к директории для кэша ==&lt;br /&gt;
Если запускаете Svacer под пользователем без домашней директории, рекомендуется установить путь к директории для кэша через переменную окружения SVACER_CACHE_DIR в файле описания сервиса systemd&lt;br /&gt;
&lt;br /&gt;
  [Service]&lt;br /&gt;
  Environment=&amp;quot;SVACER_CACHE_DIR=/path/to/some/dir&amp;quot;&lt;br /&gt;
&lt;br /&gt;
После чего выполните следующие команды, чтобы прочитать обновленный конфиг и перезапустить с ним Svacer&lt;br /&gt;
&lt;br /&gt;
  sudo systemctl daemon-reload&lt;br /&gt;
  sudo systemctl restart svacer.service&lt;br /&gt;
&lt;br /&gt;
== Дополнительные параметры при запуске в docker ==&lt;br /&gt;
При запуске в докер-контейнере можно указать дополнительные параметры, к примеру добавить конфиг [[Help:CLI#Хуки|хуков]].&lt;br /&gt;
&lt;br /&gt;
Для этого переопределите команду запуска сервера Svacer в docker-compose файле и допишите туда нужные параметры:&lt;br /&gt;
&lt;br /&gt;
 command: /svacer/bin/svacer-server run --store /data/store --pg postgres://svace:svace@postgresql:5432/svace --hooks /svacer/hooks.json&lt;br /&gt;
&lt;br /&gt;
Конфигурационный файл с описанием хуков примонтируйте как volume:&lt;br /&gt;
&lt;br /&gt;
 volumes:&lt;br /&gt;
   - ./hooks.json:/svacer/hooks.json&lt;br /&gt;
&lt;br /&gt;
Можете использовать переменные из секции environment docker-compose файла, тогда в строке запуска их надо экранировать с помощью &amp;lt;code&amp;gt;$$&amp;lt;/code&amp;gt; и запускать сервер Svacer как shell-команду, чтобы в контейнере подставились значения переменных&lt;br /&gt;
&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;
   - HOOKS_FILE=/svacer/hooks.json&lt;br /&gt;
 volumes:&lt;br /&gt;
   - ./hooks.json:/svacer/hooks.json&lt;br /&gt;
 command: sh -c &amp;quot;/svacer/bin/svacer-server run --store $$STORE --pg $$SVACER_PG_URL --hooks $$HOOKS_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Для более комплексных сценариев можете собрать свой образ с сервером Svacer, использовав наш [[Dockerfile]] как референс.&lt;br /&gt;
&lt;br /&gt;
== Обновление детекторов ==&lt;br /&gt;
После установки новой версии Svace требуется обновить описания детекторов в Svacer. Для этого необходимо выполнить команду:&lt;br /&gt;
&lt;br /&gt;
  svacer checkers --upload &amp;lt;/path/to/svace&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note}} Обновление описаний детекторов это серьезная операция, которая должна выполняться после предварительного тестирования. Поэтому перед выполнением команды рекомендуется сделать резервную копию базы данных Svacer.&lt;br /&gt;
&lt;br /&gt;
== Генерация PDF на основе HTML ==&lt;br /&gt;
В релиз 10.х.х включена генерация PDF на основе рендеринга HTML с последующим запуском headless chrome/chromium для генерации PDF. Этот подход позволяет упростить формирование шаблонов для генерации PDF, но требует существенно больше вычислительных ресурсов. Для тюнинга числа параллельных процессов при генерации используется переменная окружения&lt;br /&gt;
&lt;br /&gt;
 SVACER_PDF_GEN_LIMITS=&amp;lt;pdf tool limit&amp;gt;:&amp;lt;chrome limit&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первое значение &amp;lt;code&amp;gt;&amp;lt;pdf tool limit&amp;gt;&amp;lt;/code&amp;gt; определяет число одновременных процессов pdfmerge для сборки отдельных секций в единый PDF документ; второе значение &amp;lt;code&amp;gt;&amp;lt;chrome limit&amp;gt;&amp;lt;/code&amp;gt; определяет одновременное число процессов chrome/chromium для генерации PDF из HTML. Не рекомендуется ставить значения, сильно превышающие число ядер в сервере.&lt;br /&gt;
&lt;br /&gt;
== Полнотекстовый поиск ==&lt;br /&gt;
Для поддержки полнотекстового поиска Svacer строит индекс. По умолчанию директория для индекса создается в &amp;lt;code&amp;gt;$HOME/.cache/svacer&amp;lt;/code&amp;gt;, для указания иной директории можно использовать переменную окружения &amp;lt;code&amp;gt;SVACER_SEARCH_INDEX_DIR&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В ряде случаев (падение и рестарт сервера, ошибки и т. п.) кэш может быть в некорректном состоянии. Для переиндексации данных администратор может использовать CLI команду&lt;br /&gt;
&lt;br /&gt;
 svacer search --host &amp;lt;nowiki&amp;gt;http://some_host:port&amp;lt;/nowiki&amp;gt; --user &amp;lt;login&amp;gt; --password &amp;lt;pwd&amp;gt; --drop-cache&lt;br /&gt;
&lt;br /&gt;
Используемая при этом учетная запись должна быть с правами на &amp;lt;code&amp;gt;Server administration&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При импорте результатов на сервер индексация идет в фоновой задаче, поэтому появление новых данных в результатах поиска может занять некоторое время.&lt;br /&gt;
&lt;br /&gt;
== Указание public-url ==&lt;br /&gt;
В некоторых случаях необходимо явно указывать серверу Svacer его URL-адрес. Например, это нужно для корректной генерации коротких ссылок на предупреждения и ссылок в [[Notifications|уведомлениях]]. Используйте параметр &amp;lt;code&amp;gt;--public-url&amp;lt;/code&amp;gt; при запуске сервера&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;svacer-server run --public-url http://svacer.intra.net:8080&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&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;
|SVACER_TIMEOUT_IMPORT_RESULTS&lt;br /&gt;
|15 минут&lt;br /&gt;
|Таймаут ожидания процесса начала импорта на сервере. При превышении запрос на импорт будет отклонен с ошибкой. Формат — Go Duration string: 1h2m3s. Переменная затрагивает только ожидание начала, но не ограничивает сам процесс импорта&lt;br /&gt;
|-&lt;br /&gt;
|SVACER_NUM_PARALLEL_IMPORTS&lt;br /&gt;
|(максимальное число коннектов к БД) / 2&lt;br /&gt;
|Число одновременных параллельных импортов. Остальные ждут в очереди. На ожидание влияет переменная SVACER_TIMEOUT_IMPORT_RESULTS&lt;br /&gt;
|-&lt;br /&gt;
|SVACER_TAIL_LOG_SIZE&lt;br /&gt;
|1Мб&lt;br /&gt;
|Число. Размер буфера для показа лога сервера в WebUI. Показывается последние SVACER_TAIL_LOG_SIZE байт из лога. &lt;br /&gt;
|-&lt;br /&gt;
|SVACER_LOG_FORMAT&lt;br /&gt;
|&amp;lt;пусто&amp;gt;&lt;br /&gt;
|При указании 'json' формат вывода лога заменяется на JSON. Предназначено для интеграции с агрегаторами логов. Также можно указать через флаг при старте: &amp;lt;code&amp;gt;svacer-server --log-format=json&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|SVACER_INV_GEN_JOBS&lt;br /&gt;
|0.7 * runtime.GOMAXPROCS&lt;br /&gt;
|Максимальное число параллельных заданий для генерации инвариантов при миграции старой базы или импорте результатов. При ограниченных ресурсах сервера используйте значение 1 или 2. Нельзя установить значение больше, чем GOMAXPROCS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Пересчет инвариантов ===&lt;br /&gt;
При миграции со старых версий иногда могут быть проблемы с переносом разметки. Для принудительного пересчета инвариантов запустите сервер с опцией &amp;lt;code&amp;gt;--force-invariant-refresh&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
=== Объектное хранилище ===&lt;br /&gt;
При больших размерах объектного хранилища (object store) можно запустить сервер с параметром &amp;lt;code&amp;gt;--compact-object-store&amp;lt;/code&amp;gt; — это приведет к поиску недостижимых объектов в хранилище и сокращению размера базы. Операция может занять продолжительное время.&lt;br /&gt;
&lt;br /&gt;
'''ЭКСПЕРИМЕНТАЛЬНО''': Для быстрого получения копии текущего объектного хранилища пользователь может использовать CLI команду &lt;br /&gt;
&lt;br /&gt;
 svacer server backup --host &amp;lt;nowiki&amp;gt;http://localhost:8080&amp;lt;/nowiki&amp;gt; --user admin --password &amp;lt;admin pwd&amp;gt; --checkpoint &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная команда создаст по пути &amp;lt;path&amp;gt; на '''хосте, где работает сервер''',  копию object store. При создании копии по возможности используются hard links, для ускорения процесса. Процесс работает в фоновом режиме, можно запускать его для работающего сервера.&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:Installation&amp;diff=3408</id>
		<title>Help:Installation</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:Installation&amp;diff=3408"/>
		<updated>2025-11-28T09:22:19Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: fix link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Установка и запуск ==&lt;br /&gt;
Для использования только клиента Svacer достаточно [[Svacer#Релизы|скачать исполняемый файл]] '''svacer''', или установить [[Help:Installation#Svacer|deb/rpm пакет]].&lt;br /&gt;
&lt;br /&gt;
Сервер Svacer можно запустить в [[Help:Installation#docker compose|докере]] или из [[Help:Installation#deb/rpm|deb/rpm пакета]].&lt;br /&gt;
&lt;br /&gt;
=== docker compose ===&lt;br /&gt;
Рекомендуемый и самый простой способ деплоя — развернуть сервер Svacer в докер-контейнерах, воспользовавшиcь [https://svacer.ispras.ru/extra/docker-compose.yml docker-compose.yml] файлом:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;curl -LO https://svacer.ispras.ru/extra/docker-compose.yml&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 docker compose up -d&lt;br /&gt;
&lt;br /&gt;
После запуска контейнеров веб-интерфейс Svacer будет доступен по адресу http://localhost:8080, логин / пароль — admin / admin.&lt;br /&gt;
&lt;br /&gt;
Для сборки своего докер-образа Svacer можете использовать [[Dockerfile]] в качестве референса.&lt;br /&gt;
&lt;br /&gt;
Для указания других параметров сервера можете [[Help:Configuration#Дополнительные параметры при запуске в docker|переопределить команду запуска]] в docker-compose файле.&lt;br /&gt;
&lt;br /&gt;
=== deb/rpm ===&lt;br /&gt;
==== PostgreSQL ====&lt;br /&gt;
{{Note|type=info|text=Disclaimer&lt;br /&gt;
* Рекомендуемая версия PostgreSQL — 15 и выше. С более старыми версиями корректная работа Svacer не гарантируется.&lt;br /&gt;
* Svacer требует эксклюзивного доступа к базе. Использование одной и той же базы для нескольких экземпляров Svacer может приводить к порче данных.}}&lt;br /&gt;
&lt;br /&gt;
Для работы сервера Svacer установите PostgreSQL, следуя [https://www.postgresql.org/download/linux документации postgres]. Для RedHat-based OS нужно дополнительно установить пакет postgresql-contrib соответствующей версии.&lt;br /&gt;
&lt;br /&gt;
Пример для Ubuntu 22:&lt;br /&gt;
&lt;br /&gt;
 sudo apt install -y postgresql-common&lt;br /&gt;
 sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh&lt;br /&gt;
 sudo apt install -y postgresql-17&lt;br /&gt;
&lt;br /&gt;
Пример для Rocky Linux 9.4:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 sudo dnf -qy module disable postgresql&lt;br /&gt;
 sudo dnf install -y postgresql17-server postgresql17-contrib&lt;br /&gt;
 sudo /usr/pgsql-17/bin/postgresql-17-setup initdb&lt;br /&gt;
 sudo systemctl enable postgresql-17&lt;br /&gt;
 sudo systemctl start postgresql-17&lt;br /&gt;
&lt;br /&gt;
==== Браузер для PDF-отчетов ====&lt;br /&gt;
Для создания PDF-отчетов с использованием нового HTML-генератора установите браузер Google Chrome на машину, где запускается сервер Svacer. Рекомендуется устанавливать из официального репозитория, следуя [https://www.google.com/chrome/?platform=linux инструкции с сайта google]. &lt;br /&gt;
&lt;br /&gt;
{{Note|type=info|text=Рекомендуемые системные требования при генерации PDF-отчетов для больших проектов с использованием HTML-генератора: Intel Core i9, 64 GB RAM, SSD, видеокарта Nvidia}}&lt;br /&gt;
&lt;br /&gt;
При запуске Svacer проверит доступность браузера для генерации PDF. Если он не установлен или генерация не работает, будет использован нативный генератор: менее продвинутый, но для него не нужен браузер. Можно явно включить использование нативного генератора, передав опцию &amp;lt;code&amp;gt;--pdf-generator=native&amp;lt;/code&amp;gt; при запуске сервера Svacer.&lt;br /&gt;
&lt;br /&gt;
При невозможности установить Google Chrome, например если нет пакета для вашего дистрибутива Linux, можно установить Chromium. Его пакет в репозиториях, в зависимости от вышей ОС, может называться &amp;lt;code&amp;gt;chromium-browser&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;chromium&amp;lt;/code&amp;gt;. В некоторых случаях генерация с Chromium может не работать. Например, если Svacer установлен из deb-пакета, а Сhromium из snap (на Ubuntu он устанавливается именно так даже при использовании apt) и сервер Svacer запускается от отдельного системного пользователя, от которого Chromium не может запуститься. В этом случае установите Google Chrome, с ним генерация работает.&lt;br /&gt;
&lt;br /&gt;
==== Svacer ====&lt;br /&gt;
На Debian-based OS добавьте apt-репозиторий и установите Svacer из него.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;echo 'deb [signed-by=/usr/share/keyrings/ispras.gpg] https://repo.ispras.ru/apt /' | sudo tee /etc/apt/sources.list.d/ispras.list&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;curl -fsSL https://repo.ispras.ru/apt/key.asc | sudo gpg --dearmor -o /usr/share/keyrings/ispras.gpg&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 sudo apt update&lt;br /&gt;
 sudo apt install -y svacer&lt;br /&gt;
&lt;br /&gt;
На RedHat-based OS добавьте dnf-репозиторий и установите Svacer из него&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;curl -fsSL https://repo.ispras.ru/rpm/ispras.repo | sudo tee /etc/yum.repos.d/ispras.repo&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 sudo dnf install -y svacer&lt;br /&gt;
&lt;br /&gt;
Для создания БД PostgreSQL запустите '''psql''' от учетной записи пользователя '''postgres''' &lt;br /&gt;
&lt;br /&gt;
 sudo su -l postgres&lt;br /&gt;
 psql&lt;br /&gt;
&lt;br /&gt;
И выполните следующие запросы:&lt;br /&gt;
 create database svace;&lt;br /&gt;
 create user svace with encrypted password 'svace';&lt;br /&gt;
 grant all privileges on database svace to svace;&lt;br /&gt;
 alter user svace superuser;&lt;br /&gt;
&lt;br /&gt;
В данном примере создается БД svace и права на нее выдаются пользователю svace с паролем svace. Также этому пользователю выдаются права суперюзера, что необходимо для создания расширений в PostgreSQL. При использовании этих значений по умолчанию дальнейшая конфигурация не требуется и можно переходить к запуску.&lt;br /&gt;
&lt;br /&gt;
При использовании других значений нужно поменять параметры подключения к БД в файле '''/etc/default/svacer'''&lt;br /&gt;
&lt;br /&gt;
 SVACER_ARGS=&amp;quot;--pg postgres://&amp;lt;user&amp;gt;:&amp;lt;password&amp;gt;@127.0.0.1:5432/&amp;lt;database&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
В этой же строке можно указать прочие аргументы для запуска сервера Svacer.&lt;br /&gt;
&lt;br /&gt;
На Astra Linux необходимо в файле '''/etc/parsec/mswitch.conf''' установить параметр &amp;lt;code&amp;gt;zero_if_notfound: yes&amp;lt;/code&amp;gt;, иначе при запуске Svacer будет ошибка подключения к БД вида&lt;br /&gt;
&lt;br /&gt;
 error obtaining MAC configuration for user &amp;quot;svace&amp;quot; (SQLSTATE 57P03)&lt;br /&gt;
&lt;br /&gt;
После создания БД и конфигурации сервера Svacer запустить его можно следующими командами&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl enable svacer&lt;br /&gt;
 sudo systemctl start svacer&lt;br /&gt;
&lt;br /&gt;
После чего проверить успешность запуска командой&lt;br /&gt;
&lt;br /&gt;
 systemctl status svacer&lt;br /&gt;
&lt;br /&gt;
После запуска сервер будет доступен по адресу http://localhost:8080, логин / пароль — admin / admin.&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск на Windows ===&lt;br /&gt;
PostgreSQL нужен только для сервера Svacer, для клиента не требуется. &lt;br /&gt;
* Скачайте установщик PostgreSQL для Windows: https://www.postgresql.org/download/windows&lt;br /&gt;
* Установите PostgreSQL, выбрав, как минимум, компоненты &amp;quot;PostgreSQL Server&amp;quot; и &amp;quot;Command Line Tools&amp;quot;&lt;br /&gt;
* Задайте и запомните пароль на шаге выбора пароля для суперпользователя&lt;br /&gt;
* Остальные параметры при установке можно оставить по умолчанию&lt;br /&gt;
* После установки PostgreSQL откройте консоль, перейдите в директорию, куда установили PostgreSQL, запустите его клиент с указанием пользователя &amp;quot;postgres&amp;quot; и авторизуйтесь с паролем, заданным во время установки&lt;br /&gt;
  cd c:\Program Files\PostgreSQL\15\bin&lt;br /&gt;
  psql -U postgres&lt;br /&gt;
* Запустится консоль управления PostgreSQL. Выполните в ней следующие команды, чтобы создать БД и пользователя для Svacer&lt;br /&gt;
  create database svace;&lt;br /&gt;
  create user svace with encrypted password 'svace';&lt;br /&gt;
  grant all privileges on database svace to svace;&lt;br /&gt;
  alter user svace superuser;&lt;br /&gt;
* Выйдите из консоли PostgreSQL&lt;br /&gt;
* Запустите '''svacer-server.exe''' из консоли с указанием параметров подключения к БД. Если при создании пользователя и БД PostgreSQL вы использовали для них имя по умолчанию 'svace', как в примере выше, то указывать данные для подключения к БД при запуске сервера не обязательно&lt;br /&gt;
  svacer-server.exe run&lt;br /&gt;
* Если создавали пользователя или БД с другими именами, то при запуске сервера надо указать их явно&lt;br /&gt;
  svacer-server.exe run --pg postgres://svacer_user:svacer_password@127.0.0.1:5432/svacer_database&lt;br /&gt;
* После запуска сервера его веб-интерфейс будет доступен по адресу http://localhost:8080, логин / пароль — admin / admin&lt;br /&gt;
&lt;br /&gt;
== Обновление ==&lt;br /&gt;
{{Note|type=reminder|text='''Перед обновлением настоятельно рекомендуется [[Help:Backup|делать резервные копии]]'''}}&lt;br /&gt;
&lt;br /&gt;
Миграции схем БД PostgreSQL и object store происходят автоматически при обновлении на новую версию Svacer. Поэтому для обновления Svacer достаточно остановить сервер старой версии, запустить сервер новой версии, указав ему те же параметры БД и object store, и подождать, пока не пройдет обновление, после чего Svacer запустится как обычно. При больших объемах данных в БД это может занять существенное время, до нескольких часов. Прогресс можно отслеживать по логам сервера. &lt;br /&gt;
&lt;br /&gt;
Версии не имеют обратной совместимости, то есть после обновления на следующую версию, откатиться на предыдущую можно будет, только восстановив БД из бэкапа.&lt;br /&gt;
&lt;br /&gt;
{{Note|type=warn|text=После запуска Svacer при обновлении обязательно дождитесь пока миграция БД завершится. Если прервать процесс во время миграции, принудительно остановив Svacer, база данных может оказаться в неконсистентном состоянии и придется восстанавливать данные из бэкапа.}}&lt;br /&gt;
&lt;br /&gt;
=== Upgrade notes ===&lt;br /&gt;
==== 12-x-x ====&lt;br /&gt;
* Рекомендуем обновить PostgreSQL до версии 15 или выше. С более старыми версиями корректная работа Svacer не гарантируется&lt;br /&gt;
* Если вы использовали аутентификацию с помощью LDAP в версиях Svacer 5-1-X и у вас не работает механизм тегирования или уведомлений (подписки), см [[LDAP_configuration#Некоторые_замечания_для_пользователей,_которые_использовали_LDAP_в_версиях_Svacer_5-1-X|решение проблем с отсутствием статуса пользователя в БД]]&lt;br /&gt;
&lt;br /&gt;
==== 11-x-x ====&lt;br /&gt;
Нет специфических рекомендаций по обновлению.&lt;br /&gt;
&lt;br /&gt;
==== 10-x-x ====&lt;br /&gt;
Нет специфических рекомендаций по обновлению.&lt;br /&gt;
&lt;br /&gt;
==== 9-0-0 ====&lt;br /&gt;
{{Note|type=reminder|text=При обновлении на эту версию рекомендуем не меньше 8GB RAM для корректности миграций}}&lt;br /&gt;
&lt;br /&gt;
Базово, никаких обязательных ручных действий с базой данных или object store при обновлении на 9-0-0 не требуется. Описанные ниже шаги могут помочь увеличить производительность сервера Svacer или решить возможные проблемы.&lt;br /&gt;
&lt;br /&gt;
'''1.''' &lt;br /&gt;
&lt;br /&gt;
В версии 9-0-0 поменялся формат object store, поэтому при обновлении с предыдущих версий Svacer на 9-0-0 или выше будет запущена конвертация object store в новый формат. Конвертация сначала записывает новые данные, а потом, если все прошло успешно, удаляет старые. Из-за этого для конвертации нужно примерно в два раза больше свободного дискового пространства, чем занимает текущий object store. При больших размерах object store и медленном диске конвертация может занять много времени.&lt;br /&gt;
&lt;br /&gt;
Конвертация запустится автоматически при обновлении на 9-0-0, но можно запустить вручную отдельно:&lt;br /&gt;
&lt;br /&gt;
 svacer-server kvconvert --from &amp;lt;path&amp;gt; --to &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расположение object store в файловой системе описано в [[Help:Backup#Бэкап object store вручную|разделе про бэкапы]].&lt;br /&gt;
&lt;br /&gt;
'''2.'''&lt;br /&gt;
&lt;br /&gt;
Перед установкой новой версии рекомендуется выполнить следующий запрос в БД для удаления дубликатов описаний чекеров.&lt;br /&gt;
&lt;br /&gt;
 delete from checkers where id not in (select max(id) from checkers group by (config_id, checker_id, languages, tools));&lt;br /&gt;
&lt;br /&gt;
Если вы уже выполняли этот запрос при [[Help:Installation#8-0-0|обновлении на 8-0-0]], то второй раз запускать не обязательно.&lt;br /&gt;
&lt;br /&gt;
'''3.'''&lt;br /&gt;
&lt;br /&gt;
После обновления на версию 9-0-0 и завершения всех миграций БД (когда станет доступен веб-интерфейс) рекомендуем выполнить команду &amp;lt;code&amp;gt;VACUUM FULL&amp;lt;/code&amp;gt; в PostgreSQL для очистки и оптимизации базы данных.&lt;br /&gt;
&lt;br /&gt;
 psql -h &amp;lt;postgres_host&amp;gt; -U &amp;lt;username&amp;gt; &amp;lt;svacer_database_name&amp;gt; -c 'VACUUM FULL;'&lt;br /&gt;
&lt;br /&gt;
Например: &lt;br /&gt;
&lt;br /&gt;
 psql -h localhost -U svacer svacer_db -c 'VACUUM FULL;'&lt;br /&gt;
&lt;br /&gt;
==== 8-0-0 ====&lt;br /&gt;
Если при обновлении на версию 8-0-0 и выше возникает подобная ошибка&lt;br /&gt;
 Key (config_id, checker_id, languages, tools)=(4cd178ce-a2b2-4692-a45a-f84b145c807b, FB.ICAST_QUESTIONABLE_UNSIGNED_RIGHT_SHIFT, {JAVA}, {SpotBugs}) is duplicated&lt;br /&gt;
Это значит, что в БД есть дубликаты чекеров. Выполните следующий SQL-запрос в PostgreSQL-базе Svacer, чтобы удалить их:&lt;br /&gt;
 delete from checkers where id not in (select max(id) from checkers group by (config_id, checker_id, languages, tools));&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:Configuration&amp;diff=3407</id>
		<title>Help:Configuration</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:Configuration&amp;diff=3407"/>
		<updated>2025-11-28T09:21:33Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: fix headers levels&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Настройки аутентификации в Svacer ==&lt;br /&gt;
В Svacer возможны четыре способа аутентификации пользователей&lt;br /&gt;
&lt;br /&gt;
# Встроенный&lt;br /&gt;
# С помощью LDAP сервера&lt;br /&gt;
# Через утилиту oauth_proxy (по протоколу OIDC)&lt;br /&gt;
# Посредством Personal Access Token (PAT)&lt;br /&gt;
&lt;br /&gt;
Ниже рассматривается настройка аутентификации посредством внутреннего механизма аутентификации. Для настройки [[LDAP]], [[Help:CLI#Personal Access Token|PAT]] или [[OIDC]] аутентификации см. соответствующие разделы документации.&lt;br /&gt;
&lt;br /&gt;
=== Настройка внутреннего механизма аутентификации Svacer ===&lt;br /&gt;
&lt;br /&gt;
==== Настройка парольной политики внутреннего механизма аутентификации Svacer ====&lt;br /&gt;
Настройки параметров встроенного механизма аутентификации возможны посредством секции '''auth.svacer''' конфигурационного файла Svacer. Ниже приведен пример настроек:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;auth:&lt;br /&gt;
  svacer:&lt;br /&gt;
    password:&lt;br /&gt;
       min_length: 10&lt;br /&gt;
       complexity:&lt;br /&gt;
        - &amp;amp;quot;[a-z]&amp;amp;quot;&lt;br /&gt;
        - &amp;amp;quot;[A-Z]&amp;amp;quot;&lt;br /&gt;
        - &amp;amp;quot;[0-9]&amp;amp;quot;&lt;br /&gt;
        - &amp;amp;quot;[!#]&amp;amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Параметр '''min_length''' задает минимальную возможную длину пароля в системе. Данный критерий используется при смене пароля пользователя и не влияет на текущие пароли пользователей.&lt;br /&gt;
&lt;br /&gt;
Параметр '''complexity''' содержит набор регулярных выражений, задающих требования к паролю с точки зрения наличия в нем определенных символов. При задании такого списка выражений Svacer будет проверять задаваемый пользователем новый пароль на предмет удовлетворения всем этим требованиям. Каждое выражение в списке — полноценное выражение, поддерживаемое языком golang.&lt;br /&gt;
&lt;br /&gt;
Указанные выше настройки применяются только к внутренним учетным записям пользователей Svacer. По умолчанию данные настройки отключены (нет требований на минимальную длину и сложность пароля).&lt;br /&gt;
&lt;br /&gt;
==== Задание вкладки по умолчанию на странице входа в GUI Svacer (а также отключение внутренного механизма аутентификации Svacer) ====&lt;br /&gt;
В случае интеграции Svacer с LDAP, можно указать Svacer какую вкладку — Svacer или LDAP — использовать по умолчанию. Для этого используется параметр '''auth.svacer.default'''. Если данный параметр установлен в значение '''true''', то вкладкой по умолчанию будет вкладка Svacer, иначе — вкладка LDAP.&lt;br /&gt;
&lt;br /&gt;
Также возможно полностью отключить механизм внутренней аутентификации Svacer с помощью параметра '''auth.svacer.enabled'''.&lt;br /&gt;
&lt;br /&gt;
Ниже приведен пример конфигурационного файла Svacer для задания вкладки LDAP по умолчанию (в случае наличие интеграции с LDAP сервером)&amp;lt;pre class=&amp;quot;plaintext&amp;quot;&amp;gt;auth:&lt;br /&gt;
  svacer:&lt;br /&gt;
    enabled: true&lt;br /&gt;
    default: false&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка защиты от перебора паролей пользователей ===&lt;br /&gt;
Для случаев аутентификации с помощью LDAP сервера и с помощью встроенного механизма аутентификации реализован механизм блокировки учетных записей пользователей в том случае, если количество неудачных попыток входа превышает заданное в настройках число. По умолчанию защита отключена. Ниже приведен пример секции конфигурационного файла Svacer, задающего правила блокировки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;plaintext&amp;quot;&amp;gt;security:&lt;br /&gt;
  login:&lt;br /&gt;
    max_attempts: 5&lt;br /&gt;
    lock_time: 2m&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Время, на которое происходит блокировка учетной записи пользователя, указывается в формате golang/time: 1s,1m,60m и т. д.&lt;br /&gt;
&lt;br /&gt;
В случае активации защиты данный механизм также защищает аутентификацию посредством вызовов соответствующих точек входа public API.&lt;br /&gt;
&lt;br /&gt;
Блокировка не влияет на работу уже зарегистрированных пользователей.&lt;br /&gt;
&lt;br /&gt;
Для принудительной разблокировки пользователей можно использовать команды cli (требуются права управления сервером):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;svacer user-provider unlock --user admin --password admin --login locked_user&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Настройка TLS ==&lt;br /&gt;
Svacer может быть сконфигурирован для поддержки TLS несколькими способами. Первый способ — использовать reverse proxy с поддержкой HTTPS и проксированием в Svacer по HTTP, второй — запуск Svacer с нативной поддержкой TLS.&lt;br /&gt;
&lt;br /&gt;
=== Reverse proxy ===&lt;br /&gt;
Данный способ позволяет обеспечить безопасную передачу данных только по протоколу HTTPS, данные по протоколу gRPC передаются в незащищенном виде.&lt;br /&gt;
&lt;br /&gt;
==== Nginx ====&lt;br /&gt;
Создайте конфигурационный файл с подобным содержанием в '''/etc/nginx/sites-enabled/''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen 443 ssl;&lt;br /&gt;
    listen [::]:443 ssl;&lt;br /&gt;
&lt;br /&gt;
    server_name svacer.ispras.ru;&lt;br /&gt;
&lt;br /&gt;
    # for large data transfers and continuous connections&lt;br /&gt;
    client_max_body_size        0;&lt;br /&gt;
    proxy_connect_timeout       600;&lt;br /&gt;
    proxy_send_timeout          600;&lt;br /&gt;
    proxy_read_timeout          600;&lt;br /&gt;
    send_timeout                600;&lt;br /&gt;
&lt;br /&gt;
    # path to ssl-certificate and key&lt;br /&gt;
    ssl_certificate /etc/ssl/certs/svacer.ispras.ru.crt;&lt;br /&gt;
    ssl_certificate_key /etc/ssl/private/svacer.ispras.ru.key;&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        include proxy_params;&lt;br /&gt;
&lt;br /&gt;
        # to make WebSockets work&lt;br /&gt;
        proxy_http_version  1.1;&lt;br /&gt;
        proxy_set_header    Upgrade $http_upgrade;&lt;br /&gt;
        proxy_set_header    Connection &amp;quot;upgrade&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        # svacer HTTP URL&lt;br /&gt;
        proxy_pass http://127.0.0.1:8080;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# proxy gRPC port if required&lt;br /&gt;
server {&lt;br /&gt;
    listen 13002 http2;&lt;br /&gt;
    underscores_in_headers on;&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        grpc_pass grpc://127.0.0.1:3002;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В этом конфигурационном файле укажите нужное имя сервера, пути к сертификату (можно использовать fullchain-сертификат) и ключу, а также адрес сервера Svacer, куда проксировать. После этого перезапустите Nginx.&lt;br /&gt;
  systemctl restart nginx&lt;br /&gt;
&lt;br /&gt;
Если ваш сервер виден из интернета и его внешний IP-адрес привязан к доменному имени, можете использовать Let's Encrypt и Certbot для получения валидного SSL-сертификата. См. [https://www.nginx.com/blog/using-free-ssltls-certificates-from-lets-encrypt-with-nginx/ эту инструкцию].&lt;br /&gt;
&lt;br /&gt;
==== Apache ====&lt;br /&gt;
Включите нужные модули в Apache&lt;br /&gt;
  sudo a2enmod ssl proxy proxy_http rewrite&lt;br /&gt;
&lt;br /&gt;
Создайте конфигурационный файл с подобным содержанием в '''/etc/apache2/sites-enabled/'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
    SSLEngine On&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyTimeout 600&lt;br /&gt;
    &lt;br /&gt;
    # path to ssl-certificate and key&lt;br /&gt;
    SSLCertificateFile /etc/ssl/certs/svacer.ispras.ru.crt&lt;br /&gt;
    SSLCertificateKeyFile /etc/ssl/private/svacer.ispras.ru.key&lt;br /&gt;
    &lt;br /&gt;
    # svacer HTTP URL&lt;br /&gt;
    ProxyPass / http://127.0.0.1:8080/&lt;br /&gt;
    ProxyPassReverse / http://127.0.0.1:8080/&lt;br /&gt;
&lt;br /&gt;
    # to make WebSockets work&lt;br /&gt;
    ProxyPass /api/ws/ ws://127.0.0.1:8080/api/ws/&lt;br /&gt;
    ProxyPassReverse /api/ws/ ws://127.0.0.1:8080/api/ws/&lt;br /&gt;
    RewriteEngine on&lt;br /&gt;
    RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]&lt;br /&gt;
    RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]&lt;br /&gt;
    RewriteRule /api/ws/(.*) ws://127.0.0.1:8080%{REQUEST_URI} [P]&lt;br /&gt;
&lt;br /&gt;
    ServerName svacer.ispras.ru&lt;br /&gt;
    ServerAdmin svacer@ispras.ru&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В этом конфигурационном файле укажите нужное имя сервера, пути к сертификату (можно использовать fullchain-сертификат) и ключу, а также адрес сервера Svacer, куда проксировать. После этого перезапустите Apache.&lt;br /&gt;
  systemctl restart apache2&lt;br /&gt;
&lt;br /&gt;
=== Нативно ===&lt;br /&gt;
Этот способ позволяет обеспечить безопасную передачу данных как по протоколу HTTPS, так и по протоколу gRPC. Если сервер запускается с поддержкой TLS, то эта опция относится как к протоколу HTTPS, так и к протоколу gRPC.&lt;br /&gt;
По умолчанию сервер запускается без поддержки TLS, при этом в логах отображается информация об этом.&lt;br /&gt;
 TLS for REST and gRPC DISABLED&lt;br /&gt;
&lt;br /&gt;
Для запуска сервера с поддержкой TLS необходимо указать сертификат сервера и соответствующий закрытый ключ.&lt;br /&gt;
 svacer-server run --ssl-cert svacer.crt --ssl-key svacer.key&lt;br /&gt;
&lt;br /&gt;
При этом ключ должен быть в незашифрованном виде. Права доступа к файлу должны быть 0600. В файле сертификата можно указывать цепочку сертификатов. В этом случае сервер, при подключении клиента, будет возвращать всю цепочку. Первым сертификатом в цепочке всегда должен идти сертификат сервера Svacer. Формат файла — PEM. TLS соединение активируется и для протокола REST и для протокола gRPC. &lt;br /&gt;
&lt;br /&gt;
Работа сервера по проктолу TLS сопровождается следующей записью в логе:&lt;br /&gt;
 Using TLS for REST and gRPC protocols&lt;br /&gt;
&lt;br /&gt;
Работа с таким сервером через CLI происходит как обычно. Для указания необходимости подключаться по TLS можно явно указать протокол в параметре '''--host''', либо добавить опцию '''--ssl'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 svacer upload --host https://example.com&lt;br /&gt;
 svacer upload --ssl --host example.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Также в клиенте можно определить параметр '''--ssl-ca-certs'''. Он позволяет задать доверенные сертификаты корневых центров. Указывается шаблон файлов (с *) или конкретный файл. Путь к директории должен быть абсолютным. В случае отсутствия этого параметра используется TLS, но сертификат сервера не проверяется. Этому случаю соответствует запись в логе клиента:&lt;br /&gt;
 Using weak TLS configuration, because no CA certificate found&lt;br /&gt;
&lt;br /&gt;
Если сертификаты были загружены, в логе будет строчка:&lt;br /&gt;
 added 1 ca certs from /home/user/svacer/svacer.crt&lt;br /&gt;
&lt;br /&gt;
Для администрирования сервера в плане используемого сертификата (например, замена при истечении срока действия) добавлена область в CLI svacer admin: '''server:config'''. В данной области есть 3 команды: '''show''', '''reload''', '''update'''. ID в этом случае нужно всегда указывать в значение '''ssl.cert'''.&lt;br /&gt;
 &lt;br /&gt;
* '''show''' — отображает текущий используемый сертификат&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;pre&amp;gt;svacer admin --ssl --host example.com --user admin --password admin --scope server:config --id ssl.cert --action show&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''reload''' — заставляет сервер перечитать использованные при старте сервера файлы с сертификатом и ключом&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;pre&amp;gt;svacer admin --ssl --host example.com --user admin --password admin --scope server:config --id ssl.cert --action reload&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''update''' — позволяет переслать на сервер новый сертификат (и ключ, если надо) и записать их в указанные при старте сервера файлы. При использовании этой команды нужно сформировать файл с новым сертификатом и, при необходимости, ключом, в формате PEM (используете '''cat''' для объединения сертификата и ключа в один файл) и указать этот файл в параметре value. Если в файле не будет указан закрытый ключ, то сервером будет использован текущий (тот, что был указан при запуске). Данная команда также изменит файлы сертификата и ключа (если он указан), указанные при старте сервера, на новые значения.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;pre&amp;gt;svacer admin --ssl --host example.com --user admin --password admin --scope server:config --id ssl.cert --action update --value svacer.pem&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Некоторое время после обновления сертификата сервер может использовать старые сертификаты (для уже установленных соединений). Для новых соединений будет использован обновленный сертификат.&lt;br /&gt;
&lt;br /&gt;
В конфигурационном файле Svacer можно указать минимальную и максимальные версии TLS, поддерживаемые сервером. Для этого необходимо в конфигурационном файле указать параметры &amp;lt;code&amp;gt;minVersion&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;maxVersion&amp;lt;/code&amp;gt; в разделе security.tls. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
security:&lt;br /&gt;
  tls:&lt;br /&gt;
    minVersion: tls11&lt;br /&gt;
    maxVersion: tls12&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Интеграция с хранилищем секретов Infisical ==&lt;br /&gt;
В Svacer реализована поддержка получения секретов из хранилища секретов [https://infisical.com/ Infisical]. Подробную информацию об интеграции см. в статье [[Infisical|Интеграция с хранилищем секретов Infisical]].&lt;br /&gt;
&lt;br /&gt;
== Механизм интеграции с внешними системами посредством Webhook-ов ==&lt;br /&gt;
&lt;br /&gt;
=== Общий принцип работы ===&lt;br /&gt;
&lt;br /&gt;
Механизм webhook-ов настраивается в конфигурационном файле в секции '''webhook'''. Механизм срабатывает при получении по внутренней шине одного из поддерживаемых событий Svacer. Каждое из внутренних событий преобразуется в событие вызова webhook-а (см. [[Help:Configuration#Модель поддерживаемых событий|Модель поддерживаемых событий]]) и отправляется на обработку в каждую из настроенных целей, которыми являются http-обработчики. Отправкой занимаются работники (их количество настраивается в конфигурационном файле в параметре '''workers_count'''). У каждой цели есть общая очередь, размер которой составляет 500 событий. Если очередь переполняется, будет выдаваться соответствующее сообщение в лог-файле Svacer.&lt;br /&gt;
&lt;br /&gt;
Работники поддерживают протокол https (в том числе самоподписанные сертификаты). Для указания корневого сертификата можно использовать параметр '''ca_certs''' конфигурационного файла. Работникам можно указать таймаут соединения с webhook-сервером (в мс, по умолчанию 1000мс, параметр '''timeout''') и количество попыток отправки (по умолчанию — одна попытка, параметр '''retry_count''').&lt;br /&gt;
&lt;br /&gt;
В настройках можно указать фильтр на отправляемые события (параметр '''filter'''). Фильтр указывается посредством задания выражения. В выражениях используется [https://github.com/expr-lang/expr синтаксис go-expr]. Фильтр возможно указать в количестве одной штуки на одну цель. Если фильтр после вычисления дает значение true, событие будет отправлено в цель.&lt;br /&gt;
&lt;br /&gt;
Также реализован журнал событий отправки webhook-ов, размер которого может быть указан в конфигурационном файле (параметр '''journal_length'''). По умолчанию он равен 86400 записей — по 1 записи на каждую секунду суток. Журнал может быть использован для отладки механизма отправки событий в цель. Содержимое журнала хранится в памяти. При достижении журналом максимального размера, самые старые записи заменяются новыми.&lt;br /&gt;
&lt;br /&gt;
Для настройки аутентификации работника можно использовать параметр '''headers''', который представляет собой список значений вида '''key:value'''. Данные пары будут добавлены в заголовки каждого http-запроса, выполняемого работником.&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация ===&lt;br /&gt;
&lt;br /&gt;
Возможный пример конфигурационного файла, в котором указана отправка на сервер test-host.local событий, связанных с разметкой маркера.&lt;br /&gt;
&lt;br /&gt;
 webhook:&lt;br /&gt;
  enabled: true&lt;br /&gt;
  journal_length: 86400&lt;br /&gt;
  targets:&lt;br /&gt;
   - url: &amp;quot;&amp;lt;nowiki&amp;gt;https://test-host.local:8080/webhook&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
     workers_count: 1&lt;br /&gt;
     enabled: true     &lt;br /&gt;
     filter: &amp;quot;Type == EventReviewMarker and Payload.Status != 'Undecided'&amp;quot;&lt;br /&gt;
     ca_certs: &amp;quot;/etc/ssl/certs/ca.crt&amp;quot;&lt;br /&gt;
     retry_count: 3&lt;br /&gt;
     timeout: 1000&lt;br /&gt;
     headers:&lt;br /&gt;
        - &amp;quot;password:12345&amp;quot;&lt;br /&gt;
        - &amp;quot;Authorization: Bearer eyJh .... &amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== CLI ===&lt;br /&gt;
&lt;br /&gt;
Для взаимодействия с механизмом webhook реализованы две cli команды:&lt;br /&gt;
&lt;br /&gt;
 svacer server webhook journal&lt;br /&gt;
 svacer server webhook stat&lt;br /&gt;
&lt;br /&gt;
Первая команда позволяет посмотреть записи журнала отправки событий. Вторая команда позволяет вывести статистику по работе службы (особенно интересными могут быть поля '''sendError''' и '''skip''').&lt;br /&gt;
&lt;br /&gt;
Пример вывода для первой команды (с флагом '''--humanize'''; если флага нет, то вывод будет в формате json):&lt;br /&gt;
&lt;br /&gt;
 ==================== #1 ======================&lt;br /&gt;
 Time: 2025-07-01 12:25:52.25343534 +0300 MSK&lt;br /&gt;
 Created by: admin&lt;br /&gt;
 Error: &lt;br /&gt;
 Success: true&lt;br /&gt;
 SvacerKind: UpdateMarkerReview&lt;br /&gt;
 EventType: EventReviewMarker&lt;br /&gt;
 TargetURL: &amp;lt;nowiki&amp;gt;https://swarm-mgr.home:8080/webhook&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 ProcessTime: 6 ms&lt;br /&gt;
 ==================== #2 ======================&lt;br /&gt;
 Time: 2025-07-01 12:25:54.202850322 +0300 MSK&lt;br /&gt;
 Created by: admin&lt;br /&gt;
 Error: &lt;br /&gt;
 Success: true&lt;br /&gt;
 SvacerKind: UpdateMarkerReview&lt;br /&gt;
 EventType: EventReviewMarker&lt;br /&gt;
 TargetURL: &amp;lt;nowiki&amp;gt;https://swarm-mgr.home:8080/webhook&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 ProcessTime: 3 ms&lt;br /&gt;
&lt;br /&gt;
Пример вывода команды статистики:&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
 &amp;quot;enabled&amp;quot;: true,&lt;br /&gt;
 &amp;quot;targets&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;enabled&amp;quot;: true,&lt;br /&gt;
   &amp;quot;url&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;https://swarm-mgr.home:8080/webhook&amp;lt;/nowiki&amp;gt;&amp;quot;,&lt;br /&gt;
   &amp;quot;filtered&amp;quot;: 0,&lt;br /&gt;
   &amp;quot;sendSuccess&amp;quot;: 3,&lt;br /&gt;
   &amp;quot;sentError&amp;quot;: 0,&lt;br /&gt;
   &amp;quot;submitted&amp;quot;: 3,&lt;br /&gt;
   &amp;quot;skip&amp;quot;: 0&lt;br /&gt;
  }&lt;br /&gt;
 ]&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== Модель поддерживаемых событий ====&lt;br /&gt;
 syntax = &amp;quot;proto3&amp;quot;;&lt;br /&gt;
 import &amp;quot;google/protobuf/any.proto&amp;quot;;&lt;br /&gt;
 option go_package=&amp;quot;svacer/proto/webhook&amp;quot;;&lt;br /&gt;
 package webhook;&lt;br /&gt;
 &lt;br /&gt;
 enum EventType {&lt;br /&gt;
     EventNone = 0;&lt;br /&gt;
     EventTest = 1;&lt;br /&gt;
     EventReviewMarker = 2;&lt;br /&gt;
     EventPurgeReview = 3;&lt;br /&gt;
     EventGroupReview = 4;&lt;br /&gt;
     EventImportSnapshot = 5;&lt;br /&gt;
     EventCopySnapshot = 6;&lt;br /&gt;
     EventNewComment = 7;&lt;br /&gt;
     EventUpdateComment = 8;&lt;br /&gt;
     EventNewContainer = 9;&lt;br /&gt;
     EventDeleteContainer = 10;&lt;br /&gt;
     EventUpdateContainer  =11;&lt;br /&gt;
     EventImportMarkup = 12;&lt;br /&gt;
     EventDeleteSnapshot = 13;&lt;br /&gt;
     UpdateSnapshot = 14;&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 message MarkerDetails {&lt;br /&gt;
     string id = 1;&lt;br /&gt;
     string file = 2;&lt;br /&gt;
     string line = 3;&lt;br /&gt;
     string lang = 4;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message Event {&lt;br /&gt;
     uint64 timestamp = 1;&lt;br /&gt;
     EventType type = 2;&lt;br /&gt;
     string created_by = 3;&lt;br /&gt;
     google.protobuf.Any payload = 4;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadMarkerReview {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string snapshot_id = 5;&lt;br /&gt;
     string snapshot_name = 6;&lt;br /&gt;
     repeated MarkerDetails markers = 7;&lt;br /&gt;
     string comment = 8;&lt;br /&gt;
     string severity = 9;&lt;br /&gt;
     string action = 10;&lt;br /&gt;
     string status = 11;&lt;br /&gt;
     bool group_review = 12;&lt;br /&gt;
     string created_by_id = 13;&lt;br /&gt;
     string created_by_login = 14;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadPurgeReview {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string created_by_id = 5;&lt;br /&gt;
     string created_by_login = 6;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadImportSnapshot {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string snapshot_id = 5;&lt;br /&gt;
     string snapshot_name = 6;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadMarkerComment {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string snapshot_id = 5;&lt;br /&gt;
     string snapshot_name = 6;&lt;br /&gt;
     MarkerDetails marker = 7;&lt;br /&gt;
     string comment = 8;&lt;br /&gt;
     string created_by_id = 9;&lt;br /&gt;
     string created_by_login = 10;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadCopySnapshot {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string snapshot_id = 5;&lt;br /&gt;
     string snapshot_name = 6;&lt;br /&gt;
     string created_by_id = 7;&lt;br /&gt;
     string created_by_login = 8;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message Container {    &lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     Container source = 5;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadNewContainer {&lt;br /&gt;
     repeated Container containers = 1;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadDeleteContainer {&lt;br /&gt;
     repeated Container projects = 1;&lt;br /&gt;
     repeated Container branches = 2;    &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadUpdateContainer {&lt;br /&gt;
     Container container = 1;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message CopyResult {&lt;br /&gt;
    uint64 total = 1;&lt;br /&gt;
 	uint64 applied_reviews = 2;&lt;br /&gt;
 	uint64 applied_comments = 3;&lt;br /&gt;
 	uint64 skipped_reviews = 4;&lt;br /&gt;
 	uint64 duplicate_reviews = 5;&lt;br /&gt;
 	uint64 duplicate_comments = 6;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadImportMarkup {&lt;br /&gt;
     Container source=1;&lt;br /&gt;
     Container target=2;&lt;br /&gt;
     CopyResult copy_result =3;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message Snapshot {    &lt;br /&gt;
     string snapshot_id = 1;&lt;br /&gt;
     string snapshot_name = 2;&lt;br /&gt;
     Container container = 3;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadDeleteSnapshots {&lt;br /&gt;
      repeated Snapshot snapshots = 1;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadUpdateSnapshot {&lt;br /&gt;
     string snapshot_id = 1;&lt;br /&gt;
     string snapshot_name = 2;&lt;br /&gt;
     Container container  = 3;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Выбор сетевых интерфейсов и портов сервера ==&lt;br /&gt;
* По умолчанию web-сервер запускается на всех сетевых интерфейсах, на порту 8080 ('''0.0.0.0:8080'''). Для указания конкретного сетевого интерфейса можно использовать опцию '''--listen &amp;lt;network interface&amp;gt;''', для указания другого порта: '''--port &amp;lt;port_number&amp;gt;.&lt;br /&gt;
* Аналогично для grpc-сервера: по умолчанию — '''0.0.0.0:3002''', для выбора конкретного интерфейса: '''--listen-grpc &amp;lt;network_interface&amp;gt;''', для указания другого порта: '''--grpc &amp;lt;port_number&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
 svacer-server run --listen 127.0.0.1 --port 9090 --listen-grpc 127.0.0.1 --grpc 3004&lt;br /&gt;
&lt;br /&gt;
При попытке запуска на порту &amp;lt; 1024 от непривилегированного пользователя (например, от пользователя svacer при установке из deb/rpm пакета), сервер Svacer не запустится с ошибкой &lt;br /&gt;
&lt;br /&gt;
 ERROR: port 443 is privileged, please check current user permissions or set another rest api port&lt;br /&gt;
&lt;br /&gt;
В таком случае надо выдать capabilities на открытие привилегированных портов файлу сервера Svacer. Это нужно будет делать при каждом обновлении версии сервера&lt;br /&gt;
&lt;br /&gt;
 sudo setcap 'cap_net_bind_service=+ep' /usr/bin/svacer-server&lt;br /&gt;
&lt;br /&gt;
== Увеличение лимита открытых файлов ==&lt;br /&gt;
Актуально только для Linux.&lt;br /&gt;
&lt;br /&gt;
Если проекты большие, или их много, в object store создается большое количество файлов. Для нормальной работы сервера Svacer при этом рекомендуется увеличивать системный лимит количества одновременно открытых файлов. &lt;br /&gt;
&lt;br /&gt;
В POSIX таких лимита два:&lt;br /&gt;
* soft nofiles — текущее максимальное значение&lt;br /&gt;
* hard nofiles — общесистемное максимальное значение&lt;br /&gt;
&lt;br /&gt;
В большинстве систем hard значение достаточно большое, а soft обычно маленькое, что и приводит к проблемам. Пример на Debian 11:&lt;br /&gt;
&lt;br /&gt;
  $ ulimit -Sn&lt;br /&gt;
  1024&lt;br /&gt;
  $ ulimit -Hn&lt;br /&gt;
  1048576&lt;br /&gt;
&lt;br /&gt;
Начиная с версии 6-0-0 Svacer пытается автоматически увеличить soft limit до значения hard limit при запуске, а начиная с версии 8-0-0 — проверяет, что увеличить удалось и выводит сообщение с текущим лимитом. Если видите в логах подобную запись — у soft и hard одно, достаточно большое значение — значит все в порядке.&lt;br /&gt;
&lt;br /&gt;
  Open files limit (soft and hard): 1048576&lt;br /&gt;
&lt;br /&gt;
Для более ранних версий, или если на вашем дистрибутиве Linux это не работает автоматически, можете увеличить лимит вручную одним из следующих способов:&lt;br /&gt;
&lt;br /&gt;
* Перед запуском Svacer выполнить из консоли команду, увеличив лимит для текущей сессии&lt;br /&gt;
  ulimit -Sn 16384&lt;br /&gt;
&lt;br /&gt;
* Либо один раз увеличить на уровне системы — в файл '''/etc/security/limits.conf''' добавить&lt;br /&gt;
&lt;br /&gt;
  * soft nofile 16384&lt;br /&gt;
&lt;br /&gt;
* Если запускаете Svacer как сервис systemd, добавьте параметр '''LimitNOFILE''' в секцию '''[Service]''' файла описания сервиса.&lt;br /&gt;
:В файле из deb/rpm пакета релиза Svacer этот параметр уже добавлен&lt;br /&gt;
&lt;br /&gt;
  [Service]&lt;br /&gt;
  LimitNOFILE=16384&lt;br /&gt;
&lt;br /&gt;
После чего выполните следующие команды, чтобы прочитать обновленный конфиг и перезапустить с ним Svacer&lt;br /&gt;
&lt;br /&gt;
  sudo systemctl daemon-reload&lt;br /&gt;
  sudo systemctl restart svacer.service&lt;br /&gt;
&lt;br /&gt;
== Установка пути к директории для кэша ==&lt;br /&gt;
Если запускаете Svacer под пользователем без домашней директории, рекомендуется установить путь к директории для кэша через переменную окружения SVACER_CACHE_DIR в файле описания сервиса systemd&lt;br /&gt;
&lt;br /&gt;
  [Service]&lt;br /&gt;
  Environment=&amp;quot;SVACER_CACHE_DIR=/path/to/some/dir&amp;quot;&lt;br /&gt;
&lt;br /&gt;
После чего выполните следующие команды, чтобы прочитать обновленный конфиг и перезапустить с ним Svacer&lt;br /&gt;
&lt;br /&gt;
  sudo systemctl daemon-reload&lt;br /&gt;
  sudo systemctl restart svacer.service&lt;br /&gt;
&lt;br /&gt;
== Дополнительные параметры при запуске в docker ==&lt;br /&gt;
При запуске в докер-контейнере можно указать дополнительные параметры, к примеру добавить конфиг [[Help:CLI#Хуки|хуков]].&lt;br /&gt;
&lt;br /&gt;
Для этого переопределите команду запуска сервера Svacer в docker-compose файле и допишите туда нужные параметры:&lt;br /&gt;
&lt;br /&gt;
 command: /svacer/bin/svacer-server run --store /data/store --pg postgres://svace:svace@postgresql:5432/svace --hooks /svacer/hooks.json&lt;br /&gt;
&lt;br /&gt;
Конфигурационный файл с описанием хуков примонтируйте как volume:&lt;br /&gt;
&lt;br /&gt;
 volumes:&lt;br /&gt;
   - ./hooks.json:/svacer/hooks.json&lt;br /&gt;
&lt;br /&gt;
Можете использовать переменные из секции environment docker-compose файла, тогда в строке запуска их надо экранировать с помощью &amp;lt;code&amp;gt;$$&amp;lt;/code&amp;gt; и запускать сервер Svacer как shell-команду, чтобы в контейнере подставились значения переменных&lt;br /&gt;
&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;
   - HOOKS_FILE=/svacer/hooks.json&lt;br /&gt;
 volumes:&lt;br /&gt;
   - ./hooks.json:/svacer/hooks.json&lt;br /&gt;
 command: sh -c &amp;quot;/svacer/bin/svacer-server run --store $$STORE --pg $$SVACER_PG_URL --hooks $$HOOKS_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Для более комплексных сценариев можете собрать свой образ с сервером Svacer, использовав наш [[Dockerfile]] как референс.&lt;br /&gt;
&lt;br /&gt;
== Обновление детекторов ==&lt;br /&gt;
После установки новой версии Svace требуется обновить описания детекторов в Svacer. Для этого необходимо выполнить команду:&lt;br /&gt;
&lt;br /&gt;
  svacer checkers --upload &amp;lt;/path/to/svace&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note}} Обновление описаний детекторов это серьезная операция, которая должна выполняться после предварительного тестирования. Поэтому перед выполнением команды рекомендуется сделать резервную копию базы данных Svacer.&lt;br /&gt;
&lt;br /&gt;
== Генерация PDF на основе HTML ==&lt;br /&gt;
В релиз 10.х.х включена генерация PDF на основе рендеринга HTML с последующим запуском headless chrome/chromium для генерации PDF. Этот подход позволяет упростить формирование шаблонов для генерации PDF, но требует существенно больше вычислительных ресурсов. Для тюнинга числа параллельных процессов при генерации используется переменная окружения&lt;br /&gt;
&lt;br /&gt;
 SVACER_PDF_GEN_LIMITS=&amp;lt;pdf tool limit&amp;gt;:&amp;lt;chrome limit&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первое значение &amp;lt;code&amp;gt;&amp;lt;pdf tool limit&amp;gt;&amp;lt;/code&amp;gt; определяет число одновременных процессов pdfmerge для сборки отдельных секций в единый PDF документ; второе значение &amp;lt;code&amp;gt;&amp;lt;chrome limit&amp;gt;&amp;lt;/code&amp;gt; определяет одновременное число процессов chrome/chromium для генерации PDF из HTML. Не рекомендуется ставить значения, сильно превышающие число ядер в сервере.&lt;br /&gt;
&lt;br /&gt;
== Полнотекстовый поиск ==&lt;br /&gt;
Для поддержки полнотекстового поиска Svacer строит индекс. По умолчанию директория для индекса создается в &amp;lt;code&amp;gt;$HOME/.cache/svacer&amp;lt;/code&amp;gt;, для указания иной директории можно использовать переменную окружения &amp;lt;code&amp;gt;SVACER_SEARCH_INDEX_DIR&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В ряде случаев (падение и рестарт сервера, ошибки и т. п.) кэш может быть в некорректном состоянии. Для переиндексации данных администратор может использовать CLI команду&lt;br /&gt;
&lt;br /&gt;
 svacer search --host &amp;lt;nowiki&amp;gt;http://some_host:port&amp;lt;/nowiki&amp;gt; --user &amp;lt;login&amp;gt; --password &amp;lt;pwd&amp;gt; --drop-cache&lt;br /&gt;
&lt;br /&gt;
Используемая при этом учетная запись должна быть с правами на &amp;lt;code&amp;gt;Server administration&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При импорте результатов на сервер индексация идет в фоновой задаче, поэтому появление новых данных в результатах поиска может занять некоторое время.&lt;br /&gt;
&lt;br /&gt;
== Указание public-url ==&lt;br /&gt;
В некоторых случаях необходимо явно указывать серверу Svacer его URL-адрес. Например, это нужно для корректной генерации коротких ссылок на предупреждения и ссылок в [[Notifications|уведомлениях]]. Используйте параметр &amp;lt;code&amp;gt;--public-url&amp;lt;/code&amp;gt; при запуске сервера&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;svacer-server run --public-url http://svacer.intra.net:8080&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&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;
|SVACER_TIMEOUT_IMPORT_RESULTS&lt;br /&gt;
|15 минут&lt;br /&gt;
|Таймаут ожидания процесса начала импорта на сервере. При превышении запрос на импорт будет отклонен с ошибкой. Формат — Go Duration string: 1h2m3s. Переменная затрагивает только ожидание начала, но не ограничивает сам процесс импорта&lt;br /&gt;
|-&lt;br /&gt;
|SVACER_NUM_PARALLEL_IMPORTS&lt;br /&gt;
|(максимальное число коннектов к БД) / 2&lt;br /&gt;
|Число одновременных параллельных импортов. Остальные ждут в очереди. На ожидание влияет переменная SVACER_TIMEOUT_IMPORT_RESULTS&lt;br /&gt;
|-&lt;br /&gt;
|SVACER_TAIL_LOG_SIZE&lt;br /&gt;
|1Мб&lt;br /&gt;
|Число. Размер буфера для показа лога сервера в WebUI. Показывается последние SVACER_TAIL_LOG_SIZE байт из лога. &lt;br /&gt;
|-&lt;br /&gt;
|SVACER_LOG_FORMAT&lt;br /&gt;
|&amp;lt;пусто&amp;gt;&lt;br /&gt;
|При указании 'json' формат вывода лога заменяется на JSON. Предназначено для интеграции с агрегаторами логов. Также можно указать через флаг при старте: &amp;lt;code&amp;gt;svacer-server --log-format=json&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|SVACER_INV_GEN_JOBS&lt;br /&gt;
|0.7 * runtime.GOMAXPROCS&lt;br /&gt;
|Максимальное число параллельных заданий для генерации инвариантов при миграции старой базы или импорте результатов. При ограниченных ресурсах сервера используйте значение 1 или 2. Нельзя установить значение больше, чем GOMAXPROCS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Пересчет инвариантов ===&lt;br /&gt;
При миграции со старых версий иногда могут быть проблемы с переносом разметки. Для принудительного пересчета инвариантов запустите сервер с опцией &amp;lt;code&amp;gt;--force-invariant-refresh&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
=== Объектное хранилище ===&lt;br /&gt;
При больших размерах объектного хранилища (object store) можно запустить сервер с параметром &amp;lt;code&amp;gt;--compact-object-store&amp;lt;/code&amp;gt; — это приведет к поиску недостижимых объектов в хранилище и сокращению размера базы. Операция может занять продолжительное время.&lt;br /&gt;
&lt;br /&gt;
'''ЭКСПЕРИМЕНТАЛЬНО''': Для быстрого получения копии текущего объектного хранилища пользователь может использовать CLI команду &lt;br /&gt;
&lt;br /&gt;
 svacer server backup --host &amp;lt;nowiki&amp;gt;http://localhost:8080&amp;lt;/nowiki&amp;gt; --user admin --password &amp;lt;admin pwd&amp;gt; --checkpoint &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная команда создаст по пути &amp;lt;path&amp;gt; на '''хосте, где работает сервер''',  копию object store. При создании копии по возможности используются hard links, для ускорения процесса. Процесс работает в фоновом режиме, можно запускать его для работающего сервера.&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:Configuration&amp;diff=3406</id>
		<title>Help:Configuration</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:Configuration&amp;diff=3406"/>
		<updated>2025-11-28T09:17:31Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: add header&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Настройка сервера Svacer == &lt;br /&gt;
&lt;br /&gt;
=== Настройки аутентификации в Svacer ===&lt;br /&gt;
В Svacer возможны четыре способа аутентификации пользователей&lt;br /&gt;
&lt;br /&gt;
# Встроенный&lt;br /&gt;
# С помощью LDAP сервера&lt;br /&gt;
# Через утилиту oauth_proxy (по протоколу OIDC)&lt;br /&gt;
# Посредством Personal Access Token (PAT)&lt;br /&gt;
&lt;br /&gt;
Ниже рассматривается настройка аутентификации посредством внутреннего механизма аутентификации. Для настройки [[LDAP]], [[Help:CLI#Personal Access Token|PAT]] или [[OIDC]] аутентификации см. соответствующие разделы документации.&lt;br /&gt;
&lt;br /&gt;
==== Настройка внутреннего механизма аутентификации Svacer ====&lt;br /&gt;
&lt;br /&gt;
===== Настройка парольной политики внутреннего механизма аутентификации Svacer =====&lt;br /&gt;
Настройки параметров встроенного механизма аутентификации возможны посредством секции '''auth.svacer''' конфигурационного файла Svacer. Ниже приведен пример настроек:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;auth:&lt;br /&gt;
  svacer:&lt;br /&gt;
    password:&lt;br /&gt;
       min_length: 10&lt;br /&gt;
       complexity:&lt;br /&gt;
        - &amp;amp;quot;[a-z]&amp;amp;quot;&lt;br /&gt;
        - &amp;amp;quot;[A-Z]&amp;amp;quot;&lt;br /&gt;
        - &amp;amp;quot;[0-9]&amp;amp;quot;&lt;br /&gt;
        - &amp;amp;quot;[!#]&amp;amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Параметр '''min_length''' задает минимальную возможную длину пароля в системе. Данный критерий используется при смене пароля пользователя и не влияет на текущие пароли пользователей.&lt;br /&gt;
&lt;br /&gt;
Параметр '''complexity''' содержит набор регулярных выражений, задающих требования к паролю с точки зрения наличия в нем определенных символов. При задании такого списка выражений Svacer будет проверять задаваемый пользователем новый пароль на предмет удовлетворения всем этим требованиям. Каждое выражение в списке — полноценное выражение, поддерживаемое языком golang.&lt;br /&gt;
&lt;br /&gt;
Указанные выше настройки применяются только к внутренним учетным записям пользователей Svacer. По умолчанию данные настройки отключены (нет требований на минимальную длину и сложность пароля).&lt;br /&gt;
&lt;br /&gt;
===== Задание вкладки по умолчанию на странице входа в GUI Svacer (а также отключение внутренного механизма аутентификации Svacer) =====&lt;br /&gt;
В случае интеграции Svacer с LDAP, можно указать Svacer какую вкладку — Svacer или LDAP — использовать по умолчанию. Для этого используется параметр '''auth.svacer.default'''. Если данный параметр установлен в значение '''true''', то вкладкой по умолчанию будет вкладка Svacer, иначе — вкладка LDAP.&lt;br /&gt;
&lt;br /&gt;
Также возможно полностью отключить механизм внутренней аутентификации Svacer с помощью параметра '''auth.svacer.enabled'''.&lt;br /&gt;
&lt;br /&gt;
Ниже приведен пример конфигурационного файла Svacer для задания вкладки LDAP по умолчанию (в случае наличие интеграции с LDAP сервером)&amp;lt;pre class=&amp;quot;plaintext&amp;quot;&amp;gt;auth:&lt;br /&gt;
  svacer:&lt;br /&gt;
    enabled: true&lt;br /&gt;
    default: false&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Настройка защиты от перебора паролей пользователей ====&lt;br /&gt;
Для случаев аутентификации с помощью LDAP сервера и с помощью встроенного механизма аутентификации реализован механизм блокировки учетных записей пользователей в том случае, если количество неудачных попыток входа превышает заданное в настройках число. По умолчанию защита отключена. Ниже приведен пример секции конфигурационного файла Svacer, задающего правила блокировки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;plaintext&amp;quot;&amp;gt;security:&lt;br /&gt;
  login:&lt;br /&gt;
    max_attempts: 5&lt;br /&gt;
    lock_time: 2m&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Время, на которое происходит блокировка учетной записи пользователя, указывается в формате golang/time: 1s,1m,60m и т. д.&lt;br /&gt;
&lt;br /&gt;
В случае активации защиты данный механизм также защищает аутентификацию посредством вызовов соответствующих точек входа public API.&lt;br /&gt;
&lt;br /&gt;
Блокировка не влияет на работу уже зарегистрированных пользователей.&lt;br /&gt;
&lt;br /&gt;
Для принудительной разблокировки пользователей можно использовать команды cli (требуются права управления сервером):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;svacer user-provider unlock --user admin --password admin --login locked_user&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка TLS ===&lt;br /&gt;
Svacer может быть сконфигурирован для поддержки TLS несколькими способами. Первый способ — использовать reverse proxy с поддержкой HTTPS и проксированием в Svacer по HTTP, второй — запуск Svacer с нативной поддержкой TLS.&lt;br /&gt;
&lt;br /&gt;
==== Reverse proxy ====&lt;br /&gt;
Данный способ позволяет обеспечить безопасную передачу данных только по протоколу HTTPS, данные по протоколу gRPC передаются в незащищенном виде.&lt;br /&gt;
&lt;br /&gt;
===== Nginx =====&lt;br /&gt;
Создайте конфигурационный файл с подобным содержанием в '''/etc/nginx/sites-enabled/''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen 443 ssl;&lt;br /&gt;
    listen [::]:443 ssl;&lt;br /&gt;
&lt;br /&gt;
    server_name svacer.ispras.ru;&lt;br /&gt;
&lt;br /&gt;
    # for large data transfers and continuous connections&lt;br /&gt;
    client_max_body_size        0;&lt;br /&gt;
    proxy_connect_timeout       600;&lt;br /&gt;
    proxy_send_timeout          600;&lt;br /&gt;
    proxy_read_timeout          600;&lt;br /&gt;
    send_timeout                600;&lt;br /&gt;
&lt;br /&gt;
    # path to ssl-certificate and key&lt;br /&gt;
    ssl_certificate /etc/ssl/certs/svacer.ispras.ru.crt;&lt;br /&gt;
    ssl_certificate_key /etc/ssl/private/svacer.ispras.ru.key;&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        include proxy_params;&lt;br /&gt;
&lt;br /&gt;
        # to make WebSockets work&lt;br /&gt;
        proxy_http_version  1.1;&lt;br /&gt;
        proxy_set_header    Upgrade $http_upgrade;&lt;br /&gt;
        proxy_set_header    Connection &amp;quot;upgrade&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        # svacer HTTP URL&lt;br /&gt;
        proxy_pass http://127.0.0.1:8080;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# proxy gRPC port if required&lt;br /&gt;
server {&lt;br /&gt;
    listen 13002 http2;&lt;br /&gt;
    underscores_in_headers on;&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        grpc_pass grpc://127.0.0.1:3002;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В этом конфигурационном файле укажите нужное имя сервера, пути к сертификату (можно использовать fullchain-сертификат) и ключу, а также адрес сервера Svacer, куда проксировать. После этого перезапустите Nginx.&lt;br /&gt;
  systemctl restart nginx&lt;br /&gt;
&lt;br /&gt;
Если ваш сервер виден из интернета и его внешний IP-адрес привязан к доменному имени, можете использовать Let's Encrypt и Certbot для получения валидного SSL-сертификата. См. [https://www.nginx.com/blog/using-free-ssltls-certificates-from-lets-encrypt-with-nginx/ эту инструкцию].&lt;br /&gt;
&lt;br /&gt;
===== Apache =====&lt;br /&gt;
Включите нужные модули в Apache&lt;br /&gt;
  sudo a2enmod ssl proxy proxy_http rewrite&lt;br /&gt;
&lt;br /&gt;
Создайте конфигурационный файл с подобным содержанием в '''/etc/apache2/sites-enabled/'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
    SSLEngine On&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyTimeout 600&lt;br /&gt;
    &lt;br /&gt;
    # path to ssl-certificate and key&lt;br /&gt;
    SSLCertificateFile /etc/ssl/certs/svacer.ispras.ru.crt&lt;br /&gt;
    SSLCertificateKeyFile /etc/ssl/private/svacer.ispras.ru.key&lt;br /&gt;
    &lt;br /&gt;
    # svacer HTTP URL&lt;br /&gt;
    ProxyPass / http://127.0.0.1:8080/&lt;br /&gt;
    ProxyPassReverse / http://127.0.0.1:8080/&lt;br /&gt;
&lt;br /&gt;
    # to make WebSockets work&lt;br /&gt;
    ProxyPass /api/ws/ ws://127.0.0.1:8080/api/ws/&lt;br /&gt;
    ProxyPassReverse /api/ws/ ws://127.0.0.1:8080/api/ws/&lt;br /&gt;
    RewriteEngine on&lt;br /&gt;
    RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]&lt;br /&gt;
    RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]&lt;br /&gt;
    RewriteRule /api/ws/(.*) ws://127.0.0.1:8080%{REQUEST_URI} [P]&lt;br /&gt;
&lt;br /&gt;
    ServerName svacer.ispras.ru&lt;br /&gt;
    ServerAdmin svacer@ispras.ru&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В этом конфигурационном файле укажите нужное имя сервера, пути к сертификату (можно использовать fullchain-сертификат) и ключу, а также адрес сервера Svacer, куда проксировать. После этого перезапустите Apache.&lt;br /&gt;
  systemctl restart apache2&lt;br /&gt;
&lt;br /&gt;
==== Нативно ====&lt;br /&gt;
Этот способ позволяет обеспечить безопасную передачу данных как по протоколу HTTPS, так и по протоколу gRPC. Если сервер запускается с поддержкой TLS, то эта опция относится как к протоколу HTTPS, так и к протоколу gRPC.&lt;br /&gt;
По умолчанию сервер запускается без поддержки TLS, при этом в логах отображается информация об этом.&lt;br /&gt;
 TLS for REST and gRPC DISABLED&lt;br /&gt;
&lt;br /&gt;
Для запуска сервера с поддержкой TLS необходимо указать сертификат сервера и соответствующий закрытый ключ.&lt;br /&gt;
 svacer-server run --ssl-cert svacer.crt --ssl-key svacer.key&lt;br /&gt;
&lt;br /&gt;
При этом ключ должен быть в незашифрованном виде. Права доступа к файлу должны быть 0600. В файле сертификата можно указывать цепочку сертификатов. В этом случае сервер, при подключении клиента, будет возвращать всю цепочку. Первым сертификатом в цепочке всегда должен идти сертификат сервера Svacer. Формат файла — PEM. TLS соединение активируется и для протокола REST и для протокола gRPC. &lt;br /&gt;
&lt;br /&gt;
Работа сервера по проктолу TLS сопровождается следующей записью в логе:&lt;br /&gt;
 Using TLS for REST and gRPC protocols&lt;br /&gt;
&lt;br /&gt;
Работа с таким сервером через CLI происходит как обычно. Для указания необходимости подключаться по TLS можно явно указать протокол в параметре '''--host''', либо добавить опцию '''--ssl'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 svacer upload --host https://example.com&lt;br /&gt;
 svacer upload --ssl --host example.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Также в клиенте можно определить параметр '''--ssl-ca-certs'''. Он позволяет задать доверенные сертификаты корневых центров. Указывается шаблон файлов (с *) или конкретный файл. Путь к директории должен быть абсолютным. В случае отсутствия этого параметра используется TLS, но сертификат сервера не проверяется. Этому случаю соответствует запись в логе клиента:&lt;br /&gt;
 Using weak TLS configuration, because no CA certificate found&lt;br /&gt;
&lt;br /&gt;
Если сертификаты были загружены, в логе будет строчка:&lt;br /&gt;
 added 1 ca certs from /home/user/svacer/svacer.crt&lt;br /&gt;
&lt;br /&gt;
Для администрирования сервера в плане используемого сертификата (например, замена при истечении срока действия) добавлена область в CLI svacer admin: '''server:config'''. В данной области есть 3 команды: '''show''', '''reload''', '''update'''. ID в этом случае нужно всегда указывать в значение '''ssl.cert'''.&lt;br /&gt;
 &lt;br /&gt;
* '''show''' — отображает текущий используемый сертификат&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;pre&amp;gt;svacer admin --ssl --host example.com --user admin --password admin --scope server:config --id ssl.cert --action show&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''reload''' — заставляет сервер перечитать использованные при старте сервера файлы с сертификатом и ключом&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;pre&amp;gt;svacer admin --ssl --host example.com --user admin --password admin --scope server:config --id ssl.cert --action reload&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''update''' — позволяет переслать на сервер новый сертификат (и ключ, если надо) и записать их в указанные при старте сервера файлы. При использовании этой команды нужно сформировать файл с новым сертификатом и, при необходимости, ключом, в формате PEM (используете '''cat''' для объединения сертификата и ключа в один файл) и указать этот файл в параметре value. Если в файле не будет указан закрытый ключ, то сервером будет использован текущий (тот, что был указан при запуске). Данная команда также изменит файлы сертификата и ключа (если он указан), указанные при старте сервера, на новые значения.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;pre&amp;gt;svacer admin --ssl --host example.com --user admin --password admin --scope server:config --id ssl.cert --action update --value svacer.pem&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Некоторое время после обновления сертификата сервер может использовать старые сертификаты (для уже установленных соединений). Для новых соединений будет использован обновленный сертификат.&lt;br /&gt;
&lt;br /&gt;
В конфигурационном файле Svacer можно указать минимальную и максимальные версии TLS, поддерживаемые сервером. Для этого необходимо в конфигурационном файле указать параметры &amp;lt;code&amp;gt;minVersion&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;maxVersion&amp;lt;/code&amp;gt; в разделе security.tls. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
security:&lt;br /&gt;
  tls:&lt;br /&gt;
    minVersion: tls11&lt;br /&gt;
    maxVersion: tls12&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Интеграция с хранилищем секретов Infisical ===&lt;br /&gt;
В Svacer реализована поддержка получения секретов из хранилища секретов [https://infisical.com/ Infisical]. Подробную информацию об интеграции см. в статье [[Infisical|Интеграция с хранилищем секретов Infisical]].&lt;br /&gt;
&lt;br /&gt;
=== Механизм интеграции с внешними системами посредством Webhook-ов ===&lt;br /&gt;
&lt;br /&gt;
==== Общий принцип работы ====&lt;br /&gt;
&lt;br /&gt;
Механизм webhook-ов настраивается в конфигурационном файле в секции '''webhook'''. Механизм срабатывает при получении по внутренней шине одного из поддерживаемых событий Svacer. Каждое из внутренних событий преобразуется в событие вызова webhook-а (см. [[Help:Configuration#Модель поддерживаемых событий|Модель поддерживаемых событий]]) и отправляется на обработку в каждую из настроенных целей, которыми являются http-обработчики. Отправкой занимаются работники (их количество настраивается в конфигурационном файле в параметре '''workers_count'''). У каждой цели есть общая очередь, размер которой составляет 500 событий. Если очередь переполняется, будет выдаваться соответствующее сообщение в лог-файле Svacer.&lt;br /&gt;
&lt;br /&gt;
Работники поддерживают протокол https (в том числе самоподписанные сертификаты). Для указания корневого сертификата можно использовать параметр '''ca_certs''' конфигурационного файла. Работникам можно указать таймаут соединения с webhook-сервером (в мс, по умолчанию 1000мс, параметр '''timeout''') и количество попыток отправки (по умолчанию — одна попытка, параметр '''retry_count''').&lt;br /&gt;
&lt;br /&gt;
В настройках можно указать фильтр на отправляемые события (параметр '''filter'''). Фильтр указывается посредством задания выражения. В выражениях используется [https://github.com/expr-lang/expr синтаксис go-expr]. Фильтр возможно указать в количестве одной штуки на одну цель. Если фильтр после вычисления дает значение true, событие будет отправлено в цель.&lt;br /&gt;
&lt;br /&gt;
Также реализован журнал событий отправки webhook-ов, размер которого может быть указан в конфигурационном файле (параметр '''journal_length'''). По умолчанию он равен 86400 записей — по 1 записи на каждую секунду суток. Журнал может быть использован для отладки механизма отправки событий в цель. Содержимое журнала хранится в памяти. При достижении журналом максимального размера, самые старые записи заменяются новыми.&lt;br /&gt;
&lt;br /&gt;
Для настройки аутентификации работника можно использовать параметр '''headers''', который представляет собой список значений вида '''key:value'''. Данные пары будут добавлены в заголовки каждого http-запроса, выполняемого работником.&lt;br /&gt;
&lt;br /&gt;
==== Конфигурация ====&lt;br /&gt;
&lt;br /&gt;
Возможный пример конфигурационного файла, в котором указана отправка на сервер test-host.local событий, связанных с разметкой маркера.&lt;br /&gt;
&lt;br /&gt;
 webhook:&lt;br /&gt;
  enabled: true&lt;br /&gt;
  journal_length: 86400&lt;br /&gt;
  targets:&lt;br /&gt;
   - url: &amp;quot;&amp;lt;nowiki&amp;gt;https://test-host.local:8080/webhook&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
     workers_count: 1&lt;br /&gt;
     enabled: true     &lt;br /&gt;
     filter: &amp;quot;Type == EventReviewMarker and Payload.Status != 'Undecided'&amp;quot;&lt;br /&gt;
     ca_certs: &amp;quot;/etc/ssl/certs/ca.crt&amp;quot;&lt;br /&gt;
     retry_count: 3&lt;br /&gt;
     timeout: 1000&lt;br /&gt;
     headers:&lt;br /&gt;
        - &amp;quot;password:12345&amp;quot;&lt;br /&gt;
        - &amp;quot;Authorization: Bearer eyJh .... &amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== CLI ====&lt;br /&gt;
&lt;br /&gt;
Для взаимодействия с механизмом webhook реализованы две cli команды:&lt;br /&gt;
&lt;br /&gt;
 svacer server webhook journal&lt;br /&gt;
 svacer server webhook stat&lt;br /&gt;
&lt;br /&gt;
Первая команда позволяет посмотреть записи журнала отправки событий. Вторая команда позволяет вывести статистику по работе службы (особенно интересными могут быть поля '''sendError''' и '''skip''').&lt;br /&gt;
&lt;br /&gt;
Пример вывода для первой команды (с флагом '''--humanize'''; если флага нет, то вывод будет в формате json):&lt;br /&gt;
&lt;br /&gt;
 ==================== #1 ======================&lt;br /&gt;
 Time: 2025-07-01 12:25:52.25343534 +0300 MSK&lt;br /&gt;
 Created by: admin&lt;br /&gt;
 Error: &lt;br /&gt;
 Success: true&lt;br /&gt;
 SvacerKind: UpdateMarkerReview&lt;br /&gt;
 EventType: EventReviewMarker&lt;br /&gt;
 TargetURL: &amp;lt;nowiki&amp;gt;https://swarm-mgr.home:8080/webhook&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 ProcessTime: 6 ms&lt;br /&gt;
 ==================== #2 ======================&lt;br /&gt;
 Time: 2025-07-01 12:25:54.202850322 +0300 MSK&lt;br /&gt;
 Created by: admin&lt;br /&gt;
 Error: &lt;br /&gt;
 Success: true&lt;br /&gt;
 SvacerKind: UpdateMarkerReview&lt;br /&gt;
 EventType: EventReviewMarker&lt;br /&gt;
 TargetURL: &amp;lt;nowiki&amp;gt;https://swarm-mgr.home:8080/webhook&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 ProcessTime: 3 ms&lt;br /&gt;
&lt;br /&gt;
Пример вывода команды статистики:&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
 &amp;quot;enabled&amp;quot;: true,&lt;br /&gt;
 &amp;quot;targets&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;enabled&amp;quot;: true,&lt;br /&gt;
   &amp;quot;url&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;https://swarm-mgr.home:8080/webhook&amp;lt;/nowiki&amp;gt;&amp;quot;,&lt;br /&gt;
   &amp;quot;filtered&amp;quot;: 0,&lt;br /&gt;
   &amp;quot;sendSuccess&amp;quot;: 3,&lt;br /&gt;
   &amp;quot;sentError&amp;quot;: 0,&lt;br /&gt;
   &amp;quot;submitted&amp;quot;: 3,&lt;br /&gt;
   &amp;quot;skip&amp;quot;: 0&lt;br /&gt;
  }&lt;br /&gt;
 ]&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== Модель поддерживаемых событий ====&lt;br /&gt;
 syntax = &amp;quot;proto3&amp;quot;;&lt;br /&gt;
 import &amp;quot;google/protobuf/any.proto&amp;quot;;&lt;br /&gt;
 option go_package=&amp;quot;svacer/proto/webhook&amp;quot;;&lt;br /&gt;
 package webhook;&lt;br /&gt;
 &lt;br /&gt;
 enum EventType {&lt;br /&gt;
     EventNone = 0;&lt;br /&gt;
     EventTest = 1;&lt;br /&gt;
     EventReviewMarker = 2;&lt;br /&gt;
     EventPurgeReview = 3;&lt;br /&gt;
     EventGroupReview = 4;&lt;br /&gt;
     EventImportSnapshot = 5;&lt;br /&gt;
     EventCopySnapshot = 6;&lt;br /&gt;
     EventNewComment = 7;&lt;br /&gt;
     EventUpdateComment = 8;&lt;br /&gt;
     EventNewContainer = 9;&lt;br /&gt;
     EventDeleteContainer = 10;&lt;br /&gt;
     EventUpdateContainer  =11;&lt;br /&gt;
     EventImportMarkup = 12;&lt;br /&gt;
     EventDeleteSnapshot = 13;&lt;br /&gt;
     UpdateSnapshot = 14;&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 message MarkerDetails {&lt;br /&gt;
     string id = 1;&lt;br /&gt;
     string file = 2;&lt;br /&gt;
     string line = 3;&lt;br /&gt;
     string lang = 4;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message Event {&lt;br /&gt;
     uint64 timestamp = 1;&lt;br /&gt;
     EventType type = 2;&lt;br /&gt;
     string created_by = 3;&lt;br /&gt;
     google.protobuf.Any payload = 4;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadMarkerReview {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string snapshot_id = 5;&lt;br /&gt;
     string snapshot_name = 6;&lt;br /&gt;
     repeated MarkerDetails markers = 7;&lt;br /&gt;
     string comment = 8;&lt;br /&gt;
     string severity = 9;&lt;br /&gt;
     string action = 10;&lt;br /&gt;
     string status = 11;&lt;br /&gt;
     bool group_review = 12;&lt;br /&gt;
     string created_by_id = 13;&lt;br /&gt;
     string created_by_login = 14;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadPurgeReview {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string created_by_id = 5;&lt;br /&gt;
     string created_by_login = 6;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadImportSnapshot {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string snapshot_id = 5;&lt;br /&gt;
     string snapshot_name = 6;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadMarkerComment {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string snapshot_id = 5;&lt;br /&gt;
     string snapshot_name = 6;&lt;br /&gt;
     MarkerDetails marker = 7;&lt;br /&gt;
     string comment = 8;&lt;br /&gt;
     string created_by_id = 9;&lt;br /&gt;
     string created_by_login = 10;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadCopySnapshot {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string snapshot_id = 5;&lt;br /&gt;
     string snapshot_name = 6;&lt;br /&gt;
     string created_by_id = 7;&lt;br /&gt;
     string created_by_login = 8;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message Container {    &lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     Container source = 5;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadNewContainer {&lt;br /&gt;
     repeated Container containers = 1;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadDeleteContainer {&lt;br /&gt;
     repeated Container projects = 1;&lt;br /&gt;
     repeated Container branches = 2;    &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadUpdateContainer {&lt;br /&gt;
     Container container = 1;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message CopyResult {&lt;br /&gt;
    uint64 total = 1;&lt;br /&gt;
 	uint64 applied_reviews = 2;&lt;br /&gt;
 	uint64 applied_comments = 3;&lt;br /&gt;
 	uint64 skipped_reviews = 4;&lt;br /&gt;
 	uint64 duplicate_reviews = 5;&lt;br /&gt;
 	uint64 duplicate_comments = 6;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadImportMarkup {&lt;br /&gt;
     Container source=1;&lt;br /&gt;
     Container target=2;&lt;br /&gt;
     CopyResult copy_result =3;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message Snapshot {    &lt;br /&gt;
     string snapshot_id = 1;&lt;br /&gt;
     string snapshot_name = 2;&lt;br /&gt;
     Container container = 3;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadDeleteSnapshots {&lt;br /&gt;
      repeated Snapshot snapshots = 1;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadUpdateSnapshot {&lt;br /&gt;
     string snapshot_id = 1;&lt;br /&gt;
     string snapshot_name = 2;&lt;br /&gt;
     Container container  = 3;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Выбор сетевых интерфейсов и портов сервера ===&lt;br /&gt;
* По умолчанию web-сервер запускается на всех сетевых интерфейсах, на порту 8080 ('''0.0.0.0:8080'''). Для указания конкретного сетевого интерфейса можно использовать опцию '''--listen &amp;lt;network interface&amp;gt;''', для указания другого порта: '''--port &amp;lt;port_number&amp;gt;.&lt;br /&gt;
* Аналогично для grpc-сервера: по умолчанию — '''0.0.0.0:3002''', для выбора конкретного интерфейса: '''--listen-grpc &amp;lt;network_interface&amp;gt;''', для указания другого порта: '''--grpc &amp;lt;port_number&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
 svacer-server run --listen 127.0.0.1 --port 9090 --listen-grpc 127.0.0.1 --grpc 3004&lt;br /&gt;
&lt;br /&gt;
При попытке запуска на порту &amp;lt; 1024 от непривилегированного пользователя (например, от пользователя svacer при установке из deb/rpm пакета), сервер Svacer не запустится с ошибкой &lt;br /&gt;
&lt;br /&gt;
 ERROR: port 443 is privileged, please check current user permissions or set another rest api port&lt;br /&gt;
&lt;br /&gt;
В таком случае надо выдать capabilities на открытие привилегированных портов файлу сервера Svacer. Это нужно будет делать при каждом обновлении версии сервера&lt;br /&gt;
&lt;br /&gt;
 sudo setcap 'cap_net_bind_service=+ep' /usr/bin/svacer-server&lt;br /&gt;
&lt;br /&gt;
=== Увеличение лимита открытых файлов ===&lt;br /&gt;
Актуально только для Linux.&lt;br /&gt;
&lt;br /&gt;
Если проекты большие, или их много, в object store создается большое количество файлов. Для нормальной работы сервера Svacer при этом рекомендуется увеличивать системный лимит количества одновременно открытых файлов. &lt;br /&gt;
&lt;br /&gt;
В POSIX таких лимита два:&lt;br /&gt;
* soft nofiles — текущее максимальное значение&lt;br /&gt;
* hard nofiles — общесистемное максимальное значение&lt;br /&gt;
&lt;br /&gt;
В большинстве систем hard значение достаточно большое, а soft обычно маленькое, что и приводит к проблемам. Пример на Debian 11:&lt;br /&gt;
&lt;br /&gt;
  $ ulimit -Sn&lt;br /&gt;
  1024&lt;br /&gt;
  $ ulimit -Hn&lt;br /&gt;
  1048576&lt;br /&gt;
&lt;br /&gt;
Начиная с версии 6-0-0 Svacer пытается автоматически увеличить soft limit до значения hard limit при запуске, а начиная с версии 8-0-0 — проверяет, что увеличить удалось и выводит сообщение с текущим лимитом. Если видите в логах подобную запись — у soft и hard одно, достаточно большое значение — значит все в порядке.&lt;br /&gt;
&lt;br /&gt;
  Open files limit (soft and hard): 1048576&lt;br /&gt;
&lt;br /&gt;
Для более ранних версий, или если на вашем дистрибутиве Linux это не работает автоматически, можете увеличить лимит вручную одним из следующих способов:&lt;br /&gt;
&lt;br /&gt;
* Перед запуском Svacer выполнить из консоли команду, увеличив лимит для текущей сессии&lt;br /&gt;
  ulimit -Sn 16384&lt;br /&gt;
&lt;br /&gt;
* Либо один раз увеличить на уровне системы — в файл '''/etc/security/limits.conf''' добавить&lt;br /&gt;
&lt;br /&gt;
  * soft nofile 16384&lt;br /&gt;
&lt;br /&gt;
* Если запускаете Svacer как сервис systemd, добавьте параметр '''LimitNOFILE''' в секцию '''[Service]''' файла описания сервиса.&lt;br /&gt;
:В файле из deb/rpm пакета релиза Svacer этот параметр уже добавлен&lt;br /&gt;
&lt;br /&gt;
  [Service]&lt;br /&gt;
  LimitNOFILE=16384&lt;br /&gt;
&lt;br /&gt;
После чего выполните следующие команды, чтобы прочитать обновленный конфиг и перезапустить с ним Svacer&lt;br /&gt;
&lt;br /&gt;
  sudo systemctl daemon-reload&lt;br /&gt;
  sudo systemctl restart svacer.service&lt;br /&gt;
&lt;br /&gt;
=== Установка пути к директории для кэша ===&lt;br /&gt;
Если запускаете Svacer под пользователем без домашней директории, рекомендуется установить путь к директории для кэша через переменную окружения SVACER_CACHE_DIR в файле описания сервиса systemd&lt;br /&gt;
&lt;br /&gt;
  [Service]&lt;br /&gt;
  Environment=&amp;quot;SVACER_CACHE_DIR=/path/to/some/dir&amp;quot;&lt;br /&gt;
&lt;br /&gt;
После чего выполните следующие команды, чтобы прочитать обновленный конфиг и перезапустить с ним Svacer&lt;br /&gt;
&lt;br /&gt;
  sudo systemctl daemon-reload&lt;br /&gt;
  sudo systemctl restart svacer.service&lt;br /&gt;
&lt;br /&gt;
=== Дополнительные параметры при запуске в docker-контейнере ===&lt;br /&gt;
При запуске в докер-контейнере можно указать дополнительные параметры, к примеру добавить конфиг [[Help:CLI#Хуки|хуков]].&lt;br /&gt;
&lt;br /&gt;
Для этого переопределите команду запуска сервера Svacer в docker-compose файле и допишите туда нужные параметры:&lt;br /&gt;
&lt;br /&gt;
 command: /svacer/bin/svacer-server run --store /data/store --pg postgres://svace:svace@postgresql:5432/svace --hooks /svacer/hooks.json&lt;br /&gt;
&lt;br /&gt;
Конфигурационный файл с описанием хуков примонтируйте как volume:&lt;br /&gt;
&lt;br /&gt;
 volumes:&lt;br /&gt;
   - ./hooks.json:/svacer/hooks.json&lt;br /&gt;
&lt;br /&gt;
Можете использовать переменные из секции environment docker-compose файла, тогда в строке запуска их надо экранировать с помощью &amp;lt;code&amp;gt;$$&amp;lt;/code&amp;gt; и запускать сервер Svacer как shell-команду, чтобы в контейнере подставились значения переменных&lt;br /&gt;
&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;
   - HOOKS_FILE=/svacer/hooks.json&lt;br /&gt;
 volumes:&lt;br /&gt;
   - ./hooks.json:/svacer/hooks.json&lt;br /&gt;
 command: sh -c &amp;quot;/svacer/bin/svacer-server run --store $$STORE --pg $$SVACER_PG_URL --hooks $$HOOKS_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Для более комплексных сценариев можете собрать свой образ с сервером Svacer, использовав наш [[Dockerfile]] как референс.&lt;br /&gt;
&lt;br /&gt;
== Обновление детекторов ==&lt;br /&gt;
После установки новой версии Svace требуется обновить описания детекторов в Svacer. Для этого необходимо выполнить команду:&lt;br /&gt;
&lt;br /&gt;
  svacer checkers --upload &amp;lt;/path/to/svace&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note}} Обновление описаний детекторов это серьезная операция, которая должна выполняться после предварительного тестирования. Поэтому перед выполнением команды рекомендуется сделать резервную копию базы данных Svacer.&lt;br /&gt;
&lt;br /&gt;
== Генерация PDF на основе HTML ==&lt;br /&gt;
В релиз 10.х.х включена генерация PDF на основе рендеринга HTML с последующим запуском headless chrome/chromium для генерации PDF. Этот подход позволяет упростить формирование шаблонов для генерации PDF, но требует существенно больше вычислительных ресурсов. Для тюнинга числа параллельных процессов при генерации используется переменная окружения&lt;br /&gt;
&lt;br /&gt;
 SVACER_PDF_GEN_LIMITS=&amp;lt;pdf tool limit&amp;gt;:&amp;lt;chrome limit&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первое значение &amp;lt;code&amp;gt;&amp;lt;pdf tool limit&amp;gt;&amp;lt;/code&amp;gt; определяет число одновременных процессов pdfmerge для сборки отдельных секций в единый PDF документ; второе значение &amp;lt;code&amp;gt;&amp;lt;chrome limit&amp;gt;&amp;lt;/code&amp;gt; определяет одновременное число процессов chrome/chromium для генерации PDF из HTML. Не рекомендуется ставить значения, сильно превышающие число ядер в сервере.&lt;br /&gt;
&lt;br /&gt;
== Полнотекстовый поиск ==&lt;br /&gt;
Для поддержки полнотекстового поиска Svacer строит индекс. По умолчанию директория для индекса создается в &amp;lt;code&amp;gt;$HOME/.cache/svacer&amp;lt;/code&amp;gt;, для указания иной директории можно использовать переменную окружения &amp;lt;code&amp;gt;SVACER_SEARCH_INDEX_DIR&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В ряде случаев (падение и рестарт сервера, ошибки и т. п.) кэш может быть в некорректном состоянии. Для переиндексации данных администратор может использовать CLI команду&lt;br /&gt;
&lt;br /&gt;
 svacer search --host &amp;lt;nowiki&amp;gt;http://some_host:port&amp;lt;/nowiki&amp;gt; --user &amp;lt;login&amp;gt; --password &amp;lt;pwd&amp;gt; --drop-cache&lt;br /&gt;
&lt;br /&gt;
Используемая при этом учетная запись должна быть с правами на &amp;lt;code&amp;gt;Server administration&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При импорте результатов на сервер индексация идет в фоновой задаче, поэтому появление новых данных в результатах поиска может занять некоторое время.&lt;br /&gt;
&lt;br /&gt;
== Указание public-url ==&lt;br /&gt;
В некоторых случаях необходимо явно указывать серверу Svacer его URL-адрес. Например, это нужно для корректной генерации коротких ссылок на предупреждения и ссылок в [[Notifications|уведомлениях]]. Используйте параметр &amp;lt;code&amp;gt;--public-url&amp;lt;/code&amp;gt; при запуске сервера&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;svacer-server run --public-url http://svacer.intra.net:8080&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&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;
|SVACER_TIMEOUT_IMPORT_RESULTS&lt;br /&gt;
|15 минут&lt;br /&gt;
|Таймаут ожидания процесса начала импорта на сервере. При превышении запрос на импорт будет отклонен с ошибкой. Формат — Go Duration string: 1h2m3s. Переменная затрагивает только ожидание начала, но не ограничивает сам процесс импорта&lt;br /&gt;
|-&lt;br /&gt;
|SVACER_NUM_PARALLEL_IMPORTS&lt;br /&gt;
|(максимальное число коннектов к БД) / 2&lt;br /&gt;
|Число одновременных параллельных импортов. Остальные ждут в очереди. На ожидание влияет переменная SVACER_TIMEOUT_IMPORT_RESULTS&lt;br /&gt;
|-&lt;br /&gt;
|SVACER_TAIL_LOG_SIZE&lt;br /&gt;
|1Мб&lt;br /&gt;
|Число. Размер буфера для показа лога сервера в WebUI. Показывается последние SVACER_TAIL_LOG_SIZE байт из лога. &lt;br /&gt;
|-&lt;br /&gt;
|SVACER_LOG_FORMAT&lt;br /&gt;
|&amp;lt;пусто&amp;gt;&lt;br /&gt;
|При указании 'json' формат вывода лога заменяется на JSON. Предназначено для интеграции с агрегаторами логов. Также можно указать через флаг при старте: &amp;lt;code&amp;gt;svacer-server --log-format=json&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|SVACER_INV_GEN_JOBS&lt;br /&gt;
|0.7 * runtime.GOMAXPROCS&lt;br /&gt;
|Максимальное число параллельных заданий для генерации инвариантов при миграции старой базы или импорте результатов. При ограниченных ресурсах сервера используйте значение 1 или 2. Нельзя установить значение больше, чем GOMAXPROCS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Пересчет инвариантов ===&lt;br /&gt;
При миграции со старых версий иногда могут быть проблемы с переносом разметки. Для принудительного пересчета инвариантов запустите сервер с опцией &amp;lt;code&amp;gt;--force-invariant-refresh&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
=== Объектное хранилище ===&lt;br /&gt;
При больших размерах объектного хранилища (object store) можно запустить сервер с параметром &amp;lt;code&amp;gt;--compact-object-store&amp;lt;/code&amp;gt; — это приведет к поиску недостижимых объектов в хранилище и сокращению размера базы. Операция может занять продолжительное время.&lt;br /&gt;
&lt;br /&gt;
'''ЭКСПЕРИМЕНТАЛЬНО''': Для быстрого получения копии текущего объектного хранилища пользователь может использовать CLI команду &lt;br /&gt;
&lt;br /&gt;
 svacer server backup --host &amp;lt;nowiki&amp;gt;http://localhost:8080&amp;lt;/nowiki&amp;gt; --user admin --password &amp;lt;admin pwd&amp;gt; --checkpoint &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная команда создаст по пути &amp;lt;path&amp;gt; на '''хосте, где работает сервер''',  копию object store. При создании копии по возможности используются hard links, для ускорения процесса. Процесс работает в фоновом режиме, можно запускать его для работающего сервера.&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=3405</id>
		<title>Svacer</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=3405"/>
		<updated>2025-11-28T09:16:01Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: &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 12.x.x&lt;br /&gt;
# [[Help:Introduction|Введение]]&lt;br /&gt;
# [[Help:Installation|Установка и обновление]]&lt;br /&gt;
# [[Help:Configuration|Настройка сервера]]&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;
# [[Help:Utils|Дополнительные утилиты]]&lt;br /&gt;
# [[Metrics|Prometheus-метрики]]&lt;br /&gt;
# [[Pipelines|Примеры пайплайнов]]&lt;br /&gt;
# [[Notifications|Уведомления]]&lt;br /&gt;
&lt;br /&gt;
=== Релизы ===&lt;br /&gt;
Также доступны в виде docker-образа на [https://hub.docker.com/r/ispras/svacer docker hub] и как пакеты в [[Help:Installation#Установка и запуск из deb/rpm пакета|репозиториях]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! version !! distrib !! linux bin !! windows bin !! deb/rpm !! doc&lt;br /&gt;
!svace ver. checkers&lt;br /&gt;
|-&lt;br /&gt;
| 11.2.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11-2-0-linux.tar.gz svacer-11-2-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11-2-0-windows.zip svacer-11-2-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer_11.2-0_amd64.deb svacer_11.2-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11.2-0.x86_64.rpm svacer-11.2-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-2-0|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Svacer#Документация|Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 11.1.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11-1-0-linux.tar.gz svacer-11-1-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11-1-0-windows.zip svacer-11-1-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer_11.1-0_amd64.deb svacer_11.1-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11.1-0.x86_64.rpm svacer-11.1-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-1-0|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Svacer#Документация|Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 11.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11-0-0-linux.tar.gz svacer-11-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11-0-0-windows.zip svacer-11-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer_11.0-0_amd64.deb svacer_11.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11.0-0.x86_64.rpm svacer-11.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 11-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Svacer#Документация|Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.1&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10-0-1-linux.tar.gz svacer-10-0-1-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10-0-1-windows.zip svacer-10-0-1-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer_10.0-1_amd64.deb svacer_10.0-1_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10.0-1.x86_64.rpm svacer-10.0-1.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 10-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 10.x.x]]&lt;br /&gt;
|4.0.241102&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10-0-0-linux.tar.gz svacer-10-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10-0-0-windows.zip svacer-10-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer_10.0-0_amd64.deb svacer_10.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10.0-0.x86_64.rpm svacer-10.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 10-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 10-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 10.x.x]]&lt;br /&gt;
|4.0.241102&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.2&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-9-0-2.zip svacer-9-0-2.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer_9.0-2_amd64.deb svacer_9.0-2_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-9.0-2.x86_64.rpm svacer-9.0-2.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 9-0-2|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#9-0-0|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.1&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-9-0-1.zip svacer-9-0-1.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer_9.0-1_amd64.deb svacer_9.0-1_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-9.0-1.x86_64.rpm svacer-9.0-1.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 9-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#9-0-0|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&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]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&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]]&amp;lt;br /&amp;gt;[[Documentation 8.x.x]]&lt;br /&gt;
|3.4.0&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]]&amp;lt;br /&amp;gt;[[Documentation 8.x.x]]&lt;br /&gt;
|3.4.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[https://svacer.ispras.ru/releases Предыдущие релизы] | [https://nextcloud.ispras.ru/index.php/s/x4r4cMJAMr5RZtd?path=%2F Еще более старые релизы]&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;
https://svacer-demo.ispras.ru&lt;br /&gt;
&lt;br /&gt;
* admin / admin — логин / пароль администратора&lt;br /&gt;
* user / user — логин / пароль пользователя&lt;br /&gt;
&lt;br /&gt;
https://svacer-ai-demo.ispras.ru/ — [[Help:XSvacer:AIAssistant|ИИ-ассистент]]&lt;br /&gt;
* admin / admin&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:Configuration&amp;diff=3404</id>
		<title>Help:Configuration</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:Configuration&amp;diff=3404"/>
		<updated>2025-11-28T09:15:44Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: Akuzmin moved page Configuration to Help:Configuration without leaving a redirect&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Настройки аутентификации в Svacer ===&lt;br /&gt;
В Svacer возможны четыре способа аутентификации пользователей&lt;br /&gt;
&lt;br /&gt;
# Встроенный&lt;br /&gt;
# С помощью LDAP сервера&lt;br /&gt;
# Через утилиту oauth_proxy (по протоколу OIDC)&lt;br /&gt;
# Посредством Personal Access Token (PAT)&lt;br /&gt;
&lt;br /&gt;
Ниже рассматривается настройка аутентификации посредством внутреннего механизма аутентификации. Для настройки [[LDAP]], [[Help:CLI#Personal Access Token|PAT]] или [[OIDC]] аутентификации см. соответствующие разделы документации.&lt;br /&gt;
&lt;br /&gt;
==== Настройка внутреннего механизма аутентификации Svacer ====&lt;br /&gt;
&lt;br /&gt;
===== Настройка парольной политики внутреннего механизма аутентификации Svacer =====&lt;br /&gt;
Настройки параметров встроенного механизма аутентификации возможны посредством секции '''auth.svacer''' конфигурационного файла Svacer. Ниже приведен пример настроек:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;auth:&lt;br /&gt;
  svacer:&lt;br /&gt;
    password:&lt;br /&gt;
       min_length: 10&lt;br /&gt;
       complexity:&lt;br /&gt;
        - &amp;amp;quot;[a-z]&amp;amp;quot;&lt;br /&gt;
        - &amp;amp;quot;[A-Z]&amp;amp;quot;&lt;br /&gt;
        - &amp;amp;quot;[0-9]&amp;amp;quot;&lt;br /&gt;
        - &amp;amp;quot;[!#]&amp;amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Параметр '''min_length''' задает минимальную возможную длину пароля в системе. Данный критерий используется при смене пароля пользователя и не влияет на текущие пароли пользователей.&lt;br /&gt;
&lt;br /&gt;
Параметр '''complexity''' содержит набор регулярных выражений, задающих требования к паролю с точки зрения наличия в нем определенных символов. При задании такого списка выражений Svacer будет проверять задаваемый пользователем новый пароль на предмет удовлетворения всем этим требованиям. Каждое выражение в списке — полноценное выражение, поддерживаемое языком golang.&lt;br /&gt;
&lt;br /&gt;
Указанные выше настройки применяются только к внутренним учетным записям пользователей Svacer. По умолчанию данные настройки отключены (нет требований на минимальную длину и сложность пароля).&lt;br /&gt;
&lt;br /&gt;
===== Задание вкладки по умолчанию на странице входа в GUI Svacer (а также отключение внутренного механизма аутентификации Svacer) =====&lt;br /&gt;
В случае интеграции Svacer с LDAP, можно указать Svacer какую вкладку — Svacer или LDAP — использовать по умолчанию. Для этого используется параметр '''auth.svacer.default'''. Если данный параметр установлен в значение '''true''', то вкладкой по умолчанию будет вкладка Svacer, иначе — вкладка LDAP.&lt;br /&gt;
&lt;br /&gt;
Также возможно полностью отключить механизм внутренней аутентификации Svacer с помощью параметра '''auth.svacer.enabled'''.&lt;br /&gt;
&lt;br /&gt;
Ниже приведен пример конфигурационного файла Svacer для задания вкладки LDAP по умолчанию (в случае наличие интеграции с LDAP сервером)&amp;lt;pre class=&amp;quot;plaintext&amp;quot;&amp;gt;auth:&lt;br /&gt;
  svacer:&lt;br /&gt;
    enabled: true&lt;br /&gt;
    default: false&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Настройка защиты от перебора паролей пользователей ====&lt;br /&gt;
Для случаев аутентификации с помощью LDAP сервера и с помощью встроенного механизма аутентификации реализован механизм блокировки учетных записей пользователей в том случае, если количество неудачных попыток входа превышает заданное в настройках число. По умолчанию защита отключена. Ниже приведен пример секции конфигурационного файла Svacer, задающего правила блокировки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;plaintext&amp;quot;&amp;gt;security:&lt;br /&gt;
  login:&lt;br /&gt;
    max_attempts: 5&lt;br /&gt;
    lock_time: 2m&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Время, на которое происходит блокировка учетной записи пользователя, указывается в формате golang/time: 1s,1m,60m и т. д.&lt;br /&gt;
&lt;br /&gt;
В случае активации защиты данный механизм также защищает аутентификацию посредством вызовов соответствующих точек входа public API.&lt;br /&gt;
&lt;br /&gt;
Блокировка не влияет на работу уже зарегистрированных пользователей.&lt;br /&gt;
&lt;br /&gt;
Для принудительной разблокировки пользователей можно использовать команды cli (требуются права управления сервером):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;svacer user-provider unlock --user admin --password admin --login locked_user&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка TLS ===&lt;br /&gt;
Svacer может быть сконфигурирован для поддержки TLS несколькими способами. Первый способ — использовать reverse proxy с поддержкой HTTPS и проксированием в Svacer по HTTP, второй — запуск Svacer с нативной поддержкой TLS.&lt;br /&gt;
&lt;br /&gt;
==== Reverse proxy ====&lt;br /&gt;
Данный способ позволяет обеспечить безопасную передачу данных только по протоколу HTTPS, данные по протоколу gRPC передаются в незащищенном виде.&lt;br /&gt;
&lt;br /&gt;
===== Nginx =====&lt;br /&gt;
Создайте конфигурационный файл с подобным содержанием в '''/etc/nginx/sites-enabled/''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen 443 ssl;&lt;br /&gt;
    listen [::]:443 ssl;&lt;br /&gt;
&lt;br /&gt;
    server_name svacer.ispras.ru;&lt;br /&gt;
&lt;br /&gt;
    # for large data transfers and continuous connections&lt;br /&gt;
    client_max_body_size        0;&lt;br /&gt;
    proxy_connect_timeout       600;&lt;br /&gt;
    proxy_send_timeout          600;&lt;br /&gt;
    proxy_read_timeout          600;&lt;br /&gt;
    send_timeout                600;&lt;br /&gt;
&lt;br /&gt;
    # path to ssl-certificate and key&lt;br /&gt;
    ssl_certificate /etc/ssl/certs/svacer.ispras.ru.crt;&lt;br /&gt;
    ssl_certificate_key /etc/ssl/private/svacer.ispras.ru.key;&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        include proxy_params;&lt;br /&gt;
&lt;br /&gt;
        # to make WebSockets work&lt;br /&gt;
        proxy_http_version  1.1;&lt;br /&gt;
        proxy_set_header    Upgrade $http_upgrade;&lt;br /&gt;
        proxy_set_header    Connection &amp;quot;upgrade&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        # svacer HTTP URL&lt;br /&gt;
        proxy_pass http://127.0.0.1:8080;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# proxy gRPC port if required&lt;br /&gt;
server {&lt;br /&gt;
    listen 13002 http2;&lt;br /&gt;
    underscores_in_headers on;&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        grpc_pass grpc://127.0.0.1:3002;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В этом конфигурационном файле укажите нужное имя сервера, пути к сертификату (можно использовать fullchain-сертификат) и ключу, а также адрес сервера Svacer, куда проксировать. После этого перезапустите Nginx.&lt;br /&gt;
  systemctl restart nginx&lt;br /&gt;
&lt;br /&gt;
Если ваш сервер виден из интернета и его внешний IP-адрес привязан к доменному имени, можете использовать Let's Encrypt и Certbot для получения валидного SSL-сертификата. См. [https://www.nginx.com/blog/using-free-ssltls-certificates-from-lets-encrypt-with-nginx/ эту инструкцию].&lt;br /&gt;
&lt;br /&gt;
===== Apache =====&lt;br /&gt;
Включите нужные модули в Apache&lt;br /&gt;
  sudo a2enmod ssl proxy proxy_http rewrite&lt;br /&gt;
&lt;br /&gt;
Создайте конфигурационный файл с подобным содержанием в '''/etc/apache2/sites-enabled/'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
    SSLEngine On&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyTimeout 600&lt;br /&gt;
    &lt;br /&gt;
    # path to ssl-certificate and key&lt;br /&gt;
    SSLCertificateFile /etc/ssl/certs/svacer.ispras.ru.crt&lt;br /&gt;
    SSLCertificateKeyFile /etc/ssl/private/svacer.ispras.ru.key&lt;br /&gt;
    &lt;br /&gt;
    # svacer HTTP URL&lt;br /&gt;
    ProxyPass / http://127.0.0.1:8080/&lt;br /&gt;
    ProxyPassReverse / http://127.0.0.1:8080/&lt;br /&gt;
&lt;br /&gt;
    # to make WebSockets work&lt;br /&gt;
    ProxyPass /api/ws/ ws://127.0.0.1:8080/api/ws/&lt;br /&gt;
    ProxyPassReverse /api/ws/ ws://127.0.0.1:8080/api/ws/&lt;br /&gt;
    RewriteEngine on&lt;br /&gt;
    RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]&lt;br /&gt;
    RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]&lt;br /&gt;
    RewriteRule /api/ws/(.*) ws://127.0.0.1:8080%{REQUEST_URI} [P]&lt;br /&gt;
&lt;br /&gt;
    ServerName svacer.ispras.ru&lt;br /&gt;
    ServerAdmin svacer@ispras.ru&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В этом конфигурационном файле укажите нужное имя сервера, пути к сертификату (можно использовать fullchain-сертификат) и ключу, а также адрес сервера Svacer, куда проксировать. После этого перезапустите Apache.&lt;br /&gt;
  systemctl restart apache2&lt;br /&gt;
&lt;br /&gt;
==== Нативно ====&lt;br /&gt;
Этот способ позволяет обеспечить безопасную передачу данных как по протоколу HTTPS, так и по протоколу gRPC. Если сервер запускается с поддержкой TLS, то эта опция относится как к протоколу HTTPS, так и к протоколу gRPC.&lt;br /&gt;
По умолчанию сервер запускается без поддержки TLS, при этом в логах отображается информация об этом.&lt;br /&gt;
 TLS for REST and gRPC DISABLED&lt;br /&gt;
&lt;br /&gt;
Для запуска сервера с поддержкой TLS необходимо указать сертификат сервера и соответствующий закрытый ключ.&lt;br /&gt;
 svacer-server run --ssl-cert svacer.crt --ssl-key svacer.key&lt;br /&gt;
&lt;br /&gt;
При этом ключ должен быть в незашифрованном виде. Права доступа к файлу должны быть 0600. В файле сертификата можно указывать цепочку сертификатов. В этом случае сервер, при подключении клиента, будет возвращать всю цепочку. Первым сертификатом в цепочке всегда должен идти сертификат сервера Svacer. Формат файла — PEM. TLS соединение активируется и для протокола REST и для протокола gRPC. &lt;br /&gt;
&lt;br /&gt;
Работа сервера по проктолу TLS сопровождается следующей записью в логе:&lt;br /&gt;
 Using TLS for REST and gRPC protocols&lt;br /&gt;
&lt;br /&gt;
Работа с таким сервером через CLI происходит как обычно. Для указания необходимости подключаться по TLS можно явно указать протокол в параметре '''--host''', либо добавить опцию '''--ssl'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 svacer upload --host https://example.com&lt;br /&gt;
 svacer upload --ssl --host example.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Также в клиенте можно определить параметр '''--ssl-ca-certs'''. Он позволяет задать доверенные сертификаты корневых центров. Указывается шаблон файлов (с *) или конкретный файл. Путь к директории должен быть абсолютным. В случае отсутствия этого параметра используется TLS, но сертификат сервера не проверяется. Этому случаю соответствует запись в логе клиента:&lt;br /&gt;
 Using weak TLS configuration, because no CA certificate found&lt;br /&gt;
&lt;br /&gt;
Если сертификаты были загружены, в логе будет строчка:&lt;br /&gt;
 added 1 ca certs from /home/user/svacer/svacer.crt&lt;br /&gt;
&lt;br /&gt;
Для администрирования сервера в плане используемого сертификата (например, замена при истечении срока действия) добавлена область в CLI svacer admin: '''server:config'''. В данной области есть 3 команды: '''show''', '''reload''', '''update'''. ID в этом случае нужно всегда указывать в значение '''ssl.cert'''.&lt;br /&gt;
 &lt;br /&gt;
* '''show''' — отображает текущий используемый сертификат&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;pre&amp;gt;svacer admin --ssl --host example.com --user admin --password admin --scope server:config --id ssl.cert --action show&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''reload''' — заставляет сервер перечитать использованные при старте сервера файлы с сертификатом и ключом&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;pre&amp;gt;svacer admin --ssl --host example.com --user admin --password admin --scope server:config --id ssl.cert --action reload&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''update''' — позволяет переслать на сервер новый сертификат (и ключ, если надо) и записать их в указанные при старте сервера файлы. При использовании этой команды нужно сформировать файл с новым сертификатом и, при необходимости, ключом, в формате PEM (используете '''cat''' для объединения сертификата и ключа в один файл) и указать этот файл в параметре value. Если в файле не будет указан закрытый ключ, то сервером будет использован текущий (тот, что был указан при запуске). Данная команда также изменит файлы сертификата и ключа (если он указан), указанные при старте сервера, на новые значения.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;pre&amp;gt;svacer admin --ssl --host example.com --user admin --password admin --scope server:config --id ssl.cert --action update --value svacer.pem&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Некоторое время после обновления сертификата сервер может использовать старые сертификаты (для уже установленных соединений). Для новых соединений будет использован обновленный сертификат.&lt;br /&gt;
&lt;br /&gt;
В конфигурационном файле Svacer можно указать минимальную и максимальные версии TLS, поддерживаемые сервером. Для этого необходимо в конфигурационном файле указать параметры &amp;lt;code&amp;gt;minVersion&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;maxVersion&amp;lt;/code&amp;gt; в разделе security.tls. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
security:&lt;br /&gt;
  tls:&lt;br /&gt;
    minVersion: tls11&lt;br /&gt;
    maxVersion: tls12&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Интеграция с хранилищем секретов Infisical ===&lt;br /&gt;
В Svacer реализована поддержка получения секретов из хранилища секретов [https://infisical.com/ Infisical]. Подробную информацию об интеграции см. в статье [[Infisical|Интеграция с хранилищем секретов Infisical]].&lt;br /&gt;
&lt;br /&gt;
=== Механизм интеграции с внешними системами посредством Webhook-ов ===&lt;br /&gt;
&lt;br /&gt;
==== Общий принцип работы ====&lt;br /&gt;
&lt;br /&gt;
Механизм webhook-ов настраивается в конфигурационном файле в секции '''webhook'''. Механизм срабатывает при получении по внутренней шине одного из поддерживаемых событий Svacer. Каждое из внутренних событий преобразуется в событие вызова webhook-а (см. [[Help:Configuration#Модель поддерживаемых событий|Модель поддерживаемых событий]]) и отправляется на обработку в каждую из настроенных целей, которыми являются http-обработчики. Отправкой занимаются работники (их количество настраивается в конфигурационном файле в параметре '''workers_count'''). У каждой цели есть общая очередь, размер которой составляет 500 событий. Если очередь переполняется, будет выдаваться соответствующее сообщение в лог-файле Svacer.&lt;br /&gt;
&lt;br /&gt;
Работники поддерживают протокол https (в том числе самоподписанные сертификаты). Для указания корневого сертификата можно использовать параметр '''ca_certs''' конфигурационного файла. Работникам можно указать таймаут соединения с webhook-сервером (в мс, по умолчанию 1000мс, параметр '''timeout''') и количество попыток отправки (по умолчанию — одна попытка, параметр '''retry_count''').&lt;br /&gt;
&lt;br /&gt;
В настройках можно указать фильтр на отправляемые события (параметр '''filter'''). Фильтр указывается посредством задания выражения. В выражениях используется [https://github.com/expr-lang/expr синтаксис go-expr]. Фильтр возможно указать в количестве одной штуки на одну цель. Если фильтр после вычисления дает значение true, событие будет отправлено в цель.&lt;br /&gt;
&lt;br /&gt;
Также реализован журнал событий отправки webhook-ов, размер которого может быть указан в конфигурационном файле (параметр '''journal_length'''). По умолчанию он равен 86400 записей — по 1 записи на каждую секунду суток. Журнал может быть использован для отладки механизма отправки событий в цель. Содержимое журнала хранится в памяти. При достижении журналом максимального размера, самые старые записи заменяются новыми.&lt;br /&gt;
&lt;br /&gt;
Для настройки аутентификации работника можно использовать параметр '''headers''', который представляет собой список значений вида '''key:value'''. Данные пары будут добавлены в заголовки каждого http-запроса, выполняемого работником.&lt;br /&gt;
&lt;br /&gt;
==== Конфигурация ====&lt;br /&gt;
&lt;br /&gt;
Возможный пример конфигурационного файла, в котором указана отправка на сервер test-host.local событий, связанных с разметкой маркера.&lt;br /&gt;
&lt;br /&gt;
 webhook:&lt;br /&gt;
  enabled: true&lt;br /&gt;
  journal_length: 86400&lt;br /&gt;
  targets:&lt;br /&gt;
   - url: &amp;quot;&amp;lt;nowiki&amp;gt;https://test-host.local:8080/webhook&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
     workers_count: 1&lt;br /&gt;
     enabled: true     &lt;br /&gt;
     filter: &amp;quot;Type == EventReviewMarker and Payload.Status != 'Undecided'&amp;quot;&lt;br /&gt;
     ca_certs: &amp;quot;/etc/ssl/certs/ca.crt&amp;quot;&lt;br /&gt;
     retry_count: 3&lt;br /&gt;
     timeout: 1000&lt;br /&gt;
     headers:&lt;br /&gt;
        - &amp;quot;password:12345&amp;quot;&lt;br /&gt;
        - &amp;quot;Authorization: Bearer eyJh .... &amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== CLI ====&lt;br /&gt;
&lt;br /&gt;
Для взаимодействия с механизмом webhook реализованы две cli команды:&lt;br /&gt;
&lt;br /&gt;
 svacer server webhook journal&lt;br /&gt;
 svacer server webhook stat&lt;br /&gt;
&lt;br /&gt;
Первая команда позволяет посмотреть записи журнала отправки событий. Вторая команда позволяет вывести статистику по работе службы (особенно интересными могут быть поля '''sendError''' и '''skip''').&lt;br /&gt;
&lt;br /&gt;
Пример вывода для первой команды (с флагом '''--humanize'''; если флага нет, то вывод будет в формате json):&lt;br /&gt;
&lt;br /&gt;
 ==================== #1 ======================&lt;br /&gt;
 Time: 2025-07-01 12:25:52.25343534 +0300 MSK&lt;br /&gt;
 Created by: admin&lt;br /&gt;
 Error: &lt;br /&gt;
 Success: true&lt;br /&gt;
 SvacerKind: UpdateMarkerReview&lt;br /&gt;
 EventType: EventReviewMarker&lt;br /&gt;
 TargetURL: &amp;lt;nowiki&amp;gt;https://swarm-mgr.home:8080/webhook&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 ProcessTime: 6 ms&lt;br /&gt;
 ==================== #2 ======================&lt;br /&gt;
 Time: 2025-07-01 12:25:54.202850322 +0300 MSK&lt;br /&gt;
 Created by: admin&lt;br /&gt;
 Error: &lt;br /&gt;
 Success: true&lt;br /&gt;
 SvacerKind: UpdateMarkerReview&lt;br /&gt;
 EventType: EventReviewMarker&lt;br /&gt;
 TargetURL: &amp;lt;nowiki&amp;gt;https://swarm-mgr.home:8080/webhook&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 ProcessTime: 3 ms&lt;br /&gt;
&lt;br /&gt;
Пример вывода команды статистики:&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
 &amp;quot;enabled&amp;quot;: true,&lt;br /&gt;
 &amp;quot;targets&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;enabled&amp;quot;: true,&lt;br /&gt;
   &amp;quot;url&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;https://swarm-mgr.home:8080/webhook&amp;lt;/nowiki&amp;gt;&amp;quot;,&lt;br /&gt;
   &amp;quot;filtered&amp;quot;: 0,&lt;br /&gt;
   &amp;quot;sendSuccess&amp;quot;: 3,&lt;br /&gt;
   &amp;quot;sentError&amp;quot;: 0,&lt;br /&gt;
   &amp;quot;submitted&amp;quot;: 3,&lt;br /&gt;
   &amp;quot;skip&amp;quot;: 0&lt;br /&gt;
  }&lt;br /&gt;
 ]&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== Модель поддерживаемых событий ====&lt;br /&gt;
 syntax = &amp;quot;proto3&amp;quot;;&lt;br /&gt;
 import &amp;quot;google/protobuf/any.proto&amp;quot;;&lt;br /&gt;
 option go_package=&amp;quot;svacer/proto/webhook&amp;quot;;&lt;br /&gt;
 package webhook;&lt;br /&gt;
 &lt;br /&gt;
 enum EventType {&lt;br /&gt;
     EventNone = 0;&lt;br /&gt;
     EventTest = 1;&lt;br /&gt;
     EventReviewMarker = 2;&lt;br /&gt;
     EventPurgeReview = 3;&lt;br /&gt;
     EventGroupReview = 4;&lt;br /&gt;
     EventImportSnapshot = 5;&lt;br /&gt;
     EventCopySnapshot = 6;&lt;br /&gt;
     EventNewComment = 7;&lt;br /&gt;
     EventUpdateComment = 8;&lt;br /&gt;
     EventNewContainer = 9;&lt;br /&gt;
     EventDeleteContainer = 10;&lt;br /&gt;
     EventUpdateContainer  =11;&lt;br /&gt;
     EventImportMarkup = 12;&lt;br /&gt;
     EventDeleteSnapshot = 13;&lt;br /&gt;
     UpdateSnapshot = 14;&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 message MarkerDetails {&lt;br /&gt;
     string id = 1;&lt;br /&gt;
     string file = 2;&lt;br /&gt;
     string line = 3;&lt;br /&gt;
     string lang = 4;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message Event {&lt;br /&gt;
     uint64 timestamp = 1;&lt;br /&gt;
     EventType type = 2;&lt;br /&gt;
     string created_by = 3;&lt;br /&gt;
     google.protobuf.Any payload = 4;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadMarkerReview {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string snapshot_id = 5;&lt;br /&gt;
     string snapshot_name = 6;&lt;br /&gt;
     repeated MarkerDetails markers = 7;&lt;br /&gt;
     string comment = 8;&lt;br /&gt;
     string severity = 9;&lt;br /&gt;
     string action = 10;&lt;br /&gt;
     string status = 11;&lt;br /&gt;
     bool group_review = 12;&lt;br /&gt;
     string created_by_id = 13;&lt;br /&gt;
     string created_by_login = 14;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadPurgeReview {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string created_by_id = 5;&lt;br /&gt;
     string created_by_login = 6;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadImportSnapshot {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string snapshot_id = 5;&lt;br /&gt;
     string snapshot_name = 6;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadMarkerComment {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string snapshot_id = 5;&lt;br /&gt;
     string snapshot_name = 6;&lt;br /&gt;
     MarkerDetails marker = 7;&lt;br /&gt;
     string comment = 8;&lt;br /&gt;
     string created_by_id = 9;&lt;br /&gt;
     string created_by_login = 10;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadCopySnapshot {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string snapshot_id = 5;&lt;br /&gt;
     string snapshot_name = 6;&lt;br /&gt;
     string created_by_id = 7;&lt;br /&gt;
     string created_by_login = 8;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message Container {    &lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     Container source = 5;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadNewContainer {&lt;br /&gt;
     repeated Container containers = 1;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadDeleteContainer {&lt;br /&gt;
     repeated Container projects = 1;&lt;br /&gt;
     repeated Container branches = 2;    &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadUpdateContainer {&lt;br /&gt;
     Container container = 1;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message CopyResult {&lt;br /&gt;
    uint64 total = 1;&lt;br /&gt;
 	uint64 applied_reviews = 2;&lt;br /&gt;
 	uint64 applied_comments = 3;&lt;br /&gt;
 	uint64 skipped_reviews = 4;&lt;br /&gt;
 	uint64 duplicate_reviews = 5;&lt;br /&gt;
 	uint64 duplicate_comments = 6;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadImportMarkup {&lt;br /&gt;
     Container source=1;&lt;br /&gt;
     Container target=2;&lt;br /&gt;
     CopyResult copy_result =3;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message Snapshot {    &lt;br /&gt;
     string snapshot_id = 1;&lt;br /&gt;
     string snapshot_name = 2;&lt;br /&gt;
     Container container = 3;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadDeleteSnapshots {&lt;br /&gt;
      repeated Snapshot snapshots = 1;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadUpdateSnapshot {&lt;br /&gt;
     string snapshot_id = 1;&lt;br /&gt;
     string snapshot_name = 2;&lt;br /&gt;
     Container container  = 3;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Выбор сетевых интерфейсов и портов сервера ===&lt;br /&gt;
* По умолчанию web-сервер запускается на всех сетевых интерфейсах, на порту 8080 ('''0.0.0.0:8080'''). Для указания конкретного сетевого интерфейса можно использовать опцию '''--listen &amp;lt;network interface&amp;gt;''', для указания другого порта: '''--port &amp;lt;port_number&amp;gt;.&lt;br /&gt;
* Аналогично для grpc-сервера: по умолчанию — '''0.0.0.0:3002''', для выбора конкретного интерфейса: '''--listen-grpc &amp;lt;network_interface&amp;gt;''', для указания другого порта: '''--grpc &amp;lt;port_number&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
 svacer-server run --listen 127.0.0.1 --port 9090 --listen-grpc 127.0.0.1 --grpc 3004&lt;br /&gt;
&lt;br /&gt;
При попытке запуска на порту &amp;lt; 1024 от непривилегированного пользователя (например, от пользователя svacer при установке из deb/rpm пакета), сервер Svacer не запустится с ошибкой &lt;br /&gt;
&lt;br /&gt;
 ERROR: port 443 is privileged, please check current user permissions or set another rest api port&lt;br /&gt;
&lt;br /&gt;
В таком случае надо выдать capabilities на открытие привилегированных портов файлу сервера Svacer. Это нужно будет делать при каждом обновлении версии сервера&lt;br /&gt;
&lt;br /&gt;
 sudo setcap 'cap_net_bind_service=+ep' /usr/bin/svacer-server&lt;br /&gt;
&lt;br /&gt;
=== Увеличение лимита открытых файлов ===&lt;br /&gt;
Актуально только для Linux.&lt;br /&gt;
&lt;br /&gt;
Если проекты большие, или их много, в object store создается большое количество файлов. Для нормальной работы сервера Svacer при этом рекомендуется увеличивать системный лимит количества одновременно открытых файлов. &lt;br /&gt;
&lt;br /&gt;
В POSIX таких лимита два:&lt;br /&gt;
* soft nofiles — текущее максимальное значение&lt;br /&gt;
* hard nofiles — общесистемное максимальное значение&lt;br /&gt;
&lt;br /&gt;
В большинстве систем hard значение достаточно большое, а soft обычно маленькое, что и приводит к проблемам. Пример на Debian 11:&lt;br /&gt;
&lt;br /&gt;
  $ ulimit -Sn&lt;br /&gt;
  1024&lt;br /&gt;
  $ ulimit -Hn&lt;br /&gt;
  1048576&lt;br /&gt;
&lt;br /&gt;
Начиная с версии 6-0-0 Svacer пытается автоматически увеличить soft limit до значения hard limit при запуске, а начиная с версии 8-0-0 — проверяет, что увеличить удалось и выводит сообщение с текущим лимитом. Если видите в логах подобную запись — у soft и hard одно, достаточно большое значение — значит все в порядке.&lt;br /&gt;
&lt;br /&gt;
  Open files limit (soft and hard): 1048576&lt;br /&gt;
&lt;br /&gt;
Для более ранних версий, или если на вашем дистрибутиве Linux это не работает автоматически, можете увеличить лимит вручную одним из следующих способов:&lt;br /&gt;
&lt;br /&gt;
* Перед запуском Svacer выполнить из консоли команду, увеличив лимит для текущей сессии&lt;br /&gt;
  ulimit -Sn 16384&lt;br /&gt;
&lt;br /&gt;
* Либо один раз увеличить на уровне системы — в файл '''/etc/security/limits.conf''' добавить&lt;br /&gt;
&lt;br /&gt;
  * soft nofile 16384&lt;br /&gt;
&lt;br /&gt;
* Если запускаете Svacer как сервис systemd, добавьте параметр '''LimitNOFILE''' в секцию '''[Service]''' файла описания сервиса.&lt;br /&gt;
:В файле из deb/rpm пакета релиза Svacer этот параметр уже добавлен&lt;br /&gt;
&lt;br /&gt;
  [Service]&lt;br /&gt;
  LimitNOFILE=16384&lt;br /&gt;
&lt;br /&gt;
После чего выполните следующие команды, чтобы прочитать обновленный конфиг и перезапустить с ним Svacer&lt;br /&gt;
&lt;br /&gt;
  sudo systemctl daemon-reload&lt;br /&gt;
  sudo systemctl restart svacer.service&lt;br /&gt;
&lt;br /&gt;
=== Установка пути к директории для кэша ===&lt;br /&gt;
Если запускаете Svacer под пользователем без домашней директории, рекомендуется установить путь к директории для кэша через переменную окружения SVACER_CACHE_DIR в файле описания сервиса systemd&lt;br /&gt;
&lt;br /&gt;
  [Service]&lt;br /&gt;
  Environment=&amp;quot;SVACER_CACHE_DIR=/path/to/some/dir&amp;quot;&lt;br /&gt;
&lt;br /&gt;
После чего выполните следующие команды, чтобы прочитать обновленный конфиг и перезапустить с ним Svacer&lt;br /&gt;
&lt;br /&gt;
  sudo systemctl daemon-reload&lt;br /&gt;
  sudo systemctl restart svacer.service&lt;br /&gt;
&lt;br /&gt;
=== Дополнительные параметры при запуске в docker-контейнере ===&lt;br /&gt;
При запуске в докер-контейнере можно указать дополнительные параметры, к примеру добавить конфиг [[Help:CLI#Хуки|хуков]].&lt;br /&gt;
&lt;br /&gt;
Для этого переопределите команду запуска сервера Svacer в docker-compose файле и допишите туда нужные параметры:&lt;br /&gt;
&lt;br /&gt;
 command: /svacer/bin/svacer-server run --store /data/store --pg postgres://svace:svace@postgresql:5432/svace --hooks /svacer/hooks.json&lt;br /&gt;
&lt;br /&gt;
Конфигурационный файл с описанием хуков примонтируйте как volume:&lt;br /&gt;
&lt;br /&gt;
 volumes:&lt;br /&gt;
   - ./hooks.json:/svacer/hooks.json&lt;br /&gt;
&lt;br /&gt;
Можете использовать переменные из секции environment docker-compose файла, тогда в строке запуска их надо экранировать с помощью &amp;lt;code&amp;gt;$$&amp;lt;/code&amp;gt; и запускать сервер Svacer как shell-команду, чтобы в контейнере подставились значения переменных&lt;br /&gt;
&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;
   - HOOKS_FILE=/svacer/hooks.json&lt;br /&gt;
 volumes:&lt;br /&gt;
   - ./hooks.json:/svacer/hooks.json&lt;br /&gt;
 command: sh -c &amp;quot;/svacer/bin/svacer-server run --store $$STORE --pg $$SVACER_PG_URL --hooks $$HOOKS_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Для более комплексных сценариев можете собрать свой образ с сервером Svacer, использовав наш [[Dockerfile]] как референс.&lt;br /&gt;
&lt;br /&gt;
== Обновление детекторов ==&lt;br /&gt;
После установки новой версии Svace требуется обновить описания детекторов в Svacer. Для этого необходимо выполнить команду:&lt;br /&gt;
&lt;br /&gt;
  svacer checkers --upload &amp;lt;/path/to/svace&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note}} Обновление описаний детекторов это серьезная операция, которая должна выполняться после предварительного тестирования. Поэтому перед выполнением команды рекомендуется сделать резервную копию базы данных Svacer.&lt;br /&gt;
&lt;br /&gt;
== Генерация PDF на основе HTML ==&lt;br /&gt;
В релиз 10.х.х включена генерация PDF на основе рендеринга HTML с последующим запуском headless chrome/chromium для генерации PDF. Этот подход позволяет упростить формирование шаблонов для генерации PDF, но требует существенно больше вычислительных ресурсов. Для тюнинга числа параллельных процессов при генерации используется переменная окружения&lt;br /&gt;
&lt;br /&gt;
 SVACER_PDF_GEN_LIMITS=&amp;lt;pdf tool limit&amp;gt;:&amp;lt;chrome limit&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первое значение &amp;lt;code&amp;gt;&amp;lt;pdf tool limit&amp;gt;&amp;lt;/code&amp;gt; определяет число одновременных процессов pdfmerge для сборки отдельных секций в единый PDF документ; второе значение &amp;lt;code&amp;gt;&amp;lt;chrome limit&amp;gt;&amp;lt;/code&amp;gt; определяет одновременное число процессов chrome/chromium для генерации PDF из HTML. Не рекомендуется ставить значения, сильно превышающие число ядер в сервере.&lt;br /&gt;
&lt;br /&gt;
== Полнотекстовый поиск ==&lt;br /&gt;
Для поддержки полнотекстового поиска Svacer строит индекс. По умолчанию директория для индекса создается в &amp;lt;code&amp;gt;$HOME/.cache/svacer&amp;lt;/code&amp;gt;, для указания иной директории можно использовать переменную окружения &amp;lt;code&amp;gt;SVACER_SEARCH_INDEX_DIR&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В ряде случаев (падение и рестарт сервера, ошибки и т. п.) кэш может быть в некорректном состоянии. Для переиндексации данных администратор может использовать CLI команду&lt;br /&gt;
&lt;br /&gt;
 svacer search --host &amp;lt;nowiki&amp;gt;http://some_host:port&amp;lt;/nowiki&amp;gt; --user &amp;lt;login&amp;gt; --password &amp;lt;pwd&amp;gt; --drop-cache&lt;br /&gt;
&lt;br /&gt;
Используемая при этом учетная запись должна быть с правами на &amp;lt;code&amp;gt;Server administration&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При импорте результатов на сервер индексация идет в фоновой задаче, поэтому появление новых данных в результатах поиска может занять некоторое время.&lt;br /&gt;
&lt;br /&gt;
== Указание public-url ==&lt;br /&gt;
В некоторых случаях необходимо явно указывать серверу Svacer его URL-адрес. Например, это нужно для корректной генерации коротких ссылок на предупреждения и ссылок в [[Notifications|уведомлениях]]. Используйте параметр &amp;lt;code&amp;gt;--public-url&amp;lt;/code&amp;gt; при запуске сервера&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;svacer-server run --public-url http://svacer.intra.net:8080&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&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;
|SVACER_TIMEOUT_IMPORT_RESULTS&lt;br /&gt;
|15 минут&lt;br /&gt;
|Таймаут ожидания процесса начала импорта на сервере. При превышении запрос на импорт будет отклонен с ошибкой. Формат — Go Duration string: 1h2m3s. Переменная затрагивает только ожидание начала, но не ограничивает сам процесс импорта&lt;br /&gt;
|-&lt;br /&gt;
|SVACER_NUM_PARALLEL_IMPORTS&lt;br /&gt;
|(максимальное число коннектов к БД) / 2&lt;br /&gt;
|Число одновременных параллельных импортов. Остальные ждут в очереди. На ожидание влияет переменная SVACER_TIMEOUT_IMPORT_RESULTS&lt;br /&gt;
|-&lt;br /&gt;
|SVACER_TAIL_LOG_SIZE&lt;br /&gt;
|1Мб&lt;br /&gt;
|Число. Размер буфера для показа лога сервера в WebUI. Показывается последние SVACER_TAIL_LOG_SIZE байт из лога. &lt;br /&gt;
|-&lt;br /&gt;
|SVACER_LOG_FORMAT&lt;br /&gt;
|&amp;lt;пусто&amp;gt;&lt;br /&gt;
|При указании 'json' формат вывода лога заменяется на JSON. Предназначено для интеграции с агрегаторами логов. Также можно указать через флаг при старте: &amp;lt;code&amp;gt;svacer-server --log-format=json&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|SVACER_INV_GEN_JOBS&lt;br /&gt;
|0.7 * runtime.GOMAXPROCS&lt;br /&gt;
|Максимальное число параллельных заданий для генерации инвариантов при миграции старой базы или импорте результатов. При ограниченных ресурсах сервера используйте значение 1 или 2. Нельзя установить значение больше, чем GOMAXPROCS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Пересчет инвариантов ===&lt;br /&gt;
При миграции со старых версий иногда могут быть проблемы с переносом разметки. Для принудительного пересчета инвариантов запустите сервер с опцией &amp;lt;code&amp;gt;--force-invariant-refresh&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
=== Объектное хранилище ===&lt;br /&gt;
При больших размерах объектного хранилища (object store) можно запустить сервер с параметром &amp;lt;code&amp;gt;--compact-object-store&amp;lt;/code&amp;gt; — это приведет к поиску недостижимых объектов в хранилище и сокращению размера базы. Операция может занять продолжительное время.&lt;br /&gt;
&lt;br /&gt;
'''ЭКСПЕРИМЕНТАЛЬНО''': Для быстрого получения копии текущего объектного хранилища пользователь может использовать CLI команду &lt;br /&gt;
&lt;br /&gt;
 svacer server backup --host &amp;lt;nowiki&amp;gt;http://localhost:8080&amp;lt;/nowiki&amp;gt; --user admin --password &amp;lt;admin pwd&amp;gt; --checkpoint &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная команда создаст по пути &amp;lt;path&amp;gt; на '''хосте, где работает сервер''',  копию object store. При создании копии по возможности используются hard links, для ускорения процесса. Процесс работает в фоновом режиме, можно запускать его для работающего сервера.&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:Configuration&amp;diff=3403</id>
		<title>Help:Configuration</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:Configuration&amp;diff=3403"/>
		<updated>2025-11-28T09:15:28Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Настройки аутентификации в Svacer ===&lt;br /&gt;
В Svacer возможны четыре способа аутентификации пользователей&lt;br /&gt;
&lt;br /&gt;
# Встроенный&lt;br /&gt;
# С помощью LDAP сервера&lt;br /&gt;
# Через утилиту oauth_proxy (по протоколу OIDC)&lt;br /&gt;
# Посредством Personal Access Token (PAT)&lt;br /&gt;
&lt;br /&gt;
Ниже рассматривается настройка аутентификации посредством внутреннего механизма аутентификации. Для настройки [[LDAP]], [[Help:CLI#Personal Access Token|PAT]] или [[OIDC]] аутентификации см. соответствующие разделы документации.&lt;br /&gt;
&lt;br /&gt;
==== Настройка внутреннего механизма аутентификации Svacer ====&lt;br /&gt;
&lt;br /&gt;
===== Настройка парольной политики внутреннего механизма аутентификации Svacer =====&lt;br /&gt;
Настройки параметров встроенного механизма аутентификации возможны посредством секции '''auth.svacer''' конфигурационного файла Svacer. Ниже приведен пример настроек:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;auth:&lt;br /&gt;
  svacer:&lt;br /&gt;
    password:&lt;br /&gt;
       min_length: 10&lt;br /&gt;
       complexity:&lt;br /&gt;
        - &amp;amp;quot;[a-z]&amp;amp;quot;&lt;br /&gt;
        - &amp;amp;quot;[A-Z]&amp;amp;quot;&lt;br /&gt;
        - &amp;amp;quot;[0-9]&amp;amp;quot;&lt;br /&gt;
        - &amp;amp;quot;[!#]&amp;amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Параметр '''min_length''' задает минимальную возможную длину пароля в системе. Данный критерий используется при смене пароля пользователя и не влияет на текущие пароли пользователей.&lt;br /&gt;
&lt;br /&gt;
Параметр '''complexity''' содержит набор регулярных выражений, задающих требования к паролю с точки зрения наличия в нем определенных символов. При задании такого списка выражений Svacer будет проверять задаваемый пользователем новый пароль на предмет удовлетворения всем этим требованиям. Каждое выражение в списке — полноценное выражение, поддерживаемое языком golang.&lt;br /&gt;
&lt;br /&gt;
Указанные выше настройки применяются только к внутренним учетным записям пользователей Svacer. По умолчанию данные настройки отключены (нет требований на минимальную длину и сложность пароля).&lt;br /&gt;
&lt;br /&gt;
===== Задание вкладки по умолчанию на странице входа в GUI Svacer (а также отключение внутренного механизма аутентификации Svacer) =====&lt;br /&gt;
В случае интеграции Svacer с LDAP, можно указать Svacer какую вкладку — Svacer или LDAP — использовать по умолчанию. Для этого используется параметр '''auth.svacer.default'''. Если данный параметр установлен в значение '''true''', то вкладкой по умолчанию будет вкладка Svacer, иначе — вкладка LDAP.&lt;br /&gt;
&lt;br /&gt;
Также возможно полностью отключить механизм внутренней аутентификации Svacer с помощью параметра '''auth.svacer.enabled'''.&lt;br /&gt;
&lt;br /&gt;
Ниже приведен пример конфигурационного файла Svacer для задания вкладки LDAP по умолчанию (в случае наличие интеграции с LDAP сервером)&amp;lt;pre class=&amp;quot;plaintext&amp;quot;&amp;gt;auth:&lt;br /&gt;
  svacer:&lt;br /&gt;
    enabled: true&lt;br /&gt;
    default: false&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Настройка защиты от перебора паролей пользователей ====&lt;br /&gt;
Для случаев аутентификации с помощью LDAP сервера и с помощью встроенного механизма аутентификации реализован механизм блокировки учетных записей пользователей в том случае, если количество неудачных попыток входа превышает заданное в настройках число. По умолчанию защита отключена. Ниже приведен пример секции конфигурационного файла Svacer, задающего правила блокировки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;plaintext&amp;quot;&amp;gt;security:&lt;br /&gt;
  login:&lt;br /&gt;
    max_attempts: 5&lt;br /&gt;
    lock_time: 2m&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Время, на которое происходит блокировка учетной записи пользователя, указывается в формате golang/time: 1s,1m,60m и т. д.&lt;br /&gt;
&lt;br /&gt;
В случае активации защиты данный механизм также защищает аутентификацию посредством вызовов соответствующих точек входа public API.&lt;br /&gt;
&lt;br /&gt;
Блокировка не влияет на работу уже зарегистрированных пользователей.&lt;br /&gt;
&lt;br /&gt;
Для принудительной разблокировки пользователей можно использовать команды cli (требуются права управления сервером):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;svacer user-provider unlock --user admin --password admin --login locked_user&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка TLS ===&lt;br /&gt;
Svacer может быть сконфигурирован для поддержки TLS несколькими способами. Первый способ — использовать reverse proxy с поддержкой HTTPS и проксированием в Svacer по HTTP, второй — запуск Svacer с нативной поддержкой TLS.&lt;br /&gt;
&lt;br /&gt;
==== Reverse proxy ====&lt;br /&gt;
Данный способ позволяет обеспечить безопасную передачу данных только по протоколу HTTPS, данные по протоколу gRPC передаются в незащищенном виде.&lt;br /&gt;
&lt;br /&gt;
===== Nginx =====&lt;br /&gt;
Создайте конфигурационный файл с подобным содержанием в '''/etc/nginx/sites-enabled/''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen 443 ssl;&lt;br /&gt;
    listen [::]:443 ssl;&lt;br /&gt;
&lt;br /&gt;
    server_name svacer.ispras.ru;&lt;br /&gt;
&lt;br /&gt;
    # for large data transfers and continuous connections&lt;br /&gt;
    client_max_body_size        0;&lt;br /&gt;
    proxy_connect_timeout       600;&lt;br /&gt;
    proxy_send_timeout          600;&lt;br /&gt;
    proxy_read_timeout          600;&lt;br /&gt;
    send_timeout                600;&lt;br /&gt;
&lt;br /&gt;
    # path to ssl-certificate and key&lt;br /&gt;
    ssl_certificate /etc/ssl/certs/svacer.ispras.ru.crt;&lt;br /&gt;
    ssl_certificate_key /etc/ssl/private/svacer.ispras.ru.key;&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        include proxy_params;&lt;br /&gt;
&lt;br /&gt;
        # to make WebSockets work&lt;br /&gt;
        proxy_http_version  1.1;&lt;br /&gt;
        proxy_set_header    Upgrade $http_upgrade;&lt;br /&gt;
        proxy_set_header    Connection &amp;quot;upgrade&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        # svacer HTTP URL&lt;br /&gt;
        proxy_pass http://127.0.0.1:8080;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# proxy gRPC port if required&lt;br /&gt;
server {&lt;br /&gt;
    listen 13002 http2;&lt;br /&gt;
    underscores_in_headers on;&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        grpc_pass grpc://127.0.0.1:3002;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В этом конфигурационном файле укажите нужное имя сервера, пути к сертификату (можно использовать fullchain-сертификат) и ключу, а также адрес сервера Svacer, куда проксировать. После этого перезапустите Nginx.&lt;br /&gt;
  systemctl restart nginx&lt;br /&gt;
&lt;br /&gt;
Если ваш сервер виден из интернета и его внешний IP-адрес привязан к доменному имени, можете использовать Let's Encrypt и Certbot для получения валидного SSL-сертификата. См. [https://www.nginx.com/blog/using-free-ssltls-certificates-from-lets-encrypt-with-nginx/ эту инструкцию].&lt;br /&gt;
&lt;br /&gt;
===== Apache =====&lt;br /&gt;
Включите нужные модули в Apache&lt;br /&gt;
  sudo a2enmod ssl proxy proxy_http rewrite&lt;br /&gt;
&lt;br /&gt;
Создайте конфигурационный файл с подобным содержанием в '''/etc/apache2/sites-enabled/'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
    SSLEngine On&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyTimeout 600&lt;br /&gt;
    &lt;br /&gt;
    # path to ssl-certificate and key&lt;br /&gt;
    SSLCertificateFile /etc/ssl/certs/svacer.ispras.ru.crt&lt;br /&gt;
    SSLCertificateKeyFile /etc/ssl/private/svacer.ispras.ru.key&lt;br /&gt;
    &lt;br /&gt;
    # svacer HTTP URL&lt;br /&gt;
    ProxyPass / http://127.0.0.1:8080/&lt;br /&gt;
    ProxyPassReverse / http://127.0.0.1:8080/&lt;br /&gt;
&lt;br /&gt;
    # to make WebSockets work&lt;br /&gt;
    ProxyPass /api/ws/ ws://127.0.0.1:8080/api/ws/&lt;br /&gt;
    ProxyPassReverse /api/ws/ ws://127.0.0.1:8080/api/ws/&lt;br /&gt;
    RewriteEngine on&lt;br /&gt;
    RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]&lt;br /&gt;
    RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]&lt;br /&gt;
    RewriteRule /api/ws/(.*) ws://127.0.0.1:8080%{REQUEST_URI} [P]&lt;br /&gt;
&lt;br /&gt;
    ServerName svacer.ispras.ru&lt;br /&gt;
    ServerAdmin svacer@ispras.ru&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В этом конфигурационном файле укажите нужное имя сервера, пути к сертификату (можно использовать fullchain-сертификат) и ключу, а также адрес сервера Svacer, куда проксировать. После этого перезапустите Apache.&lt;br /&gt;
  systemctl restart apache2&lt;br /&gt;
&lt;br /&gt;
==== Нативно ====&lt;br /&gt;
Этот способ позволяет обеспечить безопасную передачу данных как по протоколу HTTPS, так и по протоколу gRPC. Если сервер запускается с поддержкой TLS, то эта опция относится как к протоколу HTTPS, так и к протоколу gRPC.&lt;br /&gt;
По умолчанию сервер запускается без поддержки TLS, при этом в логах отображается информация об этом.&lt;br /&gt;
 TLS for REST and gRPC DISABLED&lt;br /&gt;
&lt;br /&gt;
Для запуска сервера с поддержкой TLS необходимо указать сертификат сервера и соответствующий закрытый ключ.&lt;br /&gt;
 svacer-server run --ssl-cert svacer.crt --ssl-key svacer.key&lt;br /&gt;
&lt;br /&gt;
При этом ключ должен быть в незашифрованном виде. Права доступа к файлу должны быть 0600. В файле сертификата можно указывать цепочку сертификатов. В этом случае сервер, при подключении клиента, будет возвращать всю цепочку. Первым сертификатом в цепочке всегда должен идти сертификат сервера Svacer. Формат файла — PEM. TLS соединение активируется и для протокола REST и для протокола gRPC. &lt;br /&gt;
&lt;br /&gt;
Работа сервера по проктолу TLS сопровождается следующей записью в логе:&lt;br /&gt;
 Using TLS for REST and gRPC protocols&lt;br /&gt;
&lt;br /&gt;
Работа с таким сервером через CLI происходит как обычно. Для указания необходимости подключаться по TLS можно явно указать протокол в параметре '''--host''', либо добавить опцию '''--ssl'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 svacer upload --host https://example.com&lt;br /&gt;
 svacer upload --ssl --host example.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Также в клиенте можно определить параметр '''--ssl-ca-certs'''. Он позволяет задать доверенные сертификаты корневых центров. Указывается шаблон файлов (с *) или конкретный файл. Путь к директории должен быть абсолютным. В случае отсутствия этого параметра используется TLS, но сертификат сервера не проверяется. Этому случаю соответствует запись в логе клиента:&lt;br /&gt;
 Using weak TLS configuration, because no CA certificate found&lt;br /&gt;
&lt;br /&gt;
Если сертификаты были загружены, в логе будет строчка:&lt;br /&gt;
 added 1 ca certs from /home/user/svacer/svacer.crt&lt;br /&gt;
&lt;br /&gt;
Для администрирования сервера в плане используемого сертификата (например, замена при истечении срока действия) добавлена область в CLI svacer admin: '''server:config'''. В данной области есть 3 команды: '''show''', '''reload''', '''update'''. ID в этом случае нужно всегда указывать в значение '''ssl.cert'''.&lt;br /&gt;
 &lt;br /&gt;
* '''show''' — отображает текущий используемый сертификат&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;pre&amp;gt;svacer admin --ssl --host example.com --user admin --password admin --scope server:config --id ssl.cert --action show&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''reload''' — заставляет сервер перечитать использованные при старте сервера файлы с сертификатом и ключом&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;pre&amp;gt;svacer admin --ssl --host example.com --user admin --password admin --scope server:config --id ssl.cert --action reload&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''update''' — позволяет переслать на сервер новый сертификат (и ключ, если надо) и записать их в указанные при старте сервера файлы. При использовании этой команды нужно сформировать файл с новым сертификатом и, при необходимости, ключом, в формате PEM (используете '''cat''' для объединения сертификата и ключа в один файл) и указать этот файл в параметре value. Если в файле не будет указан закрытый ключ, то сервером будет использован текущий (тот, что был указан при запуске). Данная команда также изменит файлы сертификата и ключа (если он указан), указанные при старте сервера, на новые значения.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;pre&amp;gt;svacer admin --ssl --host example.com --user admin --password admin --scope server:config --id ssl.cert --action update --value svacer.pem&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Некоторое время после обновления сертификата сервер может использовать старые сертификаты (для уже установленных соединений). Для новых соединений будет использован обновленный сертификат.&lt;br /&gt;
&lt;br /&gt;
В конфигурационном файле Svacer можно указать минимальную и максимальные версии TLS, поддерживаемые сервером. Для этого необходимо в конфигурационном файле указать параметры &amp;lt;code&amp;gt;minVersion&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;maxVersion&amp;lt;/code&amp;gt; в разделе security.tls. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
security:&lt;br /&gt;
  tls:&lt;br /&gt;
    minVersion: tls11&lt;br /&gt;
    maxVersion: tls12&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Интеграция с хранилищем секретов Infisical ===&lt;br /&gt;
В Svacer реализована поддержка получения секретов из хранилища секретов [https://infisical.com/ Infisical]. Подробную информацию об интеграции см. в статье [[Infisical|Интеграция с хранилищем секретов Infisical]].&lt;br /&gt;
&lt;br /&gt;
=== Механизм интеграции с внешними системами посредством Webhook-ов ===&lt;br /&gt;
&lt;br /&gt;
==== Общий принцип работы ====&lt;br /&gt;
&lt;br /&gt;
Механизм webhook-ов настраивается в конфигурационном файле в секции '''webhook'''. Механизм срабатывает при получении по внутренней шине одного из поддерживаемых событий Svacer. Каждое из внутренних событий преобразуется в событие вызова webhook-а (см. [[Help:Configuration#Модель поддерживаемых событий|Модель поддерживаемых событий]]) и отправляется на обработку в каждую из настроенных целей, которыми являются http-обработчики. Отправкой занимаются работники (их количество настраивается в конфигурационном файле в параметре '''workers_count'''). У каждой цели есть общая очередь, размер которой составляет 500 событий. Если очередь переполняется, будет выдаваться соответствующее сообщение в лог-файле Svacer.&lt;br /&gt;
&lt;br /&gt;
Работники поддерживают протокол https (в том числе самоподписанные сертификаты). Для указания корневого сертификата можно использовать параметр '''ca_certs''' конфигурационного файла. Работникам можно указать таймаут соединения с webhook-сервером (в мс, по умолчанию 1000мс, параметр '''timeout''') и количество попыток отправки (по умолчанию — одна попытка, параметр '''retry_count''').&lt;br /&gt;
&lt;br /&gt;
В настройках можно указать фильтр на отправляемые события (параметр '''filter'''). Фильтр указывается посредством задания выражения. В выражениях используется [https://github.com/expr-lang/expr синтаксис go-expr]. Фильтр возможно указать в количестве одной штуки на одну цель. Если фильтр после вычисления дает значение true, событие будет отправлено в цель.&lt;br /&gt;
&lt;br /&gt;
Также реализован журнал событий отправки webhook-ов, размер которого может быть указан в конфигурационном файле (параметр '''journal_length'''). По умолчанию он равен 86400 записей — по 1 записи на каждую секунду суток. Журнал может быть использован для отладки механизма отправки событий в цель. Содержимое журнала хранится в памяти. При достижении журналом максимального размера, самые старые записи заменяются новыми.&lt;br /&gt;
&lt;br /&gt;
Для настройки аутентификации работника можно использовать параметр '''headers''', который представляет собой список значений вида '''key:value'''. Данные пары будут добавлены в заголовки каждого http-запроса, выполняемого работником.&lt;br /&gt;
&lt;br /&gt;
==== Конфигурация ====&lt;br /&gt;
&lt;br /&gt;
Возможный пример конфигурационного файла, в котором указана отправка на сервер test-host.local событий, связанных с разметкой маркера.&lt;br /&gt;
&lt;br /&gt;
 webhook:&lt;br /&gt;
  enabled: true&lt;br /&gt;
  journal_length: 86400&lt;br /&gt;
  targets:&lt;br /&gt;
   - url: &amp;quot;&amp;lt;nowiki&amp;gt;https://test-host.local:8080/webhook&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
     workers_count: 1&lt;br /&gt;
     enabled: true     &lt;br /&gt;
     filter: &amp;quot;Type == EventReviewMarker and Payload.Status != 'Undecided'&amp;quot;&lt;br /&gt;
     ca_certs: &amp;quot;/etc/ssl/certs/ca.crt&amp;quot;&lt;br /&gt;
     retry_count: 3&lt;br /&gt;
     timeout: 1000&lt;br /&gt;
     headers:&lt;br /&gt;
        - &amp;quot;password:12345&amp;quot;&lt;br /&gt;
        - &amp;quot;Authorization: Bearer eyJh .... &amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== CLI ====&lt;br /&gt;
&lt;br /&gt;
Для взаимодействия с механизмом webhook реализованы две cli команды:&lt;br /&gt;
&lt;br /&gt;
 svacer server webhook journal&lt;br /&gt;
 svacer server webhook stat&lt;br /&gt;
&lt;br /&gt;
Первая команда позволяет посмотреть записи журнала отправки событий. Вторая команда позволяет вывести статистику по работе службы (особенно интересными могут быть поля '''sendError''' и '''skip''').&lt;br /&gt;
&lt;br /&gt;
Пример вывода для первой команды (с флагом '''--humanize'''; если флага нет, то вывод будет в формате json):&lt;br /&gt;
&lt;br /&gt;
 ==================== #1 ======================&lt;br /&gt;
 Time: 2025-07-01 12:25:52.25343534 +0300 MSK&lt;br /&gt;
 Created by: admin&lt;br /&gt;
 Error: &lt;br /&gt;
 Success: true&lt;br /&gt;
 SvacerKind: UpdateMarkerReview&lt;br /&gt;
 EventType: EventReviewMarker&lt;br /&gt;
 TargetURL: &amp;lt;nowiki&amp;gt;https://swarm-mgr.home:8080/webhook&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 ProcessTime: 6 ms&lt;br /&gt;
 ==================== #2 ======================&lt;br /&gt;
 Time: 2025-07-01 12:25:54.202850322 +0300 MSK&lt;br /&gt;
 Created by: admin&lt;br /&gt;
 Error: &lt;br /&gt;
 Success: true&lt;br /&gt;
 SvacerKind: UpdateMarkerReview&lt;br /&gt;
 EventType: EventReviewMarker&lt;br /&gt;
 TargetURL: &amp;lt;nowiki&amp;gt;https://swarm-mgr.home:8080/webhook&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 ProcessTime: 3 ms&lt;br /&gt;
&lt;br /&gt;
Пример вывода команды статистики:&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
 &amp;quot;enabled&amp;quot;: true,&lt;br /&gt;
 &amp;quot;targets&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;enabled&amp;quot;: true,&lt;br /&gt;
   &amp;quot;url&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;https://swarm-mgr.home:8080/webhook&amp;lt;/nowiki&amp;gt;&amp;quot;,&lt;br /&gt;
   &amp;quot;filtered&amp;quot;: 0,&lt;br /&gt;
   &amp;quot;sendSuccess&amp;quot;: 3,&lt;br /&gt;
   &amp;quot;sentError&amp;quot;: 0,&lt;br /&gt;
   &amp;quot;submitted&amp;quot;: 3,&lt;br /&gt;
   &amp;quot;skip&amp;quot;: 0&lt;br /&gt;
  }&lt;br /&gt;
 ]&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== Модель поддерживаемых событий ====&lt;br /&gt;
 syntax = &amp;quot;proto3&amp;quot;;&lt;br /&gt;
 import &amp;quot;google/protobuf/any.proto&amp;quot;;&lt;br /&gt;
 option go_package=&amp;quot;svacer/proto/webhook&amp;quot;;&lt;br /&gt;
 package webhook;&lt;br /&gt;
 &lt;br /&gt;
 enum EventType {&lt;br /&gt;
     EventNone = 0;&lt;br /&gt;
     EventTest = 1;&lt;br /&gt;
     EventReviewMarker = 2;&lt;br /&gt;
     EventPurgeReview = 3;&lt;br /&gt;
     EventGroupReview = 4;&lt;br /&gt;
     EventImportSnapshot = 5;&lt;br /&gt;
     EventCopySnapshot = 6;&lt;br /&gt;
     EventNewComment = 7;&lt;br /&gt;
     EventUpdateComment = 8;&lt;br /&gt;
     EventNewContainer = 9;&lt;br /&gt;
     EventDeleteContainer = 10;&lt;br /&gt;
     EventUpdateContainer  =11;&lt;br /&gt;
     EventImportMarkup = 12;&lt;br /&gt;
     EventDeleteSnapshot = 13;&lt;br /&gt;
     UpdateSnapshot = 14;&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 message MarkerDetails {&lt;br /&gt;
     string id = 1;&lt;br /&gt;
     string file = 2;&lt;br /&gt;
     string line = 3;&lt;br /&gt;
     string lang = 4;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message Event {&lt;br /&gt;
     uint64 timestamp = 1;&lt;br /&gt;
     EventType type = 2;&lt;br /&gt;
     string created_by = 3;&lt;br /&gt;
     google.protobuf.Any payload = 4;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadMarkerReview {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string snapshot_id = 5;&lt;br /&gt;
     string snapshot_name = 6;&lt;br /&gt;
     repeated MarkerDetails markers = 7;&lt;br /&gt;
     string comment = 8;&lt;br /&gt;
     string severity = 9;&lt;br /&gt;
     string action = 10;&lt;br /&gt;
     string status = 11;&lt;br /&gt;
     bool group_review = 12;&lt;br /&gt;
     string created_by_id = 13;&lt;br /&gt;
     string created_by_login = 14;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadPurgeReview {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string created_by_id = 5;&lt;br /&gt;
     string created_by_login = 6;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadImportSnapshot {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string snapshot_id = 5;&lt;br /&gt;
     string snapshot_name = 6;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadMarkerComment {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string snapshot_id = 5;&lt;br /&gt;
     string snapshot_name = 6;&lt;br /&gt;
     MarkerDetails marker = 7;&lt;br /&gt;
     string comment = 8;&lt;br /&gt;
     string created_by_id = 9;&lt;br /&gt;
     string created_by_login = 10;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadCopySnapshot {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string snapshot_id = 5;&lt;br /&gt;
     string snapshot_name = 6;&lt;br /&gt;
     string created_by_id = 7;&lt;br /&gt;
     string created_by_login = 8;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message Container {    &lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     Container source = 5;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadNewContainer {&lt;br /&gt;
     repeated Container containers = 1;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadDeleteContainer {&lt;br /&gt;
     repeated Container projects = 1;&lt;br /&gt;
     repeated Container branches = 2;    &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadUpdateContainer {&lt;br /&gt;
     Container container = 1;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message CopyResult {&lt;br /&gt;
    uint64 total = 1;&lt;br /&gt;
 	uint64 applied_reviews = 2;&lt;br /&gt;
 	uint64 applied_comments = 3;&lt;br /&gt;
 	uint64 skipped_reviews = 4;&lt;br /&gt;
 	uint64 duplicate_reviews = 5;&lt;br /&gt;
 	uint64 duplicate_comments = 6;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadImportMarkup {&lt;br /&gt;
     Container source=1;&lt;br /&gt;
     Container target=2;&lt;br /&gt;
     CopyResult copy_result =3;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message Snapshot {    &lt;br /&gt;
     string snapshot_id = 1;&lt;br /&gt;
     string snapshot_name = 2;&lt;br /&gt;
     Container container = 3;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadDeleteSnapshots {&lt;br /&gt;
      repeated Snapshot snapshots = 1;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadUpdateSnapshot {&lt;br /&gt;
     string snapshot_id = 1;&lt;br /&gt;
     string snapshot_name = 2;&lt;br /&gt;
     Container container  = 3;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Выбор сетевых интерфейсов и портов сервера ===&lt;br /&gt;
* По умолчанию web-сервер запускается на всех сетевых интерфейсах, на порту 8080 ('''0.0.0.0:8080'''). Для указания конкретного сетевого интерфейса можно использовать опцию '''--listen &amp;lt;network interface&amp;gt;''', для указания другого порта: '''--port &amp;lt;port_number&amp;gt;.&lt;br /&gt;
* Аналогично для grpc-сервера: по умолчанию — '''0.0.0.0:3002''', для выбора конкретного интерфейса: '''--listen-grpc &amp;lt;network_interface&amp;gt;''', для указания другого порта: '''--grpc &amp;lt;port_number&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
 svacer-server run --listen 127.0.0.1 --port 9090 --listen-grpc 127.0.0.1 --grpc 3004&lt;br /&gt;
&lt;br /&gt;
При попытке запуска на порту &amp;lt; 1024 от непривилегированного пользователя (например, от пользователя svacer при установке из deb/rpm пакета), сервер Svacer не запустится с ошибкой &lt;br /&gt;
&lt;br /&gt;
 ERROR: port 443 is privileged, please check current user permissions or set another rest api port&lt;br /&gt;
&lt;br /&gt;
В таком случае надо выдать capabilities на открытие привилегированных портов файлу сервера Svacer. Это нужно будет делать при каждом обновлении версии сервера&lt;br /&gt;
&lt;br /&gt;
 sudo setcap 'cap_net_bind_service=+ep' /usr/bin/svacer-server&lt;br /&gt;
&lt;br /&gt;
=== Увеличение лимита открытых файлов ===&lt;br /&gt;
Актуально только для Linux.&lt;br /&gt;
&lt;br /&gt;
Если проекты большие, или их много, в object store создается большое количество файлов. Для нормальной работы сервера Svacer при этом рекомендуется увеличивать системный лимит количества одновременно открытых файлов. &lt;br /&gt;
&lt;br /&gt;
В POSIX таких лимита два:&lt;br /&gt;
* soft nofiles — текущее максимальное значение&lt;br /&gt;
* hard nofiles — общесистемное максимальное значение&lt;br /&gt;
&lt;br /&gt;
В большинстве систем hard значение достаточно большое, а soft обычно маленькое, что и приводит к проблемам. Пример на Debian 11:&lt;br /&gt;
&lt;br /&gt;
  $ ulimit -Sn&lt;br /&gt;
  1024&lt;br /&gt;
  $ ulimit -Hn&lt;br /&gt;
  1048576&lt;br /&gt;
&lt;br /&gt;
Начиная с версии 6-0-0 Svacer пытается автоматически увеличить soft limit до значения hard limit при запуске, а начиная с версии 8-0-0 — проверяет, что увеличить удалось и выводит сообщение с текущим лимитом. Если видите в логах подобную запись — у soft и hard одно, достаточно большое значение — значит все в порядке.&lt;br /&gt;
&lt;br /&gt;
  Open files limit (soft and hard): 1048576&lt;br /&gt;
&lt;br /&gt;
Для более ранних версий, или если на вашем дистрибутиве Linux это не работает автоматически, можете увеличить лимит вручную одним из следующих способов:&lt;br /&gt;
&lt;br /&gt;
* Перед запуском Svacer выполнить из консоли команду, увеличив лимит для текущей сессии&lt;br /&gt;
  ulimit -Sn 16384&lt;br /&gt;
&lt;br /&gt;
* Либо один раз увеличить на уровне системы — в файл '''/etc/security/limits.conf''' добавить&lt;br /&gt;
&lt;br /&gt;
  * soft nofile 16384&lt;br /&gt;
&lt;br /&gt;
* Если запускаете Svacer как сервис systemd, добавьте параметр '''LimitNOFILE''' в секцию '''[Service]''' файла описания сервиса.&lt;br /&gt;
:В файле из deb/rpm пакета релиза Svacer этот параметр уже добавлен&lt;br /&gt;
&lt;br /&gt;
  [Service]&lt;br /&gt;
  LimitNOFILE=16384&lt;br /&gt;
&lt;br /&gt;
После чего выполните следующие команды, чтобы прочитать обновленный конфиг и перезапустить с ним Svacer&lt;br /&gt;
&lt;br /&gt;
  sudo systemctl daemon-reload&lt;br /&gt;
  sudo systemctl restart svacer.service&lt;br /&gt;
&lt;br /&gt;
=== Установка пути к директории для кэша ===&lt;br /&gt;
Если запускаете Svacer под пользователем без домашней директории, рекомендуется установить путь к директории для кэша через переменную окружения SVACER_CACHE_DIR в файле описания сервиса systemd&lt;br /&gt;
&lt;br /&gt;
  [Service]&lt;br /&gt;
  Environment=&amp;quot;SVACER_CACHE_DIR=/path/to/some/dir&amp;quot;&lt;br /&gt;
&lt;br /&gt;
После чего выполните следующие команды, чтобы прочитать обновленный конфиг и перезапустить с ним Svacer&lt;br /&gt;
&lt;br /&gt;
  sudo systemctl daemon-reload&lt;br /&gt;
  sudo systemctl restart svacer.service&lt;br /&gt;
&lt;br /&gt;
=== Дополнительные параметры при запуске в docker-контейнере ===&lt;br /&gt;
При запуске в докер-контейнере можно указать дополнительные параметры, к примеру добавить конфиг [[Help:CLI#Хуки|хуков]].&lt;br /&gt;
&lt;br /&gt;
Для этого переопределите команду запуска сервера Svacer в docker-compose файле и допишите туда нужные параметры:&lt;br /&gt;
&lt;br /&gt;
 command: /svacer/bin/svacer-server run --store /data/store --pg postgres://svace:svace@postgresql:5432/svace --hooks /svacer/hooks.json&lt;br /&gt;
&lt;br /&gt;
Конфигурационный файл с описанием хуков примонтируйте как volume:&lt;br /&gt;
&lt;br /&gt;
 volumes:&lt;br /&gt;
   - ./hooks.json:/svacer/hooks.json&lt;br /&gt;
&lt;br /&gt;
Можете использовать переменные из секции environment docker-compose файла, тогда в строке запуска их надо экранировать с помощью &amp;lt;code&amp;gt;$$&amp;lt;/code&amp;gt; и запускать сервер Svacer как shell-команду, чтобы в контейнере подставились значения переменных&lt;br /&gt;
&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;
   - HOOKS_FILE=/svacer/hooks.json&lt;br /&gt;
 volumes:&lt;br /&gt;
   - ./hooks.json:/svacer/hooks.json&lt;br /&gt;
 command: sh -c &amp;quot;/svacer/bin/svacer-server run --store $$STORE --pg $$SVACER_PG_URL --hooks $$HOOKS_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Для более комплексных сценариев можете собрать свой образ с сервером Svacer, использовав наш [[Dockerfile]] как референс.&lt;br /&gt;
&lt;br /&gt;
== Обновление детекторов ==&lt;br /&gt;
После установки новой версии Svace требуется обновить описания детекторов в Svacer. Для этого необходимо выполнить команду:&lt;br /&gt;
&lt;br /&gt;
  svacer checkers --upload &amp;lt;/path/to/svace&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note}} Обновление описаний детекторов это серьезная операция, которая должна выполняться после предварительного тестирования. Поэтому перед выполнением команды рекомендуется сделать резервную копию базы данных Svacer.&lt;br /&gt;
&lt;br /&gt;
== Генерация PDF на основе HTML ==&lt;br /&gt;
В релиз 10.х.х включена генерация PDF на основе рендеринга HTML с последующим запуском headless chrome/chromium для генерации PDF. Этот подход позволяет упростить формирование шаблонов для генерации PDF, но требует существенно больше вычислительных ресурсов. Для тюнинга числа параллельных процессов при генерации используется переменная окружения&lt;br /&gt;
&lt;br /&gt;
 SVACER_PDF_GEN_LIMITS=&amp;lt;pdf tool limit&amp;gt;:&amp;lt;chrome limit&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первое значение &amp;lt;code&amp;gt;&amp;lt;pdf tool limit&amp;gt;&amp;lt;/code&amp;gt; определяет число одновременных процессов pdfmerge для сборки отдельных секций в единый PDF документ; второе значение &amp;lt;code&amp;gt;&amp;lt;chrome limit&amp;gt;&amp;lt;/code&amp;gt; определяет одновременное число процессов chrome/chromium для генерации PDF из HTML. Не рекомендуется ставить значения, сильно превышающие число ядер в сервере.&lt;br /&gt;
&lt;br /&gt;
== Полнотекстовый поиск ==&lt;br /&gt;
Для поддержки полнотекстового поиска Svacer строит индекс. По умолчанию директория для индекса создается в &amp;lt;code&amp;gt;$HOME/.cache/svacer&amp;lt;/code&amp;gt;, для указания иной директории можно использовать переменную окружения &amp;lt;code&amp;gt;SVACER_SEARCH_INDEX_DIR&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В ряде случаев (падение и рестарт сервера, ошибки и т. п.) кэш может быть в некорректном состоянии. Для переиндексации данных администратор может использовать CLI команду&lt;br /&gt;
&lt;br /&gt;
 svacer search --host &amp;lt;nowiki&amp;gt;http://some_host:port&amp;lt;/nowiki&amp;gt; --user &amp;lt;login&amp;gt; --password &amp;lt;pwd&amp;gt; --drop-cache&lt;br /&gt;
&lt;br /&gt;
Используемая при этом учетная запись должна быть с правами на &amp;lt;code&amp;gt;Server administration&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При импорте результатов на сервер индексация идет в фоновой задаче, поэтому появление новых данных в результатах поиска может занять некоторое время.&lt;br /&gt;
&lt;br /&gt;
== Указание public-url ==&lt;br /&gt;
В некоторых случаях необходимо явно указывать серверу Svacer его URL-адрес. Например, это нужно для корректной генерации коротких ссылок на предупреждения и ссылок в [[Notifications|уведомлениях]]. Используйте параметр &amp;lt;code&amp;gt;--public-url&amp;lt;/code&amp;gt; при запуске сервера&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;svacer-server run --public-url http://svacer.intra.net:8080&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&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;
|SVACER_TIMEOUT_IMPORT_RESULTS&lt;br /&gt;
|15 минут&lt;br /&gt;
|Таймаут ожидания процесса начала импорта на сервере. При превышении запрос на импорт будет отклонен с ошибкой. Формат — Go Duration string: 1h2m3s. Переменная затрагивает только ожидание начала, но не ограничивает сам процесс импорта&lt;br /&gt;
|-&lt;br /&gt;
|SVACER_NUM_PARALLEL_IMPORTS&lt;br /&gt;
|(максимальное число коннектов к БД) / 2&lt;br /&gt;
|Число одновременных параллельных импортов. Остальные ждут в очереди. На ожидание влияет переменная SVACER_TIMEOUT_IMPORT_RESULTS&lt;br /&gt;
|-&lt;br /&gt;
|SVACER_TAIL_LOG_SIZE&lt;br /&gt;
|1Мб&lt;br /&gt;
|Число. Размер буфера для показа лога сервера в WebUI. Показывается последние SVACER_TAIL_LOG_SIZE байт из лога. &lt;br /&gt;
|-&lt;br /&gt;
|SVACER_LOG_FORMAT&lt;br /&gt;
|&amp;lt;пусто&amp;gt;&lt;br /&gt;
|При указании 'json' формат вывода лога заменяется на JSON. Предназначено для интеграции с агрегаторами логов. Также можно указать через флаг при старте: &amp;lt;code&amp;gt;svacer-server --log-format=json&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|SVACER_INV_GEN_JOBS&lt;br /&gt;
|0.7 * runtime.GOMAXPROCS&lt;br /&gt;
|Максимальное число параллельных заданий для генерации инвариантов при миграции старой базы или импорте результатов. При ограниченных ресурсах сервера используйте значение 1 или 2. Нельзя установить значение больше, чем GOMAXPROCS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Пересчет инвариантов ===&lt;br /&gt;
При миграции со старых версий иногда могут быть проблемы с переносом разметки. Для принудительного пересчета инвариантов запустите сервер с опцией &amp;lt;code&amp;gt;--force-invariant-refresh&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
=== Объектное хранилище ===&lt;br /&gt;
При больших размерах объектного хранилища (object store) можно запустить сервер с параметром &amp;lt;code&amp;gt;--compact-object-store&amp;lt;/code&amp;gt; — это приведет к поиску недостижимых объектов в хранилище и сокращению размера базы. Операция может занять продолжительное время.&lt;br /&gt;
&lt;br /&gt;
'''ЭКСПЕРИМЕНТАЛЬНО''': Для быстрого получения копии текущего объектного хранилища пользователь может использовать CLI команду &lt;br /&gt;
&lt;br /&gt;
 svacer server backup --host &amp;lt;nowiki&amp;gt;http://localhost:8080&amp;lt;/nowiki&amp;gt; --user admin --password &amp;lt;admin pwd&amp;gt; --checkpoint &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная команда создаст по пути &amp;lt;path&amp;gt; на '''хосте, где работает сервер''',  копию object store. При создании копии по возможности используются hard links, для ускорения процесса. Процесс работает в фоновом режиме, можно запускать его для работающего сервера.&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=3402</id>
		<title>Svacer</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Svacer&amp;diff=3402"/>
		<updated>2025-11-28T09:14:56Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: add config page&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 12.x.x&lt;br /&gt;
# [[Help:Introduction|Введение]]&lt;br /&gt;
# [[Help:Installation|Установка и обновление]]&lt;br /&gt;
# [[Configuration|Настройка сервера]]&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;
# [[Help:Utils|Дополнительные утилиты]]&lt;br /&gt;
# [[Metrics|Prometheus-метрики]]&lt;br /&gt;
# [[Pipelines|Примеры пайплайнов]]&lt;br /&gt;
# [[Notifications|Уведомления]]&lt;br /&gt;
&lt;br /&gt;
=== Релизы ===&lt;br /&gt;
Также доступны в виде docker-образа на [https://hub.docker.com/r/ispras/svacer docker hub] и как пакеты в [[Help:Installation#Установка и запуск из deb/rpm пакета|репозиториях]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! version !! distrib !! linux bin !! windows bin !! deb/rpm !! doc&lt;br /&gt;
!svace ver. checkers&lt;br /&gt;
|-&lt;br /&gt;
| 11.2.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11-2-0-linux.tar.gz svacer-11-2-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11-2-0-windows.zip svacer-11-2-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-2-0/svacer_11.2-0_amd64.deb svacer_11.2-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-2-0/svacer-11.2-0.x86_64.rpm svacer-11.2-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-2-0|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Svacer#Документация|Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 11.1.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11-1-0-linux.tar.gz svacer-11-1-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11-1-0-windows.zip svacer-11-1-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-1-0/svacer_11.1-0_amd64.deb svacer_11.1-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-1-0/svacer-11.1-0.x86_64.rpm svacer-11.1-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-1-0|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Svacer#Документация|Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 11.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11-0-0-linux.tar.gz svacer-11-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11-0-0-windows.zip svacer-11-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-11-0-0/svacer_11.0-0_amd64.deb svacer_11.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-11-0-0/svacer-11.0-0.x86_64.rpm svacer-11.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 11-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 11-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Svacer#Документация|Documentation 11.x.x]]&lt;br /&gt;
|4.0.250415&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.1&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10-0-1-linux.tar.gz svacer-10-0-1-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10-0-1-windows.zip svacer-10-0-1-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-1/svacer_10.0-1_amd64.deb svacer_10.0-1_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-1/svacer-10.0-1.x86_64.rpm svacer-10.0-1.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 10-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 10.x.x]]&lt;br /&gt;
|4.0.241102&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.0&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10-0-0-linux.tar.gz svacer-10-0-0-linux.tar.gz]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10-0-0-windows.zip svacer-10-0-0-windows.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-10-0-0/svacer_10.0-0_amd64.deb svacer_10.0-0_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-10-0-0/svacer-10.0-0.x86_64.rpm svacer-10.0-0.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 10-0-0|Changelog]]&amp;lt;br /&amp;gt;[[Release notes 10-0-0|Release notes]]&amp;lt;br /&amp;gt;[[Help:Installation#Обновление|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 10.x.x]]&lt;br /&gt;
|4.0.241102&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.2&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-9-0-2.zip svacer-9-0-2.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-2/svacer_9.0-2_amd64.deb svacer_9.0-2_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-2/svacer-9.0-2.x86_64.rpm svacer-9.0-2.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 9-0-2|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#9-0-0|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.1&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-9-0-1.zip svacer-9-0-1.zip]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer svacer]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-server svacer-server]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer.exe svacer.exe]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-server.exe svacer-server.exe]&lt;br /&gt;
| [https://svacer.ispras.ru/releases/svacer-9-0-1/svacer_9.0-1_amd64.deb svacer_9.0-1_amd64.deb]&amp;lt;br /&amp;gt;[https://svacer.ispras.ru/releases/svacer-9-0-1/svacer-9.0-1.x86_64.rpm svacer-9.0-1.x86_64.rpm]&lt;br /&gt;
| [[Changelog#Release 9-0-1|Changelog]]&amp;lt;br /&amp;gt;[[Help:Installation#9-0-0|Upgrade notes]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&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]]&amp;lt;br /&amp;gt;[[Documentation 9.x.x]]&lt;br /&gt;
|3.4.240312&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]]&amp;lt;br /&amp;gt;[[Documentation 8.x.x]]&lt;br /&gt;
|3.4.0&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]]&amp;lt;br /&amp;gt;[[Documentation 8.x.x]]&lt;br /&gt;
|3.4.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[https://svacer.ispras.ru/releases Предыдущие релизы] | [https://nextcloud.ispras.ru/index.php/s/x4r4cMJAMr5RZtd?path=%2F Еще более старые релизы]&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;
https://svacer-demo.ispras.ru&lt;br /&gt;
&lt;br /&gt;
* admin / admin — логин / пароль администратора&lt;br /&gt;
* user / user — логин / пароль пользователя&lt;br /&gt;
&lt;br /&gt;
https://svacer-ai-demo.ispras.ru/ — [[Help:XSvacer:AIAssistant|ИИ-ассистент]]&lt;br /&gt;
* admin / admin&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:Installation&amp;diff=3401</id>
		<title>Help:Installation</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:Installation&amp;diff=3401"/>
		<updated>2025-11-28T09:11:28Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: split into install and config pages&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Установка и запуск ==&lt;br /&gt;
Для использования только клиента Svacer достаточно [[Svacer#Релизы|скачать исполняемый файл]] '''svacer''', или установить [[Help:Installation#Svacer|deb/rpm пакет]].&lt;br /&gt;
&lt;br /&gt;
Сервер Svacer можно запустить в [[Help:Installation#docker compose|докере]] или из [[Help:Installation#deb/rpm|deb/rpm пакета]].&lt;br /&gt;
&lt;br /&gt;
=== docker compose ===&lt;br /&gt;
Рекомендуемый и самый простой способ деплоя — развернуть сервер Svacer в докер-контейнерах, воспользовавшиcь [https://svacer.ispras.ru/extra/docker-compose.yml docker-compose.yml] файлом:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;curl -LO https://svacer.ispras.ru/extra/docker-compose.yml&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 docker compose up -d&lt;br /&gt;
&lt;br /&gt;
После запуска контейнеров веб-интерфейс Svacer будет доступен по адресу http://localhost:8080, логин / пароль — admin / admin.&lt;br /&gt;
&lt;br /&gt;
Для сборки своего докер-образа Svacer можете использовать [[Dockerfile]] в качестве референса.&lt;br /&gt;
&lt;br /&gt;
Для указания других параметров сервера можете [[Help:Installation#Дополнительные параметры при запуске в docker-контейнере|переопределить команду запуска]] в docker-compose файле.&lt;br /&gt;
&lt;br /&gt;
=== deb/rpm ===&lt;br /&gt;
==== PostgreSQL ====&lt;br /&gt;
{{Note|type=info|text=Disclaimer&lt;br /&gt;
* Рекомендуемая версия PostgreSQL — 15 и выше. С более старыми версиями корректная работа Svacer не гарантируется.&lt;br /&gt;
* Svacer требует эксклюзивного доступа к базе. Использование одной и той же базы для нескольких экземпляров Svacer может приводить к порче данных.}}&lt;br /&gt;
&lt;br /&gt;
Для работы сервера Svacer установите PostgreSQL, следуя [https://www.postgresql.org/download/linux документации postgres]. Для RedHat-based OS нужно дополнительно установить пакет postgresql-contrib соответствующей версии.&lt;br /&gt;
&lt;br /&gt;
Пример для Ubuntu 22:&lt;br /&gt;
&lt;br /&gt;
 sudo apt install -y postgresql-common&lt;br /&gt;
 sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh&lt;br /&gt;
 sudo apt install -y postgresql-17&lt;br /&gt;
&lt;br /&gt;
Пример для Rocky Linux 9.4:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 sudo dnf -qy module disable postgresql&lt;br /&gt;
 sudo dnf install -y postgresql17-server postgresql17-contrib&lt;br /&gt;
 sudo /usr/pgsql-17/bin/postgresql-17-setup initdb&lt;br /&gt;
 sudo systemctl enable postgresql-17&lt;br /&gt;
 sudo systemctl start postgresql-17&lt;br /&gt;
&lt;br /&gt;
==== Браузер для PDF-отчетов ====&lt;br /&gt;
Для создания PDF-отчетов с использованием нового HTML-генератора установите браузер Google Chrome на машину, где запускается сервер Svacer. Рекомендуется устанавливать из официального репозитория, следуя [https://www.google.com/chrome/?platform=linux инструкции с сайта google]. &lt;br /&gt;
&lt;br /&gt;
{{Note|type=info|text=Рекомендуемые системные требования при генерации PDF-отчетов для больших проектов с использованием HTML-генератора: Intel Core i9, 64 GB RAM, SSD, видеокарта Nvidia}}&lt;br /&gt;
&lt;br /&gt;
При запуске Svacer проверит доступность браузера для генерации PDF. Если он не установлен или генерация не работает, будет использован нативный генератор: менее продвинутый, но для него не нужен браузер. Можно явно включить использование нативного генератора, передав опцию &amp;lt;code&amp;gt;--pdf-generator=native&amp;lt;/code&amp;gt; при запуске сервера Svacer.&lt;br /&gt;
&lt;br /&gt;
При невозможности установить Google Chrome, например если нет пакета для вашего дистрибутива Linux, можно установить Chromium. Его пакет в репозиториях, в зависимости от вышей ОС, может называться &amp;lt;code&amp;gt;chromium-browser&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;chromium&amp;lt;/code&amp;gt;. В некоторых случаях генерация с Chromium может не работать. Например, если Svacer установлен из deb-пакета, а Сhromium из snap (на Ubuntu он устанавливается именно так даже при использовании apt) и сервер Svacer запускается от отдельного системного пользователя, от которого Chromium не может запуститься. В этом случае установите Google Chrome, с ним генерация работает.&lt;br /&gt;
&lt;br /&gt;
==== Svacer ====&lt;br /&gt;
На Debian-based OS добавьте apt-репозиторий и установите Svacer из него.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;echo 'deb [signed-by=/usr/share/keyrings/ispras.gpg] https://repo.ispras.ru/apt /' | sudo tee /etc/apt/sources.list.d/ispras.list&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;curl -fsSL https://repo.ispras.ru/apt/key.asc | sudo gpg --dearmor -o /usr/share/keyrings/ispras.gpg&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 sudo apt update&lt;br /&gt;
 sudo apt install -y svacer&lt;br /&gt;
&lt;br /&gt;
На RedHat-based OS добавьте dnf-репозиторий и установите Svacer из него&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;curl -fsSL https://repo.ispras.ru/rpm/ispras.repo | sudo tee /etc/yum.repos.d/ispras.repo&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 sudo dnf install -y svacer&lt;br /&gt;
&lt;br /&gt;
Для создания БД PostgreSQL запустите '''psql''' от учетной записи пользователя '''postgres''' &lt;br /&gt;
&lt;br /&gt;
 sudo su -l postgres&lt;br /&gt;
 psql&lt;br /&gt;
&lt;br /&gt;
И выполните следующие запросы:&lt;br /&gt;
 create database svace;&lt;br /&gt;
 create user svace with encrypted password 'svace';&lt;br /&gt;
 grant all privileges on database svace to svace;&lt;br /&gt;
 alter user svace superuser;&lt;br /&gt;
&lt;br /&gt;
В данном примере создается БД svace и права на нее выдаются пользователю svace с паролем svace. Также этому пользователю выдаются права суперюзера, что необходимо для создания расширений в PostgreSQL. При использовании этих значений по умолчанию дальнейшая конфигурация не требуется и можно переходить к запуску.&lt;br /&gt;
&lt;br /&gt;
При использовании других значений нужно поменять параметры подключения к БД в файле '''/etc/default/svacer'''&lt;br /&gt;
&lt;br /&gt;
 SVACER_ARGS=&amp;quot;--pg postgres://&amp;lt;user&amp;gt;:&amp;lt;password&amp;gt;@127.0.0.1:5432/&amp;lt;database&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
В этой же строке можно указать прочие аргументы для запуска сервера Svacer.&lt;br /&gt;
&lt;br /&gt;
На Astra Linux необходимо в файле '''/etc/parsec/mswitch.conf''' установить параметр &amp;lt;code&amp;gt;zero_if_notfound: yes&amp;lt;/code&amp;gt;, иначе при запуске Svacer будет ошибка подключения к БД вида&lt;br /&gt;
&lt;br /&gt;
 error obtaining MAC configuration for user &amp;quot;svace&amp;quot; (SQLSTATE 57P03)&lt;br /&gt;
&lt;br /&gt;
После создания БД и конфигурации сервера Svacer запустить его можно следующими командами&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl enable svacer&lt;br /&gt;
 sudo systemctl start svacer&lt;br /&gt;
&lt;br /&gt;
После чего проверить успешность запуска командой&lt;br /&gt;
&lt;br /&gt;
 systemctl status svacer&lt;br /&gt;
&lt;br /&gt;
После запуска сервер будет доступен по адресу http://localhost:8080, логин / пароль — admin / admin.&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск на Windows ===&lt;br /&gt;
PostgreSQL нужен только для сервера Svacer, для клиента не требуется. &lt;br /&gt;
* Скачайте установщик PostgreSQL для Windows: https://www.postgresql.org/download/windows&lt;br /&gt;
* Установите PostgreSQL, выбрав, как минимум, компоненты &amp;quot;PostgreSQL Server&amp;quot; и &amp;quot;Command Line Tools&amp;quot;&lt;br /&gt;
* Задайте и запомните пароль на шаге выбора пароля для суперпользователя&lt;br /&gt;
* Остальные параметры при установке можно оставить по умолчанию&lt;br /&gt;
* После установки PostgreSQL откройте консоль, перейдите в директорию, куда установили PostgreSQL, запустите его клиент с указанием пользователя &amp;quot;postgres&amp;quot; и авторизуйтесь с паролем, заданным во время установки&lt;br /&gt;
  cd c:\Program Files\PostgreSQL\15\bin&lt;br /&gt;
  psql -U postgres&lt;br /&gt;
* Запустится консоль управления PostgreSQL. Выполните в ней следующие команды, чтобы создать БД и пользователя для Svacer&lt;br /&gt;
  create database svace;&lt;br /&gt;
  create user svace with encrypted password 'svace';&lt;br /&gt;
  grant all privileges on database svace to svace;&lt;br /&gt;
  alter user svace superuser;&lt;br /&gt;
* Выйдите из консоли PostgreSQL&lt;br /&gt;
* Запустите '''svacer-server.exe''' из консоли с указанием параметров подключения к БД. Если при создании пользователя и БД PostgreSQL вы использовали для них имя по умолчанию 'svace', как в примере выше, то указывать данные для подключения к БД при запуске сервера не обязательно&lt;br /&gt;
  svacer-server.exe run&lt;br /&gt;
* Если создавали пользователя или БД с другими именами, то при запуске сервера надо указать их явно&lt;br /&gt;
  svacer-server.exe run --pg postgres://svacer_user:svacer_password@127.0.0.1:5432/svacer_database&lt;br /&gt;
* После запуска сервера его веб-интерфейс будет доступен по адресу http://localhost:8080, логин / пароль — admin / admin&lt;br /&gt;
&lt;br /&gt;
== Обновление ==&lt;br /&gt;
{{Note|type=reminder|text='''Перед обновлением настоятельно рекомендуется [[Help:Backup|делать резервные копии]]'''}}&lt;br /&gt;
&lt;br /&gt;
Миграции схем БД PostgreSQL и object store происходят автоматически при обновлении на новую версию Svacer. Поэтому для обновления Svacer достаточно остановить сервер старой версии, запустить сервер новой версии, указав ему те же параметры БД и object store, и подождать, пока не пройдет обновление, после чего Svacer запустится как обычно. При больших объемах данных в БД это может занять существенное время, до нескольких часов. Прогресс можно отслеживать по логам сервера. &lt;br /&gt;
&lt;br /&gt;
Версии не имеют обратной совместимости, то есть после обновления на следующую версию, откатиться на предыдущую можно будет, только восстановив БД из бэкапа.&lt;br /&gt;
&lt;br /&gt;
{{Note|type=warn|text=После запуска Svacer при обновлении обязательно дождитесь пока миграция БД завершится. Если прервать процесс во время миграции, принудительно остановив Svacer, база данных может оказаться в неконсистентном состоянии и придется восстанавливать данные из бэкапа.}}&lt;br /&gt;
&lt;br /&gt;
=== Upgrade notes ===&lt;br /&gt;
==== 12-x-x ====&lt;br /&gt;
* Рекомендуем обновить PostgreSQL до версии 15 или выше. С более старыми версиями корректная работа Svacer не гарантируется&lt;br /&gt;
* Если вы использовали аутентификацию с помощью LDAP в версиях Svacer 5-1-X и у вас не работает механизм тегирования или уведомлений (подписки), см [[LDAP_configuration#Некоторые_замечания_для_пользователей,_которые_использовали_LDAP_в_версиях_Svacer_5-1-X|решение проблем с отсутствием статуса пользователя в БД]]&lt;br /&gt;
&lt;br /&gt;
==== 11-x-x ====&lt;br /&gt;
Нет специфических рекомендаций по обновлению.&lt;br /&gt;
&lt;br /&gt;
==== 10-x-x ====&lt;br /&gt;
Нет специфических рекомендаций по обновлению.&lt;br /&gt;
&lt;br /&gt;
==== 9-0-0 ====&lt;br /&gt;
{{Note|type=reminder|text=При обновлении на эту версию рекомендуем не меньше 8GB RAM для корректности миграций}}&lt;br /&gt;
&lt;br /&gt;
Базово, никаких обязательных ручных действий с базой данных или object store при обновлении на 9-0-0 не требуется. Описанные ниже шаги могут помочь увеличить производительность сервера Svacer или решить возможные проблемы.&lt;br /&gt;
&lt;br /&gt;
'''1.''' &lt;br /&gt;
&lt;br /&gt;
В версии 9-0-0 поменялся формат object store, поэтому при обновлении с предыдущих версий Svacer на 9-0-0 или выше будет запущена конвертация object store в новый формат. Конвертация сначала записывает новые данные, а потом, если все прошло успешно, удаляет старые. Из-за этого для конвертации нужно примерно в два раза больше свободного дискового пространства, чем занимает текущий object store. При больших размерах object store и медленном диске конвертация может занять много времени.&lt;br /&gt;
&lt;br /&gt;
Конвертация запустится автоматически при обновлении на 9-0-0, но можно запустить вручную отдельно:&lt;br /&gt;
&lt;br /&gt;
 svacer-server kvconvert --from &amp;lt;path&amp;gt; --to &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расположение object store в файловой системе описано в [[Help:Backup#Бэкап object store вручную|разделе про бэкапы]].&lt;br /&gt;
&lt;br /&gt;
'''2.'''&lt;br /&gt;
&lt;br /&gt;
Перед установкой новой версии рекомендуется выполнить следующий запрос в БД для удаления дубликатов описаний чекеров.&lt;br /&gt;
&lt;br /&gt;
 delete from checkers where id not in (select max(id) from checkers group by (config_id, checker_id, languages, tools));&lt;br /&gt;
&lt;br /&gt;
Если вы уже выполняли этот запрос при [[Help:Installation#8-0-0|обновлении на 8-0-0]], то второй раз запускать не обязательно.&lt;br /&gt;
&lt;br /&gt;
'''3.'''&lt;br /&gt;
&lt;br /&gt;
После обновления на версию 9-0-0 и завершения всех миграций БД (когда станет доступен веб-интерфейс) рекомендуем выполнить команду &amp;lt;code&amp;gt;VACUUM FULL&amp;lt;/code&amp;gt; в PostgreSQL для очистки и оптимизации базы данных.&lt;br /&gt;
&lt;br /&gt;
 psql -h &amp;lt;postgres_host&amp;gt; -U &amp;lt;username&amp;gt; &amp;lt;svacer_database_name&amp;gt; -c 'VACUUM FULL;'&lt;br /&gt;
&lt;br /&gt;
Например: &lt;br /&gt;
&lt;br /&gt;
 psql -h localhost -U svacer svacer_db -c 'VACUUM FULL;'&lt;br /&gt;
&lt;br /&gt;
==== 8-0-0 ====&lt;br /&gt;
Если при обновлении на версию 8-0-0 и выше возникает подобная ошибка&lt;br /&gt;
 Key (config_id, checker_id, languages, tools)=(4cd178ce-a2b2-4692-a45a-f84b145c807b, FB.ICAST_QUESTIONABLE_UNSIGNED_RIGHT_SHIFT, {JAVA}, {SpotBugs}) is duplicated&lt;br /&gt;
Это значит, что в БД есть дубликаты чекеров. Выполните следующий SQL-запрос в PostgreSQL-базе Svacer, чтобы удалить их:&lt;br /&gt;
 delete from checkers where id not in (select max(id) from checkers group by (config_id, checker_id, languages, tools));&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:Configuration&amp;diff=3400</id>
		<title>Help:Configuration</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:Configuration&amp;diff=3400"/>
		<updated>2025-11-28T09:11:24Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: create configuration page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Настройки аутентификации в Svacer ===&lt;br /&gt;
В Svacer возможны четыре способа аутентификации пользователей&lt;br /&gt;
&lt;br /&gt;
# Встроенный&lt;br /&gt;
# С помощью LDAP сервера&lt;br /&gt;
# Через утилиту oauth_proxy (по протоколу OIDC)&lt;br /&gt;
# Посредством Personal Access Token (PAT)&lt;br /&gt;
&lt;br /&gt;
Ниже рассматривается настройка аутентификации посредством внутреннего механизма аутентификации. Для настройки [[LDAP]], [[Help:CLI#Personal Access Token|PAT]] или [[OIDC]] аутентификации см. соответствующие разделы документации.&lt;br /&gt;
&lt;br /&gt;
==== Настройка внутреннего механизма аутентификации Svacer ====&lt;br /&gt;
&lt;br /&gt;
===== Настройка парольной политики внутреннего механизма аутентификации Svacer =====&lt;br /&gt;
Настройки параметров встроенного механизма аутентификации возможны посредством секции '''auth.svacer''' конфигурационного файла Svacer. Ниже приведен пример настроек:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;auth:&lt;br /&gt;
  svacer:&lt;br /&gt;
    password:&lt;br /&gt;
       min_length: 10&lt;br /&gt;
       complexity:&lt;br /&gt;
        - &amp;amp;quot;[a-z]&amp;amp;quot;&lt;br /&gt;
        - &amp;amp;quot;[A-Z]&amp;amp;quot;&lt;br /&gt;
        - &amp;amp;quot;[0-9]&amp;amp;quot;&lt;br /&gt;
        - &amp;amp;quot;[!#]&amp;amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Параметр '''min_length''' задает минимальную возможную длину пароля в системе. Данный критерий используется при смене пароля пользователя и не влияет на текущие пароли пользователей.&lt;br /&gt;
&lt;br /&gt;
Параметр '''complexity''' содержит набор регулярных выражений, задающих требования к паролю с точки зрения наличия в нем определенных символов. При задании такого списка выражений Svacer будет проверять задаваемый пользователем новый пароль на предмет удовлетворения всем этим требованиям. Каждое выражение в списке — полноценное выражение, поддерживаемое языком golang.&lt;br /&gt;
&lt;br /&gt;
Указанные выше настройки применяются только к внутренним учетным записям пользователей Svacer. По умолчанию данные настройки отключены (нет требований на минимальную длину и сложность пароля).&lt;br /&gt;
&lt;br /&gt;
===== Задание вкладки по умолчанию на странице входа в GUI Svacer (а также отключение внутренного механизма аутентификации Svacer) =====&lt;br /&gt;
В случае интеграции Svacer с LDAP, можно указать Svacer какую вкладку — Svacer или LDAP — использовать по умолчанию. Для этого используется параметр '''auth.svacer.default'''. Если данный параметр установлен в значение '''true''', то вкладкой по умолчанию будет вкладка Svacer, иначе — вкладка LDAP.&lt;br /&gt;
&lt;br /&gt;
Также возможно полностью отключить механизм внутренней аутентификации Svacer с помощью параметра '''auth.svacer.enabled'''.&lt;br /&gt;
&lt;br /&gt;
Ниже приведен пример конфигурационного файла Svacer для задания вкладки LDAP по умолчанию (в случае наличие интеграции с LDAP сервером)&amp;lt;pre class=&amp;quot;plaintext&amp;quot;&amp;gt;auth:&lt;br /&gt;
  svacer:&lt;br /&gt;
    enabled: true&lt;br /&gt;
    default: false&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Настройка защиты от перебора паролей пользователей ====&lt;br /&gt;
Для случаев аутентификации с помощью LDAP сервера и с помощью встроенного механизма аутентификации реализован механизм блокировки учетных записей пользователей в том случае, если количество неудачных попыток входа превышает заданное в настройках число. По умолчанию защита отключена. Ниже приведен пример секции конфигурационного файла Svacer, задающего правила блокировки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;plaintext&amp;quot;&amp;gt;security:&lt;br /&gt;
  login:&lt;br /&gt;
    max_attempts: 5&lt;br /&gt;
    lock_time: 2m&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Время, на которое происходит блокировка учетной записи пользователя, указывается в формате golang/time: 1s,1m,60m и т. д.&lt;br /&gt;
&lt;br /&gt;
В случае активации защиты данный механизм также защищает аутентификацию посредством вызовов соответствующих точек входа public API.&lt;br /&gt;
&lt;br /&gt;
Блокировка не влияет на работу уже зарегистрированных пользователей.&lt;br /&gt;
&lt;br /&gt;
Для принудительной разблокировки пользователей можно использовать команды cli (требуются права управления сервером):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;svacer user-provider unlock --user admin --password admin --login locked_user&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка TLS ===&lt;br /&gt;
Svacer может быть сконфигурирован для поддержки TLS несколькими способами. Первый способ — использовать reverse proxy с поддержкой HTTPS и проксированием в Svacer по HTTP, второй — запуск Svacer с нативной поддержкой TLS.&lt;br /&gt;
&lt;br /&gt;
==== Reverse proxy ====&lt;br /&gt;
Данный способ позволяет обеспечить безопасную передачу данных только по протоколу HTTPS, данные по протоколу gRPC передаются в незащищенном виде.&lt;br /&gt;
&lt;br /&gt;
===== Nginx =====&lt;br /&gt;
Создайте конфигурационный файл с подобным содержанием в '''/etc/nginx/sites-enabled/''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen 443 ssl;&lt;br /&gt;
    listen [::]:443 ssl;&lt;br /&gt;
&lt;br /&gt;
    server_name svacer.ispras.ru;&lt;br /&gt;
&lt;br /&gt;
    # for large data transfers and continuous connections&lt;br /&gt;
    client_max_body_size        0;&lt;br /&gt;
    proxy_connect_timeout       600;&lt;br /&gt;
    proxy_send_timeout          600;&lt;br /&gt;
    proxy_read_timeout          600;&lt;br /&gt;
    send_timeout                600;&lt;br /&gt;
&lt;br /&gt;
    # path to ssl-certificate and key&lt;br /&gt;
    ssl_certificate /etc/ssl/certs/svacer.ispras.ru.crt;&lt;br /&gt;
    ssl_certificate_key /etc/ssl/private/svacer.ispras.ru.key;&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        include proxy_params;&lt;br /&gt;
&lt;br /&gt;
        # to make WebSockets work&lt;br /&gt;
        proxy_http_version  1.1;&lt;br /&gt;
        proxy_set_header    Upgrade $http_upgrade;&lt;br /&gt;
        proxy_set_header    Connection &amp;quot;upgrade&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        # svacer HTTP URL&lt;br /&gt;
        proxy_pass http://127.0.0.1:8080;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# proxy gRPC port if required&lt;br /&gt;
server {&lt;br /&gt;
    listen 13002 http2;&lt;br /&gt;
    underscores_in_headers on;&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        grpc_pass grpc://127.0.0.1:3002;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В этом конфигурационном файле укажите нужное имя сервера, пути к сертификату (можно использовать fullchain-сертификат) и ключу, а также адрес сервера Svacer, куда проксировать. После этого перезапустите Nginx.&lt;br /&gt;
  systemctl restart nginx&lt;br /&gt;
&lt;br /&gt;
Если ваш сервер виден из интернета и его внешний IP-адрес привязан к доменному имени, можете использовать Let's Encrypt и Certbot для получения валидного SSL-сертификата. См. [https://www.nginx.com/blog/using-free-ssltls-certificates-from-lets-encrypt-with-nginx/ эту инструкцию].&lt;br /&gt;
&lt;br /&gt;
===== Apache =====&lt;br /&gt;
Включите нужные модули в Apache&lt;br /&gt;
  sudo a2enmod ssl proxy proxy_http rewrite&lt;br /&gt;
&lt;br /&gt;
Создайте конфигурационный файл с подобным содержанием в '''/etc/apache2/sites-enabled/'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
    SSLEngine On&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyTimeout 600&lt;br /&gt;
    &lt;br /&gt;
    # path to ssl-certificate and key&lt;br /&gt;
    SSLCertificateFile /etc/ssl/certs/svacer.ispras.ru.crt&lt;br /&gt;
    SSLCertificateKeyFile /etc/ssl/private/svacer.ispras.ru.key&lt;br /&gt;
    &lt;br /&gt;
    # svacer HTTP URL&lt;br /&gt;
    ProxyPass / http://127.0.0.1:8080/&lt;br /&gt;
    ProxyPassReverse / http://127.0.0.1:8080/&lt;br /&gt;
&lt;br /&gt;
    # to make WebSockets work&lt;br /&gt;
    ProxyPass /api/ws/ ws://127.0.0.1:8080/api/ws/&lt;br /&gt;
    ProxyPassReverse /api/ws/ ws://127.0.0.1:8080/api/ws/&lt;br /&gt;
    RewriteEngine on&lt;br /&gt;
    RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]&lt;br /&gt;
    RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]&lt;br /&gt;
    RewriteRule /api/ws/(.*) ws://127.0.0.1:8080%{REQUEST_URI} [P]&lt;br /&gt;
&lt;br /&gt;
    ServerName svacer.ispras.ru&lt;br /&gt;
    ServerAdmin svacer@ispras.ru&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В этом конфигурационном файле укажите нужное имя сервера, пути к сертификату (можно использовать fullchain-сертификат) и ключу, а также адрес сервера Svacer, куда проксировать. После этого перезапустите Apache.&lt;br /&gt;
  systemctl restart apache2&lt;br /&gt;
&lt;br /&gt;
==== Нативно ====&lt;br /&gt;
Этот способ позволяет обеспечить безопасную передачу данных как по протоколу HTTPS, так и по протоколу gRPC. Если сервер запускается с поддержкой TLS, то эта опция относится как к протоколу HTTPS, так и к протоколу gRPC.&lt;br /&gt;
По умолчанию сервер запускается без поддержки TLS, при этом в логах отображается информация об этом.&lt;br /&gt;
 TLS for REST and gRPC DISABLED&lt;br /&gt;
&lt;br /&gt;
Для запуска сервера с поддержкой TLS необходимо указать сертификат сервера и соответствующий закрытый ключ.&lt;br /&gt;
 svacer-server run --ssl-cert svacer.crt --ssl-key svacer.key&lt;br /&gt;
&lt;br /&gt;
При этом ключ должен быть в незашифрованном виде. Права доступа к файлу должны быть 0600. В файле сертификата можно указывать цепочку сертификатов. В этом случае сервер, при подключении клиента, будет возвращать всю цепочку. Первым сертификатом в цепочке всегда должен идти сертификат сервера Svacer. Формат файла — PEM. TLS соединение активируется и для протокола REST и для протокола gRPC. &lt;br /&gt;
&lt;br /&gt;
Работа сервера по проктолу TLS сопровождается следующей записью в логе:&lt;br /&gt;
 Using TLS for REST and gRPC protocols&lt;br /&gt;
&lt;br /&gt;
Работа с таким сервером через CLI происходит как обычно. Для указания необходимости подключаться по TLS можно явно указать протокол в параметре '''--host''', либо добавить опцию '''--ssl'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 svacer upload --host https://example.com&lt;br /&gt;
 svacer upload --ssl --host example.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Также в клиенте можно определить параметр '''--ssl-ca-certs'''. Он позволяет задать доверенные сертификаты корневых центров. Указывается шаблон файлов (с *) или конкретный файл. Путь к директории должен быть абсолютным. В случае отсутствия этого параметра используется TLS, но сертификат сервера не проверяется. Этому случаю соответствует запись в логе клиента:&lt;br /&gt;
 Using weak TLS configuration, because no CA certificate found&lt;br /&gt;
&lt;br /&gt;
Если сертификаты были загружены, в логе будет строчка:&lt;br /&gt;
 added 1 ca certs from /home/user/svacer/svacer.crt&lt;br /&gt;
&lt;br /&gt;
Для администрирования сервера в плане используемого сертификата (например, замена при истечении срока действия) добавлена область в CLI svacer admin: '''server:config'''. В данной области есть 3 команды: '''show''', '''reload''', '''update'''. ID в этом случае нужно всегда указывать в значение '''ssl.cert'''.&lt;br /&gt;
 &lt;br /&gt;
* '''show''' — отображает текущий используемый сертификат&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;pre&amp;gt;svacer admin --ssl --host example.com --user admin --password admin --scope server:config --id ssl.cert --action show&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''reload''' — заставляет сервер перечитать использованные при старте сервера файлы с сертификатом и ключом&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;pre&amp;gt;svacer admin --ssl --host example.com --user admin --password admin --scope server:config --id ssl.cert --action reload&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''update''' — позволяет переслать на сервер новый сертификат (и ключ, если надо) и записать их в указанные при старте сервера файлы. При использовании этой команды нужно сформировать файл с новым сертификатом и, при необходимости, ключом, в формате PEM (используете '''cat''' для объединения сертификата и ключа в один файл) и указать этот файл в параметре value. Если в файле не будет указан закрытый ключ, то сервером будет использован текущий (тот, что был указан при запуске). Данная команда также изменит файлы сертификата и ключа (если он указан), указанные при старте сервера, на новые значения.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;pre&amp;gt;svacer admin --ssl --host example.com --user admin --password admin --scope server:config --id ssl.cert --action update --value svacer.pem&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Некоторое время после обновления сертификата сервер может использовать старые сертификаты (для уже установленных соединений). Для новых соединений будет использован обновленный сертификат.&lt;br /&gt;
&lt;br /&gt;
В конфигурационном файле Svacer можно указать минимальную и максимальные версии TLS, поддерживаемые сервером. Для этого необходимо в конфигурационном файле указать параметры &amp;lt;code&amp;gt;minVersion&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;maxVersion&amp;lt;/code&amp;gt; в разделе security.tls. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
security:&lt;br /&gt;
  tls:&lt;br /&gt;
    minVersion: tls11&lt;br /&gt;
    maxVersion: tls12&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Интеграция с хранилищем секретов Infisical ===&lt;br /&gt;
В Svacer реализована поддержка получения секретов из хранилища секретов [https://infisical.com/ Infisical]. Подробную информацию об интеграции см. в статье [[Infisical|Интеграция с хранилищем секретов Infisical]].&lt;br /&gt;
&lt;br /&gt;
=== Механизм интеграции с внешними системами посредством Webhook-ов ===&lt;br /&gt;
&lt;br /&gt;
==== Общий принцип работы ====&lt;br /&gt;
&lt;br /&gt;
Механизм webhook-ов настраивается в конфигурационном файле в секции '''webhook'''. Механизм срабатывает при получении по внутренней шине одного из поддерживаемых событий Svacer. Каждое из внутренних событий преобразуется в событие вызова webhook-а (см. [[Help:Installation#Модель поддерживаемых событий|Модель поддерживаемых событий]]) и отправляется на обработку в каждую из настроенных целей, которыми являются http-обработчики. Отправкой занимаются работники (их количество настраивается в конфигурационном файле в параметре '''workers_count'''). У каждой цели есть общая очередь, размер которой составляет 500 событий. Если очередь переполняется, будет выдаваться соответствующее сообщение в лог-файле Svacer.&lt;br /&gt;
&lt;br /&gt;
Работники поддерживают протокол https (в том числе самоподписанные сертификаты). Для указания корневого сертификата можно использовать параметр '''ca_certs''' конфигурационного файла. Работникам можно указать таймаут соединения с webhook-сервером (в мс, по умолчанию 1000мс, параметр '''timeout''') и количество попыток отправки (по умолчанию — одна попытка, параметр '''retry_count''').&lt;br /&gt;
&lt;br /&gt;
В настройках можно указать фильтр на отправляемые события (параметр '''filter'''). Фильтр указывается посредством задания выражения. В выражениях используется [https://github.com/expr-lang/expr синтаксис go-expr]. Фильтр возможно указать в количестве одной штуки на одну цель. Если фильтр после вычисления дает значение true, событие будет отправлено в цель.&lt;br /&gt;
&lt;br /&gt;
Также реализован журнал событий отправки webhook-ов, размер которого может быть указан в конфигурационном файле (параметр '''journal_length'''). По умолчанию он равен 86400 записей — по 1 записи на каждую секунду суток. Журнал может быть использован для отладки механизма отправки событий в цель. Содержимое журнала хранится в памяти. При достижении журналом максимального размера, самые старые записи заменяются новыми.&lt;br /&gt;
&lt;br /&gt;
Для настройки аутентификации работника можно использовать параметр '''headers''', который представляет собой список значений вида '''key:value'''. Данные пары будут добавлены в заголовки каждого http-запроса, выполняемого работником.&lt;br /&gt;
&lt;br /&gt;
==== Конфигурация ====&lt;br /&gt;
&lt;br /&gt;
Возможный пример конфигурационного файла, в котором указана отправка на сервер test-host.local событий, связанных с разметкой маркера.&lt;br /&gt;
&lt;br /&gt;
 webhook:&lt;br /&gt;
  enabled: true&lt;br /&gt;
  journal_length: 86400&lt;br /&gt;
  targets:&lt;br /&gt;
   - url: &amp;quot;&amp;lt;nowiki&amp;gt;https://test-host.local:8080/webhook&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
     workers_count: 1&lt;br /&gt;
     enabled: true     &lt;br /&gt;
     filter: &amp;quot;Type == EventReviewMarker and Payload.Status != 'Undecided'&amp;quot;&lt;br /&gt;
     ca_certs: &amp;quot;/etc/ssl/certs/ca.crt&amp;quot;&lt;br /&gt;
     retry_count: 3&lt;br /&gt;
     timeout: 1000&lt;br /&gt;
     headers:&lt;br /&gt;
        - &amp;quot;password:12345&amp;quot;&lt;br /&gt;
        - &amp;quot;Authorization: Bearer eyJh .... &amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== CLI ====&lt;br /&gt;
&lt;br /&gt;
Для взаимодействия с механизмом webhook реализованы две cli команды:&lt;br /&gt;
&lt;br /&gt;
 svacer server webhook journal&lt;br /&gt;
 svacer server webhook stat&lt;br /&gt;
&lt;br /&gt;
Первая команда позволяет посмотреть записи журнала отправки событий. Вторая команда позволяет вывести статистику по работе службы (особенно интересными могут быть поля '''sendError''' и '''skip''').&lt;br /&gt;
&lt;br /&gt;
Пример вывода для первой команды (с флагом '''--humanize'''; если флага нет, то вывод будет в формате json):&lt;br /&gt;
&lt;br /&gt;
 ==================== #1 ======================&lt;br /&gt;
 Time: 2025-07-01 12:25:52.25343534 +0300 MSK&lt;br /&gt;
 Created by: admin&lt;br /&gt;
 Error: &lt;br /&gt;
 Success: true&lt;br /&gt;
 SvacerKind: UpdateMarkerReview&lt;br /&gt;
 EventType: EventReviewMarker&lt;br /&gt;
 TargetURL: &amp;lt;nowiki&amp;gt;https://swarm-mgr.home:8080/webhook&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 ProcessTime: 6 ms&lt;br /&gt;
 ==================== #2 ======================&lt;br /&gt;
 Time: 2025-07-01 12:25:54.202850322 +0300 MSK&lt;br /&gt;
 Created by: admin&lt;br /&gt;
 Error: &lt;br /&gt;
 Success: true&lt;br /&gt;
 SvacerKind: UpdateMarkerReview&lt;br /&gt;
 EventType: EventReviewMarker&lt;br /&gt;
 TargetURL: &amp;lt;nowiki&amp;gt;https://swarm-mgr.home:8080/webhook&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 ProcessTime: 3 ms&lt;br /&gt;
&lt;br /&gt;
Пример вывода команды статистики:&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
 &amp;quot;enabled&amp;quot;: true,&lt;br /&gt;
 &amp;quot;targets&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;enabled&amp;quot;: true,&lt;br /&gt;
   &amp;quot;url&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;https://swarm-mgr.home:8080/webhook&amp;lt;/nowiki&amp;gt;&amp;quot;,&lt;br /&gt;
   &amp;quot;filtered&amp;quot;: 0,&lt;br /&gt;
   &amp;quot;sendSuccess&amp;quot;: 3,&lt;br /&gt;
   &amp;quot;sentError&amp;quot;: 0,&lt;br /&gt;
   &amp;quot;submitted&amp;quot;: 3,&lt;br /&gt;
   &amp;quot;skip&amp;quot;: 0&lt;br /&gt;
  }&lt;br /&gt;
 ]&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== Модель поддерживаемых событий ====&lt;br /&gt;
 syntax = &amp;quot;proto3&amp;quot;;&lt;br /&gt;
 import &amp;quot;google/protobuf/any.proto&amp;quot;;&lt;br /&gt;
 option go_package=&amp;quot;svacer/proto/webhook&amp;quot;;&lt;br /&gt;
 package webhook;&lt;br /&gt;
 &lt;br /&gt;
 enum EventType {&lt;br /&gt;
     EventNone = 0;&lt;br /&gt;
     EventTest = 1;&lt;br /&gt;
     EventReviewMarker = 2;&lt;br /&gt;
     EventPurgeReview = 3;&lt;br /&gt;
     EventGroupReview = 4;&lt;br /&gt;
     EventImportSnapshot = 5;&lt;br /&gt;
     EventCopySnapshot = 6;&lt;br /&gt;
     EventNewComment = 7;&lt;br /&gt;
     EventUpdateComment = 8;&lt;br /&gt;
     EventNewContainer = 9;&lt;br /&gt;
     EventDeleteContainer = 10;&lt;br /&gt;
     EventUpdateContainer  =11;&lt;br /&gt;
     EventImportMarkup = 12;&lt;br /&gt;
     EventDeleteSnapshot = 13;&lt;br /&gt;
     UpdateSnapshot = 14;&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 message MarkerDetails {&lt;br /&gt;
     string id = 1;&lt;br /&gt;
     string file = 2;&lt;br /&gt;
     string line = 3;&lt;br /&gt;
     string lang = 4;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message Event {&lt;br /&gt;
     uint64 timestamp = 1;&lt;br /&gt;
     EventType type = 2;&lt;br /&gt;
     string created_by = 3;&lt;br /&gt;
     google.protobuf.Any payload = 4;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadMarkerReview {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string snapshot_id = 5;&lt;br /&gt;
     string snapshot_name = 6;&lt;br /&gt;
     repeated MarkerDetails markers = 7;&lt;br /&gt;
     string comment = 8;&lt;br /&gt;
     string severity = 9;&lt;br /&gt;
     string action = 10;&lt;br /&gt;
     string status = 11;&lt;br /&gt;
     bool group_review = 12;&lt;br /&gt;
     string created_by_id = 13;&lt;br /&gt;
     string created_by_login = 14;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadPurgeReview {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string created_by_id = 5;&lt;br /&gt;
     string created_by_login = 6;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadImportSnapshot {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string snapshot_id = 5;&lt;br /&gt;
     string snapshot_name = 6;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadMarkerComment {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string snapshot_id = 5;&lt;br /&gt;
     string snapshot_name = 6;&lt;br /&gt;
     MarkerDetails marker = 7;&lt;br /&gt;
     string comment = 8;&lt;br /&gt;
     string created_by_id = 9;&lt;br /&gt;
     string created_by_login = 10;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadCopySnapshot {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string snapshot_id = 5;&lt;br /&gt;
     string snapshot_name = 6;&lt;br /&gt;
     string created_by_id = 7;&lt;br /&gt;
     string created_by_login = 8;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message Container {    &lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     Container source = 5;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadNewContainer {&lt;br /&gt;
     repeated Container containers = 1;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadDeleteContainer {&lt;br /&gt;
     repeated Container projects = 1;&lt;br /&gt;
     repeated Container branches = 2;    &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadUpdateContainer {&lt;br /&gt;
     Container container = 1;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message CopyResult {&lt;br /&gt;
    uint64 total = 1;&lt;br /&gt;
 	uint64 applied_reviews = 2;&lt;br /&gt;
 	uint64 applied_comments = 3;&lt;br /&gt;
 	uint64 skipped_reviews = 4;&lt;br /&gt;
 	uint64 duplicate_reviews = 5;&lt;br /&gt;
 	uint64 duplicate_comments = 6;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadImportMarkup {&lt;br /&gt;
     Container source=1;&lt;br /&gt;
     Container target=2;&lt;br /&gt;
     CopyResult copy_result =3;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message Snapshot {    &lt;br /&gt;
     string snapshot_id = 1;&lt;br /&gt;
     string snapshot_name = 2;&lt;br /&gt;
     Container container = 3;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadDeleteSnapshots {&lt;br /&gt;
      repeated Snapshot snapshots = 1;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadUpdateSnapshot {&lt;br /&gt;
     string snapshot_id = 1;&lt;br /&gt;
     string snapshot_name = 2;&lt;br /&gt;
     Container container  = 3;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Выбор сетевых интерфейсов и портов сервера ===&lt;br /&gt;
* По умолчанию web-сервер запускается на всех сетевых интерфейсах, на порту 8080 ('''0.0.0.0:8080'''). Для указания конкретного сетевого интерфейса можно использовать опцию '''--listen &amp;lt;network interface&amp;gt;''', для указания другого порта: '''--port &amp;lt;port_number&amp;gt;.&lt;br /&gt;
* Аналогично для grpc-сервера: по умолчанию — '''0.0.0.0:3002''', для выбора конкретного интерфейса: '''--listen-grpc &amp;lt;network_interface&amp;gt;''', для указания другого порта: '''--grpc &amp;lt;port_number&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
 svacer-server run --listen 127.0.0.1 --port 9090 --listen-grpc 127.0.0.1 --grpc 3004&lt;br /&gt;
&lt;br /&gt;
При попытке запуска на порту &amp;lt; 1024 от непривилегированного пользователя (например, от пользователя svacer при установке из deb/rpm пакета), сервер Svacer не запустится с ошибкой &lt;br /&gt;
&lt;br /&gt;
 ERROR: port 443 is privileged, please check current user permissions or set another rest api port&lt;br /&gt;
&lt;br /&gt;
В таком случае надо выдать capabilities на открытие привилегированных портов файлу сервера Svacer. Это нужно будет делать при каждом обновлении версии сервера&lt;br /&gt;
&lt;br /&gt;
 sudo setcap 'cap_net_bind_service=+ep' /usr/bin/svacer-server&lt;br /&gt;
&lt;br /&gt;
=== Увеличение лимита открытых файлов ===&lt;br /&gt;
Актуально только для Linux.&lt;br /&gt;
&lt;br /&gt;
Если проекты большие, или их много, в object store создается большое количество файлов. Для нормальной работы сервера Svacer при этом рекомендуется увеличивать системный лимит количества одновременно открытых файлов. &lt;br /&gt;
&lt;br /&gt;
В POSIX таких лимита два:&lt;br /&gt;
* soft nofiles — текущее максимальное значение&lt;br /&gt;
* hard nofiles — общесистемное максимальное значение&lt;br /&gt;
&lt;br /&gt;
В большинстве систем hard значение достаточно большое, а soft обычно маленькое, что и приводит к проблемам. Пример на Debian 11:&lt;br /&gt;
&lt;br /&gt;
  $ ulimit -Sn&lt;br /&gt;
  1024&lt;br /&gt;
  $ ulimit -Hn&lt;br /&gt;
  1048576&lt;br /&gt;
&lt;br /&gt;
Начиная с версии 6-0-0 Svacer пытается автоматически увеличить soft limit до значения hard limit при запуске, а начиная с версии 8-0-0 — проверяет, что увеличить удалось и выводит сообщение с текущим лимитом. Если видите в логах подобную запись — у soft и hard одно, достаточно большое значение — значит все в порядке.&lt;br /&gt;
&lt;br /&gt;
  Open files limit (soft and hard): 1048576&lt;br /&gt;
&lt;br /&gt;
Для более ранних версий, или если на вашем дистрибутиве Linux это не работает автоматически, можете увеличить лимит вручную одним из следующих способов:&lt;br /&gt;
&lt;br /&gt;
* Перед запуском Svacer выполнить из консоли команду, увеличив лимит для текущей сессии&lt;br /&gt;
  ulimit -Sn 16384&lt;br /&gt;
&lt;br /&gt;
* Либо один раз увеличить на уровне системы — в файл '''/etc/security/limits.conf''' добавить&lt;br /&gt;
&lt;br /&gt;
  * soft nofile 16384&lt;br /&gt;
&lt;br /&gt;
* Если запускаете Svacer как сервис systemd, добавьте параметр '''LimitNOFILE''' в секцию '''[Service]''' файла описания сервиса.&lt;br /&gt;
:В файле из deb/rpm пакета релиза Svacer этот параметр уже добавлен&lt;br /&gt;
&lt;br /&gt;
  [Service]&lt;br /&gt;
  LimitNOFILE=16384&lt;br /&gt;
&lt;br /&gt;
После чего выполните следующие команды, чтобы прочитать обновленный конфиг и перезапустить с ним Svacer&lt;br /&gt;
&lt;br /&gt;
  sudo systemctl daemon-reload&lt;br /&gt;
  sudo systemctl restart svacer.service&lt;br /&gt;
&lt;br /&gt;
=== Установка пути к директории для кэша ===&lt;br /&gt;
Если запускаете Svacer под пользователем без домашней директории, рекомендуется установить путь к директории для кэша через переменную окружения SVACER_CACHE_DIR в файле описания сервиса systemd&lt;br /&gt;
&lt;br /&gt;
  [Service]&lt;br /&gt;
  Environment=&amp;quot;SVACER_CACHE_DIR=/path/to/some/dir&amp;quot;&lt;br /&gt;
&lt;br /&gt;
После чего выполните следующие команды, чтобы прочитать обновленный конфиг и перезапустить с ним Svacer&lt;br /&gt;
&lt;br /&gt;
  sudo systemctl daemon-reload&lt;br /&gt;
  sudo systemctl restart svacer.service&lt;br /&gt;
&lt;br /&gt;
=== Дополнительные параметры при запуске в docker-контейнере ===&lt;br /&gt;
При запуске в докер-контейнере можно указать дополнительные параметры, к примеру добавить конфиг [[Help:CLI#Хуки|хуков]].&lt;br /&gt;
&lt;br /&gt;
Для этого переопределите команду запуска сервера Svacer в docker-compose файле и допишите туда нужные параметры:&lt;br /&gt;
&lt;br /&gt;
 command: /svacer/bin/svacer-server run --store /data/store --pg postgres://svace:svace@postgresql:5432/svace --hooks /svacer/hooks.json&lt;br /&gt;
&lt;br /&gt;
Конфигурационный файл с описанием хуков примонтируйте как volume:&lt;br /&gt;
&lt;br /&gt;
 volumes:&lt;br /&gt;
   - ./hooks.json:/svacer/hooks.json&lt;br /&gt;
&lt;br /&gt;
Можете использовать переменные из секции environment docker-compose файла, тогда в строке запуска их надо экранировать с помощью &amp;lt;code&amp;gt;$$&amp;lt;/code&amp;gt; и запускать сервер Svacer как shell-команду, чтобы в контейнере подставились значения переменных&lt;br /&gt;
&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;
   - HOOKS_FILE=/svacer/hooks.json&lt;br /&gt;
 volumes:&lt;br /&gt;
   - ./hooks.json:/svacer/hooks.json&lt;br /&gt;
 command: sh -c &amp;quot;/svacer/bin/svacer-server run --store $$STORE --pg $$SVACER_PG_URL --hooks $$HOOKS_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Для более комплексных сценариев можете собрать свой образ с сервером Svacer, использовав наш [[Dockerfile]] как референс.&lt;br /&gt;
&lt;br /&gt;
== Обновление детекторов ==&lt;br /&gt;
После установки новой версии Svace требуется обновить описания детекторов в Svacer. Для этого необходимо выполнить команду:&lt;br /&gt;
&lt;br /&gt;
  svacer checkers --upload &amp;lt;/path/to/svace&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note}} Обновление описаний детекторов это серьезная операция, которая должна выполняться после предварительного тестирования. Поэтому перед выполнением команды рекомендуется сделать резервную копию базы данных Svacer.&lt;br /&gt;
&lt;br /&gt;
== Генерация PDF на основе HTML ==&lt;br /&gt;
В релиз 10.х.х включена генерация PDF на основе рендеринга HTML с последующим запуском headless chrome/chromium для генерации PDF. Этот подход позволяет упростить формирование шаблонов для генерации PDF, но требует существенно больше вычислительных ресурсов. Для тюнинга числа параллельных процессов при генерации используется переменная окружения&lt;br /&gt;
&lt;br /&gt;
 SVACER_PDF_GEN_LIMITS=&amp;lt;pdf tool limit&amp;gt;:&amp;lt;chrome limit&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первое значение &amp;lt;code&amp;gt;&amp;lt;pdf tool limit&amp;gt;&amp;lt;/code&amp;gt; определяет число одновременных процессов pdfmerge для сборки отдельных секций в единый PDF документ; второе значение &amp;lt;code&amp;gt;&amp;lt;chrome limit&amp;gt;&amp;lt;/code&amp;gt; определяет одновременное число процессов chrome/chromium для генерации PDF из HTML. Не рекомендуется ставить значения, сильно превышающие число ядер в сервере.&lt;br /&gt;
&lt;br /&gt;
== Полнотекстовый поиск ==&lt;br /&gt;
Для поддержки полнотекстового поиска Svacer строит индекс. По умолчанию директория для индекса создается в &amp;lt;code&amp;gt;$HOME/.cache/svacer&amp;lt;/code&amp;gt;, для указания иной директории можно использовать переменную окружения &amp;lt;code&amp;gt;SVACER_SEARCH_INDEX_DIR&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В ряде случаев (падение и рестарт сервера, ошибки и т. п.) кэш может быть в некорректном состоянии. Для переиндексации данных администратор может использовать CLI команду&lt;br /&gt;
&lt;br /&gt;
 svacer search --host &amp;lt;nowiki&amp;gt;http://some_host:port&amp;lt;/nowiki&amp;gt; --user &amp;lt;login&amp;gt; --password &amp;lt;pwd&amp;gt; --drop-cache&lt;br /&gt;
&lt;br /&gt;
Используемая при этом учетная запись должна быть с правами на &amp;lt;code&amp;gt;Server administration&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При импорте результатов на сервер индексация идет в фоновой задаче, поэтому появление новых данных в результатах поиска может занять некоторое время.&lt;br /&gt;
&lt;br /&gt;
== Указание public-url ==&lt;br /&gt;
В некоторых случаях необходимо явно указывать серверу Svacer его URL-адрес. Например, это нужно для корректной генерации коротких ссылок на предупреждения и ссылок в [[Notifications|уведомлениях]]. Используйте параметр &amp;lt;code&amp;gt;--public-url&amp;lt;/code&amp;gt; при запуске сервера&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;svacer-server run --public-url http://svacer.intra.net:8080&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&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;
|SVACER_TIMEOUT_IMPORT_RESULTS&lt;br /&gt;
|15 минут&lt;br /&gt;
|Таймаут ожидания процесса начала импорта на сервере. При превышении запрос на импорт будет отклонен с ошибкой. Формат — Go Duration string: 1h2m3s. Переменная затрагивает только ожидание начала, но не ограничивает сам процесс импорта&lt;br /&gt;
|-&lt;br /&gt;
|SVACER_NUM_PARALLEL_IMPORTS&lt;br /&gt;
|(максимальное число коннектов к БД) / 2&lt;br /&gt;
|Число одновременных параллельных импортов. Остальные ждут в очереди. На ожидание влияет переменная SVACER_TIMEOUT_IMPORT_RESULTS&lt;br /&gt;
|-&lt;br /&gt;
|SVACER_TAIL_LOG_SIZE&lt;br /&gt;
|1Мб&lt;br /&gt;
|Число. Размер буфера для показа лога сервера в WebUI. Показывается последние SVACER_TAIL_LOG_SIZE байт из лога. &lt;br /&gt;
|-&lt;br /&gt;
|SVACER_LOG_FORMAT&lt;br /&gt;
|&amp;lt;пусто&amp;gt;&lt;br /&gt;
|При указании 'json' формат вывода лога заменяется на JSON. Предназначено для интеграции с агрегаторами логов. Также можно указать через флаг при старте: &amp;lt;code&amp;gt;svacer-server --log-format=json&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|SVACER_INV_GEN_JOBS&lt;br /&gt;
|0.7 * runtime.GOMAXPROCS&lt;br /&gt;
|Максимальное число параллельных заданий для генерации инвариантов при миграции старой базы или импорте результатов. При ограниченных ресурсах сервера используйте значение 1 или 2. Нельзя установить значение больше, чем GOMAXPROCS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Пересчет инвариантов ===&lt;br /&gt;
При миграции со старых версий иногда могут быть проблемы с переносом разметки. Для принудительного пересчета инвариантов запустите сервер с опцией &amp;lt;code&amp;gt;--force-invariant-refresh&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
=== Объектное хранилище ===&lt;br /&gt;
При больших размерах объектного хранилища (object store) можно запустить сервер с параметром &amp;lt;code&amp;gt;--compact-object-store&amp;lt;/code&amp;gt; — это приведет к поиску недостижимых объектов в хранилище и сокращению размера базы. Операция может занять продолжительное время.&lt;br /&gt;
&lt;br /&gt;
'''ЭКСПЕРИМЕНТАЛЬНО''': Для быстрого получения копии текущего объектного хранилища пользователь может использовать CLI команду &lt;br /&gt;
&lt;br /&gt;
 svacer server backup --host &amp;lt;nowiki&amp;gt;http://localhost:8080&amp;lt;/nowiki&amp;gt; --user admin --password &amp;lt;admin pwd&amp;gt; --checkpoint &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная команда создаст по пути &amp;lt;path&amp;gt; на '''хосте, где работает сервер''',  копию object store. При создании копии по возможности используются hard links, для ускорения процесса. Процесс работает в фоновом режиме, можно запускать его для работающего сервера.&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
	<entry>
		<id>https://svacer.ispras.ru/mediawiki/index.php?title=Help:Installation&amp;diff=3399</id>
		<title>Help:Installation</title>
		<link rel="alternate" type="text/html" href="https://svacer.ispras.ru/mediawiki/index.php?title=Help:Installation&amp;diff=3399"/>
		<updated>2025-11-27T14:28:09Z</updated>

		<summary type="html">&lt;p&gt;Akuzmin: minor fixes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Установка и запуск ==&lt;br /&gt;
Для использования только клиента Svacer достаточно [[Svacer#Релизы|скачать исполняемый файл]] '''svacer''', или установить [[Help:Installation#Svacer|deb/rpm пакет]].&lt;br /&gt;
&lt;br /&gt;
Сервер Svacer можно запустить в [[Help:Installation#docker compose|докере]] или из [[Help:Installation#deb/rpm|deb/rpm пакета]].&lt;br /&gt;
&lt;br /&gt;
=== docker compose ===&lt;br /&gt;
Рекомендуемый и самый простой способ деплоя — развернуть сервер Svacer в докер-контейнерах, воспользовавшиcь [https://svacer.ispras.ru/extra/docker-compose.yml docker-compose.yml] файлом:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;curl -LO https://svacer.ispras.ru/extra/docker-compose.yml&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 docker compose up -d&lt;br /&gt;
&lt;br /&gt;
После запуска контейнеров веб-интерфейс Svacer будет доступен по адресу http://localhost:8080, логин / пароль — admin / admin.&lt;br /&gt;
&lt;br /&gt;
Для сборки своего докер-образа Svacer можете использовать [[Dockerfile]] в качестве референса.&lt;br /&gt;
&lt;br /&gt;
Для указания других параметров сервера можете [[Help:Installation#Дополнительные параметры при запуске в docker-контейнере|переопределить команду запуска]] в docker-compose файле.&lt;br /&gt;
&lt;br /&gt;
=== deb/rpm ===&lt;br /&gt;
==== PostgreSQL ====&lt;br /&gt;
{{Note|type=info|text=Disclaimer&lt;br /&gt;
* Рекомендуемая версия PostgreSQL — 15 и выше. С более старыми версиями корректная работа Svacer не гарантируется.&lt;br /&gt;
* Svacer требует эксклюзивного доступа к базе. Использование одной и той же базы для нескольких экземпляров Svacer может приводить к порче данных.}}&lt;br /&gt;
&lt;br /&gt;
Для работы сервера Svacer установите PostgreSQL, следуя [https://www.postgresql.org/download/linux документации postgres]. Для RedHat-based OS нужно дополнительно установить пакет postgresql-contrib соответствующей версии.&lt;br /&gt;
&lt;br /&gt;
Пример для Ubuntu 22:&lt;br /&gt;
&lt;br /&gt;
 sudo apt install -y postgresql-common&lt;br /&gt;
 sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh&lt;br /&gt;
 sudo apt install -y postgresql-17&lt;br /&gt;
&lt;br /&gt;
Пример для Rocky Linux 9.4:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 sudo dnf -qy module disable postgresql&lt;br /&gt;
 sudo dnf install -y postgresql17-server postgresql17-contrib&lt;br /&gt;
 sudo /usr/pgsql-17/bin/postgresql-17-setup initdb&lt;br /&gt;
 sudo systemctl enable postgresql-17&lt;br /&gt;
 sudo systemctl start postgresql-17&lt;br /&gt;
&lt;br /&gt;
==== Браузер для PDF-отчетов ====&lt;br /&gt;
Для создания PDF-отчетов с использованием нового HTML-генератора установите браузер Google Chrome на машину, где запускается сервер Svacer. Рекомендуется устанавливать из официального репозитория, следуя [https://www.google.com/chrome/?platform=linux инструкции с сайта google]. &lt;br /&gt;
&lt;br /&gt;
{{Note|type=info|text=Рекомендуемые системные требования при генерации PDF-отчетов для больших проектов с использованием HTML-генератора: Intel Core i9, 64 GB RAM, SSD, видеокарта Nvidia}}&lt;br /&gt;
&lt;br /&gt;
При запуске Svacer проверит доступность браузера для генерации PDF. Если он не установлен или генерация не работает, будет использован нативный генератор: менее продвинутый, но для него не нужен браузер. Можно явно включить использование нативного генератора, передав опцию &amp;lt;code&amp;gt;--pdf-generator=native&amp;lt;/code&amp;gt; при запуске сервера Svacer.&lt;br /&gt;
&lt;br /&gt;
При невозможности установить Google Chrome, например если нет пакета для вашего дистрибутива Linux, можно установить Chromium. Его пакет в репозиториях, в зависимости от вышей ОС, может называться &amp;lt;code&amp;gt;chromium-browser&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;chromium&amp;lt;/code&amp;gt;. В некоторых случаях генерация с Chromium может не работать. Например, если Svacer установлен из deb-пакета, а Сhromium из snap (на Ubuntu он устанавливается именно так даже при использовании apt) и сервер Svacer запускается от отдельного системного пользователя, от которого Chromium не может запуститься. В этом случае установите Google Chrome, с ним генерация работает.&lt;br /&gt;
&lt;br /&gt;
==== Svacer ====&lt;br /&gt;
На Debian-based OS добавьте apt-репозиторий и установите Svacer из него.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;echo 'deb [signed-by=/usr/share/keyrings/ispras.gpg] https://repo.ispras.ru/apt /' | sudo tee /etc/apt/sources.list.d/ispras.list&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;curl -fsSL https://repo.ispras.ru/apt/key.asc | sudo gpg --dearmor -o /usr/share/keyrings/ispras.gpg&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 sudo apt update&lt;br /&gt;
 sudo apt install -y svacer&lt;br /&gt;
&lt;br /&gt;
На RedHat-based OS добавьте dnf-репозиторий и установите Svacer из него&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;curl -fsSL https://repo.ispras.ru/rpm/ispras.repo | sudo tee /etc/yum.repos.d/ispras.repo&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 sudo dnf install -y svacer&lt;br /&gt;
&lt;br /&gt;
Для создания БД PostgreSQL запустите '''psql''' от учетной записи пользователя '''postgres''' &lt;br /&gt;
&lt;br /&gt;
 sudo su -l postgres&lt;br /&gt;
 psql&lt;br /&gt;
&lt;br /&gt;
И выполните следующие запросы:&lt;br /&gt;
 create database svace;&lt;br /&gt;
 create user svace with encrypted password 'svace';&lt;br /&gt;
 grant all privileges on database svace to svace;&lt;br /&gt;
 alter user svace superuser;&lt;br /&gt;
&lt;br /&gt;
В данном примере создается БД svace и права на нее выдаются пользователю svace с паролем svace. Также этому пользователю выдаются права суперюзера, что необходимо для создания расширений в PostgreSQL. При использовании этих значений по умолчанию дальнейшая конфигурация не требуется и можно переходить к запуску.&lt;br /&gt;
&lt;br /&gt;
При использовании других значений нужно поменять параметры подключения к БД в файле '''/etc/default/svacer'''&lt;br /&gt;
&lt;br /&gt;
 SVACER_ARGS=&amp;quot;--pg postgres://&amp;lt;user&amp;gt;:&amp;lt;password&amp;gt;@127.0.0.1:5432/&amp;lt;database&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
В этой же строке можно указать прочие аргументы для запуска сервера Svacer.&lt;br /&gt;
&lt;br /&gt;
На Astra Linux необходимо в файле '''/etc/parsec/mswitch.conf''' установить параметр &amp;lt;code&amp;gt;zero_if_notfound: yes&amp;lt;/code&amp;gt;, иначе при запуске Svacer будет ошибка подключения к БД вида&lt;br /&gt;
&lt;br /&gt;
 error obtaining MAC configuration for user &amp;quot;svace&amp;quot; (SQLSTATE 57P03)&lt;br /&gt;
&lt;br /&gt;
После создания БД и конфигурации сервера Svacer запустить его можно следующими командами&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl enable svacer&lt;br /&gt;
 sudo systemctl start svacer&lt;br /&gt;
&lt;br /&gt;
После чего проверить успешность запуска командой&lt;br /&gt;
&lt;br /&gt;
 systemctl status svacer&lt;br /&gt;
&lt;br /&gt;
После запуска сервер будет доступен по адресу http://localhost:8080, логин / пароль — admin / admin.&lt;br /&gt;
&lt;br /&gt;
=== Установка и запуск на Windows ===&lt;br /&gt;
PostgreSQL нужен только для сервера Svacer, для клиента не требуется. &lt;br /&gt;
* Скачайте установщик PostgreSQL для Windows: https://www.postgresql.org/download/windows&lt;br /&gt;
* Установите PostgreSQL, выбрав, как минимум, компоненты &amp;quot;PostgreSQL Server&amp;quot; и &amp;quot;Command Line Tools&amp;quot;&lt;br /&gt;
* Задайте и запомните пароль на шаге выбора пароля для суперпользователя&lt;br /&gt;
* Остальные параметры при установке можно оставить по умолчанию&lt;br /&gt;
* После установки PostgreSQL откройте консоль, перейдите в директорию, куда установили PostgreSQL, запустите его клиент с указанием пользователя &amp;quot;postgres&amp;quot; и авторизуйтесь с паролем, заданным во время установки&lt;br /&gt;
  cd c:\Program Files\PostgreSQL\15\bin&lt;br /&gt;
  psql -U postgres&lt;br /&gt;
* Запустится консоль управления PostgreSQL. Выполните в ней следующие команды, чтобы создать БД и пользователя для Svacer&lt;br /&gt;
  create database svace;&lt;br /&gt;
  create user svace with encrypted password 'svace';&lt;br /&gt;
  grant all privileges on database svace to svace;&lt;br /&gt;
  alter user svace superuser;&lt;br /&gt;
* Выйдите из консоли PostgreSQL&lt;br /&gt;
* Запустите '''svacer-server.exe''' из консоли с указанием параметров подключения к БД. Если при создании пользователя и БД PostgreSQL вы использовали для них имя по умолчанию 'svace', как в примере выше, то указывать данные для подключения к БД при запуске сервера не обязательно&lt;br /&gt;
  svacer-server.exe run&lt;br /&gt;
* Если создавали пользователя или БД с другими именами, то при запуске сервера надо указать их явно&lt;br /&gt;
  svacer-server.exe run --pg postgres://svacer_user:svacer_password@127.0.0.1:5432/svacer_database&lt;br /&gt;
* После запуска сервера его веб-интерфейс будет доступен по адресу http://localhost:8080, логин / пароль — admin / admin&lt;br /&gt;
&lt;br /&gt;
== Обновление ==&lt;br /&gt;
{{Note|type=reminder|text='''Перед обновлением настоятельно рекомендуется [[Help:Backup|делать резервные копии]]'''}}&lt;br /&gt;
&lt;br /&gt;
Миграции схем БД PostgreSQL и object store происходят автоматически при обновлении на новую версию Svacer. Поэтому для обновления Svacer достаточно остановить сервер старой версии, запустить сервер новой версии, указав ему те же параметры БД и object store, и подождать, пока не пройдет обновление, после чего Svacer запустится как обычно. При больших объемах данных в БД это может занять существенное время, до нескольких часов. Прогресс можно отслеживать по логам сервера. &lt;br /&gt;
&lt;br /&gt;
Версии не имеют обратной совместимости, то есть после обновления на следующую версию, откатиться на предыдущую можно будет, только восстановив БД из бэкапа.&lt;br /&gt;
&lt;br /&gt;
{{Note|type=warn|text=После запуска Svacer при обновлении обязательно дождитесь пока миграция БД завершится. Если прервать процесс во время миграции, принудительно остановив Svacer, база данных может оказаться в неконсистентном состоянии и придется восстанавливать данные из бэкапа.}}&lt;br /&gt;
&lt;br /&gt;
=== Upgrade notes ===&lt;br /&gt;
==== 12-x-x ====&lt;br /&gt;
* Рекомендуем обновить PostgreSQL до версии 15 или выше. С более старыми версиями корректная работа Svacer не гарантируется&lt;br /&gt;
* Если вы использовали аутентификацию с помощью LDAP в версиях Svacer 5-1-X и у вас не работает механизм тегирования или уведомлений (подписки), см [[LDAP_configuration#Некоторые_замечания_для_пользователей,_которые_использовали_LDAP_в_версиях_Svacer_5-1-X|решение проблем с отсутствием статуса пользователя в БД]]&lt;br /&gt;
&lt;br /&gt;
==== 11-x-x ====&lt;br /&gt;
Нет специфических рекомендаций по обновлению.&lt;br /&gt;
&lt;br /&gt;
==== 10-x-x ====&lt;br /&gt;
Нет специфических рекомендаций по обновлению.&lt;br /&gt;
&lt;br /&gt;
==== 9-0-0 ====&lt;br /&gt;
{{Note|type=reminder|text=При обновлении на эту версию рекомендуем не меньше 8GB RAM для корректности миграций}}&lt;br /&gt;
&lt;br /&gt;
Базово, никаких обязательных ручных действий с базой данных или object store при обновлении на 9-0-0 не требуется. Описанные ниже шаги могут помочь увеличить производительность сервера Svacer или решить возможные проблемы.&lt;br /&gt;
&lt;br /&gt;
'''1.''' &lt;br /&gt;
&lt;br /&gt;
В версии 9-0-0 поменялся формат object store, поэтому при обновлении с предыдущих версий Svacer на 9-0-0 или выше будет запущена конвертация object store в новый формат. Конвертация сначала записывает новые данные, а потом, если все прошло успешно, удаляет старые. Из-за этого для конвертации нужно примерно в два раза больше свободного дискового пространства, чем занимает текущий object store. При больших размерах object store и медленном диске конвертация может занять много времени.&lt;br /&gt;
&lt;br /&gt;
Конвертация запустится автоматически при обновлении на 9-0-0, но можно запустить вручную отдельно:&lt;br /&gt;
&lt;br /&gt;
 svacer-server kvconvert --from &amp;lt;path&amp;gt; --to &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Расположение object store в файловой системе описано в [[Help:Backup#Бэкап object store вручную|разделе про бэкапы]].&lt;br /&gt;
&lt;br /&gt;
'''2.'''&lt;br /&gt;
&lt;br /&gt;
Перед установкой новой версии рекомендуется выполнить следующий запрос в БД для удаления дубликатов описаний чекеров.&lt;br /&gt;
&lt;br /&gt;
 delete from checkers where id not in (select max(id) from checkers group by (config_id, checker_id, languages, tools));&lt;br /&gt;
&lt;br /&gt;
Если вы уже выполняли этот запрос при [[Help:Installation#8-0-0|обновлении на 8-0-0]], то второй раз запускать не обязательно.&lt;br /&gt;
&lt;br /&gt;
'''3.'''&lt;br /&gt;
&lt;br /&gt;
После обновления на версию 9-0-0 и завершения всех миграций БД (когда станет доступен веб-интерфейс) рекомендуем выполнить команду &amp;lt;code&amp;gt;VACUUM FULL&amp;lt;/code&amp;gt; в PostgreSQL для очистки и оптимизации базы данных.&lt;br /&gt;
&lt;br /&gt;
 psql -h &amp;lt;postgres_host&amp;gt; -U &amp;lt;username&amp;gt; &amp;lt;svacer_database_name&amp;gt; -c 'VACUUM FULL;'&lt;br /&gt;
&lt;br /&gt;
Например: &lt;br /&gt;
&lt;br /&gt;
 psql -h localhost -U svacer svacer_db -c 'VACUUM FULL;'&lt;br /&gt;
&lt;br /&gt;
==== 8-0-0 ====&lt;br /&gt;
Если при обновлении на версию 8-0-0 и выше возникает подобная ошибка&lt;br /&gt;
 Key (config_id, checker_id, languages, tools)=(4cd178ce-a2b2-4692-a45a-f84b145c807b, FB.ICAST_QUESTIONABLE_UNSIGNED_RIGHT_SHIFT, {JAVA}, {SpotBugs}) is duplicated&lt;br /&gt;
Это значит, что в БД есть дубликаты чекеров. Выполните следующий SQL-запрос в PostgreSQL-базе Svacer, чтобы удалить их:&lt;br /&gt;
 delete from checkers where id not in (select max(id) from checkers group by (config_id, checker_id, languages, tools));&lt;br /&gt;
&lt;br /&gt;
== Расширенная конфигурация ==&lt;br /&gt;
&lt;br /&gt;
=== Настройки аутентификации в Svacer ===&lt;br /&gt;
В Svacer возможны четыре способа аутентификации пользователей&lt;br /&gt;
&lt;br /&gt;
# Встроенный&lt;br /&gt;
# С помощью LDAP сервера&lt;br /&gt;
# Через утилиту oauth_proxy (по протоколу OIDC)&lt;br /&gt;
# Посредством Personal Access Token (PAT)&lt;br /&gt;
&lt;br /&gt;
Ниже рассматривается настройка аутентификации посредством внутреннего механизма аутентификации. Для настройки [[LDAP]], [[Help:CLI#Personal Access Token|PAT]] или [[OIDC]] аутентификации см. соответствующие разделы документации.&lt;br /&gt;
&lt;br /&gt;
==== Настройка внутреннего механизма аутентификации Svacer ====&lt;br /&gt;
&lt;br /&gt;
===== Настройка парольной политики внутреннего механизма аутентификации Svacer =====&lt;br /&gt;
Настройки параметров встроенного механизма аутентификации возможны посредством секции '''auth.svacer''' конфигурационного файла Svacer. Ниже приведен пример настроек:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;auth:&lt;br /&gt;
  svacer:&lt;br /&gt;
    password:&lt;br /&gt;
       min_length: 10&lt;br /&gt;
       complexity:&lt;br /&gt;
        - &amp;amp;quot;[a-z]&amp;amp;quot;&lt;br /&gt;
        - &amp;amp;quot;[A-Z]&amp;amp;quot;&lt;br /&gt;
        - &amp;amp;quot;[0-9]&amp;amp;quot;&lt;br /&gt;
        - &amp;amp;quot;[!#]&amp;amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Параметр '''min_length''' задает минимальную возможную длину пароля в системе. Данный критерий используется при смене пароля пользователя и не влияет на текущие пароли пользователей.&lt;br /&gt;
&lt;br /&gt;
Параметр '''complexity''' содержит набор регулярных выражений, задающих требования к паролю с точки зрения наличия в нем определенных символов. При задании такого списка выражений Svacer будет проверять задаваемый пользователем новый пароль на предмет удовлетворения всем этим требованиям. Каждое выражение в списке — полноценное выражение, поддерживаемое языком golang.&lt;br /&gt;
&lt;br /&gt;
Указанные выше настройки применяются только к внутренним учетным записям пользователей Svacer. По умолчанию данные настройки отключены (нет требований на минимальную длину и сложность пароля).&lt;br /&gt;
&lt;br /&gt;
===== Задание вкладки по умолчанию на странице входа в GUI Svacer (а также отключение внутренного механизма аутентификации Svacer) =====&lt;br /&gt;
В случае интеграции Svacer с LDAP, можно указать Svacer какую вкладку — Svacer или LDAP — использовать по умолчанию. Для этого используется параметр '''auth.svacer.default'''. Если данный параметр установлен в значение '''true''', то вкладкой по умолчанию будет вкладка Svacer, иначе — вкладка LDAP.&lt;br /&gt;
&lt;br /&gt;
Также возможно полностью отключить механизм внутренней аутентификации Svacer с помощью параметра '''auth.svacer.enabled'''.&lt;br /&gt;
&lt;br /&gt;
Ниже приведен пример конфигурационного файла Svacer для задания вкладки LDAP по умолчанию (в случае наличие интеграции с LDAP сервером)&amp;lt;pre class=&amp;quot;plaintext&amp;quot;&amp;gt;auth:&lt;br /&gt;
  svacer:&lt;br /&gt;
    enabled: true&lt;br /&gt;
    default: false&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Настройка защиты от перебора паролей пользователей ====&lt;br /&gt;
Для случаев аутентификации с помощью LDAP сервера и с помощью встроенного механизма аутентификации реализован механизм блокировки учетных записей пользователей в том случае, если количество неудачных попыток входа превышает заданное в настройках число. По умолчанию защита отключена. Ниже приведен пример секции конфигурационного файла Svacer, задающего правила блокировки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;plaintext&amp;quot;&amp;gt;security:&lt;br /&gt;
  login:&lt;br /&gt;
    max_attempts: 5&lt;br /&gt;
    lock_time: 2m&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Время, на которое происходит блокировка учетной записи пользователя, указывается в формате golang/time: 1s,1m,60m и т. д.&lt;br /&gt;
&lt;br /&gt;
В случае активации защиты данный механизм также защищает аутентификацию посредством вызовов соответствующих точек входа public API.&lt;br /&gt;
&lt;br /&gt;
Блокировка не влияет на работу уже зарегистрированных пользователей.&lt;br /&gt;
&lt;br /&gt;
Для принудительной разблокировки пользователей можно использовать команды cli (требуются права управления сервером):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;&amp;quot;&amp;gt;svacer user-provider unlock --user admin --password admin --login locked_user&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка TLS ===&lt;br /&gt;
Svacer может быть сконфигурирован для поддержки TLS несколькими способами. Первый способ — использовать reverse proxy с поддержкой HTTPS и проксированием в Svacer по HTTP, второй — запуск Svacer с нативной поддержкой TLS.&lt;br /&gt;
&lt;br /&gt;
==== Reverse proxy ====&lt;br /&gt;
Данный способ позволяет обеспечить безопасную передачу данных только по протоколу HTTPS, данные по протоколу gRPC передаются в незащищенном виде.&lt;br /&gt;
&lt;br /&gt;
===== Nginx =====&lt;br /&gt;
Создайте конфигурационный файл с подобным содержанием в '''/etc/nginx/sites-enabled/''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
    listen 443 ssl;&lt;br /&gt;
    listen [::]:443 ssl;&lt;br /&gt;
&lt;br /&gt;
    server_name svacer.ispras.ru;&lt;br /&gt;
&lt;br /&gt;
    # for large data transfers and continuous connections&lt;br /&gt;
    client_max_body_size        0;&lt;br /&gt;
    proxy_connect_timeout       600;&lt;br /&gt;
    proxy_send_timeout          600;&lt;br /&gt;
    proxy_read_timeout          600;&lt;br /&gt;
    send_timeout                600;&lt;br /&gt;
&lt;br /&gt;
    # path to ssl-certificate and key&lt;br /&gt;
    ssl_certificate /etc/ssl/certs/svacer.ispras.ru.crt;&lt;br /&gt;
    ssl_certificate_key /etc/ssl/private/svacer.ispras.ru.key;&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        include proxy_params;&lt;br /&gt;
&lt;br /&gt;
        # to make WebSockets work&lt;br /&gt;
        proxy_http_version  1.1;&lt;br /&gt;
        proxy_set_header    Upgrade $http_upgrade;&lt;br /&gt;
        proxy_set_header    Connection &amp;quot;upgrade&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        # svacer HTTP URL&lt;br /&gt;
        proxy_pass http://127.0.0.1:8080;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# proxy gRPC port if required&lt;br /&gt;
server {&lt;br /&gt;
    listen 13002 http2;&lt;br /&gt;
    underscores_in_headers on;&lt;br /&gt;
&lt;br /&gt;
    location / {&lt;br /&gt;
        grpc_pass grpc://127.0.0.1:3002;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В этом конфигурационном файле укажите нужное имя сервера, пути к сертификату (можно использовать fullchain-сертификат) и ключу, а также адрес сервера Svacer, куда проксировать. После этого перезапустите Nginx.&lt;br /&gt;
  systemctl restart nginx&lt;br /&gt;
&lt;br /&gt;
Если ваш сервер виден из интернета и его внешний IP-адрес привязан к доменному имени, можете использовать Let's Encrypt и Certbot для получения валидного SSL-сертификата. См. [https://www.nginx.com/blog/using-free-ssltls-certificates-from-lets-encrypt-with-nginx/ эту инструкцию].&lt;br /&gt;
&lt;br /&gt;
===== Apache =====&lt;br /&gt;
Включите нужные модули в Apache&lt;br /&gt;
  sudo a2enmod ssl proxy proxy_http rewrite&lt;br /&gt;
&lt;br /&gt;
Создайте конфигурационный файл с подобным содержанием в '''/etc/apache2/sites-enabled/'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
    SSLEngine On&lt;br /&gt;
    ProxyPreserveHost On&lt;br /&gt;
    ProxyTimeout 600&lt;br /&gt;
    &lt;br /&gt;
    # path to ssl-certificate and key&lt;br /&gt;
    SSLCertificateFile /etc/ssl/certs/svacer.ispras.ru.crt&lt;br /&gt;
    SSLCertificateKeyFile /etc/ssl/private/svacer.ispras.ru.key&lt;br /&gt;
    &lt;br /&gt;
    # svacer HTTP URL&lt;br /&gt;
    ProxyPass / http://127.0.0.1:8080/&lt;br /&gt;
    ProxyPassReverse / http://127.0.0.1:8080/&lt;br /&gt;
&lt;br /&gt;
    # to make WebSockets work&lt;br /&gt;
    ProxyPass /api/ws/ ws://127.0.0.1:8080/api/ws/&lt;br /&gt;
    ProxyPassReverse /api/ws/ ws://127.0.0.1:8080/api/ws/&lt;br /&gt;
    RewriteEngine on&lt;br /&gt;
    RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]&lt;br /&gt;
    RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]&lt;br /&gt;
    RewriteRule /api/ws/(.*) ws://127.0.0.1:8080%{REQUEST_URI} [P]&lt;br /&gt;
&lt;br /&gt;
    ServerName svacer.ispras.ru&lt;br /&gt;
    ServerAdmin svacer@ispras.ru&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В этом конфигурационном файле укажите нужное имя сервера, пути к сертификату (можно использовать fullchain-сертификат) и ключу, а также адрес сервера Svacer, куда проксировать. После этого перезапустите Apache.&lt;br /&gt;
  systemctl restart apache2&lt;br /&gt;
&lt;br /&gt;
==== Нативно ====&lt;br /&gt;
Этот способ позволяет обеспечить безопасную передачу данных как по протоколу HTTPS, так и по протоколу gRPC. Если сервер запускается с поддержкой TLS, то эта опция относится как к протоколу HTTPS, так и к протоколу gRPC.&lt;br /&gt;
По умолчанию сервер запускается без поддержки TLS, при этом в логах отображается информация об этом.&lt;br /&gt;
 TLS for REST and gRPC DISABLED&lt;br /&gt;
&lt;br /&gt;
Для запуска сервера с поддержкой TLS необходимо указать сертификат сервера и соответствующий закрытый ключ.&lt;br /&gt;
 svacer-server run --ssl-cert svacer.crt --ssl-key svacer.key&lt;br /&gt;
&lt;br /&gt;
При этом ключ должен быть в незашифрованном виде. Права доступа к файлу должны быть 0600. В файле сертификата можно указывать цепочку сертификатов. В этом случае сервер, при подключении клиента, будет возвращать всю цепочку. Первым сертификатом в цепочке всегда должен идти сертификат сервера Svacer. Формат файла — PEM. TLS соединение активируется и для протокола REST и для протокола gRPC. &lt;br /&gt;
&lt;br /&gt;
Работа сервера по проктолу TLS сопровождается следующей записью в логе:&lt;br /&gt;
 Using TLS for REST and gRPC protocols&lt;br /&gt;
&lt;br /&gt;
Работа с таким сервером через CLI происходит как обычно. Для указания необходимости подключаться по TLS можно явно указать протокол в параметре '''--host''', либо добавить опцию '''--ssl'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 svacer upload --host https://example.com&lt;br /&gt;
 svacer upload --ssl --host example.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Также в клиенте можно определить параметр '''--ssl-ca-certs'''. Он позволяет задать доверенные сертификаты корневых центров. Указывается шаблон файлов (с *) или конкретный файл. Путь к директории должен быть абсолютным. В случае отсутствия этого параметра используется TLS, но сертификат сервера не проверяется. Этому случаю соответствует запись в логе клиента:&lt;br /&gt;
 Using weak TLS configuration, because no CA certificate found&lt;br /&gt;
&lt;br /&gt;
Если сертификаты были загружены, в логе будет строчка:&lt;br /&gt;
 added 1 ca certs from /home/user/svacer/svacer.crt&lt;br /&gt;
&lt;br /&gt;
Для администрирования сервера в плане используемого сертификата (например, замена при истечении срока действия) добавлена область в CLI svacer admin: '''server:config'''. В данной области есть 3 команды: '''show''', '''reload''', '''update'''. ID в этом случае нужно всегда указывать в значение '''ssl.cert'''.&lt;br /&gt;
 &lt;br /&gt;
* '''show''' — отображает текущий используемый сертификат&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;pre&amp;gt;svacer admin --ssl --host example.com --user admin --password admin --scope server:config --id ssl.cert --action show&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''reload''' — заставляет сервер перечитать использованные при старте сервера файлы с сертификатом и ключом&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;pre&amp;gt;svacer admin --ssl --host example.com --user admin --password admin --scope server:config --id ssl.cert --action reload&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''update''' — позволяет переслать на сервер новый сертификат (и ключ, если надо) и записать их в указанные при старте сервера файлы. При использовании этой команды нужно сформировать файл с новым сертификатом и, при необходимости, ключом, в формате PEM (используете '''cat''' для объединения сертификата и ключа в один файл) и указать этот файл в параметре value. Если в файле не будет указан закрытый ключ, то сервером будет использован текущий (тот, что был указан при запуске). Данная команда также изменит файлы сертификата и ключа (если он указан), указанные при старте сервера, на новые значения.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;pre&amp;gt;svacer admin --ssl --host example.com --user admin --password admin --scope server:config --id ssl.cert --action update --value svacer.pem&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Некоторое время после обновления сертификата сервер может использовать старые сертификаты (для уже установленных соединений). Для новых соединений будет использован обновленный сертификат.&lt;br /&gt;
&lt;br /&gt;
В конфигурационном файле Svacer можно указать минимальную и максимальные версии TLS, поддерживаемые сервером. Для этого необходимо в конфигурационном файле указать параметры &amp;lt;code&amp;gt;minVersion&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;maxVersion&amp;lt;/code&amp;gt; в разделе security.tls. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
security:&lt;br /&gt;
  tls:&lt;br /&gt;
    minVersion: tls11&lt;br /&gt;
    maxVersion: tls12&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Интеграция с хранилищем секретов Infisical ===&lt;br /&gt;
В Svacer реализована поддержка получения секретов из хранилища секретов [https://infisical.com/ Infisical]. Подробную информацию об интеграции см. в статье [[Infisical|Интеграция с хранилищем секретов Infisical]].&lt;br /&gt;
&lt;br /&gt;
=== Механизм интеграции с внешними системами посредством Webhook-ов ===&lt;br /&gt;
&lt;br /&gt;
==== Общий принцип работы ====&lt;br /&gt;
&lt;br /&gt;
Механизм webhook-ов настраивается в конфигурационном файле в секции '''webhook'''. Механизм срабатывает при получении по внутренней шине одного из поддерживаемых событий Svacer. Каждое из внутренних событий преобразуется в событие вызова webhook-а (см. [[Help:Installation#Модель поддерживаемых событий|Модель поддерживаемых событий]]) и отправляется на обработку в каждую из настроенных целей, которыми являются http-обработчики. Отправкой занимаются работники (их количество настраивается в конфигурационном файле в параметре '''workers_count'''). У каждой цели есть общая очередь, размер которой составляет 500 событий. Если очередь переполняется, будет выдаваться соответствующее сообщение в лог-файле Svacer.&lt;br /&gt;
&lt;br /&gt;
Работники поддерживают протокол https (в том числе самоподписанные сертификаты). Для указания корневого сертификата можно использовать параметр '''ca_certs''' конфигурационного файла. Работникам можно указать таймаут соединения с webhook-сервером (в мс, по умолчанию 1000мс, параметр '''timeout''') и количество попыток отправки (по умолчанию — одна попытка, параметр '''retry_count''').&lt;br /&gt;
&lt;br /&gt;
В настройках можно указать фильтр на отправляемые события (параметр '''filter'''). Фильтр указывается посредством задания выражения. В выражениях используется [https://github.com/expr-lang/expr синтаксис go-expr]. Фильтр возможно указать в количестве одной штуки на одну цель. Если фильтр после вычисления дает значение true, событие будет отправлено в цель.&lt;br /&gt;
&lt;br /&gt;
Также реализован журнал событий отправки webhook-ов, размер которого может быть указан в конфигурационном файле (параметр '''journal_length'''). По умолчанию он равен 86400 записей — по 1 записи на каждую секунду суток. Журнал может быть использован для отладки механизма отправки событий в цель. Содержимое журнала хранится в памяти. При достижении журналом максимального размера, самые старые записи заменяются новыми.&lt;br /&gt;
&lt;br /&gt;
Для настройки аутентификации работника можно использовать параметр '''headers''', который представляет собой список значений вида '''key:value'''. Данные пары будут добавлены в заголовки каждого http-запроса, выполняемого работником.&lt;br /&gt;
&lt;br /&gt;
==== Конфигурация ====&lt;br /&gt;
&lt;br /&gt;
Возможный пример конфигурационного файла, в котором указана отправка на сервер test-host.local событий, связанных с разметкой маркера.&lt;br /&gt;
&lt;br /&gt;
 webhook:&lt;br /&gt;
  enabled: true&lt;br /&gt;
  journal_length: 86400&lt;br /&gt;
  targets:&lt;br /&gt;
   - url: &amp;quot;&amp;lt;nowiki&amp;gt;https://test-host.local:8080/webhook&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
     workers_count: 1&lt;br /&gt;
     enabled: true     &lt;br /&gt;
     filter: &amp;quot;Type == EventReviewMarker and Payload.Status != 'Undecided'&amp;quot;&lt;br /&gt;
     ca_certs: &amp;quot;/etc/ssl/certs/ca.crt&amp;quot;&lt;br /&gt;
     retry_count: 3&lt;br /&gt;
     timeout: 1000&lt;br /&gt;
     headers:&lt;br /&gt;
        - &amp;quot;password:12345&amp;quot;&lt;br /&gt;
        - &amp;quot;Authorization: Bearer eyJh .... &amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== CLI ====&lt;br /&gt;
&lt;br /&gt;
Для взаимодействия с механизмом webhook реализованы две cli команды:&lt;br /&gt;
&lt;br /&gt;
 svacer server webhook journal&lt;br /&gt;
 svacer server webhook stat&lt;br /&gt;
&lt;br /&gt;
Первая команда позволяет посмотреть записи журнала отправки событий. Вторая команда позволяет вывести статистику по работе службы (особенно интересными могут быть поля '''sendError''' и '''skip''').&lt;br /&gt;
&lt;br /&gt;
Пример вывода для первой команды (с флагом '''--humanize'''; если флага нет, то вывод будет в формате json):&lt;br /&gt;
&lt;br /&gt;
 ==================== #1 ======================&lt;br /&gt;
 Time: 2025-07-01 12:25:52.25343534 +0300 MSK&lt;br /&gt;
 Created by: admin&lt;br /&gt;
 Error: &lt;br /&gt;
 Success: true&lt;br /&gt;
 SvacerKind: UpdateMarkerReview&lt;br /&gt;
 EventType: EventReviewMarker&lt;br /&gt;
 TargetURL: &amp;lt;nowiki&amp;gt;https://swarm-mgr.home:8080/webhook&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 ProcessTime: 6 ms&lt;br /&gt;
 ==================== #2 ======================&lt;br /&gt;
 Time: 2025-07-01 12:25:54.202850322 +0300 MSK&lt;br /&gt;
 Created by: admin&lt;br /&gt;
 Error: &lt;br /&gt;
 Success: true&lt;br /&gt;
 SvacerKind: UpdateMarkerReview&lt;br /&gt;
 EventType: EventReviewMarker&lt;br /&gt;
 TargetURL: &amp;lt;nowiki&amp;gt;https://swarm-mgr.home:8080/webhook&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 ProcessTime: 3 ms&lt;br /&gt;
&lt;br /&gt;
Пример вывода команды статистики:&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
 &amp;quot;enabled&amp;quot;: true,&lt;br /&gt;
 &amp;quot;targets&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;enabled&amp;quot;: true,&lt;br /&gt;
   &amp;quot;url&amp;quot;: &amp;quot;&amp;lt;nowiki&amp;gt;https://swarm-mgr.home:8080/webhook&amp;lt;/nowiki&amp;gt;&amp;quot;,&lt;br /&gt;
   &amp;quot;filtered&amp;quot;: 0,&lt;br /&gt;
   &amp;quot;sendSuccess&amp;quot;: 3,&lt;br /&gt;
   &amp;quot;sentError&amp;quot;: 0,&lt;br /&gt;
   &amp;quot;submitted&amp;quot;: 3,&lt;br /&gt;
   &amp;quot;skip&amp;quot;: 0&lt;br /&gt;
  }&lt;br /&gt;
 ]&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== Модель поддерживаемых событий ====&lt;br /&gt;
 syntax = &amp;quot;proto3&amp;quot;;&lt;br /&gt;
 import &amp;quot;google/protobuf/any.proto&amp;quot;;&lt;br /&gt;
 option go_package=&amp;quot;svacer/proto/webhook&amp;quot;;&lt;br /&gt;
 package webhook;&lt;br /&gt;
 &lt;br /&gt;
 enum EventType {&lt;br /&gt;
     EventNone = 0;&lt;br /&gt;
     EventTest = 1;&lt;br /&gt;
     EventReviewMarker = 2;&lt;br /&gt;
     EventPurgeReview = 3;&lt;br /&gt;
     EventGroupReview = 4;&lt;br /&gt;
     EventImportSnapshot = 5;&lt;br /&gt;
     EventCopySnapshot = 6;&lt;br /&gt;
     EventNewComment = 7;&lt;br /&gt;
     EventUpdateComment = 8;&lt;br /&gt;
     EventNewContainer = 9;&lt;br /&gt;
     EventDeleteContainer = 10;&lt;br /&gt;
     EventUpdateContainer  =11;&lt;br /&gt;
     EventImportMarkup = 12;&lt;br /&gt;
     EventDeleteSnapshot = 13;&lt;br /&gt;
     UpdateSnapshot = 14;&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 message MarkerDetails {&lt;br /&gt;
     string id = 1;&lt;br /&gt;
     string file = 2;&lt;br /&gt;
     string line = 3;&lt;br /&gt;
     string lang = 4;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message Event {&lt;br /&gt;
     uint64 timestamp = 1;&lt;br /&gt;
     EventType type = 2;&lt;br /&gt;
     string created_by = 3;&lt;br /&gt;
     google.protobuf.Any payload = 4;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadMarkerReview {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string snapshot_id = 5;&lt;br /&gt;
     string snapshot_name = 6;&lt;br /&gt;
     repeated MarkerDetails markers = 7;&lt;br /&gt;
     string comment = 8;&lt;br /&gt;
     string severity = 9;&lt;br /&gt;
     string action = 10;&lt;br /&gt;
     string status = 11;&lt;br /&gt;
     bool group_review = 12;&lt;br /&gt;
     string created_by_id = 13;&lt;br /&gt;
     string created_by_login = 14;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadPurgeReview {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string created_by_id = 5;&lt;br /&gt;
     string created_by_login = 6;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadImportSnapshot {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string snapshot_id = 5;&lt;br /&gt;
     string snapshot_name = 6;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadMarkerComment {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string snapshot_id = 5;&lt;br /&gt;
     string snapshot_name = 6;&lt;br /&gt;
     MarkerDetails marker = 7;&lt;br /&gt;
     string comment = 8;&lt;br /&gt;
     string created_by_id = 9;&lt;br /&gt;
     string created_by_login = 10;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadCopySnapshot {&lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     string snapshot_id = 5;&lt;br /&gt;
     string snapshot_name = 6;&lt;br /&gt;
     string created_by_id = 7;&lt;br /&gt;
     string created_by_login = 8;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message Container {    &lt;br /&gt;
     string project_id = 1;&lt;br /&gt;
     string project_name = 2;&lt;br /&gt;
     string branch_id = 3;&lt;br /&gt;
     string branch_name = 4;&lt;br /&gt;
     Container source = 5;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadNewContainer {&lt;br /&gt;
     repeated Container containers = 1;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadDeleteContainer {&lt;br /&gt;
     repeated Container projects = 1;&lt;br /&gt;
     repeated Container branches = 2;    &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadUpdateContainer {&lt;br /&gt;
     Container container = 1;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message CopyResult {&lt;br /&gt;
    uint64 total = 1;&lt;br /&gt;
 	uint64 applied_reviews = 2;&lt;br /&gt;
 	uint64 applied_comments = 3;&lt;br /&gt;
 	uint64 skipped_reviews = 4;&lt;br /&gt;
 	uint64 duplicate_reviews = 5;&lt;br /&gt;
 	uint64 duplicate_comments = 6;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadImportMarkup {&lt;br /&gt;
     Container source=1;&lt;br /&gt;
     Container target=2;&lt;br /&gt;
     CopyResult copy_result =3;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message Snapshot {    &lt;br /&gt;
     string snapshot_id = 1;&lt;br /&gt;
     string snapshot_name = 2;&lt;br /&gt;
     Container container = 3;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadDeleteSnapshots {&lt;br /&gt;
      repeated Snapshot snapshots = 1;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 message PayloadUpdateSnapshot {&lt;br /&gt;
     string snapshot_id = 1;&lt;br /&gt;
     string snapshot_name = 2;&lt;br /&gt;
     Container container  = 3;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Выбор сетевых интерфейсов и портов сервера ===&lt;br /&gt;
* По умолчанию web-сервер запускается на всех сетевых интерфейсах, на порту 8080 ('''0.0.0.0:8080'''). Для указания конкретного сетевого интерфейса можно использовать опцию '''--listen &amp;lt;network interface&amp;gt;''', для указания другого порта: '''--port &amp;lt;port_number&amp;gt;.&lt;br /&gt;
* Аналогично для grpc-сервера: по умолчанию — '''0.0.0.0:3002''', для выбора конкретного интерфейса: '''--listen-grpc &amp;lt;network_interface&amp;gt;''', для указания другого порта: '''--grpc &amp;lt;port_number&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
 svacer-server run --listen 127.0.0.1 --port 9090 --listen-grpc 127.0.0.1 --grpc 3004&lt;br /&gt;
&lt;br /&gt;
При попытке запуска на порту &amp;lt; 1024 от непривилегированного пользователя (например, от пользователя svacer при установке из deb/rpm пакета), сервер Svacer не запустится с ошибкой &lt;br /&gt;
&lt;br /&gt;
 ERROR: port 443 is privileged, please check current user permissions or set another rest api port&lt;br /&gt;
&lt;br /&gt;
В таком случае надо выдать capabilities на открытие привилегированных портов файлу сервера Svacer. Это нужно будет делать при каждом обновлении версии сервера&lt;br /&gt;
&lt;br /&gt;
 sudo setcap 'cap_net_bind_service=+ep' /usr/bin/svacer-server&lt;br /&gt;
&lt;br /&gt;
=== Увеличение лимита открытых файлов ===&lt;br /&gt;
Актуально только для Linux.&lt;br /&gt;
&lt;br /&gt;
Если проекты большие, или их много, в object store создается большое количество файлов. Для нормальной работы сервера Svacer при этом рекомендуется увеличивать системный лимит количества одновременно открытых файлов. &lt;br /&gt;
&lt;br /&gt;
В POSIX таких лимита два:&lt;br /&gt;
* soft nofiles — текущее максимальное значение&lt;br /&gt;
* hard nofiles — общесистемное максимальное значение&lt;br /&gt;
&lt;br /&gt;
В большинстве систем hard значение достаточно большое, а soft обычно маленькое, что и приводит к проблемам. Пример на Debian 11:&lt;br /&gt;
&lt;br /&gt;
  $ ulimit -Sn&lt;br /&gt;
  1024&lt;br /&gt;
  $ ulimit -Hn&lt;br /&gt;
  1048576&lt;br /&gt;
&lt;br /&gt;
Начиная с версии 6-0-0 Svacer пытается автоматически увеличить soft limit до значения hard limit при запуске, а начиная с версии 8-0-0 — проверяет, что увеличить удалось и выводит сообщение с текущим лимитом. Если видите в логах подобную запись — у soft и hard одно, достаточно большое значение — значит все в порядке.&lt;br /&gt;
&lt;br /&gt;
  Open files limit (soft and hard): 1048576&lt;br /&gt;
&lt;br /&gt;
Для более ранних версий, или если на вашем дистрибутиве Linux это не работает автоматически, можете увеличить лимит вручную одним из следующих способов:&lt;br /&gt;
&lt;br /&gt;
* Перед запуском Svacer выполнить из консоли команду, увеличив лимит для текущей сессии&lt;br /&gt;
  ulimit -Sn 16384&lt;br /&gt;
&lt;br /&gt;
* Либо один раз увеличить на уровне системы — в файл '''/etc/security/limits.conf''' добавить&lt;br /&gt;
&lt;br /&gt;
  * soft nofile 16384&lt;br /&gt;
&lt;br /&gt;
* Если запускаете Svacer как сервис systemd, добавьте параметр '''LimitNOFILE''' в секцию '''[Service]''' файла описания сервиса.&lt;br /&gt;
:В файле из deb/rpm пакета релиза Svacer этот параметр уже добавлен&lt;br /&gt;
&lt;br /&gt;
  [Service]&lt;br /&gt;
  LimitNOFILE=16384&lt;br /&gt;
&lt;br /&gt;
После чего выполните следующие команды, чтобы прочитать обновленный конфиг и перезапустить с ним Svacer&lt;br /&gt;
&lt;br /&gt;
  sudo systemctl daemon-reload&lt;br /&gt;
  sudo systemctl restart svacer.service&lt;br /&gt;
&lt;br /&gt;
=== Установка пути к директории для кэша ===&lt;br /&gt;
Если запускаете Svacer под пользователем без домашней директории, рекомендуется установить путь к директории для кэша через переменную окружения SVACER_CACHE_DIR в файле описания сервиса systemd&lt;br /&gt;
&lt;br /&gt;
  [Service]&lt;br /&gt;
  Environment=&amp;quot;SVACER_CACHE_DIR=/path/to/some/dir&amp;quot;&lt;br /&gt;
&lt;br /&gt;
После чего выполните следующие команды, чтобы прочитать обновленный конфиг и перезапустить с ним Svacer&lt;br /&gt;
&lt;br /&gt;
  sudo systemctl daemon-reload&lt;br /&gt;
  sudo systemctl restart svacer.service&lt;br /&gt;
&lt;br /&gt;
=== Дополнительные параметры при запуске в docker-контейнере ===&lt;br /&gt;
При запуске в докер-контейнере можно указать дополнительные параметры, к примеру добавить конфиг [[Help:CLI#Хуки|хуков]].&lt;br /&gt;
&lt;br /&gt;
Для этого переопределите команду запуска сервера Svacer в docker-compose файле и допишите туда нужные параметры:&lt;br /&gt;
&lt;br /&gt;
 command: /svacer/bin/svacer-server run --store /data/store --pg postgres://svace:svace@postgresql:5432/svace --hooks /svacer/hooks.json&lt;br /&gt;
&lt;br /&gt;
Конфигурационный файл с описанием хуков примонтируйте как volume:&lt;br /&gt;
&lt;br /&gt;
 volumes:&lt;br /&gt;
   - ./hooks.json:/svacer/hooks.json&lt;br /&gt;
&lt;br /&gt;
Можете использовать переменные из секции environment docker-compose файла, тогда в строке запуска их надо экранировать с помощью &amp;lt;code&amp;gt;$$&amp;lt;/code&amp;gt; и запускать сервер Svacer как shell-команду, чтобы в контейнере подставились значения переменных&lt;br /&gt;
&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;
   - HOOKS_FILE=/svacer/hooks.json&lt;br /&gt;
 volumes:&lt;br /&gt;
   - ./hooks.json:/svacer/hooks.json&lt;br /&gt;
 command: sh -c &amp;quot;/svacer/bin/svacer-server run --store $$STORE --pg $$SVACER_PG_URL --hooks $$HOOKS_FILE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Для более комплексных сценариев можете собрать свой образ с сервером Svacer, использовав наш [[Dockerfile]] как референс.&lt;br /&gt;
&lt;br /&gt;
== Обновление детекторов ==&lt;br /&gt;
После установки новой версии Svace требуется обновить описания детекторов в Svacer. Для этого необходимо выполнить команду:&lt;br /&gt;
&lt;br /&gt;
  svacer checkers --upload &amp;lt;/path/to/svace&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note}} Обновление описаний детекторов это серьезная операция, которая должна выполняться после предварительного тестирования. Поэтому перед выполнением команды рекомендуется сделать резервную копию базы данных Svacer.&lt;br /&gt;
&lt;br /&gt;
== Генерация PDF на основе HTML ==&lt;br /&gt;
В релиз 10.х.х включена генерация PDF на основе рендеринга HTML с последующим запуском headless chrome/chromium для генерации PDF. Этот подход позволяет упростить формирование шаблонов для генерации PDF, но требует существенно больше вычислительных ресурсов. Для тюнинга числа параллельных процессов при генерации используется переменная окружения&lt;br /&gt;
&lt;br /&gt;
 SVACER_PDF_GEN_LIMITS=&amp;lt;pdf tool limit&amp;gt;:&amp;lt;chrome limit&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первое значение &amp;lt;code&amp;gt;&amp;lt;pdf tool limit&amp;gt;&amp;lt;/code&amp;gt; определяет число одновременных процессов pdfmerge для сборки отдельных секций в единый PDF документ; второе значение &amp;lt;code&amp;gt;&amp;lt;chrome limit&amp;gt;&amp;lt;/code&amp;gt; определяет одновременное число процессов chrome/chromium для генерации PDF из HTML. Не рекомендуется ставить значения, сильно превышающие число ядер в сервере.&lt;br /&gt;
&lt;br /&gt;
== Полнотекстовый поиск ==&lt;br /&gt;
Для поддержки полнотекстового поиска Svacer строит индекс. По умолчанию директория для индекса создается в &amp;lt;code&amp;gt;$HOME/.cache/svacer&amp;lt;/code&amp;gt;, для указания иной директории можно использовать переменную окружения &amp;lt;code&amp;gt;SVACER_SEARCH_INDEX_DIR&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В ряде случаев (падение и рестарт сервера, ошибки и т. п.) кэш может быть в некорректном состоянии. Для переиндексации данных администратор может использовать CLI команду&lt;br /&gt;
&lt;br /&gt;
 svacer search --host &amp;lt;nowiki&amp;gt;http://some_host:port&amp;lt;/nowiki&amp;gt; --user &amp;lt;login&amp;gt; --password &amp;lt;pwd&amp;gt; --drop-cache&lt;br /&gt;
&lt;br /&gt;
Используемая при этом учетная запись должна быть с правами на &amp;lt;code&amp;gt;Server administration&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При импорте результатов на сервер индексация идет в фоновой задаче, поэтому появление новых данных в результатах поиска может занять некоторое время.&lt;br /&gt;
&lt;br /&gt;
== Указание public-url ==&lt;br /&gt;
В некоторых случаях необходимо явно указывать серверу Svacer его URL-адрес. Например, это нужно для корректной генерации коротких ссылок на предупреждения и ссылок в [[Notifications|уведомлениях]]. Используйте параметр &amp;lt;code&amp;gt;--public-url&amp;lt;/code&amp;gt; при запуске сервера&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;svacer-server run --public-url http://svacer.intra.net:8080&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&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;
|SVACER_TIMEOUT_IMPORT_RESULTS&lt;br /&gt;
|15 минут&lt;br /&gt;
|Таймаут ожидания процесса начала импорта на сервере. При превышении запрос на импорт будет отклонен с ошибкой. Формат — Go Duration string: 1h2m3s. Переменная затрагивает только ожидание начала, но не ограничивает сам процесс импорта&lt;br /&gt;
|-&lt;br /&gt;
|SVACER_NUM_PARALLEL_IMPORTS&lt;br /&gt;
|(максимальное число коннектов к БД) / 2&lt;br /&gt;
|Число одновременных параллельных импортов. Остальные ждут в очереди. На ожидание влияет переменная SVACER_TIMEOUT_IMPORT_RESULTS&lt;br /&gt;
|-&lt;br /&gt;
|SVACER_TAIL_LOG_SIZE&lt;br /&gt;
|1Мб&lt;br /&gt;
|Число. Размер буфера для показа лога сервера в WebUI. Показывается последние SVACER_TAIL_LOG_SIZE байт из лога. &lt;br /&gt;
|-&lt;br /&gt;
|SVACER_LOG_FORMAT&lt;br /&gt;
|&amp;lt;пусто&amp;gt;&lt;br /&gt;
|При указании 'json' формат вывода лога заменяется на JSON. Предназначено для интеграции с агрегаторами логов. Также можно указать через флаг при старте: &amp;lt;code&amp;gt;svacer-server --log-format=json&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|SVACER_INV_GEN_JOBS&lt;br /&gt;
|0.7 * runtime.GOMAXPROCS&lt;br /&gt;
|Максимальное число параллельных заданий для генерации инвариантов при миграции старой базы или импорте результатов. При ограниченных ресурсах сервера используйте значение 1 или 2. Нельзя установить значение больше, чем GOMAXPROCS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Пересчет инвариантов ===&lt;br /&gt;
При миграции со старых версий иногда могут быть проблемы с переносом разметки. Для принудительного пересчета инвариантов запустите сервер с опцией &amp;lt;code&amp;gt;--force-invariant-refresh&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
=== Объектное хранилище ===&lt;br /&gt;
При больших размерах объектного хранилища (object store) можно запустить сервер с параметром &amp;lt;code&amp;gt;--compact-object-store&amp;lt;/code&amp;gt; — это приведет к поиску недостижимых объектов в хранилище и сокращению размера базы. Операция может занять продолжительное время.&lt;br /&gt;
&lt;br /&gt;
'''ЭКСПЕРИМЕНТАЛЬНО''': Для быстрого получения копии текущего объектного хранилища пользователь может использовать CLI команду &lt;br /&gt;
&lt;br /&gt;
 svacer server backup --host &amp;lt;nowiki&amp;gt;http://localhost:8080&amp;lt;/nowiki&amp;gt; --user admin --password &amp;lt;admin pwd&amp;gt; --checkpoint &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная команда создаст по пути &amp;lt;path&amp;gt; на '''хосте, где работает сервер''',  копию object store. При создании копии по возможности используются hard links, для ускорения процесса. Процесс работает в фоновом режиме, можно запускать его для работающего сервера.&lt;/div&gt;</summary>
		<author><name>Akuzmin</name></author>
	</entry>
</feed>