Open MPI logo

MTT Devel Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all MTT Devel mailing list

Subject: Re: [MTT devel] mtt patch: summary digest
From: Ethan Mallove (ethan.mallove_at_[hidden])
Date: 2008-10-27 10:17:53


I'm fine with these changes.

-Ethan

On Sun, Oct/26/2008 04:14:23PM, Mike Dubman wrote:
>
>
> 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

> _______________________________________________
> mtt-devel mailing list
> mtt-devel_at_[hidden]
> http://www.open-mpi.org/mailman/listinfo.cgi/mtt-devel