summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYongqin Liu <yongqin.liu@linaro.org>2020-03-02 15:34:43 +0800
committerYongqin Liu <yongqin.liu@linaro.org>2020-03-02 15:34:43 +0800
commitefa1c7d8dfabfdbcaf46090f5b33a3cf2fe881ef (patch)
tree3ea474651e28a45142aff3acc118545f9b720b70
parentbc07441c78b003d9589fca69fee7bbbcae4c89f3 (diff)
lkft: update for the database updating policy
so that we could update the data as much as possible Signed-off-by: Yongqin Liu <yongqin.liu@linaro.org>
-rw-r--r--lcr/qa_report.py13
-rw-r--r--lkft/management/commands/lkftreport.py69
-rw-r--r--lkft/templates/lkft-describe.html2
3 files changed, 48 insertions, 36 deletions
diff --git a/lcr/qa_report.py b/lcr/qa_report.py
index 13e6652..5bb0f43 100644
--- a/lcr/qa_report.py
+++ b/lcr/qa_report.py
@@ -14,6 +14,15 @@ class DotDict(dict):
__setattr__ = dict.__setitem__
__delattr__ = dict.__delitem__
+class UrlNotFoundException(Exception):
+ '''
+ Specific Expection for UrlNotFound Error
+ '''
+ response = None
+
+ def __init__(self, response):
+ self.response = response
+
class RESTFullApi():
def __init__(self, domain, api_token):
@@ -36,7 +45,9 @@ class RESTFullApi():
if returnResponse:
return r
- if not r.ok:
+ if not r.ok and r.status_code == 404:
+ raise UrlNotFoundException(r)
+ elif not r.ok:
raise Exception(r.url, r.reason, r.status_code)
if r.content:
diff --git a/lkft/management/commands/lkftreport.py b/lkft/management/commands/lkftreport.py
index da0f5d1..886f25e 100644
--- a/lkft/management/commands/lkftreport.py
+++ b/lkft/management/commands/lkftreport.py
@@ -93,7 +93,12 @@ class Command(BaseCommand):
trigger_build['duration'] = datetime.timedelta(milliseconds=trigger_build['duration'])
trigger_build['name'] = kernel_change.trigger_name
trigger_build['kernel_change'] = kernel_change
- kernel_change_finished_timestamp = trigger_build['start_timestamp'] + trigger_build['duration']
+ if trigger_build.get('building'):
+ trigger_build['status'] = 'INPROGRESS'
+ kernel_change_finished_timestamp = trigger_build['start_timestamp']
+ else:
+ trigger_build['status'] = trigger_build.get('result') # null or SUCCESS, FAILURE, ABORTED
+ kernel_change_finished_timestamp = trigger_build['start_timestamp'] + trigger_build['duration']
kernel_change_status = "TRIGGER_BUILD_COMPLETED"
@@ -317,55 +322,51 @@ class Command(BaseCommand):
## cache to database
for kernel_change_report in total_reports:
status = kernel_change_report.get('kernel_change_status')
- if status != 'ALL_COMPLETED':
- continue
-
trigger_build = kernel_change_report.get('trigger_build')
+
+ # Try to cache Trigger build information to database
+ try:
+ trigger_dbci_build = CiBuild.objects.get(name=trigger_build.get('name'), number=trigger_build.get('number'))
+ trigger_dbci_build.duration = trigger_build.get('duration').total_seconds()
+ trigger_dbci_build.timestamp = trigger_build.get('start_timestamp')
+ trigger_dbci_build.result = trigger_build.get('status')
+ trigger_dbci_build.save()
+ except CiBuild.DoesNotExist:
+ CiBuild.objects.create(name=trigger_build.get('name'),
+ number=trigger_build.get('number'),
+ kernel_change=kernel_change,
+ duration=trigger_build.get('duration').total_seconds(),
+ timestamp=trigger_build.get('start_timestamp'),
+ result=trigger_build.get('status'))
+
+
+ # Try to cache CI build information to database
+ jenkins_ci_builds = kernel_change_report.get('jenkins_ci_builds')
+ for ci_build in jenkins_ci_builds:
+ CiBuild.objects.filter(name=ci_build.get('name'),
+ number=ci_build.get('number')
+ ).update(duration=ci_build.get('duration').total_seconds(),
+ timestamp=ci_build.get('start_timestamp'),
+ result=ci_build.get('status'))
+
+ # Try to cache kernel change result informtion to database
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.reported = (status == 'ALL_COMPLETED')
kernel_change.result = status
kernel_change.timestamp = start_timestamp
kernel_change.duration = (finished_timestamp - start_timestamp).total_seconds()
-
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')
- if not trigger_build.get('building'):
- # should always be here
- try:
- trigger_dbci_build = CiBuild.objects.get(name=trigger_build.get('name'), number=trigger_build.get('number'))
- trigger_dbci_build.duration = trigger_build.get('duration').total_seconds()
- trigger_dbci_build.timestamp = trigger_build.get('start_timestamp')
- trigger_dbci_build.result = trigger_build.get('result')
- except CiBuild.DoesNotExist:
- CiBuild.objects.create(name=trigger_build.get('name'),
- number=trigger_build.get('number'),
- kernel_change=kernel_change,
- duration=trigger_build.get('duration').total_seconds(),
- timestamp=trigger_build.get('start_timestamp'),
- result=trigger_build.get('result'))
-
- jenkins_ci_builds = kernel_change_report.get('jenkins_ci_builds')
- for ci_build in jenkins_ci_builds:
- if build.get('building'):
- # there should be no such case
- continue
- CiBuild.objects.filter(name=ci_build.get('name'),
- number=ci_build.get('number')
- ).update(duration=ci_build.get('duration').total_seconds(),
- timestamp=ci_build.get('start_timestamp'),
- result=ci_build.get('result'))
-
+ # Try to cache report build informtion to database
for qareport_build in kernel_change_report.get('qa_report_builds'):
jenkins_ci_build = qareport_build.get('ci_build')
dbci_build = jenkins_ci_build.get('dbci_build')
diff --git a/lkft/templates/lkft-describe.html b/lkft/templates/lkft-describe.html
index 826f48e..f55c4e1 100644
--- a/lkft/templates/lkft-describe.html
+++ b/lkft/templates/lkft-describe.html
@@ -2,7 +2,7 @@
{% block title %} {{kernel_change.describe}} {% endblock %}
-{% block headline %}<h1>Kernel Change: {{kernel_change.describe}}</a></h1>{% endblock %}
+{% block headline %}<h1>{{kernel_change.describe}} -- {{kernel_change.status}}</a></h1>{% endblock %}
{% block content %}
<div>