Прибирання завершених тасків після disconnect
src/golden/workers/bull/queue/jobCloseOperatorTask.queue.ts
Не cron. Викликається програмно через addJobCloseOperatorTasks({operatorFamilyId}) коли оператор відключився від системи. Між постановкою і виконанням — 60 секунд (delay: 60000).
Grace period: якщо за ці 60 секунд оператор повернувся — попередній job стирається (addJobCloseOperatorTasks спочатку видаляє існуючий job з тим самим jobId = operatorFamilyId). Якщо не повернувся — job виконується.
Що відбувається
Послідовно виконує:
- Через RMQ дозапитує поточний стан оператора (
StackOperatorWithFamily.routingKey) - Звіряє
lastConnectAtіlastDisconnectAt: працює далі тільки якщоlastDisconnect > lastConnectІ минуло понад 60 сек після disconnect (інакше тихоdone()) - Бере з
golden_taskтаски оператора, у яких вже проставленоanswerабоcanceled(тобто завершені — або відповіли, або скасували) - Для кожного:
- Якщо
dateTimerEnd < now - 60s— додатково проставляєcanceled: not_active_by_timerчерезTaskRepository.setTaskCanceledByTaskId(поверх існуючого статусу) - Безумовно видаляє з
golden_task(findByIdAndDelete)
- Якщо
Тобто це чистка вже-завершених тасків з активної колекції, а не закриття активних. Стандартно цим займається archive() у update-temp-online; тут — точкова чистка після disconnect-у конкретного оператора.
❓ TODO — навіщо окрема чистка тут, якщо archive() і так пройдеться по них через 10 хв? І навіщо ставити canceled: not_active_by_timer поверх вже існуючих answer/canceled? Уточнити в команді.
Моніторинг
Лише logger.error() через Winston (з повним JSON.stringify({error, data})). StackMonitoring і TG не використовуються.