This commit is contained in:
56
src/core/scheduler.py
Normal file
56
src/core/scheduler.py
Normal file
@@ -0,0 +1,56 @@
|
||||
"""
|
||||
Планировщик фоновых задач для бота
|
||||
"""
|
||||
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
||||
from apscheduler.triggers.cron import CronTrigger
|
||||
import logging
|
||||
|
||||
from src.core.activity_service import ActivityService
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class BotScheduler:
|
||||
"""Планировщик задач для бота"""
|
||||
|
||||
def __init__(self):
|
||||
self.scheduler = AsyncIOScheduler()
|
||||
|
||||
def setup_jobs(self):
|
||||
"""Настройка всех периодических задач"""
|
||||
|
||||
# Проверка неактивных пользователей каждый день в 03:00
|
||||
self.scheduler.add_job(
|
||||
self._check_inactive_users,
|
||||
trigger=CronTrigger(hour=3, minute=0),
|
||||
id='check_inactive_users',
|
||||
name='Проверка неактивных пользователей',
|
||||
replace_existing=True
|
||||
)
|
||||
|
||||
logger.info("Планировщик задач настроен")
|
||||
|
||||
async def _check_inactive_users(self):
|
||||
"""Проверка и блокировка неактивных пользователей"""
|
||||
try:
|
||||
logger.info("Запуск проверки неактивных пользователей")
|
||||
marked = await ActivityService.check_and_mark_inactive_users()
|
||||
logger.info(f"Проверка завершена. Неактивных пользователей помечено: {marked}")
|
||||
except Exception as e:
|
||||
logger.error(f"Ошибка при проверке неактивных пользователей: {e}", exc_info=True)
|
||||
|
||||
def start(self):
|
||||
"""Запуск планировщика"""
|
||||
self.setup_jobs()
|
||||
self.scheduler.start()
|
||||
logger.info("Планировщик задач запущен")
|
||||
|
||||
def shutdown(self):
|
||||
"""Остановка планировщика"""
|
||||
if self.scheduler.running:
|
||||
self.scheduler.shutdown()
|
||||
logger.info("Планировщик задач остановлен")
|
||||
|
||||
|
||||
# Глобальный экземпляр планировщика
|
||||
bot_scheduler = BotScheduler()
|
||||
Reference in New Issue
Block a user