Пример #1
0
 public static function getTree($sid, $URL, $method)
 {
     ///if (!self::$enabled) return;
     if (self::$activeTree) {
         return;
     }
     if (self::$tree != null) {
         return;
     }
     if (strtoupper($method) != 'GET' && !self::$makeTree) {
         return;
     }
     $uTag = md5($URL);
     self::$activeTree = true;
     self::$changedTree = true;
     self::setRoot();
     $uriTag = self::generateETag($URL);
     $list = self::loadData('tree_' . $uTag);
     if ($list === null) {
         self::$changedTree = false;
         ///Logger::Log('no tree', LogLevel::DEBUG, false, dirname(__FILE__) . '/../calls.log');
         return;
     } else {
         ///Logger::Log('tree found', LogLevel::DEBUG, false, dirname(__FILE__) . '/../calls.log');
     }
     $list = json_decode($list, true);
     $result = self::loadData('data_' . $list[0]['eTag']);
     if ($result === null) {
         self::$changedTree = false;
         ///Logger::Log('no result', LogLevel::DEBUG, false, dirname(__FILE__) . '/../calls.log');
         return;
     }
     self::$tree = json_decode(json_encode($list));
     $sources = array();
     $allOK = true;
     foreach ($list as $key => $elem) {
         if ($elem['toSid'] === null) {
             $sources[$key] = $elem;
         }
     }
     // call sources
     if ($allOK) {
         foreach ($sources as $key => $source) {
             $answ = Request::get($source['toURL'], array(), '', true);
             if (!isset($answ['headers']['Etag']) || $answ['headers']['Etag'] != $source['eTag']) {
                 $allOK = false;
                 ///Logger::Log('call '.$source['toURL'].(isset($answ['headers']['Etag']) ? ' is not equal, recvHash: '.$answ['headers']['Etag'] : '').' oldHash: '.$source['eTag'] , LogLevel::DEBUG, false, dirname(__FILE__) . '/../calls.log');
             } else {
                 ///Logger::Log('call '.$source['toURL'].' is equal' , LogLevel::DEBUG, false, dirname(__FILE__) . '/../calls.log');
             }
         }
     }
     if ($allOK) {
         self::$changedTree = true;
         if (isset($list[0])) {
             self::cacheDataSimple($sid, $list[0]['toName'], $list[0]['toURL'], $result, 200, $list[0]['toMethod']);
             ///Logger::Log('cache hit', LogLevel::DEBUG, false, dirname(__FILE__) . '/../calls.log');
         } else {
             ///Logger::Log('nonono', LogLevel::DEBUG, false, dirname(__FILE__) . '/../calls.log');
         }
     } else {
         // remove tree
         self::removeData('tree_' . $uTag);
     }
 }