Notifications: Difference between revisions

From Svacer Wiki
No edit summary
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Механизм подписок на внутренние события Svacer ==
== Механизм подписок на внутренние события Svacer ==


=== Общие принципы ===
=== Общие принципы ===
В Svacer реализован механизм оповещения пользователей на некоторые классы событий, возникающих в Svacer в результате работы пользователей в системе. Оповещение пользователей возможны с использованием следующих сервисов:
В Svacer реализован механизм оповещения пользователей на некоторые классы событий, возникающих в Svacer в результате работы пользователей в системе. Оповещение пользователей возможны с использованием следующих сервисов:


Line 10: Line 10:
Существует три класса внутренний событий, на которые возможно получение оповещения:
Существует три класса внутренний событий, на которые возможно получение оповещения:


* разметка маркера (ов), в том числе групповая (REVIEW)
* разметка маркера(ов), в том числе групповая (REVIEW)
* создание/редактирование и удаление комментария к маркеру (COMMENT)
* создание/редактирование и удаление комментария к маркеру (COMMENT)
* добавление/удаление снапшотов (SNAPSHOT)
* добавление/удаление снимков (SNAPSHOT)
* удаление контейнеров (веток, проектов)
* удаление контейнеров (веток, проектов)


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


* Цель
* Цель
Line 22: Line 22:
* Тип подписки
* Тип подписки


'''Цель''' - Определяет проект, ветку или маркер в отношении которого должно произойти событие, чтобы пользователь получил оповещение. Возможна подписка на все объекты (проекты, ветки и маркеры)
'''Цель''' Определяет проект, ветку или маркер в отношении которого должно произойти событие, чтобы пользователь получил оповещение. Возможна подписка на все объекты (проекты, ветки и маркеры)<br />
 
'''Класс события''' Определяет один из 3 классов события, описанных выше (кроме удаления контейнеров)<br />
'''Класс события''' - Определяет один из 3 классов события, описанных выше (кроме удаления контейнеров)
'''Флаг''' Дополнительное условие к активации подписки. Возможны следующие значения: <br />
 
''my-activities'' подписка приведет к созданию собщения пользователю только в том случае, если в указанной цели есть какая-либо активность пользователя(разметка или комментарий), кому подписка принадлежит. <br />
'''Флаг''' - Дополнительное условие к активации подписки. Возможны следующие значения:  
'''Тип подписки''' Подписка может иметь &quot;исключающее&quot; свойство, когда она подавляет создание сообщений. Полезно при исключении некоторых целей из списка срабатывания (например, когда есть подписка на проект, но некоторые ветки не требуют внимания)
 
''my-activities'' - подписка приведет к созданию собщения пользователю только в том случае, если в указанной цели есть какая-либо активность пользователя(разметка или комментарий), кому подписка принадлежит.  
 
'''Тип подписки''' - Подписка может иметь &#x22;исключающее&#x22; свойство, когда она подавляет создание сообщений. Полезно при исключении некоторых целей из списка срабатывания (например, когда есть подписка на проект, но некоторые ветки не требуют внимания)


Пользователи могут настраивать каналы оповещения (почта или telegram) посредством изменения своего профиля подписок. Профиль подписок не включает в себя сами подписки, а позволяет контролировать только механизм доставки создаваемых подписками сообщений. Профиль имеет следующие редактируемые пользователем параметры:
Пользователи могут настраивать каналы оповещения (почта или telegram) посредством изменения своего профиля подписок. Профиль подписок не включает в себя сами подписки, а позволяет контролировать только механизм доставки создаваемых подписками сообщений. Профиль имеет следующие редактируемые пользователем параметры:


* enable - Включает/Исключает пользователя из механизма создания сообщений
* enable Включает/Исключает пользователя из механизма создания сообщений
* use-mail - Задает возможность получения сообщений по электронной почте
* use-mail Задает возможность получения сообщений по электронной почте
* use-tg - Задает возможность получения сообщений с помощью мессенджера telegram
* use-tg Задает возможность получения сообщений с помощью мессенджера telegram
* mail - Задает почтовый адрес, для получения сообщений. Почтовый адрес можно задать также через редактирование параметров пользователя в GUI Svacer
* mail Задает почтовый адрес, для получения сообщений. Почтовый адрес можно задать также через редактирование параметров пользователя в веб интерфейсе Svacer


==== Некоторые детали работы механизма подписок ====
==== Некоторые детали работы механизма подписок ====
Для исключения чрезмерной активности механизма (спам), реализованы следующие ограничение, которые невозможно изменить настройками:
Для исключения чрезмерной активности механизма (спам), реализованы следующие ограничение, которые невозможно изменить настройками:


* Обработка внутренних событий происходит 2 раза в минуту. В связи с этим возможны задержки в получении сообщении до 1 минуты. Длина очереди сообщений - 256, не поместившиеся в очередь сообщения отбрасываются с записью об ошибке в логах. Таким образом, подсистема позволяет обрабатывать до 512 сообщений в минуту
* Обработка внутренних событий происходит 2 раза в минуту. В связи с этим возможны задержки в получении сообщении до 1 минуты. Длина очереди сообщений 256, не поместившиеся в очередь сообщения отбрасываются с записью об ошибке в логах. Таким образом, подсистема позволяет обрабатывать до 512 сообщений в минуту
* Для каждого пользователя существует ограничение в 1 сообщение в секунду в среднем (усреднение по периодам в 30 секунд). Лишние сообщения отбрасываются с записью в логе об ошибке
* Для каждого пользователя существует ограничение в 1 сообщение в секунду в среднем (усреднение по периодам в 30 секунд). Лишние сообщения отбрасываются с записью в логе об ошибке
* Реализована аггрегация сообщений. При использовании средств автоматизации возможно возникновение &#x22;шквала&#x22; сообщений о разметке и комментариях. В случае разметки для каждого пользователя происходит объединение сообщений имеющих один источник (проект, ветка). В этом случае отправляются менее информативные сообщения, чем в обычном случае, с указанием только снапшота, где возникли события. Для случая массового комментирования маркеров, также происходит объединение сообщений с указанием только комментария и снапшота. Аггрегатор работает 2 раза в минуту с очередью в 256 сообщений и не синхронизирован с обработчиком из пунтка 1
* Реализована аггрегация сообщений. При использовании средств автоматизации возможно возникновение &quot;шквала&quot; сообщений о разметке и комментариях. В случае разметки для каждого пользователя происходит объединение сообщений имеющих один источник (проект, ветка). В этом случае отправляются менее информативные сообщения, чем в обычном случае, с указанием только снимка, где возникли события. Для случая массового комментирования маркеров, также происходит объединение сообщений с указанием только комментария и снимка. Аггрегатор работает 2 раза в минуту с очередью в 256 сообщений и не синхронизирован с обработчиком из пунтка 1
 
Для предотвращения создания большого количества соединений с почтовым сервером (при активной работе пользователей или средств автоматизации) возможно использование специального флага в конфигурации – saveConection, который позволяет переиспользовать уже созданное ранее соединение с почтовым сервером. Соединение закрывается автоматически через 10 секунд простоя.
 
Для отправки сообщений через мессенджер telegram сервер svacer требует идентификатор заранее созданного бота. При этом бот используется только для отправки сообщений и не находится в запущенном состоянии постоянно. В момент регистрации канала telegram для пользователя бот запускается в режиме получения сообщения на временной период – 1 минута. После чего бот будет отключен от серверов Telegram.


