diff --git a/jtl-wafi-agent.py b/jtl-wafi-agent.py index 3efb6a3..bf4724a 100644 --- a/jtl-wafi-agent.py +++ b/jtl-wafi-agent.py @@ -2303,9 +2303,9 @@ if ($detected_bot === null && !empty($user_agent)) {{ }} }} -// === STEP 2: Detect Country (only if country_mode active) === +// === STEP 2: Detect Country (always - for logging and stats) === $country = 'XX'; -if ($country_mode && !empty($visitor_ip) && filter_var($visitor_ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) {{ +if (!empty($visitor_ip) && filter_var($visitor_ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) {{ $country = get_country_for_ip($visitor_ip, $country_cache_dir); }} @@ -3050,6 +3050,14 @@ def get_shop_log_stats(shop: str) -> Dict[str, Any]: runtime_minutes = (datetime.now() - activation_time).total_seconds() / 60 if runtime_minutes > 0: stats['req_per_min'] = round(stats['log_entries'] / runtime_minutes, 2) + stats['human_rpm'] = round(stats['human_requests'] / runtime_minutes, 2) + stats['bot_rpm'] = round(stats['bot_requests'] / runtime_minutes, 2) + else: + stats['human_rpm'] = 0.0 + stats['bot_rpm'] = 0.0 + else: + stats['human_rpm'] = 0.0 + stats['bot_rpm'] = 0.0 return stats @@ -3347,6 +3355,34 @@ class JTLWAFiAgent: self._loop ) + # Live Stats Tracker updaten + try: + tracker = get_shop_stats_tracker(shop) + + # IP extrahieren + ip = None + if 'IP: ' in line: + ip = line.split('IP: ')[1].split(' |')[0].strip() + + # Path extrahieren + path = '/' + if 'Path: ' in line: + path = line.split('Path: ')[1].split(' |')[0].strip() + + # Bot/Human erkennen + is_bot = any(x in line for x in ['BOT: ', 'BOT:', 'BLOCKED_BOT:', 'MONITOR_BOT:', 'BANNED_BOT:']) + + # Blocked erkennen + is_blocked = any(x in line for x in ['BANNED', 'BLOCKED']) + + # 404 erkennen + is_404 = '404' in line + + if ip: + tracker.record_request(ip, path, is_bot, is_blocked, is_404) + except Exception as e: + logger.debug(f"LiveStats record error: {e}") + # Prüfe auf Ban-Events if 'BANNED: ' in line: try: