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)
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)
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)
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)
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)
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)
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({})
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)
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)
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)
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)
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)
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)
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({})
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)
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)
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)
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)
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({})
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({})