Для предотвращения создания большого количества соединений с почтовым сервером (при активной работе пользователей или средств автоматизации) возможно использование специального флага в конфигурации - saveConection, который позволяет переиспользовать уже созданное ранее соединение с почтовым сервером. Соединение закрывается автоматически через 10 секунд простоя.
=== Конфигурация  ===


Для отправки сообщений через мессенджер telegram сервер svacer требует идентификатор заранее созданного бота. При этом бот используется только для отправки сообщений и не находится в запущенном состоянии постоянно. В момент регистрации канала telegram для пользователя бот запускается в режиме получения сообщения на временной период - 1 минута. После чего бот будет отключен от серверов Telegram.
По умолчанию механизм подписок не активен. Для его активации необходимо подготовить секцию subscription в конфигурационном файле Svacer. Примерный конфигурационный файл указан ниже


=== Конфигурация ===
<pre class="">subscription:
По умолчанию механизм подписок не активен. Для его активации необходимо подготовить секцию subscription в конфигурационном файле Svacer. Примерный конфигурационный файл указан ниже<pre class="">subscription:
  enabled: true
  enabled: true
  server: &quot;http://svacer.local:8080&quot;
  server: &quot;http://svacer.local:8080&quot;
Line 70: Line 70:
   saveConnection: false
   saveConnection: false
   debug: false</pre>
   debug: false</pre>
==== Описание параметров конфигурации ====


==== Описание параметров конфигурации ====
{|
{|
!Название параметра
! Название параметра
!Описание
! Описание
|-
|-
|subscription.enabled
| subscription.enabled
|Состояние службы при старте сервера Svacer
| Состояние службы при старте сервера Svacer
|-
|-
|subscription.server*
| subscription.server*
|Внешнее имя сервера, необходимое для формирования ссылок для работы в GUI.
| Внешнее имя сервера, необходимое для формирования ссылок для работы в веб интерфейсе Svacer.
|-
|-
|subscription.trace
| subscription.trace
|Позволяет фиксировать работу службы в виде набора файлов, создаваемых во временной папке ОС (/tmp/ для ОС Linux)
| Позволяет фиксировать работу службы в виде набора файлов, создаваемых во временной папке ОС (/tmp/ для ОС Linux)
|-
|-
|telegram.enabled
| telegram.enabled
|Состояние канала доставки сообщений посредством мессенджера telegram при запуске сервера
| Состояние канала доставки сообщений посредством мессенджера telegram при запуске сервера
|-
|-
|telegram.botID
| telegram.botID
|Идентификатор бота, который будет использован для отправки сообщений
| Идентификатор бота, который будет использован для отправки сообщений
|-
|-
|mail.enabled
| mail.enabled
|Состояние канала доставки сообщений с помощью электронной почты при запуске сервера
| Состояние канала доставки сообщений с помощью электронной почты при запуске сервера
|-
|-
|mail.smtpAddress
| mail.smtpAddress
|Адрес почтового сервера, который будет использован для отправки сообщений
| Адрес почтового сервера, который будет использован для отправки сообщений
|-
|-
|mail.smtpPort
| mail.smtpPort
|Параметр, задающий порт на котором работает почтовый сервер. По умолчанию используется значение - 25
| Параметр, задающий порт на котором работает почтовый сервер. По умолчанию используется значение - 25
|-
|-
|mail.smtpAuth
| mail.smtpAuth
|Параметр, задающий тип аутентификации, используемой клиентом. Возможны варианты: noauth, plain, login
| Параметр, задающий тип аутентификации, используемой клиентом. Возможны варианты: noauth, plain, login
|-
|-
|mail.smtpUsername (mail.smtpPassword)
| mail.smtpUsername (mail.smtpPassword)
|Параметры, задающие учетную запись от имени которой будет происходить рассылка сообщений. В случае аутентификации noauth, должны быть указаны пустые значения
| Параметры, задающие учетную запись от имени которой будет происходить рассылка сообщений. В случае аутентификации noauth, должны быть указаны пустые значения
|-
|-
|mail.caCerts
| mail.caCerts
|Параметр, задающий сертификаты CA. Значения поля аналогичны значениям соответствующего поля из конфигурации сервера для работы по протоколу TLS (нативный режим). Если указано пустое значение, то поддержка TLS будет сконфигурирована в небезопасном режиме с доверием любому сертификату сервера
| Параметр, задающий сертификаты CA. Значения поля аналогичны значениям соответствующего поля из конфигурации сервера для работы по протоколу TLS (нативный режим). Если указано пустое значение, то поддержка TLS будет сконфигурирована в небезопасном режиме с доверием любому сертификату сервера
|-
|-
|mail.from
| mail.from
|Поле, указывающее почтовый адрес, от имени которого будет осуществлять рассылка
| Поле, указывающее почтовый адрес, от имени которого будет осуществлять рассылка
|-
|-
|mail.tls
| mail.tls
|Использовать или нет tls для соединения с сервером
| Использовать или нет tls для соединения с сервером
|-
|-
|mail.debug
| mail.debug
|Выводить отладочную информацию протокола взаимодействия с почтовым сервером
| Выводить отладочную информацию протокола взаимодействия с почтовым сервером
|-
|-
|saveConnection
| saveConnection
|Сохранять уже установленное соединение с почтовым сервером (в течении 10 секунд после последней активности)
| Сохранять уже установленное соединение с почтовым сервером (в течении 10 секунд после последней активности)
|}
|}


* Вместо параметра susbcription.server можно использовать флаг public-url при запуске svacer (см справку по cli svacer-server)
 
 
*Вместо параметра susbcription.server можно использовать флаг public-url при запуске svacer (см справку по cli svacer-server)


==== Особенности работы почтового клиента, используемого Svacer ====
==== Особенности работы почтового клиента, используемого Svacer ====
''Поддержка TLS''. Если флаг mail.tls установлен, то соединение с сервером изначально будет установлено по протоколу TLS. В противном случае, изначально будет установлено обычное TCP соединение, и уже после команды STARTTLS стороны перейдут на протокол TLS. В случае если TLS соединение не сможет быть установлено, клиент будет пытаться работать без TLS соединения.


Для облегчения проверки конфигурации сервера Svacer для отправки почтовых сообщений можно использовать команду cli (см. подробнее ниже):
''Поддержка TLS''. Если флаг mail.tls установлен, то соединение с сервером изначально будет установлено по протоколу TLS. В противном случае, изначально будет установлено обычное TCP соединение, и уже после команды STARTTLS стороны перейдут на протокол TLS. В случае если TLS соединение не сможет быть установлено, клиент будет пытаться работать без TLS соединения.  


<source lang="bash">svacer subscription transport mail  test -- config mail.yaml </source>
Для облегчения проверки конфигурации сервера Svacer для отправки почтовых сообщений можно использовать команду cli (см. подробнее ниже):


<pre class="">svacer subscription transport mail  test -- config mail.yaml </pre>
=== Команды CLI для работы с механизмом подписок ===
=== Команды CLI для работы с механизмом подписок ===
Все команды собраны в группу ''svacer subscription''. Доступны следующие подкоманды:
Все команды собраны в группу ''svacer subscription''. Доступны следующие подкоманды:


* <code>transport</code>: Управление доступными каналами доставки сообщений (email, tg)
* <code>transport</code> – управление доступными каналами доставки сообщений (email, tg)
* <code>profile</code>: Управление профилем подписки подльзователя
* <code>profile</code> – управление профилем подписки подльзователя
* <code>admin</code>: Управление подсистемой подписок (службой)
* <code>admin</code> – управление подсистемой подписок (службой)
* <code>create</code>: Создание новой подписки
* <code>create</code> – моздание новой подписки
* <code>list</code>: Просмотр списка подписок
* <code>list</code> – просмотр списка подписок
* <code>delete</code>: Удаление подписок
* <code>delete</code> – удаление подписок
* <code>update</code>: Обновление существующей подписки
* <code>update</code> – обновление существующей подписки


