| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

SiteConfig.py

Go to the documentation of this file.
00001 # SiteConfig
00002 #
00003 # Contains the site configuration for the current cluster/computer
00004 #
00005 # Created by: dandwyer@caltech.edu 2010/08/09
00006 
00007 import ProcessManager.Status as Status
00008 
00009 class SiteConfig:
00010     """ Configuration information for a given computer site """
00011     def __init__(self):
00012         """Constructor"""
00013         import os
00014         self.nuwaDir=None
00015         self.cmtConfig=None
00016         self.outputDir=None
00017         self.jobLogDir=None
00018         self.statsOffsetDir=None
00019         self.figuresOffsetDir=None
00020         self.xmlOffsetDir=None
00021         self.statsRootDir=None
00022         self.figuresRootDir=None
00023         self.xmlRootDir=None
00024         self.runsXmlDir=None
00025         self.batchExec=None
00026         self.batchWrapper="$PROCESSMANAGERROOT/scripts/batchNuWa.sh"
00027         self.batchLogDir=self.jobLogDir
00028         self.batchLogDir=None
00029         self.stateRootDir=None
00030         return
00031 
00032     def jobId(self, jobName=None, runNumber=None, seqNumber=None):
00033         """ Return a string to identify the job """
00034         jobId = ""
00035         if jobName:
00036             jobId += jobName
00037         else:
00038             jobId += "noname"
00039         if runNumber:
00040             jobId += "_run%07d" % runNumber
00041         if seqNumber:
00042             jobId += "_seq%04d" % seqNumber
00043         return jobId
00044         
00045     def batchCommand(self, batchArgs, jobName, runNumber, seqNumber):
00046         """Construct a batch command"""
00047         print "SiteConfig: batchCommand is undefined for this site"
00048         return ""
00049 
00050     def runSepDir(self, runNumber):
00051         """Make an appropriate structure for run subdirectories"""
00052         # group runs into subdirectories of 1000/100
00053         runK = runNumber / 1000
00054         runH = runNumber / 100
00055         return "runs_%04d000/runs_%05d00" % (runK, runH)
00056 
00057     def runSubDir(self, runNumber):
00058         """Return run subpath + directory"""
00059         return self.runSepDir(runNumber)+"/run_%07d" % runNumber
00060 
00061     def statsRelativeDir(self, runNumber):
00062         """Construct the relative path of the root files from the index"""
00063         return self.runSubDir(runNumber)+"/root"
00064 
00065     def statsDirectory(self, runNumber):
00066         """Construct the absolute path of the root files from the index"""
00067         return self.statsRootDir+"/"+self.statsRelativeDir(runNumber)
00068 
00069     def statsSeqFile(self, jobName, runNumber, seqNumber):
00070         """Construct the stats ROOT file path and name"""
00071         filename = "%s.root" % self.jobId(jobName, runNumber, seqNumber)
00072         return self.statsDirectory(runNumber)+"/"+filename
00073 
00074     def statsInstallPath(self, jobName, runNumber):
00075         """Construct the relative summed stats ROOT file path and name for index lookup"""
00076         filename = "%s_total.root" % self.jobId(jobName, runNumber)
00077         return self.statsOffsetDir+'/'+self.statsRelativeDir(runNumber)+"/"+filename
00078 
00079     def statsSumFile(self, jobName, runNumber):
00080         """Construct the summed stats ROOT file path and name"""
00081         filename = "%s_total.root" % self.jobId(jobName, runNumber)
00082         return self.statsDirectory(runNumber)+"/"+filename
00083 
00084     def statsLockFile(self, jobName, runNumber):
00085         """Construct the stats lock file path and name"""
00086         filename = "%s_total.lock" % self.jobId(jobName, runNumber)
00087         return self.statsDirectory(runNumber)+"/"+filename
00088 
00089     def runLockFile(self, runNumber):
00090         """Construct the run summary lock file path and name"""
00091         filename = "run_%07d.lock" % runNumber
00092         return self.xmlRootDir+"/"+self.runSubDir(runNumber)+"/"+filename
00093 
00094     def figuresDirectory(self, runNumber):
00095         """Construct the figures directory for the given run"""
00096         return self.figuresRootDir+"/"+self.runSubDir(runNumber)
00097 
00098     def figuresPathReplace(self, runNumber):
00099         """Construct the figures directory for the given run"""
00100         runPath = "run_%07d" % runNumber
00101         return runPath+","+self.runSubDir(runNumber)
00102 
00103     def xmlRelativeDir(self, runNumber):
00104         """Construct the xml directory for the given run"""
00105         return self.xmlOffsetDir+"/"+self.runSubDir(runNumber)
00106 
00107     def xmlDirectory(self, runNumber):
00108         """Construct the xml directory for the given run"""
00109         return self.outputDir+'/'+self.xmlRelativeDir(runNumber)
00110 
00111     def xmlIndexFile(self, runNumber):
00112         """Construct the run index file path and name"""
00113         filename = "run_%07d.xml" % runNumber
00114         return self.xmlDirectory(runNumber)+"/"+filename
00115 
00116     def runIndexDir(self):
00117         """Construct the index of all runs file path"""
00118         return self.runsXmlDir
00119 
00120     def runIndexFile(self):
00121         """Construct the index of all runs file path and name"""
00122         return self.runIndexDir() + "/runs.xml"
00123 
00124     def runIndexLockFile(self):
00125         """Construct the index of all runs lock file path and name"""
00126         return self.runsXmlDir + "/runs.lock"
00127 
00128     def logDirectory(self, runNumber):
00129         """Construct the path for the nuwa log output directory"""
00130         return self.jobLogDir+"/"+self.runSepDir(runNumber)
00131 
00132     def logOutFile(self, jobName, runNumber, seqNumber=None):
00133         """Construct the path for the nuwa log output file"""
00134         import os
00135         filename = "%s_%d.out" % (self.jobId(jobName, runNumber, seqNumber),
00136                                   os.getpid() )
00137         return self.logDirectory(runNumber)+"/"+filename
00138 
00139     def logErrFile(self, jobName, runNumber, seqNumber=None):
00140         """Construct the path for the log error file"""
00141         import os
00142         filename = "%s_%d.err" % (self.jobId(jobName, runNumber, seqNumber),
00143                                   os.getpid() )
00144         return self.logDirectory(runNumber)+"/"+filename
00145 
00146     def batchLogDirectory(self, runNumber):
00147         """Construct the directory for batch log files"""
00148         return self.batchLogDir+"/"+self.runSepDir(runNumber)
00149 
00150     def batchLogOutFile(self, jobName, runNumber, seqNumber=None):
00151         """Construct the path for the batch log output file"""
00152         import os
00153         jobId = self.jobId(jobName, runNumber, seqNumber)
00154         filename = "batch_%s_%d.out" % (self.jobId(jobName, runNumber,
00155                                                    seqNumber),
00156                                         os.getpid() )
00157         return self.batchLogDirectory(runNumber)+"/"+filename
00158 
00159     def batchLogErrFile(self, jobName, runNumber, seqNumber=None):
00160         """Construct the path for the batch log error file"""
00161         import os
00162         filename = "batch_%s_%d.err" % (self.jobId(jobName, runNumber,
00163                                                    seqNumber),
00164                                         os.getpid() )
00165         return self.batchLogDirectory(runNumber)+"/"+filename
00166 
00167     def stateFile(self, jobType, jobName, runNumber, seqNumber):
00168         """Construct the path and filename for logging state of this job"""
00169         filename = "%s_%s.state" % (self.jobId(jobName, runNumber,seqNumber),
00170                                     jobType)
00171         return self.stateRootDir+"/"+self.runSubDir(runNumber)+"/"+filename
00172     
00173 class SiteConfigLocal(SiteConfig):
00174     """ Configuration information for a local install """
00175     def __init__(self):
00176         """Constructor"""
00177         SiteConfig.__init__(self)
00178         self.nuwaDir="$SITEROOT"
00179         self.cmtConfig="$CMTCONFIG"
00180         self.outputDir="."
00181         self.jobLogDir=self.outputDir+"/logs"
00182         self.statsOffsetDir="diagnostics"
00183         self.figuresOffsetDir="diagnostics"
00184         self.xmlOffsetDir="diagnostics"
00185         self.statsRootDir=self.outputDir+'/'+self.statsOffsetDir
00186         self.figuresRootDir=self.outputDir+'/'+self.figuresOffsetDir
00187         self.xmlRootDir=self.outputDir+'/'+self.xmlOffsetDir
00188         self.runsXmlDir=self.outputDir
00189         self.batchExec=None
00190         self.batchLogDir=self.jobLogDir
00191         self.stateRootDir=self.outputDir+"/state"
00192         
00193     def batchCommand(self, batchArgs, jobName, runNumber, seqNumber):
00194         """Construct a batch command"""
00195         import os
00196         pid = os.getpid()
00197         batchCommand = "%(wrapper)s %(nuwaDir)s %(cmtConfig)s " % {
00198             'wrapper':self.batchWrapper,
00199             'nuwaDir':self.nuwaDir,
00200             'cmtConfig':self.cmtConfig
00201             }
00202         batchCommand += "'runProcess.py %(args)s " % {
00203             'args': ' '.join(batchArgs) }
00204         batchCommand += "> %(outlog)s 2> %(errlog)s &'" % {
00205             'outlog':self.batchLogOutFile(jobName, runNumber, seqNumber),
00206             'errlog':self.batchLogErrFile(jobName, runNumber, seqNumber) }
00207         return batchCommand
00208 
00209 class SiteConfigPdsf(SiteConfig):
00210     """ Configuration information for a given site """
00211     def __init__(self):
00212         """Constructor"""
00213         SiteConfig.__init__(self)
00214         #self.nuwaDir="/common/dayabay/releases/NuWa/trunk-opt/NuWa-trunk"
00215         self.nuwaDir="/eliza7/dayabay/scratch/dandwyer/NuWa-trunk-opt"
00216         self.cmtConfig="x86_64-slc4-gcc34-opt"
00217         self.outputDir="/project/projectdirs/dayabay/www/dybprod"
00218         self.jobLogDir=self.outputDir+"/logs"
00219         self.statsOffsetDir="diagnostics"
00220         self.figuresOffsetDir="diagnostics"
00221         self.xmlOffsetDir="diagnostics"
00222         self.statsRootDir=self.outputDir+'/'+self.statsOffsetDir
00223         self.figuresRootDir=self.outputDir+'/'+self.figuresOffsetDir
00224         self.xmlRootDir=self.outputDir+'/'+self.xmlOffsetDir
00225         self.runsXmlDir=self.outputDir
00226         self.batchExec="qsub"
00227         self.batchLogDir=self.jobLogDir
00228         self.stateRootDir=self.outputDir+"/state"
00229         
00230     def batchCommand(self, batchArgs, jobName, runNumber, seqNumber):
00231         """Construct a batch command"""
00232         import os
00233         pid = os.getpid()
00234         jobId = "%s_%d" % (jobName[:2],runNumber)
00235         if seqNumber:
00236             jobId += "_%d" % seqNumber
00237         batchCommand = "%(exec)s -o %(outlog)s -e %(errlog)s -N %(jobId)s " % {
00238             'exec':self.batchExec,
00239             'outlog':self.batchLogOutFile(jobName, runNumber, seqNumber),
00240             'errlog':self.batchLogErrFile(jobName, runNumber, seqNumber),
00241             'jobId':jobId}
00242         batchCommand += "%(wrapper)s %(nuwaDir)s %(cmtConfig)s " % {
00243             'wrapper':self.batchWrapper,
00244             'nuwaDir':self.nuwaDir,
00245             'cmtConfig':self.cmtConfig
00246             }
00247         batchCommand += "'runProcess.py %(args)s'" % {
00248             'args': ' '.join(batchArgs) }  
00249         return batchCommand
00250 
00251 class SiteConfigPdsfTest(SiteConfig):
00252     """ Configuration information for a given site """
00253     def __init__(self):
00254         """Constructor"""
00255         SiteConfig.__init__(self)
00256         self.nuwaDir="$SITEROOT"
00257         self.cmtConfig="$CMTCONFIG"
00258         self.outputDir="/eliza7/dayabay/scratch/dandwyer/dybprodTest"
00259         self.jobLogDir=self.outputDir+"/logs"
00260         self.statsOffsetDir="diagnostics"
00261         self.figuresOffsetDir="diagnostics"
00262         self.xmlOffsetDir="diagnostics"
00263         self.statsRootDir=self.outputDir+'/'+self.statsOffsetDir
00264         self.figuresRootDir=self.outputDir+'/'+self.figuresOffsetDir
00265         self.xmlRootDir=self.outputDir+'/'+self.xmlOffsetDir
00266         self.runsXmlDir=self.outputDir
00267         self.batchExec="qsub"
00268         self.batchLogDir=self.jobLogDir
00269         self.stateRootDir=self.outputDir+"/state"
00270         
00271     def batchCommand(self, batchArgs, jobName, runNumber, seqNumber):
00272         """Construct a batch command"""
00273         import os
00274         pid = os.getpid()
00275         jobId = "%s_%d" % (jobName[:2],runNumber)
00276         if seqNumber:
00277             jobId += "_%d" % seqNumber
00278         batchCommand = "%(exec)s -o %(outlog)s -e %(errlog)s -N %(jobId)s " % {
00279             'exec':self.batchExec,
00280             'outlog':self.batchLogOutFile(jobName, runNumber, seqNumber),
00281             'errlog':self.batchLogErrFile(jobName, runNumber, seqNumber),
00282             'jobId':jobId}
00283         batchCommand += "%(wrapper)s %(nuwaDir)s %(cmtConfig)s " % {
00284             'wrapper':self.batchWrapper,
00285             'nuwaDir':self.nuwaDir,
00286             'cmtConfig':self.cmtConfig
00287             }
00288         batchCommand += "'runProcess.py %(args)s'" % {
00289             'args': ' '.join(batchArgs) }  
00290         return batchCommand
00291 
00292 class SiteConfigPdsfSim(SiteConfig):
00293     """ Configuration information for a given site """
00294     def __init__(self):
00295         """Constructor"""
00296         SiteConfig.__init__(self)
00297         #self.nuwaDir="/common/dayabay/releases/NuWa/trunk-opt/NuWa-trunk"
00298         self.nuwaDir="$SITEROOT"
00299         self.cmtConfig="$CMTCONFIG"
00300         self.outputDir="/project/projectdirs/dayabay/www/dybprodSim"
00301         self.jobLogDir=self.outputDir+"/logs"
00302         self.statsOffsetDir="diagnostics"
00303         self.figuresOffsetDir="diagnostics"
00304         self.xmlOffsetDir="diagnostics"
00305         self.statsRootDir=self.outputDir+'/'+self.statsOffsetDir
00306         self.figuresRootDir=self.outputDir+'/'+self.figuresOffsetDir
00307         self.xmlRootDir=self.outputDir+'/'+self.xmlOffsetDir
00308         self.runsXmlDir=self.outputDir
00309         self.batchExec="qsub"
00310         self.batchLogDir=self.jobLogDir
00311         self.stateRootDir=self.outputDir+"/state"
00312         
00313     def batchCommand(self, batchArgs, jobName, runNumber, seqNumber):
00314         """Construct a batch command"""
00315         import os
00316         pid = os.getpid()
00317         jobId = "%s_%d" % (jobName[:2],runNumber)
00318         if seqNumber:
00319             jobId += "_%d" % seqNumber
00320         batchCommand = "%(exec)s -o %(outlog)s -e %(errlog)s -N %(jobId)s " % {
00321             'exec':self.batchExec,
00322             'outlog':self.batchLogOutFile(jobName, runNumber, seqNumber),
00323             'errlog':self.batchLogErrFile(jobName, runNumber, seqNumber),
00324             'jobId':jobId}
00325         batchCommand += "%(wrapper)s %(nuwaDir)s %(cmtConfig)s " % {
00326             'wrapper':self.batchWrapper,
00327             'nuwaDir':self.nuwaDir,
00328             'cmtConfig':self.cmtConfig
00329             }
00330         batchCommand += "'runProcess.py %(args)s'" % {
00331             'args': ' '.join(batchArgs) }  
00332         return batchCommand
00333 
00334 
00335 siteConfigs = {"local":SiteConfigLocal(),
00336                "pdsf":SiteConfigPdsf(),
00337                "pdsfSim":SiteConfigPdsfSim(),
00338                "pdsfTest":SiteConfigPdsfTest()
00339                }
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:10:14 2011 for ProcessManager by doxygen 1.4.7