Merge lp:~cjohnston/qa-dashboard/hide-memory-test-framework-data into lp:qa-dashboard
- hide-memory-test-framework-data
- Merge into dev
Status: | Work in progress |
---|---|
Proposed branch: | lp:~cjohnston/qa-dashboard/hide-memory-test-framework-data |
Merge into: | lp:qa-dashboard |
Prerequisite: | lp:~cjohnston/qa-dashboard/add-admin-link |
Diff against target: |
439 lines (+281/-8) 9 files modified
common/templates/layout.html (+2/-1) memory/admin.py (+11/-0) memory/api.py (+9/-1) memory/management/commands/agg_results.py (+10/-3) memory/migrations/0002_add_memory_config.py (+213/-0) memory/models.py (+4/-0) memory/templates/memory/machine_details.html (+14/-1) memory/tests.py (+1/-1) memory/views.py (+17/-1) |
To merge this branch: | bzr merge lp:~cjohnston/qa-dashboard/hide-memory-test-framework-data |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
PS Jenkins bot | continuous-integration | Approve | |
Chris Johnston | Needs Resubmitting | ||
Joe Talbott | Approve | ||
Review via email: mp+174325@code.launchpad.net |
Commit message
Hides test framework results by default from memory graphs and tables, adding the ability to see the test framework results
Description of the change
In order to display proper results for memory testing, we should not be displaying the memory usage caused by the testing frame work. To fix this, we will add a set of blacklist processes, and exclude those from the results. Just for the ability to follow the usage by the testing framework, we added an option to display the data including the testing framework data.
The aggregated data will need to be reformulated after this branch lands in order to provide consistency.
PS Jenkins bot (ps-jenkins) wrote : | # |
- 497. By Chris Johnston
-
Fix tests
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:497
http://
Executed test runs:
Click here to trigger a rebuild:
http://
- 498. By Chris Johnston
-
Change exclude to be in agg script
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:498
http://
Executed test runs:
Click here to trigger a rebuild:
http://
Unmerged revisions
- 498. By Chris Johnston
-
Change exclude to be in agg script
- 497. By Chris Johnston
-
Fix tests
- 496. By Chris Johnston
-
Add the ability to exclude test framework data
- 495. By Chris Johnston
-
commit
Preview Diff
1 | === modified file 'common/templates/layout.html' |
2 | --- common/templates/layout.html 2013-07-11 15:30:27 +0000 |
3 | +++ common/templates/layout.html 2013-07-12 13:44:34 +0000 |
4 | @@ -28,7 +28,8 @@ |
5 | <li {% ifequal url.0 'bootspeed' %}class="active" {% endifequal %}id="main-nav"><a class="main-nav-item" href="{% url bootspeed_arch_overview %}">Bootspeed</a></li> |
6 | <li {% ifequal url.0 'power' %}class="active" {% endifequal %}id="main-nav"><a class="main-nav-item" href="{% url power_overview %}">Power</a></li> |
7 | <li {% ifequal url.0 'memory' %}class="active" {% endifequal %}id="main-nav"><a class="main-nav-item" href="{% url memory_arch_overview %}">Memory</a></li> |
8 | - <li id="main-nav"><a class="main-nav-item" href="https://jenkins.qa.ubuntu.com/view/Saucy/view/AutoPkgTest/">Autopackage</a></li> |
9 | + <li id="main-nav"><a class="main-nav-item" href="https://jenkins.qa.ubuntu.com/view/Saucy/view/AutoPkgTest/">Autopackage</a></li> |
10 | + {% if user.is_staff %}<li id="main-nav"><a class="main-nav-item" href="/admin">Admin</a></li>{% endif %} |
11 | </ul> |
12 | </nav> |
13 | <a href='{% url index %}' class="logo-ubuntu"> |
14 | |
15 | === modified file 'memory/admin.py' |
16 | --- memory/admin.py 2013-03-21 18:59:36 +0000 |
17 | +++ memory/admin.py 2013-07-12 13:44:34 +0000 |
18 | @@ -22,6 +22,8 @@ |
19 | MemoryResult, |
20 | MemoryMetric, |
21 | MemoryBuild, |
22 | + MemoryConfig, |
23 | + MemoryProcess, |
24 | ) |
25 | |
26 | from django.contrib import admin |
27 | @@ -131,6 +133,14 @@ |
28 | ) |
29 | |
30 | |
31 | +class MemoryConfigAdmin(admin.ModelAdmin): |
32 | + list_display = ('blacklist_process', ) |
33 | + |
34 | + |
35 | +class MemoryProcessAdmin(admin.ModelAdmin): |
36 | + list_display = ('image', 'upgrade', 'machine', 'process',) |
37 | + |
38 | +admin.site.register(MemoryConfig, MemoryConfigAdmin) |
39 | admin.site.register(MemoryUpgrade, MemoryUpgradeAdmin) |
40 | admin.site.register(MemoryMachine, MemoryMachineAdmin) |
41 | admin.site.register(MemoryLog, MemoryLogAdmin) |
42 | @@ -139,3 +149,4 @@ |
43 | admin.site.register(MemoryDetail, MemoryDetailAdmin) |
44 | admin.site.register(MemoryResult, MemoryResultAdmin) |
45 | admin.site.register(MemoryBuild, MemoryBuildAdmin) |
46 | +admin.site.register(MemoryProcess, MemoryProcessAdmin) |
47 | |
48 | === modified file 'memory/api.py' |
49 | --- memory/api.py 2013-06-09 23:59:45 +0000 |
50 | +++ memory/api.py 2013-07-12 13:44:34 +0000 |
51 | @@ -32,6 +32,7 @@ |
52 | MemoryProcess, |
53 | MemoryResult, |
54 | MemoryUpgrade, |
55 | + MemoryConfig, |
56 | ) |
57 | |
58 | MAX_RESULTS = 180 |
59 | @@ -353,7 +354,14 @@ |
60 | def result_processes(request, result_id): |
61 | result = get_object_or_404(MemoryResult, id=result_id) |
62 | |
63 | - procs = result.memorydetail_set.filter(publish=True).order_by('-pss') |
64 | + exclude = MemoryConfig.objects.all().values_list( |
65 | + 'blacklist_process', |
66 | + flat=True, |
67 | + ) |
68 | + |
69 | + procs = result.memorydetail_set.exclude( |
70 | + command__in=exclude, |
71 | + ).filter(publish=True).order_by('-pss') |
72 | |
73 | data = [] |
74 | for p in procs: |
75 | |
76 | === modified file 'memory/management/commands/agg_results.py' |
77 | --- memory/management/commands/agg_results.py 2013-03-22 21:10:26 +0000 |
78 | +++ memory/management/commands/agg_results.py 2013-07-12 13:44:34 +0000 |
79 | @@ -22,17 +22,20 @@ |
80 | from memory.models import ( |
81 | MemoryDetail, |
82 | MemoryResult, |
83 | + MemoryConfig, |
84 | ) |
85 | |
86 | |
87 | class Command(BaseCommand): |
88 | help = "Do result calculations." |
89 | |
90 | - def _aggregate(self, result): |
91 | + def _aggregate(self, result, exclude): |
92 | """ Aggregate values by name. """ |
93 | |
94 | details = MemoryDetail.objects.filter( |
95 | result=result, |
96 | + ).exclude( |
97 | + command__in=exclude, |
98 | ) |
99 | |
100 | if details.count() == 0: |
101 | @@ -49,7 +52,6 @@ |
102 | return result |
103 | |
104 | def handle(self, *args, **options): |
105 | - |
106 | verbosity = int(options.get('verbosity')) |
107 | |
108 | log_level = logging.WARN |
109 | @@ -64,9 +66,14 @@ |
110 | name='pss', |
111 | ) |
112 | |
113 | + exclude = MemoryConfig.objects.all().values_list( |
114 | + 'blacklist_process', |
115 | + flat=True, |
116 | + ) |
117 | + |
118 | logging.info("results: {}".format(results)) |
119 | for result in results.iterator(): |
120 | logging.info("name: {}".format(result.name)) |
121 | - res = self._aggregate(result) |
122 | + res = self._aggregate(result, exclude) |
123 | |
124 | logging.info("result: {}".format(res)) |
125 | |
126 | === added file 'memory/migrations/0002_add_memory_config.py' |
127 | --- memory/migrations/0002_add_memory_config.py 1970-01-01 00:00:00 +0000 |
128 | +++ memory/migrations/0002_add_memory_config.py 2013-07-12 13:44:34 +0000 |
129 | @@ -0,0 +1,213 @@ |
130 | +# -*- coding: utf-8 -*- |
131 | +import datetime |
132 | +from south.db import db |
133 | +from south.v2 import SchemaMigration |
134 | +from django.db import models |
135 | + |
136 | + |
137 | +class Migration(SchemaMigration): |
138 | + |
139 | + def forwards(self, orm): |
140 | + # Adding model 'MemoryConfig' |
141 | + db.create_table('memory_memoryconfig', ( |
142 | + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), |
143 | + ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), |
144 | + ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), |
145 | + ('internal', self.gf('django.db.models.fields.BooleanField')(default=True)), |
146 | + ('publish', self.gf('django.db.models.fields.BooleanField')(default=True)), |
147 | + ('blacklist_process', self.gf('django.db.models.fields.CharField')(max_length=4096)), |
148 | + )) |
149 | + db.send_create_signal('memory', ['MemoryConfig']) |
150 | + |
151 | + |
152 | + def backwards(self, orm): |
153 | + # Deleting model 'MemoryConfig' |
154 | + db.delete_table('memory_memoryconfig') |
155 | + |
156 | + |
157 | + models = { |
158 | + 'common.bug': { |
159 | + 'Meta': {'object_name': 'Bug', 'db_table': "'bugs'"}, |
160 | + 'assignee': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True'}), |
161 | + 'bug_no': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
162 | + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
163 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
164 | + 'importance': ('django.db.models.fields.CharField', [], {'default': "u'unknown'", 'max_length': '4096'}), |
165 | + 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
166 | + 'project': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True'}), |
167 | + 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
168 | + 'status': ('django.db.models.fields.CharField', [], {'default': "u'unknown'", 'max_length': '4096'}), |
169 | + 'title': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True'}), |
170 | + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
171 | + }, |
172 | + 'common.jenkinsbuild': { |
173 | + 'Meta': {'unique_together': "(('job', 'build_number'),)", 'object_name': 'JenkinsBuild', 'db_table': "'jenkins_builds'"}, |
174 | + 'bugs': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'build_bugs'", 'symmetrical': 'False', 'to': "orm['common.Bug']"}), |
175 | + 'build_description': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '1024'}), |
176 | + 'build_number': ('django.db.models.fields.CharField', [], {'max_length': '50'}), |
177 | + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
178 | + 'failed': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
179 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
180 | + 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
181 | + 'job': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['common.JenkinsJob']"}), |
182 | + 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
183 | + 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
184 | + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
185 | + }, |
186 | + 'common.jenkinsjob': { |
187 | + 'Meta': {'object_name': 'JenkinsJob', 'db_table': "'jenkins_jobs'"}, |
188 | + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
189 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
190 | + 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
191 | + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '200'}), |
192 | + 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
193 | + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
194 | + 'url': ('django.db.models.fields.URLField', [], {'max_length': '200'}) |
195 | + }, |
196 | + 'memory.memorybuild': { |
197 | + 'Meta': {'object_name': 'MemoryBuild', 'db_table': "'memory_builds'"}, |
198 | + 'build': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['common.JenkinsBuild']"}), |
199 | + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
200 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
201 | + 'image': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['memory.MemoryImage']", 'null': 'True'}), |
202 | + 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
203 | + 'machine': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['memory.MemoryMachine']"}), |
204 | + 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
205 | + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
206 | + 'upgrade': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['memory.MemoryUpgrade']", 'null': 'True'}) |
207 | + }, |
208 | + 'memory.memoryconfig': { |
209 | + 'Meta': {'object_name': 'MemoryConfig'}, |
210 | + 'blacklist_process': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), |
211 | + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
212 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
213 | + 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
214 | + 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
215 | + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
216 | + }, |
217 | + 'memory.memorydetail': { |
218 | + 'Meta': {'object_name': 'MemoryDetail', 'db_table': "'memory_details'"}, |
219 | + 'command': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), |
220 | + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
221 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
222 | + 'image': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['memory.MemoryImage']", 'null': 'True'}), |
223 | + 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
224 | + 'machine': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['memory.MemoryMachine']"}), |
225 | + 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), |
226 | + 'pss': ('django.db.models.fields.PositiveIntegerField', [], {}), |
227 | + 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
228 | + 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
229 | + 'result': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['memory.MemoryResult']"}), |
230 | + 'rss': ('django.db.models.fields.PositiveIntegerField', [], {}), |
231 | + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
232 | + 'upgrade': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['memory.MemoryUpgrade']", 'null': 'True'}), |
233 | + 'uss': ('django.db.models.fields.PositiveIntegerField', [], {}), |
234 | + 'vss': ('django.db.models.fields.PositiveIntegerField', [], {}) |
235 | + }, |
236 | + 'memory.memoryimage': { |
237 | + 'Meta': {'object_name': 'MemoryImage', 'db_table': "'memory_images'"}, |
238 | + 'arch': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
239 | + 'build_number': ('django.db.models.fields.CharField', [], {'max_length': '50'}), |
240 | + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
241 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
242 | + 'image_type': ('django.db.models.fields.CharField', [], {'default': "u'daily'", 'max_length': '10'}), |
243 | + 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
244 | + 'md5': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '200'}), |
245 | + 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
246 | + 'release': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
247 | + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
248 | + 'variant': ('django.db.models.fields.CharField', [], {'max_length': '200'}) |
249 | + }, |
250 | + 'memory.memorylog': { |
251 | + 'Meta': {'object_name': 'MemoryLog', 'db_table': "'memory_logs'"}, |
252 | + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
253 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
254 | + 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
255 | + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
256 | + 'path': ('django.db.models.fields.CharField', [], {'max_length': '512'}), |
257 | + 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
258 | + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
259 | + }, |
260 | + 'memory.memorymachine': { |
261 | + 'Meta': {'object_name': 'MemoryMachine', 'db_table': "'memory_machines'"}, |
262 | + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
263 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
264 | + 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
265 | + 'mac_address': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
266 | + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '200'}), |
267 | + 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
268 | + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
269 | + }, |
270 | + 'memory.memorymetric': { |
271 | + 'Meta': {'object_name': 'MemoryMetric', 'db_table': "'memory_metrics'"}, |
272 | + 'average': ('django.db.models.fields.FloatField', [], {'default': '0'}), |
273 | + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
274 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
275 | + 'image': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['memory.MemoryImage']", 'null': 'True'}), |
276 | + 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
277 | + 'jenkins_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True'}), |
278 | + 'kernel': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), |
279 | + 'machine': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['memory.MemoryMachine']"}), |
280 | + 'maximum': ('django.db.models.fields.FloatField', [], {'default': '0'}), |
281 | + 'minimum': ('django.db.models.fields.FloatField', [], {'default': '0'}), |
282 | + 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
283 | + 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
284 | + 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
285 | + 'stddev': ('django.db.models.fields.FloatField', [], {'default': '0'}), |
286 | + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
287 | + 'upgrade': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['memory.MemoryUpgrade']", 'null': 'True'}) |
288 | + }, |
289 | + 'memory.memoryprocess': { |
290 | + 'Meta': {'object_name': 'MemoryProcess', 'db_table': "'memory_processes'"}, |
291 | + 'average': ('django.db.models.fields.FloatField', [], {'default': '0'}), |
292 | + 'command': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), |
293 | + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
294 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
295 | + 'image': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['memory.MemoryImage']", 'null': 'True'}), |
296 | + 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
297 | + 'jenkins_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True'}), |
298 | + 'machine': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['memory.MemoryMachine']"}), |
299 | + 'maximum': ('django.db.models.fields.FloatField', [], {'default': '0'}), |
300 | + 'minimum': ('django.db.models.fields.FloatField', [], {'default': '0'}), |
301 | + 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
302 | + 'process': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), |
303 | + 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
304 | + 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
305 | + 'stddev': ('django.db.models.fields.FloatField', [], {'default': '0'}), |
306 | + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
307 | + 'upgrade': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['memory.MemoryUpgrade']", 'null': 'True'}) |
308 | + }, |
309 | + 'memory.memoryresult': { |
310 | + 'Meta': {'object_name': 'MemoryResult', 'db_table': "'memory_results'"}, |
311 | + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
312 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
313 | + 'image': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['memory.MemoryImage']", 'null': 'True'}), |
314 | + 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
315 | + 'jenkins_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True'}), |
316 | + 'kernel': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), |
317 | + 'log': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['memory.MemoryLog']"}), |
318 | + 'machine': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['memory.MemoryMachine']"}), |
319 | + 'metric': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['memory.MemoryMetric']"}), |
320 | + 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
321 | + 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
322 | + 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
323 | + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
324 | + 'upgrade': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['memory.MemoryUpgrade']", 'null': 'True'}), |
325 | + 'value': ('django.db.models.fields.FloatField', [], {}) |
326 | + }, |
327 | + 'memory.memoryupgrade': { |
328 | + 'Meta': {'object_name': 'MemoryUpgrade', 'db_table': "'memory_upgrades'"}, |
329 | + 'arch': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
330 | + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
331 | + 'date': ('django.db.models.fields.DateTimeField', [], {}), |
332 | + 'from_release': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
333 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
334 | + 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
335 | + 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
336 | + 'release': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
337 | + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
338 | + 'variant': ('django.db.models.fields.CharField', [], {'max_length': '200'}) |
339 | + } |
340 | + } |
341 | + |
342 | + complete_apps = ['memory'] |
343 | \ No newline at end of file |
344 | |
345 | === modified file 'memory/models.py' |
346 | --- memory/models.py 2013-05-06 21:18:46 +0000 |
347 | +++ memory/models.py 2013-07-12 13:44:34 +0000 |
348 | @@ -351,3 +351,7 @@ |
349 | return 0 |
350 | |
351 | return self.average - prev.average |
352 | + |
353 | + |
354 | +class MemoryConfig(DashboardBaseModel): |
355 | + blacklist_process = models.CharField(max_length=4096) |
356 | |
357 | === modified file 'memory/templates/memory/machine_details.html' |
358 | --- memory/templates/memory/machine_details.html 2013-07-10 19:05:25 +0000 |
359 | +++ memory/templates/memory/machine_details.html 2013-07-12 13:44:34 +0000 |
360 | @@ -12,7 +12,20 @@ |
361 | {% block content %} |
362 | |
363 | <div class="grid_15"> |
364 | - <h2>Memory consumption details for {{ build }} on {{ result.machine.name|display_name }} using {{ arch }}</h2> |
365 | + <h2>Memory consumption details for {{ result.machine.name|display_name }}</h2> |
366 | + <p> |
367 | + <strong>Build #:</strong> {{ build }}<br /> |
368 | + <strong>Arch:</strong> {{ arch }}<br /> |
369 | + {% if all %} |
370 | + <a href="{% url memory_machine_image_details arch result.machine.id result.id %}"> |
371 | + Hide test framework data |
372 | + </a> |
373 | + {% else %} |
374 | + <a href="?all"> |
375 | + Show test framework data |
376 | + </a> |
377 | + {% endif %} |
378 | + </p> |
379 | </div> |
380 | <div class="grid_15"> |
381 | <div id="stackedchart"> |
382 | |
383 | === modified file 'memory/tests.py' |
384 | --- memory/tests.py 2013-05-31 20:07:19 +0000 |
385 | +++ memory/tests.py 2013-07-12 13:44:34 +0000 |
386 | @@ -173,9 +173,9 @@ |
387 | |
388 | self.assert_(self.detail2) |
389 | |
390 | + call_command('agg_processes') |
391 | call_command('agg_results') |
392 | call_command('agg_metrics') |
393 | - call_command('agg_processes') |
394 | |
395 | # get updated instances from the DB |
396 | self.result = MemoryResult.objects.get(id=self.result.id) |
397 | |
398 | === modified file 'memory/views.py' |
399 | --- memory/views.py 2013-07-10 19:05:25 +0000 |
400 | +++ memory/views.py 2013-07-12 13:44:34 +0000 |
401 | @@ -39,6 +39,7 @@ |
402 | MemoryMetric, |
403 | MemoryProcess, |
404 | MemoryResult, |
405 | + MemoryConfig, |
406 | ) |
407 | |
408 | from memory.tables import ( |
409 | @@ -292,7 +293,21 @@ |
410 | @require_GET |
411 | def machine_image_details(request, arch, machine_id, result_id): |
412 | result = get_object_or_404(MemoryResult, id=result_id) |
413 | - details = result.memorydetail_set.all().select_related('image', 'machine') |
414 | + exclude = MemoryConfig.objects.all().values_list( |
415 | + 'blacklist_process', |
416 | + flat=True, |
417 | + ) |
418 | + |
419 | + all = request.GET.get('all') |
420 | + |
421 | + if all is None: |
422 | + all = False |
423 | + details = result.memorydetail_set.exclude( |
424 | + command__in=exclude, |
425 | + ).select_related('image', 'machine') |
426 | + else: |
427 | + all = True |
428 | + details = result.memorydetail_set.select_related('image', 'machine') |
429 | |
430 | chart_api = reverse( |
431 | 'memory_api_result_processes', |
432 | @@ -354,6 +369,7 @@ |
433 | 'table': table, |
434 | 'totals': totals, |
435 | 'chart_api': chart_api, |
436 | + 'all': all, |
437 | 'bread_crumb_trail': BreadCrumbTrail.leading_to( |
438 | machine_image_details, |
439 | arch=arch, |
FAILED: Continuous integration, rev:496 /code.launchpad .net/~cjohnston /qa-dashboard/ hide-memory- test-framework- data/+merge/ 174325/ +edit-commit- message
No commit message was specified in the merge proposal. Click on the following link and set the commit message (if you want a jenkins rebuild you need to trigger it yourself):
https:/
http:// s-jenkins: 8080/job/ dashboard- ci/78/
Executed test runs:
Click here to trigger a rebuild: s-jenkins: 8080/job/ dashboard- ci/78/rebuild
http://