Описание работы сервера действий
Сервер действий выполняет следующие задачи:
- Создание задачи из действия или добавление действия в задачу.
- Запуск программного кода для отображения интерфейса действия. Обычно это ajax.js
- Запуск программного кода для выполнения действия. Обычно это server.js
Создание задачи из действия, добавление действия в задачу и запуск программного кода для отображения интерфейса действия выполняются вне очереди.
Действия запускаются на выполнение параллельно. Если количество одновременно запущенных действий превышает количество, указанное ва настройке, то действия помещаются в очередь до тех пор, пока количество одновременно запущенных действий не станет меньше, чем указано в настройке. Для пользовательских действий количество одновременно запущенных действий указывается в maxConcurrentUserActionsNum, для системных действий в maxConcurrentSystemActionsNum
Системными действиями являются действия, запущенные из коллекторов task_runner и event_generator. Эти коллекторы запускают задачи с действиями автоматически. Остальные действия являются пользовательскими.
Действие будет выполнено без помещения в очередь если в настроечном файле действия config.json не установлена настройка "notInQueue": true. Это позволит ускорить отзывчивость пользовательского. Подробнее о настройках для действий можно прочитать в описании действия Action editor.
Существует две очереди. Одна для выполнения действий, запущенных пользователями. Вторая, для выполнения системных действий, запущенных из из коллектора taskRunner либо из eventGenerator при возникновении соответствующего события. Сначала проверяется наличие пользовательских действий и в последнюю очередь - наличие действий в системной очереди. Если в очереди есть пользовательские действия, то выполняется первое действие и проверка очередей запускается заново. Если пользовательская очередь действий пустая, выполняется первое действие из системной очереди и проверка очередей запускается заново.
Потоки в сервере действий
Сервер действий запускает несколько различных потоков для того, чтобы выполнения действий не блокировались и минимально зависели от программного кода, используемого в действиях. Существует несколько потоков для обслуживания очереди пользовательских действий и несколько потоков для обслуживания очереди системных действий.
В каждом из этих потоков запущен поток для непосредственного выполнения действия, запуска кода для отображения пользовательского интерфейса или создания задачи из действия.
При наличии настройки в действии "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. Очередь может вырасти из-за автоматического запуска действий через коллектор taskRunner.
- maxMemSize - максимальное количество памяти в Mb, которое может использовать процесс, обслуживающий действия. При превышении порога будет выведено предупреждение и выполнена попытка сборки мусора. Можно изменять без рестарта. Если настройка не задана, берется значение из файла настроек common.json. Если там настройка не указана, то 4096Mb.
- maxConcurrentUserActionsNum - максимальное количество пользовательских действий, которые могут быть запущены одновременно без помещения действий в очередь. Можно изменять без рестарта. По умолчанию 40.
- maxConcurrentSystemActionsNum - максимальное количество системных действий, которые могут быть запущены одновременно без помещения действий в очередь. Можно изменять без рестарта. По умолчанию 2.
- serverNumber - количество потоков, обеспечивающих выполнение действий, запущенных без очереди (добавление действия в задачу, запуск программного кода для отображения интерфейса действия (ajax.js) и выполнение действий с настройкой "notInQueue". По умолчанию 10.
- queueServerNumber - количество потоков, обеспечивающих выполнение действий, которые могут быть помещены в очередь. По умолчанию 10.
- layout - Описание расположения списка действий в меню ACTIONS Веб интерфейса ALEPIZ. Формируется в виде объектов двух уровней. Первым уровнем является название группы, которая будет включать в себя действия. Второй уровень - название каталогов для действий из каталога actions/. Например, для "Monitoring": { "data_browser": {}, "dashboard": {} } будет отображаться группа Monitoring в которой будут отображаться два действия из каталогов actions/data_browser и actions/dashboard. Объект, описывающий действие должен быть пустым.
- returnActionResult - (true|false) устанавливает состояние по умолчанию для параметра
returnActionResult в действиях.
Если параметр runActionOnRemoteServers установлен в true
и требуется получить результат выполнения действия в браузер, необходимо установить этот
параметр в true. Результат можно получить через функцию callbackAfterExec(result, callback)
Результатом будет являться объект,
с ключами - host:port связанного сервера, а значением - ответ от связанного сервера.
Т.е. {"alepiz1.alepiz.com:10164":
, "alepiz2.alepiz.com:10164": , ....}. По умолчанию false.