kerneltest/f32test/bench/testscripts/filter_results.pl
changeset 9 96e5fb8b040d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/f32test/bench/testscripts/filter_results.pl	Thu Dec 17 09:24:54 2009 +0200
@@ -0,0 +1,357 @@
+#!perl
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# This script filters and parses the contents of the performance tests results.
+# @todo: 
+# + make a temporary filtered file to work with it later 
+# + search for all possible "TestId" 
+# - print out time that the test has taken 
+# Usage:
+# filter_results.pl <test_log> [csv]
+# <test_log> Raw test log filename
+# csv        Will generate a set of comma-separated values
+# 
+#
+
+use strict;
+
+my @TestsIds;         #-- an array of test Ids  
+my $currTestId;       #-- current TestId to work with
+my $currTestStep;     #-- current test step number within current test
+
+my @columnTitles;     #-- results columns titles
+my $MaxColumns;       #-- maximal number of columns in the report table 
+my $MaxRows;          #-- maximal number of rows in the report table   
+
+my $inpFile;          #-- input file name
+my $tmpFile = "filtered.tmp"; #-- temp. filtered file name  
+
+my $searchPattern;
+my ($matchLine, $matchLineNumber);
+
+my $OutputMode = "Text";       # CSV or Text
+
+
+
+#-----------------------------------------------------
+#-- test tags that we expect to find in the input file
+my $KTagPrefix  = "#~";
+
+my $KTag_TestId     = "TestId=";
+my $KTag_TestTitle  = "TestTitle_";
+my $KTag_TestParam  = "TestParam_";  
+my $KTag_TestRows   = "TestRows_";
+my $KTag_TestColumns= "TestColumns_";
+my $KTag_TS_Title   = "TS_Title_";
+my $KTag_TS_Res     = "TS_Res_"; 
+#-----------------------------------------------------
+
+#-- input file
+$inpFile = $ARGV[0];
+
+if (lc($ARGV[1]) eq 'csv')
+	{
+	$OutputMode = "CSV";
+	}
+
+#-- filter input file by TestTag prefix, the result will be in $tmpFile 
+FilterInputFile();
+
+#-- now use filtered data as input
+$inpFile =$tmpFile;
+
+#-- find all TestId in the input file and put them into @TestsIds 
+FindTestIds();
+if(@TestsIds == 0)
+{
+    die "can't find $KTag_TestId tags in the input file!\n"
+}
+
+#-- process test results for each TestId
+my $i;
+foreach $i (@TestsIds)
+{
+    $currTestId = $i;
+    
+    ProcessTestResults();
+}
+
+
+unlink $tmpFile; 
+
+exit;
+
+sub TextPrintf
+	{
+	if ($OutputMode eq "Text")
+		{
+		printf @_;
+		}
+	}
+sub TextPrint
+	{
+	if ($OutputMode eq "Text")
+		{
+		print @_;
+		}
+	}
+sub CSVPrintf
+	{
+	if ($OutputMode eq "CSV")
+		{
+		printf @_;
+		}
+	}
+sub CSVPrint
+	{
+	if ($OutputMode eq "CSV")
+		{
+		print @_;
+		}
+	}
+
+
+#--------------------------------------------------------------------------------------------
+#   Extract test results (by TestId) from the input file.  
+#--------------------------------------------------------------------------------------------
+sub ProcessTestResults
+{
+    my ($scratch0, $scratch1); 
+    my ($i, $j);
+    my ($CSVFields, $ExtraParams, $TimeUnit);
+    $CSVFields = "TestId,TestStep,Param1,Param2,ExtraParams,Unit,Result";
+
+    TextPrint("\n============================================================================\n\n");
+    #-- extract and print test title
+    $searchPattern=$KTag_TestTitle.$currTestId.":";
+    FindPatternInFile();
+    if($matchLine=~ /$searchPattern.(.*)/i)
+    {
+      $scratch0=$1; chomp($scratch0);
+      TextPrint "Test $currTestId: ", $scratch0, "\n";
+      CSVPrint "# Test $currTestId: ", $scratch0, "\n";
+    } 
+    else {die "can't find $searchPattern in the input file!\n"};
+    
+    #-- extract and print test parameters
+    $searchPattern=$KTag_TestParam.$currTestId.":";
+    FindPatternInFile();
+    if($matchLine=~ /$searchPattern.(.*)/i)
+    {
+      $scratch0=$1; chomp($scratch0);
+      TextPrint "Test parameters: ", $scratch0, "\n";
+      # Turn parameters into comma-separated values
+      foreach(split /,/, $scratch0)
+      	{
+	    if (/^\s*(.+)=(.+)\s*$/)
+	    	{
+		    if ($1 eq 'timeUnit')
+		    	{
+			    $TimeUnit = $2;
+		    	}
+		    else
+		    	{
+			    $ExtraParams .= ';' if ($ExtraParams) ne '';
+			    $ExtraParams .= "$1=$2";
+		    	}
+  			}
+  		}
+    }
+    else {die "can't find $searchPattern in the input file!\n"};
+    
+    TextPrint("\n============================================================================\n\n");
+    
+    #-- extract number of rows in the result tables
+    $searchPattern=$KTag_TestRows.$currTestId.":";
+    FindPatternInFile();
+    if($matchLine=~ /$searchPattern.(.*)/i)
+    {
+      $MaxRows=$1; chomp($MaxRows);
+      #TextPrint "Rows: $MaxRows\n";
+    } 
+    else {die "can't find $searchPattern in the input file!\n"};
+    
+    
+    #-- extract test results columns description
+    $searchPattern=$KTag_TestColumns."$currTestId:";
+    FindPatternInFile();
+    if($matchLine=~ /$searchPattern.(.*)/i)
+    {
+      $scratch0=$1; chomp($scratch0);
+      #TextPrint "Test columns: ", $scratch0, "\n";
+    
+      @columnTitles = split(/,/,$scratch0);
+      chomp(@columnTitles);
+      @columnTitles=TrimStr(@columnTitles);
+      
+      $MaxColumns=shift(@columnTitles);
+      #TextPrint "!!max columns: ", $MaxColumns, "\n";
+    
+      if($MaxColumns != @columnTitles)
+        {die "Wrong $searchPattern value!, see input file, line:$matchLineNumber\n"};
+    } 
+    else {die "can't find $searchPattern in the input file!\n"};
+    
+    #-- test step loop. try to find all test steps within current test
+    for($currTestStep=1; $currTestStep<999; $currTestStep++)
+    {
+      $searchPattern="$KTag_TS_Title$currTestId,$currTestStep:";
+      FindPatternInFile();
+      if($matchLine=~ /$searchPattern.(.*)/i)
+      {
+        $scratch0=$1; chomp($scratch0);
+        TextPrint "\nTest step $currTestId,$currTestStep: ", $scratch0, "\n\n";
+        CSVPrint "# Test step $currTestId,$currTestStep: ", $scratch0, "\n";
+      } 
+      else {last}; 
+    
+      #-- here we have current test id & test step number 
+      
+      #-- print out table columns headers
+      for($i=0; $i<$MaxColumns; $i++)
+      {
+        TextPrintf "%12s", @columnTitles[$i];
+      }
+      $CSVFields =~ s/Param1/$columnTitles[0]/;
+      CSVPrint "# $CSVFields\n";
+      
+      TextPrint("\n");
+    
+      #-- print out result table
+      for($i=1; $i<=$MaxRows; $i++)
+      {
+	    my $rowcaption;
+        for($j=1; $j<=$MaxColumns; $j++)
+        {
+            $searchPattern="$KTag_TS_Res$currTestId,$currTestStep,\\[$i,$j\\]";
+            FindPatternInFile();
+            if($matchLine=~ /$searchPattern.(.*)/i)
+            {
+              $scratch0=$1; chomp($scratch0);
+              $scratch0 = TrimStr($scratch0);
+              TextPrintf "%12s", "$scratch0";
+              if ($j == 1)
+              	{
+	        	$rowcaption = $scratch0;
+              	}
+              else
+              	{
+              	CSVPrint $currTestId.",".$currTestStep.",".$rowcaption.",".$columnTitles[$j-1].",$ExtraParams,$TimeUnit,$scratch0\n";
+          		}
+            } 
+            else {die "can't find $searchPattern in the input file!\n"};
+                
+        }
+        
+        TextPrint "\n";
+      }
+      TextPrint "\n";
+      
+    }
+
+}#
+
+exit;
+
+
+#--------------------------------------------------------------------------------------------
+#   Find all Test Id values in the input file and put them into @TestsIds array 
+#--------------------------------------------------------------------------------------------
+sub FindTestIds
+{
+  my $line;
+  open(INP_FILE, "$inpFile") || die "Can't open input file $inpFile !";
+
+  #-- read input file line by line, looking for pattern match
+  while($line = <INP_FILE>)
+  {
+    if($line=~ /$KTag_TestId(\d*)/i)
+    {#-- found a string matching pattern; put TestId to the array
+       #print $line, $1."\n";
+       push(@TestsIds, $1);
+    }
+  }
+
+  close (INP_FILE);
+}
+
+#--------------------------------------------------------------------------------------------
+#   Filters inputfile by the test tag prefix ($KTagPrefix)     
+#   Filtered lines are placed to the ($tmpFile)  
+#--------------------------------------------------------------------------------------------
+sub FilterInputFile()
+{
+  my $line;
+  open(INP_FILE, "$inpFile") || die "Can't open input file $inpFile !";
+  open(TEMP_FILE, ">$tmpFile") || die "Can't open input file $tmpFile !";
+
+  #-- read input file line by line, looking for pattern match
+  while($line = <INP_FILE>)
+  {  
+    if($line=~ /$KTagPrefix(.*)/i)
+    {#-- found a string with the prefix
+      print TEMP_FILE $1."\n";;
+    }
+  }
+  
+  close (INP_FILE);
+  close (TEMP_FILE);
+
+}
+
+#--------------------------------------------------------------------------------------------
+#   Finds a firs occurence of a given pattern ($searchPattern) in the ($inpFile)  
+#   and places the found line to the $matchLine. 
+#   Also modifies $matchLineNumber 
+#--------------------------------------------------------------------------------------------
+sub FindPatternInFile
+{
+  my $line;
+  open(INP_FILE, "$inpFile") || die "Can't open input file $inpFile !";
+
+  #-- read input file line by line, looking for pattern match
+  #-- not very efficient, may be optimised ? 
+  $matchLineNumber=0;
+  $matchLine="";
+  while($line = <INP_FILE>)
+  {
+    $matchLineNumber++;
+
+    if($line=~ /$searchPattern/i)
+    {#-- found a string matching pattern; return
+      chomp($line);
+      #TextPrint $line."\n";
+      $matchLine=$line;
+      last;
+    }
+  }
+
+  close (INP_FILE);
+}
+
+
+#--------------------------------------------------------------------------------------------
+# Strip spaces from the beginning & end of the string
+#--------------------------------------------------------------------------------------------
+sub TrimStr 
+{
+    my @out = @_;
+    for (@out) 
+    {
+        s/^\s+//;
+        s/\s+$//;
+    }
+    return wantarray ? @out : $out[0];
+}
+