Example #1
0
/**
* Check the status of any pending tests
* 
* @param mixed $state
*/
function CheckBenchmarkStatus($benchmark, &$state)
{
    global $logFile;
    if ($state['running']) {
        $start_time = $state['last_run'];
        if (!is_dir("./results/benchmarks/{$benchmark}/data")) {
            mkdir("./results/benchmarks/{$benchmark}/data", 0777, true);
        }
        $dataFile = "./results/benchmarks/{$benchmark}/data/" . gmdate('Ymd_Hi', $start_time) . '.json';
        logMsg("Data File: {$dataFile}", "./log/{$logFile}", true);
        $updated = 0;
        if (gz_is_file($dataFile)) {
            $data = json_decode(gz_file_get_contents($dataFile), true);
            logMsg("Loaded " . count($data) . " existing records", "./log/{$logFile}", true);
        } else {
            $data = array();
            logMsg("Data file doesn't exist, starting fresh", "./log/{$logFile}", true);
        }
        $done = true;
        $total_tests = count($state['tests']);
        $pending_tests = 0;
        foreach ($state['tests'] as &$test) {
            if (!$test['completed']) {
                $status = GetTestStatus($test['id'], true);
                $now = time();
                if ($status['statusCode'] >= 400) {
                    logMsg("Test {$test['id']} : Failed - {$status['statusText']}", "./log/{$logFile}", true);
                    $test['completed'] = $now;
                } elseif ($status['statusCode'] == 200) {
                    logMsg("Test {$test['id']} : Completed", "./log/{$logFile}", true);
                    if (array_key_exists('completeTime', $status) && $status['completeTime']) {
                        $test['completed'] = $status['completeTime'];
                    } elseif (array_key_exists('startTime', $status) && $status['startTime']) {
                        $test['completed'] = $status['startTime'];
                    } else {
                        $test['completed'] = $now;
                    }
                } else {
                    $pending_tests++;
                    $done = false;
                    logMsg("Test {$test['id']} : {$status['statusText']}", "./log/{$logFile}", true);
                }
                // collect the test data and archive the test as we get each result
                if ($test['completed']) {
                    $updated++;
                    CollectResults($test, $data);
                    if (ArchiveTest($test['id'])) {
                        logMsg("Test {$test['id']} : Archived", "./log/{$logFile}", true);
                        $path = GetTestPath($test['id']);
                        if (strlen($path)) {
                            delTree($path);
                        }
                    }
                }
            }
        }
        if ($updated) {
            logMsg("Data updated for for {$updated} tests, total data rows: " . count($data), "./log/{$logFile}", true);
            gz_file_put_contents($dataFile, json_encode($data));
        } else {
            logMsg("No test data updated", "./log/{$logFile}", true);
        }
        $now = time();
        $elapsed = $now > $start_time ? $now - $start_time : 0;
        if ($elapsed > 172800) {
            // kill it if it has been running for 2 days
            $done = true;
        }
        if ($done) {
            logMsg("Benchmark '{$benchmark}' is finished after running for {$elapsed} seconds", "./log/{$logFile}", true);
            $state['runs'][] = $start_time;
            $state['running'] = false;
            $state['needs_aggregation'] = true;
            unset($state['tests']);
        } else {
            logMsg("'{$benchmark}' is waiting for {$pending_tests} of {$total_tests} tests after {$elapsed} seconds", "./log/{$logFile}", true);
        }
        logMsg("Done checking status", "./log/{$logFile}", true);
    }
}
<?php

