2017-03-11 02:51:06 +07:00
< ? php
2023-03-06 14:49:44 +07:00
2024-02-19 14:24:34 +07:00
include " ../init.php " ;
2024-04-19 11:21:44 +07:00
$isCli = true ;
if ( php_sapi_name () !== 'cli' ) {
$isCli = false ;
2023-09-07 09:35:00 +07:00
echo " <pre> " ;
}
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 ();
2024-04-19 11:21:44 +07:00
$rows = array ();
2023-09-07 09:35:00 +07:00
while ( $row = $statement -> fetch ( PDO :: FETCH_ASSOC )) {
echo " MYSQL Time \t " . $row [ 'WAKTU' ] . " \n " ;
}
2024-04-19 11:21:44 +07:00
$_c = $config ;
2023-08-15 10:17:28 +07:00
2024-04-08 21:21:54 +07:00
2024-04-19 11:21:44 +07:00
$textExpired = Lang :: getNotifText ( 'expired' );
2024-04-08 21:21:54 +07:00
2024-04-19 11:21:44 +07:00
$d = ORM :: for_table ( 'tbl_user_recharges' ) -> where ( 'status' , 'on' ) -> where_lte ( 'expiration' , date ( " Y-m-d " )) -> find_many ();
echo " Found " . count ( $d ) . " user(s) \n " ;
2024-06-21 16:05:05 +07:00
run_hook ( 'cronjob' ); #HOOK
2024-04-08 21:21:54 +07:00
2024-04-19 11:21:44 +07:00
foreach ( $d as $ds ) {
2024-06-04 17:14:04 +07:00
$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 ();
$p = ORM :: for_table ( 'tbl_plans' ) -> where ( 'id' , $u [ 'plan_id' ]) -> find_one ();
2024-06-05 17:19:24 +07:00
$dvc = Package :: getDevice ( $p );
2024-08-27 08:17:28 +01:00
if ( $_app_stage != 'demo' ) {
2024-06-20 14:16:09 +07:00
if ( file_exists ( $dvc )) {
require_once $dvc ;
( new $p [ 'device' ]) -> remove_customer ( $c , $p );
} else {
echo " Cron error Devices $p[device] not found, cannot disconnect $c[username] " ;
Message :: sendTelegram ( " Cron error Devices $p[device] not found, cannot disconnect $c[username] " );
}
2024-06-04 17:14:04 +07:00
}
echo Message :: sendPackageNotification ( $c , $u [ 'namebp' ], $p [ 'price' ], $textExpired , $config [ 'user_notification_expired' ]) . " \n " ;
//update database user dengan status off
$u -> status = 'off' ;
$u -> save ();
2024-04-08 21:21:54 +07:00
2024-06-04 17:14:04 +07:00
// autorenewal 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 ;
2023-10-16 10:15:45 +07:00
}
2024-04-19 11:21:44 +07:00
}
2024-06-21 16:05:05 +07:00
if ( $p && $c [ 'balance' ] >= $p [ 'price' ]) {
2024-06-04 17:14:04 +07:00
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 " ;
2023-10-04 15:07:38 +07:00
} else {
2024-06-04 17:14:04 +07:00
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' ] .
" \n Router: " . $p [ 'routers' ] .
" \n Price: " . $p [ 'price' ]);
2023-09-06 10:02:31 +07:00
}
2024-04-19 11:21:44 +07:00
} else {
2024-06-04 17:14:04 +07:00
echo " no renewall | plan enabled: $p[enabled] | User balance: $c[balance] | price $p[price] \n " ;
2023-08-15 10:17:28 +07:00
}
2024-06-04 17:14:04 +07:00
} else {
echo " no renewall | balance $config[enable_balance] auto_renewal $c[auto_renewal] \n " ;
}
2024-06-05 17:19:24 +07:00
} else {
2024-06-04 17:14:04 +07:00
echo " : ACTIVE \r \n " ;
2023-03-06 14:49:44 +07:00
}
2024-05-07 04:55:20 +07:00
}
2024-08-27 00:26:52 +01:00
2024-08-27 08:17:28 +01:00
if ( $config [ 'router_check' ]) {
$routers = ORM :: for_table ( 'tbl_routers' ) -> find_many ();
if ( ! $routers ) {
echo " No routers found in the database. \n " ;
exit ;
}
2024-08-27 00:26:52 +01:00
2024-08-27 08:17:28 +01:00
foreach ( $routers as $router ) {
[ $ip , $port ] = explode ( ':' , $router -> ip_address );
$isOnline = false ;
2024-08-27 00:26:52 +01:00
2024-08-27 08:17:28 +01:00
try {
$timeout = 5 ;
if ( is_callable ( 'fsockopen' ) && false === stripos ( ini_get ( 'disable_functions' ), 'fsockopen' )) {
$fsock = @ fsockopen ( $ip , $port , $errno , $errstr , $timeout );
if ( $fsock ) {
fclose ( $fsock );
$isOnline = true ;
} else {
throw new Exception ( " Unable to connect to $ip on port $port using fsockopen: $errstr ( $errno ) " );
}
} elseif ( is_callable ( 'stream_socket_client' ) && false === stripos ( ini_get ( 'disable_functions' ), 'stream_socket_client' )) {
$connection = @ stream_socket_client ( " $ip : $port " , $errno , $errstr , $timeout );
if ( $connection ) {
fclose ( $connection );
$isOnline = true ;
} else {
throw new Exception ( " Unable to connect to $ip on port $port using stream_socket_client: $errstr ( $errno ) " );
}
2024-08-27 00:26:52 +01:00
} else {
2024-08-27 08:17:28 +01:00
throw new Exception ( " Neither fsockopen nor stream_socket_client are enabled on the server. " );
2024-08-27 00:26:52 +01:00
}
2024-08-27 08:17:28 +01:00
} catch ( Exception $e ) {
_log ( $e -> getMessage ());
$adminEmail = $config [ 'mail_from' ];
$subject = " Router Monitoring Error Alert " ;
$message = " An error occurred during the monitoring of router $ip : " . ( string ) $e -> getMessage ();
Message :: SendEmail ( $adminEmail , $subject , $message );
sendTelegram ( $message );
}
if ( $isOnline ) {
$router -> last_seen = date ( 'Y-m-d H:i:s' );
$router -> status = 'Online' ;
2024-08-27 00:26:52 +01:00
} else {
2024-08-27 08:17:28 +01:00
$router -> status = 'Offline' ;
$adminEmail = $config [ 'mail_from' ];
$subject = " Router Offline Alert " ;
$message = " Dear Administrator, \n The router with Name: { $router -> name } and IP: { $router -> ip_address } appears to be offline. \n The Router was last seen online on: { $router -> last_seen } \n Please check the router's status and take appropriate action. \n \n Best regards, \n Router Monitoring System " ;
Message :: SendEmail ( $adminEmail , $subject , $message );
sendTelegram ( $message );
2024-08-27 00:26:52 +01:00
}
2024-08-27 08:17:28 +01:00
$router -> save ();
2024-08-27 00:26:52 +01:00
}
2024-08-27 08:17:28 +01:00
if ( $isCli ) {
echo " Cronjob finished \n " ;
2024-08-27 00:26:52 +01:00
} else {
2024-08-27 08:17:28 +01:00
echo " </pre> " ;
2024-08-27 00:26:52 +01:00
}
}