收集所有停机时间开始时间,以达到月末的总停机时间 - PHP

时间:2013-06-07 05:10:33

标签: php date time

我有一个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();
?>

数据库表如下所示:

imagehttp://i.imgur.com/0ypc99g.png

如果我能提供更多信息,我很乐意这样做。但是,不知道该怎么做。提前谢谢。

编辑:如果有人知道如何更有效地完成这项工作,那么我只需要重写。这不适合我。

1 个答案:

答案 0 :(得分:0)

似乎找到服务器停机的时间只是等式的一半。您还需要知道服务器何时恢复。

Down at 10:00AM, Up at 10:15AM equals 15min downtime.

您需要将其存储在数据库中的某个位置。这不是解决方案,但看起来似乎是下一步。