--- /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();