コード例 #1
0
ファイル: routes.py プロジェクト: ahmedalazazy/rhoci
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)
コード例 #2
0
ファイル: agent.py プロジェクト: bregman-arie/rhoci
 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']
コード例 #3
0
ファイル: agent.py プロジェクト: bregman-arie/rhoci
 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'])
コード例 #4
0
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'})
コード例 #5
0
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)))
コード例 #6
0
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)
コード例 #7
0
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)
コード例 #8
0
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)
コード例 #9
0
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)
コード例 #10
0
ファイル: routes.py プロジェクト: bregman-arie/rhoci
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)
コード例 #11
0
ファイル: job.py プロジェクト: ahmedalazazy/rhoci
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)
コード例 #12
0
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)
コード例 #13
0
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)
コード例 #14
0
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)
コード例 #15
0
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
コード例 #16
0
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)
コード例 #17
0
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)
コード例 #18
0
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)
コード例 #19
0
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)
コード例 #20
0
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)
コード例 #21
0
ファイル: agent.py プロジェクト: bregman-arie/rhoci
 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()