feat: register daily collection job at 18:00 in scheduler
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
f13be37470
commit
9b4d678995
@ -2,5 +2,9 @@
|
|||||||
Background jobs module.
|
Background jobs module.
|
||||||
"""
|
"""
|
||||||
from jobs.scheduler import scheduler, start_scheduler, stop_scheduler
|
from jobs.scheduler import scheduler, start_scheduler, stop_scheduler
|
||||||
|
from jobs.collection_job import run_daily_collection, run_backfill
|
||||||
|
|
||||||
__all__ = ["scheduler", "start_scheduler", "stop_scheduler"]
|
__all__ = [
|
||||||
|
"scheduler", "start_scheduler", "stop_scheduler",
|
||||||
|
"run_daily_collection", "run_backfill",
|
||||||
|
]
|
||||||
|
|||||||
@ -6,6 +6,7 @@ from apscheduler.schedulers.background import BackgroundScheduler
|
|||||||
from apscheduler.triggers.cron import CronTrigger
|
from apscheduler.triggers.cron import CronTrigger
|
||||||
|
|
||||||
from jobs.snapshot_job import create_daily_snapshots
|
from jobs.snapshot_job import create_daily_snapshots
|
||||||
|
from jobs.collection_job import run_daily_collection
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -15,7 +16,21 @@ scheduler = BackgroundScheduler()
|
|||||||
|
|
||||||
def configure_jobs():
|
def configure_jobs():
|
||||||
"""Configure scheduled jobs."""
|
"""Configure scheduled jobs."""
|
||||||
# Daily snapshot at 18:30 (after market close)
|
# Daily data collection at 18:00 (after market close, before snapshot)
|
||||||
|
scheduler.add_job(
|
||||||
|
run_daily_collection,
|
||||||
|
trigger=CronTrigger(
|
||||||
|
hour=18,
|
||||||
|
minute=0,
|
||||||
|
day_of_week='mon-fri',
|
||||||
|
),
|
||||||
|
id='daily_collection',
|
||||||
|
name='Collect daily market data',
|
||||||
|
replace_existing=True,
|
||||||
|
)
|
||||||
|
logger.info("Configured daily_collection job at 18:00")
|
||||||
|
|
||||||
|
# Daily snapshot at 18:30 (after data collection completes)
|
||||||
scheduler.add_job(
|
scheduler.add_job(
|
||||||
create_daily_snapshots,
|
create_daily_snapshots,
|
||||||
trigger=CronTrigger(
|
trigger=CronTrigger(
|
||||||
@ -27,7 +42,7 @@ def configure_jobs():
|
|||||||
name='Create daily portfolio snapshots',
|
name='Create daily portfolio snapshots',
|
||||||
replace_existing=True,
|
replace_existing=True,
|
||||||
)
|
)
|
||||||
logger.info("Configured daily_snapshots job")
|
logger.info("Configured daily_snapshots job at 18:30")
|
||||||
|
|
||||||
|
|
||||||
def start_scheduler():
|
def start_scheduler():
|
||||||
|
|||||||
@ -139,3 +139,21 @@ def test_run_backfill_with_existing_data_only_fills_gaps():
|
|||||||
# Last backward chunk should end at or before 2024-05-31
|
# Last backward chunk should end at or before 2024-05-31
|
||||||
backward_chunks = [r for r in price_ranges if r[1] <= "20240531"]
|
backward_chunks = [r for r in price_ranges if r[1] <= "20240531"]
|
||||||
assert len(backward_chunks) >= 1
|
assert len(backward_chunks) >= 1
|
||||||
|
|
||||||
|
|
||||||
|
def test_scheduler_has_daily_collection_job():
|
||||||
|
"""Scheduler should register a daily_collection job at 18:00."""
|
||||||
|
from jobs.scheduler import configure_jobs
|
||||||
|
|
||||||
|
from apscheduler.schedulers.background import BackgroundScheduler
|
||||||
|
test_scheduler = BackgroundScheduler()
|
||||||
|
|
||||||
|
with patch("jobs.scheduler.scheduler", test_scheduler):
|
||||||
|
configure_jobs()
|
||||||
|
|
||||||
|
jobs = {job.id: job for job in test_scheduler.get_jobs()}
|
||||||
|
assert "daily_collection" in jobs
|
||||||
|
|
||||||
|
trigger = jobs["daily_collection"].trigger
|
||||||
|
trigger_str = str(trigger)
|
||||||
|
assert "18" in trigger_str # hour=18
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user