def declare(self, xml, proxyFile=None): """ register job related informations in the db """ taskInfo, jobInfos, rjAttrs = self.deserialize(xml) # reconstruct task task = Task(taskInfo) task['user_proxy'] = proxyFile self.saveTask(task) # reconstruct jobs and fill the data jobs = [] for jI in jobInfos: job = Job(jI) subn = int(job['submissionNumber']) if subn > 0: job['submissionNumber'] = subn - 1 else: job['submissionNumber'] = subn jobs.append(job) task.addJobs(jobs) for job in task.jobs: attrs = rjAttrs[str(job['name'])] self.getRunningInstance(job, attrs) self.updateDB(job) # self.updateDB( task ) # all done return task
def declare( self, xml, proxyFile=None ) : """ register job related informations in the db """ taskInfo, jobInfos, rjAttrs = self.deserialize( xml ) # reconstruct task task = Task( taskInfo ) task['user_proxy'] = proxyFile self.saveTask( task ) # reconstruct jobs and fill the data jobs = [] for jI in jobInfos: job = Job( jI ) subn = int( job['submissionNumber'] ) if subn > 0 : job['submissionNumber'] = subn - 1 else : job['submissionNumber'] = subn jobs.append(job) task.addJobs(jobs) for job in task.jobs: attrs = rjAttrs[ str(job['name']) ] self.getRunningInstance( job, attrs ) self.updateDB( job ) # self.updateDB( task ) # all done return task
class TaskAPITests(object): """ TaskAPITests for the Job class """ ########################################################################## def __init__(self, dbtype, installDb=False): """ __init__ """ self.bossSession = None self.schedSession = None self.task = None self.jobRange = 'all' self.outdir = None self.taskId = None self.taskName = 'test_task' # read configuration self.database = dbType self.dbConfig = dbConfig self.schedulerConfig = schedulerConfig if dbtype.lower() == 'sqlite': self.bossSession = self._SqLiteSession(installDb) elif dbtype.lower() == 'mysql': self.bossSession = self._MySqlSession(installDb) else: print "bad db choice: '%s', allowed only 'SQLite' or 'MySQL'" % \ dbtype sys.exit() ########################################################################## def _SqLiteSession(self, installDb): """ __sqLiteSession__ """ if self.bossSession is not None: return # BossLiteApi session self.database = "SQLite" self.bossSession = BossLiteAPI(self.database, self.dbConfig) # db installed? try: if installDb: self.bossSession.bossLiteDB.installDB( '$PRODCOMMON_ROOT/lib/ProdCommon/BossLite/DbObjects/setupDatabase-sqlite.sql' ) self.bossSession.bossLiteDB.reset() except: pass return self.bossSession ########################################################################## def _MySqlSession(self, installDb): """ __mySqlSession__ """ if self.bossSession is not None: return self.database = "MySQL" # BossLiteApi session self.bossSession = BossLiteAPI(self.database, self.dbConfig) # db installed? try: if installDb: self.bossSession.bossLiteDB.installDB( '$PRODCOMMON_ROOT/lib/ProdCommon/BossLite/DbObjects/setupDatabase.sql' ) except: pass return self.bossSession ########################################################################## def schedulerSession(self): """ __schedulerSession__ """ if self.schedSession is not None: return self.schedSession self.schedSession = BossLiteAPISched( self.bossSession, \ self.schedulerConfig, \ self.task ) return self.schedSession ########################################################################## def testTask(self): """ __testTask__ """ try: if self.taskId is not None: self.load(self.taskId, self.jobRange) else: self.task = self.bossSession.loadTaskByName(self.taskName, deep=False) self.load(self.task, self.jobRange) print "Task loaded..." except BossLiteError, e: print "Task not found... declaring" taskParams = { 'name': self.taskName, 'globalSandbox': '/etc/redhat-release' } self.task = Task(taskParams) print self.task parameters = { 'executable': '/bin/echo', 'arguments': 'ciao', 'standardError': 'err.txt', 'standardOutput': 'out.txt', 'outputFiles': ['out.txt'] } # 'outputFiles' : ['err.txt', 'out.txt', '.BrokerInfo']} jobs = [] for jobId in range(1, 51): parameters['name'] = 'job' + str(jobId) job = Job(parameters) self.bossSession.getNewRunningInstance(job) jobs.append(job) parameters['arguments'] = 'ciao2' for jobId in range(51, 101): parameters['name'] = 'job' + str(jobId) job = Job(parameters) self.bossSession.getNewRunningInstance(job) jobs.append(job) self.task.addJobs(jobs) self.bossSession.saveTask(self.task) for job in self.task.jobs: print job['jobId'], job['taskId'], job['submissionNumber'], if job.runningJob is not None: print job.runningJob['jobId'], \ job.runningJob['taskId'], \ job.runningJob['submission'] return self.task
class TaskAPITests(object): """ TaskAPITests for the Job class """ ########################################################################## def __init__(self, dbtype, installDb=False): """ __init__ """ self.bossSession = None self.schedSession = None self.task = None self.jobRange = 'all' self.outdir = None self.taskId = None self.taskName = 'test_task' # read configuration self.database = dbType self.dbConfig = dbConfig self.schedulerConfig = schedulerConfig if dbtype.lower() == 'sqlite' : self.bossSession = self._SqLiteSession(installDb) elif dbtype.lower() == 'mysql' : self.bossSession = self._MySqlSession(installDb) else : print "bad db choice: '%s', allowed only 'SQLite' or 'MySQL'" % \ dbtype sys.exit() ########################################################################## def _SqLiteSession(self, installDb): """ __sqLiteSession__ """ if self.bossSession is not None : return # BossLiteApi session self.database = "SQLite" self.bossSession = BossLiteAPI( self.database, self.dbConfig ) # db installed? try: if installDb : self.bossSession.bossLiteDB.installDB( '$PRODCOMMON_ROOT/lib/ProdCommon/BossLite/DbObjects/setupDatabase-sqlite.sql' ) self.bossSession.bossLiteDB.reset() except: pass return self.bossSession ########################################################################## def _MySqlSession(self, installDb): """ __mySqlSession__ """ if self.bossSession is not None : return self.database = "MySQL" # BossLiteApi session self.bossSession = BossLiteAPI( self.database, self.dbConfig ) # db installed? try: if installDb : self.bossSession.bossLiteDB.installDB( '$PRODCOMMON_ROOT/lib/ProdCommon/BossLite/DbObjects/setupDatabase.sql' ) except: pass return self.bossSession ########################################################################## def schedulerSession(self): """ __schedulerSession__ """ if self.schedSession is not None: return self.schedSession self.schedSession = BossLiteAPISched( self.bossSession, \ self.schedulerConfig, \ self.task ) return self.schedSession ########################################################################## def testTask( self ) : """ __testTask__ """ try: if self.taskId is not None : self.load( self.taskId, self.jobRange) else : self.task = self.bossSession.loadTaskByName( self.taskName, deep=False) self.load( self.task, self.jobRange) print "Task loaded..." except BossLiteError, e: print "Task not found... declaring" taskParams = {'name' : self.taskName, 'globalSandbox' : '/etc/redhat-release' } self.task = Task( taskParams ) print self.task parameters = {'executable' : '/bin/echo', 'arguments' : 'ciao', 'standardError' : 'err.txt', 'standardOutput' : 'out.txt', 'outputFiles' : ['out.txt']} # 'outputFiles' : ['err.txt', 'out.txt', '.BrokerInfo']} jobs = [] for jobId in range(1, 51): parameters['name'] = 'job' + str(jobId) job = Job(parameters) self.bossSession.getNewRunningInstance(job) jobs.append(job) parameters['arguments'] = 'ciao2' for jobId in range(51, 101): parameters['name'] = 'job' + str(jobId) job = Job(parameters) self.bossSession.getNewRunningInstance(job) jobs.append(job) self.task.addJobs(jobs) self.bossSession.saveTask( self.task ) for job in self.task.jobs : print job['jobId'], job['taskId'], job['submissionNumber'], if job.runningJob is not None : print job.runningJob['jobId'], \ job.runningJob['taskId'], \ job.runningJob['submission'] return self.task