diff options
author | Yongqin Liu <yongqin.liu@linaro.org> | 2017-09-22 00:36:34 +0800 |
---|---|---|
committer | Yongqin Liu <yongqin.liu@linaro.org> | 2017-09-22 00:36:34 +0800 |
commit | 1914543b09c249ecce569dbaafeda79dceba6414 (patch) | |
tree | df08dbb78f3227bab9f067655d7f7e00f552ca99 | |
parent | c631b8c31d6b86609f4512a512db7216266c674b (diff) |
add support for jobs submission
Signed-off-by: Yongqin Liu <yongqin.liu@linaro.org>
-rw-r--r-- | report/templates/index.html | 86 | ||||
-rw-r--r-- | report/templates/jobs.html | 14 | ||||
-rw-r--r-- | report/templates/submit_jobs.html | 34 | ||||
-rw-r--r-- | report/urls.py | 5 | ||||
-rw-r--r-- | report/views.py | 299 |
5 files changed, 367 insertions, 71 deletions
diff --git a/report/templates/index.html b/report/templates/index.html new file mode 100644 index 0000000..bfa0722 --- /dev/null +++ b/report/templates/index.html @@ -0,0 +1,86 @@ +<div align="center"> +Builds Info + +<div> TODO: +<ul> +<table> +<tr> +<td align="left"> +<li>Trigger ci builds manually or according schedule</li> +<li>Test any change on local manifest or via patchset script</li> +<li>Trend Chart for builds</li> +<li>List jobs result status for one build</li> +</td> +</tr> +</div> +<table border=2> +<tr> +<tr/> +<tr> + <th align="left">Build Names</th> + {% for build_name, build_info in builds.items %} + <td>{{ build_info.build_name }} </td> + {% endfor %} +<tr/> +<tr> + <th align="left">Android Version</th> + {% for build_name, build_info in builds.items %} + <td>{{ build_info.android_version }} </td> + {% endfor %} +<tr/> +<tr> + <th align="left">Kernel Version</th> + {% for build_name, build_info in builds.items %} + <td>{{ build_info.kernel_version }} </td> + {% endfor %} +<tr/> +<tr> + <th align="left">CI Link</th> + {% for build_name, build_info in builds.items %} + <td><a href="{{ build_info.ci_link }}">{{ build_info.build_name }}</a> </td> + {% endfor %} +<tr/> +<tr> + <th align="left">Android Build Config</th> + {% for build_name, build_info in builds.items %} + <td><a href="{{ build_info.android_build_config_link }}"> {{ build_info.build_name }} </a> </td> + {% endfor %} +<tr/> +<tr> + <th align="left">Snapshot URL</th> + {% for build_name, build_info in builds.items %} + <td><a href="{{ build_info.snapshot_url }}">{{ build_info.build_name }} </a> </td> + {% endfor %} +<tr/> +<tr> + <th align="left">Job Status</th> + {% for build_name, build_info in builds.items %} + <td><a href="/report/jobs/?build_name={{ build_info.build_name }}"> Jobs Status </a></td> + {% endfor %} +</tr> +<tr> + <th align="left">Checklist</th> + {% for build_name, build_info in builds.items %} + <td><a href="/report/checklist/?build_name={{ build_info.build_name }}"> CheckList </a></td> + {% endfor %} +</tr> +<tr> + <th align="left">Result Compare</th> + {% for build_name, build_info in builds.items %} + <td><a href="/report/compare/?build_name={{ build_info.build_name }}"> Result Compare </a></td> + {% endfor %} +</tr> +<tr> + <th align="left">Job Submission</th> + {% for build_name, build_info in builds.items %} + <td><a href="/report/submit-jobs/?build_name={{ build_info.build_name }}"> Job Submission </a></td> + {% endfor %} +</tr> +<tr> + <th align="left">Trigger Build</th> + {% for build_name, build_info in builds.items %} + <td><a href="/report/submit-jobs/?build_name={{ build_info.build_name }}"> Job Submission </a></td> + {% endfor %} +</tr> +</table> +</div> diff --git a/report/templates/jobs.html b/report/templates/jobs.html index 2806243..8d5f914 100644 --- a/report/templates/jobs.html +++ b/report/templates/jobs.html @@ -1,21 +1,13 @@ <div align="center"> <title>Results for build: {{ build_info.build_name }}-{{ build_info.build_no }} </title> <h1>Results for build: {{ build_info.build_name }}-{{ build_info.build_no }} </h1> - -<li>Trigger ci builds manually or according schedule</li> -<li>Submit jobs for build</li> -<li>Test any change on local manifest or via patchset script</li> -<li>Checklist for build</li> -<li>Trend Chart for builds</li> -<li>List jobs result status for one build</li> -<li>Compare test results between 2 builds</li> <table> <tr> {% for build_no in build_info.build_numbers %} {% ifequal build_no build_info.build_no %} <td>{{ build_no }} </td> {% else %} - <td><a href="/report/?build_name={{ build_info.build_name}}&&build_no={{ build_no }}">{{ build_no}} </a></td> + <td><a href="/report/jobs/?build_name={{ build_info.build_name}}&&build_no={{ build_no }}">{{ build_no}} </a></td> {% endifequal %} {% endfor %} @@ -69,7 +61,7 @@ {% endfor %} </td> <td> - <button name="resubmit_latest" onclick="this.disabled=true; window.location='/report/resubmit-job/?job_id={% with job.id_status_list|first as first_id_status %}{{ first_id_status.0 }}{% endwith %}'"> + <button name="resubmit_latest" onclick="this.disabled=true; window.location='/report/resubmit-job/?build_name={{ build_info.build_name }}&&job_id={% with job.id_status_list|first as first_id_status %}{{ first_id_status.0 }}{% endwith %}'"> Resubmit {% with job.id_status_list|first as first_id_status %}{{ first_id_status.0 }}{% endwith %} </button> </td> @@ -102,7 +94,7 @@ {% endwith %} </td> <td> - <button name="resubmit_latest" onclick="this.disabled=true; window.location='/report/resubmit-job/?job_id={% with job_result.id_status_list|first as first_id_status %}{{ first_id_status.0 }}{% endwith %}'"> + <button name="resubmit_latest" onclick="this.disabled=true; window.location='/report/resubmit-job/?build_name={{ build_info.build_name }}&&job_id={% with job_result.id_status_list|first as first_id_status %}{{ first_id_status.0 }}{% endwith %}'"> Resubmit {% with job_result.id_status_list|first as first_id_status %}{{ first_id_status.0 }}{% endwith %} </button> </td> diff --git a/report/templates/submit_jobs.html b/report/templates/submit_jobs.html new file mode 100644 index 0000000..12ff8aa --- /dev/null +++ b/report/templates/submit_jobs.html @@ -0,0 +1,34 @@ +<div align="center"> +{% if not from.errors and submit_result %} +<div>Jobs submission status</div> +<table border=2> +<tr> + <th>Job Name</th> + <th>Job Template</th> + <th>Job ID</th> + <th>Comment</th> +</tr> +{% for job_info in submit_result|dictsort:"job_name" %} + <tr> + <td>{{ job_info.job_name }}</td> + <td><a href="{{ job_info.template_url }}">{{ job_info.template }}</a></td> + {% if job_info.job_id %} + <td><a href="{{ job_info.lava_server_job_prefix }}/{{ job_info.job_id }}">{{ job_info.job_id }}</a></td> + {% else %} + <td>--</td> + {% endif %} + <td>{{ job_info.error }} </td> + </tr> +{% endfor %} +</table> +{% else %} +<div>{{ form.errors }}</div> +<form action="/report/submit-jobs/" method="post"> + {% csrf_token %} + <table border="2" > + {{ form.as_table }} + </table> + <input type="submit" id="submit_btn" value="submit" /> +</form> +{% endif %} +</div> diff --git a/report/urls.py b/report/urls.py index 7b28174..9033188 100644 --- a/report/urls.py +++ b/report/urls.py @@ -3,9 +3,10 @@ from django.conf.urls import url from . import views urlpatterns = [ - url(r'^$', views.jobs, name='jobs'), + url(r'^$', views.index, name='index'), + url(r'^jobs/.*$', views.jobs, name='jobs'), url(r'^resubmit-job/.*$', views.resubmit_job, name='resubmit_job'), url(r'^compare/.*$', views.compare, name='compare'), url(r'^checklist/.*$', views.checklist, name='checklist'), + url(r'^submit-jobs/.*$', views.submit_lava_jobs, name='submit_jobs'), ] - diff --git a/report/views.py b/report/views.py index 388ed5e..4c1974a 100644 --- a/report/views.py +++ b/report/views.py @@ -15,11 +15,10 @@ from lava_tool.authtoken import AuthenticatingServerProxy, KeyringAuthBackend # Create your views here. -LAVA_USER_TOKEN = "" -LAVA_USER = "yongqin.liu" -SERVER_URL="https://%s:%s@staging.validation.linaro.org/RPC2/" % (LAVA_USER, LAVA_USER_TOKEN) -server = AuthenticatingServerProxy(SERVER_URL, auth_backend=KeyringAuthBackend()) -lava_server_job_prefix = "https://staging.validation.linaro.org/scheduler/job" +android_snapshot_url_base = "https://snapshots.linaro.org/android" +ci_job_url_base = 'https://ci.linaro.org/job' +android_build_config_url_base = "https://android-git.linaro.org/android-build-configs.git/plain" +template_url_prefix = "https://git.linaro.org/qa/test-plans.git/plain/android/" pat_ignore = re.compile(".*(" "-stderr" @@ -38,6 +37,8 @@ names_ignore = ["test-attachment", "test-skipped", "regression_4003_XTS", "regression_4003_NO_XTS", "subtests-fail-rate", "tradefed-test-run", "check-adb-connectivity", "3D-mean","Overall_Score-mean", "Memory_Bandwidth_Add_Multi_Core-mean", "Platform-mean", "Memory_Bandwidth-mean", "Memory_Bandwidth_Copy_Single_Core-mean", "Memory_Latency_64M_range-mean", "Memory_Bandwidth_Scale_Single_Core-mean", "Memory_Bandwidth_Copy_Multi_Core-mean", "Storage-mean", "Memory_Bandwidth_Triad_Single_Core-mean", "CoreMark-PRO_Base-mean", "Memory_Bandwidth_Add_Single_Core-mean", "CoreMark-PRO_Peak-mean", "Memory_Bandwidth_Scale_Multi_Core-mean", "Memory_Latency-mean", "Memory_Bandwidth_Triad_Multi_Core-mean", + "BOOTTIME_LOGCAT_ALL_COLLECT", "BOOTTIME_LOGCAT_EVENTS_COLLECT", "SERVICE_STARTED_ONCE", "BOOTTIME_ANALYZE", "BOOTTIME_DMESG_COLLECT", + "start_bootchart", "enabled_bootchart", ] job_status_dict = {0: "Submitted", @@ -48,8 +49,55 @@ job_status_dict = {0: "Submitted", } -def get_possible_builds(build_name="android-lcr-reference-hikey-o"): - url = 'https://snapshots.linaro.org/android/%s/' % build_name +user = "yongqin.liu" +token = {'staging': '', + 'production': '', + 'lkft': '' + } + + +lava_server_domain = { + 'staging': "staging.validation.linaro.org", + 'production': "validation.linaro.org", + 'lkft': "lkft.validation.linaro.org", + } + +lava_server_url = { + 'staging': "https://%s:%s@%s/RPC2/" % (user, token['staging'], lava_server_domain['staging']), + 'production': "https://%s:%s@%s/RPC2/" % (user, token['production'], lava_server_domain['production']), + 'lkft': "https://%s:%s@%s/RPC2/" % (user, token['lkft'], lava_server_domain['lkft']), + } + +lava_server_job_prefix = { + 'staging': "https://%s/scheduler/job" % lava_server_domain['staging'], + 'production': "https://%s/scheduler/job" % lava_server_domain['production'], + 'lkft': "https://%s/scheduler/job" % lava_server_domain['lkft'], + } + +lava_server_production = AuthenticatingServerProxy(lava_server_url['production'], auth_backend=KeyringAuthBackend()) +lava_server_lkft = AuthenticatingServerProxy(lava_server_url['lkft'], auth_backend=KeyringAuthBackend()) +lava_server_staging = AuthenticatingServerProxy(lava_server_url['staging'], auth_backend=KeyringAuthBackend()) +server = lava_server_staging + +build_configs = { + 'android-lcr-reference-hikey-o': { + 'lava_server': lava_server_staging, + 'img_ext': ".img.xz", + 'template_dir': "hikey-v2", + }, + 'android-lcr-reference-x15-o': { + 'lava_server': lava_server_production, + 'img_ext': ".img", + 'template_dir': "x15", + }, + } + +build_names = build_configs.keys() +build_names.sort() + +DEFAULT_BUILD_NAME = "android-lcr-reference-hikey-o" +def get_possible_builds(build_name=DEFAULT_BUILD_NAME): + url = '%s/%s/' % (android_snapshot_url_base, build_name) response = urllib2.urlopen(url) html = response.read() @@ -58,37 +106,47 @@ def get_possible_builds(build_name="android-lcr-reference-hikey-o"): all_builds.reverse() return all_builds -def get_possible_templates(build_name="android-lcr-reference-hikey-o"): - job_name_template_dir = { "android-lcr-reference-hikey-o": "hikey-v2" } - url = 'https://git.linaro.org/qa/test-plans.git/tree/android/%s' % job_name_template_dir[build_name] - response = urllib2.urlopen(url) +def get_possible_templates(build_name=DEFAULT_BUILD_NAME): + url = 'https://git.linaro.org/qa/test-plans.git/tree/android/%s' % build_configs[build_name]['template_dir'] + try: + response = urllib2.urlopen(url) + except urllib2.HTTPError: + return [] html = response.read() pat = re.compile("'>(?P<template_name>template\S*.yaml)</a>") template_names = pat.findall(html) + if len(template_names) == 0: + pat = re.compile("'>(?P<template_name>template\S*.json)</a>") + template_names = pat.findall(html) return sorted(template_names) -def get_possible_job_names(build_name="android-lcr-reference-hikey-o"): +def get_possible_job_names(build_name=DEFAULT_BUILD_NAME): templates = get_possible_templates(build_name) - url_prefix = "https://git.linaro.org/qa/test-plans.git/plain/android/hikey-v2/" pat = re.compile('job_name: "%%JOB_NAME%%-%%ANDROID_META_BUILD%%-(\S+)"') - job_names = [] + pat_json = re.compile('"job_name": "%%JOB_NAME%%-%%ANDROID_META_BUILD%%-(\S+)"') + job_name_template_name_hash = {} for template in templates: - url = '%s/%s' % (url_prefix, template) + url = '%s/%s/%s' % (template_url_prefix, build_configs[build_name]['template_dir'], template) response = urllib2.urlopen(url) html = response.read() - job_names.extend(pat.findall(html)) + job_names = pat.findall(html) + if len(job_names) == 0: + job_names = pat_json.findall(html) - return job_names + job_name_template_name_hash[job_names[0]] = template + sorted(job_name_template_name_hash.items()) + return job_name_template_name_hash -def get_jobs(build_name, build_no, server, job_name_list=[]): - jobs_to_be_checked = get_possible_job_names(build_name=build_name) + +def get_jobs(build_name, build_no, lava_server, job_name_list=[]): + jobs_to_be_checked = get_possible_job_names(build_name=build_name).keys() if job_name_list is None or len(job_name_list) == 0 or len(job_name_list) > 1: search_condition = "description__icontains__%s-%s" % (build_name, build_no) elif len(job_name_list) == 1: search_condition = "description__icontains__%s-%s-%s" % (build_name, build_no, job_name_list[0]) - jobs_from_lava = server.results.make_custom_query("testjob", search_condition) + jobs_from_lava = lava_server.results.make_custom_query("testjob", search_condition) jobs = { } for job in jobs_from_lava: job_id = job.get("id") @@ -135,15 +193,10 @@ def jobs_dict_to_sorted_tuple(dict_jobs={}): return jobs_tuple -def get_yaml_result(job_id, server): +def get_yaml_result(job_id, lava_server): tests_res = {} - # server = xmlrpclib.ServerProxy(SERVER_URL) try: - #job_id = server.scheduler.submit_job(job_yaml_str) - res = server.results.get_testjob_results_yaml(job_id) - #res = server.results.get_testjob_results_csv(job_id) - #print "results for job %s:" % str(job_id) - #print "%s" % str(yaml.load(res)) + res = lava_server.results.get_testjob_results_yaml(job_id) for test in yaml.load(res): if test.get("suite") == "lava": continue @@ -154,7 +207,6 @@ def get_yaml_result(job_id, server): continue if test.get("measurement") and test.get("measurement") == "None": test["measurement"] = None - ## print "%s" % str(test) tests_res[test.get("name")] = { "name": test.get("name"), "result": test.get("result"), "measurement": test.get("measurement"), @@ -171,21 +223,24 @@ def get_yaml_result(job_id, server): def resubmit_job(request): job_id = request.GET.get("job_id", "") + build_name = request.GET.get("build_name", "") if not job_id: return render(request, 'job-resubmit.html', { 'errors': True, } ) - new_job_id = server.scheduler.jobs.resubmit(job_id) + + lava_server = build_configs[build_name]['lava_server'] + new_job_id = lava_server.scheduler.jobs.resubmit(job_id) return render(request, 'job-resubmit.html', { 'job_id': new_job_id, - 'lava_server_job_prefix': lava_server_job_prefix, + 'lava_server_job_prefix': lava_server_job_prefix["staging"], } ) -def get_default_build_no( all_build_numbers=[], defaut_build_no=None): +def get_default_build_no(all_build_numbers=[], defaut_build_no=None): if len(all_build_numbers) > 0: return all_build_numbers[-1] elif defaut_build_no: @@ -194,9 +249,10 @@ def get_default_build_no( all_build_numbers=[], defaut_build_no=None): return 0 -def get_test_results_for_build(build_name, build_no, lava_server, job_name_list=[]): +def get_test_results_for_build(build_name, build_no, job_name_list=[]): jobs_failed = [] total_tests_res = {} + lava_server = build_configs[build_name]['lava_server'] jobs = jobs_dict_to_sorted_tuple(get_jobs(build_name, build_no, lava_server, job_name_list=job_name_list)) for job in jobs: @@ -206,7 +262,7 @@ def get_test_results_for_build(build_name, build_no, lava_server, job_name_list= for job_id, job_status in id_status_list: if job_status != job_status_dict[2]: continue - tests_res = get_yaml_result(job_id, server) + tests_res = get_yaml_result(job_id, lava_server) if len(tests_res) != 0: # use the last to replace the first # might be better to change to use the better one @@ -227,21 +283,20 @@ def get_test_results_for_build(build_name, build_no, lava_server, job_name_list= return (jobs_failed, total_tests_res) def jobs(request): - #build_name = "android-lcr-reference-hikey-o" - build_name = request.GET.get("build_name", "android-lcr-reference-hikey-o") + build_name = request.GET.get("build_name", DEFAULT_BUILD_NAME) all_build_numbers = get_possible_builds(build_name) build_no = request.GET.get("build_no", get_default_build_no(all_build_numbers)) - (jobs_failed, total_tests_res) = get_test_results_for_build(build_name, build_no, server) + (jobs_failed, total_tests_res) = get_test_results_for_build(build_name, build_no) - build_config_url = "http://android-git.linaro.org/android-build-configs.git/tree/%s" % (build_name.replace("android-", "")) + build_config_url = "%s/%s" % (android_build_config_url_base, build_name.replace("android-", "")) build_info = { "build_name": build_name, "build_no": build_no, - "ci_url_base": "https://ci.linaro.org/job", - "snapshot_url_base": "https://snapshots.linaro.org/android", + "ci_url_base": ci_job_url_base, + "snapshot_url_base": android_snapshot_url_base, "android_tag": "android-8.0.0_r4", "build_config_url": build_config_url, "build_numbers": get_possible_builds(build_name), @@ -250,7 +305,7 @@ def jobs(request): { 'jobs_failed': jobs_failed, 'jobs_result': sorted(total_tests_res.items()), - 'lava_server_job_prefix': lava_server_job_prefix, + 'lava_server_job_prefix': lava_server_job_prefix['staging'], 'build_info': build_info, } ) @@ -363,17 +418,16 @@ def compare_results_func(tests_result_1, tests_result_2): def compare(request): compare_results = {} - #form = CompareForm(request) if request.method == 'POST': - build_name = request.POST.get("build_name", "android-lcr-reference-hikey-o") + build_name = request.POST.get("build_name", DEFAULT_BUILD_NAME) all_build_numbers = get_possible_builds(build_name) build_no_1 = request.POST.get("build_no_1", "0") build_no_2 = request.POST.get("build_no_2", "0") - (failed_jobs_1, tests_result_1) = get_test_results_for_build(build_name, build_no_1, server) - (failed_jobs_2, tests_result_2) = get_test_results_for_build(build_name, build_no_2, server) + (failed_jobs_1, tests_result_1) = get_test_results_for_build(build_name, build_no_1) + (failed_jobs_2, tests_result_2) = get_test_results_for_build(build_name, build_no_2) compare_results = compare_results_func(tests_result_1, tests_result_2) else: - build_name = request.GET.get("build_name", "android-lcr-reference-hikey-o") + build_name = request.GET.get("build_name", DEFAULT_BUILD_NAME) all_build_numbers = get_possible_builds(build_name) build_no_1 = request.GET.get("build_no_1", "0") build_no_2 = request.GET.get("build_no_2", "0") @@ -388,15 +442,11 @@ def compare(request): build_info = { "build_name": build_name, - # "build_no_1": build_no_1, - # "build_no_2": build_no_2, - # "build_numbers": get_possible_builds(build_name), } return render(request, 'result-comparison.html', { "build_info": build_info, - 'lava_server_job_prefix': lava_server_job_prefix, - #'form': CompareForm(), + 'lava_server_job_prefix': lava_server_job_prefix['staging'], 'form': form, 'compare_results': compare_results, } @@ -407,7 +457,7 @@ def get_test_results_for_job(build_name, lava_server, jobs=[]): all_build_numbers = get_possible_builds(build_name) checklist_results = {} for build_no in all_build_numbers: - (failed_jobs, total_test_res) = get_test_results_for_build(build_name, build_no, server, job_name_list=jobs) + (failed_jobs, total_test_res) = get_test_results_for_build(build_name, build_no, job_name_list=jobs) if len(total_test_res) > 0: for job_name in jobs: checklist_for_one_job = checklist_results.get(job_name) @@ -436,14 +486,18 @@ def checklist(request): all_build_numbers= [] #form = CompareForm(request) if request.method == 'POST': - build_name = request.POST.get("build_name", "android-lcr-reference-hikey-o") + build_name = request.POST.get("build_name", DEFAULT_BUILD_NAME) job_name = request.POST.get("job_name", "basic") - (all_build_numbers, checklist_results) = get_test_results_for_job(build_name, server, jobs=[job_name]) + lava_server = build_configs[build_name]['lava_server'] + (all_build_numbers, checklist_results) = get_test_results_for_job(build_name, lava_server, jobs=[job_name]) + #(all_build_numbers, checklist_results) = get_test_results_for_job(build_name, lava_server, jobs=[]) else: - build_name = request.GET.get("build_name", "android-lcr-reference-hikey-o") + build_name = request.GET.get("build_name", DEFAULT_BUILD_NAME) job_name = request.GET.get("job_name", "basic") - jobs_to_be_checked = get_possible_job_names(build_name=build_name) + job_template = get_possible_job_names(build_name=build_name) + jobs_to_be_checked = job_template.keys() + jobs_to_be_checked.sort() form = { "build_name": build_name, @@ -457,13 +511,142 @@ def checklist(request): return render(request, 'checklist.html', { "build_info": build_info, - 'lava_server_job_prefix': lava_server_job_prefix, + 'lava_server_job_prefix': lava_server_job_prefix['staging'], 'form': form, 'checklist_results': checklist_results, 'all_build_numbers': all_build_numbers, } ) + + +class JobSubmissionForm(forms.Form): + build_name = forms.ChoiceField(label='Build Name') + build_no = forms.ChoiceField(label='Build No.') + lava_instance= forms.ChoiceField(label='LAVA Instance', + choices=( + ("staging", "staging"), + ("production", "production"), + ("lkft", "lkft"), + )) + jobs = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple) + + +def submit_lava_jobs(request): + if request.method == 'POST': + build_name = request.POST.get("build_name") + job_template = get_possible_job_names(build_name=build_name) + jobs = job_template.keys() + jobs.sort() + all_build_numbers = get_possible_builds(build_name) + all_build_numbers.reverse() + + form = JobSubmissionForm(request.POST) + form.fields["build_name"].choices = zip(build_names, build_names) + form.fields["build_no"].choices = zip(all_build_numbers, all_build_numbers) + form.fields["jobs"].choices = zip(jobs, jobs) + if form.is_valid(): + cd = form.cleaned_data + build_name = cd['build_name'] + build_no = cd['build_no'] + jobs = cd['jobs'] + lava_instance = cd['lava_instance'] + lava_server = build_configs[build_name]['lava_server'] + + submit_result = [] + for job_name in jobs: + template = job_template[job_name] + url = '%s/%s/%s' % (template_url_prefix, build_configs[build_name]['template_dir'], template) + response = urllib2.urlopen(url) + html = response.read() + + meta_url = "%s/%s/%s" % (ci_job_url_base, build_name, build_no) + download_url = "%s/%s/%s" % (android_snapshot_url_base, build_name, build_no) + img_ext = build_configs[build_name]['img_ext'] + job_definition = html.replace("%%JOB_NAME%%", build_name)\ + .replace("%%ANDROID_META_BUILD%%", build_no)\ + .replace("%%ANDROID_META_NAME%%", build_name)\ + .replace("%%ANDROID_META_URL%%", meta_url)\ + .replace("%%DOWNLOAD_URL%%", download_url)\ + .replace("%%ANDROID_BOOT%%", "%s/boot%s" % (download_url, img_ext))\ + .replace("%%ANDROID_SYSTEM%%", "%s/system%s" % (download_url, img_ext))\ + .replace("%%ANDROID_DATA%%", "%s/userdata%s" % (download_url, img_ext))\ + .replace("%%ANDROID_CACHE%%", "%s/cache%s" % (download_url, img_ext)) + try: + job_id = lava_server.scheduler.submit_job(job_definition) + submit_result.append({ + "job_name": job_name, + "template": template, + "template_url": url, + "lava_server_job_prefix": lava_server_job_prefix[lava_instance], + "job_id": job_id, + }) + except xmlrpclib.Fault as e: + submit_result.append({ + "job_name": job_name, + "template": template, + "template_url": url, + "lava_server_job_prefix": lava_server_job_prefix[lava_instance], + "job_id": None, + "error": str(e), + }) + return render(request, 'submit_jobs.html', + { + "submit_result": submit_result, + }) + + else: + # not possible here since all are selectable elements + return render(request, 'submit_jobs.html', + { + "form": form, + }) + #pass + else: + build_name = request.GET.get("build_name", DEFAULT_BUILD_NAME) + jobs = get_possible_job_names(build_name=build_name).keys() + jobs.sort() + all_build_numbers = get_possible_builds(build_name) + all_build_numbers.reverse() + defaut_build_no = all_build_numbers[0] + defaut_build_no = request.POST.get("build_no", defaut_build_no) + form_initial = {"build_name": build_name, + "build_no": defaut_build_no, + } + form = JobSubmissionForm(initial=form_initial) + form.fields["build_name"].choices = zip(build_names, build_names) + form.fields["build_no"].choices = zip(all_build_numbers, all_build_numbers) + form.fields["jobs"].choices = zip(jobs, jobs) + + return render(request, 'submit_jobs.html', + { + "form": form, + }) + +def index(request): + builds = {} + for build_name in build_names: + builds[build_name] = { + "build_name": build_name, + "android_version": "android-8.0.0_r4", + "kernel_version": "4.9", + "ci_link": "%s/%s" % (ci_job_url_base, build_name), + "android_build_config_link": "%s/%s" % (android_build_config_url_base, build_name.replace("android-", "")), + "snapshot_url": '%s/%s/' % (android_snapshot_url_base, build_name), + "job_status": "--", + } + + builds.items().sort() + return render(request, 'index.html', + { + "builds": builds, + }) + if __name__ == "__main__": - (jobs_failed, total_tests_res) = get_test_results_for_build("android-lcr-reference-hikey-o", "11", server) - print "%d/%d" % (len(jobs_failed), len(total_tests_res)) + build_name = "android-lcr-reference-x15-o" + job_template = get_possible_job_names(build_name=build_name) + print str(job_template) +# (all_build_numbers, checklist_results) = get_test_results_for_job(build_name, server, jobs=[]) +# for job_name, job_result in checklist_results.items(): for test_name, test_result in job_result.items(): +# print str(checklist_results) + |