From 1ebea175521284bb7931d2d16140b5cecbed12d1 Mon Sep 17 00:00:00 2001 From: Yongqin Liu Date: Tue, 25 Feb 2020 17:24:49 +0800 Subject: lkft: cache more kernel change result and sort on the page Signed-off-by: Yongqin Liu --- lcr/qa_report.py | 24 ++++++++- lkft/management/commands/lkftreport.py | 26 ++++++++- lkft/migrations/0003_auto_20200225_0907.py | 85 ++++++++++++++++++++++++++++++ lkft/models.py | 21 ++++++-- lkft/views.py | 29 +++++----- 5 files changed, 162 insertions(+), 23 deletions(-) create mode 100644 lkft/migrations/0003_auto_20200225_0907.py 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 -- cgit v1.2.3