[1] | 1 | <?php
|
---|
| 2 |
|
---|
[8] | 3 | // Script executed by cron every 5 minutes
|
---|
| 4 |
|
---|
[7] | 5 | include('../includes/config.php');
|
---|
[1] | 6 |
|
---|
[7] | 7 | $Database = new mysqli($db_config['host'], $db_config['user'], $db_config['pass'], $db_config['name']);
|
---|
[1] | 8 |
|
---|
[7] | 9 | if(mysqli_connect_errno())
|
---|
| 10 | {
|
---|
| 11 | printf("Connect failed: %s\n", mysqli_connect_error());
|
---|
| 12 | exit();
|
---|
| 13 | }
|
---|
| 14 |
|
---|
[5] | 15 | function CheckPortStatus($Ip, $Port)
|
---|
| 16 | {
|
---|
| 17 | $Timeout = 1;
|
---|
| 18 | if($Socket = @fsockopen($Ip, $Port, $ErrorNumber, $ErrorString, $Timeout))
|
---|
| 19 | {
|
---|
| 20 | fclose($Socket);
|
---|
[6] | 21 | return(1);
|
---|
[5] | 22 | } else
|
---|
| 23 | {
|
---|
[6] | 24 | return(0);
|
---|
[5] | 25 | }
|
---|
| 26 | }
|
---|
[1] | 27 |
|
---|
[6] | 28 | $TextState = array('Offline', 'Online');
|
---|
| 29 |
|
---|
[5] | 30 | echo("Kontroluji stav serveru...<br>\n");
|
---|
[6] | 31 | $PlayersCount = 0;
|
---|
[5] | 32 | $OnlineCount = 0;
|
---|
| 33 | $OfflineCount = 0;
|
---|
[6] | 34 | $Servers = $Database->query("SELECT `id`,`ip`,`port`,`name` FROM `servers`");
|
---|
| 35 | while($Server = $Servers->fetch_array())
|
---|
[5] | 36 | {
|
---|
| 37 | echo($Server['name'].' - ');
|
---|
[8] | 38 | $MeasureStart = microtime(TRUE);
|
---|
[6] | 39 | $OnlineState = CheckPortStatus($Server['ip'], $Server['port']);
|
---|
[8] | 40 | $Latency = (microtime(TRUE) - $MeasureStart) * 1000;
|
---|
[6] | 41 | $OnlineCount += $OnlineState;
|
---|
| 42 | $OfflineCount += 1 - $OnlineState;
|
---|
| 43 | // Insert new online state
|
---|
[8] | 44 | $Database->query("INSERT INTO `servers_online` (`server`, `time`, `state`, `players_count`, `latency`) VALUES (".$Server['id'].", NOW() , ".$OnlineState.", ".$PlayersCount.", ".$Latency.")");
|
---|
[6] | 45 |
|
---|
| 46 | // Delete old records
|
---|
[8] | 47 | $Database->query("DELETE FROM `servers_online` WHERE `server` = ".$Server['id']." AND time < DATE_SUB(NOW(), INTERVAL ".$Config['OnlineStatePeriodLength']." DAY)");
|
---|
[6] | 48 |
|
---|
[8] | 49 | // Calculate latency average
|
---|
[10] | 50 | $DbResult = $Database->query("SELECT COALESCE(AVG(`latency`), 0) as `latency` FROM `servers_online` WHERE `server` = ".$Server['id']." AND `state` = 1 AND `latency` != 0");
|
---|
[8] | 51 | $DbRow = $DbResult->fetch_array();
|
---|
| 52 | $Latency = $DbRow['latency'];
|
---|
| 53 | $DbResult->free();
|
---|
| 54 |
|
---|
[6] | 55 | // Calculate cached percentage online state
|
---|
[10] | 56 | $DbResult = $Database->query("SELECT COALESCE(COUNT(*), 1) as `count`, COALESCE(SUM(`state`), 0) as `online` FROM `servers_online` WHERE `server` = ".$Server['id']);
|
---|
[6] | 57 | $DbRow = $DbResult->fetch_array();
|
---|
[8] | 58 |
|
---|
| 59 | // Update servers info
|
---|
| 60 | $Database->query("UPDATE `servers` SET `online` = ".round($DbRow['online'] / $DbRow['count'] * 100, 2).", `latency` = ".$Latency." WHERE `id` = ".$Server['id']);
|
---|
[6] | 61 | $DbResult->free();
|
---|
| 62 | echo($TextState[$OnlineState]."<br>\n");
|
---|
| 63 | flush();
|
---|
[5] | 64 | }
|
---|
[6] | 65 | $Servers->free();
|
---|
[1] | 66 |
|
---|
[5] | 67 | echo('Total: '.($OnlineCount + $OfflineCount).', Online: '.$OnlineCount.', Offline: '.$OfflineCount."<br>\n");
|
---|
[1] | 68 |
|
---|
| 69 | ?>
|
---|