コード例 #1
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]);
     }
 }
コード例 #2
0
 /**
  * @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);
 }
コード例 #3
0
    $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) {