在bugzilla中,由于要用到一些自定义报告的方式,如缺陷生命周期、缺陷趋势数据 ...,,这两种报告bugzilla工具没有提供此报告,所以想办法写了写,实现统计数据方法,并用网页形式出
1.自定义了一张表,来记录缺陷趋势数据,写了一个程序,来实现数据统计功能;
2.修改bugzilla的页面程序,使之每当新建BUG,或bug属性变化时,就自己动更新一次统计数据;
3.缺陷报告,实现了数据的统计,缺陷趋势数据、缺陷生命周期、缺陷原因、按模块统计、按严重级别等几个功能;
the last ,用perl实现图形报表时,一直没有做出来,知道是不是模块的与操作系统的原因,我已经安装过图形包,而bugzilla自己的图形报告也出不来, so,就只能是数据报表输出,再放到excle表中,就出图了:)
此程序的完成得感谢谢杨明同志的辛苦,哈哈,杨明是好同志啊 ~!~
下面是两个程序的代码:
==================================== 报表程序 ======================================
#!/usr/bin/perl
###############################################################
# Author : liulin
#
# Last Edit date : 2010-11-18
#
# change comment : 统计方法有BUG,BUG的生命周期方法修正
################################################################
use strict;
use warnings;
use Switch;
use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);
use DBI;
my $bugzillaDBaddr="localhost";
my $bugzillaDBdatabase="bugs";
my $bugzillaDBusr="bugs";
my $bugzillaDBpwd="123123";
# Connect to the database.
my $dbh = DBI->connect("DBI:mysql:".
"database=".$bugzillaDBdatabase
.";host=".$bugzillaDBaddr,
$bugzillaDBusr ,
$bugzillaDBpwd ,
{'RaiseError' => 1});
# test mysql conn
eval { $dbh->do("SET NAMES gbk;") };
print "Set chareset failed: $@/n" if $@;
############################################################
# function : 主执行函数
# parameter:
# return :
############################################################
sub main{
print header(-charset => 'gb18030');
print start_html('statistic bugs data ....');
printHead();
do_work();
print end_html;
}
############################################################
# function : Statistic bugs total trend
# parameter:
# return :
############################################################
sub statisticTrend{
#sql statement handle
my $sth = $dbh->prepare("select substr(bug_time,1,10) as date,bug_sum as bugs_total, bug_close_sum as bugs_closed_total,bug_open_sum from bug_sum_data");
$sth->execute();
print "<table border=/"1/">";
print "<tr><td>日期</td><td>BUG总数</td><td>关闭总数</td><td>打开总数</td></tr>";
while (my $ref = $sth->fetchrow_hashref()) {
print "<tr><td>$ref->{'date'}</td><td>$ref->{'bugs_total'}</td><td>$ref->{'bugs_closed_total'}</td><td>$ref->{'bug_open_sum'}</td></tr>";
}
print '</table>';
}
############################################################
# function : Statistic bugs reason
# parameter:
# return :
############################################################
sub statisticReason{
# sql statement handle
my $sth = $dbh->prepare('select cf_bugwhen,count(*) as bugNum from bugs group by cf_bugwhen;');
$sth->execute();
print "<table border=/"1/">";
print "<tr><td>bugcause</td><td>bugnum</td></tr>";
while (my $ref = $sth->fetchrow_hashref()) {
print "<tr><td>$ref->{'cf_bugwhen'}</td><td>$ref->{'bugNum'}</td></tr>";
}
print '</table>';
}
############################################################
# function : 按模块统计 每个模块的bug数
# parameter:
# return :
############################################################
sub statisticModel{
# sql statement handle
my $sth = $dbh->prepare(' select comp.name as compname,count(*) as bugnumbycomp from components comp inner join bugs on comp.id = bugs.component_id group by comp.id order by comp.id;');
$sth->execute();
print "<table border=/"1/">";
print "<tr><td>compname</td><td>bugnumbycomp</