#!/usr/bin/perl

#LTP results gathering script: ltp_check
#       3/12/02 William Jay Huie (creation)
#       3/28/02 William Jay Huie minor fixes, increased results parsing
#       5/01/02 William Jay Huie parsing changes
#       5/17/02 Casey Abell added sar results
#This will log into the LTP_HOST machine, which may be different then the
#machine used to run the ltp_master script
#This script will check for *ltpoutput.tgz files created by the ltprun script
#and download them each to their own directory and do a bit of processing
#the results gathering probably needs to be extended but hopefully this is a good
#first go at it

use Net::FTP ();

#CHANGEME:
#For some reason doesn't work if you do ~/ltp/results, so you need to code the
#explicit path for LTP_RES_DIR unless someone can tell me why
$LTP_RES_DIR="/home/wjhuie/ltp/results";
#CHANGEME:
$LTP_HOST="ltp_host.somewhere.org";

#This is who has the *ltpoutput.tgz files, where the results are uploaded
#     not necessarially the user id that ran the test
$LTP_USER="ltp";
$LTP_PASS="ltp";
$LTP_LOGFILE="ltp-logfile";
$LTP_RUN_OUTPUT="ltprun.out";
$LTP_RUNALL_OUT="runall.output";
$RESULTS_OUT="results.out";
$FAILS_OUT="failures.list";
$SAR_OUTFILE="sar.data";

@res_dirs;
$count = 0;
$RES = 0;
$FAILS = 0;
%hash;

sub download_results()
{
   print "Attempting to download the LTP results\n";

   $dir = system("ls $LTP_RES_DIR &> /dev/null") / 256;
   if ($dir)
   {
     print "Making a results directory in $LTP_RES_DIR\n";
     `mkdir -p $LTP_RES_DIR`;
     chdir "$LTP_RES_DIR" or die "Can't change to $LTP_RES_DIR\n";
   }
   else
   { chdir "$LTP_RES_DIR" or die "Can't change to $LTP_RES_DIR\n"; }

   $ftp = Net::FTP->new($LTP_HOST, Debug => 0) or die "Can't connect to ftp: $LTP_HOST";
   $ftp->login($LTP_USER, $LTP_PASS) or die "Unable to login";
   $ftp->type('I') or die "Unable to set type to Binary";
   @files = $ftp->ls("*ltpoutput.tgz");
   $num_files = $#files + 1;
   print "New results files found $num_files:\n";
   for ($i = 0; $i < $num_files; $i++) { print "\t$files[$i]\n"; }

   for ($i = 0; $i < $num_files; $i++)
   {
      print "Downloading: $files[$i]\t";
      if ($ftp->get($files[$i]))
      {
         print "Successful\n";
         $ftp->delete($files[$i]);
      }
      else
      { print "FAILED\n"; }

   }
   $ftp->quit;

   @res = `ls $LTP_RES_DIR/*.tgz 2> /dev/null`;

   if (@res)
   {
      $num = $#res + 1;
      print "             download of LTP results finished\n";
      print "$num unprocessed results files found\n";
      chomp(@res);
      return 1;
   }
   else
   {  print "             no apparent results to process\n"; return 0; }

}

sub untar_results()
{
   for ($i = 0; $i < $num; $i++)
   {
      if ( $res[$i] =~ m/\s*(\w+)-((\w+)-)*ltpoutput.tgz/ )
      {
         $hostname = $1;
         $epoch_time = $3;
         $english_time = localtime($epoch_time);
         $dir = "$LTP_RES_DIR/$hostname/$english_time";

         if ($english_time)
         {
            $new_dir = $dir;
            $new_dir =~ s/ /_/g;
            print "New results: $hostname @ $english_time\n";
            `mkdir -p '$new_dir'`;
            chdir "$new_dir" or die "Can't change to $new_dir\n";
            `tar -zxf $res[$i]`;
            `mv $res[$i] $new_dir`;
            $res_dirs[$count] = $new_dir; $count++;
         }
         else
         {
            print "No timestamp on results file, skipping for now\n";
#Should come up with a soultion for this, check/create $hostname
#     then some unique identifier but for now we'll complain and ignore
         }
      }
   }
   return 1;
}

