예제 #1
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)
예제 #2
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)
예제 #3
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
예제 #4
0
 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
예제 #5
0
 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