installationservices/swcomponentregistry/test/tscr/scripts/performance_log_parser.pl
branchRCL_3
changeset 25 7333d7932ef7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscr/scripts/performance_log_parser.pl	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,178 @@
+#
+# Copyright (c) 2008-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: 
+# Script: performance_log_parser.pl
+#
+
+use strict;
+use FileHandle;
+
+my $Test_Case_Start_Tag = "START_TESTCASE";
+my $Test_Case_End_Tag = "END_TESTCASE";
+my $Event_print = "PERFORMANCE_LOG_INFORMATION";
+my $Test_Case_Max_Duration = "TEST_CASE_MAXIMUM_ALLOWED_DURATION";
+my $ScrEventCode = 1;
+
+my $defInputFile = "/epoc32/winscw/c/logs/testexecute/tscr_performance.htm";
+my $defOutputFile = "/epoc32/winscw/c/logs/scr_performance.txt";
+
+sub millisec
+	{  
+	no warnings 'uninitialized';
+	my ($mytime) = @_ ;
+	$mytime =~ /([0-9]*):([0-9]*):([0-9]*):([0-9]*)$/;
+	my $milisec = $4;
+	my $sec = $3;
+	my $min = $2;
+	my $hour = $1;
+
+	my $msecs = ($milisec / 1000) + ($sec *1000) + ($min * 60000) + ($hour * 3600000);
+	return $msecs;
+	}
+
+sub process_log_file
+	{
+	my ($data_file, $output_FH) = @_;
+	print $output_FH "#Test Case Name,Maximum Duration(ms),Actual Duration(ms),Result\n";
+	
+	# enable reading whole file as one chunk
+	my $SAVE_RS = $/;
+	undef $/;
+	
+	# open and read the log file in a single line
+	open(DAT, $data_file) || die("Could not open file $data_file!");
+	my $raw_data=<DAT>;
+	close(DAT);
+	$raw_data=~ s/\n/ /g;
+
+	# restore previous record separator
+	$/ = $SAVE_RS;	
+	
+	my $num_passed = 0;
+	my $num_failed = 0;
+	
+	while ($raw_data && $raw_data =~ /$Test_Case_Start_Tag\s+(\S+)/)
+		{
+		# step through the file in chunks delimited by the start/end test case tags.
+		
+		my $test_case_name = $1;
+		my ($test_case_data) = ($raw_data =~ /$Test_Case_Start_Tag(.*?)$Test_Case_End_Tag/);
+		
+		if (not $test_case_data)
+			{
+			print STDERR "Error: Test case: $test_case_name: Suspected missing END_TESTCASE tag.\n";
+			}
+		
+		($raw_data) = ($raw_data =~ /$Test_Case_End_Tag(.*)/);
+		($raw_data) = ($raw_data =~ /($Test_Case_Start_Tag.*)/) if $raw_data;
+		
+		my ($max_duration) = ($test_case_data =~ /$Test_Case_Max_Duration,([0-9]+)/);
+		if (!defined $max_duration)
+			{
+			$max_duration = 0;
+			}
+			
+		my $start_time = "0";
+		my $end_time = "0";
+		my $first = 1;
+		
+		while ($test_case_data and ($test_case_data =~ /$Event_print(.*)/) )
+			{
+			# get the event time. if this is the first time value in the chunk, it is the start time of the event.
+			#otherwise, continue until reaching the last time value.
+			my $start_log_msg = $1;
+		   
+			$start_log_msg =~ /,(.+?)\s(.*)/;
+			
+			if($first == 1)
+				{
+				$start_time = $1;
+				$first = 0;
+				}
+			else
+				{
+				$end_time = $1;
+				}
+	
+			$test_case_data = $2;
+			}	
+		
+		if(!($start_time eq "0") && !($end_time eq "0"))
+			{
+			my $actual_duration = millisec($end_time) - millisec($start_time);
+			my $result;
+			if( $actual_duration <= $max_duration)
+				{
+				$result = "Passed";
+				$num_passed += 1;
+				}
+			else
+				{
+				$result = "Failed";
+				$num_failed += 1;
+				}
+			
+			print $output_FH "$test_case_name,$max_duration,$actual_duration,$result\n";	
+			}
+		}
+	print $output_FH (sprintf "\n\n%d tests failed out of %d\n", $num_failed, $num_passed+$num_failed);
+	}
+	
+	
+sub usage
+	{
+	print <<USAGE;
+usage:
+	performance_log_parser.pl <input_file> <output_file>
+
+	<input_file>: A log file to process 
+			(default- $defInputFile)
+
+	<out_file>: Final output file name 
+			(default- $defOutputFile)
+USAGE
+	}
+
+	
+sub Main
+	{
+	my @argv = @_;
+	# if input and output files are not provided, default ones will be used
+	my $input_file = $defInputFile;
+	my $output_file = $defOutputFile;
+	
+	if(@argv > 2)
+		{
+		usage;
+		exit;
+		}
+	elsif(@argv == 2)
+		{# input and output files are provided, don't use default ones
+		$input_file = shift @argv;
+		$output_file = shift @argv;
+		}
+	
+	my $outputFH = \*STDOUT; # results to STDOUT by default
+	
+	if (defined $output_file)
+		{
+		$outputFH = FileHandle->new;
+		$outputFH->open("> $output_file") or die "Error: File $output_file: $!";
+		}
+	process_log_file($input_file,$outputFH);
+
+	$outputFH->close;
+}
+
+Main(@ARGV);
\ No newline at end of file