source: scripts/online.php

Last change on this file was 10, checked in by george, 17 years ago

Opraveno: Použití nulových hodnot při aktualizaci dat serverů namísto hodnoty NULL.

File size: 2.4 KB
RevLine 
[1]1<?php
2
[8]3// Script executed by cron every 5 minutes
4
[7]5include('../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]9if(mysqli_connect_errno())
10{
11 printf("Connect failed: %s\n", mysqli_connect_error());
12 exit();
13}
14
[5]15function 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]30echo("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`");
35while($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]67echo('Total: '.($OnlineCount + $OfflineCount).', Online: '.$OnlineCount.', Offline: '.$OfflineCount."<br>\n");
[1]68
69?>
Note: See TracBrowser for help on using the repository browser.