#!/usr/bin/perl # # # This is the HTML form for selecting projects for QA Metrics # use lib qw(/tools/local/lib/perl5); use strict; use warnings; use CGI qw(:standard); use CGI::Carp qw(fatalsToBrowser); use DBI; use GD::Graph::linespoints; my $cgi = new CGI; my @timedata = localtime(time); #print "Content-type: text/html\n\n"; #print "@timedata[0]\n, @timedata[1]\n, @timedata[2]\n,@timedata[3]\n,@timedata[4]\n,@timedata[5]\n,@timedata[6]"; my $day = $timedata[3]; my $month = $timedata[4] + 1; my $year = 1900 + $timedata[5]; my $def_start_date = '31/3/2009'; my $today_date = join( '/', $day, $month, $year ); my $def_end_date = $today_date; #print "Content-type: text/html\n\n"; #print "$def_end_date"; if ( !$cgi->param ) { print $cgi->header; print $cgi->start_html( -title => 'Project Selection', -style => { 'src' => 'http://wwwin.telegent.com/sqametrics/style1.css' } ); print $cgi->startform; print $cgi->h3('Select Project to view QA Metrics'); print $cgi->br; print $cgi->br; print "Enter Start Date [dd/mm/yyyy]
"; print $cgi->textfield( -name => 'start_date', -default => $def_start_date, -size => 9, -maxlength => 80 ); print $cgi->br; print $cgi->br; print "Enter End Date [dd/mm/yyyy]
"; print $cgi->textfield( -name => 'end_date', -default => $def_end_date, -override => 'true', -size => 9, -maxlength => 80 ); print $cgi->br; print $cgi->br; print $cgi->br; print "Select Project and DataType to View QA Metrics
"; print $cgi->br; print $cgi->scrolling_list( -name => 'Projects', -value => [ 'ARES', 'POSEIDON_SW', 'DEIMOS', 'MIMAS', 'JUPITER', 'POSEIDON', 'DIONYSUS' ], -size => 7, -multiple => 'false', -default => 'ARES' ); print $cgi->br; print $cgi->br; print $cgi->br; print "Select Check Box for Plotting Verified, Closed Bug Data
"; print $cgi->br; print $cgi->checkbox( -name => 'verified_closed', -checked => 0, -value => 'verified-closed' ); print $cgi->br; print $cgi->br; print "Select from P1, P2, or P1+P2 Bugs Data
"; print $cgi->br; print $cgi->radio_group( -name => 'P1P2_bugs', -values => [ 'P1', 'P2', 'P1-P2', 'Daily-Snapshot' ], -default => ['P1'], -linebreak => 'true' ); print $cgi->br; print $cgi->submit( -value => 'Submit Project' ); print $cgi->endform; print $cgi->end_html; } else { my $start_date = param('start_date'); my $end_date = param('end_date'); my $error_msg = ""; $error_msg = &validate_date( $start_date, $end_date, $today_date ); #print "Content-type: text/html\n\n"; #print $today_date; # my $error_msg = ""; # if (!$start_date){ # $error_msg1 = "The Start Date Field is Blank. Please use Browser Back button and enter a Valid Start Date
"}; # if (!$end_date){ # $error_msg2 = "The End Date Field is Blank. Please use Browser Back button and enter a Valid End Date
"}; # if ( !$error_msg ) { #my $start_date_newfrmt = &date_format($start_date); my @date_array = split( /\//, $start_date ); my $start_date_newfrmt = join( '-', $date_array[2], $date_array[1], $date_array[0] ); my @date_array1 = split( /\//, $end_date ); my $end_date_newfrmt = join( '-', $date_array1[2], $date_array1[1], $date_array1[0] ); my @selected = param('Projects'); my $turned_on = param('verified_closed'); #print "Content-type: text/html\n\n"; #print $turned_on; my $which_radio_button = param('P1P2_bugs'); # #Decide the rec_type based on the Radio button selection if ( $which_radio_button eq 'P1' ) { my $rec_type = '3'; my $y_label = 'Open P1 Bugs'; } elsif ( $which_radio_button eq 'P2' ) { my $rec_type = '4'; my $y_label = 'Open P2 Bugs'; } elsif ( $which_radio_button eq 'P1-P2' ) { my $rec_type = '2'; my $y_label = 'Open P1-P2 Bugs'; } elsif ( $which_radio_button eq 'Daily-Snapshot' ) { my $rec_type = '1'; my $y_label = 'Daily-Snapshot'; } my $project_name1 = $selected[0]; my $num_selected = @selected; # # Check what data types are selcted and set flags for plotting the data # #print "Content-type: text/html\n\n"; #print @selected[0],@turned_on[0], $new_flag, $open_flag, $reopen_flag, $closed_flag; my $rec_type; my $dbh = DBI->connect( 'dbi:mysql:bugz:bugzilla.telegent.com:3306', 'swqa', 'sImANten' ) or die "Connection Error: $DBI::errstr\n"; my $sql = "Select log_date, new_cnt, open_cnt, reopen_cnt, fixed_cnt, verified_cnt, closed_cnt from swqa.Poseidon where product like '%$project_name1%' and 'rec_type'=$rec_type and log_date between '$start_date_newfrmt' and '$end_date_newfrmt'"; my $sth = $dbh->prepare($sql); $sth->execute or die "SQL Error: $DBI::errstr\n"; my @log_date = (); my @new_bugs = (); my @open_bugs = (); my @reopen_bugs = (); my @fixed_bugs = (); my @verified_bugs = (); my @closed_bugs = (); while ( my @row = $sth->fetchrow_array ) { # print "$row[0]$row[1]$row[2]\n"; push @log_date, $row[0]; push @new_bugs, $row[1]; push @open_bugs, $row[2]; push @reopen_bugs, $row[3]; push @fixed_bugs, $row[4]; push @verified_bugs, $row[5]; push @closed_bugs, $row[6]; } # print @log_date; # print @deimos_open_bugs; $dbh->disconnect; #print "Content-type: text/html\n\n"; #print $new_flag, $open_flag, $reopen_flag, $fixed_flag; # if ( $turned_on eq 'verified-closed' ) { my @data = ( \@log_date, \@new_bugs, \@open_bugs, \@reopen_bugs, \@fixed_bugs, \@verified_bugs, \@closed_bugs ); } else { my @data = ( \@log_date, \@new_bugs, \@open_bugs, \@reopen_bugs, \@fixed_bugs ); } print $cgi->header( -type => 'image/png' ); my $title = "Open Bugs for $project_name1"; my $mygraph = GD::Graph::linespoints->new( 600, 400 ); #my @legend_keys = qw(new_bugs open_bugs reopen_bugs fixed_bugs verified_bugs ); my @legend_keys = qw(new_bugs open_bugs reopen_bugs fixed_bugs verified_bugs closed_bugs); $mygraph->set( x_label => 'Log_Date', y_label => '$y_label', x_label_skip => 30, x_labels_vertical => 'true', title => $title, legend_placement => 'BL', legend_marker_height => 12, dclrs => [qw(green blue red yellow brown orange)], ) or warn $mygraph->error; $mygraph->set_legend(@legend_keys); $mygraph->set_title_font(GD::gdGiantFont); $mygraph->set_x_label_font(GD::gdLargeFont); $mygraph->set_y_label_font(GD::gdLargeFont); my @data; my $myimage = $mygraph->plot( \@data ) or die $mygraph->error; binmode STDOUT; print $myimage->png; #my $mygraph #print $cgi->end_html; } else { print "Content-type: text/html\n\n"; print $cgi->h3('Error Message'); print $cgi->h3($error_msg); } } sub date_format { my $date; my @date_array = split( /\//, $date ); print @date_array; my $new_date = join( '-', $date_array[2], $date_array[1], $date_array[0] ); return $new_date; } sub validate_date { my $start_date = $_[0]; my $end_date = $_[1]; my $today_date = $_[2]; my @start_date_array = split( /\//, $start_date ); my @end_date_array = split( /\//, $end_date ); my @today_date_array = split( /\//, $today_date ); my $yyyymmdd_start_date = join( "", $start_date_array[2], $start_date_array[1], $start_date_array[0] ); # print "Content-type: text/html\n\n"; # print $yyyymmdd_start_date; my $error_msg = ""; if ( !$start_date || !$end_date ) { $error_msg = "Blank Field in Date field. Please Use Browser Back button and Enter Date Field"; } elsif (( $start_date !~ m[^\d+\/\d+\/\d{4}$] ) || ( $end_date !~ m[^\d+\/\d+\/\d{4}$] ) ) { $error_msg = "Invalid Characters in Date. Please Use Browser Back button and Enter Start Date"; } else { my $error_msg = ""; } return $error_msg; }