def respawn(self, job_id): job = Job.query.get(job_id) if job: if job.status == 'active': self.stop(job_id) tasks = db.session.query(Task).filter( Task.job_id == job_id, Task.status.notin_( ['completed','failed'])).all() best_managers = db.session.query(Manager).join( JobManagers, Manager.id == JobManagers.manager_id)\ .filter(JobManagers.job_id == job_id)\ .filter(Manager.has_virtual_workers == 1)\ .first() if best_managers: fun = partial(TaskApi.start_task, best_managers) map(fun, tasks) else: map(lambda t : setattr(t, 'status', 'waiting'), tasks) db.session.commit() TaskApi.dispatch_tasks() else: logging.error('Job %d not found' % job_id) raise KeyError
def start(job_id): job = Job.query.get(job_id) if job.status != 'running': job.status = 'running' db.session.add(job) db.session.commit() logging.info('Dispatching tasks') else: pass # TODO (fsiddi): proper error message if jobs is already running TaskApi.dispatch_tasks()
def patch(self, manager_uuid): from application.modules.tasks import TaskApi args = parser.parse_args() manager = Manager.query.filter_by(uuid=manager_uuid).one() # TODO add try except statement to safely handle .one() query manager.total_workers = args['total_workers'] db.session.add(manager) db.session.commit() TaskApi.dispatch_tasks() return jsonify(dict(total_workers=manager.total_workers))
def start(self, job_id): job = Job.query.get(job_id) if job: if job.status != 'running': job.status = 'running' db.session.add(job) db.session.commit() print ('[debug] Dispatching tasks') TaskApi.dispatch_tasks() else: print('[error] Job %d not found' % job_id) raise KeyError
def patch(self, manager_id): from application.modules.tasks import TaskApi args = parser_manager.parse_args() manager = Manager.query.get_or_404(manager_id) # TODO add try except statement to safely handle .one() query manager.total_workers = args['total_workers'] db.session.add(manager) db.session.commit() TaskApi.dispatch_tasks() return jsonify(dict(total_workers=manager.total_workers))
def patch(self, manager_uuid): from application.modules.tasks import TaskApi args = parser.parse_args() try: manager = Manager.query.filter_by(uuid=manager_uuid).one() except NoResultFound: logging.warning("No manager found in Database") return '', 404 # TODO add try except statement to safely handle .one() query manager.total_workers = args['total_workers'] db.session.add(manager) db.session.commit() TaskApi.dispatch_tasks() return jsonify(dict(total_workers=manager.total_workers))
def start(self, job_id): job = Job.query.get(job_id) if job: if job.status not in ['running', 'completed', 'failed']: job.status = 'running' db.session.add(job) db.session.query(Task).filter(Task.job_id == job_id)\ .filter(Task.status == 'aborted')\ .update({'status' : 'ready'}) db.session.commit() print('[debug] Dispatching tasks') TaskApi.dispatch_tasks() else: print('[error] Job %d not found' % job_id) raise KeyError
def respawn(self, job_id): job = Job.query.get(job_id) if job: if job.status == 'running': self.stop(job_id) tasks = db.session.query(Task).filter(Task.job_id == job_id, Task.status.notin_(['finished','failed'])) best_managers = filter(lambda m : m.total_workers is None, app.config['MANAGERS']) if best_managers: fun = partial(TaskApi.start_task, best_managers[0]) map(fun, tasks) else: TaskApi.dispatch_tasks(job_id) else: logging.error('Job %d not found' % job_id) raise KeyError
def post(self): args = job_parser.parse_args() job = Job( project_id=args['project_id'], frame_start=args['frame_start'], frame_end=args['frame_end'], chunk_size=args['chunk_size'], current_frame=args['current_frame'], filepath=args['filepath'], name=args['job_name'], render_settings=args['render_settings'], format=args['format'], status=args['status'], priority=args['priority']) db.session.add(job) db.session.commit() logging.info('Parsing job to create tasks') TaskApi.create_tasks(job) logging.info('Refresh list of available workers') TaskApi.dispatch_tasks(job.id) return job, 201