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
При активації:
- Логує на сервер:
saveLog({ title: 'Operator no longer active!', isError: true }) - Логує локально:
No user activity for 1 minutes, SLEEP MODE ACTIVATED! - Викликає
setSleepMode({ sleepMode: true })
Що блокує Sleep Mode:
TaskChatService— не генеруєNeedToWriteMessage(зелені таски)TaskMailService— не генеруєNeedToWriteMail(зелені таски); жовті (UnansweredMail) генеруються завжди
ChatSender Sleep Mode не перевіряє — продовжує працювати.
Вихід зі Sleep Mode — setSleepMode({ 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 (новий день — нові ліміти відправки)