From 7d49572502f78d54ba400392d78da146f401f5a4 Mon Sep 17 00:00:00 2001 From: "gerv%gerv.net" <> Date: Thu, 17 Oct 2002 06:09:26 +0000 Subject: Bug 172959 - Remove old reporting (most doomed etc.). Patch by gerv; r=bbaetz. --- reports.cgi | 572 ++++-------------------------------------------------------- 1 file changed, 33 insertions(+), 539 deletions(-) (limited to 'reports.cgi') diff --git a/reports.cgi b/reports.cgi index 546ac5990..f3a18f557 100755 --- a/reports.cgi +++ b/reports.cgi @@ -22,9 +22,6 @@ # Terry Weissman , # Dawn Endico # Bryce Nesbitt , -# Added -All- report, change "nobanner" to "banner" (it is strange to have a -# list with 2 positive and 1 negative choice), default links on, add show -# sql comment. # Joe Robins , # If using the usebuggroups parameter, users shouldn't be able to see # reports for products they don't have access to. @@ -42,33 +39,20 @@ use strict; use lib qw(.); -eval "use GD"; -my $use_gd = $@ ? 0 : 1; -eval "use Chart::Lines"; -$use_gd = 0 if $@; - require "CGI.pl"; use vars qw(%FORM); # globals from CGI.pl require "globals.pl"; use vars qw(@legal_product); # globals from er, globals.pl +eval "use GD"; +$@ && ThrowCodeError("gd_not_installed"); +eval "use Chart::Lines"; +$@ && ThrowCodeError("chart_lines_not_installed"); + my $dir = "data/mining"; my $graph_dir = "graphs"; -my @status = qw (NEW ASSIGNED REOPENED); -my %bugsperperson; - -# while this looks odd/redundant, it allows us to name -# functions differently than the value passed in -my %reports = - ( - "most_doomed" => \&most_doomed, - "most_doomed_for_milestone" => \&most_doomed_for_milestone, - "most_recently_doomed" => \&most_recently_doomed, - "show_chart" => \&show_chart, - ); - # If we're using bug groups for products, we should apply those restrictions # to viewing reports, as well. Time to check the login in that case. ConnectToDatabase(1); @@ -95,8 +79,8 @@ if(Param("usebuggroups")) { if (! defined $FORM{'product'}) { print "Content-type: text/html\n\n"; - PutHeader("Bug Reports"); - &choose_product; + PutHeader("Bug Charts"); + choose_product(@myproducts); PutFooter(); } else { @@ -114,13 +98,6 @@ if (! defined $FORM{'product'}) { && !UserInGroup($FORM{'product'}) && ThrowUserError("report_access_denied"); - # For security and correctness, validate the value of the "output" form variable. - # Valid values are the keys from the %reports hash defined above which appear in - # the "output" drop-down menu on the report generation form. - $FORM{'output'} ||= "most_doomed"; # a reasonable default - grep($_ eq $FORM{'output'}, keys %reports) - || ThrowCodeError("invalid_output_type", {type => $FORM{'output'}}); - # We've checked that the product exists, and that the user can see it # This means that is OK to detaint trick_taint($FORM{'product'}); @@ -130,22 +107,11 @@ if (! defined $FORM{'product'}) { # Changing attachment to inline to resolve 46897 - zach@zachlipton.com print "Content-disposition: inline; filename=bugzilla_report.html\n\n"; - if ($FORM{'banner'}) { - PutHeader("Bug Reports"); - } - else { - print("Bug Reports"); - } - - # Execute the appropriate report generation function - # (the one whose name is the same as the value of the "output" form variable). - &{$reports{$FORM{'output'}}}; + PutHeader("Bug Charts"); - # ??? why is this necessary? formatting looks fine without it - print "

"; - - PutFooter() if $FORM{banner}; + show_chart(); + PutFooter(); } @@ -154,51 +120,40 @@ if (! defined $FORM{'product'}) { ################################## sub choose_product { - my $product_popup = make_options (\@myproducts, $myproducts[0]); - + my @myproducts = (@_); + my $datafile = daily_stats_filename('-All-'); # Can we do bug charts? - my $do_charts = ($use_gd && -d $dir && -d $graph_dir && - open(DATA, "$dir/$datafile")); - - my $charts = $do_charts ? "

Welcome to the Bugzilla Query Kitchen

+

Welcome to the Bugzilla Charting Kitchen

- - -FIN - - if ($do_charts) { - print < - - + -FIN - } - -print < - - -\n"; - - while (@people) { - $person = pop @people; - print "\n\n"); - } - } - print "
Product:
Output: -
Chart datasets: - Chart datasets: +
Switches: - Links to Bugs
- Banner
-
@@ -244,212 +188,6 @@ print <

