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:
zephyrdark 2026-02-14 00:33:25 +09:00
parent f13be37470
commit 9b4d678995
3 changed files with 40 additions and 3 deletions

View File

@ -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",
]

View File

@ -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():

View File

@ -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