1

データベース内の 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 )

より多くの情報を提供できる場合は、喜んで提供します。ただし、ここから何をするかはわかりません。前もって感謝します。

編集:誰かがこれをより効率的に行う方法を知っているなら、私はすべて書き直します。これは私にとってはうまくいきません。

4

1 に答える 1

0

サーバーがダウンした時間を見つけることは、方程式の半分に過ぎないようです。また、サーバーがいつ復旧したかを知る必要があります。

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

それをデータベースのどこかに保存する必要があります。それは解決策ではありませんが、次のステップのようです。

于 2013-06-07T05:16:25.310 に答える