/**
  * @param TestResults $testResults The test results to use for constructing the data array
  * @param string $medianMetric Metric to consider when selecting the median run
  * @return array An array containing all data about the test, in a form that can be encoded with JSON
  */
 public function resultDataArray($testResults, $medianMetric = "loadTime")
 {
     $testInfo = $this->testInfo->getInfoArray();
     $fvOnly = $this->testInfo->isFirstViewOnly();
     $cacheLabels = array('firstView', 'repeatView');
     // summary information
     $ret = array();
     $ret['id'] = $this->testInfo->getId();
     $url = $this->testInfo->getUrl();
     if (!$url) {
         $url = $testResults->getUrlFromRun();
     }
     $ret['url'] = $url;
     $urlGenerator = UrlGenerator::create(false, $this->urlStart, $this->testInfo->getId(), 0, 0);
     $ret['summary'] = $urlGenerator->resultSummary();
     $runs = $testResults->countRuns();
     if (isset($testInfo)) {
         if (array_key_exists('url', $testInfo) && strlen($testInfo['url'])) {
             $ret['testUrl'] = $testInfo['url'];
         }
         if (array_key_exists('location', $testInfo) && strlen($testInfo['location'])) {
             $locstring = $testInfo['location'];
             if (array_key_exists('browser', $testInfo) && strlen($testInfo['browser'])) {
                 $locstring .= ':' . $testInfo['browser'];
             }
             $ret['location'] = $locstring;
         }
         $testLocation = $this->testInfo->getTestLocation();
         if ($testLocation) {
             $ret['from'] = $testLocation;
         }
         if (array_key_exists('connectivity', $testInfo) && strlen($testInfo['connectivity'])) {
             $ret['connectivity'] = $testInfo['connectivity'];
         }
         if (array_key_exists('bwIn', $testInfo)) {
             $ret['bwDown'] = $testInfo['bwIn'];
         }
         if (array_key_exists('bwOut', $testInfo)) {
             $ret['bwUp'] = $testInfo['bwOut'];
         }
         if (array_key_exists('latency', $testInfo)) {
             $ret['latency'] = $testInfo['latency'];
         }
         if (array_key_exists('plr', $testInfo)) {
             $ret['plr'] = $testInfo['plr'];
         }
         if (array_key_exists('mobile', $testInfo)) {
             $ret['mobile'] = $testInfo['mobile'];
         }
         if (array_key_exists('label', $testInfo) && strlen($testInfo['label'])) {
             $ret['label'] = $testInfo['label'];
         }
         if (array_key_exists('completed', $testInfo)) {
             $ret['completed'] = $testInfo['completed'];
         }
         if (array_key_exists('tester', $testInfo) && strlen($testInfo['tester'])) {
             $ret['tester'] = $testInfo['tester'];
         }
         if (array_key_exists('testerDNS', $testInfo) && strlen($testInfo['testerDNS'])) {
             $ret['testerDNS'] = $testInfo['testerDNS'];
         }
         if (array_key_exists('runs', $testInfo) && $testInfo['runs']) {
             $runs = $testInfo['runs'];
         }
         if (array_key_exists('fvonly', $testInfo)) {
             $fvOnly = $testInfo['fvonly'] ? true : false;
         }
     }
     $cachedMax = 0;
     if (!$fvOnly) {
         $cachedMax = 1;
     }
     $ret['runs'] = $runs;
     $ret['fvonly'] = $fvOnly;
     $ret['successfulFVRuns'] = $testResults->countSuccessfulRuns(false);
     if (!$fvOnly) {
         $ret['successfulRVRuns'] = $testResults->countSuccessfulRuns(true);
     }
     // average
     $stats = array($testResults->getFirstViewAverage(), $testResults->getRepeatViewAverage());
     if (!$this->hasInfoFlag(self::WITHOUT_AVERAGE)) {
         $ret['average'] = array();
         for ($cached = 0; $cached <= $cachedMax; $cached++) {
             $label = $cacheLabels[$cached];
             $ret['average'][$label] = $stats[$cached];
         }
     }
     // standard deviation
     if (!$this->hasInfoFlag(self::WITHOUT_STDDEV)) {
         $ret['standardDeviation'] = array();
         for ($cached = 0; $cached <= $cachedMax; $cached++) {
             $label = $cacheLabels[$cached];
             $ret['standardDeviation'][$label] = array();
             foreach ($stats[$cached] as $key => $val) {
                 $ret['standardDeviation'][$label][$key] = $testResults->getStandardDeviation($key, $cached);
             }
         }
     }
     // median
     if (!$this->hasInfoFlag(self::WITHOUT_MEDIAN)) {
         $ret['median'] = array();
         for ($cached = 0; $cached <= $cachedMax; $cached++) {
             $label = $cacheLabels[$cached];
             $medianRun = $testResults->getMedianRunNumber($medianMetric, $cached == 1 ? true : false);
             if ($medianRun) {
                 $ret['median'][$label] = $this->medianRunDataArray($testResults->getRunResult($medianRun, $cached));
             }
         }
     }
     // runs
     if (!$this->hasInfoFlag(self::WITHOUT_RUNS)) {
         $ret['runs'] = array();
         for ($run = 1; $run <= $runs; $run++) {
             $ret['runs'][$run] = array();
             for ($cached = 0; $cached <= $cachedMax; $cached++) {
                 $label = $cacheLabels[$cached];
                 $ret['runs'][$run][$label] = $this->runDataArray($testResults->getRunResult($run, $cached));
             }
         }
     }
     return $ret;
 }
