diff --git a/API/common.md b/API/common.md index ec9f705..5229f20 100644 --- a/API/common.md +++ b/API/common.md @@ -211,6 +211,9 @@ interface RequestManager { log(message: string, print?: boolean): this; logStatusMessage(message: string, print?: boolean): this; setStatusMessage(message: string): this; + getRequestId(): string | null; + getScriptName(): string | null; + getScriptLongId(): string | null; } ``` Интерфейс для записи в лог (устаревший функционал) и работы со статусными сообщениями. Все функции возвращают `this`. @@ -244,6 +247,27 @@ setStatusMessage(message: string): this; +```js +getRequestId(): string | null; +``` +Каждый запуск скрипта должен существовать в рамках пользовательского или системного [запроса](../appendix/glossary.md#request). Метод возвращает идентификатор текущего запроса. Предполагает возможность вернуть `null`, но такое поведение можно смело считать багом системы запуска скриптов. По идентификатору можно найти запись о запуске скрипта в истории запуска скриптов в web-интерфейсе на вкладке `Macros` -> `Scripts` -> `Launch History` и в панели администратора на вкладке `Requests` -> `History`, если запрос на запуск скрипта был сделан пользователем. Скрипты, запущенные по расписанию или через систему API сервисов считаются системными. + + + +```js +getScriptName(): string | null; +``` +Возвращает имя сущности текущего исполняемого скрипта. В случае запуска сниппета кода с помощью метода [`ResultActionsInfo.makeCodeExecutionAction()`](./scriptChains.md#make-code-execution-action) возвращает `null`. + + + +```js +getScriptLongId(): string | null; +``` +Возвращает [`longId`](#long-id) сущности текущего исполняемого скрипта. В случае запуска сниппета кода с помощью метода [`ResultActionsInfo.makeCodeExecutionAction()`](./scriptChains.md#make-code-execution-action) возвращает `null`. + + + ### Интерфейс ExportObfuscationState ```ts interface ExportObfuscationState { diff --git a/API/scriptChains.md b/API/scriptChains.md index 0f13a59..5777e1a 100644 --- a/API/scriptChains.md +++ b/API/scriptChains.md @@ -22,6 +22,7 @@ makeMacrosAction(identifier: string | number): ResultMacrosAction; + ```js makeCodeExecutionAction(code: string): CodeExecutionAction; ``` @@ -154,6 +155,8 @@ appendAfter(): this; В такой ситуации скрипты исполнятся в следующем порядке: `3 -> 4 -> 5 -> 1 -> 2`. +Запущенный таким образом скрипт унаследует идентификатор [запроса](../appendix/glossary.md#request) от своего родителя. + ```js @@ -290,7 +293,15 @@ setTaskDescription(description: string): this; ```js run(): TaskPromise | null; ``` -Запускает скрипт с помощью асинхронного механизма выполнения. Вызов метода породит задачу, которая не будет дожидаться завершения текущей задачи, а будет выполняться сразу. Так как родительская задача не завершается и может работать параллельно с дочерней, то важно следить за совместимостью режимов блокировок родительской и дочерней задач (иначе можно попасть в `dead lock`). На данный момент существует защита от погружения в бесконечную рекурсию и задача, запущенная через `run()`, не может сама использовать этот метод. Если до запуска скрипта был вызван метод `withPromise(true)`, возвращает [`TaskPromise`](#task-promise), иначе — `null`. +Запускает скрипт с помощью асинхронного механизма выполнения. Вызов метода породит задачу, которая не будет дожидаться завершения текущей задачи, а будет выполняться сразу. + +Так как родительская задача не завершается и может работать параллельно с дочерней, то важно следить за совместимостью режимов блокировок родительской и дочерней задач (иначе можно попасть в `dead lock`). + +На данный момент существует защита от погружения в бесконечную рекурсию и задача, запущенная через `run()`, не может сама использовать этот метод. + +Запущенный таким образом скрипт будет считаться порождённым системой и получит системный идентификатор [запроса](../appendix/glossary.md#request), даже если родительский скрипт был запущен пользователем. + +Если до запуска скрипта был вызван метод `withPromise(true)`, возвращает [`TaskPromise`](#task-promise), иначе — `null`. @@ -310,7 +321,7 @@ interface CodeExecutionAction extends BaseCodeExecutionAction { setTimeLimit(value: number): this; } ``` -Интерфейс действия запуска динамического кода. Наследуется от [`BaseCodeExecutionAction`](#base-code-execution-action). +Интерфейс действия запуска динамического кода. Наследуется от [`BaseCodeExecutionAction`](#base-code-execution-action). Скрипты, порождённые этим интерфейсом, не имеют имени и [`longId`](./common.md#long-id). diff --git a/API/scripts.om.d.ts b/API/scripts.om.d.ts index 77b3996..53af31a 100644 --- a/API/scripts.om.d.ts +++ b/API/scripts.om.d.ts @@ -581,6 +581,9 @@ export interface RequestManager { log(message: string, print?: boolean): this; logStatusMessage(message: string, print?: boolean): this; setStatusMessage(message: string): this; + getRequestId(): string | null; + getScriptName(): string | null; + getScriptLongId(): string | null; } export interface UserInfo { diff --git a/appendix/glossary.md b/appendix/glossary.md index 69ddbd8..b2cf87f 100644 --- a/appendix/glossary.md +++ b/appendix/glossary.md @@ -13,6 +13,18 @@ ***Рабочая директория скрипта*** – временная папка на сервере, которая является рабочей директорией скрипта. Скрипт ***НЕ*** может выйти за её пределы. Перед запуском скрипта создаётся эта папка, скрипт запускает команду [`chroot`](https://ru.wikipedia.org/wiki/chroot) в неё, исполняется сам, после чего папка удаляется. + +***Запрос*** – последовательность операций, запущенных пользователем или системой. Запрос чтения и модификации данных создаёт контекст, который содержит: + +- идентификатор запроса, время поступления и время завершения, +- сам исходный запрос, идентификатор пользователя, модель, в контексте которой он выполняется, +- список агентов (воркеров), которые назначены для выполнения запроса, +- список шагов выполнения запроса, +- результат запроса (ответ на запрос). + +Запросы могут быть порождены пользователями, тогда они имеют идентификаторы вида `%латинские буквы и цифры%-%число, отличное от нуля%`. Если запрос порождён системой, то он будет иметь идентификатор вида `%латинские буквы и цифры%-0`. Скрипты, запущенные по расписанию или через систему API сервисов считаются системными. + +Запрос регистрируется в системе и может быть отменён, а также запрос логируется в системные журналы. Список активных запросов можно увидеть в панели администратора в разделе `Requests` на вкладке `Requests`. Рядом находится вкладка `History` с историей **пользовательских** запросов (системных запросов там нет). Системные запросы скриптов можно увидеть в web-интерфейсе Optimacros на вкладке `Macros` -> `Scripts` -> `Launch History`. [Приложения](appendix.md) diff --git a/changelog.md b/changelog.md index 5e9da48..9229907 100644 --- a/changelog.md +++ b/changelog.md @@ -2,6 +2,7 @@ | Дата релиза | Тег релиза | Версия ScriptAPI | Версии MiddleWork | Версия приложения | Изменения | | --- | --- | --- | --- | --- | --- | +| xx.xx.xxxx | [v9.300](https://github.com/optimacros/scripts_documentation/tree/v9.300) | — |