summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYongqin Liu <yongqin.liu@linaro.org>2017-09-22 00:36:34 +0800
committerYongqin Liu <yongqin.liu@linaro.org>2017-09-22 00:36:34 +0800
commit1914543b09c249ecce569dbaafeda79dceba6414 (patch)
treedf08dbb78f3227bab9f067655d7f7e00f552ca99
parentc631b8c31d6b86609f4512a512db7216266c674b (diff)
add support for jobs submission
Signed-off-by: Yongqin Liu <yongqin.liu@linaro.org>
-rw-r--r--report/templates/index.html86
-rw-r--r--report/templates/jobs.html14
-rw-r--r--report/templates/submit_jobs.html34
-rw-r--r--report/urls.py5
-rw-r--r--report/views.py299
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)
+