Beispiel #1
0
def get_project_list_from_layout(request, layout_id):
    """ Return project ids, names and get-branch-list url """
    if request.method != 'GET':
        return res.get_only_get_allowed({})

    layout = BluesteelLayoutEntry.objects.filter(id=layout_id).first()
    if layout is None:
        return res.get_response(400, 'Layout not found', {})

    project_entries = BluesteelProjectEntry.objects.filter(layout=layout).order_by('order')

    projects = []
    for project in project_entries:
        obj = {}
        obj['id'] = project.id
        obj['name'] = project.name
        obj['url'] = {}
        obj['url']['project_branch_list'] = ViewUrlGenerator.get_project_branch_list_url(project.git_project.id)
        obj['url']['project_definition_list'] = ViewUrlGenerator.get_project_definition_list_url(project.id)
        projects.append(obj)

    data = {}
    data['projects'] = projects

    return res.get_response(200, 'Projects info found', data)
Beispiel #2
0
def get_worker_all(request, page_index):
    """ Returns html for the workers page """
    if request.method != 'GET':
        return res.get_only_get_allowed({})

    worker_entries = WorkerEntry.objects.all().order_by('name')

    page = Page(WORKER_ITEMS_PER_PAGE, page_index)
    pager = Paginator(worker_entries, page.items_per_page)
    current_page = pager.page(page.page_index)
    worker_entries = current_page.object_list
    page_indices = pag.get_pagination_indices(page, PAGINATION_HALF_RANGE,
                                              pager.num_pages)

    workers = get_workers_with_benchmark_info(worker_entries)

    control = {}
    control['name'] = '  Download Worker'
    control['link'] = ViewUrlGenerator.get_download_worker_url()
    control['icon'] = 'fa fa-arrow-down'
    control['onclick'] = 'window.location="{0}"'.format(control['link'])

    pagination = ViewPrepareObjects.prepare_pagination_workers(page_indices)

    data = {}
    data['menu'] = ViewPrepareObjects.prepare_menu_for_html([])
    data['pagination'] = pagination
    data['workers'] = ViewPrepareObjects.prepare_workers_for_html(workers)
    data['controls'] = []
    data['controls'].append(control)

    return res.get_template_data(request, 'presenter/worker_all.html', data)
Beispiel #3
0
def get_bootstrap_urls(request):
    """ Returns the bootstrap entry urls """
    if request.method != 'GET':
        return res.get_only_get_allowed({})

    obj = get_entry_points_urls(request.get_host())
    return res.get_response(200, 'Entry points', obj)
Beispiel #4
0
def get_project_ids_and_names_from_layout(request, layout_id):
    """ Return project ids, names and selected one from a layout """
    if request.method != 'GET':
        return res.get_only_get_allowed({})

    layout = BluesteelLayoutEntry.objects.filter(id=layout_id).first()

    if layout is None:
        return res.get_response(400, 'Layout not found', {})

    project_entries = BluesteelProjectEntry.objects.filter(
        layout=layout).order_by('order')

    projects = []
    for index, project in enumerate(project_entries):
        obj = {}
        obj['id'] = project.id
        obj['name'] = project.name
        obj['selected'] = index == layout.project_index_path
        projects.append(obj)

    data = {}
    data['projects'] = projects

    return res.get_response(200, 'Layout projects info found', data)
Beispiel #5
0
def get_feed_reports_from_worker(request, worker_id, page_index):
    """ Returns a single item list of all the feeds produced by a worker """
    if request.method != 'GET':
        return res.get_only_get_allowed({})

    feed_entries = FeedEntry.objects.filter(worker__id=worker_id).order_by('-created_at')

    page = Page(FEED_REPORT_ITEMS_PER_PAGE, page_index)
    pager = Paginator(feed_entries, page.items_per_page)
    current_page = pager.page(page.page_index)
    feed_entries = current_page.object_list
    page_indices = pag.get_pagination_indices(page, PAGINATION_HALF_RANGE, pager.num_pages)

    items = []
    for report in feed_entries:
        obj = {}
        obj['name'] = 'REPORT {0}'.format(report.id)
        obj['url'] = ViewUrlGenerator.get_feed_report_url(report.id)
        items.append(obj)

    data = {}
    data['menu'] = ViewPrepareObjects.prepare_menu_for_html([])
    data['controls'] = get_feed_controls(worker_id, KEEP_YOUNG_COUNT)
    data['pagination'] = ViewPrepareObjects.prepare_pagination_feed_reports(worker_id, page_indices)
    data['items'] = items

    return res.get_template_data(request, 'presenter/single_item_list.html', data)
