diff options
-rw-r--r-- | testgraphical/source/fill_documents_loop.pl | 423 |
1 files changed, 423 insertions, 0 deletions
diff --git a/testgraphical/source/fill_documents_loop.pl b/testgraphical/source/fill_documents_loop.pl new file mode 100644 index 000000000000..c1b8174fefe5 --- /dev/null +++ b/testgraphical/source/fill_documents_loop.pl @@ -0,0 +1,423 @@ +eval 'exec perl -wS $0 ${1+\"$@\"}' + if 0; + +# This program has to start for the new convwatch, +# once on Windows environment and once on Linux environment +# Solaris is handled by the linux also. +# +# This program polls the database (documentcompare) every 60s for new jobs +# it runs over the given directory from documentpoolpath and pool, and create for every file +# a new database entry in documents. +# + +BEGIN +{ + # Adding the path of this script file to the include path in the hope + # that all used modules can be found in it. + $0 =~ /^(.*)[\/\\]/; + push @INC, $1; +} + +use ConvwatchHelper; +use CallExternals; +use stringhelper; +use filehelper; +use oshelper; +use timehelper; +use cwstestresulthelper; + +use strict; +use Cwd; +use File::Basename; +use English; # $OSNAME, ... +use Getopt::Long; +use File::Path; +use Cwd 'chdir'; + +my $cwd = getcwd(); + +our $help; # Help option flag +our $version; # Version option flag +our $test; + +our $version_info = 'convwatch.pl $Revision: 1.24 $ '; + +our $SOLARENV; +our $COMMON_ENV_TOOLS; + + +our $documentpoolname; +our $documentpoolpath; +our $dbdistinct; +our $sParentDistinct; +our $sCurrentDocumentPool; + +our $fs; +our @aEntries; + +# Prototypes +# sub getJavaFileDirSeparator(); +sub readdirectory($$$); +sub putDocumentInDB($$$); + +# flush STDOUT +my $old_handle = select (STDOUT); # "select" STDOUT and save # previously selected handle +$| = 1; # perform flush after each write to STDOUT +select ($old_handle); # restore previously selected handle + +setPrefix("gfxcmp"); + +if (!GetOptions( + "test" => \$test, + "help" => \$help, + "version" => \$version + )) +{ + print_usage(*STDERR); + exit(1); +} +if ($help) +{ + print_usage(*STDOUT); + exit(0); +} +# Check for version option +if ($version) +{ + print STDERR "$version_info\n"; + exit(0); +} + +# ------------------------------------------------------------------------------ +# within mysql it is better to use only '/' +$fs = "/"; # getJavaFileDirSeparator(); +# ------------------------------------------------------------------------------ +sub readdirectory($$$) +{ + my $startdir = shift; + my $sValues = shift; + my $hook = shift; + + my $myfile; + + local *DIR; + chdir $startdir; + cwd(); + if (! endswith($startdir, $fs)) + { + $startdir .= $fs; + } + + my $nCountFiles = 0; + if (opendir (DIR, $startdir)) # Directory oeffnen + { + while ($myfile = readdir(DIR)) + { # ein filename holen + #if (! -l $myfile) # not a link + #{ + if (-d $myfile ) # is a directory + { + if ( -l $myfile) + { + next; + } + if ($myfile ne "." && $myfile ne "..") + { + my $sNewStartDir = $startdir . $myfile ."/"; # neuen Directorystring erstellen + if ($sNewStartDir =~ "^\/proc" || + $sNewStartDir =~ "^\/dev" || + $sNewStartDir =~ "^\/udev" || + $sNewStartDir =~ "lost+found" ) + { + next; + } + # my $sNewDestDir = $destdir . $myfile ."/"; + # do a recursive call + # $nCountFiles++; + my $nFileCount = readdirectory($sNewStartDir, $sValues, $hook); + # workOnDir($sNewDir, $nFileCount); + $nCountFiles += $nFileCount; + + chdir ($startdir); # zurueckwechseln. + cwd(); + } + } + else + { + # File must exist, be a regular file and must not be the $onlyOnFile + if (-f $myfile) + { + # print " $startdir" . "$myfile\n"; + $nCountFiles++; + # workOnFile($startdir, $myfile, $destdir); + $hook->($startdir, $myfile, $sValues); + } + } + #} + #else + #{ + # print "linked file: $dir/$myfile\n"; + #} + } + closedir(DIR); + } + else + { + print "could not open $startdir\n"; + } + return $nCountFiles; +} +# ------------------------------------------------------------------------------ +sub putDocumentInDB($$$) +{ + my $currentDir = shift; + my $currentFile = shift; + my $sValues = shift; + + my $sSourceFilename = $currentDir . $currentFile; + # we cut down all the previous names like documentpoolpath and the documentpoolname + $sSourceFilename = substr($sSourceFilename, length($sCurrentDocumentPool . $fs)); + + my $sSQL = "INSERT INTO documents (dbdistinct2, name, pagecount, priority, parentdistinct) VALUES"; + $sSQL .= "('" . $dbdistinct . "', '" . $sSourceFilename . "', 0, 1, '". $sParentDistinct . "')"; + # print $sSQL . "\n"; + + push(@aEntries, $sSQL); + # ExecSQL($sSQL); +} + +# ------------------------------------------------------------------------------ +sub createDBEntriesForEveryDocument($) +{ + my $sStr = shift; + if ($sStr =~ /^MySQL-Error/ ) + { + # we don't do anything if an error occured + return; + } + + # interpret the follows string + # documentpoolpath='//so-gfxcmp-documents/doc-pool', documentpool='demo_lla', dbdistinct=62, + + # my $sDocumentPoolDir; + if ( $sStr =~ /documentpoolpath='(.*?)',/ ) + { + $documentpoolpath = $1; + } + if (! $documentpoolpath) + { + print "Error: no value for documentpoolpath found.\n"; + return; + } + + # my $sDocumentPool; + if ( $sStr =~ /documentpool='(.*?)',/ ) + { + $documentpoolname = $1; + } + if (! $documentpoolname) + { + print "Error: no value for documentpool found.\n"; + return; + } + # my $dbdistinct; + if ( $sStr =~ /dbdistinct2='(\S*?)',/ ) + { + $dbdistinct = $1; + } + if (! $dbdistinct) + { + print "Error: no dbdistinct given.\n"; + return; + } + + if (! -d $documentpoolpath ) + { + my $sEnv = getEnvironment(); + if ( isUnixEnvironment() ) + { + $documentpoolpath = "/net/so-gfxcmp-documents" . $documentpoolpath; + } + if ( -d $documentpoolpath ) + { + print "Warning: given documentpoolpath seems to be local, fix to '$documentpoolpath'\n"; + my $sSQL = "UPDATE documentcompare SET documentpoolpath='$documentpoolpath' WHERE dbdistinct2='$dbdistinct'"; + print "$sSQL\n"; + ExecSQL($sSQL); + } + else + { + print "Error: documentpoolpath '$documentpoolpath' not found. Don't insert anything.\n"; + my $sSQL = "UPDATE documentcompare SET state='failed',info='documentpoolpath not found.' WHERE dbdistinct2='$dbdistinct'"; + print "$sSQL\n"; + ExecSQL($sSQL); + return; + } + } + # create the documentpool directory, to run through + $sCurrentDocumentPool = $documentpoolpath; + if (! endswith($sCurrentDocumentPool, $fs)) + { + $sCurrentDocumentPool .= $fs; + } + $sCurrentDocumentPool .= $documentpoolname; + + if ( -d $sCurrentDocumentPool ) + { + if ( $sStr =~ /parentdistinct='(.*?)',/ ) + { + $sParentDistinct = $1; + } + else + { + $sParentDistinct = ""; + } + + # remove any doubles, if any + my $sSQL = "DELETE FROM documents WHERE dbdistinct2='$dbdistinct'"; + print "$sSQL\n"; + ExecSQL($sSQL); + + # run over the whole given document pool and store every found document name in the database + readdirectory($sCurrentDocumentPool, "", \&putDocumentInDB); + + chdir $cwd; + cwd(); + + foreach $sSQL (@aEntries) + { + # print "# $sSQL\n"; + print "$sSQL\n"; + ExecSQL($sSQL); + } + + my $sSQL = "UPDATE documentcompare SET state='inprogress' WHERE dbdistinct2='$dbdistinct'"; + print "$sSQL\n"; + ExecSQL($sSQL); + print "----------------------------------------------------------------------\n"; + $sParentDistinct = ""; + @aEntries = (); + } + else + { + print "Error: Given document pool '$sCurrentDocumentPool' doesn't exists.\n"; + my $sSQL = "UPDATE documentcompare SET state='cancelled' WHERE dbdistinct2='$dbdistinct'"; + ExecSQL($sSQL); + return; + } + # Send Mail, due to startconvwatch now + sendMail($sStr, $documentpoolname, $dbdistinct); +} + +# ------------------------------------------------------------------------------ +sub sendMail($$$) +{ + my $sStr = shift; + my $documentpool = shift; + my $dbdistinct = shift; + my $sourceversion; + if ( $sStr =~ /sourceversion='(.*?)',/ ) + { + $sourceversion = $1; + } + if (! $sourceversion) + { + print "Warning: no value for sourceversion found.\n"; + return; + } + my $destinationversion; + if ( $sStr =~ /destinationversion='(.*?)',/ ) + { + $destinationversion = $1; + } + if (! $destinationversion) + { + print "Warning: no value for destinationversion found.\n"; + return; + } + my $mailaddress; + if ( $sStr =~ /mailfeedback='(.*?)',/ ) + { + $mailaddress = $1; + } + if (! $mailaddress) + { + print "Warning: no value for mailfeedback found.\n"; + return; + } + + # state is 'inprogress', so send a mail + # my $sMailAddress = getMailAddress($sDoneStr); + my $sParams = "$sourceversion"; + $sParams .= " $destinationversion"; + $sParams .= " $documentpool"; + $sParams .= " $dbdistinct"; + $sParams .= " $mailaddress"; + $sParams .= " starts"; # run through state of convwatch + + my $sMailProgram = appendPath(getQADEVToolsPath(), "mailsend.php"); + + my $err; + my @lines; + my $sLine; + ($err, @lines) = callphp(getPHPExecutable(), $sMailProgram, $sParams); + foreach $sLine (@lines) + { + log_print( "Mail: $sLine\n"); + } + + if ($documentpool eq "EIS-tests") + { + cwstestresult("running", $dbdistinct, $sourceversion, $destinationversion, $SOLARENV, $COMMON_ENV_TOOLS); + } +} +# ------------------------------------------------------------------------------ +# ------------------------------------------------------------------------------ + +my $sEnvironmentCondition; +if (isWindowsEnvironment()) +{ + $sEnvironmentCondition = "environment='" . getEnvironment() . "'"; +} +elsif (isUnixEnvironment()) +{ + # $sEnvironmentCondition = " ( environment='unxlngi' OR environment='unxsoli' ) "; + $sEnvironmentCondition = " environment='" . getEnvironment() . "'"; +} +else +{ + print "Error: wrong environment.\n"; + exit(1); +} +my $sWhereClause = "WHERE "; +if ($sEnvironmentCondition) +{ + $sWhereClause .= $sEnvironmentCondition . " AND "; +} +$sWhereClause .= " state='new'"; + +setToolsPath(getQADEVToolsPath()); + +# ---------------------------------- main loop ---------------------------------- +while (1) +{ + my @aResult; + my $sSQL = "SELECT documentpoolpath,documentpool,dbdistinct2,sourceversion,destinationversion,mailfeedback,parentdistinct FROM documentcompare $sWhereClause"; + @aResult = ExecSQL($sSQL); + + my $aValue; + foreach $aValue (@aResult) + { + # print "# $nValue\n"; + createDBEntriesForEveryDocument($aValue); + } + if ($test) + { + last; + } + + # wait 30sec. + # wait30seconds(); + waitAMinute(); + checkForStop("stop_fill_documents_loop"); +} |