if (!function_exists('mitaar_read_log_file')) { function mitaar_read_log_file($date, $limit = 100, $offset = 0) { // וולידציה לתאריך if (!strtotime($date)) { error_log("Invalid date format provided: {$date}"); return false; } $formatted_date = date('d-M-Y', strtotime($date)); $base_url = "https://bapergula.co.il/log/"; // ננסה לקרוא את קובץ הלוג היומי $log_url = "{$base_url}log_{$formatted_date}.log"; $ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_URL => $log_url, CURLOPT_RETURNTRANSFER => true, CURLOPT_FAILONERROR => true, CURLOPT_TIMEOUT => 10, CURLOPT_CONNECTTIMEOUT => 5 ]); $log_data = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($http_code !== 200 || $log_data === false) { error_log("Failed to retrieve log file for date {$formatted_date}"); return false; } // מחזיר את השורות המבוקשות לפי ה-offset וה-limit $lines = array_filter(explode("\n", trim($log_data))); return array_slice($lines, $offset, $limit); } } if (!function_exists('mitaar_analyze_log_entries')) { function mitaar_analyze_log_entries($lines) { if (!is_array($lines)) { error_log("Expected array for log lines, received: " . gettype($lines)); return [ 'debug' => 0, 'error' => 0, 'info' => 0, 'warning' => 0, 'unknown' => 0, 'entries' => [], 'summary' => '' ]; } $results = [ 'debug' => 0, 'error' => 0, 'info' => 0, 'warning' => 0, 'unknown' => 0, 'entries' => [], 'error_details' => [], // שמירת פרטי השגיאות 'summary' => '' ]; foreach ($lines as $line) { $parsed = mitaar_parse_log_line($line); $type = $parsed['type']; $results['entries'][] = $parsed; if (isset($results[$type])) { $results[$type]++; } // שמירת פרטי שגיאות לניתוח if ($type === 'error') { $results['error_details'][] = $parsed; } } // יצירת סיכום $results['summary'] = mitaar_generate_log_summary($results); return $results; } } if (!function_exists('mitaar_parse_log_line')) { function mitaar_parse_log_line($line) { $timestamp = ''; $type = 'unknown'; $message = $line; // חילוץ התאריך והשעה (אם קיימים) if (preg_match('/^\[(.*?)\]/', $line, $matches)) { $timestamp = $matches[1]; } // זיהוי סוג ההודעה if (strpos($line, '[DEBUG]') !== false) { $type = 'debug'; } elseif (strpos($line, '[ERROR]') !== false) { $type = 'error'; } elseif (strpos($line, '[INFO]') !== false) { $type = 'info'; } elseif (strpos($line, '[WARNING]') !== false) { $type = 'warning'; } // ניקוי ההודעה $message = preg_replace('/^\[(.*?)\]\s*(\[.*?\])\s*/', '', $line); return [ 'timestamp' => $timestamp, 'type' => $type, 'message' => trim($message), 'raw' => $line ]; } } if (!function_exists('mitaar_generate_log_summary')) { function mitaar_generate_log_summary($results) { $summary = []; // סיכום כמותי $summary[] = sprintf("סה\"כ רשומות: %d", count($results['entries'])); $summary[] = sprintf("שגיאות: %d", $results['error']); $summary[] = sprintf("אזהרות: %d", $results['warning']); $summary[] = sprintf("הודעות מידע: %d", $results['info']); $summary[] = sprintf("הודעות דיבאג: %d", $results['debug']); // ניתוח שגיאות if (!empty($results['error_details'])) { $summary[] = "\nפירוט שגיאות נפוצות:"; $error_types = []; foreach ($results['error_details'] as $error) { $error_msg = $error['message']; if (!isset($error_types[$error_msg])) { $error_types[$error_msg] = 0; } $error_types[$error_msg]++; } arsort($error_types); foreach (array_slice($error_types, 0, 5) as $msg => $count) { $summary[] = sprintf("- %dx: %s", $count, $msg); } } return implode("\n", $summary); } }