==== Команды управления подписками ====
==== Команды управления подписками ====
Для управления подписками пользователя используются следующие команды:
Для управления подписками пользователя используются следующие команды:


* create. Создание подписки
* create – создание подписки
* list. Перечесление подписок пользователя
* list – перечесление подписок пользователя
* delete. Удаление подписки
* delete – удаление подписки
* update. Редактирование подписки
* update – редактирование подписки<br />
 
Во всех командах присутствуют флаги стандартные для CLI Svacer флаги подключения к серверу (--host, --port, --grpc, --user, --password, --ssl и другие). Группа этиъ флагов в дальнейшем будет обозначаться как [svacer_conn]
Во всех командах присутствуют флаги стандартные для CLI Svacer флаги подключения к серверу (--host, --port, --grpc, --user, --password, --ssl и другие). Группа этиъ флагов в дальнейшем будет обозначаться как [svacer_conn]


===== Создание подписки (команда 'create') =====
===== Создание подписки (команда 'create') =====
Общий формат команды:
Общий формат команды:


<nowiki><source lang="bash"></nowiki>svacer subscription create [svacer_conn] [Опции]<nowiki></source></nowiki> '''Опции:'''
<pre class="">svacer subscription create [svacer_conn] [Опции]</pre>
'''Опции:'''


* <code>--project</code>: Имя или ID проекта
* <code>project</code> – имя или ID проекта
* <code>--branch</code>: Имя или ID ветки
* <code>branch</code> – имя или ID ветки
* <code>--marker</code>: ID маркера
* <code>marker</code> ID маркера
* <code>--exclude</code>: Подписка имеет исключающий характер (по умолчанию <code>false</code>)
* <code>exclude</code> – подписка имеет исключающий характер (по умолчанию <code>false</code>)
* <code>--my-activities</code>: Оповещение только в случае событий на маркерах, где была собственная активность (разметка, комментарий) (по умолчанию <code>false</code>)
* <code>my-activities</code> – оповещение только в случае событий на маркерах, где была собственная активность (разметка, комментарий) (по умолчанию <code>false</code>)
* <code>--review</code>: Подписаться на события REVIEW
* <code>review</code> – подписаться на события REVIEW
* <code>--snapshot</code>: Подписаться на события SNAPSHOT
* <code>snapshot</code> – подписаться на события SNAPSHOT
* <code>--comment</code>: Подписаться на события COMMENT
* <code>comment</code> – подписаться на события COMMENT
* <code>--all-events</code>: Подписаться на все классы событий
* <code>all-events</code> – подписаться на все классы событий


<blockquote>При создании подписки важно указывать имена или ID одновременно во всех требуемых флагах. Например, команда:
<blockquote>При создании подписки важно указывать имена или ID одновременно во всех требуемых флагах. Например, команда:


<source lang="bash">svacer subscription create --project darpa --branch 1111-2222-333333333</source> не будет корректно обработана. При использовании ID цели можно не указывать родительские сущности (например, проект для ветки).</blockquote>'''Пример использования:'''
<pre class="">svacer subscription create --project darpa --branch 1111-2222-333333333</pre>
не будет корректно обработана. При использовании ID цели можно не указывать родительские сущности (например, проект для ветки).
</blockquote>
'''Пример использования:'''
 
Подписаться на события REVIEW в проекте &quot;MyProject&quot; и ветке &quot;MyBranch&quot;:


Подписаться на события REVIEW в проекте &#x22;MyProject&#x22; и ветке &#x22;MyBranch&#x22;:
<pre class="">svacer subscription create --project MyProject --branch MyBranch --review</pre>
Подписаться на все события в проекте &quot;MyProject&quot;:


<source lang="bash">svacer subscription create --project MyProject --branch MyBranch --review</source> Подписаться на все события в проекте &#x22;MyProject&#x22;:
<pre class="">svacer subscription create --project MyProject --all-events</pre>
Подписаться на события COMMENT маркера 'b96f5681-d57e-448c-939e-10dc1ba04fac':


<source lang="bash">svacer subscription create --project MyProject --all-events</source> Подписаться на события COMMENT маркера 'b96f5681-d57e-448c-939e-10dc1ba04fac':
<pre class="">svacer subscription create --marker b96f5681-d57e-448c-939e-10dc1ba04fac --comment</pre>
<blockquote>Подписка на маркер возможна по его url ссылке (base64 строка после /marker в адресной строке браузера при разметке):


<source lang="bash">svacer subscription create --marker b96f5681-d57e-448c-939e-10dc1ba04fac --comment</source><blockquote>Подписка на маркер возможна по его url ссылке (base64 строка после /marker в адресной строке браузера при разметке): <source lang="bash">svacer subscription create --marker eyJtYXJrZXJJRCI6ImI0ZWYyNTFlLTJmYzUtNDhiMC1hYWU2LWM0YzIxNmUyN2IyNyIsImZpbGUiOiIvLmJ1aWxkL3N1cHBvcnQvbWtzaWduYW1lcy5jIn0=</source></blockquote>
<pre class="">svacer subscription create --marker eyJtYXJrZXJJRCI6ImI0ZWYyNTFlLTJmYzUtNDhiMC1hYWU2LWM0YzIxNmUyN2IyNyIsImZpbGUiOiIvLmJ1aWxkL3N1cHBvcnQvbWtzaWduYW1lcy5jIn0=</pre>
 
</blockquote>
===== Получение списка подписок (команда list) =====


==== Получение списка подписок (команда list) ====
Общий формат команды:
Общий формат команды:


<nowiki><source lang="bash"></nowiki>svacer subscription list [svacer_conn] [Опции]<nowiki></source></nowiki> '''Опции:'''
<pre class="">svacer subscription list [svacer_conn] [Опции]</pre>
'''Опции:'''


* <code>--all</code>: Вывести все подписки всех пользователей (требуется роль admin)
* <code>all</code> – вывести все подписки всех пользователей (требуется роль admin)
* <code>--humanize</code>: Вывести в удобном для чтения виде
* <code>humanize</code> – вывести в удобном для чтения виде


'''Пример использования:'''
'''Пример использования:'''
Line 191: Line 207:
Вывести все подписки пользователя 'user' в формате JSON (по умолчанию):
Вывести все подписки пользователя 'user' в формате JSON (по умолчанию):


<source lang="bash">svacer subscription list --user user --password 1234</source> Вывести все подписки пользователя 'user' в удобном формате
<pre class="">svacer subscription list --user user --password 1234</pre>
Вывести все подписки пользователя 'user' в удобном формате


<source lang="bash">svacer subscription list --user user --password 1234 --humanize</source> Вывести все подписки всех пользователей
<pre class="">svacer subscription list --user user --password 1234 --humanize</pre>
Вывести все подписки всех пользователей


<source lang="bash">svacer subscription list --user admin --password admin --all --humanize</source>
<pre class="">svacer subscription list --user admin --password admin --all --humanize</pre>
===== Удаление подписки (команда delete) =====


==== Удаление подписки (команда delete) ====
Общий формат команды:
Общий формат команды:


