summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYongqin Liu <yongqin.liu@linaro.org>2020-02-25 17:24:49 +0800
committerYongqin Liu <yongqin.liu@linaro.org>2020-02-25 17:24:49 +0800
commit1ebea175521284bb7931d2d16140b5cecbed12d1 (patch)
tree652931c248f0cafa46481a1e8f6f6941cddeb950
parent25d5d6deb5d9ec7f1678214e40c567ebb1dc83a4 (diff)
lkft: cache more kernel change result and sort on the page
Signed-off-by: Yongqin Liu <yongqin.liu@linaro.org>
-rw-r--r--lcr/qa_report.py24
-rw-r--r--lkft/management/commands/lkftreport.py26
-rw-r--r--lkft/migrations/0003_auto_20200225_0907.py85
-rw-r--r--lkft/models.py21
-rw-r--r--lkft/views.py29
5 files changed, 162 insertions, 23 deletions
diff --git a/lcr/qa_report.py b/lcr/qa_report.py
index cb9ff53..13e6652 100644
--- a/lcr/qa_report.py
+++ b/lcr/qa_report.py
@@ -260,4 +260,26 @@ class QAReportApi(RESTFullApi):
import datetime
from django.utils import timezone
- return datetime.datetime.fromtimestamp(timestamp_in_secs, tz=timezone.utc) \ No newline at end of file
+ return datetime.datetime.fromtimestamp(timestamp_in_secs, tz=timezone.utc)
+
+
+class TestNumbers():
+ number_passed = 0
+ number_failed = 0
+ number_total = 0
+ modules_done = 0
+ modules_total = 0
+
+ def addWithHash(self, numbers_of_result):
+ self.number_passed = self.number_passed + numbers_of_result.get('number_passed')
+ self.number_failed = self.number_failed + numbers_of_result.get('number_failed')
+ self.number_total = self.number_total + numbers_of_result.get('number_total')
+ self.modules_done = self.modules_done + numbers_of_result.get('modules_done')
+ self.modules_total = self.modules_total + numbers_of_result.get('modules_total')
+
+ def addWithTestNumbers(self, testNumbers):
+ self.number_passed = self.number_passed + testNumbers.number_passed
+ self.number_failed = self.number_failed + testNumbers.number_failed
+ self.number_total = self.number_total + testNumbers.number_total
+ self.modules_done = self.modules_done + testNumbers.modules_done
+ self.modules_total = self.modules_total + testNumbers.modules_total \ No newline at end of file
diff --git a/lkft/management/commands/lkftreport.py b/lkft/management/commands/lkftreport.py
index 9da2381..4def12e 100644
--- a/lkft/management/commands/lkftreport.py
+++ b/lkft/management/commands/lkftreport.py
@@ -84,6 +84,9 @@ class Command(BaseCommand):
kernel_changes = KernelChange.objects_needs_report.all()
for kernel_change in kernel_changes:
lkft_build_configs = []
+
+ test_numbers = qa_report.TestNumbers()
+
trigger_url = jenkins_api.get_job_url(name=kernel_change.trigger_name, number=kernel_change.trigger_number)
trigger_build = jenkins_api.get_build_details_with_full_url(build_url=trigger_url)
trigger_build['start_timestamp'] = qa_report_api.get_aware_datetime_from_timestamp(int(trigger_build['timestamp'])/1000)
@@ -214,8 +217,12 @@ class Command(BaseCommand):
kernel_change_finished_timestamp = build_status['last_fetched_timestamp']
target_qareport_build['duration'] = build_status['last_fetched_timestamp'] - target_qareport_build['created_at']
- target_qareport_build['numbers_of_result'] = get_test_result_number_for_build(target_qareport_build, jobs)
+ numbers_of_result = get_test_result_number_for_build(target_qareport_build, jobs)
+ target_qareport_build['numbers_of_result'] = numbers_of_result
target_qareport_build['qa_report_project'] = target_qareport_project
+
+ test_numbers.addWithHash(numbers_of_result)
+
final_jobs = []
resubmitted_or_duplicated_jobs = []
for job in jobs:
@@ -300,7 +307,9 @@ class Command(BaseCommand):
'queued_ci_builds': queued_ci_builds,
'diabled_ci_builds': diabled_ci_builds,
'not_reported_ci_builds': not_reported_ci_builds,
+ 'start_timestamp': trigger_build.get('start_timestamp'),
'finished_timestamp': kernel_change_finished_timestamp,
+ 'test_numbers': test_numbers,
}
total_reports.append(kernel_change_report)
@@ -311,8 +320,23 @@ class Command(BaseCommand):
if status != 'ALL_COMPLETED':
continue
+ trigger_build = kernel_change_report.get('trigger_build')
+ finished_timestamp = kernel_change_report.get('finished_timestamp')
+ start_timestamp = kernel_change_report.get('start_timestamp')
+ test_numbers = kernel_change_report.get('test_numbers')
+
kernel_change = kernel_change_report.get('kernel_change')
kernel_change.reported = True
+ kernel_change.result = status
+ kernel_change.timestamp = start_timestamp
+ kernel_change.duration = finished_timestamp - start_timestamp
+
+ kernel_change.number_passed = test_numbers.number_passed
+ kernel_change.number_failed = test_numbers.number_failed
+ kernel_change.number_total = test_numbers.number_total
+ kernel_change.modules_done = test_numbers.modules_done
+ kernel_change.modules_total = test_numbers.modules_total
+
kernel_change.save()
trigger_build = kernel_change_report.get('trigger_build')
diff --git a/lkft/migrations/0003_auto_20200225_0907.py b/lkft/migrations/0003_auto_20200225_0907.py
new file mode 100644
index 0000000..5552e76
--- /dev/null
+++ b/lkft/migrations/0003_auto_20200225_0907.py
@@ -0,0 +1,85 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.5 on 2020-02-25 09:07
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('lkft', '0002_auto_20200221_0212'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='kernelchange',
+ name='duration',
+ field=models.IntegerField(default=0),
+ ),
+ migrations.AddField(
+ model_name='kernelchange',
+ name='modules_done',
+ field=models.IntegerField(default=0),
+ ),
+ migrations.AddField(
+ model_name='kernelchange',
+ name='modules_total',
+ field=models.IntegerField(default=0),
+ ),
+ migrations.AddField(
+ model_name='kernelchange',
+ name='number_failed',
+ field=models.IntegerField(default=0),
+ ),
+ migrations.AddField(
+ model_name='kernelchange',
+ name='number_passed',
+ field=models.IntegerField(default=0),
+ ),
+ migrations.AddField(
+ model_name='kernelchange',
+ name='number_total',
+ field=models.IntegerField(default=0),
+ ),
+ migrations.AddField(
+ model_name='kernelchange',
+ name='result',
+ field=models.CharField(default='NOINFO', max_length=100, null=True),
+ ),
+ migrations.AddField(
+ model_name='kernelchange',
+ name='timestamp',
+ field=models.DateTimeField(null=True),
+ ),
+ migrations.AlterField(
+ model_name='cibuild',
+ name='result',
+ field=models.CharField(default='NOINFO', max_length=100, null=True),
+ ),
+ migrations.AlterField(
+ model_name='reportbuild',
+ name='modules_done',
+ field=models.IntegerField(default=0),
+ ),
+ migrations.AlterField(
+ model_name='reportbuild',
+ name='modules_total',
+ field=models.IntegerField(default=0),
+ ),
+ migrations.AlterField(
+ model_name='reportbuild',
+ name='number_failed',
+ field=models.IntegerField(default=0),
+ ),
+ migrations.AlterField(
+ model_name='reportbuild',
+ name='number_passed',
+ field=models.IntegerField(default=0),
+ ),
+ migrations.AlterField(
+ model_name='reportbuild',
+ name='number_total',
+ field=models.IntegerField(default=0),
+ ),
+ ]
diff --git a/lkft/models.py b/lkft/models.py
index 3cb1b4f..67665be 100644
--- a/lkft/models.py
+++ b/lkft/models.py
@@ -14,6 +14,17 @@ class KernelChange(models.Model):
trigger_name = models.CharField(max_length=255)
trigger_number = models.IntegerField()
+ result = models.CharField(max_length=100, null=True, default="NOINFO")
+ timestamp = models.DateTimeField(null=True)
+ duration = models.IntegerField(default=0) # total_seconds
+
+ number_passed = models.IntegerField(default=0)
+ number_failed = models.IntegerField(default=0)
+ number_total = models.IntegerField(default=0)
+ modules_done = models.IntegerField(default=0)
+ modules_total = models.IntegerField(default=0)
+
+
def __str__(self):
return "%s-%s" % (self.branch, self.describe)
@@ -59,11 +70,11 @@ class ReportBuild(models.Model):
ci_build = models.ForeignKey(CiBuild, on_delete=None, related_name="ci_build")
ci_trigger_build = models.ForeignKey(CiBuild, on_delete=None, related_name='trigger_build')
- number_passed = models.IntegerField()
- number_failed = models.IntegerField()
- number_total = models.IntegerField()
- modules_done = models.IntegerField()
- modules_total = models.IntegerField()
+ number_passed = models.IntegerField(default=0)
+ number_failed = models.IntegerField(default=0)
+ number_total = models.IntegerField(default=0)
+ modules_done = models.IntegerField(default=0)
+ modules_total = models.IntegerField(default=0)
# the time the trigger build was started
started_at = models.DateTimeField(null=True)
diff --git a/lkft/views.py b/lkft/views.py
index 47da053..d562dff 100644
--- a/lkft/views.py
+++ b/lkft/views.py
@@ -1132,11 +1132,7 @@ def list_kernel_changes(request):
trigger_build['start_timestamp'] = qa_report_api.get_aware_datetime_from_timestamp(int(trigger_build['timestamp'])/1000)
kernel_change_finished_timestamp = trigger_build['start_timestamp']
- number_passed = 0
- number_failed = 0
- number_total = 0
- modules_done = 0
- modules_total = 0
+ test_numbers = qa_report.TestNumbers()
kernel_change_status = "TRIGGER_BUILD_COMPLETED"
@@ -1255,11 +1251,7 @@ def list_kernel_changes(request):
kernel_change_finished_timestamp = build_status['last_fetched_timestamp']
numbers_of_result = get_test_result_number_for_build(target_qareport_build, jobs)
- number_passed = number_passed + numbers_of_result.get('number_passed')
- number_failed = number_failed + numbers_of_result.get('number_failed')
- number_total = number_total + numbers_of_result.get('number_total')
- modules_done = modules_done + numbers_of_result.get('modules_done')
- modules_total = modules_total + numbers_of_result.get('modules_total')
+ test_numbers.addWithHash(numbers_of_result)
has_error = False
error_dict = {}
@@ -1287,17 +1279,22 @@ def list_kernel_changes(request):
kernelchange['finished_timestamp'] = kernel_change_finished_timestamp
kernelchange['duration'] = kernelchange['finished_timestamp'] - kernelchange['start_timestamp']
kernelchange['status'] = kernel_change_status
- kernelchange['number_passed'] = number_passed
- kernelchange['number_failed'] = number_failed
- kernelchange['number_total'] = number_total
- kernelchange['modules_done'] = modules_done
- kernelchange['modules_total'] = modules_total
+ kernelchange['number_passed'] = test_numbers.number_passed
+ kernelchange['number_failed'] = test_numbers.number_failed
+ kernelchange['number_total'] = test_numbers.number_total
+ kernelchange['modules_done'] = test_numbers.modules_done
+ kernelchange['modules_total'] = test_numbers.modules_total
kernelchanges.append(kernelchange)
+ sorted_kernelchanges = sort()
+ def get_cmp_value(item):
+ return "%s-%s" % (item.get('branch'), item.get("describe"))
+
+ sorted_kernelchanges = sorted(kernelchanges, key=get_cmp_value)
return render(request, 'lkft-kernelchanges.html',
{
- "kernelchanges": kernelchanges,
+ "kernelchanges": sorted_kernelchanges,
}
) \ No newline at end of file