add stats of new bugs, regressions and crashes per component

This commit is contained in:
Robert Kaiser 2014-07-17 02:47:10 +02:00
Родитель 51767709b8
Коммит 067bf3c40f
1 изменённых файлов: 81 добавлений и 7 удалений

Просмотреть файл

@ -58,6 +58,7 @@ else { chdir('/mnt/mozilla/projects/socorro/'); }
$bugzilla_url = 'https://bugzilla.mozilla.org/';
$bzapi_url = 'https://bugzilla.mozilla.org/bzapi/';
$bz_restapi_url = 'https://bugzilla.mozilla.org/rest/';
// *** code start ***
@ -106,10 +107,12 @@ else {
$products = array('Firefox', 'Core', 'Toolkit', 'Firefox for Android', 'Loop');
// Words that exclude bugs from queries (except Firefox, Firefox for Android products)
$excludewords = 'b2g,gaia,homescreen,sms,dialer,flame';
$excludewords = 'b2g,gaia,homescreen,sms,dialer,flame,hamachi,buri';
$dailygroups = array('FxIteration', 'FirefoxNonIter', 'CoreNonIter', 'ToolkitNonIter');
$dailyqueries = array('fixed', 'verified', 'reopened');
$dailycountgroups = array('FxIteration', 'FirefoxNonIter', 'CoreNonIter', 'ToolkitNonIter');
$dailycountqueries = array('fixed', 'verified', 'reopened');
$dailycompqueries = array('filed');
$iterations =
array('33.2' => array('start' => '2014-06-24',
@ -170,9 +173,9 @@ foreach ($days_to_analyze as $anaday) {
print('Fetching QA bug data for '.$anaday);
$bugdata[$anaday]['time_update'] = time();
foreach ($dailyqueries as $querytype) {
foreach ($dailygroups as $group) {
$bugquery = getDailyBugQuery($querytype, $group, $anaday);
foreach ($dailycountqueries as $querytype) {
foreach ($dailycountgroups as $group) {
$bugquery = getDailyBugCountQuery($querytype, $group, $anaday);
//$buglist_url = $bugzilla_url.'buglist.cgi?'.$bugquery;
//print("\n".$buglist_url."\n");
$bugcount = getBugCount($bugquery);
@ -182,6 +185,27 @@ foreach ($days_to_analyze as $anaday) {
print('.');
}
}
print(':');
foreach ($dailycompqueries as $querytype) {
foreach ($products as $prod) {
$bugquery = getDailyComponentQuery($querytype, $prod, $anaday);
//$buglist_url = $bugzilla_url.'buglist.cgi?'.$bugquery;
//print("\n".$buglist_url."\n");
$compcounts = getProdCompCounts($bugquery);
if ($compcounts !== false) {
if (!array_key_exists('comp', $bugdata[$anaday]) ||
!array_key_exists($querytype, $bugdata[$anaday]['comp'])) {
$bugdata[$anaday]['comp'][$querytype] = $compcounts;
}
else {
$bugdata[$anaday]['comp'][$querytype] =
array_merge($bugdata[$anaday]['comp'][$querytype], $compcounts);
}
}
print('.');
}
}
print("\n");
}
@ -303,7 +327,7 @@ file_put_contents($smfile, json_encode($staticmetastore));
//print_r($staticmetastore);
// *** helper functions ***
function getDailyBugQuery($type, $group, $date) {
function getDailyBugCountQuery($type, $group, $date) {
$ymd_start = $date.' 00:00:00';
$ymd_end = date('Y-m-d H:i:s', strtotime($ymd_start.' +1 day'));
@ -365,6 +389,28 @@ function getDailyBugQuery($type, $group, $date) {
return $query;
}
function getDailyComponentQuery($type, $product, $date) {
$ymd_start = $date.' 00:00:00';
$ymd_end = date('Y-m-d H:i:s', strtotime($ymd_start.' +1 day'));
$query = 'product='.rawurlencode($product);
if (!preg_match('/^Firefox/', $product)) {
$query .= '&f1=short_desc&o1=nowordssubstr&v1='.rawurlencode($GLOBALS['excludewords']);
$query .= '&f2=status_whiteboard&o2=nowordssubstr&v2='.rawurlencode($GLOBALS['excludewords']);
}
$query .= '&chfield='.rawurlencode('[Bug creation]');
$query .= '&chfieldfrom='.rawurlencode($ymd_start);
$query .= '&chfieldto='.rawurlencode($ymd_end);
switch ($type) {
case 'filed':
// total filed bugs
break;
default:
break;
}
return $query;
}
function getIterQuery($type, $iteration) {
$query = 'f1=OP&j1=OR';
$query .= '&f2=cf_fx_iteration&o2=equals&v2='.rawurlencode($iteration);
@ -517,4 +563,32 @@ function getBugCount($query) {
return false;
}
function getProdCompCounts($query) {
$list_json = file_get_contents($GLOBALS['bz_restapi_url'].'bug?'.$query);
if ($list_json) {
$list_info = json_decode($list_json, true);
if (array_key_exists('bugs', $list_info)) {
$pccounts = array();
foreach ($list_info['bugs'] as $bug) {
if (!array_key_exists($bug['product'], $pccounts) ||
!array_key_exists($bug['component'], $pccounts[$bug['product']])) {
$pccounts[$bug['product']][$bug['component']] =
array('total' => 1, 'regression' => 0, 'crash' => 0);
}
else {
$pccounts[$bug['product']][$bug['component']]['total']++;
}
if (in_array('regression', $bug['keywords'])) {
$pccounts[$bug['product']][$bug['component']]['regression']++;
}
if (in_array('crash', $bug['keywords'])) {
$pccounts[$bug['product']][$bug['component']]['crash']++;
}
}
return $pccounts;
}
}
return false;
}
?>