Перейти к содержимому
Документация
Конструктор модулейВеб-интерфейсAPI

Events

Подписка на события движка, панель хода выполнения сценария и журнал логов.

Интерфейс постоянно получает сигналы: интерфейс загрузился, установлена связь с движком, пользователь запустил сценарий, появилась новая запись в журнале, обновилась статистика. Этот раздел объясняет, как на такие сигналы подписываться и как показывать ход выполнения сценария.


Три уровня событий

УровеньКак подписатьсяПримеры
Жизненный цикл интерфейсаdocument.addEventListenerinterface:ready, engine:connected
Рабочий процессEngine.api.ui.on(...)workflow:start, workflow:stop
Движок (реальное время)Engine.api.eventListener.on(...)новые записи в журнале, обновления статистики и состояния

События рабочего процесса описаны в разделе Runtime. Здесь — про остальные два уровня.


События жизненного цикла (DOM)

Эти события возникают на объекте document и отражают готовность интерфейса и связь с движком.

СобытиеКогда возникает
interface:readyИнтерфейс полностью инициализирован — API готово
engine:connectedУстановлена связь с движком
engine:disconnectedСвязь с движком потеряна
ui:eventПришло событие движка (обёртка над уровнем движка)
document.addEventListener('interface:ready', () => {
  console.log('Интерфейс готов');
});

document.addEventListener('engine:connected', () => {
  console.log('Движок на связи');
});

document.addEventListener('engine:disconnected', () => {
  Engine.api.dialog.alert('Связь с движком потеряна', { type: 'warning' });
});

События движка

Engine.api.eventListener — подписка на то, что происходит внутри движка во время выполнения: новые записи в журнале, обновления статистики, изменения состояния. Это основной способ обновлять интерфейс в реальном времени.

Подписаться на событие движка

Engine.api.eventListener.on(событие, обработчик) — подписывается на событие. В обработчик приходит информация о произошедшем.

// Новая запись в журнале
Engine.api.eventListener.on('log_added', (info) => {
  console.log('Лог:', info);
});

// Обновилась статистика выполнения
Engine.api.eventListener.on('statistics_updated', (info) => {
  updateCounters(info);
});

// Изменилось состояние
Engine.api.eventListener.on('state_changed', (info) => {
  refreshView(info);
});

Отписаться от события движка

Engine.api.eventListener.off(событие, обработчик) — отписывается от события.

Подписаться на одно срабатывание

Engine.api.eventListener.once(событие, обработчик) — подписывается один раз: обработчик сработает при первом наступлении события и автоматически отпишется.

Проверить состояние слушателя

Engine.api.eventListener.getStatus() — возвращает состояние подписки на события движка: инициализирована ли и активна ли связь.

const res = Engine.api.eventListener.getStatus();
console.log('Слушатель активен:', res.data.connected);

Подписка на все события

Специальное имя '*' получает любые события — удобно для отладки. Первым аргументом в обработчик приходит имя события.

Engine.api.eventListener.on('*', (eventName, info) => {
  console.log('Событие движка:', eventName);
});

ℹ️ Если вам нужна готовая визуализация хода выполнения, не собирайте её вручную из событий — используйте панель хода выполнения: она уже подписана на нужные события и рисует прогресс, статистику и журнал.


Панель хода выполнения

Engine.api.scenarioView — встроенная панель, показывающая, как идёт выполнение сценария или задачи: статистику (успешно, ошибки, предупреждения), прогресс потоков и журнал выполнения.

Показ и скрытие

  • show() — показать панель.
  • hide() — скрыть панель.

Привязка к выполнению

  • start(имя, идентификатор?) — начать отображение нового запуска.
  • attach(идентификаторЗадачи, параметры?) — привязать панель к уже запущенной задаче и отслеживать её.
  • detach() — отвязать панель от текущего выполнения.
const res = await Engine.api.engine.startTask('ProcessQueue', { max_threads: 3 });
Engine.api.scenarioView.show();
Engine.api.scenarioView.attach(res.data.task_id);

Управление отображаемым выполнением

  • stop() — остановить.
  • pause() / resume() — приостановить и возобновить.

Журнал и статистика панели

  • addLog(тип, сообщение, время?) — добавить запись в журнал панели.
  • clearLog() — очистить журнал.
  • updateStats(изменения) — обновить счётчики статистики.
Engine.api.scenarioView.addLog('info', 'Обработка началась');
Engine.api.scenarioView.updateStats({ success: 10, failed: 1 });

Состояние панели

  • getState() — возвращает состояние панели: видима ли, идёт ли выполнение, на паузе ли, текущая статистика.
  • closeAllPopups() — закрыть все всплывающие окна панели.
const res = Engine.api.scenarioView.getState();
console.log(res.data.running, res.data.stats);

Журнал логов

Engine.api.log — доступ к журналу записей интерфейса.

Добавить запись в журнал

Engine.api.log.addEntry(тип, сообщение, время?) — добавляет запись в журнал. тип — категория записи (например, 'info', 'success', 'warning', 'error').

Engine.api.log.addEntry('success', 'Файл сохранён');

Получить все записи журнала

Engine.api.log.getEntries() — возвращает все записи журнала.

Узнать число записей

Engine.api.log.getCount() — возвращает количество записей.

Очистить журнал

Engine.api.log.clear() — очищает журнал.

const res = Engine.api.log.getCount();
if (res.data > 1000) Engine.api.log.clear();

Пример: собственная реакция на ход выполнения

document.addEventListener('engine:connected', () => {
  // Обновляем свой счётчик при каждой новой записи в журнале
  Engine.api.eventListener.on('log_added', () => {
    const count = Engine.api.log.getCount().data;
    document.getElementById('logCount').textContent = count;
  });

  // Реагируем на обновление статистики
  Engine.api.eventListener.on('statistics_updated', (info) => {
    console.log('Статистика обновлена', info);
  });
});