64 lines
1.5 KiB
Python
64 lines
1.5 KiB
Python
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
import logging
|
||
|
|
from datetime import datetime
|
||
|
|
|
||
|
|
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
||
|
|
from apscheduler.triggers.cron import CronTrigger
|
||
|
|
|
||
|
|
from config import settings
|
||
|
|
from services.fill_service import FillService
|
||
|
|
|
||
|
|
logger = logging.getLogger(__name__)
|
||
|
|
|
||
|
|
_scheduler: AsyncIOScheduler | None = None
|
||
|
|
|
||
|
|
|
||
|
|
async def _auto_fill_job() -> None:
|
||
|
|
service = FillService()
|
||
|
|
result = await service.fill_today()
|
||
|
|
logger.info("Auto fill result: %s", result.get("message") or result)
|
||
|
|
|
||
|
|
|
||
|
|
def start_scheduler() -> AsyncIOScheduler | None:
|
||
|
|
global _scheduler
|
||
|
|
|
||
|
|
if not settings.auto_fill_enabled:
|
||
|
|
logger.info("Auto fill scheduler disabled")
|
||
|
|
return None
|
||
|
|
|
||
|
|
if _scheduler is not None:
|
||
|
|
return _scheduler
|
||
|
|
|
||
|
|
_scheduler = AsyncIOScheduler()
|
||
|
|
_scheduler.add_job(
|
||
|
|
_auto_fill_job,
|
||
|
|
CronTrigger(
|
||
|
|
hour=settings.auto_fill_hour,
|
||
|
|
minute=settings.auto_fill_minute,
|
||
|
|
),
|
||
|
|
id="daily_pts_fill",
|
||
|
|
replace_existing=True,
|
||
|
|
)
|
||
|
|
_scheduler.start()
|
||
|
|
logger.info(
|
||
|
|
"Scheduler started: daily fill at %02d:%02d",
|
||
|
|
settings.auto_fill_hour,
|
||
|
|
settings.auto_fill_minute,
|
||
|
|
)
|
||
|
|
return _scheduler
|
||
|
|
|
||
|
|
|
||
|
|
def stop_scheduler() -> None:
|
||
|
|
global _scheduler
|
||
|
|
if _scheduler is not None:
|
||
|
|
_scheduler.shutdown(wait=False)
|
||
|
|
_scheduler = None
|
||
|
|
|
||
|
|
|
||
|
|
def reschedule_scheduler() -> None:
|
||
|
|
from config import reload_settings
|
||
|
|
|
||
|
|
reload_settings()
|
||
|
|
stop_scheduler()
|
||
|
|
start_scheduler()
|