query("SELECT * FROM urls WHERE is_active = 1"); $urls = $stmt->fetchAll(); foreach ($urls as $row) { $res = ping($row['url']); // Log latency to ensure history exists $ins = db()->prepare("INSERT INTO uptime_logs (url_id, status, latency) VALUES (?, ?, ?)"); $ins->execute([$row['id'], $res['status'], $res['latency']]); // Notify on change notifyStatusChange($row['url'], $row['last_status'], $res['status'], $res['error']); // Update URL status $upd = db()->prepare("UPDATE urls SET last_status = ?, last_latency = ?, last_checked_at = NOW() WHERE id = ?"); $upd->execute([$res['status'], $res['latency'], $row['id']]); // Keep only last 500 logs per URL to save DB space $del = db()->prepare( "DELETE FROM uptime_logs WHERE url_id = ? AND id NOT IN ( SELECT id FROM ( SELECT id FROM uptime_logs WHERE url_id = ? ORDER BY id DESC LIMIT 500 ) foo )" ); $del->execute([$row['id'], $row['id']]); } } sleep(2); // Wait 2 seconds before the next check }