/** * */ public function test() { $gameVersion = self::$gameVersion; $shardIdList = ShardHelper::listShardId($gameVersion); $queue = new UidQueue(self::$dir, $gameVersion, $shardIdList); $groupedUidList = ['db1' => [1, 2, 3], 'db2' => [21, 22, 23]]; $queue->push($groupedUidList); $content = $queue->pop(); foreach ($groupedUidList as $shardId => $expectedUidList) { static::assertEquals($expectedUidList, $content[$shardId]); } }
/** * @param int $repeatTimes * @param int $waitTime */ public function run($repeatTimes, $waitTime) { $queue = new UidQueue(UID_QUEUE_DIR, $this->gameVersion, $this->shardList); $groupedUidList = $queue->pop(); array_walk($groupedUidList, function (array $uidList, $shardId) { if (count($uidList) === 0) { return; } appendLog(__CLASS__ . ': [before aggregate] ' . $shardId . ' have uid ' . count($uidList)); }); $afterAggregate = $this->aggregate($groupedUidList, $repeatTimes, $waitTime); $now = date('Y-m-d H:i:s'); array_walk($afterAggregate, function (array $uidList, $shardId) use($now) { if (count($uidList) === 0) { return; } appendLog(__CLASS__ . ': [after aggregate] ' . $shardId . ' have uid ' . count($uidList)); array_map(function ($uid) use($now) { \error_log(sprintf('%d => %s' . PHP_EOL, $uid, $now), 3, $this->logFile); }, $uidList); }); (new Manager($this->dataProvider, $this->indexer))->updateES($afterAggregate); }
$msg = sprintf('game version: %s, specifiedDate=%s, interval=%d, round=%d, start at: %s, quit at: %s', $gameVersion, $specifiedDate, $interval, $round, date('H:i:s'), date('H:i:s', $quitTimestamp)); dump($msg); } $logFileGetter = function ($gameVersion, $date) { $logDate = str_replace('-', '', $date); $filePath = LOG_DIR . '/' . $logDate . '/' . $gameVersion . '.install'; $dir = dirname($filePath); if (!is_dir($dir)) { mkdir($dir, 0755, true); } return $filePath; }; $myself = basename(__FILE__); $installUidProvider = new InstallUidProvider($gameVersion, PdoFactory::makePool($gameVersion)); $shardList = ShardHelper::listShardId($gameVersion); $queue = new UidQueue(UID_QUEUE_DIR, $gameVersion, $shardList); $stepGenerator = WorkRoundGenerator::generate($now, $quitTimestamp, $interval, false); foreach ($stepGenerator as $timestamp) { $msg = $myself . ': ' . date('c', $timestamp) . ' run with ts ' . date('c', $timestamp); appendLog($msg); $date = $specifiedDate ? $specifiedDate : date('Y-m-d'); $groupedUidList = $installUidProvider->generate($date, function ($shardId, $userCount, $delta) { if ($userCount === 0) { return; } appendLog(sprintf('%s install(%d) cost %s', $shardId, $userCount, PHP_Timer::secondsToTimeString($delta))); }); $queue->push($groupedUidList); $deltaList = $installUidProvider->getDeltaList(); $totalCount = 0; foreach ($groupedUidList as $shardId => $shardUidList) {