/**
  * Summarizes all the requests made in this process and reports
  * them along with the test they belong to.
  * Only public due to php 5.3 not having access from closures
  */
 public static function reportLogContexts()
 {
     global $wgRequest;
     if (!self::$logContexts) {
         return;
     }
     $ut = UserTesting::getInstance();
     if (!$ut->getActiveTestNames()) {
         return;
     }
     $queries = array();
     $parameters = array('index' => array(), 'queryType' => array());
     $elasticTook = 0;
     $hits = 0;
     foreach (self::$logContexts as $context) {
         $hits += isset($context['hitsTotal']) ? $context['hitsTotal'] : 0;
         if (isset($context['query'])) {
             $queries[] = $context['query'];
         }
         if (isset($context['elasticTookMs'])) {
             $elasticTook += $context['elasticTookMs'];
         }
         if (isset($context['index'])) {
             $parameters['index'][] = $context['index'];
         }
         if (isset($context['queryType'])) {
             $parameters['queryType'][] = $context['queryType'];
         }
     }
     foreach (array('index', 'queryType') as $key) {
         $parameters[$key] = array_unique($parameters[$key]);
     }
     $message = array(wfWikiId(), '', FormatJson::encode($queries), $hits, self::getExecutionContext(), $elasticTook, $wgRequest->getIP(), preg_replace("/[\t\"']/", "", $wgRequest->getHeader('User-Agent')), FormatJson::encode($parameters));
     $tests = array();
     $logger = LoggerFactory::getInstance('CirrusSearchUserTesting');
     foreach ($ut->getActiveTestNames() as $test) {
         $bucket = $ut->getBucket($test);
         $message[1] = "{$test}-{$bucket}";
         $logger->debug(implode("\t", $message));
     }
     self::$logContexts = null;
 }
 /**
  * @dataProvider providerChooseBucket
  */
 public function testChooseBucket($expect, $probability, array $buckets)
 {
     $this->assertEquals($expect, UserTesting::chooseBucket($probability, $buckets));
 }
 private static function buildUserTestingLog()
 {
     global $wgRequest;
     $ut = UserTesting::getInstance();
     if (!$ut->getActiveTestNames()) {
         return;
     }
     $queries = array();
     $parameters = array('index' => array(), 'queryType' => array(), 'acceptLang' => $GLOBALS['wgRequest']->getHeader('Accept-Language'));
     $elasticTook = 0;
     $hits = 0;
     foreach (self::$logContexts as $context) {
         $hits += isset($context['hitsTotal']) ? $context['hitsTotal'] : 0;
         if (isset($context['query'])) {
             $queries[] = $context['query'];
         }
         if (isset($context['elasticTookMs'])) {
             $elasticTook += $context['elasticTookMs'];
         }
         if (isset($context['index'])) {
             $parameters['index'][] = $context['index'];
         }
         if (isset($context['queryType'])) {
             $parameters['queryType'][] = $context['queryType'];
         }
         if (!empty($context['langdetect'])) {
             $parameters['langdetect'] = $context['langdetect'];
         }
     }
     foreach (array('index', 'queryType') as $key) {
         $parameters[$key] = array_values(array_unique($parameters[$key]));
     }
     $message = array(wfWikiId(), '', FormatJson::encode($queries), $hits, self::getExecutionContext(), $elasticTook, $wgRequest->getIP(), preg_replace("/[\t\"']/", "", $wgRequest->getHeader('User-Agent')), FormatJson::encode($parameters), self::generateIdentToken());
     $logger = LoggerFactory::getInstance('CirrusSearchUserTesting');
     foreach ($ut->getActiveTestNames() as $test) {
         $bucket = $ut->getBucket($test);
         $message[1] = "{$test}-{$bucket}";
         $logger->debug(implode("\t", $message));
     }
 }