<nowiki><source lang="bash"></nowiki>svacer subscription delete [svacer_conn] [Опции]<nowiki></source></nowiki> '''Опции:'''
<pre class="">svacer subscription delete [svacer_conn] [Опции]</pre>
'''Опции:'''


* <code>--all</code>: Удаление всех подписок пользователя
* <code>all</code> – удаление всех подписок пользователя
* <code>--id</code>: Удаление конкретной подписки
* <code>id</code> – удаление конкретной подписки


'''Пример использования:'''
'''Пример использования:'''
Line 209: Line 228:
Удалить подписку пользователя user1
Удалить подписку пользователя user1


<source lang="bash">svacer subscription delete --user user1 --password 1234 --id 1234</source><blockquote>Полный ID можно не указывать, достаточно указать несколько первых символов идентификатора, достаточных для однозначной идентификации подписки</blockquote>
<pre class="">svacer subscription delete --user user1 --password 1234 --id 1234</pre>
<blockquote>Полный ID можно не указывать, достаточно указать несколько первых символов идентификатора, достаточных для однозначной идентификации подписки
</blockquote>
 
 
===== Обновление подписки (команда update) =====


==== Обновление подписки (команда update) ====
Общий формат команды:
Общий формат команды:


<nowiki><source lang="bash"></nowiki>svacer subscription update [svacer_conn] [Опции]<nowiki></source></nowiki> '''Опции:'''
<pre class="">svacer subscription update [svacer_conn] [Опции]</pre>
'''Опции:'''


* <code>--id</code>: ID подписки для обновления
* <code>id</code> ID подписки для обновления
* <code>--only-my-activities</code>: Установка флага my-activities для подписки (по умолчанию <code>false</code>)
* <code>only-my-activities</code> – установка флага my-activities для подписки (по умолчанию <code>false</code>)


'''Пример использования:'''
'''Пример использования:'''
Line 223: Line 247:
Установить флаг my-activities для подписки, ID которой начинается с символов f1f2
Установить флаг my-activities для подписки, ID которой начинается с символов f1f2


<source lang="bash">svacer subscription update --id f1f2 --only-my-activities true</source>
<pre class="">svacer subscription update --id f1f2 --only-my-activities true</pre>
 


==== Команды настройки и управления каналами доставки сообщений ====
==== Команды настройки и управления каналами доставки сообщений ====
В Svacer поддерживаются два канала доставки сообщений - электронная почта и мессенджер Telegram. Для облегчения конфигурации данных каналов используются подкоманды команды <code>svacer subscription transport</code>:
В Svacer поддерживаются два канала доставки сообщений - электронная почта и мессенджер Telegram. Для облегчения конфигурации данных каналов используются подкоманды команды <code>svacer subscription transport</code>:


Line 231: Line 257:
* <code>mail</code>
* <code>mail</code>


'''Подкоманда 'telegram''''
'''Подкоманда 'telegram''''<br />
 
Позволяет добавить пользователю в его профиль подписки идентификаторы пользователя и чата в мессенджере Telegram (далее TG). Общий смысл данной команды заключается в том, чтобы привязать аутентификационную информацию, передаваемую пользователем на svacer сервер (через параметры SVACER_CONN), с сообщением от пользователя TG, которое получает сконфигурированный бот. Для регистрации канала TG, пользователь может использовать команду:
Позволяет добавить пользователю в его профиль подписки идентификаторы пользователя и чата в мессенджере Telegram (далее TG). Общий смысл данной команды заключается в том, чтобы привязать аутентификационную информацию, передаваемую пользователем на svacer сервер (через параметры SVACER_CONN), с сообщением от пользователя TG, которое получает сконфигурированный бот. Для регистрации канала TG, пользователь может использовать команду:


<nowiki><source lang="bash"></nowiki>svacer subscription transport telegram register [svacer_conn] [Опции]<nowiki></source></nowiki> '''Опции:'''
<pre class="">svacer subscription transport telegram register [svacer_conn] [Опции]</pre>
'''Опции:'''


* <code>--timeout</code>: Время ожидания завершения регистрации в секундах
* <code>--timeout</code>: Время ожидания завершения регистрации в секундах
Line 243: Line 269:
Регистрация пользователем user77 канала получения сообщений через Telegram:
Регистрация пользователем user77 канала получения сообщений через Telegram:


<source lang="bash">svacer subscription transport telegram register --host svacer.host --port 9999 --user user77 --password 888 --timeout 60</source> Во время выполнения команды в консоль будет выведен одноразовый ключ регистрации, который необходимо использовать в Telegram-боте для завершения процесса регистрации. Для этого пользователю необходимо перейти в бот и набрать в нем команду <code>/start &#x3C;ключ&#x3E;</code>. После успешного ввода команды боту, команда <code>register</code> завершит свою работу, и бот будет иметь в своем распоряжении <code>chatID</code>, <code>userID</code> для взаимодействия с пользователем.
<pre class="">svacer subscription transport telegram register --host svacer.host --port 9999 --user user77 --password 888 --timeout 60</pre>
Во время выполнения команды в консоль будет выведен одноразовый ключ регистрации, который необходимо использовать в Telegram-боте для завершения процесса регистрации. Для этого пользователю необходимо перейти в бот и набрать в нем команду <code>/start &lt;ключ&gt;</code>. После успешного ввода команды боту, команда <code>register</code> завершит свою работу, и бот будет иметь в своем распоряжении <code>chatID</code>, <code>userID</code> для взаимодействия с пользователем.


'''Подкоманда 'mail''''
'''Подкоманда 'mail''''
Line 249: Line 276:
Предназначена для облегчения конфигурации почтового клиента svacer. Общий формат команды:
Предназначена для облегчения конфигурации почтового клиента svacer. Общий формат команды:


<nowiki><source lang="bash"></nowiki>svacer subscription transport mail [Опции]<nowiki></source></nowiki> '''Опции:'''
<pre class="">svacer subscription transport mail [Опции]</pre>
'''Опции:'''


* <code>--to</code>: Почтовый адрес для отправки тестового сообщения
* <code>--to</code>: Почтовый адрес для отправки тестового сообщения
* <code>--config</code>: Секция mail конфигурационного файла в формате YAML
* <code>--config</code>: Секция mail конфигурационного файла в формате YAML


В качестве параметра обязательно передать файл в формате yaml, содержимое которого соответствует секции mail конфигурационного файла для службы. Содержимое такого файла может следующим:<pre class="">  enabled: true
В качестве параметра обязательно передать файл в формате yaml, содержимое которого соответствует секции mail конфигурационного файла для службы. Содержимое такого файла может следующим:
 
<pre class="">  enabled: true
   smtpAddress: &quot;smtp.mail.local&quot;
   smtpAddress: &quot;smtp.mail.local&quot;
   smtpPort: 25
   smtpPort: 25
Line 261: Line 291:
   smtpAuth: &quot;noauth&quot;
   smtpAuth: &quot;noauth&quot;
   from: &quot;sender@mail.local&quot;
   from: &quot;sender@mail.local&quot;
   debug: true</pre>'''Пример использования:'''
   debug: true</pre>
'''Пример использования:'''


Отправить тестовое письмо на адрес <code>admin@mail.org</code>, используя конфигурацию <code>test.yaml</code>:
Отправить тестовое письмо на адрес <code>admin@mail.org</code>, используя конфигурацию <code>test.yaml</code>:


<source lang="bash">svacer subscription transport mail test --config test.yaml --to admin@mail.org</source>
<pre class="">svacer subscription transport mail test --config test.yaml --to admin@mail.org</pre>
==== Группа команд администрирования службы (admin) ====


