EngineGP/system/library/cron/scan_servers_load.php

92 lines
3.6 KiB
PHP
Raw Normal View History

2023-03-04 23:45:46 +00:00
<?php
if (!DEFINED('EGP'))
exit(header('Refresh: 0; URL=http://' . $_SERVER['SERVER_NAME'] . '/404'));
2023-03-04 23:45:46 +00:00
class scan_servers_load extends cron
{
function __construct()
{
global $cfg, $sql, $argv, $start_point;
2023-03-04 23:45:46 +00:00
$servers = $argv;
2023-03-04 23:45:46 +00:00
unset($servers[0], $servers[1], $servers[2]);
2023-03-04 23:45:46 +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
$unit = $sql->get();
2023-03-04 23:45:46 +00:00
$game = $servers[3];
2023-03-04 23:45:46 +00:00
unset($servers[3], $servers[4]);
2023-03-04 23:45:46 +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
$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
include(LIB . 'ssh.php');
2023-03-04 23:45:46 +00:00
// Проверка ssh соедниения пу с локацией
if (!$ssh->auth($unit['passwd'], $unit['address']))
return NULL;
2023-03-04 23:45:46 +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
if ($server['core_fix'] and $server['core_fix_one'])
continue;
2023-03-04 23:45:46 +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
continue;
}
2023-03-04 23:45:46 +00:00
$resources = array();
2023-03-04 23:45:46 +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
$resources[$n]['cpu'] = isset($cr[0]) ? round(str_replace(',', '.', $cr[0])) : 0;
2023-03-04 23:45:46 +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
sleep(1);
}
2023-03-04 23:45:46 +00:00
$loads = array();
2023-03-04 23:45:46 +00:00
foreach ($resources as $n => $load) {
foreach ($load as $type => $val)
$loads[$type] += $val;
}
2023-03-04 23:45:46 +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
$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
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
$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
$sql->query('INSERT INTO `logs_sys` set `user`="0", `server`="' . $id . '", `text`="Перезагрука сервера: OVERLOAD^ram = ' . $average_ram . '%", `time`="' . $start_point . '"');
}
}
return NULL;
}
}
2023-05-05 01:17:19 +00:00
2023-03-04 23:45:46 +00:00
?>