示例#1
0
文件: Timezone.php 项目: vkoptev/olap
 public function setData(array &$data)
 {
     $currentTZ = date_default_timezone_get();
     date_default_timezone_set("UTC");
     $setter = $this->sender()->getPushData($data);
     $values = [$setter->getQuery()];
     $params = $setter->getParams();
     foreach ($this->getStrictDimensions() as $dimension) {
         while ($dimension) {
             $key = ":{$dimension->getTableName()}_value";
             $params[$key] = $dimension->mapValue($data);
             $values[] = $key;
             if ($dimension->getTableName() === $this->getDimension('dimension_day')->getTableName()) {
                 $dimension = null;
             } else {
                 $dimension = $dimension->getParent();
             }
         }
     }
     $values = implode(', ', $values);
     //        $data["{$this->getTableName()}_id"] = $this->db()->fetchColumn("SELECT * FROM {$this->setterFunctionName()}($values)", $params);
     $data["__sql"][] = "SELECT * FROM {$this->setterFunctionName()}({$values}); ";
     $data["__params"] = array_merge(empty($data['__params']) ? [] : $data['__params'], $params);
     Event\Ruler::getInstance()->trigger(Event\Type::EVENT_SET_DATA, $this->getTableName(), ['data' => $data]);
     date_default_timezone_set($currentTZ);
 }
示例#2
0
文件: Server.php 项目: vkoptev/olap
 public static function testMultiThreadAggregation(\OLAP\Server $server, $cmd, $dates)
 {
     if ($dates) {
         echo "start " . $dates . "\n";
         $dates = json_decode($dates, true);
         if ($dates) {
             Event\Ruler::getInstance()->trigger(Event\Type::EVENT_SET_ALL_DATA, null, ['date' => $dates]);
         }
     } else {
         $n = 10;
         $start = strtotime("2014-12-31 21:00:00");
         $end = strtotime(date("2015-02-13 23:00:00", strtotime('+1day')));
         $step = floor(($end - $start) / $n);
         $workers = [];
         for ($i = $start; $i < $end; $i += $step) {
             $worker = (object) ['cmd' => str_replace('%thread%', '"' . addslashes(json_encode(['from' => date('Y-m-d H:i:s', $i), 'to' => date('Y-m-d H:i:s', $i + $step)])) . '"', $cmd), 'descriptorspec' => [0 => ["pipe", "r"], 1 => ["pipe", "w"], 2 => ["file", "/dev/null", "w"]], 'pipe' => [], 'resource' => null];
             $worker->resource = proc_open($worker->cmd, $worker->descriptorspec, $worker->pipe);
             if (is_resource($worker->resource)) {
                 $workers[] = $worker;
             }
         }
         while ($workers) {
             foreach ($workers as $i => $worker) {
                 stream_set_blocking($worker->pipe[1], 0);
                 echo stream_get_contents($worker->pipe[1]);
                 flush();
                 $status = proc_get_status($worker->resource);
                 if (!$status['running']) {
                     fclose($worker->pipe[0]);
                     fclose($worker->pipe[1]);
                     proc_close($worker->resource);
                     unset($workers[$i]);
                 }
             }
             sleep(5);
         }
     }
 }
示例#3
0
文件: Fact.php 项目: vkoptev/olap
 public function setData(array &$data)
 {
     $setter = $this->sender()->getPushData($data);
     $values = [$setter->getQuery()];
     $params = $setter->getParams();
     if ($parent = $this->getParent()) {
         //            $values[] = ":{$parent->getTableName()}_id";
         //            $params[":{$parent->getTableName()}_id"] = $data["{$parent->getTableName()}_id"];
         $values[] = $data["{$parent->getTableName()}_id"];
     }
     foreach ($this->getStrictDimensions() as $dimension) {
         while ($dimension) {
             $key = ":{$dimension->getTableName()}_value";
             $params[$key] = $dimension->mapValue($data);
             $values[] = $key;
             $dimension = $dimension->getParent();
         }
     }
     $setValues = implode(', ', $values);
     $values[0] = 'null';
     $idValues = implode(', ', $values);
     $data["{$this->getTableName()}_id"] = "{$this->setterFunctionName()}({$idValues})";
     $data["__sql"][] = "SELECT * FROM {$this->setterFunctionName()}({$setValues}); ";
     $data["__params"] = array_merge(empty($data['__params']) ? [] : $data['__params'], $params);
     //        $data["{$this->getTableName()}_id"] = $this->db()->fetchColumn("SELECT * FROM {$this->setterFunctionName()}($values)", $params);
     Event\Ruler::getInstance()->trigger(Event\Type::EVENT_SET_DATA, $this->getTableName(), ['data' => &$data]);
 }