def update_finished_jobs(self): # Remove the node_id from all finished nodes keep_failed = Configuration().get_int("KEEP_FAILED") keep_failed_timeout = Configuration().get_int("KEEP_FAILED_TIMEOUT") earliest_failed = time_services.time() - keep_failed_timeout with self.jobQueue.db.get_session() as session: finished_node_jobs = session.query(Job).filter( and_(Job.state.in_([constants.COLLECTED, constants.FINISHED, constants.OBSOLETE]), Job.node_id != 0) ) # Construct a list of all jobs that could be kept because they failed keep_jobs = [] if keep_failed > 0: for job in finished_node_jobs: if job.result == "Failed": updated = time.mktime(job.updated.timetuple()) if updated < earliest_failed: self.log.debug("Not keeping %s; too old", job) continue keep_jobs.append(job) # Only keep the <KEEP_FAILED> most recent failures keep_jobs.sort(key=lambda x: x.updated) self.log.debug("Keeping %s, discarding %s", keep_jobs[-keep_failed:], keep_jobs[:-keep_failed]) keep_jobs = keep_jobs[-keep_failed:] for job in finished_node_jobs: if job in keep_jobs: continue job.update(self.jobQueue.db, node_id=0)
def update_finished_jobs(self): # Remove the node_id from all finished nodes keep_failed = Configuration().get_int('KEEP_FAILED') keep_failed_timeout = Configuration().get_int('KEEP_FAILED_TIMEOUT') earliest_failed = time_services.time() - keep_failed_timeout with self.jobQueue.db.get_session() as session: finished_node_jobs = session.query(Job).filter( and_( Job.state.in_([ constants.COLLECTED, constants.FINISHED, constants.OBSOLETE ]), Job.node_id != 0)) # Construct a list of all jobs that could be kept because they failed keep_jobs = [] if keep_failed > 0: for job in finished_node_jobs: if job.result == 'Failed': updated = time.mktime(job.updated.timetuple()) if updated < earliest_failed: self.log.debug('Not keeping %s; too old', job) continue keep_jobs.append(job) # Only keep the <KEEP_FAILED> most recent failures keep_jobs.sort(key=lambda x: x.updated) self.log.debug('Keeping %s, discarding %s', keep_jobs[-keep_failed:], keep_jobs[:-keep_failed]) keep_jobs = keep_jobs[-keep_failed:] for job in finished_node_jobs: if job in keep_jobs: continue job.update(self.jobQueue.db, node_id=0)
def get_jobs(self): delete_list = [] with self.jobQueue.db.get_session() as session: finished_node_jobs = session.query(Job).filter(and_(Job.state.in_([constants.COLLECTED, constants.FINISHED, constants.OBSOLETE]), Job.node_id != 0)) for job in finished_node_jobs: delete_list.append(job) return delete_list
def retrieve(cls, database, project_name, change_num): with database.get_session() as session: results = ( session .query(cls) .filter(db.and_(cls.project_name==project_name, cls.change_num==change_num, cls.state != constants.OBSOLETE)) .order_by(cls.updated).all() ) return results