/** * */ public function testReadUserInfo() { if (extension_loaded('xdebug')) { $this->assertTrue(true); return; } $gameVersion = 'tw'; $pool = PdoFactory::makePool($gameVersion); $shardIdList = ShardHelper::listShardId($gameVersion); $uidList = [474000, 474001, 474002]; $userList = []; foreach ($shardIdList as $shardId) { $pdo = $pool->getByShardId($shardId); $generator = CommonInfoProvider::readUserInfo($pdo, $uidList, 1); foreach ($generator as $batchUserList) { array_walk($batchUserList, function (array $userInfo, $uid) use(&$userList) { $userList[$uid] = $userInfo; }); } } static::assertEquals($uidList, array_keys($userList)); foreach ($userList as $user) { static::assertTrue(is_array($user)); static::assertArrayHasKey('uid', $user); static::assertArrayHasKey('snsid', $user); } }
/** * @param string $gameVersion * * @return PdoPool */ public static function makePool($gameVersion) { if (self::$instance === null) { $shardOptions = ShardHelper::listShardOptions($gameVersion); self::$instance = new PdoPool($shardOptions); } return self::$instance; }
/** * */ public function testListShardOptions() { $options = ShardHelper::listShardOptions('tw'); foreach ($options as $shardId => $option) { static::assertStringStartsWith('db', $shardId); static::assertTrue(is_array($option)); static::assertArrayHasKey('shardId', $option); } }
/** * */ 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]); } }
/** * 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); }
if ($name === 'PDO::ATTR_CONNECTION_STATUS') { $value = call_user_func($connectionStatusParser, $value); } } catch (PDOException $e) { $value = 'not supported'; $errMsg = $e->getMessage(); if (strpos($errMsg, 'not support') === false) { $value .= '' . $errMsg; } } $info[$name] = $value; } return $info; }; $pdoOptionChecker = function (PDO $pdo) use($optionsReader) { $attributes = ['SERVER_INFO', 'CONNECTION_STATUS']; return call_user_func($optionsReader, $pdo, $attributes); }; $option = getopt('', ['gv:']); $gameVersion = isset($option['gv']) ? trim($option['gv']) : 'tw'; $shardConfigList = \Database\ShardHelper::shardConfigGenerator($gameVersion); $infoList = []; foreach ($shardConfigList as $option) { $pdo = \Database\PdoFactory::makePool($gameVersion)->getByOption($option); if ($pdo === false) { dump('error on ' . json_encode($option)); continue; } $infoList[$option['shardId']] = call_user_func($pdoOptionChecker, $pdo); } dump($infoList);
if ($verbose) { $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;