def get_session_info(session_id): session = get_session(g.db, session_id) build_uuid = session_id.split('-')[0] build = Build.load(build_uuid) recipe = Recipe.load(build.recipe, build.recipe_ref) job = Job.load(build.job_name, build.job_ref) # Calculate the actual parameters - setting defaults if static value. # (parameters that have a function as default value will have them # called just before starting the job) param_def = job.get_merged_params() parameters = build.parameters for name in param_def: param = param_def[name] if 'default' in param and not name in parameters: parameters[name] = param['default'] return jsonify(run_info=session['run_info'] or {}, build_uuid=build_uuid, build_name="%s-%d" % (build.job_name, build.number), recipe=recipe.contents, ss_token=build.ss_token, ss_url=current_app.config['SS_URL'], parameters=parameters)
def agent_details(agent_id): info = g.db.hgetall(jdb.KEY_AGENT % agent_id) if not info: abort(404) history = [] for session_id in g.db.lrange(jdb.KEY_AGENT_HISTORY % agent_id, 0, 19): build_uuid = session_id.split('-')[0] build = Build.load(build_uuid) session = get_session(g.db, session_id) history.append({ 'session_id': session_id, 'build_id': build.build_id, 'job_name': build.job_name, 'number': build.number, 'started': session['started'], 'ended': session['ended'], 'result': session['result'], 'title': get_session_title(session) }) return jsonify(id=agent_id, nick=info.get('nick', ''), state=info["state"], seen=int(info["seen"]), labels=info["labels"].split(","), history=history)
def check_in_available(agent_id): session_id = request.json['session_id'] build_id, num = session_id.split('-') with g.db.pipeline() as pipe: set_session_done(pipe, session_id, request.json['result'], request.json['output'], request.json['log_file']) if int(num) == 0: Build.set_done(build_id, request.json['result'], pipe=pipe) add_slog(pipe, session_id, SessionDone(request.json['result'])) pipe.hmset(jdb.KEY_AGENT % agent_id, dict(state=jdb.AGENT_STATE_AVAIL, seen=get_ts())) pipe.execute() r = ResQ() r.enqueue(AgentAvailable, agent_id) return jsonify()
def do_create_build(job_name): input = request.json job = Job.load(job_name, input.get('job_ref')) build = Build.create(job, parameters=input.get('parameters', {}), description=input.get('description', '')) return jsonify(**build)
def do_start_build(job_name): input = request.json job = Job.load(job_name, input.get('job_ref')) build = Build.create(job, parameters=input.get('parameters', {}), description=input.get('description', '')) session_id = '%s-0' % build.uuid set_session_queued(g.db, session_id) r = ResQ() r.enqueue(DispatchSession, session_id) return jsonify(**build.as_dict())
def get_build2(job_name, number): number = int(number) build_uuid = g.db.lindex(KEY_JOB_BUILDS % job_name, number - 1) if build_uuid is None: abort(404, 'Not Found') build = Build.load(build_uuid) if not build: abort(404, 'Invalid Build ID') log = g.db.lrange(KEY_SLOG % build_uuid, 0, 1000) log = [json.loads(l) for l in log] # Fetch information about all sessions sessions = [] for i in range(int(build.next_sess_id)): s = get_session(g.db, '%s-%d' % (build_uuid, i)) sessions.append({ 'num': i, 'agent_id': s['agent'], 'agent_nick': '', 'title': get_session_title(s), 'log_file': s['log_file'], 'parent': s['parent'], 'state': s['state'], 'result': s['result'] }) # Fetch info about the agents (the nick name) agents = set([s['agent_id'] for s in sessions]) for agent_id in agents: nick = g.db.hget(KEY_AGENT % agent_id, 'nick') for s in sessions: if s['agent_id'] == agent_id: s['agent_nick'] = nick return jsonify(build=build.as_dict(), uuid=build_uuid, log=log, sessions=sessions)
def DoArtifactAdded(db, build_uuid, session_no, li): Build.add_artifact(build_uuid, li['params'])
def DoSetBuildId(db, build_uuid, session_no, li): Build.set_build_id(build_uuid, li['params']['build_id'], pipe=db)
def DoSetDescription(db, build_uuid, session_no, li): Build.set_description(build_uuid, li['params']['description'], pipe=db)
def DoJobDone(db, build_uuid, session_no, li): job_name = Build.get_job_name(build_uuid) Job.set_last_success(job_name, build_uuid)