61 lines
2.3 KiB
Python
61 lines
2.3 KiB
Python
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)
|