Модуль пользовательских скриптов
Модуль пользовательских скриптов (МПС) позволяет реализовать и автоматизировать запуск пользовательской бизнес-логики.
Настройка модуля осуществляется в интерфейсе VK GRC в разделе Настройки → Настройки МПС.
Информация в разделе представлена в трех вкладках:
- Пользовательские скрипты — перечень созданных ПС.
- Запуски — история запусков пользовательских скриптов.
- Расписания — расписания автоматического запуска ПС.
Хранение информации о пользовательских скриптах осуществляется в схемах user_scripts и scheduler, которые включают в себя следующие таблицы:
На вкладке Пользовательские скрипты отображены все ранее созданные пользовательские скрипты в табличном виде с указанием следующей информации:
- Код — кодовое обозначение скрипта.
- Наименование — название скрипта.
- Признак активности — признак активности расписания скрипта.
- Дата создания — дата и время создания скрипта.
- Дата изменения — дата и время изменения скрипта.
На вкладке доступна кнопка Создать для создания нового пользовательского скрипта.
Карточка редактирования карточки пользовательского скрипта доступна при двойном нажатии на строку в общем списке.
Карточка содержит в себе три вкладки:
- Главная — общая информация о карточке.
- Запуск — для ручного запуска скрипта.
- История запусков — перечень запусков
На вкладке Главная содержится общая информация о пользовательском скрипте.

Карточка содержит следующие поля:
- Код — кодовое обозначение объекта.
- Наименование — название пользовательского скрипта.
- Приоритет — целочисленное значение приоритета. Используется для очереди, когда очередная задача берется в работу.
- Категория пользовательского скрипта — выбор категории из списка.
- Признак активности — признак активности скрипта.
- Таймаут — количество секунд ожидания выполнения скрипта.
- Наименование для кнопки формы запуска — текст, отображаемый на кнопке запуска скрипта на вкладке Запуск.
- Тип запроса формы запуска — возможные варианты:
- simple — стандартная форма запуска скрипта.
- download — для загрузки файла по итогам запуска скрипта.
- Наименование для заголовка формы запуска — текст, отображаемый в заголовке на вкладке Запуск.
- Код скрипта — python код скрипта.
Также на форме расположена кнопка Добавить аргументы для добавления параметров исполнения пользовательского скрипта. Нажатие на кнопку открывает дополнительную группу полей:
- Код аргумента — кодовое обозначение аргумента.
- Наименование аргумента — название аргумента в интерфейсе.
- Признак обязательности — обязательность заполнения аргумента.
- Тип аргумента — выбор из списка. Возможные варианты:
- Поле с численным вводом — допускается только введение числовых значений.
- Поле с текстовым вводом — допускается введение любых символов.
- Многострочное поле с текстовым вводом — допускается введение текста в несколько строк.
- Поле с выбором варианта — выбор значения из списка.
- Поле с выбором множества вариантов — выбор нескольких значений из списка.
- Флаг — выбор из вариантов да/нет.
- Поле с выбором даты — выбор даты на календаре.
- Значение по умолчанию — стандартное значение аргумента.
- Флаг загрузки всего списка опций — при выборе показывает сразу все доступные значения в списке (доступно при типе аргумента «Поле с выбором варианта/множества вариантов»).
- URL для загрузки опций — ссылка на источник, из которого берутся значения для поля (доступно при типе аргумента «Поле с выбором варианта/множества вариантов»).
- Максимальная длина — максимально допустимое количество символов в строке аргумента.
- Ограничение по регулярному выражению — точные рамки для вводимых значений.
Вкладка Запуск используется для ручного запуска скрипта.
Также если у скрипта есть аргументы, то на этой вкладке будет отображена форма, где пользователь сможет ввести значения для них.
На вкладке История запусков расположен детализированный перечень всех запусков выбранного скрипта.

