Files
romm/backend/startup.py
2025-09-11 21:27:48 -04:00

101 lines
3.4 KiB
Python

"""Startup script to run tasks before the main application is started."""
import asyncio
import sentry_sdk
from opentelemetry import trace
from config import (
ENABLE_SCHEDULED_CONVERT_IMAGES_TO_WEBP,
ENABLE_SCHEDULED_RESCAN,
ENABLE_SCHEDULED_RETROACHIEVEMENTS_PROGRESS_SYNC,
ENABLE_SCHEDULED_UPDATE_LAUNCHBOX_METADATA,
ENABLE_SCHEDULED_UPDATE_SWITCH_TITLEDB,
SENTRY_DSN,
)
from handler.metadata.base_handler import (
MAME_XML_KEY,
METADATA_FIXTURES_DIR,
PS1_SERIAL_INDEX_KEY,
PS2_OPL_KEY,
PS2_SERIAL_INDEX_KEY,
PSP_SERIAL_INDEX_KEY,
)
from handler.redis_handler import async_cache
from logger.logger import log
from models.firmware import FIRMWARE_FIXTURES_DIR, KNOWN_BIOS_KEY
from tasks.scheduled.convert_images_to_webp import convert_images_to_webp_task
from tasks.scheduled.scan_library import scan_library_task
from tasks.scheduled.sync_retroachievements_progress import (
sync_retroachievements_progress_task,
)
from tasks.scheduled.update_launchbox_metadata import update_launchbox_metadata_task
from tasks.scheduled.update_switch_titledb import update_switch_titledb_task
from utils import get_version
from utils.cache import conditionally_set_cache
from utils.context import initialize_context
tracer = trace.get_tracer(__name__)
@tracer.start_as_current_span("main")
async def main() -> None:
"""Run startup tasks."""
async with initialize_context():
log.info("Running startup tasks")
# Initialize scheduled tasks
if ENABLE_SCHEDULED_RESCAN:
log.info("Starting scheduled rescan")
scan_library_task.init()
if ENABLE_SCHEDULED_UPDATE_SWITCH_TITLEDB:
log.info("Starting scheduled update switch titledb")
update_switch_titledb_task.init()
if ENABLE_SCHEDULED_UPDATE_LAUNCHBOX_METADATA:
log.info("Starting scheduled update launchbox metadata")
update_launchbox_metadata_task.init()
if ENABLE_SCHEDULED_CONVERT_IMAGES_TO_WEBP:
log.info("Starting scheduled convert images to webp")
convert_images_to_webp_task.init()
if ENABLE_SCHEDULED_RETROACHIEVEMENTS_PROGRESS_SYNC:
log.info("Starting scheduled RetroAchievements progress sync")
sync_retroachievements_progress_task.init()
log.info("Initializing cache with fixtures data")
await conditionally_set_cache(
async_cache, MAME_XML_KEY, METADATA_FIXTURES_DIR / "mame_index.json"
)
await conditionally_set_cache(
async_cache, PS2_OPL_KEY, METADATA_FIXTURES_DIR / "ps2_opl_index.json"
)
await conditionally_set_cache(
async_cache,
PS1_SERIAL_INDEX_KEY,
METADATA_FIXTURES_DIR / "ps1_serial_index.json",
)
await conditionally_set_cache(
async_cache,
PS2_SERIAL_INDEX_KEY,
METADATA_FIXTURES_DIR / "ps2_serial_index.json",
)
await conditionally_set_cache(
async_cache,
PSP_SERIAL_INDEX_KEY,
METADATA_FIXTURES_DIR / "psp_serial_index.json",
)
await conditionally_set_cache(
async_cache, KNOWN_BIOS_KEY, FIRMWARE_FIXTURES_DIR / "known_bios_files.json"
)
log.info("Startup tasks completed")
if __name__ == "__main__":
sentry_sdk.init(
dsn=SENTRY_DSN,
release=f"romm@{get_version()}",
)
asyncio.run(main())