Системные события sys_event зависли в статусе Ready / Готово

:speech_balloon: Description
После обновления распределённого экземпляра могут быть потеряны системные события, которые были запланированы до обновления или созданы в период проведения работ по обновлению.

:heavy_check_mark: Workaround

Необходимая роль: admin

По умолчанию, скрипты выполняют перезапуск событий, которые зависли более чем на две минуты. Параметр задается в строке скрипта const MINUTES = 2;

Создайте первый скрипт:

  • Перейдите по ссылке /record/sys_script
  • Заполните поле скрипт значением:
const MINUTES = 2;
const freezedEvent = new SimpleRecord('sys_event');
freezedEvent.addQuery('state', 'ready');
freezedEvent.addEncodedQuery(`%28%28process_started_atISEMPTY%5Esys_created_at%3Cjavascript%3A+%7Bconst+now+%3D+new+SimpleDateTime%3DOP%3DCP%3B+now.addSeconds%3DOP-${MINUTES * 60}%3DCP%3B+return+now.getValue%3DOP%3DCP+%7D%29%5EOR%28process_started_atISNOTEMPTY%5Eprocess_started_at%3Cjavascript%3A+%7Bconst+now+%3D+new+SimpleDateTime%3DOP%3DCP%3B+now.addSeconds%3DOP-${MINUTES * 60}%3DCP%3B+return+now.getValue%3DOP%3DCP+%7D%29%29%5Estate%3Dready`);
freezedEvent.query();
ss.info('Freezed Events: ' + freezedEvent.getRowCount());
freezedEvent.setMultipleValue('state', 'new_ready');
// freezedEvent.updateMultiple();
  • Сохраните форму.
  • Запустите скрипт по кнопке Run.
  • Обратите внимание на количество зависших записей под полем скрипт. Значение должно совпадать с количеством записей в списке /list/sys_event?condition=%28%28process_started_atISEMPTY%5Esys_created_at<javascript%3A+%7Bconst+now+%3D+new+SimpleDateTime%3DOP%3DCP%3B+now.addSeconds%3DOP-120%3DCP%3B+return+now.getValue%3DOP%3DCP+%7D%29%5EOR%28process_started_atISNOTEMPTY%5Eprocess_started_at<javascript%3A+%7Bconst+now+%3D+new+SimpleDateTime%3DOP%3DCP%3B+now.addSeconds%3DOP-120%3DCP%3B+return+now.getValue%3DOP%3DCP+%7D%29%29%5Estate%3Dready
  • Раскоментируйте строку скрипта:
    // freezedEvent.updateMultiple();
  • Сохраните форму.
  • Запустите скрипт по кнопке Run.
  • Дождитесь завершения выполнения скрипта.

Создайте второй скрипт:

  • Перейдите по ссылке /record/sys_script
  • Заполните поле скрипт значением:
const freezedEvent = new SimpleRecord('sys_event');
freezedEvent.addQuery('state', 'new_ready');
freezedEvent.query();
ss.info('Freezed Events: ' + freezedEvent.getRowCount());
freezedEvent.setMultipleValue('state', 'ready');
freezedEvent.updateMultiple();
  • Сохраните форму.
  • Запустите скрипт по кнопке Run.
  • Дождитесь завершения выполнения скрипта.
  • Перейдите по ссылке списке /list/sys_event?condition=%28%28process_started_atISEMPTY%5Esys_created_at<javascript%3A+%7Bconst+now+%3D+new+SimpleDateTime%3DOP%3DCP%3B+now.addSeconds%3DOP-120%3DCP%3B+return+now.getValue%3DOP%3DCP+%7D%29%5EOR%28process_started_atISNOTEMPTY%5Eprocess_started_at<javascript%3A+%7Bconst+now+%3D+new+SimpleDateTime%3DOP%3DCP%3B+now.addSeconds%3DOP-120%3DCP%3B+return+now.getValue%3DOP%3DCP+%7D%29%29%5Estate%3Dready

Если по ссылке /list/sys_event?condition=%28%28process_started_atISEMPTY%5Esys_created_at<javascript%3A+%7Bconst+now+%3D+new+SimpleDateTime%3DOP%3DCP%3B+now.addSeconds%3DOP-120%3DCP%3B+return+now.getValue%3DOP%3DCP+%7D%29%5EOR%28process_started_atISNOTEMPTY%5Eprocess_started_at<javascript%3A+%7Bconst+now+%3D+new+SimpleDateTime%3DOP%3DCP%3B+now.addSeconds%3DOP-120%3DCP%3B+return+now.getValue%3DOP%3DCP+%7D%29%29%5Estate%3Dready останутся записи, повторите запуск первого скрипта и запуск второго скрипта пока в списке не останется записей.