Описание работы сервера действий
Сервер действий выполняет следующие задачи:
- Создание задачи из действия или добавления действия в задачу.
- Запуск программного кода для отображения интерфейса действия. Обычно это ajax.js
- Создание новой сессии для действия, запущенного пользователем
- Запуск программного кода для выполнения действия. Обычно это server.js
Первые две задачи выполняются вне очереди. Создание новой сессии выполняется в очереди для того, чтобы не заблокировать базу данных одновременным выполнением транзакций. Для того, чтобы не блокировать пользовательский интерфейс, создание новой сессии выполняется с наивысшим приоритетом. Запуск кода для выполнения действий выполняется порядке очередности, кроме случая, когда в настроечном файле действия config.json не установлена настройка "notInQueue": true. Действия запускаются друг за другом потому что они могут быть логически связаны друг с другом. Например, сначала должен быть создан объект, а потом можно установить для него свойства. Если эти действия выполнить в другой последовательности, произойдет ошибка. Некоторые действия не зависят друг от друга и их можно выполнить вне очереди. Например, отправить письмо с обработанными событиями из Dashboard. Для таких действий можно установить настройку "notInQueue": true. Это позволит ускорить отзывчивость пользовательского интерфейса. Подробнее о настройках для действий можно прочитать в описании действия Action editor.
Существует три очереди. Одна служит для создания пользовательских сессий. Вторая для выполнения действий, запущенных пользователями. Третья, для выполнения системных действий, запущенных из задач или из коллекторов. При работе сервера действий сначала проверяется необходимость создания сессии, далее наличие пользовательских действий и в последнюю очередь - наличие действий в системной очереди. Если есть необходимость создания сессии, она создается и проверка очередей начинается заново. Если в очереди есть пользовательские действия, то выполняется первое действие и проверка очередей запускается заново. Если пользовательская очередь действий пустая, выполняется первое действие из системной очереди проверка очередей запускается заново.
Потоки в сервере действий
Сервер действий запускает несколько различных потоков для того, чтобы выполнения действий не блокировались и минимально зависели от программного кода, используемого в действиях. Существует несколько потоков для обслуживания очереди пользовательских действий и несколько потоков для обслуживания очереди системных действий.
В каждом из этих потоков запущен поток для непосредственного выполнения действия, запуска кода для отображения пользовательского интерфейса или создания задачи из действия.
При наличии настройки в действии "startAjaxAsThread": true, выполнение кода для отображения пользовательского интерфейса осуществляется в еще одном выделенном потоке.
При использовании лаунчера nodeModule и установке для него параметра "startAsThread": true, например, "launcherPrms": { "javaScript": "server.js", "startAsThread": true }, выполнение кода для выполнения действия осуществляется в выделенном потоке.
Настройка сервера действий
- localAddress - IP адрес к которому будет привязан сервер действий. По умолчанию 127.0.0.1.
- serverAddress - IP адрес, к которому будут подключаться клиенты. По умолчанию 127.0.0.1.
- serverPort - TCP порт, который будет слушать сервер и к которому будут подключаться клиенты.
- dir - Каталог в котором располагаются действия, обычно actions
- staticDir - подкаталог в действиях из которого загружаются статические файлы для отображения интерфейса действия, например файл с разметкой страницы .pug, клиентский .js работающий в браузере, изображения и пр. Обычно static
- maxQueueLength - максимальное количество системных действий, ожидающих свою очередь на выполнение. Если системных действий в очереди будет больше, новые действия будут отбрасываться и выполнены не будут. По умолчанию 1000. Очередь может вырасти из-за автоматического выполнения действий через логику счетчиков и ошибке в этой логике, когда множество действий будут запущены одновременно.
- serverNumber - количество потоков, обеспечивающих выполнение действий, запущенных из коллекторов или из задач. По умолчанию 5.
- userServerNumber - количество потоков, обеспечивающих выполнение действий, запущенных пользователями вручную. По умолчанию 3
- layout - Описание расположения списка действий в меню ACTIONS Веб интерфейса ALEPIZ. Формируется в виде объектов двух уровней. Первым уровнем является название группы, которая будет включать в себя действия. Второй уровень - название каталогов для действий из каталога actions/. Например, для "Monitoring": { "data_browser": {}, "dashboard": {} } будет отображаться группа Monitoring в которой будут отображаться два действия из каталогов actions/data_browser и actions/dashboard. Объект, описывающий действие должен быть пустым.