==== Группа команд администрирования службы (admin) ====
Данные команды требуют роль admin и предназначены для управления некоторыми параметрами самой службы. Доступные подкоманды:
Данные команды требуют роль admin и предназначены для управления некоторыми параметрами самой службы. Доступные подкоманды:


* <code>service</code>: Управление службой подписок
* <code>service</code> – управление службой подписок<br />
 
Общий формат команды:
Общий формат команды:


<nowiki><source lang="bash"></nowiki>svacer subscription admin service [svacer_conn] [Опции]<nowiki></source></nowiki> '''Опции'''
<pre class="">svacer subscription admin service [svacer_conn] [Опции]</pre>
'''Опции'''


* enable - Включение/Выключение службы
* <code>enable</code> – включение/выключение службы
* use-mail - Включение/Выключение канала передачи сообщений через электронную почту
* <code>use-mail</code> – включение/выключение канала передачи сообщений через электронную почту
* use-tg - Включение/Выключение канала передачи сообщений через Telegram
* <code>use-tg</code> – включение/выключение канала передачи сообщений через Telegram


Если запускать команду без указания флагов, то будет выведена информаци о текущем состоянии службы с рядом параметров.<blockquote>При использовании флагов use-mail, use-tg не происходит повторное считывание конфигурационного файла. Для того, чтобы флаги use-mail и use-tg корректно применились их необходимо запускать одновременно с флагом --enable true, предварительно отключив службу с помощью флага --enable false.</blockquote>
Если запускать команду без указания флагов, то будет выведена информаци о текущем состоянии службы с рядом параметров.


<blockquote>При использовании флагов use-mail, use-tg не происходит повторное считывание конфигурационного файла. Для того, чтобы флаги use-mail и use-tg корректно применились их необходимо запускать одновременно с флагом --enable true, предварительно отключив службу с помощью флага --enable false.
</blockquote>
==== Группа команд управления профилем пользователя (profile) ====
==== Группа команд управления профилем пользователя (profile) ====
Команда предназначена для управление профилем пользователя и имеет следующий формат:
Команда предназначена для управление профилем пользователя и имеет следующий формат:


<nowiki><source lang="bash"></nowiki>svacer subscription profile [svacer_conn] [update] [Опции]<nowiki></source></nowiki> '''Опции (актуальны для подкоманды update):'''
<pre class="">svacer subscription profile [svacer_conn] [update] [Опции]</pre>
'''Опции (актуальны для подкоманды update):'''
 
* <code>use-mail</code> – использовать канал передачи сообщений через электронную почту
* <code>use-tg</code> – использовать канал передачи сообщений через Telegram
* <code>mail</code> – изменить почтовый адрес
* <code>tg-chat-id</code> – установить ID чата для сообщений Telegram
* <code>tg-user-id</code> – установить ID пользователя для сообщений Telegram
* <code>enable</code> – включение/отключение механизма оповещения для конкретного пользователя
 
Если опции и подкоманда <code>update</code> не указаны, то будет выведен текущий профиль пользователя.
 
=== Пример скрипта для создания подписок пользователей ===
 
<pre class="">#!/bin/bash -x
#Общие параметры подключения к Svacer
HOST=&quot;--host 10.0.0.10 --port 8888&quot;
#Тестовые проекты
PROJECT1=&quot;NET6&quot;
PROJECT2=&quot;darpa&quot;
PROJECT3=&quot;large&quot;
PROJECT3_BRANCH1=&quot;master&quot;
#Параметры аутентификации пользователей
USER1=&quot;--user admin_1 --password password&quot;
USER2=&quot;--user admin_2 --password password&quot;
USER3=&quot;--user admin_3 --password password&quot;
USER4=&quot;--user admin_4 --password password&quot;
USER5=&quot;--user admin_5 --password password&quot;
USER6=&quot;--user admin_6 --password password&quot;
USER7=&quot;--user admin_7 --password password&quot;
#ID пользователя в Telegram
TG_USER_ID=721941843
TG_CHAT_ID=$TG_USER_ID
 
#Команда создания подписки
CREATE_SN=&quot;./svacer subscription create&quot;
 
#User1 - подписка на все, но с флагом myactivities
$CREATE_SN $HOST $USER1 --all-events --my-activities
#User2 - подписка на проект1, только снимки
$CREATE_SN $HOST $USER2 --project $PROJECT1 --snapshot
#User2 - подписка на проект2, только разметка
$CREATE_SN $HOST $USER2 --project $PROJECT2 --review
#User2 - подписка на проект3, только комментарии
$CREATE_SN $HOST $USER2 --project $PROJECT3 --comment
#User3 - подписка на проект3, исключая ветку1, все события
$CREATE_SN $HOST $USER3 --project $PROJECT3 --all-events
$CREATE_SN $HOST $USER3 --project $PROJECT3 --branch $PROJECT3_BRANCH1 --exclude
#User4 - подписка на проект2,  все события
$CREATE_SN $HOST $USER4 --project $PROJECT2 --all-events
#User5 - подписка на проект3,  все события
$CREATE_SN $HOST $USER5 --project $PROJECT3 --all-events
#User6 - подписка на все проекты, все события
$CREATE_SN $HOST $USER6  --all-events
#User7 - подписка на все проекты, все события
$CREATE_SN $HOST $USER7  --all-events
 
#Команда работы с профилем
ENABLE_NTFY_MAIL=&quot;./svacer subscription profile&quot;
#User1, включить получение сообщений по почте, по Telegram, установить адрес электронной почты для сообщений, указать ID пользователя для получения сообщений в Telegram
$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
#User2, отключить получение всех сообщений (подписки останутся)
$ENABLE_NTFY_MAIL $HOST $USER2  update --enable false
#User3, отключить получение собщений по Telegram
$ENABLE_NTFY_MAIL $HOST $USER3  update --use-tg false
#User4, изменить параметры канала Telegram
$ENABLE_NTFY_MAIL $HOST $USER4  update --tg-user-id $TG_USER_ID --tg-chat-id $TG_CHAT_ID</pre>
=== Пример конфигурационного файла для активации службы уведомлений при запуске Svacer ===
 
<pre class="">subscription:
enabled: true
telegram:
  enabled: true
  botID: &quot;7861931704:AAEHfp035U10pJk0lIjo1lYJj1e837qv7j4&quot;
mail:
  enabled: true
  smtpAddress: &quot;relay.ispras.ru&quot;
  smtpPort: 25
  smtpUsername: &quot;&quot;
  smtpPassword: &quot;&quot;
  smtpAuth: &quot;noauth&quot;
  from: &quot;relay@ispras.ru&quot;</pre>
В примере выше подразумевается наличие почтового сервера, не требующего аутентификации. В примере ниже указан случай отправки сообщений от конкретного пользователя
 
<pre class="">subscription:
enabled: true
telegram:
  enabled: true
  botID: &quot;7861931704:AAEHfp035U10pJk0lIjo1lYJj1e837qv7j4&quot;
mail:
  enabled: true
  smtpAddress: &quot;mail.ispras.ru&quot;
  smtpPort: 25
  smtpUsername: &quot;user@ispras.ru&quot;
  smtpPassword: &quot;abrakadabra&quot;
  smtpAuth: &quot;plain&quot;
  from: &quot;user@ispras.ru&quot;</pre>
В следующем примере устанавливается соединение TLS с почтовым сервером
 
<pre class="">subscription:
enabled: true
telegram:
  enabled: true
  botID: &quot;7861931704:AAEHfp035U10pJk0lIjo1lYJj1e837qv7j4&quot;
