// Is this a valid groupid? if (!$group_name) { continue; } // make sure this row has both checker & defect info for us if (!array_key_exists("checker", $defect_row) || !array_key_exists("defects", $defect_row)) { continue; } if (is_null($defect_row["defects"])) { $defect_row["defects"] = 0; } if (!is_numeric($defect_row["defects"])) { continue; } // Get the day that these results are for. $day = get_day_index($defect_row["starttime"]); // add this DA checker to our list if its the first time we've // encountered it. $checker = $defect_row["checker"]; if (!in_array($checker, $dynamic_analysis_types)) { $dynamic_analysis_types[] = $checker; } // Record this defect value for this checker & build group. $dynamic_analysis_array =& $dynamic_analysis_data[$day][$group_name]; if (!array_key_exists($checker, $dynamic_analysis_array)) { $dynamic_analysis_array[$checker] = $defect_row["defects"]; } else { $dynamic_analysis_array[$checker] += $defect_row["defects"]; } } // Now that the data has been collected we can generate the XML.
$end_date = gmdate(FMT_DATETIME, $end_timestamp); // Perform a query to get info about all of our builds that fall within this // time range. $builds_query = "SELECT b.id, b.type, b.name,\n b.builderrors AS build_errors,\n b.buildwarnings AS build_warnings,\n b.testfailed AS failing_tests,\n b.configureerrors AS configure_errors,\n b.configurewarnings AS configure_warnings, b.starttime,\n cs.loctested AS loctested, cs.locuntested AS locuntested,\n das.checker AS checker, das.numdefects AS numdefects,\n b2g.groupid AS groupid\n FROM build AS b\n LEFT JOIN build2group AS b2g ON (b2g.buildid=b.id)\n LEFT JOIN coveragesummary AS cs ON (cs.buildid=b.id)\n LEFT JOIN dynamicanalysissummary AS das ON (das.buildid=b.id)\n WHERE b.projectid = '{$projectid}'\n AND b.starttime BETWEEN '{$start_date}' AND '{$end_date}'\n AND b.parentid IN (-1, 0)"; $builds_array = pdo_query($builds_query); add_last_sql_error('gather_overview_data'); // If we have multiple coverage builds in a single day we will also // show the aggregate. $aggregate_tracker = array(); $show_aggregate = false; // Keep track of the different types of dynamic analysis that are being // performed on our build groups of interest. $dynamic_analysis_types = array(); while ($build_row = pdo_fetch_array($builds_array)) { // get what day this build is for. $day = get_day_index($build_row['starttime']); $static_name = get_static_group_name($build_row['groupid']); // Special handling for static builds, as we don't need to record as // much data about them. if ($static_name) { foreach ($static_measurements as $measurement) { if (!array_key_exists($measurement, $overview_data[$day][$static_name])) { $overview_data[$day][$static_name][$measurement] = intval($build_row["build_{$measurement}"]); } else { $overview_data[$day][$static_name][$measurement] += $build_row["build_{$measurement}"]; } // Don't let our measurements be thrown off by CDash's tendency // to store -1s in the database. $overview_data[$day][$static_name][$measurement] = max(0, $overview_data[$day][$static_name][$measurement]); } continue;