This commit is contained in:
YanDrs
2025-07-15 00:31:04 +07:00
12 changed files with 258 additions and 100 deletions
+1
View File
@@ -10,3 +10,4 @@ whapi_webhook/*.log
payment/paydisini/callback/*.log payment/paydisini/callback/*.log
.well-known/ .well-known/
berita_acara/*.pdf berita_acara/*.pdf
load/logs/*.txt
+1 -1
View File
@@ -1 +1 @@
NO ACTION => 2 <-> cc.net Limit_Tgl_5<br>NO ACTION => 3 <-> nsn utama Limit_Tgl_10<br>NO ACTION => 3 <-> ciangsana Limit_Tgl_15<br>NO ACTION => 4 <-> fast.net Limit_Tgl_12<br>NO ACTION => 5 <-> bima net Limit Tagihan Tgl 15<br>NO ACTION => 6 <-> kingnet Limit Tgl 15<br>NO ACTION => 8 <-> diamond.net Limit_Tgl_15<br>NO ACTION => 9 <-> 22 p.net Limit_Tgl_15<br>NO ACTION => 10 <-> nettizen Tagihan Limit tgl 15<br>NO ACTION => 12 <-> Tagihan_Limit_Tgl5<br>NO ACTION => 15 <-> Tag_NTA2 Limit Tgl 5<br>NO ACTION => 16 <-> Tagihan Limit Tgl 5<br>BUAT TAGIHAN => 13 <-> Limit Tanggal 26 (Infinnet) Start : 2025-07-04 - Last : 2025-07-09<br>REMAND => 18 <-> BUM-Limit-Tgl-5<br>NO ACTION => 14 <-> Kh_Limit Tanggal 25<br>KIRIM TAGIHAN => 17 <-> Tagihan Limit Tgl 10<br>NO ACTION => 17 <-> Tagihan Limit Tgl 15<br>NO ACTION => 20 <-> IVVI-10<br>NO ACTION => 20 <-> IVVI-20<br>NO ACTION => 20 <-> IVVI-30<br>BUAT TAGIHAN => 21 <-> QONNET Start : 2025-07-02 - Last : 2025-07-05<br>NO ACTION => 21 <-> QONNET2<br>NO ACTION => 25 <-> Tagihan Limit Tgl 5<br>REMAND => 23 <-> Limit Tanggal 5<br>NO ACTION => 26 <-> Limit Tanggal 10<br>NO ACTION => 24 <-> Tagihan30<br>BUAT TAGIHAN => 23 <-> limit tanggal 19 Start : 2025-06-27 - Last : 2025-07-14<br>KIRIM TAGIHAN => 31 <-> 23-ISOLIR<br>NO ACTION => 33 <-> usolir-10<br>NO ACTION => 37 <-> paket 140 ribu<br>REMAND => 28 <-> PAKET-100K<br>REMAND => 28 <-> PAKET-150K<br>REMAND => 28 <-> PAKET-200K<br>REMAND => 28 <-> PAKET-300K<br>KIRIM TAGIHAN => 42 <-> meldina-20<br>BUAT TAGIHAN => 41 <-> lippy-20 Start : 2025-07-04 - Last : 2025-07-09<br>BUAT TAGIHAN => 43 <-> Tagihan_Limit_tgl_13 Start : 2025-07-01 - Last : 2025-07-06<br>REMAND => 46 <-> Limit_Tgl_5<br>NO ACTION => 35 <-> PAKET 1 DEVICE<br>NO ACTION => 35 <-> PAKET 2 DEVICE<br>NO ACTION => 35 <-> PAKET 3 DEVICE<br>NO ACTION => 35 <-> PAKET 4 DEVICE<br>NO ACTION => 35 <-> PAKET 5 DEVICE [1/80]<br>NO ACTION => 35 <-> PAKET 5 DEVICE [1/70]<br>NO ACTION => 35 <-> PAKET 6 DEVICE [1/80]<br>NO ACTION => 35 <-> PAKET 6 DEVICE [1/70]<br>NO ACTION => 35 <-> PAKET 7 DEVICE<br>NO ACTION => 35 <-> PAKET 8 DEVICE<br>BUAT TAGIHAN => 44 <-> Isolir_20 Start : 2025-07-04 - Last : 2025-07-07<br>BUAT TAGIHAN => 53 <-> PAKET BRONZE Start : 2025-07-01 - Last : 2025-07-06<br>KIRIM TAGIHAN => 54 <-> Muhamad rouf<br>BUAT TAGIHAN => 53 <-> PAKET PLATINUM 5MBs Start : 2025-07-01 - Last : 2025-07-06<br>BUAT TAGIHAN => 53 <-> PAKET GLOD 7 MBs Start : 2025-07-01 - Last : 2025-07-06<br>BUAT TAGIHAN => 53 <-> PAKET GLOD+ 10 MBs Start : 2025-07-01 - Last : 2025-07-06<br>NO ACTION => 59 <-> Isolir_21<br>BUAT TAGIHAN => 46 <-> Limit tgl 30 Start : 2025-06-29 - Last : 2025-07-24<br>NO ACTION => 61 <-> Isolir_20<br>BUAT TAGIHAN => 55 <-> Dcn_CO_Isolir Start : 2025-06-28 - Last : 2025-07-24<br>REMAND => 62 <-> limit tanggal 5<br>NO ACTION => 21 <-> VIP-BAGUS<br>REMAND => 55 <-> Dcn_GB_Isolir<br>BUAT TAGIHAN => 49 <-> TAGIHAN TANGGAL 20 Start : 2025-06-29 - Last : 2025-07-18<br>NO ACTION => 19 <-> TAGIHAN-TGL1<br>NO ACTION => 49 <-> TAGIHAN TANGGAL 1<br>NO ACTION => 66 <-> Tagihan Isolir Tgl 1<br>NO ACTION => 67 <-> Tag Netborhood Limit Tgl 10<br>REMAND => 73 <-> Tagihan01-05<br> NO ACTION => 2 <-> cc.net Limit_Tgl_5<br>NO ACTION => 3 <-> nsn utama Limit_Tgl_10<br>NO ACTION => 3 <-> ciangsana Limit_Tgl_15<br>NO ACTION => 4 <-> fast.net Limit_Tgl_12<br>NO ACTION => 5 <-> bima net Limit Tagihan Tgl 15<br>NO ACTION => 6 <-> kingnet Limit Tgl 15<br>NO ACTION => 8 <-> diamond.net Limit_Tgl_15<br>NO ACTION => 9 <-> 22 p.net Limit_Tgl_15<br>NO ACTION => 10 <-> nettizen Tagihan Limit tgl 15<br>NO ACTION => 12 <-> Tagihan_Limit_Tgl5<br>NO ACTION => 15 <-> Tag_NTA2 Limit Tgl 10<br>NO ACTION => 16 <-> Tagihan Limit Tgl 5<br>NO ACTION => 13 <-> Limit Tanggal 26 (Infinnet)<br>NO ACTION => 18 <-> BUM-Limit-Tgl-5<br>BUAT TAGIHAN => 14 <-> Kh_Limit Tanggal 25 Start : 2025-07-13 - Last : 2025-07-18<br>NO ACTION => 17 <-> Tagihan Limit Tgl 10<br>NO ACTION => 17 <-> Tagihan Limit Tgl 15<br>NO ACTION => 20 <-> IVVI-10<br>NO ACTION => 20 <-> IVVI-20<br>NO ACTION => 20 <-> IVVI-30<br>NO ACTION => 21 <-> QONNET<br>NO ACTION => 21 <-> QONNET2<br>NO ACTION => 25 <-> Tagihan Limit Tgl 5<br>NO ACTION => 23 <-> Limit Tanggal 5<br>NO ACTION => 26 <-> Limit Tanggal 10<br>NO ACTION => 24 <-> Tagihan30<br>NO ACTION => 23 <-> limit tanggal 19<br>NO ACTION => 31 <-> 23-ISOLIR<br>NO ACTION => 33 <-> usolir-10<br>NO ACTION => 37 <-> paket 140 ribu<br>NO ACTION => 28 <-> PAKET-100K<br>NO ACTION => 28 <-> PAKET-150K<br>NO ACTION => 28 <-> PAKET-200K<br>NO ACTION => 28 <-> PAKET-300K<br>NO ACTION => 42 <-> meldina-20<br>NO ACTION => 41 <-> lippy-20<br>NO ACTION => 43 <-> Tagihan_Limit_tgl_13<br>NO ACTION => 46 <-> Limit_Tgl_5<br>NO ACTION => 35 <-> PAKET 1 DEVICE<br>NO ACTION => 35 <-> PAKET 2 DEVICE<br>NO ACTION => 35 <-> PAKET 3 DEVICE<br>NO ACTION => 35 <-> PAKET 4 DEVICE<br>NO ACTION => 35 <-> PAKET 5 DEVICE [1/80]<br>NO ACTION => 35 <-> PAKET 5 DEVICE [1/70]<br>NO ACTION => 35 <-> PAKET 6 DEVICE [1/80]<br>NO ACTION => 35 <-> PAKET 6 DEVICE [1/70]<br>NO ACTION => 35 <-> PAKET 7 DEVICE<br>NO ACTION => 35 <-> PAKET 8 DEVICE<br>NO ACTION => 44 <-> Isolir_20<br>NO ACTION => 53 <-> PAKET BRONZE <br>NO ACTION => 54 <-> Muhamad rouf<br>NO ACTION => 53 <-> PAKET PLATINUM 5MBs<br>NO ACTION => 53 <-> PAKET GLOD 7 MBs<br>NO ACTION => 53 <-> PAKET GLOD+ 10 MBs<br>NO ACTION => 59 <-> Isolir_21<br>NO ACTION => 46 <-> Limit tgl 30<br>NO ACTION => 61 <-> Isolir_20<br>NO ACTION => 55 <-> Dcn_CO_Isolir<br>NO ACTION => 62 <-> limit tanggal 5<br>NO ACTION => 55 <-> Dcn_GB_Isolir<br>NO ACTION => 49 <-> TAGIHAN TANGGAL 20<br>NO ACTION => 19 <-> TAGIHAN-TGL1<br>NO ACTION => 49 <-> TAGIHAN TANGGAL 1<br>NO ACTION => 66 <-> Tagihan Isolir Tgl 1<br>NO ACTION => 67 <-> Tag Netborhood Limit Tgl 10<br>NO ACTION => 73 <-> Tagihan01-05<br>
+2 -1
View File
@@ -709,7 +709,8 @@ $statuspaygw = $datastatus['status_payment_gateway'];
}).buttons().container().appendTo('#example1_wrapper .col-md-6:eq(0)'); }).buttons().container().appendTo('#example1_wrapper .col-md-6:eq(0)');
$("#example2").DataTable({ $("#example2").DataTable({
"responsive": true, "responsive": true,
"autoWidth": false "autoWidth": false,
"pageLength": 100
}); });
$("#example3").DataTable({ $("#example3").DataTable({
"responsive": true, "responsive": true,
Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

+135 -73
View File
@@ -2,127 +2,189 @@
ini_set('display_errors', 1); ini_set('display_errors', 1);
error_reporting(E_ALL); error_reporting(E_ALL);
// =======================
// Include necessary files // Include necessary files
// =======================
include "/www/wwwroot/bilspro/config/connect.php"; include "/www/wwwroot/bilspro/config/connect.php";
include "/www/wwwroot/bilspro/config/routeros_api.class.php"; include "/www/wwwroot/bilspro/config/routeros_api.class.php";
// include "../config/connect.php"; // ============================
// include "../config/routeros_api.class.php"; // Get parameters from CLI args
// ============================
$m_ip = $argv[1]; // IP address
$m_user = $argv[2]; // Username
$m_pass = $argv[3]; // Password
$m_port = $argv[4]; // Port
$idsm = $argv[5]; // Mikrotik setting ID
$nama = $argv[6]; // Nama Mikrotik
// Get parameters from command line arguments // ====================
$m_ip = $argv[1]; // IP address // Log file location
$m_user = $argv[2]; // Username // ====================
$m_pass = $argv[3]; // Password $logFile = "/www/wwwroot/bilspro/load/logs/voucher_{$nama}_log.txt";
$m_port = $argv[4]; // Port
$idsm = $argv[5]; // Mikrotik setting ID
// Create new RouterosAPI instance // ================================
// Function: Write to log file
// ================================
function writeLog($message)
{
global $logFile;
$date = date("Y-m-d H:i:s");
$newLine = "[$date] $message\n";
// Append new log
file_put_contents($logFile, $newLine, FILE_APPEND);
// Keep log file max 1000 lines
$lines = file($logFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$totalLines = count($lines);
if ($totalLines > 1000) {
$lines = array_slice($lines, -1000); // Keep only last 1000
file_put_contents($logFile, implode("\n", $lines) . "\n");
}
}
// ==========================
// Create RouterOS API object
// ==========================
$API = new RouterosAPI(); $API = new RouterosAPI();
$API->debug = false; $API->debug = false;
// Connect to the router API // =======================
// Connect to RouterOS API
// =======================
if ($API->connect2($m_ip, $m_user, $m_pass, $m_port)) { if ($API->connect2($m_ip, $m_user, $m_pass, $m_port)) {
echo "\n<b>Connected to Router: {$m_ip}</b>\n"; echo "✅ Berhasil terhubung ke Router: {$m_ip}\n";
writeLog("[✅] Berhasil terhubung ke Router: {$m_ip}");
// Query vouchers that need to be checked $batchSize = 200; // Batasi 200 voucher per batch
$ambilv1 = $pdo->prepare("SELECT id, create_time, voucher, durasi FROM v_load_cek_voucher WHERE id_setting_mikrotik = :idsm AND status_cek IS NULL LIMIT 75"); $offset = 0;
$ambilv1->execute([':idsm' => $idsm]);
while ($cekv1 = $ambilv1->fetch(PDO::FETCH_ASSOC)) { do {
$iddatav1 = $cekv1['id']; $ambilv1 = $pdo->prepare("
$datav1 = $cekv1['voucher']; SELECT id, create_time, voucher, durasi
$durasi = $cekv1['durasi']; FROM v_load_cek_voucher
WHERE id_setting_mikrotik = :idsm
LIMIT :limit OFFSET :offset
");
$ambilv1->bindValue(':idsm', $idsm, PDO::PARAM_INT);
$ambilv1->bindValue(':limit', $batchSize, PDO::PARAM_INT);
$ambilv1->bindValue(':offset', $offset, PDO::PARAM_INT);
$ambilv1->execute();
// Convert the 'durasi' to a valid DateInterval format $rows = $ambilv1->fetchAll(PDO::FETCH_ASSOC);
$inter = convertDurationToInterval($durasi); if (!$rows) break;
if (!$inter) {
echo "Invalid duration format: $durasi.\n";
continue; // Skip this voucher if the duration is invalid
}
// Check if the voucher exists in the hotspot users foreach ($rows as $cekv1) {
$cek = $API->comm('/ip/hotspot/user/print', ["?name" => $datav1]); $iddatav1 = $cekv1['id'];
$datav1 = $cekv1['voucher'];
$durasi = $cekv1['durasi'];
if ($cek) { // ================================
// If voucher exists, check the comment // Convert duration to DateInterval
if (isset($cek[0]['comment']) && $cek[0]['comment'] != '') { // ================================
$activetime = processCommentDate($cek[0]['comment']); $inter = convertDurationToInterval($durasi);
$Tgl = new DateTime($activetime); if (!$inter) {
$status = "Durasi tidak valid ($durasi)";
echo "{$datav1} => $status\n";
writeLog("[⛔] {$datav1} => $status");
continue;
}
// =====================================
// Check if voucher exists on Hotspot
// =====================================
$cek = $API->comm('/ip/hotspot/user/print', ["?name" => $datav1]);
if ($cek) {
// If voucher exists and has comment
if (!empty($cek[0]['comment'])) {
$activetime = processCommentDate($cek[0]['comment']);
$Tgl = new DateTime($activetime);
$Tgl->add($inter);
$exp = $Tgl->format('Y-m-d H:i:s');
updateVoucher($pdo, $iddatav1, $activetime, $exp);
$status = "Voucher aktif & diperbarui. Expired: $exp";
echo "{$datav1} => $status\n";
writeLog("[✅] {$datav1} => $status");
} else {
markVoucherChecked($pdo, $iddatav1);
$status = "Voucher ditemukan tanpa komentar, ditandai sudah dicek";
echo "{$datav1} => $status\n";
writeLog("[️] {$datav1} => $status");
}
} else {
// If voucher does not exist
$aktif = $cekv1['create_time'];
$Tgl = new DateTime($aktif);
$Tgl->add($inter); $Tgl->add($inter);
$exp = $Tgl->format('Y-m-d H:i:s'); $exp = $Tgl->format('Y-m-d H:i:s');
echo "{$datav1} comment->{$cek[0]['comment']} active->{$activetime} exp->{$exp} => Exists\n"; updateVoucher($pdo, $iddatav1, $aktif, $exp);
$status = "Voucher tidak ditemukan, dianggap aktif sejak $aktif, expired: $exp";
// Update the database with active and expired time echo "{$datav1} => $status\n";
updateVoucher($pdo, $iddatav1, $activetime, $exp); writeLog("[⚠️] {$datav1} => $status");
} else {
// Mark the voucher as checked
markVoucherChecked($pdo, $iddatav1);
} }
} else {
// If voucher does not exist, calculate expiration time based on creation date
$aktif = $cekv1['create_time'];
$Tgl = new DateTime($aktif);
$Tgl->add($inter);
$exp = $Tgl->format('Y-m-d H:i:s');
echo "{$datav1} active->{$aktif} exp->{$exp} => Does not exist\n";
// Update the database with active and expired time
updateVoucher($pdo, $iddatav1, $aktif, $exp);
} }
echo "{$cekv1['voucher']}\n"; $offset += $batchSize;
} } while (count($rows) == $batchSize);
echo "✅ Selesai memproses semua voucher untuk Router {$m_ip}\n";
writeLog("[✅] Selesai memproses semua voucher untuk Router {$m_ip}");
} else { } else {
echo "Unable to connect to router: {$m_ip}\n"; $msg = "Gagal terhubung ke Router: {$m_ip}";
echo "$msg\n";
writeLog("[❌] $msg");
} }
// Disconnect the API session // =======================
// Disconnect API session
// =======================
$API->disconnect(); $API->disconnect();
// Function to convert duration string to DateInterval
function convertDurationToInterval($durasi) { // ============================================
// Helper Functions
// ============================================
function convertDurationToInterval($durasi)
{
if (substr($durasi, -1) == 'H') { if (substr($durasi, -1) == 'H') {
return new DateInterval("PT" . rtrim($durasi, 'H') . "H"); // For hours return new DateInterval("PT" . rtrim($durasi, 'H') . "H");
} elseif (substr($durasi, -1) == 'D') { } elseif (substr($durasi, -1) == 'D') {
return new DateInterval("P" . rtrim($durasi, 'D') . "D"); // For days return new DateInterval("P" . rtrim($durasi, 'D') . "D");
} elseif (substr($durasi, -1) == 'M') { } elseif (substr($durasi, -1) == 'M') {
return new DateInterval("PT" . rtrim($durasi, 'M') . "M"); // For minutes return new DateInterval("PT" . rtrim($durasi, 'M') . "M");
} else { } else {
return false; // Invalid duration format return false;
} }
} }
// Function to process the comment and extract valid activation time function processCommentDate($comment)
function processCommentDate($comment) { {
$modifiedDateTime = substr($comment, 6); $modifiedDateTime = substr($comment, 6);
if (substr($modifiedDateTime, 0, 4) == date('Y')) { if (substr($modifiedDateTime, 0, 4) == date('Y')) {
return $modifiedDateTime; return $modifiedDateTime;
} else { } else {
$date = date_create_from_format("M/d/Y H:i:s", $modifiedDateTime); $date = date_create_from_format("M/d/Y H:i:s", $modifiedDateTime);
if ($date !== false) { return $date ? date_format($date, "Y-m-d H:i:s") : null;
return date_format($date, "Y-m-d H:i:s");
} else {
echo "Invalid date format: {$modifiedDateTime}\n";
return null;
}
} }
} }
// Function to update the voucher in the database function updateVoucher($pdo, $iddatav1, $activetime, $exp)
function updateVoucher($pdo, $iddatav1, $activetime, $exp) { {
$updateQuery = "UPDATE ganerate_voucher SET active_time = :activetime, expaired_time = :exp WHERE id = :id"; $updateQuery = "UPDATE ganerate_voucher SET active_time = :activetime, expaired_time = :exp WHERE id = :id";
$stmt = $pdo->prepare($updateQuery); $stmt = $pdo->prepare($updateQuery);
$stmt->execute([ $stmt->execute([
':activetime' => $activetime, ':activetime' => $activetime,
':exp' => $exp, ':exp' => $exp,
':id' => $iddatav1 ':id' => $iddatav1
]); ]);
} }
// Function to mark voucher as checked in the database function markVoucherChecked($pdo, $iddatav1)
function markVoucherChecked($pdo, $iddatav1) { {
$updateQuery = "UPDATE ganerate_voucher SET status_cek = '1' WHERE id = :id"; $updateQuery = "UPDATE ganerate_voucher SET status_cek = '1' WHERE id = :id";
$stmt = $pdo->prepare($updateQuery); $stmt = $pdo->prepare($updateQuery);
$stmt->execute([':id' => $iddatav1]); $stmt->execute([':id' => $iddatav1]);
+16 -16
View File
@@ -1,23 +1,23 @@
SV_Cikembar_Utama Data pelanggan tidak ada SV_Cikembar_Utama Data pelanggan tidak ada
2025-07-05 16:21:01SV_BojongKerta Data pelanggan tidak ada 2025-07-14 23:47:01SV_BojongKerta Data pelanggan tidak ada
2025-07-05 16:21:01SV_Permata_Sampora Data pelanggan tidak ada 2025-07-14 23:47:01SV_Permata_Sampora Data pelanggan tidak ada
2025-07-05 16:21:01SV_Kingnet_Cibadak Data pelanggan tidak ada 2025-07-14 23:47:01SV_Kingnet_Cibadak Data pelanggan tidak ada
2025-07-05 16:21:01SV_CC-Net_Cipicung Data pelanggan tidak ada 2025-07-14 23:47:01SV_CC-Net_Cipicung Data pelanggan tidak ada
2025-07-05 16:21:01SV_Nusaina_Cibadak Data pelanggan tidak ada 2025-07-14 23:47:01SV_Nusaina_Cibadak Data pelanggan tidak ada
2025-07-05 16:21:01SV_Diamond Net Status koneksi tidak aktif atau interval tidak tersedia. 2025-07-14 23:47:01SV_Diamond Net Status koneksi tidak aktif atau interval tidak tersedia.
SV_22P Net Cibadak Data pelanggan tidak ada SV_22P Net Cibadak Data pelanggan tidak ada
2025-07-05 16:21:01SV_Nettizen_Segaranten Data pelanggan tidak ada 2025-07-14 23:47:01SV_Nettizen_Segaranten Data pelanggan tidak ada
2025-07-05 15:51:01SV-DNY-Net-1 Data pelanggan tidak ada 2025-07-14 23:17:02SV-DNY-Net-1 Data pelanggan tidak ada
2025-07-05 16:31:01SV_NTA_2_Pasawahan Status koneksi tidak aktif atau interval tidak tersedia. 2025-07-14 23:57:02SV_NTA_2_Pasawahan Status koneksi tidak aktif atau interval tidak tersedia.
SV_NTA_1 Status koneksi tidak aktif atau interval tidak tersedia. SV_NTA_1 Status koneksi tidak aktif atau interval tidak tersedia.
SV-Cicukang Status koneksi tidak aktif atau interval tidak tersedia. SV-Cicukang Status koneksi tidak aktif atau interval tidak tersedia.
RO-Bumdes-Mekarmanah Status koneksi tidak aktif atau interval tidak tersedia. RO-Bumdes-Mekarmanah Status koneksi tidak aktif atau interval tidak tersedia.
RO-Pak-Kholiq Data pelanggan tidak ada RO-Pak-Kholiq Data pelanggan tidak ada
2025-07-05 16:36:01RO-Dendrit-Net Status koneksi tidak aktif atau interval tidak tersedia. 2025-07-15 00:02:02RO-Dendrit-Net Status koneksi tidak aktif atau interval tidak tersedia.
LJN.NS.CSR.NET Status koneksi tidak aktif atau interval tidak tersedia. LJN.NS.CSR.NET Status koneksi tidak aktif atau interval tidak tersedia.
IVVINET-CBD Data pelanggan tidak ada IVVINET-CBD Data pelanggan tidak ada
2025-07-05 16:21:01QONNET Data pelanggan tidak ada 2025-07-14 23:47:02QONNET Data pelanggan tidak ada
2025-07-05 16:21:01Mikrotik_X86 Status koneksi tidak aktif atau interval tidak tersedia. 2025-07-14 23:47:02Mikrotik_X86 Status koneksi tidak aktif atau interval tidak tersedia.
Mikrotik_BSW_1 Status koneksi tidak aktif atau interval tidak tersedia. Mikrotik_BSW_1 Status koneksi tidak aktif atau interval tidak tersedia.
Mikrotik_Alea Status koneksi tidak aktif atau interval tidak tersedia. Mikrotik_Alea Status koneksi tidak aktif atau interval tidak tersedia.
STANG Status koneksi tidak aktif atau interval tidak tersedia. STANG Status koneksi tidak aktif atau interval tidak tersedia.
@@ -25,7 +25,7 @@ UNIX-NET Status koneksi tidak aktif atau interval tidak tersedia.
BTR CIEMAS Status koneksi tidak aktif atau interval tidak tersedia. BTR CIEMAS Status koneksi tidak aktif atau interval tidak tersedia.
SV_NTA_2_TBL Status koneksi tidak aktif atau interval tidak tersedia. SV_NTA_2_TBL Status koneksi tidak aktif atau interval tidak tersedia.
MULYANAJAYA Status koneksi tidak aktif atau interval tidak tersedia. MULYANAJAYA Status koneksi tidak aktif atau interval tidak tersedia.
PERWASIM.NET Status koneksi tidak aktif atau interval tidak tersedia. PERWASIM-NETWORK Status koneksi tidak aktif atau interval tidak tersedia.
RO_MELDINA Status koneksi tidak aktif atau interval tidak tersedia. RO_MELDINA Status koneksi tidak aktif atau interval tidak tersedia.
RO_LIPPY Status koneksi tidak aktif atau interval tidak tersedia. RO_LIPPY Status koneksi tidak aktif atau interval tidak tersedia.
RO_Asep Status koneksi tidak aktif atau interval tidak tersedia. RO_Asep Status koneksi tidak aktif atau interval tidak tersedia.
@@ -37,14 +37,14 @@ RO_Wargasari Status koneksi tidak aktif atau interval tidak tersedia.
LJN_AGUNG Status koneksi tidak aktif atau interval tidak tersedia. LJN_AGUNG Status koneksi tidak aktif atau interval tidak tersedia.
RNET-CMS Status koneksi tidak aktif atau interval tidak tersedia. RNET-CMS Status koneksi tidak aktif atau interval tidak tersedia.
DCN-GB-CCR Data pelanggan tidak ada DCN-GB-CCR Data pelanggan tidak ada
2025-07-05 16:21:01coba Status koneksi tidak aktif atau interval tidak tersedia. 2025-07-14 23:47:02coba Status koneksi tidak aktif atau interval tidak tersedia.
412NET Status koneksi tidak aktif atau interval tidak tersedia. 412NET Status koneksi tidak aktif atau interval tidak tersedia.
brf Status koneksi tidak aktif atau interval tidak tersedia. brf Status koneksi tidak aktif atau interval tidak tersedia.
BMSNET Status koneksi tidak aktif atau interval tidak tersedia. BMSNET Status koneksi tidak aktif atau interval tidak tersedia.
purabaya Status koneksi tidak aktif atau interval tidak tersedia. purabaya Status koneksi tidak aktif atau interval tidak tersedia.
DCN-CO-GX4 Data pelanggan tidak ada DCN-CO-GX4 Data pelanggan tidak ada
2025-07-05 16:21:01MIKROTIK GX4 Status koneksi tidak aktif atau interval tidak tersedia. 2025-07-14 23:47:02MIKROTIK GX4 Status koneksi tidak aktif atau interval tidak tersedia.
RO - Netborhood Wifi Status koneksi tidak aktif atau interval tidak tersedia. RO - Netborhood Wifi Status koneksi tidak aktif atau interval tidak tersedia.
Neglasari Status koneksi tidak aktif atau interval tidak tersedia. Neglasari Status koneksi tidak aktif atau interval tidak tersedia.
SV-DNY-Net-2 Data pelanggan tidak ada SV-DNY-Net-2 Data pelanggan tidak ada
2025-07-05 16:31:01DNY-Neglasari Status koneksi tidak aktif atau interval tidak tersedia. 2025-07-14 23:57:02DNY-Neglasari Status koneksi tidak aktif atau interval tidak tersedia.
+1 -1
View File
@@ -1 +1 @@
Update ALL to NULL successful Successfully started background process for IP: tunnel.manjapro.net SV-DNY-Net-1<br>Successfully started background process for IP: nsn.my.id SV_22P Net Cibadak<br>Successfully started background process for IP: nsn.my.id RO-Bumdes-Mekarmanah<br>Successfully started background process for IP: 103.242.104.69 RO-Dendrit-Net<br>Successfully started background process for IP: 103.26.176.93 LJN.NS.CSR.NET<br>Successfully started background process for IP: 103.155.198.109 RO_Asep<br>Successfully started background process for IP: 103.155.199.191 PERWASIM-NETWORK<br>Successfully started background process for IP: tunnel.manjapro.net SV_NTA_2_Pasawahan<br>Successfully started background process for IP: tunnel.manjapro.net SV-Cicukang<br>Successfully started background process for IP: tunnel.manjapro.net SV_NTA_1<br>Successfully started background process for IP: 103.94.10.112 STANG<br>Successfully started background process for IP: 157.20.128.231 QONNET<br>Successfully started background process for IP: 114.141.51.12 BMSNET<br>Successfully started background process for IP: 114.141.51.12 purabaya<br>Successfully started background process for IP: nsn.my.id SV_Cikembar_Utama<br>Successfully started background process for IP: tunnel.bilspro.com RO_Sukasari<br>Successfully started background process for IP: tunnel.bilspro.com Mikrotik_X86<br>Successfully started background process for IP: 103.155.196.145 UNIX-NET<br>Successfully started background process for IP: nsn.my.id SV_Diamond Net<br>Successfully started background process for IP: 103.26.176.81 SV_CC-Net_Cipicung<br>Successfully started background process for IP: 103.242.105.199 SV-DNY-Net-2<br>Started parallel processes for checking vouchers. => 2025-07-15 00:00:01
+4 -3
View File
@@ -19,6 +19,7 @@ if ($set1->rowCount() > 0) {
while ($pset = $set1->fetch(PDO::FETCH_ASSOC)) { while ($pset = $set1->fetch(PDO::FETCH_ASSOC)) {
// Get connection details for the router // Get connection details for the router
$nama = $pset['nama'];
$m_ip = $pset['ip_address']; $m_ip = $pset['ip_address'];
$m_user = $pset['username']; $m_user = $pset['username'];
$m_pass = $pset['password']; $m_pass = $pset['password'];
@@ -26,16 +27,16 @@ if ($set1->rowCount() > 0) {
$idsm = $pset['id_setting_mikrotik']; $idsm = $pset['id_setting_mikrotik'];
// Prepare the command for each router // Prepare the command for each router
$command = "php /www/wwwroot/bilspro/load/check_voucher.php {$m_ip} {$m_user} {$m_pass} {$m_port} {$idsm} > /dev/null 2>&1 &"; $command = "php /www/wwwroot/bilspro/load/check_voucher.php {$m_ip} {$m_user} {$m_pass} {$m_port} {$idsm} {$nama} > /dev/null 2>&1 &";
// Execute the command in background // Execute the command in background
exec($command, $output, $return_var); exec($command, $output, $return_var);
// Check if there was an issue with exec // Check if there was an issue with exec
if ($return_var !== 0) { if ($return_var !== 0) {
echo "Error executing command for IP: {$m_ip}\n"; echo "Error executing command for IP: {$m_ip}<br>";
} else { } else {
echo "Successfully started background process for IP: {$m_ip}\n"; echo "Successfully started background process for IP: {$m_ip} {$nama}<br>";
} }
} }
+1 -1
View File
@@ -24,7 +24,7 @@ STANG =><br>
UNIX-NET =><br> UNIX-NET =><br>
SV_NTA_2_TBL =><br> SV_NTA_2_TBL =><br>
MULYANAJAYA =><br> MULYANAJAYA =><br>
PERWASIM.NET =><br> PERWASIM-NETWORK =><br>
RO_MELDINA =><br> RO_MELDINA =><br>
RO_LIPPY =><br> RO_LIPPY =><br>
RO_Asep =><br> RO_Asep =><br>
+1 -1
View File
@@ -1 +1 @@
Tidak perlu update untuk ID: 2 Rp.200,000<br>Harga khusus untuk ID: 3 Rp.250,000<br>Tidak perlu update untuk ID: 4 Rp.300,000<br>Tidak perlu update untuk ID: 5 Rp.300,000<br>Tidak perlu update untuk ID: 6 Rp.200,000<br>Harga khusus untuk ID: 7 Rp.200,000<br>Tidak perlu update untuk ID: 8 Rp.200,000<br>Tidak perlu update untuk ID: 9 Rp.200,000<br>Tidak perlu update untuk ID: 10 Rp.200,000<br>Harga harus diupdate untuk ID Data Server: 12 Rp.750,000<br>Tidak perlu update untuk ID: 13 Rp.750,000<br>Tidak perlu update untuk ID: 14 Rp.450,000<br>Tidak perlu update untuk ID: 15 Rp.450,000<br>Tidak perlu update untuk ID: 16 Rp.300,000<br>Harga khusus untuk ID: 17 Rp.300,000<br>Tidak perlu update untuk ID: 18 Rp.300,000<br>Tidak perlu update untuk ID: 19 Rp.450,000<br>Tidak perlu update untuk ID: 20 Rp.200,000<br>Tidak perlu update untuk ID: 21 Rp.300,000<br>Tidak perlu update untuk ID: 22 Rp.300,000<br>Tidak perlu update untuk ID: 23 Rp.450,000<br>Tidak perlu update untuk ID: 24 Rp.200,000<br>Tidak perlu update untuk ID: 25 Rp.250,000<br>Tidak perlu update untuk ID: 26 Rp.200,000<br>Tidak perlu update untuk ID: 28 Rp.200,000<br>Tidak perlu update untuk ID: 29 Rp.300,000<br>Tidak perlu update untuk ID: 30 Rp.200,000<br>Tidak perlu update untuk ID: 31 Rp.200,000<br>Tidak perlu update untuk ID: 32 Rp.200,000<br>Tidak perlu update untuk ID: 33 Rp.200,000<br>Tidak perlu update untuk ID: 34 Rp.200,000<br>Tidak perlu update untuk ID: 35 Rp.200,000<br>Tidak perlu update untuk ID: 36 Rp.200,000<br>Tidak perlu update untuk ID: 37 Rp.300,000<br>Tidak perlu update untuk ID: 38 Rp.200,000<br>Tidak perlu update untuk ID: 39 Rp.200,000<br>Harga khusus untuk ID: 40 Rp.1,000,000<br>Tidak perlu update untuk ID: 41 Rp.200,000<br>Tidak perlu update untuk ID: 42 Rp.200,000<br>Harga khusus untuk ID: 43 Rp.100,000<br>Tidak perlu update untuk ID: 44 Rp.200,000<br>Tidak perlu update untuk ID: 45 Rp.300,000<br>Tidak perlu update untuk ID: 46 Rp.200,000<br>Tidak perlu update untuk ID: 47 Rp.200,000<br>Tidak perlu update untuk ID: 48 Rp.200,000<br>Tidak perlu update untuk ID: 49 Rp.200,000<br>Tidak perlu update untuk ID: 50 Rp.200,000<br>Tidak perlu update untuk ID: 51 Rp.200,000<br>Tidak perlu update untuk ID: 52 Rp.1,000,000<br>Tidak perlu update untuk ID: 53 Rp.200,000<br>Tidak perlu update untuk ID: 54 Rp.200,000<br>Tidak perlu update untuk ID: 55 Rp.200,000<br>Tidak perlu update untuk ID: 56 Rp.200,000<br>Tidak perlu update untuk ID: 57 Rp.200,000<br>Tidak perlu update untuk ID: 58 Rp.200,000<br>Tidak perlu update untuk ID: 59 Rp.200,000<br>Tidak perlu update untuk ID: 60 Rp.200,000<br>Tidak perlu update untuk ID: 61 Rp.300,000<br>Tidak perlu update untuk ID: 62 Rp.200,000<br>Tidak perlu update untuk ID: 63 Rp.200,000<br>Tidak perlu update untuk ID: 64 Rp.200,000<br>Tidak perlu update untuk ID: 65 Rp.200,000<br>Tidak perlu update untuk ID: 66 Rp.200,000<br>Tidak perlu update untuk ID: 67 Rp.200,000<br>Harga khusus untuk ID: 68 Rp.200,000<br>Harga khusus untuk ID: 69 Rp.200,000<br>Tidak perlu update untuk ID: 70 Rp.200,000<br>Tidak perlu update untuk ID: 71 Rp.200,000<br>Tidak perlu update untuk ID: 72 Rp.200,000<br>Tidak perlu update untuk ID: 73 Rp.200,000<br> Tidak perlu update untuk ID: 2 Rp.200,000<br>Harga khusus untuk ID: 3 Rp.250,000<br>Tidak perlu update untuk ID: 4 Rp.300,000<br>Tidak perlu update untuk ID: 5 Rp.300,000<br>Tidak perlu update untuk ID: 6 Rp.200,000<br>Harga khusus untuk ID: 7 Rp.200,000<br>Tidak perlu update untuk ID: 8 Rp.200,000<br>Tidak perlu update untuk ID: 9 Rp.200,000<br>Tidak perlu update untuk ID: 10 Rp.200,000<br>Tidak perlu update untuk ID: 12 Rp.750,000<br>Tidak perlu update untuk ID: 13 Rp.750,000<br>Tidak perlu update untuk ID: 14 Rp.450,000<br>Tidak perlu update untuk ID: 15 Rp.450,000<br>Tidak perlu update untuk ID: 16 Rp.300,000<br>Harga khusus untuk ID: 17 Rp.300,000<br>Tidak perlu update untuk ID: 18 Rp.300,000<br>Tidak perlu update untuk ID: 19 Rp.450,000<br>Tidak perlu update untuk ID: 20 Rp.200,000<br>Tidak perlu update untuk ID: 21 Rp.300,000<br>Tidak perlu update untuk ID: 22 Rp.300,000<br>Tidak perlu update untuk ID: 23 Rp.450,000<br>Tidak perlu update untuk ID: 24 Rp.200,000<br>Tidak perlu update untuk ID: 25 Rp.250,000<br>Tidak perlu update untuk ID: 26 Rp.200,000<br>Tidak perlu update untuk ID: 28 Rp.200,000<br>Tidak perlu update untuk ID: 29 Rp.300,000<br>Tidak perlu update untuk ID: 30 Rp.200,000<br>Tidak perlu update untuk ID: 31 Rp.200,000<br>Tidak perlu update untuk ID: 32 Rp.200,000<br>Tidak perlu update untuk ID: 33 Rp.200,000<br>Tidak perlu update untuk ID: 34 Rp.200,000<br>Tidak perlu update untuk ID: 35 Rp.200,000<br>Tidak perlu update untuk ID: 36 Rp.200,000<br>Tidak perlu update untuk ID: 37 Rp.300,000<br>Tidak perlu update untuk ID: 38 Rp.200,000<br>Tidak perlu update untuk ID: 39 Rp.200,000<br>Harga khusus untuk ID: 40 Rp.1,000,000<br>Tidak perlu update untuk ID: 41 Rp.200,000<br>Tidak perlu update untuk ID: 42 Rp.200,000<br>Harga khusus untuk ID: 43 Rp.100,000<br>Tidak perlu update untuk ID: 44 Rp.200,000<br>Tidak perlu update untuk ID: 45 Rp.300,000<br>Tidak perlu update untuk ID: 46 Rp.200,000<br>Tidak perlu update untuk ID: 47 Rp.200,000<br>Tidak perlu update untuk ID: 48 Rp.200,000<br>Tidak perlu update untuk ID: 49 Rp.200,000<br>Tidak perlu update untuk ID: 50 Rp.200,000<br>Tidak perlu update untuk ID: 51 Rp.200,000<br>Tidak perlu update untuk ID: 52 Rp.1,000,000<br>Tidak perlu update untuk ID: 53 Rp.200,000<br>Tidak perlu update untuk ID: 54 Rp.200,000<br>Tidak perlu update untuk ID: 55 Rp.200,000<br>Tidak perlu update untuk ID: 56 Rp.200,000<br>Tidak perlu update untuk ID: 57 Rp.200,000<br>Tidak perlu update untuk ID: 58 Rp.200,000<br>Tidak perlu update untuk ID: 59 Rp.200,000<br>Tidak perlu update untuk ID: 60 Rp.200,000<br>Tidak perlu update untuk ID: 61 Rp.300,000<br>Tidak perlu update untuk ID: 62 Rp.200,000<br>Tidak perlu update untuk ID: 63 Rp.200,000<br>Tidak perlu update untuk ID: 64 Rp.200,000<br>Tidak perlu update untuk ID: 65 Rp.200,000<br>Tidak perlu update untuk ID: 66 Rp.200,000<br>Tidak perlu update untuk ID: 67 Rp.200,000<br>Harga khusus untuk ID: 68 Rp.200,000<br>Harga khusus untuk ID: 69 Rp.200,000<br>Tidak perlu update untuk ID: 70 Rp.200,000<br>Tidak perlu update untuk ID: 71 Rp.200,000<br>Tidak perlu update untuk ID: 72 Rp.200,000<br>Tidak perlu update untuk ID: 73 Rp.200,000<br>2399 data pesan sebelum 3 hari terakhir berhasil dihapus.<br>
+18
View File
@@ -55,6 +55,24 @@ try {
echo "Harga khusus untuk ID: " . $data['id'] . " Rp." . number_format($data['harga_sewa']) . "<br>"; echo "Harga khusus untuk ID: " . $data['id'] . " Rp." . number_format($data['harga_sewa']) . "<br>";
} }
} }
$sekarang = date('Y-m-d H:i:s');
$harilalu = date('Y-m-d H:i:s', strtotime("$sekarang -3 days"));
// Hitung jumlah data yang akan dihapus
$sqlCount = "SELECT COUNT(id) AS jumid FROM master_pesan WHERE waktu <= :harilalu";
$stmtCount = $pdo->prepare($sqlCount);
$stmtCount->execute(['harilalu' => $harilalu]);
$pp = $stmtCount->fetch(PDO::FETCH_ASSOC);
$jumlahHapus = $pp['jumid'] ?? 0;
// Hapus data
$sqlDelete = "DELETE FROM master_pesan WHERE waktu <= :harilalu";
$stmtDelete = $pdo->prepare($sqlDelete);
$stmtDelete->execute(['harilalu' => $harilalu]);
echo $jumlahHapus . " data pesan sebelum 3 hari terakhir berhasil dihapus.<br>";
} catch (PDOException $e) { } catch (PDOException $e) {
// Tangani kesalahan koneksi atau query // Tangani kesalahan koneksi atau query
echo "Terjadi kesalahan: " . $e->getMessage(); echo "Terjadi kesalahan: " . $e->getMessage();
+78 -3
View File
@@ -1,5 +1,5 @@
<!-- Main content --> <!-- Main content -->
<section class="content" style="zoom: 80%;"> <section class="content" style="zoom: 90%;">
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
<div class="col-12"> <div class="col-12">
@@ -10,7 +10,80 @@
<h3 class="card-title">Log Pesan</h3> <h3 class="card-title">Log Pesan</h3>
</div> </div>
<div class="col-sm-6"> <div class="col-sm-6">
<ol class="float-sm-right mb-0">
<a type="button" class="btn btn-secondary btn-sm" data-toggle="modal" data-target="#staticBackdrop">Kirim Ulang</a>
</lo>
</div> </div>
<div class="modal fade" id="staticBackdrop" data-backdrop="static" data-keyboard="false" tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<form method="post" enctype="multipart/form-data">
<div class="modal-header bg-primary">
<h5 class="modal-title" id="staticBackdropLabel">Kirim Ulang Pesan GAGAL Terakhir</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<?php
// Query dengan PDO
$stmt = $pdo->prepare("SELECT apikey_whatsapp FROM data_server WHERE id = :id");
$stmt->execute(['id' => $SvId]);
$pakw = $stmt->fetch(PDO::FETCH_ASSOC);
$sekarang = date('Y-m-d H:i:s');
?>
<div class="modal-body">
<div class="input-group mb-3">
<select class="form-control" name="jamtam" required>
<option value="1">1</option>
<option value="3">3</option>
<option value="6">6</option>
<option value="12">12</option>
<option value="24">24</option>
<option value="36">36</option>
</select>
<span class="input-group-text" id="basic-addon2">Jam Terakhir Pesan Yang GAGAL Terkirim</span>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<input type="submit" name="kirimulang" class="btn btn-primary" value="Submit">
</div>
</form>
</div>
</div>
</div>
<?php
// Proses kirim ulang
if (isset($_POST['kirimulang'])) {
try {
$jamtam = (int) $_POST['jamtam'];
$mulaiulang = date('Y-m-d H:i:s', strtotime("$sekarang -$jamtam hours"));
// Update pesan yang gagal
$updatePesan = $pdo->prepare("UPDATE master_pesan SET status = 'PENDING' WHERE status = 'GAGAL' AND api_key = :api_key AND waktu >= :mulaiulang");
$updatePesan->execute([
'api_key' => $pakw['apikey_whatsapp'],
'mulaiulang' => $mulaiulang
]);
// Hitung jumlah pesan yang diupdate
$jumlahPesan = $updatePesan->rowCount();
if ($jumlahPesan > 0) {
sweetAlert("$jumlahPesan pesan berhasil masuk antrian pengiriman ulang", "success");
} else {
sweetAlert("Tidak ada pesan GAGAL yang ditemukan dalam $jamtam jam terakhir", "warning");
}
} catch (PDOException $e) {
sweetAlert("Error: " . $e->getMessage(), "error");
}
}
?>
<!-- END Modal Tambah -->
</div> </div>
</div> </div>
<!-- /.card-header --> <!-- /.card-header -->
@@ -19,6 +92,7 @@
<thead> <thead>
<tr> <tr>
<th>Nama Server</th> <th>Nama Server</th>
<th>Waktu</th>
<th>Nomor</th> <th>Nomor</th>
<th>Pesan</th> <th>Pesan</th>
<th>Url Image</th> <th>Url Image</th>
@@ -40,9 +114,10 @@
echo $sv['nama_server']; echo $sv['nama_server'];
?> ?>
</td> </td>
<td style="max-width: 200px;"><?php echo $paket['waktu']; ?></td>
<td><?php echo $paket['nomor']; ?></td> <td><?php echo $paket['nomor']; ?></td>
<td><?php echo $paket['pesan']; ?></td> <td style="max-width: 300px;"><?php echo $paket['pesan']; ?></td>
<td><?php echo $paket['url_file']; ?></td> <td style="max-width: 200px;"><?php echo $paket['url_file']; ?></td>
<td><?php echo $paket['status']; ?></td> <td><?php echo $paket['status']; ?></td>
<td> <td>
<?php if($paket['status'] == 'GAGAL') { ?> <?php if($paket['status'] == 'GAGAL') { ?>