Beispiel #6
0
def get_layout(request, layout_id):
    """ Return layout in json """
    if request.method != 'GET':
        return res.get_only_get_allowed({})

    layout = BluesteelLayoutEntry.objects.filter(id=layout_id).first()

    if layout is None:
        return res.get_response(400, 'Layout not found', {})

    layout_obj = layout.as_object()
    layout_obj = add_project_feed_url(request, layout_obj)
    return res.get_response(200, 'Layout found', layout_obj)
Beispiel #7
0
def get_worker_files_hash(request):
    """ Returns the hash of all the files of the worker source code """
    if request.method != 'GET':
        return res.get_only_get_allowed({})

    worker_files_hash = WorkerFilesHashEntry.objects.all().first()

    if not worker_files_hash:
        return res.get_response(400, 'Worker files hash not found', {})

    obj = {}
    obj['worker_files_hash'] = worker_files_hash.files_hash
    return res.get_response(200, 'Worker files hash', obj)
def get_benchmark_executions_stacked_quick(request, project_id, branch_id,
                                           definition_id, worker_id):
    """ Returns benchmark executions stacked and paginated """
    if request.method == 'GET':
        project = BluesteelProjectEntry.objects.filter(id=project_id).first()
        if project is None:
            return res.get_response(404, 'BluesteelProject not found', {})

        git_project = GitProjectEntry.objects.filter(
            id=project.git_project.id).first()
        if git_project is None:
            return res.get_response(404, 'GitProject not found', {})

        branch = GitBranchEntry.objects.filter(id=branch_id,
                                               project=git_project).first()
        if branch is None:
            return res.get_response(404, 'GitBranchEntry not found', {})

        definition = BenchmarkDefinitionEntry.objects.filter(
            id=definition_id, project=project).first()
        if definition is None:
            return res.get_response(404, 'BenchmarkDefinitionEntry not found',
                                    {})

        worker = WorkerEntry.objects.filter(id=worker_id).first()
        if worker is None:
            return res.get_response(404, 'WorkerEntry not found', {})

        page = Page(BENCH_QUICK_ITEMS, BENCH_QUICK_DEFAULT_PAGE)
        commit_hashes_list, pagination = BenchmarkExecutionController.get_bench_exec_commits_paginated(
            git_project, branch, page)
        del pagination

        data_exec = BenchmarkExecutionController.get_stacked_executions_from_branch(
            git_project, branch, commit_hashes_list, definition, worker)

        exec_stacked = BenchmarkExecutionController.get_stacked_data_separated_by_id(
            data_exec)

        execs = ViewPrepareObjects.prepare_stacked_executions_url_field(
            request.get_host(), exec_stacked)
        execs = ViewPrepareObjects.prepare_stacked_executions_json_field(execs)

        data = {}
        data['stacked_executions'] = execs

        return res.get_response(200, 'Benchmark Execution Stacked', data)
    else:
        return res.get_only_get_allowed({})
def get_known_commit_hashes(request, project_id):
    """ Returns a list of known commit hashes for a given project """
    if request.method == 'GET':
        project_entry = GitProjectEntry.objects.filter(id=project_id).first()
        if project_entry is None:
            return res.get_response(404, 'project not found', {})

        obj = {}
        obj['hashes'] = list(
            GitCommitEntry.objects.filter(project=project_entry).values_list(
                'commit_hash', flat=True))

        return res.get_response(200, '', obj)
    else:
        return res.get_only_get_allowed({})
Beispiel #10
0
def get_feed_report(request, feed_report_id):
    """ Returns html for the worker reports page """
    if request.method != 'GET':
        return res.get_only_get_allowed({})

    feed = FeedEntry.objects.filter(id=feed_report_id).first()
    if not feed:
        return res.get_template_data(request, 'presenter/not_found.html', {})
    data = {}
    data['menu'] = ViewPrepareObjects.prepare_menu_for_html([])
    data['report'] = feed.as_object()

    data['report'] = trim_report(data['report'])

    return res.get_template_data(request, 'presenter/worker_report.html', data)
Beispiel #11
0
def get_all_layouts_urls(request):
    """ Return list of all layout in json """
    if request.method != 'GET':
        return res.get_only_get_allowed({})

    all_layouts = BluesteelLayoutEntry.objects.all()

    data = {}
    data['layouts'] = []

    for layout in all_layouts:
        data['layouts'].append(
            ViewUrlGenerator.get_layout_full_url(request.get_host(),
                                                 layout.id))

    return res.get_response(200, 'Layouts', data)