Информация на вкладке представлена в табличном виде и содержит следующую информацию:
- ID — идентификатор запуска
- Код ПС – кодовое обозначение пользовательского скрипта.
- Источник ПС — способ запуска пользовательского скрипта.
- Статус завершения — статус, с которым завершился запуск.
- Запущен — дата и время запуска.
- Завершен — дата и время завершения.
Также в конце каждой строки доступна кнопка ••• с опцией Открыть. Нажатие на кнопку откроет Карточку просмотра запуска пользовательского скрипта
На вкладке Запуски находится перечень запусков всех пользовательских скриптов.
Информация на вкладке представлена в табличном виде и содержит следующую информацию:
- ID — идентификатор запуска ПС.
- Код ПС — кодовое обозначение ПС.
- Источник ПС — способ запуска пользовательского скрипта.
- Статус завершения — статус, с которым завершилось выполнение ПС.
- Дата запуска — дата и время запуска ПС.
- Дата завершения — дата и время завершения выполнения ПС.
Карточка просмотра запуска пользовательского скрипта доступна при двойном нажатии на строку в общем списке. Карточка отображает детальную информацию обо всех запусках пользовательского скрипта. Информация на карточке нередактируемая.
Карточка содержит в себе две вкладки:
- Главная — общая информация о запуске ПС.
- История статусов — перечень статусов выполнения ПС.
На вкладке Главная находится общая информация о запуске пользовательского скрипта. Данные на странице представлены в табличном виде и содержат следующую информацию:
- ID — идентификатор запуска ПС.
- Код пользовательского скрипта — кодовое обозначение ПС.
- Источник запуска — способ запуска пользовательского скрипта.
- Дата запуска — дата и время запуска ПС.
- Дата завершения — дата и время завершения выполнения ПС.
- Статус завершения — статус, с которым завершилось выполнение ПС.
- Результат — фактически выполненная часть return в коде на Python.
- Логи – в данное поле может быть записана ошибка выполнения, сообщение по таймауту, логи выполнения самого скрипта (например что-то внутри выводилось с помощью print) и т.д.
На вкладке История статусов находятся статусы выполнения. Данные на странице представлены в табличном виде и содержат следующую информацию:
- Статус — наименование статуса. Возможные варианты:
- SUCCESS — успешно.
- ERROR — ошибка.
- BLOCKED — остановлено (скрипт был не активен, is_active = false).
- IN_PROGRESS — в процессе.
- TIMEOUT — закончилось время на исполнение.
- INITIALIZED — запуск ПС инициализирован и ждёт очереди исполнения.
- CANCELLED — запуск ПС прерван.
- Время перехода — дата и время изменения статуса.
На вкладке Расписания находится перечень ранее настроенных расписаний запуска пользовательских скриптов.
Информация на вкладке представлена в табличном виде и содержит следующую информацию:
- Код расписания — кодовое обозначение расписания.
- Расписание — наименование расписания.
- Признак активности — признак того, что расписание запуска активно.
- Начиная с даты — дата начала действия расписания запуска ПС.
- Заканчивая датой — дата окончания действия расписания запуска ПС.
- Код ПС — кодовое обозначение ПС.
- Дата создания — дата и время создания расписания.
- Дата изменения — дата и время изменения расписания.
Также на вкладке доступна кнопка Создать для создания нового расписания запуска ПС.
Карточка редактирования расписания пользовательского скрипта доступна при двойном нажатии на строку в общем списке.
Карточка содержит следующие поля:
- Код — кодовое обозначение.
- Пользовательский скрипт выбор исполняемого пользовательского скрипта из списка.
- Начиная с даты — дата начала действия расписания.
- Заканчивая датой — дата окончания действия расписания.
- Расписание — cron расписание.
- Параметры запуска — данные аргументов в формате JSON, которые будут использованы при запуске скрипта.
- Признак активности — является ли расписание активным.
Код пользовательского скрипта фактически выполняется в «песочнице» с ограниченной функциональностью, которая определяет доступные функции, импорты и позволяет безопасно запустить код.
Список установленных запретов:
- Запрещается импорт библиотек, которые не входят в список разрешенных.
Список доступных библиотек:SCRIPT_IMPORT_WHITELIST: list = ["asyncio","time","datetime","_strptime","sqlalchemy","aiohttp","httpx","sdk","openpyxl","io","os","gzip","tar","typing","pydantic","json","orjson","decimal","logging","grpc","aiokafka","enum","pydantic","collections","random","uuid",] - Запрещается доступ к определённым функциям нескольких модулей (библиотек, которые могут быть импортированы пользователем в коде скрипта). Технически, при импорте какого-либо из модулей, описанных ниже, в скрипте на этапе выполнения кода будет загружен подменённый (кастомный) модуль с ограниченным набором функций:
- в
"os"запрет на функциюsystem(). - в
"aiohttp"запрет модулейweb,web_serverиworker. - в
"grpc"и"grpc.aio"запрет на модульserverи классServer. - в
"aiokafka"запрет на модулиconsumerиAIOKafkaConsumer.
- в
Список доступных кастомных функций:
get_user_id()— функция возвращает идентификатор пользователя, который запустил исполнение данного пользовательского скрипта.get_run()– функция возвращает данные о текущем запуске пользовательского скрипта. Содержит следующие поля:- id — идентификатор запуска.
- script_code — код скрипта.
- script_source — источник запуска.
- payload — параметры запуска.
- exec_start — дата начала исполнения запуска.
- created_at — дата создания запуска.
- status — статус запуска.
Список доступных кастомных модулей и их функций:
- Модуль SDK — набор схем конфигурационных настроек, которые могут быть использованы в рамках скрипта.