EngineGP/system/library/cron/scan_servers_load.php

96 lines
3.1 KiB
PHP
Raw Normal View History

2023-03-04 23:45:46 +00:00
<?php
2023-11-11 20:56:12 +00:00
if(!DEFINED('EGP'))
exit(header('Refresh: 0; URL=http://'.$_SERVER['SERVER_NAME'].'/404'));
2023-03-04 23:45:46 +00:00
2023-11-11 20:56:12 +00:00
class scan_servers_load extends cron
{
function __construct()
{
global $cfg, $sql, $argv, $start_point;
2023-03-04 23:45:46 +00:00
2023-11-11 20:56:12 +00:00
$servers = $argv;
2023-03-04 23:45:46 +00:00
2023-11-11 20:56:12 +00:00
unset($servers[0], $servers[1], $servers[2]);
2023-03-04 23:45:46 +00:00
2023-11-11 20:56:12 +00:00
$sql->query('SELECT `address` FROM `units` WHERE `id`="'.$servers[4].'" LIMIT 1');
if(!$sql->num())
return NULL;
2023-03-04 23:45:46 +00:00
2023-11-11 20:56:12 +00:00
$unit = $sql->get();
2023-03-04 23:45:46 +00:00
2023-11-11 20:56:12 +00:00
$game = $servers[3];
2023-03-04 23:45:46 +00:00
2023-11-11 20:56:12 +00:00
unset($servers[3], $servers[4]);
2023-03-04 23:45:46 +00:00
2023-11-11 20:56:12 +00:00
$sql->query('SELECT `unit` FROM `servers` WHERE `id`="'.$servers[5].'" LIMIT 1');
$server = $sql->get();
2023-03-04 23:45:46 +00:00
2023-11-11 20:56:12 +00:00
$sql->query('SELECT `address`, `passwd`, `ram` FROM `units` WHERE `id`="'.$server['unit'].'" LIMIT 1');
$unit = $sql->get();
2023-03-04 23:45:46 +00:00
2023-11-11 20:56:12 +00:00
include(LIB.'ssh.php');
2023-03-04 23:45:46 +00:00
2023-11-11 20:56:12 +00:00
// Проверка ssh соедниения пу с локацией
if(!$ssh->auth($unit['passwd'], $unit['address']))
return NULL;
2023-03-04 23:45:46 +00:00
2023-11-11 20:56:12 +00:00
foreach($servers as $id)
{
$sql->query('SELECT `uid`, `slots`, `hdd`, `ram`, `ram_use_max`, `cpu_use_max`, `core_fix`, `core_fix_one` `status` FROM `servers` WHERE `id`="'.$id.'" LIMIT 1');
$server = $sql->get();
2023-03-04 23:45:46 +00:00
2023-11-11 20:56:12 +00:00
if($server['core_fix'] AND $server['core_fix_one'])
continue;
2023-03-04 23:45:46 +00:00
2023-11-11 20:56:12 +00:00
if(!in_array($server['status'], array('working', 'start', 'restart', 'change')))
{
echo 'server#'.$id.' ('.$game.') -> load average: cpu = 0% / ram = 0% (no working)'.PHP_EOL;
2023-03-04 23:45:46 +00:00
2023-11-11 20:56:12 +00:00
continue;
}
2023-03-04 23:45:46 +00:00
2023-11-11 20:56:12 +00:00
$resources = array();
2023-03-04 23:45:46 +00:00
2023-11-11 20:56:12 +00:00
for($n = 0; $n <= 2; $n+=1)
{
$cr = explode('|', $ssh->get('top -u '.$server['uid'].' -b -n 1 | grep '.(cron::$process[$game]).' | awk \'{print $9"|"$10}\''));
2023-03-04 23:45:46 +00:00
2023-11-11 20:56:12 +00:00
$resources[$n]['cpu'] = isset($cr[0]) ? round(str_replace(',', '.', $cr[0])) : 0;
2023-03-04 23:45:46 +00:00
2023-11-11 20:56:12 +00:00
$resources[$n]['ram'] = isset($cr[1]) ? str_replace(',', '.', $cr[1]) : 0;
$ram = $server['ram'] ? $server['ram'] : $server['slots']*$cfg['ram'][$game];
$resources[$n]['ram'] = round($unit['ram']/100*$resources[$n]['ram']/($ram/100));
2023-03-04 23:45:46 +00:00
2023-11-11 20:56:12 +00:00
sleep(1);
}
2023-03-04 23:45:46 +00:00
2023-11-11 20:56:12 +00:00
$loads = array();
2023-03-04 23:45:46 +00:00
2023-11-11 20:56:12 +00:00
foreach($resources as $n => $load)
{
foreach($load as $type => $val)
$loads[$type] += $val;
}
2023-03-04 23:45:46 +00:00
2023-11-11 20:56:12 +00:00
$average_cpu = isset($loads['cpu']) ? $loads['cpu']/2 : 0;
$average_ram = isset($loads['ram']) ? $loads['ram']/2 : 0;
2023-03-04 23:45:46 +00:00
2023-11-11 20:56:12 +00:00
$max_cpu = $server['cpu_use_max'] ? $server['cpu_use_max'] : $cfg['cpu_use_max'][$game];
$max_ram = $server['ram_use_max'] ? $server['ram_use_max'] : $cfg['ram_use_max'][$game];
2023-03-04 23:45:46 +00:00
2023-11-11 20:56:12 +00:00
if($average_cpu > $max_cpu)
{
exec('sh -c "cd /var/enginegp; php cron.php '.$cfg['cron_key'].' server_action restart '.$game.' '.$id.'"');
2023-03-04 23:45:46 +00:00
2023-11-11 20:56:12 +00:00
$sql->query('INSERT INTO `logs_sys` set `user`="0", `server`="'.$id.'", `text`="Перезагрука сервера: OVERLOAD^cpu = '.$average_cpu.'%", `time`="'.$start_point.'"');
}elseif($average_ram > $max_ram){
exec('sh -c "cd /var/enginegp; php cron.php '.$cfg['cron_key'].' server_action restart '.$game.' '.$id.'"');
2023-03-04 23:45:46 +00:00
2023-11-11 20:56:12 +00:00
$sql->query('INSERT INTO `logs_sys` set `user`="0", `server`="'.$id.'", `text`="Перезагрука сервера: OVERLOAD^ram = '.$average_ram.'%", `time`="'.$start_point.'"');
}
}
2023-05-05 01:17:19 +00:00
2023-11-11 20:56:12 +00:00
return NULL;
}
}
2023-03-04 23:45:46 +00:00
?>