データベース内の minecraft サーバーに ping を実行する cron ジョブが 10 ~ 15 分ごとに実行されており、そのうちの 1 つが「オフライン」を返した場合、データベースはこれが発生した時刻を記録し、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 )
より多くの情報を提供できる場合は、喜んで提供します。ただし、ここから何をするかはわかりません。前もって感謝します。
編集:誰かがこれをより効率的に行う方法を知っているなら、私はすべて書き直します。これは私にとってはうまくいきません。