mail:
  enabled: true
  smtpAddress: &quot;mail.ispras.ru&quot;
  smtpPort: 465
  smtpUsername: &quot;user@ispras.ru&quot;
  smtpPassword: &quot;abrakadabra&quot;
  smtpAuth: &quot;plain&quot;
  from: &quot;user@ispras.ru&quot;
  tls: true</pre>
В следующем примере устанавливается соединение TLS с помощью команды STARTTLS с почтовым сервером (в консоль будут также выведены отладочные сообщения почтового клиента)
 
<pre class="">subscription:
enabled: true
telegram:
  enabled: true
  botID: &quot;7861931704:AAEHfp035U10pJk0lIjo1lYJj1e837qv7j4&quot;
mail:
  enabled: true
  smtpAddress: &quot;mail.ispras.ru&quot;
  smtpPort: 587
  smtpUsername: &quot;user@ispras.ru&quot;
  smtpPassword: &quot;abrakadabra&quot;
  smtpAuth: &quot;plain&quot;
  from: &quot;user@ispras.ru&quot;
  tls: false
  debug: true</pre>
При этом сервер mail.ispras.ru работает на всех портах. При этом на 465 - принимаются только TLS соединения, на 587 - обычные соединения с переходом на TLS в послествии, на 25 - принимаются обычные соединения (без TLS)
 
=== Пример конфигурации службы с запуском ее вручную через команду cli ===


* use-mail - использовать канал передачи сообщений через электронную почту
<pre class="">subscription:
* use-tg - использовать канал передачи сообщений через Telegram
enabled: false
* mail - изменить почтовый адрес
telegram:
* tg-chat-id - установить ID чата для сообщений Telegram
  enabled: true
* tg-user-id - установить ID пользователя для сообщений Telegram
  botID: &quot;7861931704:AAEHfp035U10pJk0lIjo1lYJj1e837qv7j4&quot;
* enable - включение/отключение механизма оповещения для конкретного пользователя
mail:
  enabled: true
  smtpAddress: &quot;mail.ispras.ru&quot;
  smtpPort: 587
  smtpUsername: &quot;user@ispras.ru&quot;
  smtpPassword: &quot;abrakadabra&quot;
  smtpAuth: &quot;plain&quot;
  from: &quot;user@ispras.ru&quot;
  tls: false</pre>
После запуска сервера Svacer можно активировать службу с помощью команды


Если опции и подкоманда <code>update</code> не указаны, то будет выведен текущий профиль пользователя.
<pre class="">svacer subscription admin service --user admin --password admin --enable true</pre>

Latest revision as of 19:14, 15 January 2025

Механизм подписок на внутренние события Svacer

Общие принципы

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

  • Электронная почта
  • Индивидуальный чат пользователя мессенджера telegram с ботом

Существует три класса внутренний событий, на которые возможно получение оповещения:

  • разметка маркера(ов), в том числе групповая (REVIEW)
  • создание/редактирование и удаление комментария к маркеру (COMMENT)
  • добавление/удаление снимков (SNAPSHOT)
  • удаление контейнеров (веток, проектов)

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

  • Цель
  • Класс события
  • Флаг
  • Тип подписки

Цель – Определяет проект, ветку или маркер в отношении которого должно произойти событие, чтобы пользователь получил оповещение. Возможна подписка на все объекты (проекты, ветки и маркеры)
Класс события – Определяет один из 3 классов события, описанных выше (кроме удаления контейнеров)
Флаг – Дополнительное условие к активации подписки. Возможны следующие значения:
my-activities – подписка приведет к созданию собщения пользователю только в том случае, если в указанной цели есть какая-либо активность пользователя(разметка или комментарий), кому подписка принадлежит.
Тип подписки – Подписка может иметь "исключающее" свойство, когда она подавляет создание сообщений. Полезно при исключении некоторых целей из списка срабатывания (например, когда есть подписка на проект, но некоторые ветки не требуют внимания)

Пользователи могут настраивать каналы оповещения (почта или telegram) посредством изменения своего профиля подписок. Профиль подписок не включает в себя сами подписки, а позволяет контролировать только механизм доставки создаваемых подписками сообщений. Профиль имеет следующие редактируемые пользователем параметры:

  • enable – Включает/Исключает пользователя из механизма создания сообщений
  • use-mail – Задает возможность получения сообщений по электронной почте
  • use-tg – Задает возможность получения сообщений с помощью мессенджера telegram
  • mail – Задает почтовый адрес, для получения сообщений. Почтовый адрес можно задать также через редактирование параметров пользователя в веб интерфейсе Svacer

Некоторые детали работы механизма подписок

Для исключения чрезмерной активности механизма (спам), реализованы следующие ограничение, которые невозможно изменить настройками:

  • Обработка внутренних событий происходит 2 раза в минуту. В связи с этим возможны задержки в получении сообщении до 1 минуты. Длина очереди сообщений – 256, не поместившиеся в очередь сообщения отбрасываются с записью об ошибке в логах. Таким образом, подсистема позволяет обрабатывать до 512 сообщений в минуту
  • Для каждого пользователя существует ограничение в 1 сообщение в секунду в среднем (усреднение по периодам в 30 секунд). Лишние сообщения отбрасываются с записью в логе об ошибке
  • Реализована аггрегация сообщений. При использовании средств автоматизации возможно возникновение "шквала" сообщений о разметке и комментариях. В случае разметки для каждого пользователя происходит объединение сообщений имеющих один источник (проект, ветка). В этом случае отправляются менее информативные сообщения, чем в обычном случае, с указанием только снимка, где возникли события. Для случая массового комментирования маркеров, также происходит объединение сообщений с указанием только комментария и снимка. Аггрегатор работает 2 раза в минуту с очередью в 256 сообщений и не синхронизирован с обработчиком из пунтка 1

Для предотвращения создания большого количества соединений с почтовым сервером (при активной работе пользователей или средств автоматизации) возможно использование специального флага в конфигурации – saveConection, который позволяет переиспользовать уже созданное ранее соединение с почтовым сервером. Соединение закрывается автоматически через 10 секунд простоя.

Для отправки сообщений через мессенджер telegram сервер svacer требует идентификатор заранее созданного бота. При этом бот используется только для отправки сообщений и не находится в запущенном состоянии постоянно. В момент регистрации канала telegram для пользователя бот запускается в режиме получения сообщения на временной период – 1 минута. После чего бот будет отключен от серверов Telegram.

Конфигурация

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

subscription:
 enabled: true
 server: "http://svacer.local:8080"
 trace: false
 telegram:
  enabled: true
  botID: "7865.........."
 mail:
  enabled: true
  smtpAddress: "smtp.local"
  smtpPort: 25
  smtpUsername: ""
  smtpPassword: ""
  caCerts: ""
  smtpAuth: "noauth"
  from: "mailer@local"
  tls: true
  saveConnection: false
  debug: false

Описание параметров конфигурации

