1
0
Fork 0
mirror of https://github.com/seanmorley15/AdventureLog.git synced 2025-07-19 12:59:36 +02:00
AdventureLog/backend/server/adventures/scheduler.py

57 lines
1.7 KiB
Python
Raw Normal View History

2024-08-21 09:48:47 -04:00
import logging
from apscheduler.schedulers.background import BackgroundScheduler
from django_apscheduler.jobstores import DjangoJobStore
from django_apscheduler import util
from django.conf import settings
from django.core.management import call_command
2024-08-21 10:05:09 -04:00
from django.db import connections
from django.db.utils import OperationalError
import time
2024-08-21 09:48:47 -04:00
logger = logging.getLogger(__name__)
def run_worldtravel_seed():
logger.info("Starting worldtravel-seed job")
try:
call_command('worldtravel-seed', '--force')
logger.info("worldtravel-seed job completed successfully")
except Exception as e:
logger.error(f"Error in worldtravel-seed job: {str(e)}")
2024-08-21 10:05:09 -04:00
def database_ready():
db_conn = connections['default']
try:
db_conn.cursor()
except OperationalError:
return False
else:
return True
2024-08-21 09:48:47 -04:00
@util.close_old_connections
def start_scheduler():
scheduler = BackgroundScheduler(timezone=settings.TIME_ZONE)
scheduler.add_jobstore(DjangoJobStore(), "default")
2024-08-21 10:05:09 -04:00
# Wait for the database to be ready
retry_count = 0
max_retries = 2 # Set to 2 attempts
while not database_ready():
if retry_count >= max_retries:
logger.error("Database not available after 2 attempts. Scheduler not started.")
return None
logger.info("Database not ready. Waiting before retry...")
time.sleep(2) # Wait for 2 seconds before retrying
retry_count += 1
2024-08-21 09:48:47 -04:00
scheduler.add_job(
run_worldtravel_seed,
trigger="interval",
2024-08-21 10:06:09 -04:00
hours=24,
2024-08-21 09:48:47 -04:00
id="worldtravel_seed",
max_instances=1,
replace_existing=True,
)
2024-08-21 10:08:46 -04:00
# scheduler
2024-08-21 09:48:47 -04:00
logger.info("Starting scheduler...")
2024-08-21 10:06:09 -04:00
scheduler.start()
return scheduler