FIN -#Add this above to get a control for showing the SQL query: -# Show SQL
-} - -sub most_doomed { - my $when = localtime (time); - - print < -

-Bug Report for $FORM{'product'} -

-$when

-FIN - -# Build up $query string - my $prod_table = ($FORM{'product'} ne "-All-") ? ", products" : ""; - my $query; - $query = <$query

\n" - unless (! exists $FORM{'showsql'}); - - SendSQL ($query); - - my $c = 0; - - my $bugs_count = 0; - my $bugs_new_this_week = 0; - my $bugs_reopened = 0; - my %bugs_owners; - my %bugs_summary; - my %bugs_status; - my %bugs_totals; - my %bugs_lookup; - - ############################# - # suck contents of database # - ############################# - - my $week = 60 * 60 * 24 * 7; - while (my ($bid, $st, $who, $ts) = FetchSQLData()) { - next if (exists $bugs_lookup{$bid}); - - $bugs_lookup{$bid} ++; - $bugs_owners{$who} ++; - $bugs_new_this_week ++ if (time - $ts <= $week); - $bugs_status{$st} ++; - $bugs_count ++; - - push @{$bugs_summary{$who}{$st}}, $bid; - - $bugs_totals{$who}{$st} ++; - } - - ######################### - # start painting report # - ######################### - - $bugs_status{'NEW'} ||= '0'; - $bugs_status{'ASSIGNED'} ||= '0'; - $bugs_status{'REOPENED'} ||= '0'; - print <Summary - - - - - - - - - - - - - - - - - - - - - - - - - - -
New Bugs This Week$bugs_new_this_week
Bugs Marked New$bugs_status{'NEW'}
Bugs Marked Assigned$bugs_status{'ASSIGNED'}
Bugs Marked Reopened$bugs_status{'REOPENED'}
Total Bugs$bugs_count
-

-FIN - - if ($bugs_count == 0) { - print "No bugs found!\n"; - PutFooter() if $FORM{banner}; - exit; - } - - print <Bug Count by Engineer - - - - - - - - -FIN - - foreach my $who (sort keys %bugs_summary) { - my $bugz = 0; - print < - -FIN - - foreach my $st (@status) { - $bugs_totals{$who}{$st} += 0; - print <$bugs_totals{$who}{$st} -FIN - $bugz += $#{$bugs_summary{$who}{$st}} + 1; - } - - print <$bugz - -FIN - } - - print < -

-FIN - - ############################### - # individual bugs by engineer # - ############################### - - print <Individual Bugs by Engineer -

OwnerNewAssignedReopenedTotal
$who
- - - - - - -FIN - - foreach my $who (sort keys %bugs_summary) { - print < - -FIN - - foreach my $st (@status) { - my @l; - - foreach (sort { $a <=> $b } @{$bugs_summary{$who}{$st}}) { - if ($FORM{'links'}) { - push @l, "$_\n"; - } - else { - push @l, $_; - } - } - - my $bugz = join ' ', @l; - $bugz = " " unless ($bugz); - - print <$bugz -FIN - } - - print < -FIN - } - - print < -

-FIN } sub daily_stats_filename { @@ -459,12 +197,8 @@ sub daily_stats_filename { } sub show_chart { - # if we don't have the graphic mouldes don't even try to go - # here. Should probably return some decent error message. - return unless $use_gd; - if (! $FORM{datasets}) { - die_politely("You didn't select any datasets to plot"); + ThrowUserError("missing_datasets"); } print < $data_file}) unless $fields[0] =~ /date/i; push @labels, grep($datasets{$_}, @fields); } next; } - &die_politely("`# fields: ' line was not found before start of data") + ThrowCodeError("chart_datafile_corrupt", {file => $data_file}) unless @fields; my @line = split /\|/; @@ -578,7 +312,7 @@ sub generate_chart { close FILE; if (! @{$data{DATE}}) { - &die_politely ("We don't have enough data points to make a graph (yet)"); + ThrowUserError("insufficient_data_points"); } my $img = Chart::Lines->new (800, 600); @@ -608,243 +342,3 @@ sub generate_chart { $img->set (%settings); $img->$type($image_file, [ @data{('DATE', @labels)} ]); } - -sub die_politely { - my $msg = shift; - - print < -

OwnerNewAssignedReopened
$who
- - - -
-Sorry, but ... -

-There is no graph available for $FORM{'product'}

- -$msg -

-

-

-FIN - - PutFooter() if $FORM{banner}; - exit; -} - -sub bybugs { - $bugsperperson{$a} <=> $bugsperperson{$b} -} - -sub most_doomed_for_milestone { - my $when = localtime (time); - my $ms = "M" . Param("curmilestone"); - my $product_id = get_product_id($FORM{'product'}) unless $FORM{'product'} eq '-All-'; - - print "

\n

"; - if( $FORM{'product'} ne "-All-" ) { - SendSQL("SELECT defaultmilestone FROM products WHERE id = $product_id"); - $ms = FetchOneColumn(); - print "Most Doomed for $ms ($FORM{'product'})"; - } else { - print "Most Doomed for $ms"; - } - print "

\n$when

\n"; - - ######################### - # start painting report # - ######################### - - # Build up $query string - my $query; - $query = "select distinct assigned_to from bugs where target_milestone=\"$ms\""; - if ($FORM{'product'} ne "-All-" ) { - $query .= "and bugs.product_id=$product_id "; - } - $query .= <\n"; - print "

\n"; - print "$totalpeople engineers have $bugtotal $ms bugs and features.\n"; - print "
\n"; - SendSQL("select login_name from profiles where userid=$person"); - my $login_name= FetchSQLData(); - print("\n"); - print("$bugsperperson{$person} bugs and features"); - print(""); - print(" for \n"); - print(""); - print("$login_name"); - print("\n"); - print("\n"); - - $person = pop @people; - if ($person) { - SendSQL("select login_name from profiles where userid=$person"); - my $login_name= FetchSQLData(); - print("\n"); - print("$bugsperperson{$person} bugs and features"); - print(""); - print(" for \n"); - print(""); - print("$login_name"); - print("\n"); - print("
\n"; -} - - -sub most_recently_doomed { - my $when = localtime (time); - my $ms = "M" . Param("curmilestone"); - - print "
\n

"; - if( $FORM{'product'} ne "-All-" ) { - SendSQL("SELECT defaultmilestone FROM products WHERE product = " . - SqlQuote($FORM{'product'})); - $ms = FetchOneColumn(); - print "Most Recently Doomed ($FORM{'product'})"; - } else { - print "Most Recently Doomed"; - } - print "

\n$when

\n"; - - ######################### - # start painting report # - ######################### - - # Build up $query string - my $query = "SELECT DISTINCT assigned_to FROM bugs, products - WHERE bugs.bug_status = 'NEW' - AND target_milestone = '' - AND bug_severity != 'enhancement' - AND status_whiteboard = '' - AND bugs.product_id = products.id"; - if ($FORM{'product'} ne "-All-" ) { - $query .= "AND products.name =".SqlQuote($FORM{'product'}); - } - -# End build up $query string - - SendSQL ($query); - my @people = (); - while (my ($person) = FetchSQLData()) { - push @people, $person; - } - - ############################# - # suck contents of database # - ############################# - my $person = ""; - my $bugtotal = 0; - foreach $person (@people) { - my $query = "select count(bug_id) from bugs,profiles where bugs.bug_status='NEW' and userid=assigned_to and userid='$person' and target_milestone='' and bug_severity!='enhancement' and status_whiteboard='' and (product='Browser' or product='MailNews')"; - if( $FORM{'product'} ne "-All-" ) { - $query .= "and bugs.product='$FORM{'product'}'"; - } - SendSQL ($query); - my $bugcount = FetchSQLData(); - $bugsperperson{$person} = $bugcount; - $bugtotal += $bugcount; - } - -# sort people by the number of bugs they have assigned to this milestone - @people = sort bybugs @people; - my $totalpeople = @people; - - if ($totalpeople > 20) { - splice @people, 0, $totalpeople-20; - } - - print "\n"; - print "\n"; - - while (@people) { - $person = pop @people; - print "\n\n"); - } - } - print "
\n"; - print "$totalpeople engineers have $bugtotal untouched new bugs.\n"; - if ($totalpeople > 20) { - print "These are the 20 most doomed."; - } - print "
\n"; - SendSQL("select login_name from profiles where userid=$person"); - my $login_name= FetchSQLData(); - print("\n"); - print("$bugsperperson{$person} bugs"); - print(""); - print(" for \n"); - print(""); - print("$login_name"); - print("\n"); - print("\n"); - - $person = pop @people; - if ($person) { - SendSQL("select login_name from profiles where userid=$person"); - my $login_name= FetchSQLData(); - print("\n"); - print("$bugsperperson{$person} bugs"); - print(""); - print(" for \n"); - print(""); - print("$login_name"); - print("\n"); - print("
\n"; - -} -- cgit v1.2.3-24-g4f1b