Example #1
0
 /**
  *
  */
 public function testTime()
 {
     $this->assertEquals(time(), intval(Query::time() / 10));
 }
Example #2
0
 /**
  * @param Query $query
  * @param string[] $divisions
  * @return array
  */
 private function divisionsWithId(Query $query, $divisions)
 {
     $result = [];
     $this->stdout("translate division to division_id:\n", Console::FG_GREEN);
     $total = count($divisions);
     Console::startProgress(0, $total);
     $n = 0;
     $time = Query::time();
     foreach ($divisions as $division) {
         $result[$division] = $query->idByDivision($division);
         $n++;
         if ($time < Query::time()) {
             Console::updateProgress($n, $total);
             $time = Query::time();
         }
     }
     Console::updateProgress($total, $total);
     Console::endProgress();
     $this->stdout(" completed!\n", Console::FG_GREEN);
     return $result;
 }
Example #3
0
 /**
  * @param OutputInterface $output
  * @param Query $query
  * @param $name
  * @param bool $noProgress
  */
 private function dumpCount(OutputInterface $output, Query $query, $name, $noProgress)
 {
     $filename = 'dump_' . $name . '_count.json';
     $result = [];
     if (count($query) > 0) {
         $output->writeln("<info>dump {$filename}:</info>");
         if (!$noProgress) {
             $this->progress = new ProgressBar($output, count($query));
             $this->progress->start();
         }
         $n = 0;
         $time = Query::time();
         $last = -1;
         foreach ($query as $ip => $division) {
             if (is_integer($division)) {
                 $id = $division;
                 $division = $query->divisionById($id);
             } else {
                 $id = $query->idByDivision($division);
             }
             if ($id === null) {
                 die(long2ip($ip));
             }
             $count = $ip - $last;
             $last = $ip;
             $result[$id]['id'] = $id;
             $result[$id]['division'] = empty($id) ? '' : $division;
             @($result[$id]['records'] += 1);
             // 纪录数
             @($result[$id]['count'] += $count);
             // IP 数
             if ($id > 100000) {
                 // 中国
                 @($result[1]['records'] += 1);
                 @($result[1]['children_records'] += 1);
                 @($result[1]['count'] += $count);
                 @($result[1]['children_count'] += $count);
                 $province = intval($id / 10000) * 10000;
                 if ($province != $id) {
                     @($result[$province]['records'] += 1);
                     @($result[$province]['children_records'] += 1);
                     @($result[$province]['count'] += $count);
                     @($result[$province]['children_count'] += $count);
                 }
             }
             $n++;
             if (!$noProgress && $time < Query::time()) {
                 $this->progress->setProgress($n);
                 $time = Query::time();
             }
         }
         if (!$noProgress) {
             $this->progress->finish();
         }
         $output->writeln('<info> completed!</info>');
     }
     ksort($result);
     $result = array_map(function ($data) {
         $result = ['id' => $data['id'], 'division' => $data['division'], 'records' => $data['records'], 'count' => $data['count']];
         if (isset($data['children_records'])) {
             $result['self']['records'] = $data['records'] - $data['children_records'];
             $result['children']['records'] = $data['children_records'];
         }
         if (isset($data['children_count'])) {
             $result['self']['count'] = $data['count'] - $data['children_count'];
             $result['children']['count'] = $data['children_count'];
         }
         return $result;
     }, array_values($result));
     if (count($result) > 0) {
         $this->write($output, $filename, $result);
     }
 }