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