1st commit
This commit is contained in:
60
scripts/updater.py
Normal file
60
scripts/updater.py
Normal file
@@ -0,0 +1,60 @@
|
||||
import time
|
||||
import os
|
||||
import logging
|
||||
from scripts.download_helpers import download_maxmind, download_file, github_latest_mmdb
|
||||
from app.config import settings
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
log = logging.getLogger("db_updater")
|
||||
|
||||
def update_once():
|
||||
provider = settings.geo_provider.lower()
|
||||
try:
|
||||
if provider == "maxmind":
|
||||
# 1) GitHub Releases (latest)
|
||||
repo = os.getenv("MAXMIND_GITHUB_REPO") or "P3TERX/GeoLite.mmdb"
|
||||
token = os.getenv("GITHUB_TOKEN")
|
||||
gh_url = None
|
||||
try:
|
||||
gh_url = github_latest_mmdb(repo, token)
|
||||
except Exception as e:
|
||||
log.warning("GitHub latest check failed: %s", e)
|
||||
if gh_url:
|
||||
download_file(gh_url, settings.maxmind_db_path)
|
||||
log.info("MaxMind DB pobrana z GitHub Releases: %s", gh_url)
|
||||
return
|
||||
|
||||
# 2) Bezpośredni URL do .mmdb
|
||||
direct_url = os.getenv("MAXMIND_DIRECT_DB_URL")
|
||||
if direct_url:
|
||||
download_file(direct_url, settings.maxmind_db_path)
|
||||
log.info("MaxMind DB pobrana z direct URL: %s", direct_url)
|
||||
return
|
||||
|
||||
# 3) Oficjalne pobieranie MaxMind (wymaga licencji)
|
||||
key = os.getenv("MAXMIND_LICENSE_KEY")
|
||||
if not key:
|
||||
log.error("Brak źródła bazy: ustaw MAXMIND_GITHUB_REPO lub MAXMIND_DIRECT_DB_URL lub MAXMIND_LICENSE_KEY")
|
||||
return
|
||||
download_maxmind(key, settings.maxmind_db_name, settings.maxmind_db_path, settings.maxmind_download_url_template)
|
||||
log.info("MaxMind DB zaktualizowana (MaxMind download)")
|
||||
|
||||
elif provider == "ip2location":
|
||||
url = os.getenv("IP2LOCATION_DOWNLOAD_URL")
|
||||
if not url:
|
||||
log.error("Brak IP2LOCATION_DOWNLOAD_URL w env")
|
||||
return
|
||||
download_file(url, settings.ip2location_db_path)
|
||||
log.info("IP2Location DB zaktualizowana")
|
||||
|
||||
else:
|
||||
log.error("Nieznany provider: %s", provider)
|
||||
|
||||
except Exception as e:
|
||||
log.exception("Błąd przy aktualizacji bazy: %s", e)
|
||||
|
||||
if __name__ == "__main__":
|
||||
interval = settings.update_interval_seconds
|
||||
while True:
|
||||
update_once()
|
||||
time.sleep(interval)
|
Reference in New Issue
Block a user