sub gather_results()
{
   print "Gathering $count result(s):\n";

   for ($i = 0; $i < $count; $i++)
   {
      print "\nResults for: $res_dirs[$i]\n";
      chdir "$res_dirs[$i]" or die "Can't change to $res_dirs[$i]\n";

      if ( !( -f $LTP_RUNALL_OUT && -f $LTP_LOGFILE ) )
      {
           print "$LTP_RUNALL_OUT or $LTP_LOGFILE seems to be missing\n";
           print "     check the tarfile and perhaps $LTP_RUN_OUTPUT\n";
           print "Skipping\n";
           next;
      }

      chomp($stat = `tail -n 1 $LTP_RUNALL_OUT`);
      print "\t\t$stat\n";

      $num_success = `grep "stat=0" $LTP_LOGFILE | wc -l`;
      if ( $num_success =~ /\s*(\d+)\s*/ ) { $num_success = $1; }

      @fails = `grep "stat=" $LTP_LOGFILE | grep -v "stat=0"`;
      $num_fail = $#fails + 1;

      # gather the same fail cases together and have a counter for each different fail case.

        foreach $each (@fails) {
                if ($each =~ /(.)*tag=(\w+)\sstime=(.+)/){
                        $case = $2;
                        # print "$case\n";
                        if (exists $hash{$case}) {
                        #       print "$hash{$case} before\n";
                                $counter = $hash{$case}+1;
                                $hash{$case} = $counter;
                        #       print "$hash{$case} later\n";

                        }
                        else {
                                $hash{$case}=1;
                        }
                }
        }

      $pass_percent = sprintf("%.2f",
                         ($num_success / ($num_success + $num_fail)) * 100);

      $ltp_ver = `grep "version" $LTP_RUN_OUTPUT`;
      if ( $ltp_ver =~ m/.*version: (.*)/ ) { $ltp_ver = $1; }

      $line = "Pass $pass_percent % : $num_success succeeded : $num_fail failed";
      print "$line\n";

      $line1 = `sar -f $SAR_OUTFILE |tail -n 1`;
      if ($line1 =~ /(.+)/) {
        @sarstats1 = split(/\s+/, $line1);
        print "Cpu user = $sarstats1[2]%\n";
        print "Cpu nice = $sarstats1[3]%\n";
        print "Cpu system = $sarstats1[4]%\n";

        $line2 = `sar -r -f $SAR_OUTFILE |tail -n 1`;
        @sarstats2 = split(/\s+/, $line2);
        print "Memory used = $sarstats2[3]%\n";
        print "Swap used = $sarstats2[9]%\n";

        $line3 = `sar -c -f $SAR_OUTFILE |tail -n 1`;
        @sarstats3 = split(/\s+/, $line3);
        print "Processes created per second = $sarstats3[1]%\n";
      }

      if (open RES, ">$RESULTS_OUT")
      {
         print ". -> Results stored in $RESULTS_OUT\n";
         if (!open FAILS, ">$FAILS_OUT") { print "Error opening $FAILS_OUT\n"; }
         $num =
#The <<<test_start>>> doesn't always get into the runalltest.sh output capture
#because some output will appear before its corresponding block
#So for now relying on last thing from ver_linux to know when to stop copying
#          system("awk '/<<<test_start>>>/ { exit NR-1; }' $LTP_RUNALL_OUT") / 256;
           system("awk '/bogomips/ { exit NR; }' $LTP_RUNALL_OUT") / 256;

         @system_info = `head -n $num $LTP_RUNALL_OUT`;

         if ($ltp_ver) { print RES "$ltp_ver : "; }
         print RES "$line\n\n";
         if ($line1 =~ /(.+)/) {
           print RES "Cpu user = $sarstats1[2]%\n";
           print RES "Cpu nice = $sarstats1[3]%\n";
           print RES "Cpu system = $sarstats1[4]%\n";
           print RES "Memory used = $sarstats2[3]%\n";
           print RES "Swap used = $sarstats2[9]%\n";
           print RES "processes created per second = $sarstats3[1]%\n\n";
        }
         print RES "@system_info\n";
         print RES "$stat:\n";

         #print out each failed case information.
         foreach $case(keys %hash){
                print RES "failed case=$case\tnumber of failures=$hash{$case}\n";
         }
#end of new ouput section

         $runall = `cat $LTP_RUNALL_OUT`;

	 # reset hash table values to 0
	 foreach $case(keys %hash){
		$hash{$case}=0;
	 }

         for ($j = 0; $j < $num_fail; $j++)
         {
            if ( $fails[$j] =~ m/^tag=(\w+?) / )
            {
               	$test_case = $1;
		# each failure case will be printed out only once
	       	if ((exists $hash{$test_case})&&( $hash{$test_case}==0 )) {
			$hash{$test_case}=1;

                        if (FAILS) { print FAILS "$test_case\n"; }
               		print RES "\nTrying to find $test_case output";
               		if ( $runall =~
			#modified because some output is appearing before tagline
                    		m/((^$test_case.*?)*<<<test_start>>>.tag=$test_case.*?<<<test_end>>>)/ms )
               		{
               		   	print RES "\n-------------------------\n";
                 		print RES "$1";
                 		print RES "\n-------------------------\n";
               		}
              		else
               		{
                  		print RES "\n-------------------------\n";
                  		print RES "Unable to locate output for $test_case!";
                  		print RES "\n-------------------------\n";
               		}
		}
            }
         }
         close(RES); close(FAILS);
      }
      else
      { print "Can't open $RESULTS_OUT, test failures are:\n @fails\n"; }
   }
   return 1;
}

if (!download_results)
{ exit 0; }

if (!untar_results)
{ exit 0; }

if (!gather_results)
{ exit 0; }
