PageRenderTime 45ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/dist/webpagetest/www/aggregate.php

http://webpagetest.googlecode.com/
PHP | 175 lines | 164 code | 5 blank | 6 comment | 30 complexity | d8ca1ceee3edd3f3783b8ef6ee262f43 MD5 | raw file
Possible License(s): AGPL-1.0, Apache-2.0, GPL-3.0, LGPL-3.0, MIT, BSD-3-Clause, ISC, LGPL-2.1
  1. <?php
  2. include 'common.inc';
  3. include 'page_data.inc';
  4. set_time_limit(300);
  5. $use_median_run = false;
  6. if (array_key_exists('run', $_REQUEST) && $_REQUEST['run'] == 'median')
  7. $use_median_run = true;
  8. // only support batch tests for now
  9. if( isset($test['test']) && $test['test']['batch'] )
  10. {
  11. header("Content-disposition: attachment; filename={$id}_aggregate.csv");
  12. header("Content-type: text/csv");
  13. // load the test data
  14. $fvOnly = $test['test']['fvonly'];
  15. $tests = null;
  16. if( gz_is_file("$testPath/tests.json") )
  17. {
  18. $legacyData = json_decode(gz_file_get_contents("$testPath/tests.json"), true);
  19. $tests = array();
  20. $tests['variations'] = array();
  21. $tests['urls'] = array();
  22. foreach( $legacyData as &$legacyTest )
  23. $tests['urls'][] = array('u' => $legacyTest['url'], 'id' => $legacyTest['id']);
  24. }
  25. elseif( gz_is_file("$testPath/bulk.json") )
  26. $tests = json_decode(gz_file_get_contents("$testPath/bulk.json"), true);
  27. if( isset($tests) )
  28. {
  29. // list of metrics that will be produced
  30. // for each of these, the median, average and std dev. will be calculated
  31. $metrics = array( 'docTime' => 'Document Complete',
  32. 'fullyLoaded' => 'Fully Loaded',
  33. 'TTFB' => 'First Byte',
  34. 'render' => 'Start Render',
  35. 'bytesInDoc' => 'Bytes In (Doc)',
  36. 'requestsDoc' => 'Requests (Doc)',
  37. 'loadEventStart' => 'Load Event Start',
  38. 'SpeedIndex' => 'Speed Index' );
  39. // generate the header row of stats
  40. echo '"Test","URL","FV Successful Tests",';
  41. if ($use_median_run) {
  42. echo '"FV Median Run",';
  43. foreach( $metrics as $metric )
  44. echo "\"FV $metric\",";
  45. } else {
  46. foreach( $metrics as $metric )
  47. echo "\"FV $metric Median\",\"FV $metric Avg\",\"FV $metric Std. Dev\",";
  48. }
  49. if( !$fvOnly )
  50. {
  51. echo '"RV Successful Tests",';
  52. if ($use_median_run) {
  53. echo '"RV Median Run",';
  54. foreach( $metrics as $metric )
  55. echo "\"RV $metric\",";
  56. } else {
  57. foreach( $metrics as $metric )
  58. echo "\"RV $metric Median\",\"RV $metric Avg\",\"RV $metric Std. Dev\",";
  59. }
  60. }
  61. foreach( $tests['variations'] as &$variation )
  62. {
  63. $label = $variation['l'];
  64. echo "\"$label URL\",\"$label FV Successful Tests\",";
  65. if ($use_median_run) {
  66. echo "\"$label FV Median Run\",";
  67. foreach( $metrics as $metric )
  68. echo "\"$label FV $metric\",";
  69. } else {
  70. foreach( $metrics as $metric )
  71. echo "\"$label FV $metric Median\",\"$label FV $metric Avg\",\"$label FV $metric Std. Dev\",";
  72. }
  73. if( !$fvOnly )
  74. {
  75. echo "\"$label RV Successful Tests\",";
  76. if ($use_median_run) {
  77. echo "\"$label RV Median Run\",";
  78. foreach( $metrics as $metric )
  79. echo "\"$label RV $metric\",";
  80. } else {
  81. foreach( $metrics as $metric )
  82. echo "\"$label RV $metric Median\",\"$label RV $metric Avg\",\"$label RV $metric Std. Dev\",";
  83. }
  84. }
  85. }
  86. echo "Test ID\r\n";
  87. // and now the actual data
  88. foreach( $tests['urls'] as &$test )
  89. {
  90. RestoreTest($test['id']);
  91. $label = $test['l'];
  92. $url = $test['u'];
  93. $testPath = './' . GetTestPath($test['id']);
  94. $pageData = loadAllPageData($testPath);
  95. if( count($pageData) )
  96. {
  97. echo "\"$label\",\"$url\",";
  98. $cached = 0;
  99. if( !$fvOnly )
  100. $cached = 1;
  101. for( $cacheVal = 0; $cacheVal <= $cached; $cacheVal++ )
  102. {
  103. $count = CountSuccessfulTests($pageData, $cacheVal);
  104. echo "\"$count\",";
  105. if ($use_median_run) {
  106. $median_run = GetMedianRun($pageData, $cacheVal, $median_metric);
  107. echo "\"$median_run\",";
  108. }
  109. foreach( $metrics as $metric => $metricLabel )
  110. {
  111. if ($use_median_run) {
  112. echo "\"{$pageData[$median_run][$cacheVal][$metric]}\",";
  113. } else {
  114. CalculateAggregateStats($pageData, $cacheVal, $metric, $median, $avg, $stdDev);
  115. echo "\"$median\",\"$avg\",\"$stdDev\",";
  116. }
  117. }
  118. }
  119. foreach( $tests['variations'] as $variationIndex => &$variation )
  120. {
  121. $urlVariation = CreateUrlVariation($url, $variation['q']);
  122. echo "\"$urlVariation\",";
  123. $id = $test['v'][$variationIndex];
  124. RestoreTest($id);
  125. $testPath = './' . GetTestPath($id);
  126. $pageData = loadAllPageData($testPath);
  127. for( $cacheVal = 0; $cacheVal <= $cached; $cacheVal++ )
  128. {
  129. if( count($pageData) )
  130. {
  131. $count = CountSuccessfulTests($pageData, $cacheVal);
  132. echo "\"$count\",";
  133. if ($use_median_run) {
  134. $median_run = GetMedianRun($pageData, $cacheVal, $median_metric);
  135. echo "\"$median_run\",";
  136. }
  137. foreach( $metrics as $metric => $metricLabel )
  138. {
  139. if ($use_median_run) {
  140. echo "\"{$pageData[$median_run][$cacheVal][$metric]}\",";
  141. } else {
  142. CalculateAggregateStats($pageData, $cacheVal, $metric, $median, $avg, $stdDev);
  143. echo "\"$median\",\"$avg\",\"$stdDev\",";
  144. }
  145. }
  146. }
  147. else
  148. {
  149. echo '"",';
  150. if ($use_median_run)
  151. echo '"",';
  152. foreach( $metrics as $metric => $metricLabel ) {
  153. if ($use_median_run)
  154. echo '"",';
  155. else
  156. echo '"","","",';
  157. }
  158. }
  159. }
  160. }
  161. }
  162. echo "\"{$test['id']}\"\r\n";
  163. }
  164. }
  165. }
  166. else
  167. {
  168. header("HTTP/1.0 404 Not Found");
  169. }
  170. ?>