36 lines
883 B
Python
36 lines
883 B
Python
from apscheduler.schedulers.background import BackgroundScheduler
|
|
|
|
from app import models
|
|
from app.config import get_settings
|
|
from app.database import SessionLocal
|
|
from app.services.task_runner import TaskRunner
|
|
from app.utils.time_utils import split_cron
|
|
|
|
|
|
scheduler = BackgroundScheduler()
|
|
|
|
|
|
def start_scheduler() -> None:
|
|
settings = get_settings()
|
|
if scheduler.running:
|
|
return
|
|
cron_kwargs = split_cron(settings.schedule_cron)
|
|
scheduler.configure(timezone=settings.schedule_timezone)
|
|
scheduler.add_job(
|
|
scheduled_scan,
|
|
"cron",
|
|
id="scheduled_feishu_scan",
|
|
replace_existing=True,
|
|
**cron_kwargs,
|
|
)
|
|
scheduler.start()
|
|
|
|
|
|
def scheduled_scan() -> None:
|
|
import asyncio
|
|
|
|
with SessionLocal() as db:
|
|
runner = TaskRunner()
|
|
asyncio.run(runner.run(db, task_type=models.TaskType.scheduled_scan))
|
|
|