2023-03-04 23:45:46 +00:00
< ? php
2023-11-12 18:12:42 +00:00
if ( ! DEFINED ( 'EGP' ))
2023-12-23 01:50:14 +00:00
exit ( header ( 'Refresh: 0; URL=http://' . $_SERVER [ 'HTTP_HOST' ] . '/404' ));
2023-05-05 01:17:19 +00:00
2023-11-12 18:12:42 +00:00
class scans
{
private static $process = array (
'cs' => 'hlds_' ,
'cssold' => 'srcds_i686' ,
'css' => 'srcds_' ,
'csgo' => 'srcds_' ,
'samp' => 'samp' ,
'crmp' => 'samp' ,
'mta' => 'mta' ,
'mc' => 'java'
);
2023-05-05 01:17:19 +00:00
2023-11-12 18:12:42 +00:00
public static function resources ( $id )
{
global $cfg , $sql , $mcache ;
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
$nmch = 'ctrl_server_resources_' . $id ;
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
if ( is_array ( $mcache -> get ( $nmch )))
return $mcache -> get ( $nmch );
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
$sql -> query ( 'SELECT `uid`, `unit`, `game`, `slots`, `status`, `online`, `hdd_use` FROM `control_servers` WHERE `id`="' . $id . '" LIMIT 1' );
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
if ( ! $sql -> num ())
return NULL ;
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
$server = $sql -> get ();
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
$resources = array (
'usr' => 0 ,
'cpu' => 0 ,
'ram' => 0 ,
'hdd' => $server [ 'hdd_use' ]
);
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
$sql -> query ( 'SELECT `address`, `passwd`, `ram`, `hdd` FROM `control` WHERE `id`="' . $server [ 'unit' ] . '" LIMIT 1' );
$unit = $sql -> get ();
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
include ( LIB . 'ssh.php' );
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
if ( ! $ssh -> auth ( $unit [ 'passwd' ], $unit [ 'address' ]))
return $resources ;
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
if ( ! in_array ( $server [ 'status' ], array ( 'working' , 'start' , 'restart' , 'change' )))
return $resources ;
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
$resources [ 'usr' ] = ceil ( 100 / $server [ 'slots' ] * $server [ 'online' ]);
$resources [ 'usr' ] = $resources [ 'usr' ] > 100 ? 100 : $resources [ 'usr' ];
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
$cr = explode ( '|' , $ssh -> get ( 'top -u ' . $server [ 'uid' ] . ' -b -n 1 | grep ' . ( scans :: $process [ $server [ 'game' ]]) . ' | sort | tail -1 | awk \'{print $9"|"$10}\'' ));
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
if ( isset ( $cr [ 0 ]))
$resources [ 'cpu' ] = str_replace ( ',' , '.' , $cr [ 0 ]);
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
$resources [ 'cpu' ] = $resources [ 'cpu' ] > 100 ? 100 : round ( $resources [ 'cpu' ]);
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
if ( isset ( $cr [ 1 ]))
$resources [ 'ram' ] = str_replace ( ',' , '.' , $cr [ 1 ]);
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
// ram на сервер
$ram = $server [ 'ram' ] ? $server [ 'ram' ] : $server [ 'slots' ] * $cfg [ 'ram' ][ $server [ 'game' ]];
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
$resources [ 'ram' ] = $unit [ 'ram' ] / 100 * $resources [ 'ram' ] / ( $ram / 100 );
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
$resources [ 'ram' ] = $resources [ 'ram' ] > 100 ? 100 : round ( $resources [ 'ram' ]);
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
$resources [ 'hdd' ] = ceil ( sys :: int ( $ssh -> get ( 'cd /servers/' . $server [ 'uid' ] . ' && du -ms' )) / ( $unit [ 'hdd' ] / 100 ));
$resources [ 'hdd' ] = $resources [ 'hdd' ] > 100 ? 100 : $resources [ 'hdd' ];
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
$sql -> query ( 'UPDATE `control_servers` set `ram_use`="' . $resources [ 'ram' ] . '", `cpu_use`="' . $resources [ 'cpu' ] . '", `hdd_use`="' . $resources [ 'hdd' ] . '" WHERE `id`="' . $id . '" LIMIT 1' );
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
$mcache -> set ( $nmch , $resources , false , $cfg [ 'mcache_server_resources' ]);
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
return $resources ;
}
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
public static function status ( $id )
{
global $start_point , $cfg , $sql , $mcache ;
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
$nmch = 'ctrl_server_status_' . $id ;
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
if ( $mcache -> get ( $nmch ))
return 'mcache -> system_block_operation' ;
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
$mcache -> set ( $nmch , true , false , $cfg [ 'mcache_server_status' ]);
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
$sql -> query ( 'SELECT `uid`, `unit`, `game`, `address`, `status`, `name`, `online`, `players` FROM `control_servers` WHERE `id`="' . $id . '" LIMIT 1' );
$server = $sql -> get ();
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
$sql -> query ( 'SELECT `address`, `passwd` FROM `control` WHERE `id`="' . $server [ 'unit' ] . '" LIMIT 1' );
$unit = $sql -> get ();
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
include ( LIB . 'ssh.php' );
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
if ( ! $ssh -> auth ( $unit [ 'passwd' ], $unit [ 'address' ]))
return 'unit error connect' ;
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
switch ( $server [ 'status' ]) {
case 'working' :
case 'change' :
case 'start' :
case 'restart' :
if ( ! sys :: int ( $ssh -> get ( 'ps aux | grep s_' . $server [ 'uid' ] . ' | grep -v grep | awk \'{print $2}\'' ))) {
$sql -> query ( 'UPDATE `control_servers` set `status`="off", `online`="0", `players`="0" WHERE `id`="' . $id . '" LIMIT 1' );
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
sys :: reset_mcache ( 'ctrl_server_scan_mon_pl_' . $id , $id , array ( 'name' => $server [ 'name' ], 'game' => $server [ 'game' ], 'status' => 'off' , 'online' => 0 , 'players' => '' ));
sys :: reset_mcache ( 'ctrl_server_scan_mon_' . $id , $id , array ( 'name' => $server [ 'name' ], 'game' => $server [ 'game' ], 'status' => 'off' , 'online' => 0 ));
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
return 'server -> working -> off' ;
}
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
break ;
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
case 'off' :
if ( sys :: int ( $ssh -> get ( 'ps aux | grep s_' . $server [ 'uid' ] . ' | grep -v grep | awk \'{print $2}\'' ))) {
$sql -> query ( 'UPDATE `control_servers` set `status`="working" WHERE `id`="' . $id . '" LIMIT 1' );
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
sys :: reset_mcache ( 'ctrl_server_scan_mon_pl_' . $id , $id , array ( 'name' => $server [ 'name' ], 'game' => $server [ 'game' ], 'status' => 'working' , 'online' => $server [ 'online' ], 'players' => $server [ 'players' ]));
sys :: reset_mcache ( 'ctrl_server_scan_mon_' . $id , $id , array ( 'name' => $server [ 'name' ], 'game' => $server [ 'game' ], 'status' => 'working' , 'online' => $server [ 'online' ]));
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
return 'server -> off -> working' ;
}
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
break ;
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
case 'reinstall' :
if ( ! sys :: int ( $ssh -> get ( 'ps aux | grep r_' . $server [ 'uid' ] . ' | grep -v grep | awk \'{print $2}\'' ))) {
$sql -> query ( 'UPDATE `control_servers` set `status`="off" WHERE `id`="' . $id . '" LIMIT 1' );
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
sys :: reset_mcache ( 'ctrl_server_scan_mon_pl_' . $id , $id , array ( 'name' => $server [ 'name' ], 'game' => $server [ 'game' ], 'status' => 'off' , 'online' => 0 , 'players' => '' ));
sys :: reset_mcache ( 'ctrl_server_scan_mon_' . $id , $id , array ( 'name' => $server [ 'name' ], 'game' => $server [ 'game' ], 'status' => 'off' , 'online' => 0 ));
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
return 'server -> reinstall -> end' ;
}
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
break ;
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
case 'update' :
if ( ! sys :: int ( $ssh -> get ( 'ps aux | grep u_' . $server [ 'uid' ] . ' | grep -v grep | awk \'{print $2}\'' ))) {
$sql -> query ( 'UPDATE `control_servers` set `status`="off" WHERE `id`="' . $id . '" LIMIT 1' );
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
sys :: reset_mcache ( 'ctrl_server_scan_mon_pl_' . $id , $id , array ( 'name' => $server [ 'name' ], 'game' => $server [ 'game' ], 'status' => 'off' , 'online' => 0 , 'players' => '' ));
sys :: reset_mcache ( 'ctrl_server_scan_mon_' . $id , $id , array ( 'name' => $server [ 'name' ], 'game' => $server [ 'game' ], 'status' => 'off' , 'online' => 0 ));
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
return 'server -> update -> end' ;
}
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
break ;
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
case 'install' :
if ( ! sys :: int ( $ssh -> get ( 'ps aux | grep i_' . $server [ 'uid' ] . ' | grep -v grep | awk \'{print $2}\'' ))) {
$sql -> query ( 'UPDATE `control_servers` set `status`="off" WHERE `id`="' . $id . '" LIMIT 1' );
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
sys :: reset_mcache ( 'ctrl_server_scan_mon_pl_' . $id , $id , array ( 'name' => $server [ 'name' ], 'game' => $server [ 'game' ], 'status' => 'off' , 'online' => 0 , 'players' => '' ));
sys :: reset_mcache ( 'ctrl_server_scan_mon_' . $id , $id , array ( 'name' => $server [ 'name' ], 'game' => $server [ 'game' ], 'status' => 'off' , 'online' => 0 ));
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
return 'server -> install -> end' ;
}
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
break ;
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
case 'recovery' :
if ( ! sys :: int ( $ssh -> get ( 'ps aux | grep rec_' . $server [ 'uid' ] . ' | grep -v grep | awk \'{print $2}\'' ))) {
$sql -> query ( 'UPDATE `control_servers` set `status`="off" WHERE `id`="' . $id . '" LIMIT 1' );
2023-03-04 23:45:46 +00:00
2023-11-12 18:12:42 +00:00
sys :: reset_mcache ( 'ctrl_server_scan_mon_pl_' . $id , $id , array ( 'name' => $server [ 'name' ], 'game' => $server [ 'game' ], 'status' => 'off' , 'online' => 0 , 'players' => '' ));
sys :: reset_mcache ( 'ctrl_server_scan_mon_' . $id , $id , array ( 'name' => $server [ 'name' ], 'game' => $server [ 'game' ], 'status' => 'off' , 'online' => 0 ));
return 'server -> recovery -> end' ;
}
}
return 'server -> no change -> end scan' ;
}
}
2023-05-05 01:17:19 +00:00
2023-03-04 23:45:46 +00:00
?>