def updateJobs(self): from vistrails.gui.vistrails_window import _app self.view = _app.getViewFromLocator(self.locator) if self.view: self.name = "%s:%s" % (self.locator.short_name, self.view.controller.get_pipeline_name()) else: self.name = "%s:%s" % (self.locator.short_name, self.workflow.version) self.setText(0, self.name) self.has_queue = True for job in self.jobs.itervalues(): job.updateJob() if not job.job.finished and not job.queue: self.has_queue = False count = len(self.jobs) finished = sum([job.jobFinished for job in self.jobs.values()]) self.setText(1, "(%s/%s)" % (finished, count)) self.workflowFinished = (finished == count) if self.workflowFinished: self.setIcon(0, theme.get_current_theme().JOB_FINISHED) elif not self.has_queue: self.setIcon(0, theme.get_current_theme().JOB_SCHEDULED) else: self.setIcon(0, theme.get_current_theme().JOB_CHECKING)
def updateJobs(self): """ Updates name and job states """ name = self.parent().controller.get_pipeline_name( self.workflow.version) self.setText(0, name) self.setToolTip( 0, 'Double-Click to View Pipeline "%s" with id %s' % (name, self.workflow.version)) self.setToolTip(1, "Log id: %s" % self.workflow.id) self.has_handle = True for job in self.jobs.itervalues(): job.updateJob() if not job.job.finished and not job.handle: self.has_handle = False count = len(self.jobs) finished = sum([job.jobFinished for job in self.jobs.values()]) self.setText(1, "(%s/%s)" % (finished, count)) self.workflowFinished = (finished == count) if self.workflowFinished: self.setIcon(1, theme.get_current_theme().JOB_FINISHED) elif not self.has_handle: self.setIcon(1, theme.get_current_theme().JOB_SCHEDULED) else: self.setIcon(1, theme.get_current_theme().JOB_CHECKING)
def updateJobs(self): """ Updates name and job states """ self.paused = False try: name = self.parent().controller.get_pipeline_name( self.workflow.version) self.setToolTip(0, 'Double-Click to View Pipeline "%s" with id %s' % (name, self.workflow.version)) except KeyError: name = self.workflow.version self.setText(0, name) self.setToolTip(1, "Log id: %s" % self.workflow.id) changed = False self.has_handle = True for job in self.jobs.itervalues(): if job.updateJob(): changed = True if not job.job.finished and not job.handle: self.has_handle = False count = len(self.jobs) finished = sum([job.job.finished or job.job.ready for job in self.jobs.values()]) self.setText(1, "(%s/%s)" % (finished, count)) self.workflowFinished = (finished == count) if self.workflowFinished: self.setIcon(1, theme.get_current_theme().JOB_FINISHED) elif not self.has_handle: self.setIcon(1, theme.get_current_theme().JOB_SCHEDULED) else: self.setIcon(1, theme.get_current_theme().JOB_CHECKING) return changed
def __init__(self, workflow, parent): QtGui.QTreeWidgetItem.__init__(self, parent, ['', '']) self.workflow = workflow self.has_handle = True self.setIcon(0, theme.get_current_theme().PIPELINE_ICON) self.setIcon(1, theme.get_current_theme().JOB_CHECKING) self.workflowFinished = False self.jobs = {} self.intermediates = {} self.updateJobs()
def __init__(self, workflow, parent): QtGui.QTreeWidgetItem.__init__(self, parent, ['', '']) self.workflow = workflow self.has_queue = True self.setIcon(0, theme.get_current_theme().PIPELINE_ICON) self.setIcon(1, theme.get_current_theme().JOB_CHECKING) self.workflowFinished = False self.jobs = {} self.intermediates = {} self.updateJobs()
def __init__(self, name, error, parent=None): QtGui.QTreeWidgetItem.__init__(self, parent, [name, error.msg]) self.setToolTip(1, error.msg) self.queue = error.queue if self.queue: self.setIcon(0, theme.get_current_theme().JOB_CHECKING) self.setToolTip(0, "This Job has a method to check if it has finished.") else: self.setIcon(0, theme.get_current_theme().JOB_SCHEDULED) self.setToolTip(0, 'To check this job the workflow must be re-executed. Make sure "Run To Check" is checked.') self.jobFinished = False
def __init__(self, workflow, parent): QtGui.QTreeWidgetItem.__init__(self, parent, ['', '']) self.workflow = workflow self.has_handle = True # Paused workflows will not be checked by the timer/"Check all" button self.paused = False self.setIcon(0, theme.get_current_theme().PIPELINE_ICON) self.setIcon(1, theme.get_current_theme().JOB_CHECKING) self.workflowFinished = False self.jobs = {} self.intermediates = {} self.updateJobs()
def updateJob(self): if self.job.finished: self.jobFinished = self.job.finished self.setText(1, self.job.parameters.get('__message__', "Finished" if self.jobFinished else "Running")) if self.jobFinished: self.setIcon(1, theme.get_current_theme().JOB_FINISHED) self.setToolTip(0, "This Job Has Finished") elif self.monitor: self.setIcon(1, theme.get_current_theme().JOB_SCHEDULED) self.setToolTip(0, "This Job is Running and Scheduled for Checking") else: self.setIcon(1, theme.get_current_theme().JOB_CHECKING) self.setToolTip(0, "This Job is Running") self.setToolTip(1, self.job.id)
def update_jobs(self): # check all jobs for workflow in self.workflowItems.values(): # jobs without a queue can also be checked if not workflow.has_queue: if self.rerun.isChecked(): workflow.execute() continue if workflow.workflowFinished: continue for job in workflow.jobs.itervalues(): if job.jobFinished: continue try: # call queue job.jobFinished = job.queue.finished() # old version of BatchQ needs to call .val() if not isinstance(job.jobFinished, bool): job.jobFinished = job.jobFinished.val() if job.jobFinished: job.setText(1, "Finished") except Exception, e: debug.critical("Error checking job %s: %s" % (workflow.name, str(e))) if job.jobFinished: job.setIcon(0, theme.get_current_theme().JOB_FINISHED) workflow.countJobs() workflow.workflowFinished = len(workflow.jobs) == \ sum(j.jobFinished for j in workflow.jobs.itervalues()) if workflow.workflowFinished: workflow.setIcon(0, theme.get_current_theme().JOB_FINISHED) workflow.setText(1, "Finished") workflow.countJobs() if workflow.workflowFinished: if self.autorun.isChecked(): self.updating_now = False workflow.execute() self.updating_now = True continue ret = QtGui.QMessageBox.information(self, "Job Ready", 'Pending Jobs in workflow "%s" have finished, ' 'continue execution now?' % workflow.name, QtGui.QMessageBox.Ok, QtGui.QMessageBox.Cancel) if ret == QtGui.QMessageBox.Ok: self.updating_now = False workflow.execute() self.updating_now = True
def updateJob(self): if self.job.finished: self.jobFinished = self.job.finished self.setText( 1, self.job.parameters.get( '__message__', "Finished" if self.jobFinished else "Running")) if self.jobFinished: self.setIcon(1, theme.get_current_theme().JOB_FINISHED) self.setToolTip(0, "This Job Has Finished") elif self.handle: self.setIcon(1, theme.get_current_theme().JOB_SCHEDULED) self.setToolTip(0, "This Job is Running and Scheduled for Checking") else: self.setIcon(1, theme.get_current_theme().JOB_CHECKING) self.setToolTip(0, "This Job is Running") self.setToolTip(1, self.job.id)
def __init__(self, controller, parent=None): self.controller = controller self.jobMonitor = controller.jobMonitor self.jobMonitor.setCallback(self) self.locator = controller.vistrail.locator QtGui.QTreeWidgetItem.__init__(self, parent, [self.locator.short_name, '']) self.setIcon(0, theme.get_current_theme().HISTORY_ICON) self.setToolTip(0, self.locator.name) self.workflowItems = {} self.load_running_jobs()
def __init__(self, workflow, parent): self.locator = BaseLocator.from_url(workflow.vistrail) QtGui.QTreeWidgetItem.__init__(self, parent, ['', '']) self.setToolTip(0, "Double-Click to View Pipeline") self.setToolTip(1, workflow.id) self.workflow = workflow self.has_queue = True self.setIcon(0, theme.get_current_theme().JOB_CHECKING) self.setExpanded(True) self.workflowFinished = False self.jobs = {} self.intermediates = {} self.updateJobs()
def updateJobs(self): """ Updates name and job states """ name = self.parent().controller.get_pipeline_name( self.workflow.version) self.setText(0, name) self.setToolTip(0, 'Double-Click to View Pipeline "%s" with id %s' % (name, self.workflow.version)) self.setToolTip(1, "Log id: %s" % self.workflow.id) self.has_queue = True for job in self.jobs.itervalues(): job.updateJob() if not job.job.finished and not job.monitor: self.has_queue = False count = len(self.jobs) finished = sum([job.jobFinished for job in self.jobs.values()]) self.setText(1, "(%s/%s)" % (finished, count)) self.workflowFinished = (finished == count) if self.workflowFinished: self.setIcon(1, theme.get_current_theme().JOB_FINISHED) elif not self.has_queue: self.setIcon(1, theme.get_current_theme().JOB_SCHEDULED) else: self.setIcon(1, theme.get_current_theme().JOB_CHECKING)
def __init__(self, controller, error, parent): if controller.vistrail.locator: self.name = "%s:%s" % (controller.vistrail.locator.short_name, controller.get_pipeline_name()) else: self.name = "Untitled.vt:%s" % controller.get_pipeline_name() QtGui.QTreeWidgetItem.__init__(self, parent, [self.name, error if isinstance(error, str) else error.msg]) self.setToolTip(0, "Double-Click to View Pipeline") self.setToolTip(1, error if isinstance(error, str) else error.msg) self.controller = controller self.version = controller.current_version self.has_queue = True self.setIcon(0, theme.get_current_theme().JOB_CHECKING) self.workflowFinished = False self.jobs = {} from vistrails.gui.vistrails_window import _app self.view = _app.get_current_view()
def add_job(self, controller, error, prev='', workflow=None): """ Adds job recursively """ added = False if not prev: if controller.vistrail.locator: name = controller.vistrail.locator.short_name else: name = 'Untitled.vt' version_id = controller.current_version if (name, version_id) not in self.workflowItems: workflow = QWorkflowItem(controller, error, self.jobView) self.jobView.addTopLevelItem(workflow) self.workflowItems[(name, version_id)] = workflow # save job to configuration if controller.vistrail.locator: conf = configuration.get_vistrails_configuration() if not conf.has('runningJobsList') or not conf.runningJobsList: conf_jobs = [] else: conf_jobs = conf.runningJobsList.split(';') if not conf_jobs: conf_jobs = [] url = controller.vistrail.locator.to_url() if '?' in url: url += '&workflow=%d' % version_id else: url += '?workflow=%d' % version_id if not url in conf_jobs: conf_jobs.append(str(url)) conf.runningJobsList = ';'.join(conf_jobs) configuration.get_vistrails_persistent_configuration( ).runningJobsList = conf.runningJobsList else: workflow = self.workflowItems[(name, version_id)] job_name = ((prev+'.') if prev else '') + error.module.__class__.__name__ if not error.children: if not error.queue: # We allow jobs without queue objects, but they will # have to be checked by re-executing the entire workflow workflow.has_queue = False workflow.setIcon(0, theme.get_current_theme().JOB_SCHEDULED) workflow.setToolTip(0, 'To check this workflow it must be re-executed. Make sure "Run To Check" is checked.') #return False # remove any previous instance of this job, if name is shorter if id(error) in workflow.jobs and \ len(job_name) > len(workflow.jobs[id(error)].text(0)): workflow.takeChild(workflow.indexOfChild( workflow.jobs[id(error)])) del workflow.jobs[id(error)] # if we did not keep an already existing job, add it if id(error) not in workflow.jobs: job = QJobItem(job_name, error) workflow.addChild(job) workflow.jobs[id(error)] = job workflow.countJobs() return True else: for child in error.children: result = self.add_job(controller, child, job_name, workflow) if result: added = True return added
def resume(self): self.paused = False self.setIcon(1, theme.get_current_theme().JOB_CHECKING)
def pause(self): self.paused = True self.setIcon(1, theme.get_current_theme().JOB_SCHEDULED)