Hello guys,
Please consider applying attached mtt patch to allow following features: 1. Support for centos5 2. Send single, digested email report for all completed tests (similar to text file summary file) 3. Provide basic statistics in the digested email about completed tests (similar to junit): duration, mpi version, overall status. Thanks Mike
Index: samples/ompi-core-template.ini =================================================================== --- samples/ompi-core-template.ini (revision 1235) +++ samples/ompi-core-template.ini (working copy) @@ -719,6 +719,15 @@ textfile_textwrap = 78 +# Send digested summary of mtt execution by email +#email_to = +#email_subject = MTT test has completed, status: $overall_mtt_status +#email_footer = <<EOT +#Test Scratch Directory is &scratch_root() +#EOT + + + [Reporter: send email] module = Email email_to = fill this in Index: lib/MTT/Reporter/TextFile.pm =================================================================== --- lib/MTT/Reporter/TextFile.pm (revision 1235) +++ lib/MTT/Reporter/TextFile.pm (working copy) @@ -21,6 +21,7 @@ use MTT::Files; use MTT::Version; use Data::Dumper; +use MTT::Mail; use File::Basename; use Text::Wrap; @@ -43,6 +44,13 @@ # wordwrap pref for reports my $textwrap; +# global ini variables +my ($ini, $section); + + +# send summary by email if requested +my $to; + # Do we have Text::TabularDisplay? my $have_tabulardisplay; eval "\$have_tabulardisplay = require Text::TabularDisplay"; @@ -50,7 +58,7 @@ #-------------------------------------------------------------------------- sub Init { - my ($ini, $section) = @_; + ($ini, $section) = @_; # Sanity check if (!$have_tabulardisplay) { @@ -88,6 +96,24 @@ Debug("File reporter initialized (<stdout>)\n"); } + + # Initialize nail notification for summary + + $to = Value($ini, $section, "email_to"); + if ($to) { + # Setup the mailer + my $agent = Value($ini, $section, "email_agent"); + if (!MTT::Mail::Init($agent)) { + Debug("Failed to setup TextFileEmail reporter\n"); + return 0; + } + + Debug("TextFileEmail reporter initialized ($to)\n"); + } + + + + return 1; } @@ -132,7 +158,8 @@ print $summary_header; - my $table = Text::TabularDisplay->new(("Phase","Section","Pass","Fail","Time out","Skip")); + my $table = Text::TabularDisplay->new(("Phase","Section","MPI Version", "Duration (secs.)","Pass","Fail","Time out","Skip")); + my ($total_fail, $total_succ, $total_tests,$total_duration) = (0,0,0,0); foreach my $results (@$results_arr) { @@ -142,7 +169,7 @@ foreach my $section (keys %{$phase_obj}) { my $section_obj = $results->{$phase}{$section}; - my ($pass, $fail, $timed, $skipped) = (0, 0, 0, 0); + my ($pass, $fail, $timed, $skipped, $duration, $mpi_version) = (0, 0, 0, 0, 0, undef); foreach my $results_hash (@$section_obj) { @@ -155,22 +182,69 @@ } elsif ($results_hash->{test_result} eq MTT::Values::SKIPPED) { $skipped++; } + if ( defined($results_hash->{duration}) ) { + my $one_test_duration = $results_hash->{duration}; + $one_test_duration =~ s/(\d+).+/$1/g; + $duration += $one_test_duration; + } + + if (defined($results_hash->{mpi_version}) and !$mpi_version) { + $mpi_version = $results_hash->{mpi_version}; + } } - $table->add($phase, $section, $pass, $fail, $timed, $skipped); + + + $total_fail += $fail + $timed; + $total_succ += $pass; + $total_duration += $duration; + $table->add($phase, $section, $mpi_version, $duration, $pass, $fail, $timed, $skipped); } } } - print $table->render . "\n" . $summary_footer; + $total_tests = $total_fail + $total_succ; + my $total_duration_human = _convert_duration($total_duration); + my $perf_stat = " + + Total Tests: $total_tests + Total Failures: $total_fail + Total Passed: $total_succ + Total Duration: $total_duration secs. ($total_duration_human) + + "; + print $table->render . "\n" . $perf_stat . $summary_footer; + # Write the Summary report to a file my $filename = "All_phase-summary.txt"; my $file = "$dirname/" . MTT::Files::make_safe_filename("$filename"); - _output_results($file, - join("\n", ($summary_header, - $table->render, - $summary_footer))); + my $body = join("\n", ($summary_header, $table->render, $perf_stat, $summary_footer)); + print $body; + _output_results($file, $body); + + if ( $to ) { + # Evaluate the email subject header and from + my ($subject, $body_footer); + my $subject_tmpl = Value($ini, $section, "email_subject"); + my $body_footer_tmpl = Value($ini, $section, "email_footer"); + my $from = Value($ini, $section, "email_from"); + + my $overall_mtt_status = "success"; + if ( $total_fail > 0 ) { + $overall_mtt_status = "failed"; + } + my $str = "\$body_footer = \"$body_footer_tmpl\""; + eval $str; + + my $str = "\$subject = \"$subject_tmpl\""; + eval $str; + Verbose(">> Subject: $subject\n"); + + # Now send it + MTT::Mail::Send($subject, $to, $from, $body . $body_footer); + Verbose(">> Reported to e-mail: $to\n"); + } return 1; } @@ -344,4 +418,32 @@ return $report; } +# convert duration in secs to human-readable dd HH:MM:SS +sub _convert_duration +{ + use integer; + my ($rtime)= @_; + + my $min = $rtime / 60; + my $sec = $rtime % 60; + my $hour = $min / 60; + my $min = $min % 60; + my $day = $hour / 24; + my $hour = $hour % 24; + my @times; + + if ($day) { + @times = ($day, $hour, $min, $sec); + } elsif ($hour) { + @times = ($hour, $min, $sec); + } else { + @times = ($min, $sec); + } + + my $res = join(':', @times); + $res =~ s/\b(\d)\b/0$1/g; + return $res; +} + + 1; Index: client/whatami/whatami =================================================================== --- client/whatami/whatami (revision 1235) +++ client/whatami/whatami (working copy) @@ -195,7 +195,7 @@ elif [ -n "`egrep 'SGI ProPack 3' /etc/issue`" ]; then distro=rhel3 - elif [ -n "`egrep 'CentOS release 4.[0-9]' /etc/issue`" ]; then + elif [ -n "`egrep 'CentOS release [45].[0-9]' /etc/issue`" ]; then distro=rhel4 elif [ -n "`egrep 'SuSE SLES 8' /etc/issue`" ]; then