117 lines
3.3 KiB
PHP
117 lines
3.3 KiB
PHP
<?php
|
|
require_once __DIR__ . '/../config/database.php';
|
|
|
|
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
|
|
|
|
$db = new Database();
|
|
$conn = $db->getConnection();
|
|
|
|
// ================= CONFIG =================
|
|
$login_url = "http://10.255.254.21/login";
|
|
$data_url = "http://10.255.254.21/ontinfo_table";
|
|
|
|
$username = "root";
|
|
$password = "@lokal234";
|
|
|
|
$cookie = __DIR__ . "/cookie.txt";
|
|
|
|
// ================= LOGIN =================
|
|
$ch = curl_init();
|
|
curl_setopt($ch, CURLOPT_URL, $login_url);
|
|
curl_setopt($ch, CURLOPT_POST, true);
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([
|
|
"username" => $username,
|
|
"password" => $password
|
|
]));
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
|
|
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
|
|
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
|
|
curl_exec($ch);
|
|
curl_close($ch);
|
|
|
|
// ================= AMBIL DATA =================
|
|
$ch = curl_init();
|
|
curl_setopt($ch, CURLOPT_URL, $data_url);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
|
|
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
|
|
|
|
$response = curl_exec($ch);
|
|
|
|
if ($response === false) {
|
|
die("CURL ERROR: " . curl_error($ch));
|
|
}
|
|
curl_close($ch);
|
|
|
|
file_put_contents("debug_onu.json", $response);
|
|
|
|
$data = json_decode($response, true);
|
|
|
|
if (!isset($data['data']) || empty($data['data'])) {
|
|
die("DATA KOSONG");
|
|
}
|
|
|
|
// ================= PROCESS =================
|
|
foreach ($data['data'] as $onu) {
|
|
|
|
$sn = $onu['ont_sn'] ?? '';
|
|
$rx = $onu['receive_power'] ?? 0;
|
|
$state = $onu['state'] ?? 0;
|
|
$cause = strtolower($onu['last_d_cause'] ?? '');
|
|
|
|
if (empty($sn)) continue;
|
|
|
|
// ================= STATUS =================
|
|
if (strpos($cause, 'laser out') !== false || strpos($cause, 'fiber') !== false) {
|
|
$status = "LASER OUT";
|
|
} elseif (strpos($cause, 'power down') !== false || strpos($cause, 'dying-gasp') !== false) {
|
|
$status = "POWER FAIL";
|
|
} else {
|
|
if ($state == 0 && $rx <= -30) {
|
|
$status = "LASER OUT";
|
|
} elseif ($rx <= -30) {
|
|
$status = "POWER FAIL";
|
|
} else {
|
|
$status = "ONLINE";
|
|
}
|
|
}
|
|
|
|
// ================= GET LAST STATUS =================
|
|
$cek = $conn->prepare("SELECT status FROM onu_status WHERE sn = ?");
|
|
$cek->execute([$sn]);
|
|
$last = $cek->fetch(PDO::FETCH_ASSOC);
|
|
$lastStatus = $last['status'] ?? null;
|
|
|
|
// ================= UPSERT REALTIME =================
|
|
$conn->query("
|
|
INSERT INTO onu_status (sn, status, rx_power, last_update)
|
|
VALUES ('$sn', '$status', '$rx', NOW())
|
|
ON DUPLICATE KEY UPDATE
|
|
last_status = status,
|
|
status = '$status',
|
|
rx_power = '$rx',
|
|
last_update = NOW()
|
|
");
|
|
|
|
// ================= LOG HISTORI (HANYA ANOMALI) =================
|
|
$anomali = in_array($status, ['LASER OUT', 'POWER FAIL']);
|
|
|
|
$trigger = ($lastStatus !== $status);
|
|
|
|
if ($anomali && $trigger) {
|
|
|
|
$stmt = $conn->prepare("
|
|
INSERT INTO status_onu_histori (sn, status, rx_power, created_at)
|
|
VALUES (?, ?, ?, NOW())
|
|
");
|
|
$stmt->execute([$sn, $status, $rx]);
|
|
|
|
echo "LOG ANOMALI: $sn | $status | RX $rx<br>";
|
|
}
|
|
|
|
echo "SN: $sn | STATUS: $status | RX: $rx<br>";
|
|
}
|
|
|
|
echo "DONE ✅";
|
|
?>
|