graphicstest/uibench/scripts/uploadsqlfromtestrun.pl
changeset 69 3365349494cc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicstest/uibench/scripts/uploadsqlfromtestrun.pl	Fri May 14 17:10:13 2010 +0300
@@ -0,0 +1,178 @@
+#!perl
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "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 to upload performance or other data embedded as SQL statements
+# in test execute output logs.
+#
+# This script keys off "SQL_UPLOAD_VERSION_0:" and "SQL_SESSION_ID=" tags for
+# data extraction.
+
+use Getopt::Long;
+use File::Basename;
+use File::Find;
+use Cwd;
+
+# The default perl install does not provide the mysql database driver, needed
+# to connect to a MySQL database.  For convenience we deliver a pure perl
+# implementation locally.  This application can use such GPL modules under the
+# System Library exception of GPL.  If this script needs to be called from
+# another directory, then the 'use lib ".";' directive won't work.  To resolve
+# this problem, run the script "perl installmysqlperlmodule.pl" first.
+
+
+use lib ".";
+
+use MySQL;
+
+use strict;
+use warnings;
+
+our ($searchRoot, $helpOnUsage, $jobId);
+our @globalFileList;
+our @globalSessionTransaction;
+our @bulkSqlTransaction;
+
+sub Usage
+	{
+	my ($aRequireParameter,$aMissingParameter) = @_;
+	$aRequireParameter = 0 if not defined $aRequireParameter;
+
+  	print <<END_OF_USAGE_TEXT;
+Usage: perl uploadsqlfromtestrun.pl --dir=searchRootDir --job=jobID [--help]
+
+Note this script requires the Net::MySQL package to either be installed or
+to be supplied in the search path.  An example such commandline is:
+
+   Q:\\>perl -IQ:\\epoc32\\release\\winscw\\udeb\\z\\uibench
+   \\epoc32\\release\\winscw\\udeb\\z\\uibench\\uploadsqlfromtestrun.pl
+   --dir=\\epoc32\\winscw\\c\\logs\\testexecute
+   --job=655433
+
+This script recurses through searchRootDir looking for htm files containing
+<prefix>SQL_UPLOAD_VERSION_0:<sql commands>
+upon which it invokes those <sql commands>
+
+It also looks for 
+<prefix>SQL_SESSION_ID=<session value>
+upon which it associates the supplied integer jobID with the <session value>
+in the database.  In the database these identifiers are unsigned integers:
+jobid         int(10)    unsigned
+sessionid     bigint(20) unsigned
+
+The jobID would normally come from the overnight build system.  Low numbered
+jobIDs, i.e. those <10000, would not collide with the build system and so can
+be used when running this script interactively outside the context of a build
+system.
+
+The help option (--help, -h or -?) prints this message
+
+END_OF_USAGE_TEXT
+	
+	if (defined $aMissingParameter)
+		{	
+  		print "Error: Parameter \"--$aMissingParameter\" missing\n"
+  		}
+ 	exit $aRequireParameter;
+	}
+	
+sub RemoveBackSlashes
+	{
+	my ($aPath) = @_;
+	$aPath =~ s/\\/\//g;
+	return $aPath;
+	}
+
+sub AddToGlobalFileList
+	{
+	my $aFile = $_;
+	
+	if (-f $aFile && $aFile =~ /.*.htm$/i)
+		{
+		push @main::globalFileList, $File::Find::name;
+		}
+	}
+	
+sub ParseFiles()
+	{
+	foreach my $file (@main::globalFileList)
+		{
+		open (FILE, "$file");		
+		foreach my $line (<FILE>)
+			{
+			if ($line =~ /.*SQL_UPLOAD_VERSION_0:*/i)
+				{
+				$line =~ s/.*SQL_UPLOAD_VERSION_0://g;
+				push @main::bulkSqlTransaction, $line;
+				}
+			if ($line =~ /.*SQL_SESSION_ID=/i)
+				{
+				$line =~ s/.*SQL_SESSION_ID=//g;
+				chomp $line;
+				$line = "INSERT INTO performance.jobsessionmap (jobid, sessionid) VALUES ('"
+						. $main::jobId . "', '"
+						. $line . "');\n"
+						;
+				push @main::globalSessionTransaction, $line;
+				}
+			}
+		close FILE;
+		}
+	}
+
+sub connectToSqlDatabase
+	{
+	return
+		Net::MySQL->new(
+		hostname => '4GBD02346',
+		database => 'performance',
+		user     => 'uibench',
+		password => 'grui'
+		);
+	}
+	
+sub UploadSqlData()
+	{
+	my $dbHandle;
+	$dbHandle = connectToSqlDatabase();
+	$dbHandle->query(@bulkSqlTransaction);
+	die if ($dbHandle->is_error);
+	$dbHandle->close;
+	
+	# We are re-creating the connection to the database because this forces
+	# the underlying client-server transaction to flush its socket.  There
+	# is no flush API that the MySQL perl module gives us.  If we don't do
+	# this, the transaction completes without errors, but does not actually
+	# put the session rows into the database!
+	$dbHandle = connectToSqlDatabase();
+	$dbHandle->query(@globalSessionTransaction);
+	$dbHandle->close;
+	}
+	
+GetOptions ('dir=s' => \$searchRoot,
+            'job=s' => \$jobId,
+            'help|h|?' =>\$helpOnUsage) || Usage();
+
+Usage(0) if $helpOnUsage;
+Usage(1,'dir') if not defined $searchRoot;
+Usage(1,'job') if not defined $jobId;
+
+$searchRoot = RemoveBackSlashes($searchRoot);
+
+@globalFileList = ();
+find(\&AddToGlobalFileList, ($searchRoot));
+
+@bulkSqlTransaction = ();
+@globalSessionTransaction  = ();
+ParseFiles();
+UploadSqlData();