def check_builds_status(self): builds = mongo.builds.find( {"status": { "$nin": ["succeeded", "failed"] }}) for b in builds: finished = 0 build = Build(b) jobs = build.get_jobs() if len(jobs) == build.job_count and build.job_count > 0: for job in jobs: if job.status in ['succeeded', 'failed']: finished += 1 if finished == len(jobs): if all([ True if j.status == 'succeeded' else False for j in jobs ]): build.set_status('succeeded') else: build.set_status('failed') build.finishing() # collect old jammed build time_limit = time.time() - pecan.conf.build_lifetime builds = mongo.builds.find({ "status": { "$nin": ["succeeded", "failed"] }, "created": { "$lte": time_limit } }) for b in builds: build = Build(b) build.set_status('failed') build.finishing() jobs = build.get_jobs() for job in jobs: if job.status not in ['succeeded', 'failed']: job.set_status('failed')