9 require($bugs_application_path."bugs_globals.php");
10 require($bugs_application_path."bugs_locale.php");
11 require($bugs_application_path."bugs_database.php");
12 require($bugs_shared_include_file);
14 function mydate($date,$time) {
15 $scanned_date=BugsDatabaseScanDate($date);
16 $year = $scanned_date["year"];
17 $month = $scanned_date["month"];
18 $day = $scanned_date["day"];
19 $hour = substr($time,0,2);
20 $min = substr($time,3,2);
21 $sec = substr($time,6,2);
22 return mktime($hour,$min,$sec,$month,$day,$year);
25 function ShowTime($sec) {
27 return sprintf(LocaleText("1-second"),$sec);
29 return sprintf(LocaleText("n-seconds"),$sec);
31 return sprintf(LocaleText("1-minute-n-seconds"),$sec%60
);
32 } else if($sec<3600) {
33 return sprintf(LocaleText("n-minutes-n-seconds"),(int)($sec/60),($sec%60
));
34 } else if($sec<7200) {
35 return sprintf(LocaleText("1-hour-n-minutes-n-seconds"),(int)(($sec%3600
)/60),sec%60
);
36 } else if($sec<86400) {
37 return sprintf(LocaleText("n-hours-n-minutes-n-seconds"),(int)($sec/3600),(int)(($sec%3600
)/60),(($sec%3600
)%60
));
38 } else if($sec<172800) {
39 return sprintf(LocaleText("1-day-n-hours-n-minutes-n-seconds"),(int)($sec/3600),(int)(($sec%3600
)/60),(($sec%3600
)%60
));
41 return sprintf(LocaleText("n-days-n-hours-n-minutes-n-seconds"),(int)($sec/86400),(int)($sec/3600),(int)(($sec%3600
)/60),(($sec%3600
)%60
));
45 commonHeader(LocaleText("Bug-Statistics"));
47 if((BugsDatabaseConnect($bugs_database_name))<=0)
48 $bugs_debug("Could not connect to the database server!");
49 if(BugsDatabaseSeparateDateTime())
51 $date_time="ts1_date,ts1_time,ts2_date,ts2_time";
61 if(($result=BugsDatabaseQuery("SELECT id,bug_type,email,sdesc,ldesc,program_version,os,status,comments,$date_time,dev_id,assign from bugdb"))<=0)
62 $bugs_debug("It was not possible to query the bugs database! (".BugsDatabaseError().")\n");
63 if(BugsDatabaseNumberOfRows($result)==0)
65 echo "<H1><CENTER>",LocaleText("There-are-no-bug-reports-to-produce-statistics"),"</CENTER></H1>";
66 BugsDatabaseFreeResult($result);
70 echo "<H1><CENTER>",LocaleText("Bug-Report-Statistics"),"</CENTER></H1>\n<HR>\n";
71 for($bug_type=$email=$closed_by=$time_to_close=array();$row=BugsDatabaseFetchNextRow($result);) {
72 $bug_type['all'][$row[1]]++
;
73 $bug_status=strtok($row[7]," ");
74 if($bug_status=="Open") {
75 $bug_type['open'][$row[1]]++
;
77 if($bug_status=="Analyzed") {
78 $bug_type['analyzed'][$row[1]]++
;
80 if($bug_status=="Suspended") {
81 $bug_type['suspended'][$row[1]]++
;
83 if($bug_status=="Duplicate") {
84 $bug_type['duplicate'][$row[1]]++
;
86 if($bug_status=="Assigned") {
87 $bug_type['assigned'][$row[1]]++
;
90 $program_version[$row[5]]++
;
92 $status[$bug_status]++
;
93 if($bug_status=="Closed") {
94 $bug_type['closed'][$row[1]]++
;
95 if(BugsDatabaseSeparateDateTime())
101 $closed_by[$row[13]]++
;
105 $date1=strtok($row[9]," ");
107 $date2=strtok($row[10]," ");
109 $closed_by[$row[11]]++
;
111 $time_to_close[] = mydate($date2,$time2) - mydate($date1,$time1);
116 function bugstats($status, $type) {
117 global $bug_type,$PHP_SELF;
118 if ($bug_type[$status][$type] > 0) {
119 return '<A href=$PHP_SELF."?cmd=Display+Bugs&status=' . ucfirst($status) . '&bug_type=' . urlencode($type) . '">' . $bug_type[$status][$type] . "</A>\n";
123 BugsDatabaseFreeResult($result);
124 if(IsSet($bug_type['all']))
126 echo "<center><table border>\n";
127 echo "<tr bgcolor=#aabbcc><th align=right>",LocaleText("Total-bug-entries"),":</th><td>$total</td><th>",LocaleText("Closed"),"</th><th>",LocaleText("Open"),"</th><th>",LocaleText("Analyzed"),"</th><th>",LocaleText("Suspended"),"</th><th>",LocaleText("Duplicate"),"</th><th>",LocaleText("Assigned"),"</th></tr>\n";
128 while(list($type,$value)=each($bug_type['all'])) {
129 $type=strtok($type," ");
130 echo "<tr><th align=right bgcolor=#aabbcc>",LocaleText(strtok($type," ")),":</th><td align=center bgcolor=#ccddee>$value</td><td align=center bgcolor=#ddeeff>".bugstats('closed', $type)." </td><td align=center bgcolor=#ccddee>".bugstats('open', $type)." </td><td align=center bgcolor=#ddeeff>".bugstats('analyzed', $type)." </td><td align=center bgcolor=#ccddee>".bugstats('suspended',$type)." </td><td align=center bgcolor=#ddeeff>".bugstats('duplicate', $type)." </td><td align=center bgcolor=#ccddee>".bugstats('assigned',$type)." </td></tr>\n";
132 echo "</table></center><hr>\n";
135 if(($c=count($time_to_close))!=0)
137 sort($time_to_close);
139 for($i=0;$i<$c;$i++
) {
140 $sum+
=$time_to_close[$i];
142 $median = $time_to_close[(int)($c/2)];
143 $slowest=$time_to_close[$c-1];
144 $quickest=$time_to_close[0];
145 echo "<h2><center>",LocaleText("Bug-Report-Time-to-Close-Statistics"),"</center></h2>\n";
146 echo "<center><table border>\n";
147 echo "<tr bgcolor=#aabbcc><th align=right>",LocaleText("Average-life-of-a-report"),":</th><td bgcolor=#ccddee>".ShowTime($c==0 ?
0 : (int)($sum/$c))."</td></tr>\n";
148 echo "<tr bgcolor=#aabbcc><th align=right>",LocaleText("Median-life-of-a-report"),":</th><td bgcolor=#ccddee>".ShowTime($median)."</td></tr>\n";
149 echo "<tr bgcolor=#aabbcc><th align=right>",LocaleText("Slowest-report-closure"),":</th><td bgcolor=#ccddee>".ShowTime($slowest)."</td></tr>\n";
150 echo "<tr bgcolor=#aabbcc><th align=right>",LocaleText("Quickest-report-closure"),":</th><td bgcolor=#ccddee>".ShowTime($quickest)."</td></tr>\n";
151 echo "</table></center><hr>\n";
153 echo "<h2><center>",LocaleText("Who-is-closing-the-bug-reports"),"</center></h2>\n";
154 echo "<center><table border>\n";
155 while(list($who,$value)=each($closed_by)) {
156 echo "<tr bgcolor=#aabbcc><th>$who</th><td bgcolor=#ccddee>$value</td></tr>\n";
158 echo "</table></center><hr>\n";
164 echo "<h2><center>",LocaleText("Who-is-submitting-bug-reports"),"</center></h2>\n";
165 echo "<center><table border>\n";
166 while(list($who,$value)=each($email)) {
167 echo "<tr bgcolor=#aabbcc><th>$who</th><td bgcolor=#ccddee>$value</td></tr>\n";
169 echo "</table></center><hr>\n";