Название параметра Описание
subscription.enabled Состояние службы при старте сервера Svacer
subscription.server* Внешнее имя сервера, необходимое для формирования ссылок для работы в веб интерфейсе Svacer.
subscription.trace Позволяет фиксировать работу службы в виде набора файлов, создаваемых во временной папке ОС (/tmp/ для ОС Linux)
telegram.enabled Состояние канала доставки сообщений посредством мессенджера telegram при запуске сервера
telegram.botID Идентификатор бота, который будет использован для отправки сообщений
mail.enabled Состояние канала доставки сообщений с помощью электронной почты при запуске сервера
mail.smtpAddress Адрес почтового сервера, который будет использован для отправки сообщений
mail.smtpPort Параметр, задающий порт на котором работает почтовый сервер. По умолчанию используется значение - 25
mail.smtpAuth Параметр, задающий тип аутентификации, используемой клиентом. Возможны варианты: noauth, plain, login
mail.smtpUsername (mail.smtpPassword) Параметры, задающие учетную запись от имени которой будет происходить рассылка сообщений. В случае аутентификации noauth, должны быть указаны пустые значения
mail.caCerts Параметр, задающий сертификаты CA. Значения поля аналогичны значениям соответствующего поля из конфигурации сервера для работы по протоколу TLS (нативный режим). Если указано пустое значение, то поддержка TLS будет сконфигурирована в небезопасном режиме с доверием любому сертификату сервера
mail.from Поле, указывающее почтовый адрес, от имени которого будет осуществлять рассылка
mail.tls Использовать или нет tls для соединения с сервером
mail.debug Выводить отладочную информацию протокола взаимодействия с почтовым сервером
saveConnection Сохранять уже установленное соединение с почтовым сервером (в течении 10 секунд после последней активности)


  • Вместо параметра susbcription.server можно использовать флаг public-url при запуске svacer (см справку по cli svacer-server)

Особенности работы почтового клиента, используемого Svacer

Поддержка TLS. Если флаг mail.tls установлен, то соединение с сервером изначально будет установлено по протоколу TLS. В противном случае, изначально будет установлено обычное TCP соединение, и уже после команды STARTTLS стороны перейдут на протокол TLS. В случае если TLS соединение не сможет быть установлено, клиент будет пытаться работать без TLS соединения.

Для облегчения проверки конфигурации сервера Svacer для отправки почтовых сообщений можно использовать команду cli (см. подробнее ниже):

svacer subscription transport mail  test -- config mail.yaml 

Команды CLI для работы с механизмом подписок

Все команды собраны в группу svacer subscription. Доступны следующие подкоманды:

  • transport – управление доступными каналами доставки сообщений (email, tg)
  • profile – управление профилем подписки подльзователя
  • admin – управление подсистемой подписок (службой)
  • create – моздание новой подписки
  • list – просмотр списка подписок
  • delete – удаление подписок
  • update – обновление существующей подписки

Команды управления подписками

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

  • create – создание подписки
  • list – перечесление подписок пользователя
  • delete – удаление подписки
  • update – редактирование подписки

Во всех командах присутствуют флаги стандартные для CLI Svacer флаги подключения к серверу (--host, --port, --grpc, --user, --password, --ssl и другие). Группа этиъ флагов в дальнейшем будет обозначаться как [svacer_conn]

Создание подписки (команда 'create')

Общий формат команды:

svacer subscription create [svacer_conn] [Опции]

Опции:

  • project – имя или ID проекта
  • branch – имя или ID ветки
  • marker – ID маркера
  • exclude – подписка имеет исключающий характер (по умолчанию false)
  • my-activities – оповещение только в случае событий на маркерах, где была собственная активность (разметка, комментарий) (по умолчанию false)
  • review – подписаться на события REVIEW
  • snapshot – подписаться на события SNAPSHOT
  • comment – подписаться на события COMMENT
  • all-events – подписаться на все классы событий

При создании подписки важно указывать имена или ID одновременно во всех требуемых флагах. Например, команда:

svacer subscription create --project darpa --branch 1111-2222-333333333

не будет корректно обработана. При использовании ID цели можно не указывать родительские сущности (например, проект для ветки).

Пример использования:

Подписаться на события REVIEW в проекте "MyProject" и ветке "MyBranch":

svacer subscription create --project MyProject --branch MyBranch --review

Подписаться на все события в проекте "MyProject":

svacer subscription create --project MyProject --all-events

Подписаться на события COMMENT маркера 'b96f5681-d57e-448c-939e-10dc1ba04fac':

svacer subscription create --marker b96f5681-d57e-448c-939e-10dc1ba04fac --comment

Подписка на маркер возможна по его url ссылке (base64 строка после /marker в адресной строке браузера при разметке):

svacer subscription create --marker eyJtYXJrZXJJRCI6ImI0ZWYyNTFlLTJmYzUtNDhiMC1hYWU2LWM0YzIxNmUyN2IyNyIsImZpbGUiOiIvLmJ1aWxkL3N1cHBvcnQvbWtzaWduYW1lcy5jIn0=
Получение списка подписок (команда list)

Общий формат команды:

svacer subscription list [svacer_conn] [Опции]

Опции:

  • all – вывести все подписки всех пользователей (требуется роль admin)
  • humanize – вывести в удобном для чтения виде

Пример использования:

Вывести все подписки пользователя 'user' в формате JSON (по умолчанию):

svacer subscription list --user user --password 1234

Вывести все подписки пользователя 'user' в удобном формате

svacer subscription list --user user --password 1234 --humanize

Вывести все подписки всех пользователей

svacer subscription list --user admin --password admin --all --humanize
Удаление подписки (команда delete)

Общий формат команды:

svacer subscription delete [svacer_conn] [Опции]

Опции:

  • all – удаление всех подписок пользователя
  • id – удаление конкретной подписки

Пример использования:

Удалить подписку пользователя user1

svacer subscription delete --user user1 --password 1234 --id 1234

Полный ID можно не указывать, достаточно указать несколько первых символов идентификатора, достаточных для однозначной идентификации подписки


Обновление подписки (команда update)

Общий формат команды:

svacer subscription update [svacer_conn] [Опции]

Опции:

  • id – ID подписки для обновления
  • only-my-activities – установка флага my-activities для подписки (по умолчанию false)

Пример использования:

Установить флаг my-activities для подписки, ID которой начинается с символов f1f2

svacer subscription update --id f1f2 --only-my-activities true


Команды настройки и управления каналами доставки сообщений

В Svacer поддерживаются два канала доставки сообщений - электронная почта и мессенджер Telegram. Для облегчения конфигурации данных каналов используются подкоманды команды svacer subscription transport:

  • telegram
  • mail

Подкоманда 'telegram'
Позволяет добавить пользователю в его профиль подписки идентификаторы пользователя и чата в мессенджере Telegram (далее TG). Общий смысл данной команды заключается в том, чтобы привязать аутентификационную информацию, передаваемую пользователем на svacer сервер (через параметры SVACER_CONN), с сообщением от пользователя TG, которое получает сконфигурированный бот. Для регистрации канала TG, пользователь может использовать команду:

svacer subscription transport telegram register [svacer_conn] [Опции]

Опции:

  • --timeout: Время ожидания завершения регистрации в секундах

Пример использования:

Регистрация пользователем user77 канала получения сообщений через Telegram:

svacer subscription transport telegram register --host svacer.host --port 9999 --user user77 --password 888 --timeout 60

Во время выполнения команды в консоль будет выведен одноразовый ключ регистрации, который необходимо использовать в Telegram-боте для завершения процесса регистрации. Для этого пользователю необходимо перейти в бот и набрать в нем команду /start <ключ>. После успешного ввода команды боту, команда register завершит свою работу, и бот будет иметь в своем распоряжении chatID, userID для взаимодействия с пользователем.

Подкоманда 'mail'

Предназначена для облегчения конфигурации почтового клиента svacer. Общий формат команды:

svacer subscription transport mail [Опции]

