コード例 #1
0
 /**
  *
  */
 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);
     }
 }
コード例 #2
0
 /**
  * @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;
 }
コード例 #3
0
 /**
  *
  */
 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);
     }
 }
コード例 #4
0
 /**
  *
  */
 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]);
     }
 }
コード例 #5
0
 /**
  * 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);
 }
コード例 #6
0
ファイル: pdo.php プロジェクト: jiangyu7408/notification
            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);
コード例 #7
0
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;