Beispiel #12
0
def get_worker_info(request, worker_uuid):
    """ Returns worker info based on uuid """
    if request.method != 'GET':
        return res.get_only_get_allowed({})

    worker = WorkerEntry.objects.filter(uuid=worker_uuid).first()

    obj = {}
    obj['csrf_token'] = csrf.get_token(request)

    if worker is None:
        return res.get_response(400, 'Worker not found', obj)

    ret_worker = worker.as_object()
    ret_worker['last_update'] = str(ret_worker['last_update'])
    ret_worker['url'] = get_worker_urls(request.get_host(), ret_worker['id'], ret_worker['uuid'])
    obj['worker'] = ret_worker
    return res.get_response(200, 'Worker found', obj)
Beispiel #13
0
def get_worker_names_and_ids(request):
    """ Returns the list of all workers plus its ids """
    if request.method != 'GET':
        return res.get_only_get_allowed({})

    worker_entries = WorkerEntry.objects.all()

    data = {}
    data['workers'] = []

    for worker in worker_entries:
        obj = {}
        obj['name'] = worker.name
        obj['id'] = worker.id
        obj['operative_system'] = worker.operative_system
        data['workers'].append(obj)

    return res.get_response(200, 'Worker list', data)
def get_worker_names_and_ids_of_definition(request, benchmark_definition_id):
    """ Returns the list of all workers plus ids associated with a benchmark definition """
    if request.method != 'GET':
        return res.get_only_get_allowed({})

    bench_passes = BenchmarkDefinitionWorkerPassEntry.objects.filter(
        definition__id=benchmark_definition_id, allowed=True)

    data = {}
    data['workers'] = []

    for bench_pass in bench_passes:
        obj = {}
        obj['name'] = bench_pass.worker.name
        obj['id'] = bench_pass.worker.id
        obj['operative_system'] = bench_pass.worker.operative_system
        data['workers'].append(obj)

    return res.get_response(200, 'Worker list', data)
Beispiel #15
0
def get_worker_reports(request, worker_id):
    """ Returns html for the worker reports page """
    if request.method != 'GET':
        return res.get_only_get_allowed({})

    worker = WorkerEntry.objects.filter(id=worker_id).first()
    if not worker:
        return res.get_template_data(request, 'presenter/not_found.html', {})

    report_entries = CommandGroupEntry.objects.filter(user=worker.user)
    reports = []
    for report in report_entries:
        reports.append(report.as_object())

    data = {}
    data['menu'] = ViewPrepareObjects.prepare_menu_for_html([])
    data['reports'] = ViewPrepareObjects.prepare_reports_for_html(reports)

    return res.get_template_data(request, 'presenter/worker_report.html', data)
Beispiel #16
0
def get_worker_edit(request, worker_id):
    """ Returns worker edit page to modify some workers properties """
    if request.method != 'GET':
        return res.get_only_get_allowed({})

    worker_entry = WorkerEntry.objects.filter(id=worker_id).first()
    if not worker_entry:
        return res.get_template_data(request, 'presenter/not_found.html', {})

    data = {}
    data['menu'] = ViewPrepareObjects.prepare_menu_for_html([])
    data['worker'] = worker_entry.as_object()
    data['worker']['url'] = {}
    data['worker']['url']['save'] = ViewUrlGenerator.get_worker_save_url(
        worker_id)
    data['worker']['url']['delete'] = ViewUrlGenerator.get_worker_delete_url(
        worker_id)

    return res.get_template_data(request, 'presenter/worker_edit.html', data)
Beispiel #17
0
def confirm_wipe(request, layout_id):
    """ Confirm layout deletion """
    if request.method != 'GET':
        return res.get_only_get_allowed({})

    layout_entry = BluesteelLayoutEntry.objects.filter(id=layout_id).first()
    if layout_entry is None:
        return res.get_response(404, 'Bluesteel layout not found', {})

    data = {}
    data['confirm'] = {}
    data['confirm']['title'] = 'Wipe layout'
    data['confirm']['text'] = 'Are you sure you want to wipe this Layout\'s data ?'
    data['confirm']['url'] = {}
    data['confirm']['url']['accept'] = ViewUrlGenerator.get_wipe_layout_url(layout_entry.id)
    data['confirm']['url']['cancel'] = ViewUrlGenerator.get_layout_edit_url(layout_entry.id)
    data['menu'] = ViewPrepareObjects.prepare_menu_for_html([])

    return res.get_template_data(request, 'presenter/confirm.html', data)
def get_benchmark_definition_confirm_delete(request, definition_id):
    """ Confirm benchmark definition deletion """
    if request.method == 'GET':
        bench_def = BenchmarkDefinitionEntry.objects.filter(id=definition_id).first()
        if bench_def is None:
            return res.get_template_data(request, 'presenter/not_found.html', {})

        data = {}
        data['confirm'] = {}
        data['confirm']['title'] = 'Delete Benchmark Definition'
        data['confirm']['text'] = 'Are you sure you want to delete this Benchmark Definition ?'
        data['confirm']['url'] = {}
        data['confirm']['url']['accept'] = ViewUrlGenerator.get_delete_benchmark_definition_url(bench_def.id)
        data['confirm']['url']['cancel'] = ViewUrlGenerator.get_edit_benchmark_definition_url(bench_def.id)
        data['menu'] = ViewPrepareObjects.prepare_menu_for_html([])

        return res.get_template_data(request, 'presenter/confirm.html', data)
    else:
        return res.get_only_get_allowed({})
