jtl-wafi-agent.py aktualisiert

This commit is contained in:
2025-12-30 16:07:25 +01:00
parent 7151eeb91b
commit 70ec103e70

View File

@@ -2811,40 +2811,64 @@ def download_country_ranges_async():
thread.start()
def ensure_country_cache_symlink(ratelimit_path: str) -> bool:
def copy_country_cache_to_shop(ratelimit_path: str) -> int:
"""
Erstellt einen Symlink vom Shop-spezifischen Pfad zum globalen Country-Cache.
Kopiert Country-Cache vom globalen Verzeichnis in den Shop.
(Symlinks funktionieren nicht wegen PHP open_basedir Restriction)
Args:
ratelimit_path: Pfad zum jtl-wafi_ratelimit Verzeichnis des Shops
Returns:
True wenn erfolgreich, False sonst
Anzahl der kopierten Dateien
"""
symlink_path = os.path.join(ratelimit_path, 'country_cache')
shop_cache_dir = os.path.join(ratelimit_path, 'country_cache')
try:
# Falls bereits existiert
if os.path.islink(symlink_path):
# Prüfe ob Symlink korrekt ist
if os.readlink(symlink_path) == GLOBAL_COUNTRY_CACHE_DIR:
return True
# Falsches Ziel - entfernen und neu erstellen
os.remove(symlink_path)
elif os.path.isdir(symlink_path):
# Altes Verzeichnis existiert - entfernen (war vorher Kopie)
shutil.rmtree(symlink_path)
elif os.path.exists(symlink_path):
os.remove(symlink_path)
# Shop-Cache Verzeichnis erstellen
os.makedirs(shop_cache_dir, exist_ok=True)
# Symlink erstellen
os.symlink(GLOBAL_COUNTRY_CACHE_DIR, symlink_path)
logger.debug(f"Country-Cache Symlink erstellt: {symlink_path} -> {GLOBAL_COUNTRY_CACHE_DIR}")
return True
# Falls Symlink existiert (von alter Version), entfernen
if os.path.islink(shop_cache_dir):
os.remove(shop_cache_dir)
os.makedirs(shop_cache_dir, exist_ok=True)
# Prüfe ob globaler Cache existiert
if not os.path.isdir(GLOBAL_COUNTRY_CACHE_DIR):
logger.debug(f"Globaler Country-Cache nicht vorhanden: {GLOBAL_COUNTRY_CACHE_DIR}")
return 0
copied = 0
for filename in os.listdir(GLOBAL_COUNTRY_CACHE_DIR):
if filename.endswith('.ranges'):
src = os.path.join(GLOBAL_COUNTRY_CACHE_DIR, filename)
dst = os.path.join(shop_cache_dir, filename)
# Nur kopieren wenn Quelle neuer ist oder Ziel nicht existiert
if not os.path.isfile(dst) or os.path.getmtime(src) > os.path.getmtime(dst):
shutil.copy2(src, dst)
copied += 1
if copied > 0:
logger.debug(f"Country-Cache kopiert: {copied} Dateien nach {shop_cache_dir}")
return copied
except Exception as e:
logger.error(f"Fehler beim Erstellen des Country-Cache Symlinks: {e}")
return False
logger.error(f"Fehler beim Kopieren des Country-Cache: {e}")
return 0
def copy_country_cache_to_shop_async(ratelimit_path: str):
"""Kopiert Country-Cache im Hintergrund."""
def _copy():
# Erst sicherstellen, dass globaler Cache existiert
if not os.path.isdir(GLOBAL_COUNTRY_CACHE_DIR) or not os.listdir(GLOBAL_COUNTRY_CACHE_DIR):
download_country_ranges(force=False)
copy_country_cache_to_shop(ratelimit_path)
thread = threading.Thread(target=_copy, daemon=True)
thread.start()
# =============================================================================
@@ -3009,8 +3033,8 @@ def activate_blocking(shop: str, silent: bool = True,
monitor_only=monitor_only
)
# Step 5: Country-Cache Symlink erstellen (zeigt auf globalen Cache)
ensure_country_cache_symlink(ratelimit_path)
# Step 5: Country-Cache vom globalen Cache kopieren (wegen PHP open_basedir)
copy_country_cache_to_shop_async(ratelimit_path)
if not silent:
logger.info(f"Blocking aktiviert für {shop}")