Использование портов порядка выполнения
Сценарии в Loginom — это цепочки узлов, где каждый обрабатывает данные и передаёт результат следующему. По умолчанию порядок выполнения определяется связями между портами: узлы запускаются по готовности входных данных. При этом оптимизируется выполнение: запускаются только задействованные узлы, а независимые обрабатываются параллельно, что ускоряет работу с большими объёмами данных. Однако автоматический порядок не всегда подходит для логики задачи — например, когда нужно сначала выгрузить данные, а затем отправить уведомление, или когда параллельная запись в БД вызывает конфликты.
В таких случаях нужную последовательность выполнения узлов можно задать с помощью портов порядка выполнения. В демопримере на разных кейсах показано, как можно управлять ходом выполнения сценария через порты порядка выполнения. Подробнее о механизме работы портов порядка выполнения можно узнать в документации Управление ходом выполнения.
Примечание: Демопример имеет ограничение демонстрации всех возможностей при запуске на демостенде (Запуск демо). Рекомендуем установить пример локально.
1. Узлы без входных/выходных портов
Подмодель демонстрирует, что для корректного запуска цепочки узлов из вне подмодели недостаточно только потоков данных между ними. Необходимо явно задавать порядок выполнения с помощью служебных портов.
Варианты реализации
Внутри подмодели представлены два варианта, наглядно показывающих разницу:
Узлы соединены только потоками данных. При запуске подмодели извне её внутренняя логика не выполняется, так как отсутствуют порты, инициирующие запуск цепочки.
В начале сценария (перед узлом импорта) и в конце (после узла экспорта) добавлены порты порядка выполнения. Это обеспечивает полное выполнение всех этапов при запуске подмодели из любого внешнего сценария, так как порты задают четкую последовательность: импорт → обработка → экспорт.
Внутри подмоделей реализована цепочка узлов: Импорт данных → Обработка данных → Экспорт данных.
Используется узел импорта Loginom Data файла для получения и обработки данных.
| Имя | Метка |
|---|---|
| Класс | |
| Код Клиента | |
| Квартал |
На данном этапе аналитик может реализовать свой вариант обработки данных. В демопримере с помощью узла Группировка настроена группировка по полю Код клиента.
Настройка узла Группировка произведены следующим образом:
- Группа — Код клиента
- Показатели — Класс (Последний) и Квартал (Последний)
Обработанные данные выгружаются в Excel файл.
2. Порядок работы с БД
Подмодель демонстрирует, как порядок выполнения узлов влияет на запись в базу данных. На двух примерах показано, что без настройки очередности возникает ошибка database is locked, а при корректной настройке запись выполняется успешно.
Варианты реализации
Узлы экспорта не имеют портов порядка выполнения, поэтому запись в таблицу выполняется параллельно. Это приводит к конфликтам при одновременном обращении к базе данных и возникновению ошибки database is locked.
Что происходит:
-
Все узлы экспорта пытаются одновременно записать данные в одну таблицу
-
Возникает конфликт доступа к БД
-
Система возвращает ошибку database is locked
Между узлами экспорта настроены порты порядка выполнения, что обеспечивает последовательную запись: сначала выполняется первый экспорт, затем второй и так далее.
Как настроено:
-
Порты порядка выполнения установлены между всеми узлами экспорта
-
Запись выполняется строго по очереди, без параллельных обращений
-
Конфликты исключены, ошибка database is locked не возникает
Оба варианта имеют одинаковую структуру узлов, но отличаются наличием портов порядка выполнения между узлами экспорта:
На странице Подключения настроено подключение SQLite:
- Имя файла — data/sqlite_db.db
Выполняется получение данных используя узел импорта Excel файл.
Таблица id_value_1.xlsx
| Имя | Метка |
|---|---|
| id | |
| value_1 |
Таблица id_value_2.xlsx
| Имя | Метка |
|---|---|
| id | |
| value_2 |
Таблица id_value_3.xlsx
| Имя | Метка |
|---|---|
| id | |
| value_3 |
- Имя таблицы — table
- Тип экспорта — Обновить существующие записи в таблице
- Ключевое поле — id
На странице соответствие исходных столбцов полям таблицы устанавливается соответствие между полями исходных данных и таблицы, в которые будут происходить записи.
В сценарии узел Соединение (переменные) используется для сбора статусов выполненых запросов к БД SQLite и вывода их наружу.
3. Порядок выполнения узлов с таймаутом
Подмодель демонстрирует настройку принудительной задержки перед запросом к API‑сервису для соблюдения ограничений на частоту обращений. API‑сервисы часто ограничивают количество запросов в единицу времени, и превышение лимита может привести к блокировке или ошибкам.
В подмодели реализована цепочка, которая последовательно выполняет подготовку данных, принудительную паузу и отправку запроса к внешнему сервису ipapi.co. Порядок выполнения настроен через порты порядка выполнения.
Примечание: В данном примере используются не существующие IP-адреса.
В подмодели формируется URL-строки для получение ответа от сервиса ipapi.co. В первую очередь выполняется импорт Excel файла с IP-адресами и их форматами, в котором должен вернуть ответ API-сервис.
| Имя | Метка | Комментарий |
|---|---|---|
| ip | IP-адрес, по которому нужно получить информацию | |
| format | Формат, в котором должен вернуть ответ API-сервис. В данном примере используется формат JSON. |
После импорта данных, извлекается первый IP-адресс и его формат, используя узел Таблица в переменные.
В узле Калькулятор (переменные) формируется URL с параметрами по маске https://ipapi.co/{ip}/{format}/
В узле JavaScript реализуется принудительная задержка перед вызовом API-сервиса. Во входные переменные узла передается переменная sleep_time, в которой указывается количество секунд задержки.
На странице Подключения настроено подключение REST-сервис:
- URL сервиса —
https://ipapi.co/{ip}/{format}/ - Метод — GET
- Тип URL параметров — Строка запроса
- Допустимы Content-Type ответа — application/json
На вход узла REST-сервис, созданного на основе настроенного подключения, подан URL, сформированный в узле Сборка URL.
Узел REST-запрос отправляет REST-сервису запрос и получает ответ в формате JSON.
Порядок выполнения
Между компонентами настроены порты порядка выполнения, гарантирующие последовательность:
а) Подмодель подготовки — формирует URL с параметрами
б) Узел JavaScript (таймаут) — выполняет принудительную задержку
в) Узел Подключение — подготавливает соединение для получения ответа от сервиса ipapi.co
г) Узел REST-запрос — отправляет запрос и получает ответ от сервиса ipapi.co
Такая очередность гарантирует, что перед каждым обращением к API-сервису выполняется пауза, что исключает превышение допустимой частоты запросов.
4. Порядок выполнения подмоделей
Подмодель демонстрирует, как с помощью портов порядка выполнения обеспечить очередность запуска подмоделей. Это гарантирует, что следующая подмодель запустится только после того, как предыдущая полностью завершит свою работу.
На сценарии предоставлен скриншот фрагмента демопримера Уведомления в Loginom с помощью чат-бота Telegram. Сценарий состоит из двух подмоделей, соединенных портами порядка выполнения:
Выполняет основной алгоритм обработки данных:
- Импорт данных
- Обработка данных
- Экспорт обработанных данных в Excel-файл
Сигналом для отправки уведомления является выгрузка данных в Excel-файл.
Отправляет уведомление в Telegram-чат о завершении работы.
Порядок выполнения
Порты порядка выполнения настроены следующим образом:
а) Сначала выполняется подмодель Пример сценария
б) Только после её полного и успешного завершения запускается подмодель Telegram-bot
Важно: Если в первой подмодели возникнет ошибка (например, сбой при экспорте), вторая подмодель не запустится. Это гарантирует, что уведомление об успехе отправляется только при действительно успешном выполнении всех этапов.
Уведомления в Loginom при помощи чат-бота Telegram
Скачайте и откройте файл в Loginom. При необходимости Loginom CE можно скачать бесплатно
Минимальные требования к системе:
- Операционная система: Windows 10 и выше
- CPU x64: 2 core 1
- Оперативная память: 4 GB
- Жесткий диск: 10 GB
1 Поддерживается работа на x64 процессорах Intel Core, AMD FX и более новых, содержащих инструкции SSE4.2, POPCNT.