我有一个cron作业,每隔10-15分钟运行一次ping我的数据库中的Minecraft服务器,如果其中一个返回“离线”,数据库会记录发生这种情况的时间并将其加入lastDT
(最后一个)停机时间表。我的问题是,如何收集所有时间,并在每个月末计算出平均停机时间(如果有的话)。我认为这将是((totalMinutesInMonth-totalMinutesOfDT)*100)
。有没有办法做到这一点?为了更好地了解我正在处理的内容,可以参考以下代码:
<?php
require_once './inc/connectToDB.php';
date_default_timezone_set('UTC');
session_start();
try {
$collectServers = $database->prepare('SELECT * FROM servers');
$collectServers->execute();
$serversDat = $collectServers->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
error_log($e->getMessage());
exit();
}
foreach ($serversDat as $server) {
try {
$remoteCon = @fsockopen(@gethostbyname($server['address']),$server['port'],$errno,$errstr,1);
$connected = false;
if (@is_resource($remoteCon)) { $connected = true; @fclose($remoteCon); }
if ($connected) { $serverStat = 'Online'; } else { $serverStat = 'Offline'; }
if ($serverStat == 'Offline') {
$downTime=date('H:i:s',time());
} else {
$downTime=0;
}
$reinsert = $database->prepare('UPDATE servers SET status=:status,lastPing=:time,lastDT=:lastdt WHERE id=:id');
$reinsert->bindValue(':id',$server['id'],PDO::PARAM_INT);
$reinsert->bindValue(':status',$serverStat,PDO::PARAM_STR);
$reinsert->bindValue(':time',date('H:sa T',time()),PDO::PARAM_STR);
$reinsert->bindValue(':lastdt',$downTime,PDO::PARAM_STR);
$reinsert->execute();
} catch (PDOException $e) {
error_log($e->getMessage());
exit();
}
}
unset($database);
exit();
?>
数据库表如下所示:
(http://i.imgur.com/0ypc99g.png)
如果我能提供更多信息,我很乐意这样做。但是,不知道该怎么做。提前谢谢。
编辑:如果有人知道如何更有效地完成这项工作,那么我只需要重写。这不适合我。答案 0 :(得分:0)
似乎找到服务器停机的时间只是等式的一半。您还需要知道服务器何时恢复。
Down at 10:00AM, Up at 10:15AM equals 15min downtime.
您需要将其存储在数据库中的某个位置。这不是解决方案,但看起来似乎是下一步。