/** * SyncMachine constructor. * * @param string $gameVersion * @param string $esHost */ public function __construct($gameVersion, $esHost) { $this->gameVersion = $gameVersion; $this->esHost = $esHost; $date = date('Ymd'); $persist = new AggregatorPersist(LOG_DIR . '/' . $gameVersion . '.uid.persist'); $this->aggregator = new UidAggregator($persist); $this->shardList = ShardHelper::listShardId($gameVersion); $this->logFile = LOG_DIR . '/' . $date . '/' . $gameVersion . '.machine'; $this->prepareLogDir($this->logFile); $this->dataProvider = new UserDetailProvider($gameVersion, PdoFactory::makePool($gameVersion)); $this->indexer = IndexerFactory::make($esHost, $gameVersion, self::FLUSH_MAGIC_NUMBER); }
$fromDate = date_create_from_format('Ymd', $fromDay); if (!$fromDate instanceof \DateTime) { appendLog(sprintf('from [%s] not valid', $fromDay)); return; } $toDate = date_create_from_format('Ymd', $toDay); if (!$toDate instanceof \DateTime) { appendLog(sprintf('to [%s] not valid', $toDay)); return; } $pdoPool = PdoFactory::makePool($gameVersion); $installUidProvider = new InstallUidProvider($gameVersion, $pdoPool); $userDetailProvider = new UserDetailProvider($gameVersion, $pdoPool); $magicNumber = isset($options['magic']) ? (int) $options['magic'] : 500; assert($magicNumber > 10); $indexer = IndexerFactory::make(ELASTIC_SEARCH_HOST, $gameVersion, $magicNumber); if ($verbose) { dump(sprintf('version: %s, from: %s, to: %s, safe: %d, magic: %d', $gameVersion, $fromDay, $toDay, $safeRound, $magicNumber)); } $calendarDayGenerator = CalendarDayGenerator::generate($fromDate->getTimestamp(), $toDate->getTimestamp()); $totalUser = 0; $processedRound = 0; foreach ($calendarDayGenerator as $calendarDay) { $markerDate = new DateTimeImmutable($calendarDay); if ($calendarMarker->isMarked($markerDate)) { appendLog('bypass ' . $markerDate->format('Y-m-d')); continue; } $msg = basename(__FILE__) . ': process for ' . $calendarDay . ' run with ts ' . date('c'); appendLog($msg); $groupedUidList = $installUidProvider->generate($calendarDay, function ($shardId, $userCount, $delta) {
} else { assert(isset($options['gv']), 'game version not defined'); $gameVersion = trim($options['gv']); } $esHost = isset($options['es']) ? $options['es'] : '52.19.73.190'; assert(isset($options['uid']), 'uid not defined'); $uid = trim($options['uid']); $msg = sprintf('game version: %s, ES host: %s, uid: %s', $gameVersion, $esHost, $uid); $verbose && dump($msg); $provider = new UserDetailProvider($gameVersion, PdoFactory::makePool($gameVersion)); $groupedUserList = array_filter($provider->find([$uid])); if ($verbose) { dump(__FILE__); dump($groupedUserList); } $indexer = IndexerFactory::make($esHost, $gameVersion); foreach ($groupedUserList as $shardId => $shardUserList) { $delta = $indexer->batchUpdate($shardUserList); $batchResult = $indexer->getBatchResult(); dump(__FILE__); array_map(function ($errorString) { $decoded = json_decode($errorString, true); if (is_array($decoded)) { dump($decoded); } else { dump($errorString); } }, $batchResult); // dump($indexer->getLastRoundData()); dump('cost ' . PHP_Timer::secondsToTimeString($delta[0])); }