diff --git a/jtl-wafi-agent.py b/jtl-wafi-agent.py index 5e7a9c6..517631b 100644 --- a/jtl-wafi-agent.py +++ b/jtl-wafi-agent.py @@ -1539,7 +1539,7 @@ def get_shop_stats_tracker(shop: str, window_seconds: int = 300) -> LiveStatsTra logger.info(f"Tracker für {shop} hat keine ip_request_details - lade aus Log") _load_initial_request_details(tracker, shop) else: - logger.debug(f"Tracker für {shop} hat {len(tracker.ip_request_details)} IPs in ip_request_details") + logger.info(f"Tracker für {shop} bereits geladen: {len(tracker.ip_request_details)} IPs in ip_request_details") return tracker @@ -1652,6 +1652,11 @@ def _load_initial_request_details(tracker: LiveStatsTracker, shop: str, max_line total_requests = sum(len(reqs) for reqs in tracker.ip_request_details.values()) logger.info(f"Initiale Request-Details für {shop} geladen: {len(tracker.ip_request_details)} IPs, {total_requests} Requests total (parsed {parsed_count} von {len(lines)} Zeilen)") + # Debug: Zeige die ersten 5 IPs mit Request-Anzahl + sample_ips = list(tracker.ip_request_details.items())[:5] + for sample_ip, sample_reqs in sample_ips: + logger.info(f" - IP {sample_ip}: {len(sample_reqs)} Requests") + except Exception as e: logger.warning(f"Fehler beim Laden der initialen Request-Details für {shop}: {e}") import traceback @@ -4700,26 +4705,43 @@ class JTLWAFiAgent: # WHOIS-Lookup durchführen (wird gecacht) result = whois_lookup(ip) - # Request-Historie für diese IP sammeln + # Request-Historie für diese IP sammeln - IMMER aus allen aktiven Shops + # (auch wenn ein spezifischer Shop angegeben ist, könnte die IP in mehreren Shops sein) requests = [] + shops_to_check = list(get_active_shops()) - # Shops ermitteln - entweder spezifischer Shop oder alle aktiven - shops_to_check = [] - if shop and shop.strip(): - shops_to_check = [shop] - else: - # Alle aktiven Shops durchsuchen - shops_to_check = list(get_active_shops()) - - logger.debug(f"WHOIS für {ip}: Prüfe {len(shops_to_check)} Shops: {shops_to_check}") + logger.info(f"WHOIS für {ip}: Prüfe {len(shops_to_check)} Shops: {shops_to_check}") for s in shops_to_check: tracker = get_shop_stats_tracker(s) + logger.info(f"Shop {s}: Tracker hat {len(tracker.ip_request_details)} IPs in ip_request_details") + + # Debug: Zeige alle IPs im Tracker + all_ips = list(tracker.ip_request_details.keys())[:10] # Erste 10 + logger.info(f"Shop {s}: Erste 10 IPs im Tracker: {all_ips}") + shop_requests = tracker.get_ip_requests(ip) - logger.debug(f"Shop {s}: {len(shop_requests)} Requests für IP {ip}, Tracker hat {len(tracker.ip_request_details)} IPs") + + # Falls keine Requests für diese IP gefunden, versuche nochmal aus Log zu laden + # (könnte sein, dass neue Log-Einträge existieren die noch nicht geladen wurden) + if not shop_requests: + # Prüfe ob Log-File existiert und neuer ist als Tracker-Erstellung + log_file = os.path.join(VHOSTS_DIR, s, 'httpdocs', SHOP_LOG_FILE) + if os.path.isfile(log_file): + logger.info(f"Shop {s}: IP {ip} nicht gefunden - Reload aus Log") + _load_initial_request_details(tracker, s) + shop_requests = tracker.get_ip_requests(ip) + + if shop_requests: + logger.info(f"Shop {s}: {len(shop_requests)} Requests für IP {ip}") + else: + logger.info(f"Shop {s}: Keine Requests für IP {ip}") + + # Kopie erstellen um Original nicht zu modifizieren for r in shop_requests: - r['shop'] = s - requests.extend(shop_requests) + req_copy = r.copy() + req_copy['shop'] = s + requests.append(req_copy) # Nach Zeit sortieren (neueste zuerst) if requests: