计算正常运行时间服务器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%。你能帮我做这个声明吗?