Coverage for app / services / scheduler.py: 0%
19 statements
« prev ^ index » next coverage.py v7.13.3, created at 2026-02-04 05:50 -0500
« prev ^ index » next coverage.py v7.13.3, created at 2026-02-04 05:50 -0500
1"""Background scheduler for polling campaign balances."""
2from apscheduler.schedulers.asyncio import AsyncIOScheduler
3from apscheduler.triggers.interval import IntervalTrigger
4from app.core.config import settings
5from app.db.database import AsyncSessionLocal
6from app.services.balance_tracker import BalanceTracker
9scheduler = AsyncIOScheduler()
12async def poll_balances_job():
13 """Background job to poll all active campaign balances."""
14 async with AsyncSessionLocal() as db:
15 tracker = BalanceTracker(db)
16 await tracker.poll_all_active_campaigns()
19def start_scheduler():
20 """Start the background scheduler."""
21 if scheduler.running:
22 return
24 interval_seconds = settings.balance_poll_interval_seconds
25 scheduler.add_job(
26 poll_balances_job,
27 trigger=IntervalTrigger(seconds=interval_seconds),
28 id="poll_balances",
29 name="Poll campaign balances",
30 replace_existing=True,
31 )
32 scheduler.start()
35def shutdown_scheduler():
36 """Shutdown the scheduler."""
37 if scheduler.running:
38 scheduler.shutdown()