{{{ #!/cvs/cds/bin/perl # # program name autoburt.pl # # Function. Called by cron at regular times in the day. This script # creates a directory for today (if it doesnt exist) under the path # CDS_ROOT/cds/lho/burt/year/month/day. It then searches for autoBurt.req # files under the CDS_ROOT/cds/lho/target directory. # # It then launches burt, using all autoBurt.req files and outputing # the snapshot file under todays directory # # 00 19Aug2000 D.Barker first release # 01 31Aug2000 D.Barker Make generic to run on both sites. # 02 23May2002 D.Barker Add 40m # $DEBUG = 0; $CHECK_SNAPSHOT_FILE = 1; $TEMPFILE = "/tmp/autoburt"; @knownproblems = ( "h0daqepics", "h0ee0", "h0ee1", "h0ee2", "h0ee3", "h0sandbox0", "h0sandbox1", "h0sandbox2", "h0sandbox3", "tpman",); { # Find what site we are on whereAreWe(); if ($site eq "lho") { } else { } if ($site eq "lho") { $sitepath = "/cvs/cds/lho"; $autoburtpath = "$sitepath/burt/autoburt"; $epicsbin = "/opt/CDS/a/epics/release/r3.12.2.baja47.tornado/extensions/bin/ solaris"; $pathlength = 20; if($DEBUG) { print "settings for hanford\n";} if($DEBUG) { print "sitepath $sitepath\n";} if($DEBUG) { print "autoburtpath $autoburtpath\n";} if($DEBUG) { print "epicsbin $epicsbin\n";} } elsif ($site eq "40m") { $sitepath = "/cvs/cds/caltech"; $autoburtpath = "$sitepath/burt/autoburt"; $epicsbin = "/cvs/cds/epics/extensions"; $pathlength = 24; if($DEBUG) { print "settings for Caltech 40m\n";} if($DEBUG) { print "sitepath $sitepath\n";} if($DEBUG) { print "autoburtpath $autoburtpath\n";} if($DEBUG) { print "epicsbin $epicsbin\n";} } elsif ($site eq "llo"){ #$sitepath = "/opt/LLO/g/cvs/cds/llo"; $sitepath = "/cvs/cds/llo"; $autoburtpath = "$sitepath/burt/autoburt"; $epicsbin = "/opt/LLO/a/epics/release/r3.12.2/extensions/bin/solaris"; $pathlength = 20; if($DEBUG) { print "settings for louisiana\n";} if($DEBUG) { print "sitepath $sitepath\n";} if($DEBUG) { print "autoburtpath $autoburtpath\n";} if($DEBUG) { print "epicsbin $epicsbin\n";} } elsif ($site eq "kami") { $sitepath = "/cvs/cds/kami"; $autoburtpath = "$sitepath/burt/autoburt"; $epicsbin = "/opt/epics-3.14.10-RC2-i386/base/bin/linux-x86/"; $pathlength = 21; if($DEBUG) { print "settings for Kamioka CLIO\n";} if($DEBUG) { print "sitepath $sitepath\n";} if($DEBUG) { print "autoburtpath $autoburtpath\n";} if($DEBUG) { print "epicsbin $epicsbin\n";} } else { die "Dont know where we are\n"; } # get current time/date $datetime = returnTimeStamp(); $snapfile = "shapshot."."$datetime"; print $snapfile."\n"; # remove existing /cvs/cds/lho/burt/autoburt/.requestfilelist $command = "/bin/rm -rf $autoburtpath/.requestfilelist"; system($command); # find all /cvs/cds/lho/target/*/autoBurt.req files $command = "/bin/ls $sitepath/target/*/autoBurt.req > $autoburtpath/.requestfi lelist"; system($command); # open /cvs/cds/lho/burt/autoburt/.requestfilelist open(REQLIST,"$autoburtpath/.requestfilelist")||die "cannot open file $autobur tpath/.requestfilelist\n"; # create the snapshot directory for this run # path is $autoburt/snapshots/year/month/day/hour $yearpath = $autoburtpath."/snapshots/".$thisyear; # print "scanning for path $yearpath\n"; if (!-e $yearpath) { die "ERROR: Year directory $yearpath does not exist\n"; } $monthpath = $yearpath."/$thismonth"; print "scanning for path $monthpath\n"; if (!-e $monthpath) { print "Creating month directory $monthpath\n"; $command = "/bin/mkdir $monthpath"; system ($command); } $datepath = $monthpath."/$thisdate"; print "scanning for path $datepath\n"; if (!-e $datepath) { print "Creating month directory $datepath\n"; $command = "/bin/mkdir $datepath"; system ($command); } $hourpath = $datepath."/$thishour:$thismin"; if (!-e $hourpath) { print "Creating hour directory $hourpath\n"; $command = "/bin/mkdir $hourpath"; system ($command); } else { die " Warning: \n Directory $hourpath \n already exists! \n A borting burt\n"; } # loop over target list, performing burt backup on each one while ($targetreqfile = ) { chomp $targetreqfile; # get target name, strip off /cvs/cds/lho/target/ from file path $targetname = substr $targetreqfile,$pathlength; ($targetname,$rest) = split /\//,$targetname,2; print "----------------------------------------------------\n"; print "Target $targetname\n"; # remove targetname.log file in /cvs/cds/lho/burt/autoburt/logs $command = "/bin/rm -rf $autoburtpath/logs/$targetname.log"; system ($command); # Perform the burt $command = "$epicsbin/burtrb -f $targetreqfile -o $hourpath/$targetname.snap -v -l $autoburtpath/logs/$targetname.log -c $targetname"; system($command); if ($CHECK_SNAPSHOT_FILE) { # check the snapshot file against the request file # do number of lines check, snapshot file = request file + 11 $sfile = $hourpath."/".$targetname.".snap"; print "Opening snapshot file $sfile \n"; open(TEMP,"<".$sfile)||die "Cannot open $sfile \n"; # loop down to the end of header while (($line=) &&($line !~ "End BURT header")) { ; } # next line is first data line $snapwordcount=0; while($line=) { $snapwordcount++; } close TEMP; $command = "/bin/rm -rf $TEMPFILE"; system($command); $command = "/usr/bin/wc $targetreqfile > $TEMPFILE"; system($command); open(TEMP,$TEMPFILE)||die "Cannot open temp file $TEMPFILE \n"; $line = ; chomp $line; ($reqwordcount,$rest) = split " ",$line,2; print "Request File $reqwordcount lines, SnapShot File $snapwordcount line s\n"; if ($snapwordcount != $reqwordcount ) { $found = 0; foreach $name (@knownproblems) { if ($targetname eq $name) { $found=1; print "WARNING: Target $targetname Snapshot file inconsistent with R equest file\n"; } } if (!$found) { print "!!! ERROR !!! "; print "Target $targetname Snapshot file inconsistent with Request file \n"; } } } } close REQLIST; # Clean up work. # for burt snapshots which are more than a month old, remove all hourly # backups except for the 04168\.hr and 16hr. cleanupfiles(); } # ---------------------------------------------------------------------- # # Subroutine returnTimeStamp() # # Returns the current time stamp as a string # # ---------------------------------------------------------------------- sub returnTimeStamp { @timestamp = localtime(time); $thisday = (Sun,Mon,Tue,Wed,Thu,Fri,Sat)[$timestamp[6]]; $thismonth = (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec)[$timestamp[4]]; # Y2k stuff # Year 2000 defined as $timestamp[5] = 100 if($timestamp[5]> 99) { $timestamp[5] = $timestamp[5] - 100; $thisyear = "20".$timestamp[5]; } else { $thisyear = "19".$timestamp[5]; } if ($timestamp[2] < 10) { $thishour = "0".$timestamp[2]; } else { $thishour = $timestamp[2]; } if ($timestamp[1] < 10) { $thismin = "0".$timestamp[1]; } else { $thismin = $timestamp[1]; } if ($timestamp[0] < 10) { $thissec = "0".$timestamp[0]; } else { $thissec = $timestamp[0]; } $thisdate = $timestamp[3]; if ($thisdate < 10) { $thisdate = "0".$thisdate; } return "$thisday$thisdate$thismonth$thisyear-$thishour:$thismin:$thissec"; } # ---------------------------------------------------------------------- # # Subroutine cleanupfiles() # # Go back one month and remove all hourly backups except hours 04 and 16 # # ---------------------------------------------------------------------- sub cleanupfiles { print "cleanupfiles: TBD\n"; return; } # ---------------------------------------------------------------------- # # Subroutine whereAreWe() # # find out what site we are on # # ---------------------------------------------------------------------- sub whereAreWe { $temp = "./tempfile"; # Find out which site we are on, using IP address of this workstation $command = "/bin/rm -rf $temp"; system($command); $command = "/usr/sbin/ifconfig -a > $temp"; system($command); open(TEMP,$temp) || die "Cannot open file $temp\n"; $site = "undefined"; while ($line = ) { if ($line =~ /10\.1\./) { $site = "lho"; } elsif ($line =~ /10\.100\./) { $site = "llo"; } elsif ($line =~ /131\.215\./) { $site = "40m"; } elsif ($line =~ /192\.168\.11\./) { $site = "kami"; } } if ($site eq "undefined") { die "Cannot Determine Which LIGO Observatory this is\n"; } print "Site is $site\n"; } }}}