Example #1
0
File: Redo.php Project: eyehere/aha
 protected function _getRedoIterator()
 {
     $redoFile = Log::getLastRedoFile();
     if (file_exists($redoFile) && ($handle = fopen($redoFile, "r"))) {
         while (($line = fgets($handle)) !== false) {
             $arrPackage = array();
             if (preg_match('/redo=(.*)\\[BACK_TRACE\\]/', $line, $arrElements)) {
                 $arrPackage = unserialize(trim($arrElements[1]));
                 if (!isset($arrPackage['retry'])) {
                     $arrPackage['retry'] = 1;
                 } elseif ($arrPackage['retry'] > self::MAX_RETRY_TIMES) {
                     Log::redoBill()->error(array('redo' => 'more then max_retry_times!', 'package' => $arrPackage));
                     Log::monitor()->error(array(Monitor::KEY => Monitor::OVER_MAX_RETRY_TIMES, '&package' => $arrPackage));
                     continue;
                 } else {
                     $arrPackage['retry'] += 1;
                 }
             }
             (yield $arrPackage);
         }
         fclose($handle);
         Log::redoBill()->debug(array('redoIterator' => 'retry done!', 'file' => $redoFile));
     } else {
         Log::redoBill()->notice(array('redoIterator' => 'last ten minutes has no failed record!', 'file' => $redoFile));
     }
 }