[llvm-commits] CVS: nightlytest-serverside/AcceptTestResults.php
Tanya Lattner
tonic at nondot.org
Sun Apr 29 11:56:46 PDT 2007
Changes in directory nightlytest-serverside:
AcceptTestResults.php added (r1.1)
---
Log message:
New accept test results script to populate new database.
---
Diffs of the changes: (+552 -0)
AcceptTestResults.php | 552 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 552 insertions(+)
Index: nightlytest-serverside/AcceptTestResults.php
diff -c /dev/null nightlytest-serverside/AcceptTestResults.php:1.1
*** /dev/null Sun Apr 29 13:56:37 2007
--- nightlytest-serverside/AcceptTestResults.php Sun Apr 29 13:56:27 2007
***************
*** 0 ****
--- 1,552 ----
+ <?php
+
+ /*******************************************************************************
+ *
+ * Debug info
+ *
+ *******************************************************************************/
+ $print_debug = 0;
+
+ /*******************************************************************************
+ * mysql> describe machineInfo;
+ * +--------------+----------+------+-----+---------+----------------+
+ * | Field | Type | Null | Key | Default | Extra |
+ * +--------------+----------+------+-----+---------+----------------+
+ * | id | int(11) | | PRI | NULL | auto_increment |
+ * | targetTriple | tinytext | | | | |
+ * | hostname | tinytext | | | | |
+ * | nickname | tinytext | | | | |
+ * +--------------+----------+------+-----+---------+----------------+
+ * id = unqiue id assigned to machine
+ * targetTriple = llvm TARGET_TRIPLE value
+ * hostname = full hostname (ie. zion.llvm.org)
+ * nickname = short name (ie. zion)
+ *
+ * Returns id of machine and adds machine if it is not already in database.
+ *******************************************************************************/
+ function getMachineID($targetTriple, $hostname, $nickname) {
+ $sqlQuery = "SELECT id from machineInfo WHERE targetTriple=\"$targetTriple\" "
+ . "AND hostname=\"$hostname\" AND nickname=\"$nickname\"";
+ $result = mysql_query($sqlQuery) or die(mysql_error());
+
+ $row = mysql_fetch_assoc($result);
+
+ if($row) {
+ return $row['id'];
+ }
+ else {
+ $sqlQuery = "INSERT into machineInfo (targetTriple, hostname, nickname) VALUES "
+ . "(\"$targetTriple\", \"$hostname\", \"$nickname\")";
+ mysql_query($sqlQuery) or die(mysql_error());
+ $id = mysql_insert_id() or die(mysql_error());
+ return $id;
+ }
+ }
+
+ /*******************************************************************************
+ * mysql> describe testRunInfo;
+ * +-------------------+-----------------------------------+------+-----+---------------------+----------------+
+ * | Field | Type | Null | Key | Default | Extra |
+ * +-------------------+-----------------------------------+------+-----+---------------------+----------------+
+ * | id | int(11) | | PRI | NULL | auto_increment |
+ * | runDateTime | datetime | | | 0000-00-00 00:00:00 | |
+ * | machineId | int(11) | | | 0 | |
+ * | machineUname | text | YES | | NULL | |
+ * | gccVersion | text | YES | | NULL | |
+ * | cvsCpuTime | double | YES | | NULL | |
+ * | cvsWallTime | double | YES | | NULL | |
+ * | configureCpuTime | double | YES | | NULL | |
+ * | configureWallTime | double | YES | | NULL | |
+ * | buildCpuTime | double | YES | | NULL | |
+ * | buildWallTime | double | YES | | NULL | |
+ * | dejagnuCpuTime | double | YES | | NULL | |
+ * | dejagnuWallTime | double | YES | | NULL | |
+ * | warnings | mediumtext | YES | | NULL | |
+ * | warningsAdded | text | YES | | NULL | |
+ * | warningsRemoved | text | YES | | NULL | |
+ * | cvsUsersAdd | text | YES | | NULL | |
+ * | cvsUsersCO | text | YES | | NULL | |
+ * | cvsFilesAdded | text | YES | | NULL | |
+ * | cvsFilesRemoved | text | YES | | NULL | |
+ * | cvsFilesModified | text | YES | | NULL | |
+ * | buildStatus | tinyint(4) | YES | | NULL | |
+ * | type | enum('release','debug','unknown') | YES | | unknown | |
+ * +-------------------+-----------------------------------+------+-----+---------------------+----------------+
+ * Add a test run configuration to the database for logging test results.
+ *
+ *******************************************************************************/
+ function addTestRunConfig($runDateTime, $machineId, $machineUname, $gccVersion,
+ $cvsCpuTime, $cvsWallTime, $configureCpuTime,
+ $configureWallTime,
+ $buildCpuTime, $buildWallTime, $dejagnuCpuTime,
+ $dejagnuWallTime, $warnings, $warningsAdded,
+ $warningsRemoved, $cvsUsersAdd, $cvsUsersCO,
+ $cvsFilesAdded, $cvsFilesRemoved, $cvsFilesModified,
+ $buildStatus) {
+
+ $sqlQuery = "INSERT into testRunInfo (runDateTime, machineId, machineUname," .
+ " gccVersion, cvsCpuTime, cvsWallTime, configureCpuTime," .
+ " configureWallTime, buildCpuTime, buildWallTime," .
+ " dejagnuCpuTime, dejagnuWallTime, warnings, warningsAdded," .
+ " warningsRemoved, cvsUsersAdd, cvsUsersCO, cvsFilesAdded," .
+ " cvsFilesRemoved, cvsFilesModified, buildStatus) VALUES (".
+ " \"$runDateTime\", \"$machineId\", \"$machineUname\"," .
+ " \"$gccVersion\", \"$cvsCpuTime\", \"$cvsWallTime\"," .
+ " \"$configureCpuTime\", \"$configureWallTime\", \"$buildCpuTime\"," .
+ " \"$buildWallTime\", \"$dejagnuCpuTime\", \"$dejagnuWallTime\"," .
+ " \"$warnings\", \"$warningsAdded\", \"$warningsRemoved\"," .
+ " \"$cvsUsersAdd\", \"$cvsUsersCO\", \"$cvsFilesAdded\"," .
+ " \"$cvsFilesRemoved\", \"$cvsFilesModified\", \"$buildStatus\")";
+ mysql_query($sqlQuery) or die(mysql_error());
+ $id = mysql_insert_id() or die(mysql_error());
+ return $id;
+ }
+
+ /*******************************************************************************
+ *
+ * mysql> describe dejagnuTests;
+ * +-------+----------+------+-----+---------+----------------+
+ * | Field | Type | Null | Key | Default | Extra |
+ * +-------+----------+------+-----+---------+----------------+
+ * | id | int(11) | | PRI | 0 | auto_increment |
+ * | name | tinytext | YES | | NULL | |
+ * +-------+----------+------+-----+---------+----------------+
+ *
+ * mysql> describe dejagnuTestResults;
+ * +----------+-------------------------------------+------+-----+---------+----------------+
+ * | Field | Type | Null | Key | Default | Extra |
+ * +----------+-------------------------------------+------+-----+---------+----------------+
+ * | id | int(11) | | PRI | NULL | auto_increment |
+ * | testId | int(11) | YES | | NULL | |
+ * | configId | int(11) | YES | | NULL | |
+ * | result | enum('PASS','FAIL','XFAIL','XPASS') | YES | | NULL | |
+ * +----------+-------------------------------------+------+-----+---------+----------------+
+ *
+ * Add dejagnu test and its status (PASS, XPASS, XFAIL, FAIL).
+ * Dejagnu tests each have their own unique id to represent them.
+ *******************************************************************************/
+ function addDejagnuTestResult($testName, $status, $testRunConfigId) {
+ // Strip off path from testName $path/test/($testName)
+
+ // Get testID for testName
+ $sqlQuery = "SELECT id FROM dejagnuTests WHERE name=\"$testName\"";
+ $result = mysql_query($sqlQuery) or die(mysql_error());
+ $row = mysql_fetch_assoc($result);
+
+ if($row) {
+ $id = $row['id'];
+ }
+ else {
+ $sqlQuery = "INSERT into dejagnuTests (name) VALUES (\"$testName\")";
+ mysql_query($sqlQuery) or die(mysql_error());
+ $id = mysql_insert_id() or die(mysql_error());
+ }
+
+ // Insert test result
+ $query = "INSERT into dejagnuTestResults (testId, configId, result) " .
+ "VALUES (\"$id\", \"$testRunConfigId\", \"$status\")";
+ mysql_query($query) or die(mysql_error());
+ $testResultId = mysql_insert_id() or die(mysql_error());
+ return $testResultId;
+
+ }
+ /*******************************************************************************
+ * mysql> describe programs;
+ * +-------+------------+------+-----+---------+----------------+
+ * | Field | Type | Null | Key | Default | Extra |
+ * +-------+------------+------+-----+---------+----------------+
+ * | id | int(11) | | PRI | NULL | auto_increment |
+ * | name | mediumtext | YES | | NULL | |
+ * +-------+------------+------+-----+---------+----------------+
+ *
+ * mysql> describe programResults;
+ * +--------------------+---------+------+-----+---------+----------------+
+ * | Field | Type | Null | Key | Default | Extra |
+ * +--------------------+---------+------+-----+---------+----------------+
+ * | id | int(11) | | PRI | NULL | auto_increment |
+ * | testId | int(11) | YES | | NULL | |
+ * | nightId | int(11) | YES | | NULL | |
+ * | gccasTime | double | YES | | NULL | |
+ * | bytecodeSize | int(11) | YES | | NULL | |
+ * | llcTime | double | YES | | NULL | |
+ * | llcBetaTime | double | YES | | NULL | |
+ * | jitTime | double | YES | | NULL | |
+ * | gccExecuteTime | double | YES | | NULL | |
+ * | cbeExecuteTime | double | YES | | NULL | |
+ * | llcExecuteTime | double | YES | | NULL | |
+ * | llcBetaExecuteTime | double | YES | | NULL | |
+ * | jitExecuteTime | double | YES | | NULL | |
+ * +--------------------+---------+------+-----+---------+----------------+
+ *
+ *
+ *
+ *******************************************************************************/
+ function addProgramResult($programLine, $configId, $prefix) {
+ if (!$programLine) {
+ return;
+ }
+
+ // Skip headers
+ $subpatterns = array();
+ if (preg_match("/^Program,(.+)/", $programLine, $subpatterns)) {
+ return;
+ }
+
+ $results = split(",", $programLine);
+
+ // If the output order changes, so must this
+ if(count($results) != 15) {
+ return;
+ }
+
+ $program = $results[0];
+ $program = $prefix . $program;
+ $gccasTime = $results[1];
+ $byteCodeSize = $results[2];
+ $llcTime = $results[3];
+ $llcBetaTime = $results[4];
+ $jitTime = $results[5];
+ $gccRunTime = $results[6];
+ $cbeRunTime = $results[7];
+ $llcRunTime = $results[8];
+ $llcBetaRunTime = $results[9];
+ $jitRunTime = $results[10];
+
+ // Get id for program name
+ $sqlQuery = "SELECT id FROM programs WHERE name=\"$program\"";
+ $result = mysql_query($sqlQuery) or die(mysql_error());
+ $row = mysql_fetch_assoc($result);
+
+ if($row) {
+ $id = $row['id'];
+ }
+ else {
+ $sqlQuery = "INSERT into programs (name) VALUES (\"$program\")";
+ mysql_query($sqlQuery) or die(mysql_error());
+ $id = mysql_insert_id() or die(mysql_error());
+ }
+
+ $query = "INSERT INTO programResults (testId, nightId, gccasTime,
+ bytecodeSize, llcTime, llcBetaTime,
+ jitTime, gccExecuteTime,
+ cbeExecuteTime, llcExecuteTime,
+ llcBetaExecuteTime, jitExecuteTime)" .
+ " VALUES (\"$id\", \"$configId\", \"$gccasTime\", \"$byteCodeSize\",
+ \"$llcTime\", \"$llcBetaTime\", \"$jitTime\", \"$gccRunTime\",
+ \"$cbeRunTime\", \"$llcRunTime\", \"$llcBetaRunTime\",
+ \"$jitRunTime\")";
+
+ mysql_query($query) or die(mysql_error());
+ }
+
+ /*******************************************************************************
+ * mysql> describe files;
+ * +----------+----------+------+-----+---------+----------------+
+ * | Field | Type | Null | Key | Default | Extra |
+ * +----------+----------+------+-----+---------+----------------+
+ * | id | int(11) | | PRI | NULL | auto_increment |
+ * | filename | tinytext | YES | | NULL | |
+ * +----------+----------+------+-----+---------+----------------+
+ *
+ *
+ * mysql> describe fileSizes;
+ * +---------+---------+------+-----+---------+----------------+
+ * | Field | Type | Null | Key | Default | Extra |
+ * +---------+---------+------+-----+---------+----------------+
+ * | id | int(11) | | PRI | NULL | auto_increment |
+ * | fileId | int(11) | YES | | NULL | |
+ * | nightId | int(11) | YES | | NULL | |
+ * | size | int(11) | YES | | NULL | |
+ * +---------+---------+------+-----+---------+----------------+
+ *
+ * Adds a file and its size to the database.
+ *******************************************************************************/
+ function addFileSize($file, $size, $configId) {
+
+ // Get file id
+ $query = "SELECT id FROM files WHERE filename=\"$file\"";
+ $result = mysql_query($query) or die(mysql_error());
+ $row = mysql_fetch_assoc($result);
+
+ if($row) {
+ $id = $row['id'];
+ }
+ else {
+ $sqlQuery = "INSERT into files (filename) VALUES (\"$file\")";
+ mysql_query($sqlQuery) or die(mysql_error());
+ $id = mysql_insert_id() or die(mysql_error());
+ }
+
+ $insertQuery = "INSERT INTO fileSizes (fileId, nightId, size) VALUES".
+ " (\"$id\", \"$configId\", \"$size\")";
+ mysql_query($insertQuery) or die(mysql_error());
+ }
+
+ /*******************************************************************************
+ *
+ * mysql> describe llvmStats;
+ * +-------+----------+------+-----+---------+----------------+
+ * | Field | Type | Null | Key | Default | Extra |
+ * +-------+----------+------+-----+---------+----------------+
+ * | id | int(11) | | PRI | NULL | auto_increment |
+ * | date | datetime | YES | | NULL | |
+ * | loc | int(11) | YES | | NULL | |
+ * | files | int(11) | YES | | NULL | |
+ * | dirs | int(11) | YES | | NULL | |
+ * +-------+----------+------+-----+---------+----------------+
+ * 5 rows in set (0.00 sec)
+ *
+ * Updates the loc, num files, and num dirs for the date.
+ *
+ *******************************************************************************/
+ function updateLLVMStats($date, $loc, $files, $dirs, $configId) {
+ $query = "INSERT INTO llvmStats (date, loc, files, dirs, nightId) VALUES (\"$date\", \"$loc\", \"$files\", \"$dirs\", \"$configId\")";
+ mysql_query($query) or die(mysql_error());
+ }
+
+ /*******************************************************************************
+ *
+ * Match one substring and return string result.
+ *
+ *******************************************************************************/
+ function matchOne($pattern, $string, $default) {
+ $subpatterns = array();
+ if (isset($string) && preg_match($pattern, $string, $subpatterns)) {
+ return rtrim($subpatterns[1]);
+ }
+
+ return $default;
+ }
+
+ /*******************************************************************************
+ *
+ * Match all substrings and return array result.
+ *
+ *******************************************************************************/
+ function match($pattern, $string) {
+ $subpatterns = array();
+ if (isset($string) && preg_match($pattern, $string, $subpatterns)) {
+ return $subpatterns;
+ }
+
+ return array();
+ }
+
+
+ function shutdown($mysql_link) {
+ mysql_close($mysql_link);
+ }
+
+
+
+ /*******************************************************************************
+ *
+ * Begin processing data
+ *
+ *******************************************************************************/
+
+ function acceptTestResults() {
+ //print "content-type: text/text\n\n";
+
+ // Database connection info
+ $database = "llvmTestResults";
+ $loginname = "llvm";
+ $password = "ll2002vm";
+
+ // Connect to database
+ $mysql_link = mysql_connect("127.0.0.1", $loginname, $password) or die("Error: could not connect to database!");
+
+ mysql_select_db($database) or die("Error: could not find \"$database\" database!");
+
+ if ($print_debug) {
+ print "Database connected\n";
+ }
+
+
+ // Extract the machine information (FIXME: create regex)
+ $machine_data = $_POST['machine_data'];
+
+ if (!isset($_POST['machine_data'])) {
+ shutdown();
+ }
+
+ $MACHINE_DATA = split("\n", $machine_data);
+ $uname = matchOne("/uname\:\s*(.+)/", $MACHINE_DATA[0], "");
+ $hardware = matchOne("/hardware\:\s*(.+)/", $MACHINE_DATA[1], "");
+ $os = matchOne("/os\:\s*(.+)/", $MACHINE_DATA[2], "");
+ $hostname = matchOne("/name\:\s*(.+)/", $MACHINE_DATA[3], "");
+ $date = matchOne("/date\:\s*(.+)/", $MACHINE_DATA[4], "");
+ $time = matchOne("/time\:\s*(.+)/", $MACHINE_DATA[5], "");
+ $nickname = $_POST['nickname'];
+
+ //Get machine id or add new machine
+ $machineId = getMachineID($targetTriple, $hostname, $nickname);
+
+ if(!$machineId) {
+ shutdown($mysql_link);
+ }
+
+ //Extract addition test run information, bail out if missing starttime
+ if( !isset($_POST['starttime']) ) {
+ shutdown($mysql_link);
+ }
+
+ $runDateTime = $_POST['starttime'];
+ $gcc_version = $_POST['gcc_version'];
+ $cvsCpuTime = $_POST['cvscheckouttime_cpu'];
+ $cvsWallTime = $_POST['cvscheckouttime_wall'];
+ $configureWallTime = $_POST['configtime_wall'];
+ $configureCpuTime = $_POST['configtime_cpu'];
+ $buildCpuTime = $_POST['buildtime_cpu'];
+ $buildWallTime = $_POST['buildtime_wall'];
+ $dejagnuCpuTime = $_POST['dejagnutime_cpu'];
+ $dejagnuWallTime = $_POST['dejagnutime_wall'];
+ $cvsFilesAdded = $_POST['cvsaddedfiles'];
+ $cvsFilesRemoved = $_POST['cvsremovedfiles'];
+ $cvsFilesModified = $_POST['cvsmodifiedfiles'];
+ $cvsUsersAdd = $_POST['cvsusercommitlist'];
+ $cvsUsersCO = $_POST['cvsuserupdatelist'];
+ $warnings = $_POST['warnings'];
+ $warningsAdded = $_POST['warnings_removed'];
+ $warningsRemoved = $_POST['warnings_added'];
+ $buildstatus = $_POST['buildstatus'];
+
+
+ // Add new test run config
+ $testRunConfigId = addTestRunConfig($runDateTime, $machineId, $machineUname,
+ $gccVersion, $cvsCpuTime, $cvsWallTime,
+ $configureCpuTime, $configureWallTime,
+ $buildCpuTime,
+ $buildWallTime, $dejagnuCpuTime,
+ $dejagnuWallTime, $warnings, $warningsAdded,
+ $warningsRemoved, $cvsUsersAdd, $cvsUsersCO,
+ $cvsFilesAdded, $cvsFilesRemoved, $cvsFilesModified,
+ $buildStatus);
+
+
+ //Print data obtained so far
+ if ($print_debug) {
+
+ print "Machine ID: $machineId\n";
+ print "TargetTriple: $targetTriple\n";
+ print "Hostname: $hostname\n";
+ print "Nickname: $nickname\n";
+
+ print "\n";
+ print "Test Run Config ID: $testRunConfigID\n";
+ print "Start Time: $runDateTime\n";
+ print "Uname: $uname\n";
+ print "GCC Version: $gccVersion\n";
+ print "Cvs Cpu Time: $cvsCpuTime\n";
+ print "Cvs Wall Time: $cvsWallTime\n";
+ print "Configure Cpu Time: $configureCpuTime\n";
+ print "Configure Wall Time: $configureWallTime\n";
+ print "Build Cpu Time: $buildCpuTime\n";
+ print "Build Wall Time: $buildWallTime\n";
+ print "Dejagnu Cpu Time: $dejagnuCupTime\n";
+ print "Dejagnu Wall Time: $dejagnuWallTime\n";
+ print "Warnings: $warnings\n";
+ print "Warnings Added: $warningsAdded\n";
+ print "Warnings Removed: $warningsRemoved\n";
+ print "Cvs Files Added: $cvsFilesAdded\n";
+ print "Cvs Files Removed: $cvsFilesRemoved\n";
+ print "Cvs Files Modified: $cvsFilesModified\n";
+ print "Cvs Users Commit: $cvsUsersAdd\n";
+ print "Cvs Users Checkout: $cvsUsersCO\n";
+ print "Build Status: $buildStatus\n";
+
+ }
+
+ // Extract dejagnu tests and their results
+ $dejagnutests_results = $_POST['dejagnutests_results'];
+ if (!isset($dejagnutests_results)) {
+ $dejagnutests_results = "";
+ }
+ $DEJAGNUTESTS_RESULTS = split("\n", $dejagnutests_results);
+
+ foreach ($DEJAGNUTESTS_RESULTS as $info) {
+ $subpatterns = array();
+ if (preg_match("/^(XPASS|PASS|XFAIL|FAIL):\s(.[^:]+):?/", $info, $subpatterns)) {
+ list($ignore, $result, $program) = $subpatterns;
+ if($program) {
+ addDejagnuTestResult($program, $result, $testRunConfigId);
+ if($print_debug) {
+ print "Program: $program\n";
+ print "Result: $result\n";
+ }
+ }
+ }
+ }
+
+ // Extract single source, multisource, and external tests into the database
+ $singlesource_tests = $_POST['singlesource_programstable'];
+ if (!isset($singlesource_tests)) {
+ $singlesource_tests = "";
+ }
+ $ss_programs = split("\n", $singlesource_tests);
+
+ foreach ($ss_programs as $programLine) {
+ addProgramResult($programLine, $testRunConfigId, "SingleSource/");
+ }
+
+ $multisource_tests = $_POST['multisource_programstable'];
+ if (!isset($multisource_tests)) {
+ $multisource_tests = "";
+ }
+ $ms_programs = split("\n", $multisource_tests);
+
+ foreach ($ms_programs as $programLine) {
+ addProgramResult($programLine, $testRunConfigId, "MultiSource/");
+ }
+
+ $external_tests = $_POST['externalsource_programstable'];
+ if (!isset($external_tests)) {
+ $external_tests = "";
+ }
+ $ext_programs = split("\n", $external_tests);
+
+ foreach ($ext_programs as $programLine) {
+ addProgramResult($programLine, $testRunConfigId, "External/");
+ }
+
+ // Extract ofile sizes
+ $o_file_size = $_POST['o_file_sizes'];
+ if (!isset($o_file_size)) {
+ $o_file_size = "";
+ }
+ $o_file_size = rtrim($o_file_size);
+ $O_FILE_SIZE = split("\n", $o_file_size);
+
+ foreach ($O_FILE_SIZE as $info) {
+ list($ignore, $size, $file, $type) = match("/(.+)\s+(.+)\s+(.+)/", $info);
+ addFileSize($file, $size, $testRunConfigId, $type);
+ }
+
+ // Extract afile sizes
+ $a_file_size = $_POST['a_file_sizes'];
+ if (!isset($a_file_size)) {
+ $a_file_size = "";
+ }
+ $a_file_size = rtrim($a_file_size);
+ $A_FILE_SIZE = split("\n", $a_file_size);
+
+ foreach ($A_FILE_SIZE as $info) {
+ list($ignore, $size, $file, $type) = match("/(.+)\s+(.+)\s+(.+)/", $info);
+ addFileSize($file, $size, $testRunConfigId, $type);
+ }
+
+ // Extract code size
+ $loc = $_POST['lines_of_code'];
+ $filesincvs = $_POST['cvs_file_count'];
+ $dirsincvs = $_POST['cvs_dir_count'];
+ if(strcmp($buildstatus, "OK") == 0) {
+
+ // only update loc if successful build
+ updateLLVMStats($runDateTime, $loc, $filesincvs, $dirsincvs, $testRunConfigId);
+ }
+
+ shutdown($mysql_link);
+ }
+
+ acceptTestResults();
+ ?>
\ No newline at end of file
More information about the llvm-commits
mailing list