Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计算正常运行时间服务器php_Php_Mysql - Fatal编程技术网

计算正常运行时间服务器php

计算正常运行时间服务器php,php,mysql,Php,Mysql,我有顶级服务器的网站。我需要计算每个服务器的正常运行时间 我在数据库中有表stats,其中统计所有服务器: 表中有列: -服务器id-表服务器的列id -状态-服务器联机/脱机。1=在线0=离线 -在线-统计在线玩家数 -created_at-创建记录的日期。格式:时间戳 我有cron,它检查数据库中的所有服务器。每10分钟进行一次cron检查: -如果服务器在线 -在线玩家数量 cron把这些都写在stats表中 我想计算服务器的正常运行时间如何: 我尝试以下代码: SELECT ((COU

我有顶级服务器的网站。我需要计算每个服务器的正常运行时间

我在数据库中有表stats,其中统计所有服务器:

表中有列:
-服务器id-表服务器的列id
-状态-服务器联机/脱机。1=在线0=离线
-在线-统计在线玩家数
-created_at-创建记录的日期。格式:时间戳

我有cron,它检查数据库中的所有服务器。每10分钟进行一次cron检查: -如果服务器在线
-在线玩家数量

cron把这些都写在stats表中
我想计算服务器的正常运行时间如何:

我尝试以下代码:

SELECT ((COUNT(1) / tmp.total) * 100) AS percentage 
FROM stats AS sts 
CROSS JOIN (
     SELECT COUNT(1) AS total 
     FROM stats 
     WHERE DATE(created_at)=CURDATE()
) AS tmp  
WHERE DATE(created_at)=CURDATE()
GROUP BY sts.server_id, tmp.total;
但是这个查询的性能很差,而且不正确
我认为计算服务器正常运行时间的公式是:

uptime : this.server with online = 1 / this.server with online = 0  * 100
在本例中,我需要获取百分比(正常运行时间服务器):

如何使用php和mysql查询实现这一点

// query all the times a server is offline
$query = "SELECT server_id,COUNT(IF(online=0,1, NULL)),COUNT(*) FROM uptime GROUP BY server_id";
$result = $mysqli->query($query);

// iterate through all server_id's
while($row = $result->fetch_row()){
        echo "Server ID: ".$row[0]." -- Uptime: ";
        if($row[1] == 0){
            $uptime = 100;
        }else{
            $uptime = $row[1] / $row[2];
            $uptime = round(100-($uptime*100),2);
        }

        echo $uptime."%<br>";
}
用于验证上述示例的测试代码:

Server ID: 1 -- Uptime: 93.25%
Server ID: 2 -- Uptime: 93%
Server ID: 3 -- Uptime: 100%
Server ID: 4 -- Uptime: 100%
Server ID: 5 -- Uptime: 94.08%
Server ID: 6 -- Uptime: 92.75%
Server ID: 7 -- Uptime: 93.83%
Server ID: 8 -- Uptime: 94.58%
Server ID: 9 -- Uptime: 95.25%
Server ID: 10 -- Uptime: 94.42%
$servers = [1,2,3,4,5,6,7,8,9,10]; // create 10 random servers

for($i = 0; $i < 600; $i++){ // create 10 hours of data
        foreach($servers as $server){
                $players = 0; // no players unless online
                $online = rand(0,100); // create artificial 5% down time
                if($online > 5 || $server == 3 || $server == 4){
                        $players = rand(1,50); // choose random player count
                        $online = 1;
                }else{
                        $online = 0; // server was offline
                }

                // add status
                $query = "INSERT INTO uptime (server_id, status, online) VALUES ($server, $online, $players)";
                // echo $mysqli->error;
                $mysqli->query($query);
        }
}
$servers=[1,2,3,4,5,6,7,8,9,10];//创建10个随机服务器
对于($i=0;$i<600;$i++){//创建10小时的数据
foreach($servers作为$server){
$players=0;//除非在线,否则没有玩家
$online=rand(0100);//创建5%的人工停机时间
如果($online>5 | |$server==3 | |$server==4){
$players=rand(1,50);//选择随机玩家计数
$online=1;
}否则{
$online=0;//服务器已脱机
}
//添加状态
$query=“插入正常运行时间(服务器id、状态、联机)值($server、$online、$players)”;
//echo$mysqli->错误;
$mysqli->query($query);
}
}

尝试查看查询解释,确定是否需要添加索引以提高性能。但如果数据库中没有
online=0
。什么时候正常运行:100%?你永远不会有100%。您还可以为每个在线服务器创建第一个条目=0。为什么?如果服务器始终在线?为什么我需要做在线=0?If server online..在初始查询后添加If/else语句。如果没有结果,那么你的正常运行时间是100%。你能帮我做这个声明吗?