service intervals

ActivityService

ActivityService

src/main/operator/interval-services/activity.service.ts

Відстежує активність оператора. Вмикає Sleep Mode якщо оператор нічого не робить протягом 10 хвилин.


Інтервал

60 секунд — кожну хвилину перевіряє скільки часу пройшло з lastActivityTime.


Сесія активності

Сесія — це просто час останньої дії (lastActivityTime = Date.now()). Продовжується при кожному виклику updateActivity(action):

  • Оператор відправив повідомлення в чатupdateActivity('...')
  • Оператор відправив листаupdateActivity('...')

Кожна дія також записується в operatorActionsRepository.create(action) — для логування історії дій.


Sleep Mode

Умова активації: 10 хвилин (INACTIVITY_TIMEOUT) без updateActivity()SLEEP_MODE = true

При активації:

  1. Логує на сервер: saveLog({ title: 'Operator no longer active!', isError: true })
  2. Логує локально: No user activity for 1 minutes, SLEEP MODE ACTIVATED!
  3. Викликає setSleepMode({ sleepMode: true })

Що блокує Sleep Mode:

  • TaskChatService — не генерує NeedToWriteMessage (зелені таски)
  • TaskMailService — не генерує NeedToWriteMail (зелені таски); жовті (UnansweredMail) генеруються завжди

ChatSender Sleep Mode не перевіряє — продовжує працювати.

Вихід зі Sleep ModesetSleepMode({ sleepMode: false }):

  • Оновлює lastActivityTime = Date.now()
  • Запускає findChatTasks() + findNeedToWriteMailTasks() для всіх анкет паралельно (Promise.all)
  • Надсилає подію в renderer: reactService.sleepMode({ sleepMode: false })

Захисти в setSleepMode

УмоваПоведінка
!isSuccessInitializedКидає помилку, показує error в UI
SLEEP_MODE === sleepModeІгнорує (не змінює те ж саме)
Менш ніж 10 сек від останньої зміниКидає помилку (rate-limit кнопки)

Оновлення в опівночі

При старті одразу планується таймер на 00:01 наступного дняrefreshSenders():

  • Перебирає всі ladyRunners і викликає lady.chatSender.refreshSenders()
  • Скидає стан ChatSender (новий день — нові ліміти відправки)