Скрипты
В данном разделе представлен обзор структуры, принципов работы, процесса создания и импорта скриптов в качестве зависимостей. Управление скриптами в системе осуществляется в разделе Экспертиза.
О скриптах
Скрипты — это сценарии, определяющие последовательность выполнения различных действий в системе.
Работа со скриптом
Доступные операции над скриптом:
Создание скрипта
Скрипт можно создать самостоятельно или импортировать в систему.
Чтобы создать скрипт:
-
Перейдите в раздел Экспертиза. Система отобразит список элементов экспертизы.
-
На панели инструментов нажмите на кнопку Создать и выберите из выпадающего списка пункт Скрипт. Система отобразит окно создания скрипта.
-
Заполните поля скрипта, чтобы определить логику его работы.
-
Нажмите на кнопку Опубликовать версию, чтобы сохранить изменения и опубликовать созданный скрипт. Система отобразит уведомление об успешном создании скрипта. Новый скрипт отобразится в таблице раздела Экспертиза.
Чтобы скрипт стал доступен для запуска, его необходимо включить. Вы можете создать скрипт без его публикации (в виде черновика) с помощью кнопки Сохранить черновик. Система отобразит уведомление об успешном создании черновика скрипта. Черновик отобразится в таблице раздела Экспертиза.
Запуск скрипта
После того как скрипт протестирован и сохранен, он готов к запуску.
Чтобы запустить скрипт:
-
Перейдите в раздел Экспертиза. Система отобразит список элементов экспертизы.
-
Нажмите на строку скрипта в списке. Система отобразит в правой части экрана карточку этого скрипта с подробной информацией о нем.
-
Убедитесь, что скрипт включен. Переключатель в карточке скрипта должен быть переведен в активное положение.
-
Нажмите на кнопку Запустить в карточке скрипта. Скрипт будет запущен.
Скрипт можно также запустить из раздела Запуски. |
Процесс выполнения скрипта в системе
-
Если у скрипта есть аргументы, после запуска скрипта отображается окно для ввода аргументов. Типы аргументов совпадают с типами переменных и зависят от языка скрипта.
-
После задания аргументов система преобразует их в формат JSON, и передает скрипт на выполнение в воркер. При запуске скрипта система назначает ему специальный тег воркера. Нельзя путать этот тег с тегами, используемыми в Экспертизе для группировки скриптов по бизнес-модели. Тег воркера указывает, какой конкретный воркер будет выполнять этот скрипт.
С помощью менеджера воркеров можно назначать определенным воркерам скрипты для выполнения, например, по языкам, на которых они написаны, или по компонентам системы.
-
Если аргументы в скрипте отсутствуют, в воркер передается пустой JSON-файл.
-
Если имеются непереопределенные аргументы по умолчанию, аргументы будут подставлены в JSON-файл.
-
Если имеются переопределенные аргументы по умолчанию, именно они будут подставлены в JSON-файл.
-
-
После получения скрипта воркер находит исходный код скрипта в сервисе экспертизы по идентификатору скрипта, анализирует его и преобразует в готовый для выполнения код.
-
Если необходимо отдельно установить определенные зависимости скрипта, воркер производит установку зависимостей в рамках отдельной задачи. Для этого воркер скачивает зависимости из реестра зависимостей, установленного по умолчанию. Установленные зависимости в дальнейшем хранятся на этом воркере. Они используются при последующих выполнениях скрипта на этом воркере, что существенно сокращает время работы.
Импортируемые зависимости скрипта и сам скрипт должны быть написаны на одном языке.
Если скрипту назначить другой тег воркера, он, возможно, будет передан на выполнение в другой воркер. Это повлечет за собой затрату дополнительного времени на установку зависимостей на этом воркере, так как ранее они не были на нем установлены.
-
После проверки наличия и установки зависимостей воркер проверяет, запускался ли этот скрипт ранее с такими же параметрами и сохранились ли результаты этого запуска в кэше.
Если такие данные сохранены в кэше, воркер предоставит их, что ускорит выполнение процесса.
Пример
Скрипт производит определенную трансформацию входных данных в выходные данные — принимает объемные входные данные, преобразует их в JSON-файл, ищет определенное поле и передает его на выход.
Если такой скрипт с такими параметрами уже ранее запускался, воркер попытается найти кэшированные данные и предоставить их, не тратя времени на запуск скрипта.
-
Если готовый результат не найден, задача передается на выполнение. Каждый воркер в отдельный момент времени выполняет только одну задачу.
-
Воркер запускает процесс с интерпретатором требуемого языка. В файловой системе в отдельной директории сохраняются все необходимые данные. Например, аргументы, ссылки на зависимости, необходимые для запуска и указанные пользователем переменные окружения.
-
Система помещает скрипт в специальную оболочку, позволяющую через библиотеку playbooks_sdk бесшовно получать доступ к переменным, элементам экспертизы, запускам и интеграциям с другими сервисами.
-
Скрипт выполняется. Становятся доступными результат выполнения скрипта и логи. В зависимости от результата выполнения скрипта статус его запуска изменяется на Выполнен или Ошибка.
-
Воркер завершает процесс, кэширует результаты и удаляет директорию с артефактами работы, так как все необходимые данные уже сохранены. После этого воркер переходит в режим ожидания следующей задачи.
Изменение скрипта
Чтобы изменить скрипт:
-
Перейдите в раздел Экспертиза. Система отобразит сведения об имеющихся элементах экспертизы.
-
Нажмите на строку скрипта в списке. Система отобразит в правой части экрана карточку с подробной информацией о скрипте.
-
Нажмите на кнопку действий (
) в верхнем правом углу карточки и выберите опцию Изменить. Отобразится окно настроек скрипта.
Вы также можете открыть окно настроек с помощью кнопки в нижней части карточки:
-
Для опубликованной версии: нажмите на кнопку Просмотр в нижней части карточки. Система отобразит окно просмотра настроек элемента экспертизы. Нажмите на кнопку Изменить в правом нижнем углу окна.
-
Для черновика: нажмите на кнопку Изменить в нижней части карточки.
-
-
Внесите требуемые изменения в конфигурацию скрипта.
-
Нажмите на кнопку Обновить версию. Новая версия скрипта с измененной конфигурацией будет опубликована. Система отобразит соответствующее уведомление.
При публикации новой версии элемента экспертизы требуется увеличить его текущую версию в поле version
.Вы можете сохранить измененную конфигурацию скрипта в виде черновика без публикации помощью кнопки Сохранить черновик. Конфигурация будет сохранена для дальнейшего редактирования. В этом случае в верхней части карточки скрипта будет отображаться предупреждение о наличии неопубликованных изменений.
Удаление скрипта
Чтобы удалить скрипт:
-
Перейдите в раздел Экспертиза. Система отобразит сведения об имеющихся элементах экспертизы.
-
Нажмите на строку скрипта в списке. Система отобразит в правой части экрана карточку с подробной информацией о скрипте.
-
Нажмите на кнопку действий (
) в верхнем правом углу карточки и выберите опцию Удалить. Отобразится окно подтверждения удаления плейбука.
-
Нажмите на кнопку Удалить. Система удалит скрипт и отобразит соответствующее уведомление. Удаленный скрипт будет исключен из списка элементов экспертизы.
Вы также можете удалить группу элементов экспертизы. Для этого:
|
Структура RObject-схемы скрипта и информация об API
Поля метаданных
Запись метаданных включает следующие поля:
Поле | Описание | Тип данных |
---|---|---|
|
Уникальный идентификатор скрипта |
строка |
|
Тип элемента экспертизы |
В скрипте здесь всегда устанавливается значение |
|
Название. Допустимы строчные и прописные буквы латинского алфавита ( |
строка |
|
Версия скрипта в формате Semantic Versioning |
строка |
Пример заполненной структуры метаданных:
id: script_ new_version
type: script
name: script_ new_version_name
version: 1.0.0
Поле source
В первой строке блока в поле source
указывается пользовательский тег, определяющий язык, на котором написан код скрипта.
Допустимые значения тега в поле source
:
Тег | Язык скрипта |
---|---|
|
TypeScript, среда выполнения Bun |
|
TypeScript, среда выполнения Deno |
|
Python |
|
Go |
|
PowerShell |
|
Bash |
Начиная со второй строки, в блоке указывается исходный код скрипта.
Для всех языков, кроме PowerShell и Bash, в блоке кода обязательно должна быть определена функция main
, являющаяся входной точкой скрипта. Аргументы этой функции, таким образом, будут входными аргументами скрипта.
Для языков PowerShell и Bash аргументы задаются с помощью глобальных переменных.
Доступ к компонентам платформы
Из SDK можно получать доступ к компонентам платформы (например, управлению доменами).
Синтаксис импортируемых зависимостей
При импорте скриптов экспертизы в качестве зависимостей используйте следующий синтаксис для обращения к скрипту:
TypeScript (bun, deno)
-
@expertise/<source_id>
— будет импортироваться самая последняя версия скрипта; -
@expertise/<source_id>@0.0.9
— будет импортироваться указанная версия скрипта, в данном случае, 0.0.9.
Здесь <source_id>
— id элемента экспертизы типа Скрипт.
Пример
id: bun_with_expertise_dependency
name: Bun with expertise dependency
version: 0.0.6
type: script
source: !bun |
import { func } from '@expertise/bun_dependency_one_func@0.0.9'
import { func2 } from '@expertise/bun_dependency_one_func_2'
export async function main() {
console.log('main f')
func()
console.log('main f2')
func2()
}
Задание значений аргументов в скрипте
При написании скрипта можно указать аргументы, которые скрипт будет принимать при запуске.
У языков, где есть функция main
, ее аргументы будут аргументами скрипта. У языков, где нет функции main
(или другой точки входа), входные аргументы могут быть заданы через специальный синтаксис глобальных переменных.
После того как скрипт импортируется в систему, исходный код анализируется и проверяется на наличие входных аргументов. При запуске скрипта вручную, по расписанию, по триггеру или в качестве очередного этапа плейбука, могут быть заданы аргументы, если они есть.
Некоторые языки позволяют задавать значения для аргументов по умолчанию. В таком случае аргументы становятся опциональными.
Переменные окружения
Для скрипта можно задавать переменные окружения в следующем формате:
<KEY>=<value>
Здесь <KEY>
— название переменной окружения, а <value>
— значение переменной окружения.
Максимально допустимое время выполнения скрипта
Для скрипта можно задавать максимально допустимое время его выполнения (тайм-аут). По истечении этого времени процесс будет прерван принудительно.
Для задания тайм-аута скрипта используется переменная окружения TIMEOUT
.
Доступ к хранилищу данных
Когда скрипт запускается, система создает в специальном хранилище данных запись о запуске. Эти записи можно использовать в скриптах и плейбуках, например, как условие срабатывания определенного правила.
Каждая запись в хранилище имеет свой идентификатор (ID интеграции), на который пользователь может ссылаться в скриптах.
Использование API в скриптах
API используется в системе для выполнения запросов в скриптах и манипуляций с данными в рамках системы.
Языки, поддерживаемые системной библиотекой
В системе имеется собственная библиотека playbooks_sdk. Ее можно использовать при написании скриптов на следующих языках:
-
Python;
-
TypeScript (среды выполнения Bun и Deno);
-
Go;
-
VRL.
Для языков Python и TypeScript вы можете указать версию библиотеки, которую необходимо импортировать. По умолчанию система всегда импортирует самую последнюю версию библиотеки. |
Доступ к переменным и к секретам
Библиотека playbooks_sdk позволяет получать доступ к переменным и секретам в системе.
Использование переменных на примере языка Python:
import playbooks_sdk
playbooks_sdk.get_variable("u/user/foo")
playbooks_sdk.set_variable("u/user/foo", value)
Использование секретов на примере языка Python:
import playbooks_sdk
playbooks_sdk.get_secret("u/user/foo")
playbooks_sdk.set_secret("u/user/foo", value)
Работа с конфигурациями
Можно работать с уже добавленными в систему конфигурациями. Конфигурация представляет собой задаваемый пользователем набор полей, который используется для соединения с внешними системами и передачи данных в эти системы.
Поля конфигурации можно задавать в виде значений или указывать как ссылки на существующие в системе переменные или секреты.
В языках, поддерживаемых системной библиотекой playbooks_sdk, заданные поля конфигурации превращаются в конструкции языка.
Работа со схемами конфигураций
При написании скриптов на языке с сильной типизацией (например, TypeScript) можно получать схемы (типы) используемых конфигураций.
Поля настроек выполнения скрипта
Блок настроек выполнения скрипта является необязательным.
Если поля, указанные в нем, заполнены, они являются значениями по умолчанию для соответствующих параметров самой задачи.
Блок включает следующие поля:
Поле | Описание | Тип данных |
---|---|---|
|
Количество параллельных выполнений скрипта. Параметр ограничивает количество параллельных выполнений скрипта. Используется, если для корректной работы скрипта необходимо ввести это ограничение. Например, у сервера, к которому обращается задача при выполнении скрипта, может быть ограниченное количество входных соединений. Этот параметр позволяет ограничить количество выполняющихся экземпляров скрипта количеством входных соединений. В результате будет установлено разрешенное количество соединений для выполнений скрипта, а ограничение на сервере превышено не будет. Если количество параллельных выполнений не указано в самой задаче, система берет его значение из этого поля. |
целое число |
|
Максимально допустимое время выполнения задачи при параллельном выполнении в секундах. Параметр ограничивает время выполнения задачи. Если оно превысит значение, указанное в этом поле, задача будет отменена. |
целое число |
|
Время жизни (TTL, time to live) кэша данных скрипта в секундах. Параметр можно использовать при работе скрипта с внешним объектом (например, активными списками), чтобы соотносить время жизни кэша данных скрипта и объекта. Он позволяет не хранить данные в кэше скрипта дольше, чем они хранятся в кэше объекта. Время хранения определяется этим параметром. Если время жизни кэша данных скрипта не указано в самой задаче, система берет его значение из этого поля. |
целое число |
Составление скрипта
Скрипт создается в три этапа:
-
Описание блока метаданных.
-
Описание блока исходного кода скрипта на допустимом языке.
-
Описание блока настроек скрипта (опционально).
Код скрипта
После блока метаданных в скрипте размещается блок исходного кода скрипта. Этот код будет выполняться на воркере.
Пример кода (среда Bun)
# Тег, определяющий язык, на котором написан код скрипта.
source: !bun
# Функция main - входная точка скрипта.
export async function main() {
console.log("BUN SCRIPT EXECUTED SUCCESSFULLY")
return 0
}
Настройки выполнения скрипта
При необходимости заполните настройки в блоке настроек выполнения скрипта.
id: script_ new_version
type: script
name: script_ new_version_name
version: 1.0.0
source: !bun
export async function main() {
console.log("BUN SCRIPT EXECUTED SUCCESSFULLY");
return 0;
}
concurrent_limit: 3
concurrency_time_window_t: 1
cache_ttl: 1
Пример скрипта
# Блок метаданных.
id: script_new_version
type: script
name: script_new_version_name
version: 1.0.0
# Блок кода скрипта.
source: !bun
export async function main() {
console.log("BUN SCRIPT EXECUTED SUCCESSFULLY")
return 0
}
# Блок настроек.
concurrent_limit: 3
concurrency_time_window_t: 1
cache_ttl: 1
Дополнительные настройки скрипта
Настройки повторного запуска скрипта
Максимальное количество попыток запуска скрипта в случае его выполнения с ошибкой и интервал между попытками запуска скрипта задаются в параметрах триггера, в который добавлен скрипт.
Если скрипт запускается неоднократно и в нем используется конфигурация с указанной в ней переменной или секретом, результаты работы скрипта могут отличаться от запуска к запуску. Это может произойти, если в промежутке между запусками значение переменной или секрета было изменено.