Пример #2
0
 /**
  * @param TestResults $testResults
  * @param string $median_metric
  * @param string $requestId
  * @param bool $medianFvOnly 
  */
 public function printAllResults($testResults, $median_metric, $requestId = null, $medianFvOnly = false)
 {
     $urlGenerator = UrlGenerator::create($this->friendlyUrls, $this->baseUrl, $this->testInfo->getId(), 0, 0);
     echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
     echo "<response>\n";
     echo "<statusCode>200</statusCode>\n";
     echo "<statusText>Ok</statusText>\n";
     if (!empty($requestId)) {
         echo "<requestId>{$requestId}</requestId>\n";
     }
     if (defined("VER_WEBPAGETEST")) {
         echo "<webPagetestVersion>" . VER_WEBPAGETEST . "</webPagetestVersion>";
     }
     echo "<data>\n";
     echo "<testId>" . $this->testInfo->getId() . "</testId>\n";
     echo "<summary>" . $urlGenerator->resultSummary() . "</summary>\n";
     $testInfo = $this->testInfo->getInfoArray();
     if ($testInfo) {
         if (@strlen($testInfo['url'])) {
             echo "<testUrl>" . xml_entities($testInfo['url']) . "</testUrl>\n";
         }
         if (@strlen($testInfo['location'])) {
             $locstring = $testInfo['location'];
             if (@strlen($testInfo['browser'])) {
                 $locstring .= ':' . $testInfo['browser'];
             }
             echo "<location>{$locstring}</location>\n";
         }
         $location = $this->testInfo->getTestLocation();
         if ($location) {
             echo "<from>" . xml_entities($location) . "</from>\n";
         }
         if (@strlen($testInfo['connectivity'])) {
             echo "<connectivity>{$testInfo['connectivity']}</connectivity>\n";
             echo "<bwDown>{$testInfo['bwIn']}</bwDown>\n";
             echo "<bwUp>{$testInfo['bwOut']}</bwUp>\n";
             echo "<latency>{$testInfo['latency']}</latency>\n";
             echo "<plr>{$testInfo['plr']}</plr>\n";
         }
         if (isset($testInfo['mobile'])) {
             echo "<mobile>" . xml_entities($testInfo['mobile']) . "</mobile>\n";
         }
         if (@strlen($testInfo['label'])) {
             echo "<label>" . xml_entities($testInfo['label']) . "</label>\n";
         }
         if (@strlen($testInfo['completed'])) {
             echo "<completed>" . gmdate("r", $testInfo['completed']) . "</completed>\n";
         }
         if (@strlen($testInfo['tester'])) {
             echo "<tester>" . xml_entities($testInfo['tester']) . "</tester>\n";
         }
         if (@strlen($testInfo['testerDNS'])) {
             echo "<testerDNS>" . xml_entities($testInfo['testerDNS']) . "</testerDNS>\n";
         }
     }
     // spit out the calculated averages
     $fv = $testResults->getFirstViewAverage();
     $rv = $testResults->getRepeatViewAverage();
     $runs = $testResults->countRuns();
     echo "<runs>{$runs}</runs>\n";
     echo "<successfulFVRuns>" . $testResults->countSuccessfulRuns(false) . "</successfulFVRuns>\n";
     if (isset($rv)) {
         echo "<successfulRVRuns>" . $testResults->countSuccessfulRuns(true) . "</successfulRVRuns>\n";
     }
     echo "<average>\n";
     echo "<firstView>\n";
     foreach ($fv as $key => $val) {
         $key = preg_replace('/[^a-zA-Z0-9\\.\\-_]/', '_', $key);
         echo "<{$key}>" . number_format($val, 0, '.', '') . "</{$key}>\n";
     }
     echo "</firstView>\n";
     if (isset($rv)) {
         echo "<repeatView>\n";
         foreach ($rv as $key => $val) {
             $key = preg_replace('/[^a-zA-Z0-9\\.\\-_]/', '_', $key);
             echo "<{$key}>" . number_format($val, 0, '.', '') . "</{$key}>\n";
         }
         echo "</repeatView>\n";
     }
     echo "</average>\n";
     echo "<standardDeviation>\n";
     echo "<firstView>\n";
     foreach ($fv as $key => $val) {
         $key = preg_replace('/[^a-zA-Z0-9\\.\\-_]/', '_', $key);
         echo "<{$key}>" . $testResults->getStandardDeviation($key, false) . "</{$key}>\n";
     }
     echo "</firstView>\n";
     if (isset($rv)) {
         echo "<repeatView>\n";
         foreach ($rv as $key => $val) {
             $key = preg_replace('/[^a-zA-Z0-9\\.\\-_]/', '_', $key);
             echo "<{$key}>" . $testResults->getStandardDeviation($key, true) . "</{$key}>\n";
         }
         echo "</repeatView>\n";
     }
     echo "</standardDeviation>\n";
     // output the median run data
     $medianMode = !empty($_REQUEST["medianRun"]) && $_REQUEST["medianRun"] == "fastest" ? "fastest" : "median";
     $fvMedian = $testResults->getMedianRunNumber($median_metric, false, $medianMode);
     if ($fvMedian) {
         echo "<median>\n";
         $this->printMedianRun($testResults->getRunResult($fvMedian, false));
         if (isset($rv)) {
             $rvMedian = $medianFvOnly ? $fvMedian : $testResults->getMedianRunNumber($median_metric, true, $medianMode);
             if ($rvMedian) {
                 $this->printMedianRun($testResults->getRunResult($rvMedian, true));
             }
         }
         echo "</median>\n";
     }
     // spit out the raw data for each run
     for ($i = 1; $i <= $runs; $i++) {
         echo "<run>\n";
         echo "<id>{$i}</id>\n";
         $this->printRun($testResults->getRunResult($i, false));
         $this->printRun($testResults->getRunResult($i, true));
         echo "</run>\n";
     }
     echo "</data>\n";
     echo "</response>\n";
 }