diff --git a/system/cron.php b/system/cron.php new file mode 100644 index 0000000..ce7f2b5 --- /dev/null +++ b/system/cron.php @@ -0,0 +1,172 @@ +"; +} +echo "PHP Time\t" . date('Y-m-d H:i:s') . "\n"; +$res = ORM::raw_execute('SELECT NOW() AS WAKTU;'); +$statement = ORM::get_last_statement(); +$rows = array(); +while ($row = $statement->fetch(PDO::FETCH_ASSOC)) { + echo "MYSQL Time\t" . $row['WAKTU'] . "\n"; +} + +$_c = $config; + +$textExpired = Lang::getNotifText('expired'); + +// Retrieve routers that are online +$onlineRouters = ORM::for_table('tbl_routers')->where('status', 'online')->find_many(); + +// Convert the ORM result set to a regular array +$onlineRoutersArray = $onlineRouters->as_array(); + +// Extract router names using array_map +$onlineRouterNames = array_map(function($router) { + return $router['name']; +}, $onlineRoutersArray); + +// If no online routers are found, skip processing user recharges +if (empty($onlineRouterNames)) { + echo "No online routers found. Skipping user recharge processing.\n"; + exit; // Skip further processing +} + +echo "Found " . count($onlineRouters) . " online routers.\n"; + +// Retrieve user recharges with status 'on' and expiration less than or equal to today +$d = ORM::for_table('tbl_user_recharges')->where('status', 'on')->where_lte('expiration', date("Y-m-d")) + ->where_in('routers', $onlineRouterNames) // Filter by routers that are online + ->find_many(); + +echo "Found " . count($d) . " user(s) on online routers.\n"; + +run_hook('cronjob'); #HOOK + +foreach ($d as $ds) { + if ($ds['type'] == 'Hotspot') { # HOTSPOT + $date_now = strtotime(date("Y-m-d H:i:s")); + $expiration = strtotime($ds['expiration'] . ' ' . $ds['time']); + echo $ds['expiration'] . " : " . (($isCli) ? $ds['username'] : Lang::maskText($ds['username'])); + if ($date_now >= $expiration) { + echo " : EXPIRED \r\n"; + $u = ORM::for_table('tbl_user_recharges')->where('id', $ds['id'])->find_one(); + $c = ORM::for_table('tbl_customers')->where('id', $ds['customer_id'])->find_one(); + $m = Mikrotik::info($ds['routers']); + + // Now no need to check the router status again because the query already filters offline routers + $p = ORM::for_table('tbl_plans')->where('id', $u['plan_id'])->find_one(); + if ($p['is_radius']) { + if (empty($p['pool_expired'])) { + print_r(Radius::customerDeactivate($c['username'])); + } else { + Radius::upsertCustomerAttr($c['username'], 'Framed-Pool', $p['pool_expired'], ':='); + print_r(Radius::disconnectCustomer($c['username'])); + } + } else { + $client = Mikrotik::getClient($m['ip_address'], $m['username'], $m['password']); + if (!empty($p['pool_expired'])) { + Mikrotik::setHotspotUserPackage($client, $c['username'], 'EXPIRED NUXBILL ' . $p['pool_expired']); + } else { + Mikrotik::removeHotspotUser($client, $c['username']); + } + Mikrotik::removeHotspotActiveUser($client, $c['username']); + } + echo Message::sendPackageNotification($c, $u['namebp'], $p['price'], $textExpired, $config['user_notification_expired']) . "\n"; + // Update database user with status off + $u->status = 'off'; + $u->save(); + + // Autoreneewal from deposit + if ($config['enable_balance'] == 'yes' && $c['auto_renewal']) { + list($bills, $add_cost) = User::getBills($ds['customer_id']); + if ($add_cost > 0) { + if (!empty($add_cost)) { + $p['price'] += $add_cost; + } + } + if ($p && $p['enabled'] && $c['balance'] >= $p['price']) { + if (Package::rechargeUser($ds['customer_id'], $ds['routers'], $p['id'], 'Customer', 'Balance')) { + // if success, then get the balance + Balance::min($ds['customer_id'], $p['price']); + echo "plan enabled: $p[enabled] | User balance: $c[balance] | price $p[price]\n"; + echo "auto renewall Success\n"; + } else { + echo "plan enabled: $p[enabled] | User balance: $c[balance] | price $p[price]\n"; + echo "auto renewall Failed\n"; + Message::sendTelegram("FAILED RENEWAL #cron\n\n#u$c[username] #buy #Hotspot \n" . $p['name_plan'] . + "\nRouter: " . $p['routers'] . + "\nPrice: " . $p['price']); + } + } else { + echo "no renewall | plan enabled: $p[enabled] | User balance: $c[balance] | price $p[price]\n"; + } + } else { + echo "no renewall | balance $config[enable_balance] auto_renewal $c[auto_renewal]\n"; + } + } else + echo " : ACTIVE \r\n"; + } else { # PPPOE + $date_now = strtotime(date("Y-m-d H:i:s")); + $expiration = strtotime($ds['expiration'] . ' ' . $ds['time']); + echo $ds['expiration'] . " : " . (($isCli) ? $ds['username'] : Lang::maskText($ds['username'])); + if ($date_now >= $expiration) { + echo " : EXPIRED \r\n"; + $u = ORM::for_table('tbl_user_recharges')->where('id', $ds['id'])->find_one(); + $c = ORM::for_table('tbl_customers')->where('id', $ds['customer_id'])->find_one(); + $m = ORM::for_table('tbl_routers')->where('name', $ds['routers'])->find_one(); + + // No need to check router status here, as we've already filtered offline routers + $p = ORM::for_table('tbl_plans')->where('id', $u['plan_id'])->find_one(); + if ($p['is_radius']) { + if (empty($p['pool_expired'])) { + print_r(Radius::customerDeactivate($c['username'])); + } else { + Radius::upsertCustomerAttr($c['username'], 'Framed-Pool', $p['pool_expired'], ':='); + print_r(Radius::disconnectCustomer($c['username'])); + } + } else { + $client = Mikrotik::getClient($m['ip_address'], $m['username'], $m['password']); + if (!empty($p['pool_expired'])) { + Mikrotik::setPpoeUserPlan($client, $c['username'], 'EXPIRED NUXBILL ' . $p['pool_expired']); + } else { + Mikrotik::removePpoeUser($client, $c['username']); + } + Mikrotik::removePpoeActive($client, $c['username']); + } + echo Message::sendPackageNotification($c, $u['namebp'], $p['price'], $textExpired, $config['user_notification_expired']) . "\n"; + + // Update database user with status off + $u->status = 'off'; + $u->save(); + + // Autoreneewal from deposit + if ($config['enable_balance'] == 'yes' && $c['auto_renewal']) { + list($bills, $add_cost) = User::getBills($ds['customer_id']); + if ($add_cost > 0) { + if (!empty($add_cost)) { + $p['price'] += $add_cost; + } + } + if ($p && $p['enabled'] && $c['balance'] >= $p['price']) { + if (Package::rechargeUser($ds['customer_id'], $ds['routers'], $p['id'], 'Customer', 'Balance')) { + // if success, then get the balance + Balance::min($ds['customer_id'], $p['price']); + echo "plan enabled: $p[enabled] | User balance: $c[balance] | price $p[price]\n"; + echo "auto renewall Success\n"; + } else { + echo "plan enabled: $p[enabled] | User balance: $c[balance] | price $p[price]\n"; + echo "auto renewall Failed\n"; + Message::sendTelegram("FAILED RENEWAL #cron\n\n#u$c[username] #buy #PPPOE \n" . $p['name_plan'] . + "\nRouter: " . $p['routers'] . + "\nPrice: " . $p['price']); + } + } + } + } else + echo " : ACTIVE \r\n"; + } +} diff --git a/system/cron_reminder.php b/system/cron_reminder.php new file mode 100644 index 0000000..85b1a07 --- /dev/null +++ b/system/cron_reminder.php @@ -0,0 +1,60 @@ +"; +} + +$d = ORM::for_table('tbl_user_recharges')->where('status', 'on')->find_many(); + +run_hook('cronjob_reminder'); #HOOK + + +echo "PHP Time\t" . date('Y-m-d H:i:s') . "\n"; +$res = ORM::raw_execute('SELECT NOW() AS WAKTU;'); +$statement = ORM::get_last_statement(); +$rows = array(); +while ($row = $statement->fetch(PDO::FETCH_ASSOC)) { + echo "MYSQL Time\t" . $row['WAKTU'] . "\n"; +} + + +$day7 = date('Y-m-d', strtotime("+7 day")); +$day3 = date('Y-m-d', strtotime("+3 day")); +$day1 = date('Y-m-d', strtotime("+1 day")); +print_r([$day1, $day3, $day7]); +foreach ($d as $ds) { + if (in_array($ds['expiration'], [$day1, $day3, $day7])) { + $u = ORM::for_table('tbl_user_recharges')->where('id', $ds['id'])->find_one(); + $p = ORM::for_table('tbl_plans')->where('id', $u['plan_id'])->find_one(); + $c = ORM::for_table('tbl_customers')->where('id', $ds['customer_id'])->find_one(); + if ($p['validity_unit'] == 'Period') { + // Postpaid price from field + $add_inv = User::getAttribute("Invoice", $ds['customer_id']); + if (empty ($add_inv) or $add_inv == 0) { + $price = $p['price']; + } else { + $price = $add_inv; + } + } else { + $price = $p['price']; + } + if ($ds['expiration'] == $day7) { + echo Message::sendPackageNotification($c, $p['name_plan'], $price, Lang::getNotifText('reminder_7_day'), $config['user_notification_reminder']) . "\n"; + } else if ($ds['expiration'] == $day3) { + echo Message::sendPackageNotification($c, $p['name_plan'], $price, Lang::getNotifText('reminder_3_day'), $config['user_notification_reminder']) . "\n"; + } else if ($ds['expiration'] == $day1) { + echo Message::sendPackageNotification($c, $p['name_plan'], $price, Lang::getNotifText('reminder_1_day'), $config['user_notification_reminder']) . "\n"; + } + } +} \ No newline at end of file diff --git a/system/error_log b/system/error_log new file mode 100644 index 0000000..ac38513 --- /dev/null +++ b/system/error_log @@ -0,0 +1,166 @@ +[05-Jul-2024 03:20:03 UTC] Alloworigins called +[05-Jul-2024 03:20:03 UTC] Type parameter missing +[05-Jul-2024 03:25:02 UTC] Alloworigins called +[05-Jul-2024 03:25:02 UTC] Type parameter missing +[05-Jul-2024 11:36:03 Africa/Nairobi] PHP Fatal error: Uncaught PEAR2\Net\Transmitter\SocketException: stream_socket_client(): Unable to connect to tcp://us.labkom.us:6529 (Connection timed out) in /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/Transmitter/TcpClient.php:225 +Stack trace: +#0 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/Transmitter/Stream.php(145): PEAR2\Net\Transmitter\TcpClient->createException('stream_socket_c...', 0) +#1 [internal function]: PEAR2\Net\Transmitter\Stream->handleError(2, 'stream_socket_c...', '/home/codevibe/...', 159) +#2 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/Transmitter/TcpClient.php(159): stream_socket_client('tcp://us.labkom...', 0, '', '60', 4, Resource id #10) +#3 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Communicator.php(160): PEAR2\Net\Transmitter\TcpClient->__construct('us.labkom.us', '6529', false, '60', 'admin/11', '', Resource id #10) +#4 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Client.php(162): PEAR2\Net\RouterOS\Communicator->__construct('us.labkom.us', '6529', false, NULL, 'admin/11', '', NULL) +#5 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/Mikrotik.php(24): PEAR2\Net\RouterOS\Client->__construct('us.labkom.us', 'admin', '11', '6529') +#6 /home/codevibe/kejos.codevibeisp.co.ke/system/cron.php(45): Mikrotik::getClient('us.labkom.us:65...', 'admin', '11') +#7 {main} + +Next PEAR2\Net\Transmitter\SocketException: Failed to connect with socket. in /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/Transmitter/TcpClient.php:225 +Stack trace: +#0 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/Transmitter/TcpClient.php(178): PEAR2\Net\Transmitter\TcpClient->createException('Failed to conne...', 8, Object(PEAR2\Net\Transmitter\SocketException)) +#1 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Communicator.php(160): PEAR2\Net\Transmitter\TcpClient->__construct('us.labkom.us', '6529', false, '60', 'admin/11', '', Resource id #10) +#2 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Client.php(162): PEAR2\Net\RouterOS\Communicator->__construct('us.labkom.us', '6529', false, NULL, 'admin/11', '', NULL) +#3 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/Mikrotik.php(24): PEAR2\Net\RouterOS\Client->__construct('us.labkom.us', 'admin', '11', '6529') +#4 /home/codevibe/kejos.codevibeisp.co.ke/system/cron.php(45): Mikrotik::getClient('us.labkom.us:65...', 'admin', '11') +#5 {main} + +Next PEAR2\Net\RouterOS\SocketException: Error connecting to RouterOS in /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Communicator.php:169 +Stack trace: +#0 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Client.php(162): PEAR2\Net\RouterOS\Communicator->__construct('us.labkom.us', '6529', false, NULL, 'admin/11', '', NULL) +#1 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/Mikrotik.php(24): PEAR2\Net\RouterOS\Client->__construct('us.labkom.us', 'admin', '11', '6529') +#2 /home/codevibe/kejos.codevibeisp.co.ke/system/cron.php(45): Mikrotik::getClient('us.labkom.us:65...', 'admin', '11') +#3 {main} + thrown in /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Communicator.php on line 169 +[05-Jul-2024 11:40:04 Africa/Nairobi] PHP Fatal error: Uncaught PEAR2\Net\Transmitter\SocketException: stream_socket_client(): Unable to connect to tcp://us.labkom.us:6529 (Network is unreachable) in /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/Transmitter/TcpClient.php:225 +Stack trace: +#0 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/Transmitter/Stream.php(145): PEAR2\Net\Transmitter\TcpClient->createException('stream_socket_c...', 0) +#1 [internal function]: PEAR2\Net\Transmitter\Stream->handleError(2, 'stream_socket_c...', '/home/codevibe/...', 159) +#2 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/Transmitter/TcpClient.php(159): stream_socket_client('tcp://us.labkom...', 0, '', '60', 4, Resource id #10) +#3 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Communicator.php(160): PEAR2\Net\Transmitter\TcpClient->__construct('us.labkom.us', '6529', false, '60', 'admin/11', '', Resource id #10) +#4 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Client.php(162): PEAR2\Net\RouterOS\Communicator->__construct('us.labkom.us', '6529', false, NULL, 'admin/11', '', NULL) +#5 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/Mikrotik.php(24): PEAR2\Net\RouterOS\Client->__construct('us.labkom.us', 'admin', '11', '6529') +#6 /home/codevibe/kejos.codevibeisp.co.ke/system/cron.php(45): Mikrotik::getClient('us.labkom.us:65...', 'admin', '11') +#7 {main} + +Next PEAR2\Net\Transmitter\SocketException: Failed to connect with socket. in /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/Transmitter/TcpClient.php:225 +Stack trace: +#0 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/Transmitter/TcpClient.php(178): PEAR2\Net\Transmitter\TcpClient->createException('Failed to conne...', 8, Object(PEAR2\Net\Transmitter\SocketException)) +#1 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Communicator.php(160): PEAR2\Net\Transmitter\TcpClient->__construct('us.labkom.us', '6529', false, '60', 'admin/11', '', Resource id #10) +#2 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Client.php(162): PEAR2\Net\RouterOS\Communicator->__construct('us.labkom.us', '6529', false, NULL, 'admin/11', '', NULL) +#3 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/Mikrotik.php(24): PEAR2\Net\RouterOS\Client->__construct('us.labkom.us', 'admin', '11', '6529') +#4 /home/codevibe/kejos.codevibeisp.co.ke/system/cron.php(45): Mikrotik::getClient('us.labkom.us:65...', 'admin', '11') +#5 {main} + +Next PEAR2\Net\RouterOS\SocketException: Error connecting to RouterOS in /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Communicator.php:169 +Stack trace: +#0 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Client.php(162): PEAR2\Net\RouterOS\Communicator->__construct('us.labkom.us', '6529', false, NULL, 'admin/11', '', NULL) +#1 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/Mikrotik.php(24): PEAR2\Net\RouterOS\Client->__construct('us.labkom.us', 'admin', '11', '6529') +#2 /home/codevibe/kejos.codevibeisp.co.ke/system/cron.php(45): Mikrotik::getClient('us.labkom.us:65...', 'admin', '11') +#3 {main} + thrown in /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Communicator.php on line 169 +[05-Jul-2024 11:46:02 Africa/Nairobi] PHP Fatal error: Uncaught PEAR2\Net\Transmitter\SocketException: stream_socket_client(): Unable to connect to tcp://us.labkom.us:6529 (Connection timed out) in /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/Transmitter/TcpClient.php:225 +Stack trace: +#0 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/Transmitter/Stream.php(145): PEAR2\Net\Transmitter\TcpClient->createException('stream_socket_c...', 0) +#1 [internal function]: PEAR2\Net\Transmitter\Stream->handleError(2, 'stream_socket_c...', '/home/codevibe/...', 159) +#2 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/Transmitter/TcpClient.php(159): stream_socket_client('tcp://us.labkom...', 0, '', '60', 4, Resource id #10) +#3 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Communicator.php(160): PEAR2\Net\Transmitter\TcpClient->__construct('us.labkom.us', '6529', false, '60', 'admin/11', '', Resource id #10) +#4 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Client.php(162): PEAR2\Net\RouterOS\Communicator->__construct('us.labkom.us', '6529', false, NULL, 'admin/11', '', NULL) +#5 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/Mikrotik.php(24): PEAR2\Net\RouterOS\Client->__construct('us.labkom.us', 'admin', '11', '6529') +#6 /home/codevibe/kejos.codevibeisp.co.ke/system/cron.php(45): Mikrotik::getClient('us.labkom.us:65...', 'admin', '11') +#7 {main} + +Next PEAR2\Net\Transmitter\SocketException: Failed to connect with socket. in /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/Transmitter/TcpClient.php:225 +Stack trace: +#0 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/Transmitter/TcpClient.php(178): PEAR2\Net\Transmitter\TcpClient->createException('Failed to conne...', 8, Object(PEAR2\Net\Transmitter\SocketException)) +#1 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Communicator.php(160): PEAR2\Net\Transmitter\TcpClient->__construct('us.labkom.us', '6529', false, '60', 'admin/11', '', Resource id #10) +#2 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Client.php(162): PEAR2\Net\RouterOS\Communicator->__construct('us.labkom.us', '6529', false, NULL, 'admin/11', '', NULL) +#3 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/Mikrotik.php(24): PEAR2\Net\RouterOS\Client->__construct('us.labkom.us', 'admin', '11', '6529') +#4 /home/codevibe/kejos.codevibeisp.co.ke/system/cron.php(45): Mikrotik::getClient('us.labkom.us:65...', 'admin', '11') +#5 {main} + +Next PEAR2\Net\RouterOS\SocketException: Error connecting to RouterOS in /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Communicator.php:169 +Stack trace: +#0 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Client.php(162): PEAR2\Net\RouterOS\Communicator->__construct('us.labkom.us', '6529', false, NULL, 'admin/11', '', NULL) +#1 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/Mikrotik.php(24): PEAR2\Net\RouterOS\Client->__construct('us.labkom.us', 'admin', '11', '6529') +#2 /home/codevibe/kejos.codevibeisp.co.ke/system/cron.php(45): Mikrotik::getClient('us.labkom.us:65...', 'admin', '11') +#3 {main} + thrown in /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Communicator.php on line 169 +[05-Jul-2024 11:51:03 Africa/Nairobi] PHP Fatal error: Uncaught PEAR2\Net\Transmitter\SocketException: stream_socket_client(): Unable to connect to tcp://us.labkom.us:6529 (Connection timed out) in /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/Transmitter/TcpClient.php:225 +Stack trace: +#0 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/Transmitter/Stream.php(145): PEAR2\Net\Transmitter\TcpClient->createException('stream_socket_c...', 0) +#1 [internal function]: PEAR2\Net\Transmitter\Stream->handleError(2, 'stream_socket_c...', '/home/codevibe/...', 159) +#2 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/Transmitter/TcpClient.php(159): stream_socket_client('tcp://us.labkom...', 0, '', '60', 4, Resource id #10) +#3 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Communicator.php(160): PEAR2\Net\Transmitter\TcpClient->__construct('us.labkom.us', '6529', false, '60', 'admin/11', '', Resource id #10) +#4 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Client.php(162): PEAR2\Net\RouterOS\Communicator->__construct('us.labkom.us', '6529', false, NULL, 'admin/11', '', NULL) +#5 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/Mikrotik.php(24): PEAR2\Net\RouterOS\Client->__construct('us.labkom.us', 'admin', '11', '6529') +#6 /home/codevibe/kejos.codevibeisp.co.ke/system/cron.php(45): Mikrotik::getClient('us.labkom.us:65...', 'admin', '11') +#7 {main} + +Next PEAR2\Net\Transmitter\SocketException: Failed to connect with socket. in /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/Transmitter/TcpClient.php:225 +Stack trace: +#0 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/Transmitter/TcpClient.php(178): PEAR2\Net\Transmitter\TcpClient->createException('Failed to conne...', 8, Object(PEAR2\Net\Transmitter\SocketException)) +#1 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Communicator.php(160): PEAR2\Net\Transmitter\TcpClient->__construct('us.labkom.us', '6529', false, '60', 'admin/11', '', Resource id #10) +#2 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Client.php(162): PEAR2\Net\RouterOS\Communicator->__construct('us.labkom.us', '6529', false, NULL, 'admin/11', '', NULL) +#3 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/Mikrotik.php(24): PEAR2\Net\RouterOS\Client->__construct('us.labkom.us', 'admin', '11', '6529') +#4 /home/codevibe/kejos.codevibeisp.co.ke/system/cron.php(45): Mikrotik::getClient('us.labkom.us:65...', 'admin', '11') +#5 {main} + +Next PEAR2\Net\RouterOS\SocketException: Error connecting to RouterOS in /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Communicator.php:169 +Stack trace: +#0 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Client.php(162): PEAR2\Net\RouterOS\Communicator->__construct('us.labkom.us', '6529', false, NULL, 'admin/11', '', NULL) +#1 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/Mikrotik.php(24): PEAR2\Net\RouterOS\Client->__construct('us.labkom.us', 'admin', '11', '6529') +#2 /home/codevibe/kejos.codevibeisp.co.ke/system/cron.php(45): Mikrotik::getClient('us.labkom.us:65...', 'admin', '11') +#3 {main} + thrown in /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Communicator.php on line 169 +[06-Jul-2024 23:26:04 Africa/Nairobi] PHP Fatal error: Uncaught PEAR2\Net\Transmitter\SocketException: stream_socket_client(): Unable to connect to tcp://us.labkom.us:6529 (Connection timed out) in /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/Transmitter/TcpClient.php:225 +Stack trace: +#0 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/Transmitter/Stream.php(145): PEAR2\Net\Transmitter\TcpClient->createException('stream_socket_c...', 0) +#1 [internal function]: PEAR2\Net\Transmitter\Stream->handleError(2, 'stream_socket_c...', '/home/codevibe/...', 159) +#2 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/Transmitter/TcpClient.php(159): stream_socket_client('tcp://us.labkom...', 0, '', '60', 4, Resource id #10) +#3 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Communicator.php(160): PEAR2\Net\Transmitter\TcpClient->__construct('us.labkom.us', '6529', false, '60', 'admin/11', '', Resource id #10) +#4 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Client.php(162): PEAR2\Net\RouterOS\Communicator->__construct('us.labkom.us', '6529', false, NULL, 'admin/11', '', NULL) +#5 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/Mikrotik.php(24): PEAR2\Net\RouterOS\Client->__construct('us.labkom.us', 'admin', '11', '6529') +#6 /home/codevibe/kejos.codevibeisp.co.ke/system/cron.php(45): Mikrotik::getClient('us.labkom.us:65...', 'admin', '11') +#7 {main} + +Next PEAR2\Net\Transmitter\SocketException: Failed to connect with socket. in /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/Transmitter/TcpClient.php:225 +Stack trace: +#0 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/Transmitter/TcpClient.php(178): PEAR2\Net\Transmitter\TcpClient->createException('Failed to conne...', 8, Object(PEAR2\Net\Transmitter\SocketException)) +#1 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Communicator.php(160): PEAR2\Net\Transmitter\TcpClient->__construct('us.labkom.us', '6529', false, '60', 'admin/11', '', Resource id #10) +#2 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Client.php(162): PEAR2\Net\RouterOS\Communicator->__construct('us.labkom.us', '6529', false, NULL, 'admin/11', '', NULL) +#3 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/Mikrotik.php(24): PEAR2\Net\RouterOS\Client->__construct('us.labkom.us', 'admin', '11', '6529') +#4 /home/codevibe/kejos.codevibeisp.co.ke/system/cron.php(45): Mikrotik::getClient('us.labkom.us:65...', 'admin', '11') +#5 {main} + +Next PEAR2\Net\RouterOS\SocketException: Error connecting to RouterOS in /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Communicator.php:169 +Stack trace: +#0 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Client.php(162): PEAR2\Net\RouterOS\Communicator->__construct('us.labkom.us', '6529', false, NULL, 'admin/11', '', NULL) +#1 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/Mikrotik.php(24): PEAR2\Net\RouterOS\Client->__construct('us.labkom.us', 'admin', '11', '6529') +#2 /home/codevibe/kejos.codevibeisp.co.ke/system/cron.php(45): Mikrotik::getClient('us.labkom.us:65...', 'admin', '11') +#3 {main} + thrown in /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Communicator.php on line 169 +[06-Jul-2024 23:31:04 Africa/Nairobi] PHP Fatal error: Uncaught PEAR2\Net\Transmitter\SocketException: stream_socket_client(): Unable to connect to tcp://us.labkom.us:6529 (Connection timed out) in /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/Transmitter/TcpClient.php:225 +Stack trace: +#0 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/Transmitter/Stream.php(145): PEAR2\Net\Transmitter\TcpClient->createException('stream_socket_c...', 0) +#1 [internal function]: PEAR2\Net\Transmitter\Stream->handleError(2, 'stream_socket_c...', '/home/codevibe/...', 159) +#2 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/Transmitter/TcpClient.php(159): stream_socket_client('tcp://us.labkom...', 0, '', '60', 4, Resource id #10) +#3 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Communicator.php(160): PEAR2\Net\Transmitter\TcpClient->__construct('us.labkom.us', '6529', false, '60', 'admin/11', '', Resource id #10) +#4 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Client.php(162): PEAR2\Net\RouterOS\Communicator->__construct('us.labkom.us', '6529', false, NULL, 'admin/11', '', NULL) +#5 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/Mikrotik.php(24): PEAR2\Net\RouterOS\Client->__construct('us.labkom.us', 'admin', '11', '6529') +#6 /home/codevibe/kejos.codevibeisp.co.ke/system/cron.php(45): Mikrotik::getClient('us.labkom.us:65...', 'admin', '11') +#7 {main} + +Next PEAR2\Net\Transmitter\SocketException: Failed to connect with socket. in /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/Transmitter/TcpClient.php:225 +Stack trace: +#0 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/Transmitter/TcpClient.php(178): PEAR2\Net\Transmitter\TcpClient->createException('Failed to conne...', 8, Object(PEAR2\Net\Transmitter\SocketException)) +#1 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Communicator.php(160): PEAR2\Net\Transmitter\TcpClient->__construct('us.labkom.us', '6529', false, '60', 'admin/11', '', Resource id #10) +#2 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Client.php(162): PEAR2\Net\RouterOS\Communicator->__construct('us.labkom.us', '6529', false, NULL, 'admin/11', '', NULL) +#3 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/Mikrotik.php(24): PEAR2\Net\RouterOS\Client->__construct('us.labkom.us', 'admin', '11', '6529') +#4 /home/codevibe/kejos.codevibeisp.co.ke/system/cron.php(45): Mikrotik::getClient('us.labkom.us:65...', 'admin', '11') +#5 {main} + +Next PEAR2\Net\RouterOS\SocketException: Error connecting to RouterOS in /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Communicator.php:169 +Stack trace: +#0 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Client.php(162): PEAR2\Net\RouterOS\Communicator->__construct('us.labkom.us', '6529', false, NULL, 'admin/11', '', NULL) +#1 /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/Mikrotik.php(24): PEAR2\Net\RouterOS\Client->__construct('us.labkom.us', 'admin', '11', '6529') +#2 /home/codevibe/kejos.codevibeisp.co.ke/system/cron.php(45): Mikrotik::getClient('us.labkom.us:65...', 'admin', '11') +#3 {main} + thrown in /home/codevibe/kejos.codevibeisp.co.ke/system/autoload/PEAR2/Net/RouterOS/Communicator.php on line 169 diff --git a/system/get_resources.php b/system/get_resources.php new file mode 100644 index 0000000..16f2dc2 --- /dev/null +++ b/system/get_resources.php @@ -0,0 +1,58 @@ +where('enabled', '1')->find_one($routerId); + + if (!$mikrotik) { + // Handle case where router is not found + return null; + } + + try { + $client = Mikrotik::getClient($mikrotik['ip_address'], $mikrotik['username'], $mikrotik['password']); + + $health = $client->sendSync(new RouterOS\Request('/system health print')); + $res = $client->sendSync(new RouterOS\Request('/system resource print')); + + $resourceData = $res->getAllOfType(RouterOS\Response::TYPE_DATA)[0]; + $uptime = $resourceData->getProperty('uptime'); + $freeMemory = $resourceData->getProperty('free-memory'); + $totalMemory = $resourceData->getProperty('total-memory'); + $cpuLoad = $resourceData->getProperty('cpu-load'); + + return [ + 'uptime' => $uptime, + 'freeMemory' => mikrotik_formatSize($freeMemory), + 'totalMemory' => mikrotik_formatSize($totalMemory), + 'cpuLoad' => $cpuLoad . '%' + ]; + } catch (Exception $e) { + // Handle exceptions, e.g., connection errors + return null; + } +} + +// Function to round the value and append the appropriate unit +function mikrotik_formatSize($size) +{ + $units = ['B', 'KB', 'MB', 'GB']; + $unitIndex = 0; + while ($size >= 1024 && $unitIndex < count($units) - 1) { + $size /= 1024; + $unitIndex++; + } + return round($size, 2) . ' ' . $units[$unitIndex]; +} + +if (isset($_GET['router_id'])) { + $routerId = $_GET['router_id']; + $resources = mikrotik_get_resources($routerId); + echo json_encode($resources); +} \ No newline at end of file diff --git a/system/index.html b/system/index.html new file mode 100644 index 0000000..9757970 --- /dev/null +++ b/system/index.html @@ -0,0 +1,8 @@ + + + 403 Forbidden + + +

Directory access is forbidden.

+ + \ No newline at end of file