本文整理汇总了Python中pandatools.Client.getFullJobStatus方法的典型用法代码示例。如果您正苦于以下问题:Python Client.getFullJobStatus方法的具体用法?Python Client.getFullJobStatus怎么用?Python Client.getFullJobStatus使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类pandatools.Client
的用法示例。
在下文中一共展示了Client.getFullJobStatus方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: retrievePandaJobs
# 需要导入模块: from pandatools import Client [as 别名]
# 或者: from pandatools.Client import getFullJobStatus [as 别名]
def retrievePandaJobs(job, jIDs):
'''
methods for retrieving panda job ids of panda jobs given a jobDefId
'''
from pandatools import Client
ick = False
jstatus = ''
num_pjobs = 0
logger.debug("retrievePandaJobs jIDs=%s" %jIDs)
# get status from Panda server
rc, jobsStatus = Client.getFullJobStatus(jIDs,False)
if rc:
logger.error('Return code %d retrieving job status information.',rc)
raise BackendError('Jedi','Return code %d retrieving job status information.' % rc)
for status in jobsStatus:
if not status: continue
jstatus = status.jobStatus
if status.jobStatus == None:
logger.warning('No panda jobs expected')
job.backend.pandajobs = []
elif status.jobStatus in [ "defined", "activated", "running", "failed", "finished", "holding", "assigned"]:
logger.debug('Panda jobs are running')
logger.debug("PandaID: %d" % status.PandaID)
pjobj = JediPandaJob()
pjobj.id = status.PandaID
pjobj.url = 'http://panda.cern.ch/?job=%d' % status.PandaID
pjobj.jopSpec = dict(zip(status._attributes,status.values()))
for k in pjobj.jobSpec.keys():
if type(pjobj.jobSpec[k]) not in [type(''),type(1)]:
pjobj.jobSpec[k]=str(pjobj.jobSpec[k])
if pjobj not in job.backend.pandajobs:
job.backend.pandajobs.append(pjobj)
else:
logger.debug("Panda job %s already exists locally" % pjobj.id)
num_pjobs += 1
else:
logger.warning("getFullJobStatus returned unsupported status %s for Panda job %s " %(status.jobStatus, status.PandaID) )
ick = True
return (ick, jstatus, num_pjobs)
示例2: len
# 需要导入模块: from pandatools import Client [as 别名]
# 或者: from pandatools.Client import getFullJobStatus [as 别名]
for r in res:
ids.append(r[0])
print 'got', len(ids), 'new pandaIDs'
print
except cx_Oracle.DatabaseError, exc:
error, = exc.args
print "updatePandaWAN.py - problem in establishing connection to db"
print "updatePandaWAN.py Oracle-Error-Code:", error.code
print "updatePandaWAN.py Oracle-Error-Message:", error.message
print 'leaving only first 200 in the list.'
del ids[2000:]
from pandatools import Client
status,jobSpec = Client.getFullJobStatus(ids,False)
print 'got back from panda:', len(jobSpec)
try:
connection = cx_Oracle.Connection(line)
cursor = cx_Oracle.Cursor(connection)
print 'Connection established.'
for i in jobSpec:
if i is None:
print "problem..."
continue
ti=i.pilotTiming.split('|')
if len(ti)!=5:
print i.PandaID,i.pilotTiming,ti
#cursor.execute("DELETE FROM ATLAS_WANHCTEST.result where pandaid=:pid",{'pid':i.PandaID});
continue
示例3: retry
# 需要导入模块: from pandatools import Client [as 别名]
# 或者: from pandatools.Client import getFullJobStatus [as 别名]
#.........这里部分代码省略.........
else:
return
# check opts for newSite
if newSite or newOpts != {}:
if not localJob.outDS.endswith('/') and not newOpts.has_key('outDS') and not newOpts.has_key('--outDS'):
tmpLog.warning('You need to specify --outDS in newOpts to retry at new site unless container is used as output')
return
# get list of failed jobs
pandaIDs = localJob.PandaID.split(',')
statusList= localJob.jobStatus.split(',')
jobList = []
for idx in range(len(pandaIDs)):
# check status unless reproduce files
if reproduceFiles == [] and not statusList[idx] in ['failed','cancelled']:
continue
jobList.append(pandaIDs[idx])
# no failed job
if jobList == []:
if isJobset:
tmpLog.info('Skip JobID=%s since no failed jobs' % JobID)
continue
else:
tmpLog.info('No failed jobs to be retried for JobID=%s' % JobID)
return
# get full job spec
tmpLog.info("Retrying JobID=%s ..." % JobID)
tmpLog.info("Getting job info")
idxJL = 0
nQuery = 500
pandaJobs = []
while idxJL < len(jobList):
# avoid burst query
tmpLog.info(" %5s/%s" % (idxJL,len(jobList)))
status,oTmp = Client.getFullJobStatus(
jobList[idxJL:idxJL+nQuery],
verbose=self.verbose)
if status != 0:
tmpLog.error(status)
tmpLog.error(oTmp)
tmpLog.error("Cannot get job info from Panda server")
return
pandaJobs += oTmp
idxJL += nQuery
time.sleep(1)
tmpLog.info(" %5s/%s" % (len(jobList),len(jobList)))
# get PandaIDs to reproduce files
if reproduceFiles != []:
# change wildcard to .* for regexp
reproduceFilePatt = []
for tmpReproduceFile in reproduceFiles:
if '*' in tmpReproduceFile:
tmpReproduceFile = tmpReproduceFile.replace('*','.*')
reproduceFilePatt.append(tmpReproduceFile)
# get list of jobs which produced interesting files
tmpJobList = []
tmpPandaJobs = []
for tmpPandaJob in pandaJobs:
# check names
tmpMatchFlag = False
for tmpFile in tmpPandaJob.Files:
if tmpFile.type == 'output' and tmpFile.status == 'ready':
for tmpReproduceFile in reproduceFilePatt:
# normal matching
if tmpReproduceFile == tmpFile.lfn:
tmpMatchFlag = True
break
示例4: status
# 需要导入模块: from pandatools import Client [as 别名]
# 或者: from pandatools.Client import getFullJobStatus [as 别名]
def status(self,JobID,forceUpdate=False):
# get logger
tmpLog = PLogger.getPandaLogger()
# check proxy
self.gridPassPhrase,self.vomsFQAN = PsubUtils.checkGridProxy(
self.gridPassPhrase,
False,
self.verbose,
useCache=True)
# get job info from local repository
job = self.getJobInfo(JobID)
if job == None:
# not found
return None
# update if needed
if job.dbStatus != 'frozen' or forceUpdate:
if not job.isJEDI():
tmpLog.info("Getting status for JobID=%s ..." % JobID)
# get status from Panda server
status,pandaIDstatus = Client.getPandIDsWithJobID(JobID,verbose=self.verbose)
if status != 0:
tmpLog.error("Failed to get status for ID=%s" % JobID)
return None
# get one job to set computingSite which may have changed due to rebrokerage
pandaJob = None
if pandaIDstatus != {}:
tmpPandaIDs = pandaIDstatus.keys()
tmpPandaIDs.sort()
status,tmpPandaJobs = Client.getFullJobStatus(
tmpPandaIDs[:1],
verbose=self.verbose)
if status != 0:
tmpLog.error("Failed to get PandaJobs for %s" % JobID)
return None
pandaJob = tmpPandaJobs[0]
# convert to local job spec
job = PdbUtils.convertPtoD([],pandaIDstatus,job,pandaJobForSiteID=pandaJob)
# check merge job generation
status = self.setMergeJobStatus(job,forceUpdate)
if not status:
return None
else:
tmpLog.info("Getting status for TaskID=%s ..." % job.jediTaskID)
# get JEDI task
status,jediTaskDict = Client.getJediTaskDetails(
{'jediTaskID':job.jediTaskID},
False,
True,
verbose=self.verbose)
if status != 0:
tmpLog.error("Failed to get task details for %s" % JobID)
return
# convert JEDI task
job = PdbUtils.convertJTtoD(jediTaskDict,job)
# update DB
try:
PdbUtils.updateJobDB(job,self.verbose)
except:
tmpLog.error("Failed to update local repository for JobID=%s" % JobID)
return None
if not job.isJEDI():
tmpLog.info("Updated JobID=%s" % JobID)
else:
tmpLog.info("Updated TaskID=%s ..." % job.jediTaskID)
# return
return job
示例5: master_updateMonitoringInformation
# 需要导入模块: from pandatools import Client [as 别名]
# 或者: from pandatools.Client import getFullJobStatus [as 别名]
def master_updateMonitoringInformation(jobs):
'''Monitor jobs'''
from pandatools import Client
#active_status = [ None, 'defined', 'unknown', 'assigned', 'waiting', 'activated', 'sent', 'starting', 'running', 'holding', 'transferring' ]
submitting_status = [ ]
active_status = [ None, 'registered', 'waiting', 'defined', 'pending', 'assigning', 'ready', 'scouting', 'running', 'holding', 'merging', 'prepared', 'aborting', 'finishing' ]
inactive_status = [ 'finished', 'aborted', 'broken', 'failed', 'done' ]
# Find jobs to be monitored
jobdict = {}
for job in jobs:
# add a delay as Panda can be a little slow in sorting out a new Task
if job.backend.id and job.backend.status in active_status and ( (datetime.datetime.utcnow() - job.time.timestamps["submitted"]).seconds > 120):
jobdict[job.backend.id] = job
logger.debug("jobdict = %s" %jobdict)
# Monitor active Jedi tasks
allJobIDs = jobdict.keys()
pandaJobIDs = {}
for jID in allJobIDs:
status, jediTaskDict = Client.getJediTaskDetails({'jediTaskID': jID},False,True,verbose=False)
if status != 0:
logger.error("Failed to get task details for %s" % jID)
#raise BackendError('Jedi','Return code %d retrieving job status information.' % status)
continue
# Retrieve job
job = jobdict[jediTaskDict['jediTaskID']]
# Store associated Panda jobs
if job.backend.pandajobs:
pandaJobIDs[job.backend.id] = [pj.id for pj in job.backend.pandajobs]
else:
pandaJobIDs[jediTaskDict['jediTaskID']] = jediTaskDict['PandaID']
logger.debug("jID = %s, pandaJobIDs = %s" % (jID, pandaJobIDs))
# Fill the output data dataset list
if 'outDS' in jediTaskDict and jediTaskDict['outDS'] != '':
for ds in jediTaskDict['outDS'].split(','):
if not ds in job.outputdata.datasetList:
job.outputdata.datasetList.append(ds)
# Jedi job status has changed
if job.backend.status != jediTaskDict['status']:
logger.debug('Job %s has changed status from %s to %s',job.getFQID('.'),job.backend.status, jediTaskDict['status'])
job.backend.status = jediTaskDict['status']
job.backend.reason = jediTaskDict['statistics']
# Now update Jedi job status
if jediTaskDict['status'] in ['registered', 'waiting', 'defined', 'pending', 'assigning', 'ready']:
job.updateStatus('submitted')
elif jediTaskDict['status'] in ['scouting', 'running', 'holding', 'merging', 'prepared' ]:
job.updateStatus('running')
elif jediTaskDict['status'] in ['done']:
job.updateStatus('completed')
elif jediTaskDict['status'] in ['failed', 'finished']:
job.updateStatus('failed')
elif jediTaskDict['status'] in [ 'aborted', 'broken', 'cancelled' ] and job.status not in ['completed','failed']:
job.updateStatus('killed')
else:
logger.warning('Unexpected Jedi task status %s', jediTaskDict['status'])
# Check if associated Panda job exist and monitor them
if not job.backend.pandajobs:
jdefids = pandaJobIDs[jID]
# skip if there are no Panda jobs yet
if not jdefids:
continue
tot_num_mjobs = 0
do_master_update = True
ick,status,num_mjobs = retrievePandaJobs(job, jdefids)
logger.debug('retrievePandaJobs returns: %s %s' % (repr(ick),status))
if not ick:
logger.debug('Panda job retrival failure for Jedi task %s with PandaIds %s' % (job.backend.id, jdefids))
do_master_update = False
tot_num_mjobs += num_mjobs
logger.debug('Job %s retrieved %d Panda jobs' % (job.getFQID('.'),tot_num_mjobs) )
# Now monitor the already attached Panda jobs
else:
jdefids = [ pj.id for pj in job.backend.pandajobs ]
rc, jobsStatus = Client.getFullJobStatus(jdefids,False)
if rc:
logger.error('Return code %d retrieving job status information.',rc)
raise BackendError('Jedi','Return code %d retrieving job status information.' % rc)
for status in jobsStatus:
if not status: continue
for pjob in job.backend.pandajobs:
if pjob.id == status.PandaID:
# skip if no status change
if pjob.status == status.jobStatus:
continue
# Else update job record
pjob.jobSpec = dict(zip(status._attributes,status.values()))
#.........这里部分代码省略.........