/** * */ public function testTime() { $this->assertEquals(time(), intval(Query::time() / 10)); }
/** * @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; }
/** * @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); } }