Merge ~apw/+git/kteam-tools:swm/dashboard--include-boot-testing-and-enhance into ~canonical-kernel/+git/kteam-tools:master

Proposed by Andy Whitcroft
Status: Merged
Merged at revision: dd5e385c804fab3bb758db897d555b9103616c92
Proposed branch: ~apw/+git/kteam-tools:swm/dashboard--include-boot-testing-and-enhance
Merge into: ~canonical-kernel/+git/kteam-tools:master
Diff against target: 202 lines (+90/-27)
1 file modified
stable/dashboards/web/templates/kernel-stable-dashboard.mako (+90/-27)
Reviewer Review Type Date Requested Status
Stefan Bader Approve
Review via email: mp+406326@code.launchpad.net

Commit message

kernel-stable-dashboard: add early-testing row and improve readability

Makes a number of changes to the dashboard:

1) adds a new early-testing status row in a similar form to that of the testing row, this contains the boot-testing and sru-review status as each blocks promote-to-proposed;

2) add tooltips for all status row element labels;

3) fixes url handling for status row elements in combination with tooltips;

4) changes the colour for top-level kernels (those without master-bug links) to blue so they are more easily distinguished; and

5) changes the background for alternate trackers to make it easier to follow a single trackers lines.

To post a comment you must log in.
Revision history for this message
Stefan Bader (smb) wrote :

