def index(): """All jobs.""" jenkins_url = app.config['custom']['jenkins']['url'] query_str = request.args.to_dict() query_s = request.args.to_dict() if 'query' in query_str: query_str = eval(query_str['query']) jobs = Job.find(query_str=query_str, projection=PROJECTION) else: jobs = Job.find(projection=PROJECTION) form = Dummy() statuses = Counter([ job['last_build']['status'] for job in jobs if 'status' in job['last_build'] ]) releases = Counter([ job['release'] for job in jobs if 'release' in job and job['release'] ]) testers = Counter( [job['tester'] for job in jobs if 'tester' in job and job['tester']]) if "query" in query_s: query_string = query_s['query'] else: query_string = query_s return render_template('jobs/index.html', jenkins_url=jenkins_url, query_str=query_string, releases=dict(releases), statuses=dict(statuses), testers=dict(testers), form=form)
def get_tests(self, job, build): """Returns tests given a job name and a build number.""" request = requests.get(self.url + api.API_CALLS['get_tests'].format(job, build), verify=False) result_json = json.loads(request.text) Job.update_tests(job, build, result_json['suites'][0]['cases']) return result_json['suites'][0]['cases']
def remove_jobs(self, jenkins_jobs): """Removes jobs from the database based on the list of jobs in Jenkins. """ for job in Job.find(): if job['name'] not in jenkins_jobs: Job.delete_one(job['name']) LOG.info("Deleted job: %s" % job['name'])
def jenkins_update(): """Handles update received from Jenkins.""" json = request.get_json(silent=True) if not len(Job.find(name=json['name'])): JenkinsAgent.classify_and_insert_to_db(json) else: build = adjust_build_data(json['build']) Job.update_build(job_name=json['name'], build=build) return jsonify({'notification': 'UPDATE_COMPLETE'})
def index(): """Main page route.""" overall_status = dict() count = dict() count['jobs'] = Job.count() count['DFGs'] = DFG.count() count['builds'] = Job.count_builds() count['squads'] = DFG.count(squads=True) builds_count_li, dates_li = Job.get_builds_count_per_date() for res in jenkins_const.RESULTS: overall_status[res] = Job.count(last_build_res=res) return render_template('main/index.html', count=count, overall_status=overall_status, builds_count_li=list(reversed((builds_count_li))), dates_li=list(reversed(dates_li)))
def all_builds(): """All builds API route.""" results = {'data': []} jobs = Job.find() for job in jobs: for build in job['builds']: build['job_name'] = job['name'] results['data'].append(build) return jsonify(results)
def jobs(query_str=None): """All jobs API route.""" q_str = request.args.get('query_str', default={}) if q_str: query_str = eval(q_str) else: query_str = {} results = {'data': Job.find(query_str=query_str, projection=PROJECTION)} return jsonify(results)
def get_builds(job_name=None): """Return builds""" results = {'data': []} jobs = Job.find(name=job_name, exact_match=True) for job in jobs: for build in job['builds']: build['job_name'] = job['name'] results['data'].append(build) return jsonify(results)
def all_tests(): """All builds API route.""" results = {'data': []} jobs = Job.find() for job in jobs: for build in job['builds']: if 'tests' in build: for test in build['tests']: results['data'].append(test) return jsonify(results)
def build(name, number): """Specific build summary.""" uf = url_for('api.get_tests', job_name=name, build_number=number) entity = Job.find(name, build_number=int(number), exact_match=True, projection={"builds.$": 1, "_id": 0}) entity_json = json.dumps(entity, indent=4, sort_keys=True, default=json_util.default) jenkins_url = app.config['custom']['jenkins']['url'] return render_template('builds/one_build_summary.html', job_name=name, uf=uf, jenkins_url=jenkins_url, build_num=number, entity_json=entity_json)
def get_jobs(DFG_name=None, squad_name=None, component_name=None, job_name=None): """Returns jobs.""" results = {'data': []} if squad_name: jobs = Job.find(squad=squad_name, projection=PROJECTION) elif component_name: jobs = Job.find(query_str={ 'DFG': DFG_name, 'component': component_name }, projection=PROJECTION) elif DFG_name: jobs = Job.find(name='DFG-{}'.format(DFG_name), projection=PROJECTION) elif job_name: jobs = Job.find(name=job_name, exact_match=True, projection=PROJECTION) for job in jobs: results['data'].append(job) return jsonify(results)
def component_summary(DFG_name, component_name): """Specific component summary.""" uf = url_for('api.get_jobs', DFG_name=DFG_name, component_name=component_name) jenkins_url = app.config['custom']['jenkins']['url'] pie = Job.get_builds_count_per_release(DFG=DFG_name, component=component_name) return render_template('DFG/summary.html', DFG_name=DFG_name, component_name=component_name, uf=uf, jenkins_url=jenkins_url, pie=pie)
def job(name): """Specific job summary.""" uf = url_for('api.get_builds', job_name=name) job = Job.find(name=name) job[0].pop('_id') entity_json = json.dumps(job, indent=4, sort_keys=True, default=json_util.default) jenkins_url = app.config['custom']['jenkins']['url'] return render_template('jobs/one_job_summary.html', job_name=name, uf=uf, jenkins_url=jenkins_url, entity_json=entity_json)
def DFGs(): """All DFGs.""" title = 'DFGs' DFGs_data = [] all_DFGs = DFG.get_all_DFGs_based_on_jobs() for DFG_name in all_DFGs: uf = url_for('DFG.summary', DFG_name=DFG_name) DFGs_data.append({ 'name': DFG_name, 'num_of_jobs': Job.count(name="DFG-{}".format(DFG_name)), 'summary_url_for': uf }) return render_template('DFG/all.html', DFGs=DFGs_data, title=title)
def get_DFGs_result_summary(DFGs): """Given a list of DFG names, returns a dictionary with the summary of a given DFG CI jobs. DFGs_summary = {'Network': {'FAILED': 2, 'PASSED': 12}, 'Compute': {'FAILED': 3, ... } """ DFGs_summary = dict() for DFG_name in DFGs: DFGs_summary[DFG] = {} for res in jenkins_const.RESULTS: DFGs_summary[DFG_name][res] = Job.count( name='DFG-{}'.format(DFG_name), last_build_res=res) return DFGs_summary
def get_tests(job_name=None, build_number=None): """Return builds""" results = {'data': []} job = Job.find(job_name, build_number=int(build_number), exact_match=True, projection={ 'builds.$.tests': 1, '_id': 0 }) if 'tests' in job[0]['builds'][0]: tests = job[0]['builds'][0]['tests'] else: tests = load_tests(job=job_name, build=build_number) results = {'data': tests} return jsonify(results)
def components(): """All components.""" title = 'Components' components_data = [] DFGs = DFG.find() for DFG_db in DFGs: for component in DFG_db['components']: uf = url_for('DFG.component_summary', DFG_name=DFG_db['name'], component_name=component) count = Job.count(component) components_data.append({ 'name': component, 'num_of_jobs': count, 'summary_url_for': uf }) return render_template('DFG/all.html', DFGs=components_data, title=title)
def squad_summary(DFG_name, squad_name): """Specific squad summary.""" comps_uf = {} uf = url_for('api.get_jobs', DFG_name=DFG_name, squad_name=squad_name) jenkins_url = app.config['custom']['jenkins']['url'] pie = Job.get_builds_count_per_release(DFG=DFG_name, squad=squad_name) components = DFG.get_squad_components(DFG_name, squad_name) for component in components: comps_uf[component] = url_for('DFG.component_summary', DFG_name=DFG_name, component_name=component) return render_template('DFG/summary.html', DFG_name=DFG_name, squad_name=squad_name, uf=uf, pie=pie, components=components, jenkins_url=jenkins_url, comps_uf=comps_uf)
def summary(DFG_name): """All DFGs.""" squads_uf = {} uf = url_for('api.get_jobs', DFG_name=DFG_name) jenkins_url = app.config['custom']['jenkins']['url'] pie = Job.get_builds_count_per_release(DFG=DFG_name) found_DFG = DFG.find_one(DFG_name) if found_DFG['squads']: for squad in found_DFG['squads']: squads_uf[squad] = url_for('DFG.squad_summary', DFG_name=DFG_name, squad_name=squad) return render_template('DFG/summary.html', DFG_name=DFG_name, uf=uf, jenkins_url=jenkins_url, pie=pie, squads=found_DFG['squads'], squads_uf=squads_uf)
def squads(): """All squads.""" title = 'Squads' squads_data = [] DFGs = DFG.find() for DFG_db in DFGs: if DFG_db['squads']: for squad in DFG_db['squads']: uf = url_for('DFG.squad_summary', DFG_name=DFG_db['name'], squad_name=squad) num_of_jobs = 0 for component in DFG_db['squad_to_components'][squad]: num_of_jobs = num_of_jobs + Job.count(component) squads_data.append({ 'name': squad, 'num_of_jobs': num_of_jobs, 'summary_url_for': uf }) return render_template('DFG/all.html', DFGs=squads_data, title=title)
def add_job_to_db(job, properties): """Add job to the database.""" job = api.adjust_job_data(job) new_job = Job(name=job['name'], last_build=job['build'], **properties) new_job.insert()