scans.php 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. <?php
  2. if(!DEFINED('EGP'))
  3. exit(header('Refresh: 0; URL=http://'.$_SERVER['SERVER_NAME'].'/404'));
  4. class scans
  5. {
  6. private static $process = array(
  7. 'cs' => 'hlds_',
  8. 'cssold' => 'srcds_i686',
  9. 'css' => 'srcds_',
  10. 'csgo' => 'srcds_',
  11. 'samp' => 'samp',
  12. 'crmp' => 'samp',
  13. 'mta' => 'mta',
  14. 'mc' => 'java'
  15. );
  16. public static function resources($id)
  17. {
  18. global $cfg, $sql, $mcache;
  19. $nmch = 'ctrl_server_resources_'.$id;
  20. if(is_array($mcache->get($nmch)))
  21. return $mcache->get($nmch);
  22. $sql->query('SELECT `uid`, `unit`, `game`, `slots`, `status`, `online`, `hdd_use` FROM `control_servers` WHERE `id`="'.$id.'" LIMIT 1');
  23. if(!$sql->num())
  24. return NULL;
  25. $server = $sql->get();
  26. $resources = array(
  27. 'usr' => 0,
  28. 'cpu' => 0,
  29. 'ram' => 0,
  30. 'hdd' => $server['hdd_use']
  31. );
  32. $sql->query('SELECT `address`, `passwd`, `ram`, `hdd` FROM `control` WHERE `id`="'.$server['unit'].'" LIMIT 1');
  33. $unit = $sql->get();
  34. include(LIB.'ssh.php');
  35. if(!$ssh->auth($unit['passwd'], $unit['address']))
  36. return $resources;
  37. if(!in_array($server['status'], array('working', 'start', 'restart', 'change')))
  38. return $resources;
  39. $resources['usr'] = ceil(100/$server['slots']*$server['online']);
  40. $resources['usr'] = $resources['usr'] > 100 ? 100 : $resources['usr'];
  41. $cr = explode('|', $ssh->get('top -u '.$server['uid'].' -b -n 1 | grep '.(scans::$process[$server['game']]).' | sort | tail -1 | awk \'{print $9"|"$10}\''));
  42. if(isset($cr[0]))
  43. $resources['cpu'] = str_replace(',', '.', $cr[0]);
  44. $resources['cpu'] = $resources['cpu'] > 100 ? 100 : round($resources['cpu']);
  45. if(isset($cr[1]))
  46. $resources['ram'] = str_replace(',', '.', $cr[1]);
  47. // ram на сервер
  48. $ram = $server['ram'] ? $server['ram'] : $server['slots']*$cfg['ram'][$server['game']];
  49. $resources['ram'] = $unit['ram']/100*$resources['ram']/($ram/100);
  50. $resources['ram'] = $resources['ram'] > 100 ? 100 : round($resources['ram']);
  51. $resources['hdd'] = ceil(sys::int($ssh->get('cd /servers/'.$server['uid'].' && du -ms'))/($unit['hdd']/100));
  52. $resources['hdd'] = $resources['hdd'] > 100 ? 100 : $resources['hdd'];
  53. $sql->query('UPDATE `control_servers` set `ram_use`="'.$resources['ram'].'", `cpu_use`="'.$resources['cpu'].'", `hdd_use`="'.$resources['hdd'].'" WHERE `id`="'.$id.'" LIMIT 1');
  54. $mcache->set($nmch, $resources, false, $cfg['mcache_server_resources']);
  55. return $resources;
  56. }
  57. public static function status($id)
  58. {
  59. global $start_point, $cfg, $sql, $mcache;
  60. $nmch = 'ctrl_server_status_'.$id;
  61. if($mcache->get($nmch))
  62. return 'mcache -> system_block_operation';
  63. $mcache->set($nmch, true, false, $cfg['mcache_server_status']);
  64. $sql->query('SELECT `uid`, `unit`, `game`, `address`, `status`, `name`, `online`, `players` FROM `control_servers` WHERE `id`="'.$id.'" LIMIT 1');
  65. $server = $sql->get();
  66. $sql->query('SELECT `address`, `passwd` FROM `control` WHERE `id`="'.$server['unit'].'" LIMIT 1');
  67. $unit = $sql->get();
  68. include(LIB.'ssh.php');
  69. if(!$ssh->auth($unit['passwd'], $unit['address']))
  70. return 'unit error connect';
  71. switch($server['status'])
  72. {
  73. case 'working': case 'change': case 'start': case 'restart':
  74. if(!sys::int($ssh->get('ps aux | grep s_'.$server['uid'].' | grep -v grep | awk \'{print $2}\'')))
  75. {
  76. $sql->query('UPDATE `control_servers` set `status`="off", `online`="0", `players`="0" WHERE `id`="'.$id.'" LIMIT 1');
  77. sys::reset_mcache('ctrl_server_scan_mon_pl_'.$id, $id, array('name' => $server['name'], 'game' => $server['game'], 'status' => 'off', 'online' => 0, 'players' => ''));
  78. sys::reset_mcache('ctrl_server_scan_mon_'.$id, $id, array('name' => $server['name'], 'game' => $server['game'], 'status' => 'off', 'online' => 0));
  79. return 'server -> working -> off';
  80. }
  81. break;
  82. case 'off':
  83. if(sys::int($ssh->get('ps aux | grep s_'.$server['uid'].' | grep -v grep | awk \'{print $2}\'')))
  84. {
  85. $sql->query('UPDATE `control_servers` set `status`="working" WHERE `id`="'.$id.'" LIMIT 1');
  86. 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']));
  87. sys::reset_mcache('ctrl_server_scan_mon_'.$id, $id, array('name' => $server['name'], 'game' => $server['game'], 'status' => 'working', 'online' => $server['online']));
  88. return 'server -> off -> working';
  89. }
  90. break;
  91. case 'reinstall':
  92. if(!sys::int($ssh->get('ps aux | grep r_'.$server['uid'].' | grep -v grep | awk \'{print $2}\'')))
  93. {
  94. $sql->query('UPDATE `control_servers` set `status`="off" WHERE `id`="'.$id.'" LIMIT 1');
  95. sys::reset_mcache('ctrl_server_scan_mon_pl_'.$id, $id, array('name' => $server['name'], 'game' => $server['game'], 'status' => 'off', 'online' => 0, 'players' => ''));
  96. sys::reset_mcache('ctrl_server_scan_mon_'.$id, $id, array('name' => $server['name'], 'game' => $server['game'], 'status' => 'off', 'online' => 0));
  97. return 'server -> reinstall -> end';
  98. }
  99. break;
  100. case 'update':
  101. if(!sys::int($ssh->get('ps aux | grep u_'.$server['uid'].' | grep -v grep | awk \'{print $2}\'')))
  102. {
  103. $sql->query('UPDATE `control_servers` set `status`="off" WHERE `id`="'.$id.'" LIMIT 1');
  104. sys::reset_mcache('ctrl_server_scan_mon_pl_'.$id, $id, array('name' => $server['name'], 'game' => $server['game'], 'status' => 'off', 'online' => 0, 'players' => ''));
  105. sys::reset_mcache('ctrl_server_scan_mon_'.$id, $id, array('name' => $server['name'], 'game' => $server['game'], 'status' => 'off', 'online' => 0));
  106. return 'server -> update -> end';
  107. }
  108. break;
  109. case 'install':
  110. if(!sys::int($ssh->get('ps aux | grep i_'.$server['uid'].' | grep -v grep | awk \'{print $2}\'')))
  111. {
  112. $sql->query('UPDATE `control_servers` set `status`="off" WHERE `id`="'.$id.'" LIMIT 1');
  113. sys::reset_mcache('ctrl_server_scan_mon_pl_'.$id, $id, array('name' => $server['name'], 'game' => $server['game'], 'status' => 'off', 'online' => 0, 'players' => ''));
  114. sys::reset_mcache('ctrl_server_scan_mon_'.$id, $id, array('name' => $server['name'], 'game' => $server['game'], 'status' => 'off', 'online' => 0));
  115. return 'server -> install -> end';
  116. }
  117. break;
  118. case 'recovery':
  119. if(!sys::int($ssh->get('ps aux | grep rec_'.$server['uid'].' | grep -v grep | awk \'{print $2}\'')))
  120. {
  121. $sql->query('UPDATE `control_servers` set `status`="off" WHERE `id`="'.$id.'" LIMIT 1');
  122. sys::reset_mcache('ctrl_server_scan_mon_pl_'.$id, $id, array('name' => $server['name'], 'game' => $server['game'], 'status' => 'off', 'online' => 0, 'players' => ''));
  123. sys::reset_mcache('ctrl_server_scan_mon_'.$id, $id, array('name' => $server['name'], 'game' => $server['game'], 'status' => 'off', 'online' => 0));
  124. return 'server -> recovery -> end';
  125. }
  126. }
  127. return 'server -> no change -> end scan';
  128. }
  129. }
  130. ?>