diff --git a/web/statuscheck.php b/web/statuscheck.php
index a8cfaa56..d9e88a42 100644
--- a/web/statuscheck.php
+++ b/web/statuscheck.php
@@ -103,172 +103,240 @@ if (!isset($ip) or $_SERVER['SERVER_ADDR'] == $ip) {
# Game Server
if ($checkTypeOfServer == 'all' or $checkTypeOfServer == 'gs') {
+
function statushandle() {
+
global $userid, $resellersettings, $resellerid, $serverid, $logdate, $aeskey, $address, $gametype, $war, $status, $password, $lendserver, $elapsed, $shutdownemptytime, $numplayers, $maxplayers, $slots, $brandname, $name, $map, $secnotified, $notified, $sql, $ssprache, $lid;
+
list($serverip, $port) = explode(':', $address);
+
$returnCmd = array();
+
+
+
+ // Check lendserver specific settings
+ if ($lendserver == 'Y') {
+
+ // Running but no lend information in temp table
+ if ($status == 'UP') {
+ $query = $sql->prepare("SELECT 1 FROM `lendedserver` WHERE `id`=? LIMIT 1");
+ $query->execute(array($lid));
+
+ if ($query->rowCount() == 0) {
+ print "Will stop lendserver $address with lendID $lid because not lendet\r\n";
+ $stopserver = true;
+ }
+
+ if (!isset($stopserver) and $lendserver == 'Y' and $resellersettings[$resellerid]['active'] == 'Y' and $resellersettings[$resellerid]['shutdownempty'] == 'Y' and $elapsed > $shutdownemptytime and $numplayers == 0 and $maxplayers != 0 and $slots != 0) {
+ print "Will stop server $address after $elapsed minutes, because it is empty and threshold is $shutdownemptytime minutes \r\n";
+ $stopserver = true;
+ }
+ }
+
+ // Expected to be running but is not, so remove from temp table
+ if (isset($stopserver) or $status != 'UP') {
+
+ if (!isset($stopserver)) {
+ print "Will remove lendserver $address with lendID $lid because it is lendet but stopped \r\n";
+ }
+
+ $doNotRestart = true;
+
+ $query = $sql->prepare("DELETE FROM `lendedserver` WHERE `id`=? LIMIT 1");
+ $query->execute(array($lid));
+ }
+ }
+
if ($status == 'UP') {
- if ($lendserver == 'Y' and $resellersettings[$resellerid]['active'] == 'Y' and $resellersettings[$resellerid]['shutdownempty'] == 'Y' and $elapsed>$shutdownemptytime and $numplayers == '0' and $maxplayers != '0' and $slots != '0') {
- print "Will stop server $address before time is up, because it is empty\r\n";
- $stopserver = true;
- } else if ($war == 'Y' and $password == 'N') {
+
+ $rulebreak = array();
+
+ if ($war == 'Y' and $password == 'N') {
+
+ $rulebreak[] = $ssprache->nopassword;
+
if ($resellersettings[$resellerid]['nopassword'] == '1') {
$stopserver = true;
print "Will stop server $address because running without password. The name converted to ISO-8859-1 is ".iconv('UTF-8','ISO-8859-1//TRANSLIT', $name).".\r\n";
+
} else {
print "Server with address $address is running as $gametype and illegal without password. The name converted to ISO-8859-1 is ".iconv('UTF-8','ISO-8859-1//TRANSLIT', $name).".\r\n";
}
- $rulebreak = $ssprache->nopassword;
}
+
if ($maxplayers > $slots) {
+
+ $rulebreak[] = $ssprache->tohighslots;
+
if ($resellersettings[$resellerid]['tohighslots'] == '1') {
$stopserver = true;
print "Will stop server $address because running with to much slots. The name converted to ISO-8859-1 is ".iconv('UTF-8','ISO-8859-1//TRANSLIT', $name).".\r\n";
} else {
print "Server $address is running as $gametype and with illegal slotamount. The name converted to ISO-8859-1 is ".iconv('UTF-8','ISO-8859-1//TRANSLIT', $name).".\r\n";
}
- if (isset($rulebreak)) {
- $rulebreak .="
".$ssprache->tohighslots;
- } else {
- $rulebreak = $ssprache->tohighslots;
- }
}
+
if ($brandname == 'Y' and $resellersettings[$resellerid]['brandname'] != '' and strpos(strtolower($name),strtolower($resellersettings[$resellerid]['brandname'])) === false) {
+
+ $rulebreak[] = $ssprache->noservertag;
+
if ($resellersettings[$resellerid]['noservertag'] == '1') {
$stopserver = true;
print "Will stop server $address because running without servertag. The name converted to ISO-8859-1 is ".iconv('UTF-8','ISO-8859-1//TRANSLIT', $name).".\r\n";
} else {
print "Server $address is running as $gametype and illegal without servertag. The name converted to ISO-8859-1 is ".iconv('UTF-8','ISO-8859-1//TRANSLIT', $name).".\r\n";
}
- if (isset($rulebreak)) {
- $rulebreak .="
".$ssprache->noservertag;
- } else {
- $rulebreak = $ssprache->noservertag;
- }
}
- if (!isset($rulebreak)) {
+
+ if (count($rulebreak) == 0 and !isset($stopserver)) {
print "Server $address is running as $gametype. The name converted to ISO-8859-1 is ".iconv('UTF-8','ISO-8859-1//TRANSLIT', $name).".\r\n";
}
- if ($secnotified == 'N' and isset($rulebreak)) {
+
+ if ($secnotified == 'N' and count($rulebreak) > 0) {
+
if ($resellerid==0) {
- $query = $sql->prepare("SELECT `id`,`mail_securitybreach` FROM `userdata` WHERE `id`=? OR (`resellerid`='0' AND `accounttype`='a')");
+ $query = $sql->prepare("SELECT `id`,`mail_securitybreach` FROM `userdata` WHERE `id`=? OR (`resellerid`=0 AND `accounttype`='a')");
$query->execute(array($userid));
+
} else {
$query = $sql->prepare("SELECT `id`,`mail_securitybreach` FROM `userdata` WHERE `id`=? OR (`id`=? AND `accounttype`='r')");
$query->execute(array($userid, $resellerid));
}
+
foreach ($query->fetchall(PDO::FETCH_ASSOC) as $row) {
if ($row['mail_securitybreach'] == 'Y') {
sendmail('emailsecuritybreach', $row['id'], $address, $rulebreak);
}
}
+
$query = $sql->prepare("UPDATE `gsswitch` SET `secnotified`='Y' WHERE `serverip`=? AND `port`=? LIMIT 1");
$query->execute(array($serverip, $port));
+
}
- if ($secnotified == 'Y' and !isset($rulebreak)) {
+
+ if ($secnotified == 'Y' and count($rulebreak) == 0) {
$query = $sql->prepare("UPDATE `gsswitch` SET `secnotified`='N' WHERE `serverip`=? AND `port`=? LIMIT 1");
$query->execute(array($serverip, $port));
}
+
if (isset($stopserver)) {
+
+ $numplayers = 0;
+ $map = '';
+
$tmp = gsrestart($serverid,'so', $aeskey, $resellerid);
if (is_array($tmp)) {
foreach($tmp as $t) {
$returnCmd[] = $t;
}
}
- $numplayers = 0;
- $map = '';
+
$query = $sql->prepare("DELETE FROM `lendedserver` WHERE `serverid`=? AND `resellerid`=? AND `servertype`='g' LIMIT 1");
$query->execute(array($serverid, $resellerid));
}
- if ($notified>0) {
- $query = $sql->prepare("UPDATE `gsswitch` SET `notified`='0' WHERE `serverip`=? AND `port`=? LIMIT 1");
+
+ if ($notified > 0) {
+ $query = $sql->prepare("UPDATE `gsswitch` SET `notified`=0 WHERE `serverip`=? AND `port`=? LIMIT 1");
$query->execute(array($serverip, $port));
}
+
} else {
$name = 'OFFLINE';
$numplayers = 0;
$maxplayers = 0;
$map = '';
$password = 'Y';
- unset($donotrestart);
- if ($lendserver == 'Y' and $resellersettings[$resellerid]['active'] == 'Y' and $resellersettings[$resellerid]['shutdownempty'] == 'Y') {
- $query = $sql->prepare("SELECT `started`,`lendtime` FROM `lendedserver` WHERE `id`=? LIMIT 1");
- $query->execute(array($lid));
- foreach ($query->fetchall(PDO::FETCH_ASSOC) as $row) {
- $timeleft=round($row['lendtime']-(strtotime('now')-strtotime($row['started']))/60);
- if ($timeleft>=$shutdownemptytime) {
- $query = $sql->prepare("DELETE FROM `lendedserver` WHERE `id`=? AND `resellerid`=? LIMIT 1");
- $query->execute(array($lid, $resellerid));
- $query = $sql->prepare("SELECT `switchID` FROM `serverlist` WHERE `id`=? LIMIT 1");
- $query->execute(array($serverid));
- $restartID = $query->fetchColumn();
- $tmp = gsrestart($restartID, 'so', $aeskey, $resellerid);
- if (is_array($tmp)) {
- foreach($tmp as $t) {
- $returnCmd[] = $t;
- }
- }
- print "Stopping server $address before time is up, because it is crashed\r\n";
- $donotrestart = true;
- }
- }
- }
- if (!isset($donotrestart)) {
+
+ if (!isset($doNotRestart)) {
+
$notified++;
+
$query = $sql->prepare("SELECT `autoRestart` FROM `gsswitch` WHERE `serverip`=? and `port`=? LIMIT 1");
$query->execute(array($serverip, $port));
- if ($query->fetchColumn() == 'Y' and $notified>=$resellersettings[$resellerid]['down_checks']) {
+
+ if ($query->fetchColumn() == 'Y' and $notified >= $resellersettings[$resellerid]['down_checks']) {
print "Restarting: $address\r\n";
- $tmp = gsrestart($serverid,'re', $aeskey, $resellerid);
+
+ $tmp = gsrestart($serverid, 're', $aeskey, $resellerid);
if (is_array($tmp)) {
foreach($tmp as $t) {
$returnCmd[] = $t;
}
}
+
} else {
print "Not Restarting: $address\r\n";
}
+
if ($notified == $resellersettings[$resellerid]['down_checks']) {
$query = $sql->prepare("SELECT `mail_serverdown` FROM `userdata` WHERE `id`=? LIMIT 1");
$query->execute(array($userid));
foreach ($query->fetchall(PDO::FETCH_ASSOC) as $row) {
- if ($row['mail_serverdown'] == 'Y') sendmail('emaildownrestart', $userid, $address,'');
+ if ($row['mail_serverdown'] == 'Y') {
+ sendmail('emaildownrestart', $userid, $address,'');
+ }
}
}
}
}
+
$query = $sql->prepare("UPDATE `gsswitch` SET `queryName`=?,`queryNumplayers`=?,`queryMaxplayers`=?,`queryMap`=?,`queryPassword`=?,`queryUpdatetime`=?,`notified`=? WHERE `serverip`=? and `port`=? LIMIT 1");
$query->execute(array($name, $numplayers, $maxplayers, $map, $password, $logdate, $notified, $serverip, $port));
+
return $returnCmd;
}
- $query = $sql->prepare("SELECT `id`,`serverid`,`started`,`lendtime`,`resellerid` FROM `lendedserver` WHERE `servertype`='g'");
- $query2 = $sql->prepare("SELECT g.`rootID` FROM `serverlist` s INNER JOIN `gsswitch` g ON s.`switchID`=g.`id` WHERE s.`id`=? LIMIT 1");
- $query->execute();
+
+ // We want only one socket per root server. Collect the to be stopped lendservers in an array and sort by root ID
$rtmp = array();
+
+ $query = $sql->prepare("SELECT `id`,`serverid`,`started`,`lendtime`,`resellerid` FROM `lendedserver` WHERE `servertype`='g'");
+ $query2 = $sql->prepare("SELECT g.`rootID`,g.`id` FROM `serverlist` s INNER JOIN `gsswitch` g ON s.`switchID`=g.`id` WHERE s.`id`=? LIMIT 1");
+ $query3 = $sql->prepare("DELETE FROM `lendedserver` WHERE `id`=? AND `resellerid`=? LIMIT 1");
+ $query->execute();
foreach ($query->fetchall(PDO::FETCH_ASSOC) as $row) {
$id = $row['id'];
- $serverid = $row['serverid'];
$lendtime = $row['lendtime'];
+ $serverid = $row['serverid'];
$resellerid = $row['resellerid'];
$timeleft = round($row['lendtime'] - (strtotime('now') - strtotime($row['started'])) / 60);
+
if ($timeleft <= 0) {
- $query2->execute(array($serverid));
- $rootID= (int) $query2->fetchColumn();
- $tmp = gsrestart($serverid,'so', $aeskey, $resellerid);
- if (is_array($tmp)) foreach($tmp as $t) $rtmp[$rootID][] = $t;
- $query2 = $sql->prepare("DELETE FROM `lendedserver` WHERE `id`=? AND `resellerid`=? LIMIT 1");
- $query2->execute(array($id, $resellerid));
+ $query3->execute(array($id, $resellerid));
+
+ $query2->execute(array($row['serverid']));
+ foreach ($query2->fetchAll(PDO::FETCH_ASSOC) as $row2) {
+
+ $tmp = gsrestart($row2['id'], 'so', $aeskey, $resellerid);
+
+ if (is_array($tmp)) {
+ foreach($tmp as $t) {
+ $rtmp[$row2['rootID']][] = $t;
+ }
+ }
+
+ }
+
+
print "Time is up, stopping lendserver: $id\r\n";
+
} else {
print "Lendserver $serverid has $timeleft minutes left\r\n";
}
}
- foreach ($rtmp as $k=>$v) if (count($v)>0) ssh2_execute('gs', $k, $v);
+
+ // Send stop commands to rootserver
+ foreach ($rtmp as $k => $v) {
+ if (count($v) > 0) {
+ ssh2_execute('gs', $k, $v);
+ }
+ }
+
$other = array();
$i = 1;
$totalcount = 0;
$queries = array();
+
+ // Get the list of servers which are active and are not stopped
$query = $sql->prepare("SELECT g.`id`,g.`serverid`,g.`serverip`,g.`port`,t.`qstat` FROM `gsswitch` g INNER JOIN `serverlist` s ON g.`serverid`=s.`id` INNER JOIN `servertypes` t ON s.`servertype`=t.`id` WHERE g.`stopped`='N' AND g.`active`='Y'");
$query->execute();
foreach ($query->fetchAll(PDO::FETCH_ASSOC) as $row) {
@@ -276,50 +344,67 @@ if (!isset($ip) or $_SERVER['SERVER_ADDR'] == $ip) {
$serverip = $row['serverip'];
$port = $row['port'];
$server = $serverip . ':' . $port;
+
if (!in_array($qstat, array('', null, false))) {
+
if (in_array($qstat, array('minecraft', 'tm', 'gtasamp', 'teeworlds', 'mtasa'))) {
$other[] = array('qstat' => $qstat, 'switchID' => $row['id']);
} else {
$queries[] = '-' . $qstat . ' ' . $server;
$i++;
}
+
if ($i == 50) {
$querry_array[] = implode(' ', $queries);
$queries = array();
$i = 1;
}
+
$totalcount++;
}
}
+
$querry_array[] = implode(' ', $queries);
+
print "Checking $totalcount server\r\n";
$shellCmds = array();
+
foreach ($querry_array as $querystring) {
- print "The Quakestat Querystring is: ".$querystring . "\r\n";
- unset($xmlquakestring);
+
$xml = array();
+
+ unset($xmlquakestring);
+
+ print "The Quakestat Querystring is: ".$querystring . "\r\n";
+
ob_start();
if ($querystring != '') {
passthru(escapeshellcmd("/usr/bin/quakestat -xml -R -utf8 $querystring -sort i"));
- $xmlquakestring=ob_get_contents();
+ $xmlquakestring = ob_get_contents();
}
ob_end_clean();
+
if (isset($xmlquakestring)) {
- $xml=@simplexml_load_string($xmlquakestring);
+ $xml = @simplexml_load_string($xmlquakestring);
}
+
if (!is_array($xml) and !is_object($xml)) {
$xml = array();
}
+
unset($badstatus);
unset($badquery);
unset($badxml);
unset($badquerystring);
+
foreach ($xml as $xml2) {
$address = $xml2['address'];
list($ip, $port) = explode(':', $address);
+
$query = $sql->prepare("SELECT t.`qstat` FROM `gsswitch` g INNER JOIN `serverlist` s ON g.`serverid`=s.`id` INNER JOIN `servertypes` t ON s.`servertype`=t.`id` WHERE g.`serverip`=? AND g.`port`=? AND g.`active`='Y' LIMIT 1");
$query->execute(array($ip, $port));
$qstat = $query->fetchColumn();
+
if ($xml2['status'] == 'DOWN' or $xml2['status'] == 'TIMEOUT') {
if (isset($badquery)) {
$badquery .= ' -' . $qstat . ' ' . $address;
@@ -328,6 +413,7 @@ if (!isset($ip) or $_SERVER['SERVER_ADDR'] == $ip) {
}
}
}
+
$badstatus = array();
if (isset($badquery) and $badquery != '') {
print "The recheck Querystring is: $badquery\r\n";
@@ -394,7 +480,7 @@ if (!isset($ip) or $_SERVER['SERVER_ADDR'] == $ip) {
$query2->execute(array($serverid));
foreach ($query2->fetchall(PDO::FETCH_ASSOC) as $row2) {
$lid = $row2['id'];
- $elapsed=round((strtotime('now')-strtotime($row2['started']))/60);
+ $elapsed = round((strtotime('now')-strtotime($row2['started']))/60);
}
}
}
@@ -594,10 +680,10 @@ if (!isset($ip) or $_SERVER['SERVER_ADDR'] == $ip) {
$key='keys/'.$sshkey;
if (file_exists($pubkey) and file_exists($key)) {
- $ssh2_2= ssh2_connect($row['ssh2ip'], $row['decryptedssh2port'], array('hostkey' => 'ssh-rsa'));
+ $ssh2_2 = @ssh2_connect($row['ssh2ip'], $row['decryptedssh2port'], array('hostkey' => 'ssh-rsa'));
}
} else {
- $ssh2_2=ssh2_connect($row['ssh2ip'], $row['decryptedssh2port']);
+ $ssh2_2 = @ssh2_connect($row['ssh2ip'], $row['decryptedssh2port']);
}
if ($ssh2_2 == true) {
$connect_ssh2_2=($row['publickey'] == 'Y') ? @ssh2_auth_pubkey_file($ssh2_2, $row['decryptedssh2user'], $pubkey, $key) : @ssh2_auth_password($ssh2_2, $row['decryptedssh2user'], $row['decryptedssh2password']);
@@ -700,8 +786,8 @@ if (!isset($ip) or $_SERVER['SERVER_ADDR'] == $ip) {
if ($tsdown == true or $tsdnsdown == true) {
$ts3masternotified++;
if ($ts3masternotified == $resellersettings[$resellerid]['down_checks']) {
- if ($resellerid == '0') {
- $query2 = $sql->prepare("SELECT `id`,`mail_serverdown` FROM `userdata` WHERE `accounttype`='a' AND `resellerid`='0'");
+ if ($resellerid == 0) {
+ $query2 = $sql->prepare("SELECT `id`,`mail_serverdown` FROM `userdata` WHERE `accounttype`='a' AND `resellerid`=0");
$query2->execute();
} else {
$query2 = $sql->prepare("SELECT `id`,`mail_serverdown` FROM `userdata` WHERE `id`=? LIMIT 1");
@@ -713,7 +799,7 @@ if (!isset($ip) or $_SERVER['SERVER_ADDR'] == $ip) {
}
}
}
- $query2 = $sql->prepare("UPDATE `voice_server` SET `uptime`='0' WHERE `masterserver`=?");
+ $query2 = $sql->prepare("UPDATE `voice_server` SET `uptime`=0 WHERE `masterserver`=?");
$query2->execute(array($ts3masterid));
$query2 = $sql->prepare("UPDATE `voice_masterserver` SET `notified`=? WHERE `id`=? LIMIT 1");
$query2->execute(array($ts3masternotified, $ts3masterid));
@@ -784,11 +870,11 @@ if (!isset($ip) or $_SERVER['SERVER_ADDR'] == $ip) {
}
if ($tsdown != true) {
if ($ts3masternotified>0) {
- $pupdate = $sql->prepare("UPDATE `voice_masterserver` SET `notified`='0' WHERE `id`=? LIMIT 1");
+ $pupdate = $sql->prepare("UPDATE `voice_masterserver` SET `notified`=0 WHERE `id`=? LIMIT 1");
$pupdate->execute(array($ts3masterid));
}
$serverlist = $connection->ServerList();
- if (!isset($serverlist[0]['id']) or $serverlist[0]['id'] == '0') {
+ if (!isset($serverlist[0]['id']) or $serverlist[0]['id'] == 0) {
foreach ($serverlist as $server) {
unset($modbadserver);
$modbadserver = array();
@@ -944,17 +1030,17 @@ if (!isset($ip) or $_SERVER['SERVER_ADDR'] == $ip) {
if (isset($changeSlots)) {
print $vrow['type']." server $address Changing Flex Slots to ${changeSlots}. The name converted to ISO-8859-1 is ".iconv('UTF-8','ISO-8859-1//TRANSLIT', $server['virtualserver_name']) . "\r\n";
$connection->ImportModServer($virtualserver_id, $changeSlots, $vrow2['ip'], $vrow2['port'], array());
- $pupdate2 = $sql->prepare("UPDATE `voice_server` SET `notified`='0',`flexSlotsCurrent`=? WHERE `id`=? LIMIT 1");
+ $pupdate2 = $sql->prepare("UPDATE `voice_server` SET `notified`=0,`flexSlotsCurrent`=? WHERE `id`=? LIMIT 1");
$pupdate2->execute(array($changeSlots, $ts3id));
} else if ($notified>0) {
- $pupdate2 = $sql->prepare("UPDATE `voice_server` SET `notified`='0' WHERE `id`=? LIMIT 1");
+ $pupdate2 = $sql->prepare("UPDATE `voice_server` SET `notified`=0 WHERE `id`=? LIMIT 1");
$pupdate2->execute(array($ts3id));
}
print $vrow['type']." server $address is running $traffictext. The name converted to ISO-8859-1 is ".iconv('UTF-8','ISO-8859-1//TRANSLIT', $server['virtualserver_name']) . "\r\n";
- } else if (isset($ts3id) and $notified == '0' and isset($rulebreak)) {
+ } else if (isset($ts3id) and $notified == 0 and isset($rulebreak)) {
$connection->ImportModServer($virtualserver_id, $slots, $vrow2['ip'], $vrow2['port'], $modbadserver);
if ($resellerid==0) {
- $query2 = $sql->prepare("SELECT `id`,`mail_securitybreach` FROM `userdata` WHERE `id`=? OR (`resellerid`='0' AND `accounttype`='a')");
+ $query2 = $sql->prepare("SELECT `id`,`mail_securitybreach` FROM `userdata` WHERE `id`=? OR (`resellerid`=0 AND `accounttype`='a')");
$query2->execute(array($userid));
} else {
$query2 = $sql->prepare("SELECT `id`,`mail_securitybreach` FROM `userdata` WHERE `id`=? OR (`id`=? AND `accounttype`='r')");
@@ -979,7 +1065,7 @@ if (!isset($ip) or $_SERVER['SERVER_ADDR'] == $ip) {
$lid = $erow['id'];
$runtime = $erow['lendtime'];
$elapsed=round((strtotime('now')-strtotime($erow['started']))/60);
- if ($elapsed>$shutdownemptytime and $usedslots == '0') {
+ if ($elapsed>$shutdownemptytime and $usedslots == 0) {
print "Will stop server $address before time is up, because it is empty\r\n";
$stop = true;
} else if ($elapsed>=$runtime) {