423 lines
12 KiB
Perl
423 lines
12 KiB
Perl
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 occurred
|
|
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");
|
|
}
|