require_once 'common.inc';
require_once 'page_data.inc';
require_once 'testStatus.inc';
require_once 'video/visualProgress.inc.php';
require_once 'domains.inc';
require_once 'breakdown.inc';
require_once 'devtools.inc.php';
require_once 'archive.inc';
if (array_key_exists('batch', $test['test']) && $test['test']['batch']) {
    include 'resultBatch.inc';
} else {
    $ret = array('data' => GetTestStatus($id));
    $ret['statusCode'] = $ret['data']['statusCode'];
    $ret['statusText'] = $ret['data']['statusText'];
    if ($ret['statusCode'] == 200) {
        $ret['data'] = GetTestResult($id);
    }
    json_response($ret);
}
/**
* Gather all of the data for a given test and return it as an array
* 
* @param mixed $id
*/
function GetTestResult($id)
{
    global $url;
    global $median_metric;
    $testPath = './' . GetTestPath($id);
Example #3
0
require_once 'page_data.inc';
require_once 'testStatus.inc';
require_once 'video/visualProgress.inc.php';
require_once 'domains.inc';
require_once 'breakdown.inc';
require_once 'devtools.inc.php';
// see if we are sending abbreviated results
$pagespeed = 0;
if (array_key_exists('pagespeed', $_REQUEST)) {
    $pagespeed = (int) $_REQUEST['pagespeed'];
}
if (isset($test['test']) && $test['test']['batch']) {
    BatchResult($id, $testPath);
} else {
    // see if the test is actually finished
    $status = GetTestStatus($id);
    if (isset($test['test']['completeTime'])) {
        $host = $_SERVER['HTTP_HOST'];
        $uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
        $path = substr($testPath, 1);
        $pageData = loadAllPageData($testPath);
        $msLoad = microtime(true);
        // if we don't have an url, try to get it from the page results
        if (!strlen($url)) {
            $url = $pageData[1][0]['URL'];
        }
        header('Content-type: text/xml');
        echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
        echo "<response>\n";
        echo "<statusCode>200</statusCode>\n";
        echo "<statusText>Ok</statusText>\n";
Example #4
0
     }
     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);
Example #5
0
    $searches = explode(',', $_REQUEST['searches']);
}
$maxReqs = 0;
if (isset($_REQUEST['maxReqs']) && strlen($_REQUEST['maxReqs'])) {
    $maxReqs = $_REQUEST['maxReqs'];
}
header("Content-disposition: attachment; filename={$id}_headersMatch.csv");
header("Content-type: text/csv");
// list of metrics that will be produced
// for each of these, the median, average and std dev. will be calculated
echo "\"Test ID\",\"Found\"\r\n";
// and now the actual data
foreach ($testIds as &$testId) {
    $cached = 0;
    RestoreTest($testId);
    GetTestStatus($testId);
    $testPath = './' . GetTestPath($testId);
    $pageData = loadAllPageData($testPath);
    $medianRun = GetMedianRun($pageData, $cached);
    $secured = 0;
    $haveLocations = 1;
    $requests = getRequests($testId, $testPath, $medianRun, $cached, $secure, $haveLocations, false, true);
    // Flag indicating if we matched
    $matched = array();
    $nSearches = count($searches);
    $nRecords = count($requests);
    if ($nRecords > $maxReqs && $maxReqs != 0) {
        $nRecords = $maxReqs;
    }
    for ($rec = 0; $rec < $nRecords; $rec++) {
        $r = $requests[$rec];
Example #6
0
                }
            }
            if (array_key_exists('testsExpected', $status)) {
                $ret['data']['testsExpected'] += $status['testsExpected'];
            }
            if (array_key_exists('testsCompleted', $status)) {
                $ret['data']['testsCompleted'] += $status['testsCompleted'];
            }
        }
    }
    if ($ret['statusCode'] >= 100 && $ret['statusCode'] < 200 && $ret['data']['testsCompleted'] > 0 && $ret['data']['testsExpected'] > 1) {
        $ret['statusCode'] = 100;
        $ret['statusText'] = "Completed {$ret['data']['testsCompleted']} of {$ret['data']['testsExpected']} tests";
    }
} else {
    $ret['data'] = GetTestStatus($id, $position);
    $ret['statusCode'] = $ret['data']['statusCode'];
    $ret['statusText'] = $ret['data']['statusText'];
}
// spit out the response in the correct format
if ($_REQUEST['f'] == 'xml') {
    header('Content-type: text/xml');
    echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
    echo "<response>\n";
    foreach ($ret as $key => &$val) {
        echo "<{$key}>";
        if ($key == 'data') {
            echo "\n";
            foreach ($val as $k => $v) {
                echo "<{$k}>{$v}</{$k}>\n";
            }
Example #7
0
/**
* Check the given log file for all tests that match
* 
* @param mixed $logFile
* @param mixed $match
*/
function CheckTest($testPath, $id, $elapsedDays)
{
    global $archiveCount;
    global $deleted;
    global $kept;
    global $log;
    global $MIN_DAYS;
    $logLine = "{$id} : ";
    echo "\rArc:{$archiveCount}, Del:{$deleted}, Kept:{$kept}, Checking:" . str_pad($id, 45);
    $delete = false;
    if (!is_file("{$testPath}/testinfo.ini") && !is_file("{$testPath}/testinfo.json.gz") && !is_file("{$testPath}/testinfo.json")) {
        $delete = true;
    } else {
        $elapsed = TestLastAccessed($id);
        if (isset($elapsed)) {
            if ($elapsed >= $MIN_DAYS) {
                if (ArchiveTest($id)) {
                    $archiveCount++;
                    $logLine .= "Archived";
                    if (VerifyArchive($id) || $elapsed >= 30) {
                        $delete = true;
                    }
                } else {
                    if ($elapsed < 60) {
                        $status = GetTestStatus($id, false);
                        if ($status['statusCode'] >= 400 || $status['statusCode'] == 102 && $status['remote'] && $elapsed > 1) {
                            $delete = true;
                        }
                    } elseif ($elapsedDays > 10) {
                        $logLine .= "Old test, Failed to archive, deleting";
                        $delete = true;
                    } else {
                        $logLine .= "Failed to archive";
                    }
                }
            } else {
                $logLine .= "Last Accessed {$elapsed} days";
            }
        } else {
            $delete = true;
        }
    }
    if ($delete) {
        delTree("{$testPath}/");
        $deleted++;
        $logLine .= " Deleted";
    } else {
        $kept++;
    }
    if ($log) {
        $logLine .= "\n";
        fwrite($log, $logLine);
    }
}