<?php
/**
 * Monitoring file log dan memanggil API jika terdapat kata "error".
 */

// Konfigurasi
$logFilePath = "logfile.log"; // Path ke file log
$apiEndpoint = "https://test.wiselie.co.id/sendEmailApi.php"; // API endpoint untuk mengirim email

// Fungsi untuk membaca file log
function monitorLogFile($filePath, $lastPosition)
{
    if (!file_exists($filePath)) {
        throw new Exception("File log tidak ditemukan: $filePath");
    }

    // Buka file dalam mode baca
    $file = fopen($filePath, "r");
    if (!$file) {
        throw new Exception("Tidak dapat membuka file log: $filePath");
    }

    // Pindahkan pointer ke posisi terakhir
    fseek($file, $lastPosition);

    $newContent = '';
    while (($line = fgets($file)) !== false) {
        $newContent .= $line;
    }

    // Dapatkan posisi terakhir untuk iterasi berikutnya
    $newPosition = ftell($file);

    fclose($file);

    return [$newContent, $newPosition];
}

// Fungsi untuk memanggil API
function callApi($endpoint, $body)
{
    $data = [
        'body' => $body
    ];

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $endpoint);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));

    $response = curl_exec($ch);

    if (curl_errno($ch)) {
        throw new Exception("Error saat memanggil API: " . curl_error($ch));
    }

    $httpStatus = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if ($httpStatus !== 200) {
        throw new Exception("API mengembalikan status HTTP $httpStatus: $response");
    }

    return $response;
}

// Monitoring loop
$lastPosition = 0; // Awal dari file log

try {
    while (true) {
        // Baca file log mulai dari posisi terakhir
        list($newContent, $lastPosition) = monitorLogFile($logFilePath, $lastPosition);

        // Periksa apakah ada kata "error"
        if (stripos($newContent, "error") !== false) {
            $body = "Terdeteksi kata 'error' di file log: $logFilePath\n\n";
            $body .= "Detail:\n" . $newContent;

            // Panggil API untuk mengirim email
            callApi($apiEndpoint, $emailSubject, $body, $emailRecipient);
            echo "Error ditemukan dan email telah dikirim.\n";
        }

        // Tunggu sebelum loop berikutnya
        sleep(60*30); // Delay 30 menit
    }
} catch (Exception $e) {
    echo "Terjadi error: " . $e->getMessage() . "\n";
}
?>