From what I can tell all the described changes are visible and tested on the dashboard. And explanations seem sufficiently be done in the commit messages.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/stable/dashboards/web/templates/kernel-stable-dashboard.mako b/stable/dashboards/web/templates/kernel-stable-dashboard.mako
index 07bc0d9..80c4cbf 100644
--- a/stable/dashboards/web/templates/kernel-stable-dashboard.mako
+++ b/stable/dashboards/web/templates/kernel-stable-dashboard.mako
@@ -1,13 +1,24 @@
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2<style>2<style>
3a:link {3a:link {
4 color: green; 4 color: green;
5 background-color: transparent; 5 background-color: transparent;
6 text-decoration: none;6 text-decoration: none;
7}7}
88
9a:visited {9a:visited {
10 color: green; 10 color: green;
11 background-color: transparent;
12 text-decoration: none;
13}
14.master a:link {
15 color: darkblue;
16 background-color: transparent;
17 text-decoration: none;
18}
19
20.master a:visited {
21 color: darkblue;
11 background-color: transparent;22 background-color: transparent;
12 text-decoration: none;23 text-decoration: none;
13}24}
@@ -38,6 +49,14 @@ __testing_status_text = {
38 'Incomplete' : 'Failed',49 'Incomplete' : 'Failed',
39 'Fix Released' : 'Passed',50 'Fix Released' : 'Passed',
40}51}
52__review_status_colors = __testing_status_colors
53__review_status_text = {
54 'New' : 'Not Ready',
55 'In Progress' : 'In Progress',
56 'Confirmed' : 'Ready',
57 'Incomplete' : 'Rejected',
58 'Fix Released' : 'Approved',
59}
41%>60%>
42<%61<%
4362
@@ -91,12 +110,15 @@ def tagged_block(key, value):
91# tagged_block_valid110# tagged_block_valid
92#111#
93def tagged_block_valid(key, value, colour):112def tagged_block_valid(key, value, colour):
113 key_title = key
114 if 'tooltip-' + key in attrs:
115 key_title = '<span title="{}">{}</span>'.format(attrs['tooltip-' + key], key)
94 if value in ('n/a', 'Invalid'):116 if value in ('n/a', 'Invalid'):
95 return tagged_block(__coloured(key, 'silver'), __coloured('n/a', 'silver'))117 return tagged_block(__coloured(key_title, 'silver'), __coloured('n/a', 'silver'))
96 elif value == "Won't Fix":118 elif value == "Won't Fix":
97 return tagged_block(__coloured(key, 'silver'), __coloured('Skipped', 'silver'))119 return tagged_block(__coloured(key_title, 'silver'), __coloured('Skipped', 'silver'))
98 else:120 else:
99 block = tagged_block(key, __coloured(value, colour))121 block = tagged_block(key_title, __coloured(value, colour))
100 if key in attrs:122 if key in attrs:
101 block = '<a href="{}">{}</a>'.format(attrs[key], block)123 block = '<a href="{}">{}</a>'.format(attrs[key], block)
102 return block124 return block
@@ -161,7 +183,30 @@ def __status_bites(bug, attrs):
161 test_set_invalid = ('n/a', 'New', 'Invalid')183 test_set_invalid = ('n/a', 'New', 'Invalid')
162 test_set_complete = ('n/a', 'Invalid', 'Fix Released', "Won't Fix")184 test_set_complete = ('n/a', 'Invalid', 'Fix Released', "Won't Fix")
163185
164 # debs: testing status mashup.186 # debs: testing status mashup (early phase Touch Testing)
187 boot_testing_status = __task_status(bug, 'boot-testing')
188 sru_review_status = __task_status(bug, 'sru-review')
189 testing_valid = (
190 boot_testing_status not in test_set_invalid or
191 sru_review_status not in test_set_invalid)
192 testing_complete = (
193 boot_testing_status in test_set_complete and
194 sru_review_status in test_set_complete)
195 if testing_valid and not testing_complete:
196 retval = ''
197
198 color = __testing_status_colors[boot_testing_status]
199 boot_testing_status = __testing_status_text.get(boot_testing_status, boot_testing_status)
200 retval += tagged_block_valid('bt:', boot_testing_status, color)
201 retval += tagged_block('', '')
202 retval += tagged_block('', '')
203 color = __review_status_colors[sru_review_status]
204 sru_review_status = __review_status_text.get(sru_review_status, sru_review_status)
205 retval += tagged_block_valid('sr:', sru_review_status, color)
206
207 bites.append(bite_format(thing_prefix, retval, thing_in))
208
209 # debs: testing status mashup (main phase Testing)
165 automated_testing_status = __task_status(bug, 'automated-testing')210 automated_testing_status = __task_status(bug, 'automated-testing')
166 certification_testing_status = __task_status(bug, 'certification-testing')211 certification_testing_status = __task_status(bug, 'certification-testing')
167 regression_testing_status = __task_status(bug, 'regression-testing')212 regression_testing_status = __task_status(bug, 'regression-testing')
@@ -246,13 +291,13 @@ def __status_bites(bug, attrs):
246 retval = ''291 retval = ''
247292
248 color = __testing_status_colors[security_signoff_status]293 color = __testing_status_colors[security_signoff_status]
249 retval += tagged_block_valid('<span title="Security Signoff">ss:</span>', security_signoff_status, color)294 retval += tagged_block_valid('ss:', security_signoff_status, color)
250295
251 color = __testing_status_colors[stakeholder_signoff_status]296 color = __testing_status_colors[stakeholder_signoff_status]
252 retval += tagged_block_valid('<span title="Stakeholder Signoff">Ss:</span>', stakeholder_signoff_status, color)297 retval += tagged_block_valid('Ss:', stakeholder_signoff_status, color)
253298
254 color = __testing_status_colors[kernel_signoff_status]299 color = __testing_status_colors[kernel_signoff_status]
255 retval += tagged_block_valid('<span title="Kernel Signoff">ks:</span>', kernel_signoff_status, color)300 retval += tagged_block_valid('ks:', kernel_signoff_status, color)
256301
257 bites.append(bite_format(thing_prefix, retval, thing_in))302 bites.append(bite_format(thing_prefix, retval, thing_in))
258303
@@ -269,7 +314,8 @@ def __status_bites(bug, attrs):
269 if (task.startswith('prepare-package') and314 if (task.startswith('prepare-package') and
270 not reason.startswith('Stalled -- ')):315 not reason.startswith('Stalled -- ')):
271 continue316 continue
272 if task.endswith('-testing') or task.endswith('-signoff'):317 # Elide things which are on one of the three "status box" rows.
318 if task.endswith('-testing') or task.endswith('-signoff') or task == 'sru-review':
273 continue319 continue
274 (state, flags, reason) = reason.split(' ', 2)320 (state, flags, reason) = reason.split(' ', 2)
275 colour = status_colour.get(state, 'blue')321 colour = status_colour.get(state, 'blue')
@@ -345,15 +391,29 @@ for bid in sorted(data['swm']):
345 attrs['at:'] = 'http://people.canonical.com/~kernel/status/adt-matrix/{}-{}.html'.format(sn, package.replace('linux', 'linux-meta'))391 attrs['at:'] = 'http://people.canonical.com/~kernel/status/adt-matrix/{}-{}.html'.format(sn, package.replace('linux', 'linux-meta'))
346 attrs['vt:'] = 'http://kernel.ubuntu.com/reports/sru-report.html#{}--{}'.format(sn, package)392 attrs['vt:'] = 'http://kernel.ubuntu.com/reports/sru-report.html#{}--{}'.format(sn, package)
347 attrs['rt:'] = 'http://10.246.75.167/{}/rtr-lvl1.html'.format(cycle)393 attrs['rt:'] = 'http://10.246.75.167/{}/rtr-lvl1.html'.format(cycle)
394 attrs['bt:'] = 'http://10.246.75.167/{}/rtr-lvl1.html'.format(cycle)
395
396 attrs['tooltip-at:'] = 'Automated Testing'
397 attrs['tooltip-ct:'] = 'Certification Testing'
398 attrs['tooltip-rt:'] = 'Regression Testing'
399 attrs['tooltip-vt:'] = 'Verification Testing'
400 attrs['tooltip-bt:'] = 'Boot Testing'
401 attrs['tooltip-ss:'] = 'Security Signoff'
402 attrs['tooltip-Ss:'] = 'Stakeholder Signoff'
403 attrs['tooltip-ks:'] = 'Kernel Signoff'
404 attrs['tooltip-sr:'] = 'SRU Review'
348405
349 status_list = __status_bites(b, attrs)406 status_list = __status_bites(b, attrs)
350 first = True407 first = True
408 #row_style = ' background: #f0f0f0;' if row_number % 2 == 0 else ''
409 master_class = 'master' if 'master-bug' not in b else 'derivative'
351 for status in status_list:410 for status in status_list:
411 status_row = {'bug': None, 'version': None, 'phase': status, 'spin': spin, 'master-class': master_class}
352 if first:412 if first:
353 cadence[cycle][sn][package].append({ 'bug': bid, 'version': version, 'phase': status, 'spin': spin })413 status_row['bug'] = bid
414 status_row['version'] = version
354 first = False415 first = False
355 else:416 cadence[cycle][sn][package].append(status_row)
356 cadence[cycle][sn][package].append({ 'bug': None, 'version': None, 'phase': status, 'spin': spin })
357417
358%>418%>
359<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US">419<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US">
@@ -405,6 +465,7 @@ for bid in sorted(data['swm']):
405 % for rls in sorted(releases, reverse=True):465 % for rls in sorted(releases, reverse=True):
406 <%466 <%
407 codename = releases[rls].capitalize()467 codename = releases[rls].capitalize()
468 row_number = 0
408 %>469 %>
409 % if releases[rls] in cadence[cycle]:470 % if releases[rls] in cadence[cycle]:
410 <tr>471 <tr>
@@ -412,20 +473,22 @@ for bid in sorted(data['swm']):
412 </tr>473 </tr>
413 % for pkg in sorted(cadence[cycle][releases[rls]]):474 % for pkg in sorted(cadence[cycle][releases[rls]]):
414 % for bug in cadence[cycle][releases[rls]][pkg]:475 % for bug in cadence[cycle][releases[rls]][pkg]:
415 <tr style="line-height: 100%">476 <%
477 cell_version = '&nbsp;'
478 cell_package = '&nbsp;'
479 cell_spin = '&nbsp;'
480 if bug['bug'] is not None:
481 url = "https://bugs.launchpad.net/ubuntu/+source/linux/+bug/%s" % bug['bug']
482 cell_version = '<a href="{}">{}</a>'.format(url, bug['version'])
483 cell_package = '<a href="{}">{}</a>'.format(url, pkg)
484 cell_spin = '#{}'.format(bug['spin'])
485 row_number += 1
486 row_style = ' background: #f6f6f6;' if row_number % 2 == 0 else ''
487 %>
488 <tr style="line-height: 100%;${row_style}">
416 <td>&nbsp;</td>489 <td>&nbsp;</td>
417 <%490 <td width="120" align="right" class="${bug['master-class']}">${cell_version}</td>
418 cell_version = '&nbsp;'491 <td class="${bug['master-class']}">${cell_package}</a></td>
419 cell_package = '&nbsp;'
420 cell_spin = '&nbsp;'
421 if bug['bug'] is not None:
422 url = "https://bugs.launchpad.net/ubuntu/+source/linux/+bug/%s" % bug['bug']
423 cell_version = '<a href="{}">{}</a>'.format(url, bug['version'])
424 cell_package = '<a href="{}">{}</a>'.format(url, pkg)
425 cell_spin = '#{}'.format(bug['spin'])
426 %>
427 <td width="120" align="right" style="color: green">${cell_version}</td>
428 <td style="color: green">${cell_package}</a></td>
429 <td style="color: grey">${cell_spin}</td>492 <td style="color: grey">${cell_spin}</td>
430 <td>${bug['phase']}</td>493 <td>${bug['phase']}</td>
431 </tr>494 </tr>

Subscribers

People subscribed via source and target branches