def get(self, id=None, project_id=None): """get.""" logs_limit = request.args.get('logs_limit', default=-1, type=int) project = db.session.query(Project).filter_by(id=project_id).first() if project is None: return jsonify({ 'project': None, 'message': 'No interface defined for URL.' }), 404 if id is None: path = request.args.get('path_name', default=None) if path is not None: result = db.session.query(Result).filter_by( path_name=path).first() if result is None: return jsonify({ 'result': None, 'message': 'Result path \'%s\' is not found' % path }), 400 return jsonify({'result': result.serialize}) collect_results(project) results = db.session.query(Result).\ filter_by(project_id=project_id).\ filter_by(is_unregistered=False).\ all() # NOTE: To improve performance, aggregate commit phase. By set # `commit=False`, implicit transaction is not closed, UPDATE query # is not committed. Consequently a process of serializing does not # have to call SELECT query again. for result in results: crawl_result(result, commit=False) db.session.commit() rs = [r.serialize_with_sampled_logs(logs_limit) for r in results] return jsonify({'results': rs}) else: result = db.session.query(Result).\ filter_by(id=id).\ filter_by(is_unregistered=False).\ first() if result is None: return jsonify({ 'result': None, 'message': 'No interface defined for URL.' }), 404 result = crawl_result(result) return jsonify( {'result': result.serialize_with_sampled_logs(logs_limit)})
def get(self, id=None, project_id=None): """get.""" logs_limit = request.args.get('logs_limit', default=-1, type=int) project = DB_SESSION.query(Project).\ filter_by(id=project_id).\ first() if project is None: return jsonify({ 'project': None, 'message': 'No interface defined for URL.' }), 404 if id is None: collect_results(project) results = DB_SESSION.query(Result).\ filter_by(project_id=project_id).\ filter_by(is_unregistered=False).\ all() for result in results: result = crawl_result(result) return jsonify({ 'results': [ r.serialize_with_sampled_logs(logs_limit) for r in results ] }) else: result = DB_SESSION.query(Result).\ filter_by(id=id).\ filter_by(is_unregistered=False).\ first() if result is None: return jsonify({ 'result': None, 'message': 'No interface defined for URL.' }), 404 result = crawl_result(result) return jsonify({ 'result': result.serialize_with_sampled_logs(logs_limit) })
def post(self, result_id, project_id): """POST /api/v1/results/<int:id>/commands.""" result = db.session.query(Result).filter_by(id=result_id).first() if result is None: return jsonify({ 'result': None, 'message': 'No interface defined for URL.' }), 404 job_status = CommandsState.job_status(result.path_name) if job_status != JobStatus.RUNNING: if job_status == JobStatus.NO_EXTENSION_ERROR: return jsonify({ 'message': '\'CommandsExtension\' is not set or disabled.' }), 400 elif job_status == JobStatus.INITIALIZED: return jsonify( {'message': 'The target training job has not run, yet'}), 400 elif job_status == JobStatus.STOPPED: return jsonify( {'message': 'The target training job has already stopped'}), 400 else: return jsonify( {'message': 'Cannot get the target training job status'}), 400 request_json = request.get_json() if request_json is None: return jsonify({'message': 'Empty request.'}), 400 command_name = request_json.get('name', None) if command_name is None: return jsonify({'message': 'Name is required.'}), 400 schedule = request_json.get('schedule', None) if not CommandItem.is_valid_schedule(schedule): return jsonify({'message': 'Schedule is invalid.'}), 400 command = CommandItem(name=command_name, ) command.set_request(CommandItem.REQUEST_OPEN, request_json.get('body', None), request_json.get('schedule', None)) commands = CommandItem.load_commands(result.path_name) commands.append(command) CommandItem.dump_commands(commands, result.path_name) new_result = crawl_result(result, force=True) new_result_dict = new_result.serialize return jsonify({'commands': new_result_dict['commands']})
def get(self, id=None, project_id=None): """get.""" project = DB_SESSION.query(Project).\ filter_by(id=project_id).\ first() if project is None: return jsonify({ 'project': None, 'message': 'No interface defined for URL.' }), 404 if id is None: collect_results(project) results = DB_SESSION.query(Result).\ filter_by(project_id=project_id).\ filter_by(is_unregistered=False).\ all() for result in results: result = crawl_result(result.id) return jsonify({'results': [r.serialize for r in results]}) else: result = DB_SESSION.query(Result).\ filter_by(id=id).\ filter_by(is_unregistered=False).\ first() if result is None: return jsonify({ 'result': None, 'message': 'No interface defined for URL.' }), 404 result = crawl_result(result.id) return jsonify({'result': result.serialize})
def post(self, result_id, project_id): """POST /api/v1/results/<int:id>/commands.""" result = DB_SESSION.query(Result).filter_by(id=result_id).first() if result is None: return jsonify({ 'result': None, 'message': 'No interface defined for URL.' }), 404 request_json = request.get_json() if request_json is None: return jsonify({'message': 'Empty request.'}), 400 command_name = request_json.get('name', None) if command_name is None: return jsonify({'message': 'Name is required.'}), 400 schedule = request_json.get('schedule', None) if not CommandItem.is_valid_schedule(schedule): return jsonify({'message': 'Schedule is invalid.'}), 400 command = CommandItem(name=command_name, ) command.set_request(CommandItem.REQUEST_OPEN, request_json.get('body', None), request_json.get('schedule', None)) commands = CommandItem.load_commands(result.path_name) commands.append(command) CommandItem.dump_commands(commands, result.path_name) new_result = crawl_result(result.id, force=True) new_result_dict = new_result.serialize return jsonify({'commands': new_result_dict['commands']})