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)