summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYongqin Liu <yongqin.liu@linaro.org>2017-09-19 00:24:45 +0800
committerYongqin Liu <yongqin.liu@linaro.org>2017-09-19 00:25:26 +0800
commitc631b8c31d6b86609f4512a512db7216266c674b (patch)
treeaad76a71f092685de05eab0b822c226d171fd68b
parent5f914e8972dc533022c5f101abef195ae293de5c (diff)
add feature for checklist
only one job could be selected though Signed-off-by: Yongqin Liu <yongqin.liu@linaro.org>
-rw-r--r--report/templates/checklist.html55
-rw-r--r--report/templates/jobs.html7
-rw-r--r--report/urls.py1
-rw-r--r--report/views.py170
4 files changed, 166 insertions, 67 deletions
diff --git a/report/templates/checklist.html b/report/templates/checklist.html
new file mode 100644
index 0000000..e2cdbc2
--- /dev/null
+++ b/report/templates/checklist.html
@@ -0,0 +1,55 @@
+<div align="center">
+<form action="/report/checklist/" method="post">
+ {% csrf_token %}
+ <input type="text" id="build_name" value="{{ build_info.build_name }}" disabled="true"/>
+ <select name="job_name">
+ {% for name in form.possible_jobs %}
+ {% ifequal name form.job_name %}
+ <option value="{{ name }}" selected="true"> {{ name }} </option>
+ {% else %}
+ <option value="{{ name }}"> {{ name }} </option>
+ {% endifequal %}
+ {% endfor %}
+ </select>
+
+ <input type="submit" id="submit_btn" value="Display Checklist Result" />
+</form>
+</div>
+{% if checklist_results %}
+<div align="center">
+<table border="2">
+ <tr>
+ <th>Job Name</th>
+ <th>TestCase Name</th>
+ {% for build_no in all_build_numbers %}
+ <th>#{{ build_no }}</th>
+ {% endfor %}
+ </tr>
+ {% for job_name, job_checklist in checklist_results.items %}
+ {% for test_name, testcase_result in job_checklist.items %}
+ {% with testcase_result.builds_res as testcase_builds_res %}
+ <tr>
+ <td>{{ job_name }}</td>
+ <td>{{ test_name }}</td>
+ {% for build_no in all_build_numbers %}
+ {% if build_no in testcase_builds_res %}
+ {% for testcase_build_no, testcase_res in testcase_builds_res.items %}
+ {% ifequal build_no testcase_build_no %}
+ {% if testcase_res.measurement %}
+ <td>{{ testcase_res.measurement|floatformat:-2 }} </td>
+ {% else %}
+ <td>{{ testcase_res.result }} </td>
+ {% endif %}
+ {% endifequal %}
+ {% endfor %}
+ {% else %}
+ <td> -- </td>
+ {% endif %}
+ {% endfor %}
+ </tr>
+ {% endwith %}
+ {% endfor %}
+ {% endfor %}
+</table>
+</div>
+{% endif %}
diff --git a/report/templates/jobs.html b/report/templates/jobs.html
index c535ec1..2806243 100644
--- a/report/templates/jobs.html
+++ b/report/templates/jobs.html
@@ -2,6 +2,13 @@
<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 %}
diff --git a/report/urls.py b/report/urls.py
index 22829c7..7b28174 100644
--- a/report/urls.py
+++ b/report/urls.py
@@ -6,5 +6,6 @@ urlpatterns = [
url(r'^$', 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'),
]
diff --git a/report/views.py b/report/views.py
index 6aa49b9..388ed5e 100644
--- a/report/views.py
+++ b/report/views.py
@@ -58,67 +58,58 @@ 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)
+ html = response.read()
-jobs_checked = [
- "andebenchpro2015",
- "antutu6",
- "basic",
- "benchmarkpi",
- "boottime",
- "caffeinemark",
- "cf-bench",
- "cts-focused1-v7a",
- "cts-focused1-v8a",
- "cts-focused2-v7a",
- "cts-focused2-v8a",
- "cts-media2-v7a",
- "cts-media2-v8a",
- "cts-media-v7a",
- "cts-media-v8a",
- "cts-opengl-v7a",
- "cts-opengl-v8a",
- "cts-part1-v7a",
- "cts-part1-v8a",
- "cts-part2-v7a",
- "cts-part2-v8a",
- "cts-part3-v7a",
- "cts-part3-v8a",
- "cts-part4-v7a",
- "cts-part4-v8a",
- "cts-part5-v7a",
- "cts-part5-v8a",
- "gearses2eclair",
- "geekbench3",
- "glbenchmark25",
- "javawhetstone",
- "jbench",
- "linpack",
- "optee",
- "quadrantpro",
- "rl-sqlite",
- "scimark",
- "vellamo3",
- "weekly",
- ]
-def get_jobs(build_name, build_no, server):
- search_condition = "description__icontains__%s-%s" % (build_name, build_no)
+ pat = re.compile("'>(?P<template_name>template\S*.yaml)</a>")
+ template_names = pat.findall(html)
+ return sorted(template_names)
+
+def get_possible_job_names(build_name="android-lcr-reference-hikey-o"):
+ 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 = []
+ for template in templates:
+ url = '%s/%s' % (url_prefix, template)
+ response = urllib2.urlopen(url)
+ html = response.read()
+ job_names.extend(pat.findall(html))
+
+ return job_names
+
+
+def get_jobs(build_name, build_no, server, job_name_list=[]):
+ jobs_to_be_checked = get_possible_job_names(build_name=build_name)
+ 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 = { }
for job in jobs_from_lava:
job_id = job.get("id")
job_description = job.get("description")
job_status = job.get("status")
- job_name = job_description.replace("%s-%s-" % (build_name, build_no), "")
+ if job_name_list is None or len(job_name_list) == 0 or len(job_name_list) > 1:
+ local_job_name = job_description.replace("%s-%s-" % (build_name, build_no), "")
- if job_name not in jobs_checked:
- continue
+ if local_job_name not in jobs_to_be_checked:
+ continue
+ if len(job_name_list) > 1 and local_job_name not in job_name_list:
+ continue
+ else:
+ local_job_name = job_name_list[0]
- job_exist = jobs.get(job_name)
+ job_exist = jobs.get(local_job_name)
if job_exist is not None:
job_exist.get("id_list").append(job_id)
job_exist.get("status_list").append(job_status)
else:
- jobs[job_name] = {
+ jobs[local_job_name] = {
"id_list": [job_id],
"status_list": [job_status],
}
@@ -203,11 +194,11 @@ 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):
+def get_test_results_for_build(build_name, build_no, lava_server, job_name_list=[]):
jobs_failed = []
total_tests_res = {}
- jobs = jobs_dict_to_sorted_tuple(get_jobs(build_name, build_no, 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:
id_status_list = job.get("id_status_list")
job_total_res = {}
@@ -230,6 +221,7 @@ def get_test_results_for_build(build_name, build_no, lava_server):
"job_name": job.get("name"),
"id_status_list": job.get("id_status_list"),
"result_job_id_status": result_job_id_status,
+ "build_no": build_no,
"results": job_total_res}
return (jobs_failed, total_tests_res)
@@ -263,11 +255,6 @@ def jobs(request):
}
)
-class CompareForm(forms.Form):
- build_name = forms.CharField(widget=forms.HiddenInput())
- build_no_1 = forms.ChoiceField(label="", choices=[])
- build_no_2 = forms.ChoiceField(label="", choices=[])
-
def compare_results_func(tests_result_1, tests_result_2):
compare_results = {}
@@ -382,12 +369,6 @@ def compare(request):
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")
- #if form.is_valid():
- #form.build_name = forms.CharField(widget=forms.HiddenInput()), initial=build_name)
- #form.build_no_1 = forms.ChoiceField(label="", choices=[(build_no, build_no) for build_no in all_build_numbers], initial=build_no_1)
- #form.fields['build_no_1'].choices = [(build_no, build_no) for build_no in all_build_numbers]
- #form.fields['build_no_2'].choices = [(build_no, build_no) for build_no in all_build_numbers]
- #form.build_no_2 = forms.ChoiceField(label="", choices=[(build_no, build_no) for build_no in all_build_numbers], initial=build_no_2)
(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)
compare_results = compare_results_func(tests_result_1, tests_result_2)
@@ -396,12 +377,6 @@ def compare(request):
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")
- # form = CompareForm(request)
- #form.build_name = forms.CharField(widget=forms.HiddenInput(), initial=build_name)
- #form.build_no_1 = forms.ChoiceField(label="", choices=[(build_no, build_no) for build_no in get_possible_builds()])
- #form.build_no_2 = forms.ChoiceField(label="", choices=[(build_no, build_no) for build_no in get_possible_builds()])
- #form.fields['build_no_1'].choices = [(build_no, build_no) for build_no in all_build_numbers]
- #form.fields['build_no_2'].choices = [(build_no, build_no) for build_no in all_build_numbers]
form = {
@@ -428,6 +403,67 @@ def compare(request):
)
+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)
+ if len(total_test_res) > 0:
+ for job_name in jobs:
+ checklist_for_one_job = checklist_results.get(job_name)
+ if checklist_for_one_job is None:
+ checklist_for_one_job = {}
+ checklist_results[job_name] = checklist_for_one_job
+
+ for testcase, testcase_result in total_test_res.get(job_name).get("results").items():
+ if checklist_for_one_job.get(testcase):
+ builds_res = checklist_for_one_job[testcase]["builds_res"]
+ builds_res.update({ build_no: testcase_result})
+ else:
+ builds_res = {build_no: testcase_result}
+ checklist_for_one_job[testcase] = { "name": testcase,
+ "builds_res": builds_res,
+ "job_name": job_name,
+ }
+
+ checklist_results.items().sort()
+ for job_name, checklist_for_one_job in checklist_results.items():
+ checklist_for_one_job.items().sort()
+ return (all_build_numbers, checklist_results)
+
+def checklist(request):
+ checklist_results = {}
+ all_build_numbers= []
+ #form = CompareForm(request)
+ if request.method == 'POST':
+ build_name = request.POST.get("build_name", "android-lcr-reference-hikey-o")
+ job_name = request.POST.get("job_name", "basic")
+ (all_build_numbers, checklist_results) = get_test_results_for_job(build_name, server, jobs=[job_name])
+ else:
+ build_name = request.GET.get("build_name", "android-lcr-reference-hikey-o")
+ job_name = request.GET.get("job_name", "basic")
+
+ jobs_to_be_checked = get_possible_job_names(build_name=build_name)
+
+ form = {
+ "build_name": build_name,
+ "job_name": job_name,
+ "possible_jobs": jobs_to_be_checked,
+ }
+
+ build_info = {
+ "build_name": build_name,
+ }
+ return render(request, 'checklist.html',
+ {
+ "build_info": build_info,
+ 'lava_server_job_prefix': lava_server_job_prefix,
+ 'form': form,
+ 'checklist_results': checklist_results,
+ 'all_build_numbers': all_build_numbers,
+ }
+ )
+
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))