Beispiel #19
0
def get_definitions_from_project(request, project_id):
    """ Return Benchmark Definition ids, names """
    if request.method != 'GET':
        return res.get_only_get_allowed({})

    def_entries = BenchmarkDefinitionEntry.objects.filter(project__id=project_id, active=True).order_by('name')

    definitions = []
    for definition in def_entries:
        obj = {}
        obj['id'] = definition.id
        obj['name'] = definition.name
        obj['url'] = {}
        obj['url']['worker_list'] = ViewUrlGenerator.get_benchmark_definition_workers_url(definition.id)
        definitions.append(obj)

    data = {}
    data['definitions'] = definitions

    return res.get_response(200, 'Project definitions info found', data)
Beispiel #20
0
def get_layout_list(request):
    """ Returns a list of all the available layouts """
    if request.method != 'GET':
        return res.get_only_get_allowed({})

    layout_entries = BluesteelLayoutEntry.objects.all()

    data = {}
    data['layouts'] = []

    for layout in layout_entries:
        obj = {}
        obj['id'] = layout.id
        obj['name'] = layout.name
        obj['url'] = {}
        obj['url'][
            'project_list'] = ViewUrlGenerator.get_layout_project_list_url(
                layout.id)
        data['layouts'].append(obj)

    return res.get_response(200, 'Layout list', data)
Beispiel #21
0
def get_worker(request, worker_id):
    """ Returns html for the workers page """
    if request.method != 'GET':
        return res.get_only_get_allowed({})

    worker_entries = WorkerEntry.objects.filter(id=worker_id)
    workers = get_workers_with_benchmark_info(worker_entries)

    control = {}
    control['name'] = '  Download Worker'
    control['link'] = ViewUrlGenerator.get_download_worker_url()
    control['icon'] = 'fa fa-arrow-down'
    control['onclick'] = 'window.location="{0}"'.format(control['link'])

    data = {}
    data['menu'] = ViewPrepareObjects.prepare_menu_for_html([])
    data['workers'] = ViewPrepareObjects.prepare_workers_for_html(workers)
    data['controls'] = []
    data['controls'].append(control)

    return res.get_template_data(request, 'presenter/worker.html', data)
Beispiel #22
0
def get_branch_names_from_project(request, project_id):
    """ Return branch ids, names """
    if request.method != 'GET':
        return res.get_only_get_allowed({})

    project = BluesteelProjectEntry.objects.filter(id=project_id).first()

    if project is None:
        return res.get_response(400, 'Project not found', {})

    branch_entries = GitBranchEntry.objects.filter(project__id=project.git_project.id).order_by('order')

    branches = []
    for branch in branch_entries:
        obj = {}
        obj['id'] = branch.id
        obj['name'] = branch.name
        branches.append(obj)

    data = {}
    data['branches'] = branches

    return res.get_response(200, 'Project branches info found', data)
Beispiel #23
0
def get_branch_list(request, project_id):
    """ Returns a list of branches with its info """
    if request.method == 'GET':
        project_entry = GitProjectEntry.objects.filter(id=project_id).first()
        if project_entry is None:
            return res.get_response(404, 'project not found', {})

        branch_entries = GitBranchEntry.objects.filter(project=project_entry)

        branches = []
        for entry in branch_entries:
            obj = entry.as_object()
            merge_target_entry = GitBranchMergeTargetEntry.objects.filter(
                project=project_entry, current_branch=entry).first()

            if merge_target_entry != None:
                obj['target_branch_name'] = merge_target_entry.target_branch.name

            branches.append(obj)

        return res.get_response(200, '', branches)
    else:
        return res.get_only_get_allowed({})
Beispiel #24
0
def download_command_as_json(request, command_id):
    """ Retrieves a command by id and generates a file to be downloaded """
    if request.method == 'GET':
        comm = CommandEntry.objects.filter(id=command_id).first()

        json_response = {}

        if comm:
            json_response = comm.as_object()
        else:
            json_response['msg'] = 'Command with id {0} not found'.format(
                command_id)

        response = HttpResponse(json.dumps(json_response,
                                           indent=4,
                                           separators=(',', ': ')),
                                content_type='application/json')

        response[
            'Content-Disposition'] = 'attachment; filename=Command-{0}.json'.format(
                command_id)
        return response
    else:
        return res.get_only_get_allowed({})