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