56 lines
1.5 KiB
Python
56 lines
1.5 KiB
Python
"""
|
|
[GeoIP] Scheduled Update Service
|
|
Periodically update the MaxMind GeoIP database
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import asyncio
|
|
|
|
from app.config import settings
|
|
from app.dependencies.geoip import get_geoip_helper
|
|
from app.dependencies.scheduler import get_scheduler
|
|
from app.log import logger
|
|
|
|
|
|
async def update_geoip_database():
|
|
"""
|
|
Asynchronous task to update the GeoIP database
|
|
"""
|
|
try:
|
|
logger.info("[GeoIP] Starting scheduled GeoIP database update...")
|
|
geoip = get_geoip_helper()
|
|
|
|
# Run the synchronous update method in a background thread
|
|
loop = asyncio.get_event_loop()
|
|
await loop.run_in_executor(None, lambda: geoip.update(force=False))
|
|
|
|
logger.info("[GeoIP] Scheduled GeoIP database update completed successfully")
|
|
except Exception as e:
|
|
logger.error(f"[GeoIP] Scheduled GeoIP database update failed: {e}")
|
|
|
|
|
|
def schedule_geoip_updates():
|
|
"""
|
|
Schedule the GeoIP database update task
|
|
"""
|
|
scheduler = get_scheduler()
|
|
|
|
# Use settings to configure the update time: update once a week
|
|
scheduler.add_job(
|
|
update_geoip_database,
|
|
"cron",
|
|
day_of_week=settings.geoip_update_day,
|
|
hour=settings.geoip_update_hour,
|
|
minute=0,
|
|
id="geoip_weekly_update",
|
|
name="Weekly GeoIP database update",
|
|
replace_existing=True,
|
|
)
|
|
|
|
logger.info(
|
|
f"[GeoIP] Scheduled update task registered: "
|
|
f"every week on day {settings.geoip_update_day} "
|
|
f"at {settings.geoip_update_hour}:00"
|
|
)
|