Опции:

  • --to: Почтовый адрес для отправки тестового сообщения
  • --config: Секция mail конфигурационного файла в формате YAML

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

  enabled: true
  smtpAddress: "smtp.mail.local"
  smtpPort: 25
  smtpUsername: ""
  smtpPassword: ""
  smtpAuth: "noauth"
  from: "sender@mail.local"
  debug: true

Пример использования:

Отправить тестовое письмо на адрес admin@mail.org, используя конфигурацию test.yaml:

svacer subscription transport mail test --config test.yaml --to admin@mail.org

Группа команд администрирования службы (admin)

Данные команды требуют роль admin и предназначены для управления некоторыми параметрами самой службы. Доступные подкоманды:

  • service – управление службой подписок

Общий формат команды:

svacer subscription admin service [svacer_conn] [Опции]

Опции

  • enable – включение/выключение службы
  • use-mail – включение/выключение канала передачи сообщений через электронную почту
  • use-tg – включение/выключение канала передачи сообщений через Telegram

Если запускать команду без указания флагов, то будет выведена информаци о текущем состоянии службы с рядом параметров.

При использовании флагов use-mail, use-tg не происходит повторное считывание конфигурационного файла. Для того, чтобы флаги use-mail и use-tg корректно применились их необходимо запускать одновременно с флагом --enable true, предварительно отключив службу с помощью флага --enable false.

Группа команд управления профилем пользователя (profile)

Команда предназначена для управление профилем пользователя и имеет следующий формат:

svacer subscription profile [svacer_conn] [update] [Опции]

Опции (актуальны для подкоманды update):

  • use-mail – использовать канал передачи сообщений через электронную почту
  • use-tg – использовать канал передачи сообщений через Telegram
  • mail – изменить почтовый адрес
  • tg-chat-id – установить ID чата для сообщений Telegram
  • tg-user-id – установить ID пользователя для сообщений Telegram
  • enable – включение/отключение механизма оповещения для конкретного пользователя

Если опции и подкоманда update не указаны, то будет выведен текущий профиль пользователя.

Пример скрипта для создания подписок пользователей

#!/bin/bash -x
#Общие параметры подключения к Svacer
HOST="--host 10.0.0.10 --port 8888"
#Тестовые проекты
PROJECT1="NET6"
PROJECT2="darpa"
PROJECT3="large"
PROJECT3_BRANCH1="master"
#Параметры аутентификации пользователей
USER1="--user admin_1 --password password"
USER2="--user admin_2 --password password"
USER3="--user admin_3 --password password"
USER4="--user admin_4 --password password"
USER5="--user admin_5 --password password"
USER6="--user admin_6 --password password"
USER7="--user admin_7 --password password"
#ID пользователя в Telegram
TG_USER_ID=721941843
TG_CHAT_ID=$TG_USER_ID

#Команда создания подписки
CREATE_SN="./svacer subscription create"

#User1 - подписка на все, но с флагом myactivities
$CREATE_SN $HOST $USER1 --all-events --my-activities
#User2 - подписка на проект1, только снимки
$CREATE_SN $HOST $USER2 --project $PROJECT1 --snapshot
#User2 - подписка на проект2, только разметка
$CREATE_SN $HOST $USER2 --project $PROJECT2 --review
#User2 - подписка на проект3, только комментарии
$CREATE_SN $HOST $USER2 --project $PROJECT3 --comment
#User3 - подписка на проект3, исключая ветку1, все события
$CREATE_SN $HOST $USER3 --project $PROJECT3 --all-events
$CREATE_SN $HOST $USER3 --project $PROJECT3 --branch $PROJECT3_BRANCH1 --exclude
#User4 - подписка на проект2,  все события
$CREATE_SN $HOST $USER4 --project $PROJECT2 --all-events
#User5 - подписка на проект3,  все события
$CREATE_SN $HOST $USER5 --project $PROJECT3 --all-events
#User6 - подписка на все проекты, все события
$CREATE_SN $HOST $USER6  --all-events
#User7 - подписка на все проекты, все события
$CREATE_SN $HOST $USER7  --all-events

#Команда работы с профилем
ENABLE_NTFY_MAIL="./svacer subscription profile"
#User1, включить получение сообщений по почте, по Telegram, установить адрес электронной почты для сообщений, указать ID пользователя для получения сообщений в Telegram
$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
#User2, отключить получение всех сообщений (подписки останутся)
$ENABLE_NTFY_MAIL $HOST $USER2  update --enable false
#User3, отключить получение собщений по Telegram
$ENABLE_NTFY_MAIL $HOST $USER3  update --use-tg false
#User4, изменить параметры канала Telegram
$ENABLE_NTFY_MAIL $HOST $USER4  update --tg-user-id $TG_USER_ID --tg-chat-id $TG_CHAT_ID

Пример конфигурационного файла для активации службы уведомлений при запуске Svacer

subscription:
 enabled: true
 telegram:
  enabled: true
  botID: "7861931704:AAEHfp035U10pJk0lIjo1lYJj1e837qv7j4"
 mail:
  enabled: true
  smtpAddress: "relay.ispras.ru"
  smtpPort: 25
  smtpUsername: ""
  smtpPassword: ""
  smtpAuth: "noauth"
  from: "relay@ispras.ru"

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

subscription:
 enabled: true
 telegram:
  enabled: true
  botID: "7861931704:AAEHfp035U10pJk0lIjo1lYJj1e837qv7j4"
 mail:
  enabled: true
  smtpAddress: "mail.ispras.ru"
  smtpPort: 25
  smtpUsername: "user@ispras.ru"
  smtpPassword: "abrakadabra"
  smtpAuth: "plain"
  from: "user@ispras.ru"

В следующем примере устанавливается соединение TLS с почтовым сервером

subscription:
 enabled: true
 telegram:
  enabled: true
  botID: "7861931704:AAEHfp035U10pJk0lIjo1lYJj1e837qv7j4"
 mail:
  enabled: true
  smtpAddress: "mail.ispras.ru"
  smtpPort: 465
  smtpUsername: "user@ispras.ru"
  smtpPassword: "abrakadabra"
  smtpAuth: "plain"
  from: "user@ispras.ru"
  tls: true

В следующем примере устанавливается соединение TLS с помощью команды STARTTLS с почтовым сервером (в консоль будут также выведены отладочные сообщения почтового клиента)

subscription:
 enabled: true
 telegram:
  enabled: true
  botID: "7861931704:AAEHfp035U10pJk0lIjo1lYJj1e837qv7j4"
 mail:
  enabled: true
  smtpAddress: "mail.ispras.ru"
  smtpPort: 587
  smtpUsername: "user@ispras.ru"
  smtpPassword: "abrakadabra"
  smtpAuth: "plain"
  from: "user@ispras.ru"
  tls: false
  debug: true

При этом сервер mail.ispras.ru работает на всех портах. При этом на 465 - принимаются только TLS соединения, на 587 - обычные соединения с переходом на TLS в послествии, на 25 - принимаются обычные соединения (без TLS)

Пример конфигурации службы с запуском ее вручную через команду cli

subscription:
 enabled: false
 telegram:
  enabled: true
  botID: "7861931704:AAEHfp035U10pJk0lIjo1lYJj1e837qv7j4"
 mail:
  enabled: true
  smtpAddress: "mail.ispras.ru"
  smtpPort: 587
  smtpUsername: "user@ispras.ru"
  smtpPassword: "abrakadabra"
  smtpAuth: "plain"
  from: "user@ispras.ru"
  tls: false

После запуска сервера Svacer можно активировать службу с помощью команды

svacer subscription admin service --user admin --password admin --enable true