Merge lp:~jcsackett/charmworld/better-review-charting into lp:charmworld

Proposed by j.c.sackett
Status: Merged
Approved by: j.c.sackett
Approved revision: 485
Merged at revision: 486
Proposed branch: lp:~jcsackett/charmworld/better-review-charting
Merge into: lp:charmworld
Diff against target: 124 lines (+12/-33)
4 files modified
charmworld/static/sparklines.js (+1/-1)
charmworld/templates/review.pt (+0/-8)
charmworld/views/tests/test_tools.py (+3/-9)
charmworld/views/tools.py (+8/-15)
To merge this branch: bzr merge lp:~jcsackett/charmworld/better-review-charting
Reviewer Review Type Date Requested Status
Juju Gui Bot continuous-integration Approve
Brad Crittenden (community) code Approve
Review via email: mp+207255@code.launchpad.net

Commit message

Removes the min and max data from review and improves chart display.

Description of the change

This branch removes any display of min and max latency from the review queue.
The data is misleading to users, as they routinely mistake max for average,
causing communication errors between charm reviewers and charm authors.

Since min and max was added as a drive by addition, it's not necessary. The
easiest thing to do is just remove it from display. We continue to store it so
we have the data for analysis should we ever want it.

As a drive by, the d3 code to make the sparkline has been updated to make the
sparkline more legible.

To post a comment you must log in.
Revision history for this message
Brad Crittenden (bac) wrote :

Thanks Jon. Looks good.

review: Approve (code)
Revision history for this message
Juju Gui Bot (juju-gui-bot) :
review: Approve (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'charmworld/static/sparklines.js'
2--- charmworld/static/sparklines.js 2013-11-20 14:28:24 +0000
3+++ charmworld/static/sparklines.js 2014-02-19 17:16:14 +0000
4@@ -6,7 +6,7 @@
5 var xlimit = data.length - 1;
6 var ylimit = Math.max.apply(Math, data);
7
8- var x = d3.scale.linear().domain([0, xlimit]).range([0, 20]);
9+ var x = d3.scale.linear().domain([0, xlimit]).range([0, 50]);
10 var y = d3.scale.linear().domain([0, ylimit]).range([0, 10]);
11
12 var line = d3.svg.line().x(function(d,i) {
13
14=== modified file 'charmworld/templates/review.pt'
15--- charmworld/templates/review.pt 2013-11-20 14:29:00 +0000
16+++ charmworld/templates/review.pt 2014-02-19 17:16:14 +0000
17@@ -23,17 +23,9 @@
18 <ul class="note">
19 <li><strong>Items:</strong> ${len(queue)}</li>
20 <li>
21- <strong>Max wait time:</strong> ${max}
22- <span class="sparkline" data-values="[${sparklines['maxes']}]"></span>
23- </li>
24- <li>
25 <strong>Average wait time:</strong> ${mean}
26 <span class="sparkline" data-values="[${sparklines['means']}]"></span>
27 </li>
28- <li>
29- <strong>Min wait time:</strong> ${min}
30- <span class="sparkline" data-values="[${sparklines['mins']}]"></span>
31- </li>
32 </ul>
33 <p class="note">
34 <strong>Reviewers</strong>: Please read the "Reviewer Tips and Criteria"
35
36=== modified file 'charmworld/views/tests/test_tools.py'
37--- charmworld/views/tests/test_tools.py 2013-11-08 22:03:03 +0000
38+++ charmworld/views/tests/test_tools.py 2014-02-19 17:16:14 +0000
39@@ -60,22 +60,16 @@
40
41 def test_empty_sparklines(self):
42 sparklines = get_sparklines([])
43- self.assertEqual('', sparklines['maxes'])
44- self.assertEqual('', sparklines['mins'])
45 self.assertEqual('', sparklines['means'])
46
47 def test_single_sparklines(self):
48- sparklines = get_sparklines([{'max': 1, 'min': 2, 'mean': 3}])
49- self.assertEqual('1', sparklines['maxes'])
50- self.assertEqual('2', sparklines['mins'])
51+ sparklines = get_sparklines([{'mean': 3}])
52 self.assertEqual('3', sparklines['means'])
53
54 def test_sparklines(self):
55 sparklines = get_sparklines([
56- {'max': 1, 'min': 1, 'mean': 1},
57- {'max': 1, 'min': 2, 'mean': 3}])
58- self.assertEqual('1,1', sparklines['maxes'])
59- self.assertEqual('1,2', sparklines['mins'])
60+ {'mean': 1},
61+ {'mean': 3}])
62 self.assertEqual('1,3', sparklines['means'])
63
64
65
66=== modified file 'charmworld/views/tools.py'
67--- charmworld/views/tools.py 2013-11-08 19:27:59 +0000
68+++ charmworld/views/tools.py 2014-02-19 17:16:14 +0000
69@@ -6,7 +6,10 @@
70 import pymongo
71 from pyramid.view import view_config
72
73-from charmworld import cached_view_config, utils
74+from charmworld import (
75+ cached_view_config,
76+ utils,
77+)
78 from charmworld.models import (
79 CharmSource,
80 QADataSource,
81@@ -91,18 +94,13 @@
82
83
84 def get_sparklines(stats):
85- mins = []
86- maxes = []
87 means = []
88 for s in stats:
89- mins.append(str(s['min']))
90 means.append(str(s['mean']))
91- maxes.append(str(s['max']))
92
93 return {
94- 'mins': ','.join(mins),
95 'means': ','.join(means),
96- 'maxes': ','.join(maxes)}
97+ }
98
99
100 @cached_view_config(
101@@ -125,20 +123,15 @@
102 sparklines = get_sparklines(stats)
103 if stats:
104 current_stats = stats[0]
105- max_latency = utils.prettify_timedelta(
106- datetime.timedelta(seconds=current_stats['max']))
107- min_latency = utils.prettify_timedelta(
108- datetime.timedelta(seconds=current_stats['min']))
109 mean_latency = utils.prettify_timedelta(
110 datetime.timedelta(seconds=current_stats['mean']))
111 else:
112- max_latency = min_latency = mean_latency = 'N/A'
113+ mean_latency = 'N/A'
114
115 return {
116 'queue': review_queue,
117 'TYPES_WITH_DATES': TYPES_WITH_DATES,
118 'age_format': utils.pretty_timedelta,
119- 'max': max_latency,
120 'mean': mean_latency,
121- 'min': min_latency,
122- 'sparklines': sparklines}
123+ 'sparklines': sparklines,
124+ }

Subscribers

People subscribed via source and target branches

to all changes: