Merge lp:~cjohnston/qa-dashboard/migrating-away into lp:qa-dashboard
- migrating-away
- Merge into dev
Status: | Superseded |
---|---|
Proposed branch: | lp:~cjohnston/qa-dashboard/migrating-away |
Merge into: | lp:qa-dashboard |
Diff against target: |
3929 lines (+1021/-2542) 44 files modified
bootspeed/api.py (+1/-2) bootspeed/models.py (+1/-1) common/helpers.py (+42/-0) common/migrations/0001_create_common_app.py (+20/-0) common/migrations/0002_add_bug_model.py (+42/-0) common/models.py (+35/-1) common/views.py (+20/-1) dashboard/migrations/0001_initial.py (+0/-179) dashboard/migrations/0002_auto__add_field_run_internal__add_field_bug_internal__add_field_build_.py (+0/-133) dashboard/migrations/0003_auto__add_field_run_publish__add_field_bug_publish__add_field_build_pu.py (+0/-138) dashboard/migrations/0004_auto__add_kernel__add_sruresult__add_sruresultlog.py (+0/-208) dashboard/migrations/0005_auto__add_field_kernel_job_type.py (+0/-148) dashboard/migrations/0006_auto__add_field_sruresult_kernel_version.py (+0/-149) dashboard/migrations/0007_auto__add_field_kernel_version__del_field_sruresult_kernel_version.py (+0/-155) dashboard/migrations/0008_auto__add_imageresult__add_machine__add_image.py (+0/-238) dashboard/migrations/0009_auto__add_unique_machine_name__add_unique_image_release_arch_variant_b.py (+0/-195) dashboard/migrations/0010_auto__add_unique_image_md5.py (+0/-189) dashboard/migrations/0011_removing_bootspeed.py (+0/-203) dashboard/migrations/0012_change_skip_to_error.py (+0/-143) dashboard/migrations/__init__.py (+0/-15) dashboard/views/__init__.py (+0/-21) dashboard/views/api/__init__.py (+0/-35) dashboard/views/sru.py (+0/-142) qa_dashboard/settings.py (+2/-1) qa_dashboard/urls.py (+31/-26) smoke/api.py (+1/-2) smoke/forms.py (+0/-15) smoke/management/__init__.py (+0/-28) smoke/management/commands/jenkins_pull.py (+4/-4) smoke/migrations/0001_create_smoke_app.py (+184/-0) smoke/migrations/0002_remove_bug_model.py (+98/-0) smoke/models.py (+3/-163) smoke/utah_parser.py (+15/-0) smoke/utah_utils.py (+2/-2) smoke/views.py (+2/-2) sru/__init__.py (+14/-0) sru/forms.py (+33/-0) sru/management/__init__.py (+14/-0) sru/management/commands/__init__.py (+14/-0) sru/management/commands/jenkins_pull_sru.py (+3/-3) sru/migrations/0001_create_sru_app.py (+140/-0) sru/models.py (+144/-0) sru/tests.py (+14/-0) sru/views.py (+142/-0) |
To merge this branch: | bzr merge lp:~cjohnston/qa-dashboard/migrating-away |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
QA Dashboard Developers | Pending | ||
Review via email: mp+140798@code.launchpad.net |
This proposal has been superseded by a proposal from 2012-12-20.
Commit message
Separates code out into sru and smoke apps, plus moves common items to common app.
Description of the change
* Moves helpers, index, DasboardBaseModel and Bug to common app
* Creates SRU app
* Moves SRU related code/models/views to SRU app
* Creates smoke app
* Moves smoke related code/models/views to smoke app
* Updates urls
* Removes dashboard app
REQUIRED:
./manage.py syncdb
./manage.py migrate common 0001 --fake
./manage.py migrate common 0002 --fake
./manage.py migrate smoke 0001 --fake
./manage.py migrate smoke 0002 --fake
./manage.py migrate sru 0001 --fake
I'm not quite at 4,000 lines, let me come up with something else to add. :-)
- 204. By Chris Johnston
-
Removes dashboard app
- 205. By Chris Johnston
-
Move sru templates to sru app
- 206. By Chris Johnston
-
I guess fixing imports is good too
- 207. By Chris Johnston
-
Fixes clear_items
- 208. By Chris Johnston
-
Updates list_items
- 209. By Chris Johnston
-
Oops.. we use smoke now
Unmerged revisions
- 209. By Chris Johnston
-
Oops.. we use smoke now
- 208. By Chris Johnston
-
Updates list_items
- 207. By Chris Johnston
-
Fixes clear_items
- 206. By Chris Johnston
-
I guess fixing imports is good too
- 205. By Chris Johnston
-
Move sru templates to sru app
- 204. By Chris Johnston
-
Removes dashboard app
- 203. By Chris Johnston
-
Move bug model to common
- 202. By Chris Johnston
-
Oops.. smoke API
- 201. By Chris Johnston
-
Fix urls
- 200. By Chris Johnston
-
More cleanup
Preview Diff
1 | === modified file 'bootspeed/api.py' |
2 | --- bootspeed/api.py 2012-12-13 23:57:52 +0000 |
3 | +++ bootspeed/api.py 2012-12-20 01:49:23 +0000 |
4 | @@ -17,8 +17,7 @@ |
5 | from django.views.decorators.http import require_GET |
6 | from django.shortcuts import get_object_or_404 |
7 | |
8 | -###Move to common |
9 | -from dashboard.utils import ( |
10 | +from common.utils import ( |
11 | JSONResponse, |
12 | MySerializer, |
13 | ) |
14 | |
15 | === modified file 'bootspeed/models.py' |
16 | --- bootspeed/models.py 2012-12-13 02:32:26 +0000 |
17 | +++ bootspeed/models.py 2012-12-20 01:49:23 +0000 |
18 | @@ -17,7 +17,7 @@ |
19 | import math |
20 | |
21 | from django.db import models |
22 | -from dashboard.models import DashboardBaseModel |
23 | +from common.models import DashboardBaseModel |
24 | |
25 | |
26 | # Bootspeed Models |
27 | |
28 | === added file 'common/helpers.py' |
29 | --- common/helpers.py 1970-01-01 00:00:00 +0000 |
30 | +++ common/helpers.py 2012-12-20 01:49:23 +0000 |
31 | @@ -0,0 +1,42 @@ |
32 | +# QA Dashboard |
33 | +# Copyright 2012 Canonical Ltd. |
34 | + |
35 | +# This program is free software: you can redistribute it and/or modify it |
36 | +# under the terms of the GNU Affero General Public License version 3, as published |
37 | +# by the Free Software Foundation. |
38 | + |
39 | +# This program is distributed in the hope that it will be useful, but |
40 | +# WITHOUT ANY WARRANTY; without even the implied warranties of |
41 | +# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
42 | +# PURPOSE. See the GNU Affero General Public License for more details. |
43 | + |
44 | +# You should have received a copy of the GNU Affero General Public License along |
45 | +# with this program. If not, see <http://www.gnu.org/licenses/>. |
46 | + |
47 | +import json |
48 | +import urllib2 |
49 | + |
50 | +BUILD_COUNT_MAX=20 # XXX: DEBUG |
51 | +JOB_COUNT_MAX=20 # XXX: DEBUG |
52 | +DEBUG_LIMITS=False |
53 | + |
54 | +def jenkins_get(loc, as_json=True): |
55 | + req = urllib2.Request(loc) |
56 | + response = '' |
57 | + try_count = 0 |
58 | + |
59 | + while try_count < 5: |
60 | + try: |
61 | + f = urllib2.urlopen(req) |
62 | + response = f.read() |
63 | + f.close() |
64 | + break |
65 | + except urllib2.HTTPError: |
66 | + try_count += 1 |
67 | + except urllib2.URLError as e: |
68 | + try_count += 1 |
69 | + |
70 | + if response != '' and as_json: |
71 | + return json.loads(response) |
72 | + else: |
73 | + return response |
74 | |
75 | === added directory 'common/migrations' |
76 | === added file 'common/migrations/0001_create_common_app.py' |
77 | --- common/migrations/0001_create_common_app.py 1970-01-01 00:00:00 +0000 |
78 | +++ common/migrations/0001_create_common_app.py 2012-12-20 01:49:23 +0000 |
79 | @@ -0,0 +1,20 @@ |
80 | +# -*- coding: utf-8 -*- |
81 | +import datetime |
82 | +from south.db import db |
83 | +from south.v2 import SchemaMigration |
84 | +from django.db import models |
85 | + |
86 | + |
87 | +class Migration(SchemaMigration): |
88 | + |
89 | + def forwards(self, orm): |
90 | + pass |
91 | + |
92 | + def backwards(self, orm): |
93 | + pass |
94 | + |
95 | + models = { |
96 | + |
97 | + } |
98 | + |
99 | + complete_apps = ['common'] |
100 | \ No newline at end of file |
101 | |
102 | === added file 'common/migrations/0002_add_bug_model.py' |
103 | --- common/migrations/0002_add_bug_model.py 1970-01-01 00:00:00 +0000 |
104 | +++ common/migrations/0002_add_bug_model.py 2012-12-20 01:49:23 +0000 |
105 | @@ -0,0 +1,42 @@ |
106 | +# -*- coding: utf-8 -*- |
107 | +import datetime |
108 | +from south.db import db |
109 | +from south.v2 import SchemaMigration |
110 | +from django.db import models |
111 | + |
112 | + |
113 | +class Migration(SchemaMigration): |
114 | + |
115 | + def forwards(self, orm): |
116 | + # Adding model 'Bug' |
117 | + db.create_table('bugs', ( |
118 | + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), |
119 | + ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), |
120 | + ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), |
121 | + ('internal', self.gf('django.db.models.fields.BooleanField')(default=True)), |
122 | + ('publish', self.gf('django.db.models.fields.BooleanField')(default=True)), |
123 | + ('bug_no', self.gf('django.db.models.fields.CharField')(max_length=255)), |
124 | + ('status', self.gf('django.db.models.fields.CharField')(max_length=255)), |
125 | + )) |
126 | + db.send_create_signal('common', ['Bug']) |
127 | + |
128 | + |
129 | + def backwards(self, orm): |
130 | + # Deleting model 'Bug' |
131 | + db.delete_table('bugs') |
132 | + |
133 | + |
134 | + models = { |
135 | + 'common.bug': { |
136 | + 'Meta': {'object_name': 'Bug', 'db_table': "'bugs'"}, |
137 | + 'bug_no': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
138 | + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
139 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
140 | + 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
141 | + 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
142 | + 'status': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
143 | + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
144 | + } |
145 | + } |
146 | + |
147 | + complete_apps = ['common'] |
148 | \ No newline at end of file |
149 | |
150 | === added file 'common/migrations/__init__.py' |
151 | === modified file 'common/models.py' |
152 | --- common/models.py 2012-12-02 02:51:10 +0000 |
153 | +++ common/models.py 2012-12-20 01:49:23 +0000 |
154 | @@ -13,4 +13,38 @@ |
155 | # You should have received a copy of the GNU Affero General Public License along |
156 | # with this program. If not, see <http://www.gnu.org/licenses/>. |
157 | |
158 | - |
159 | +from django.db import models |
160 | +import datetime |
161 | + |
162 | + |
163 | +class DashboardBaseModel(models.Model): |
164 | + """ |
165 | + Common base class that provides fields needed on every model. |
166 | + """ |
167 | + class Meta: |
168 | + abstract = True |
169 | + |
170 | + created_at = models.DateTimeField(auto_now_add = True) |
171 | + updated_at = models.DateTimeField(auto_now = True) |
172 | + internal = models.BooleanField(default=True) |
173 | + publish = models.BooleanField(default=True) |
174 | + |
175 | + |
176 | +class Bug(DashboardBaseModel): |
177 | + class Meta: |
178 | + db_table = 'bugs' |
179 | + bug_no = models.CharField(max_length=255) |
180 | + status = models.CharField(max_length=255) |
181 | + |
182 | + def __unicode__(self): |
183 | + return self.bug_no |
184 | + |
185 | + @property |
186 | + def debug_str(self): |
187 | + return "{}-{}-{}-{}-{}".format( |
188 | + self.id, |
189 | + self.bug_no, |
190 | + self.status, |
191 | + self.created_at, |
192 | + self.updated_at, |
193 | + ) |
194 | |
195 | === renamed file 'dashboard/utils.py' => 'common/utils.py' |
196 | === modified file 'common/views.py' |
197 | --- common/views.py 2012-12-02 02:51:10 +0000 |
198 | +++ common/views.py 2012-12-20 01:49:23 +0000 |
199 | @@ -13,4 +13,23 @@ |
200 | # You should have received a copy of the GNU Affero General Public License along |
201 | # with this program. If not, see <http://www.gnu.org/licenses/>. |
202 | |
203 | -# Create your views here. |
204 | +from django.views.decorators.http import require_GET |
205 | +from django.shortcuts import redirect, render_to_response |
206 | +import json |
207 | + |
208 | +from django.views.decorators.csrf import csrf_exempt |
209 | +from django.views.decorators.http import ( |
210 | + require_GET, |
211 | + ) |
212 | + |
213 | +from common.utils import ( |
214 | + JSONResponse, |
215 | + ) |
216 | + |
217 | +@require_GET |
218 | +def index(request): |
219 | + return redirect('smoke/raring/flat/') |
220 | + |
221 | +@require_GET |
222 | +def api_help(request): |
223 | + return render_to_response('api_help.html') |
224 | |
225 | === removed directory 'dashboard' |
226 | === removed directory 'dashboard/migrations' |
227 | === removed file 'dashboard/migrations/0001_initial.py' |
228 | --- dashboard/migrations/0001_initial.py 2012-12-02 02:51:10 +0000 |
229 | +++ dashboard/migrations/0001_initial.py 1970-01-01 00:00:00 +0000 |
230 | @@ -1,179 +0,0 @@ |
231 | -# QA Dashboard |
232 | -# Copyright 2012 Canonical Ltd. |
233 | - |
234 | -# This program is free software: you can redistribute it and/or modify it |
235 | -# under the terms of the GNU Affero General Public License version 3, as published |
236 | -# by the Free Software Foundation. |
237 | - |
238 | -# This program is distributed in the hope that it will be useful, but |
239 | -# WITHOUT ANY WARRANTY; without even the implied warranties of |
240 | -# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
241 | -# PURPOSE. See the GNU Affero General Public License for more details. |
242 | - |
243 | -# You should have received a copy of the GNU Affero General Public License along |
244 | -# with this program. If not, see <http://www.gnu.org/licenses/>. |
245 | - |
246 | -# -*- coding: utf-8 -*- |
247 | -import datetime |
248 | -from south.db import db |
249 | -from south.v2 import SchemaMigration |
250 | -from django.db import models |
251 | - |
252 | - |
253 | -class Migration(SchemaMigration): |
254 | - |
255 | - def forwards(self, orm): |
256 | - # Adding model 'Bug' |
257 | - db.create_table('bugs', ( |
258 | - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), |
259 | - ('bug_no', self.gf('django.db.models.fields.CharField')(max_length=255)), |
260 | - ('status', self.gf('django.db.models.fields.CharField')(max_length=255)), |
261 | - ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), |
262 | - ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), |
263 | - )) |
264 | - db.send_create_signal('dashboard', ['Bug']) |
265 | - |
266 | - # Adding model 'ResultLog' |
267 | - db.create_table('result_logs', ( |
268 | - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), |
269 | - ('display_name', self.gf('django.db.models.fields.CharField')(max_length=255, null=True)), |
270 | - ('path', self.gf('django.db.models.fields.TextField')()), |
271 | - ('result', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['dashboard.Result'])), |
272 | - ('remote_url', self.gf('django.db.models.fields.URLField')(max_length=200)), |
273 | - ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), |
274 | - ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), |
275 | - )) |
276 | - db.send_create_signal('dashboard', ['ResultLog']) |
277 | - |
278 | - # Adding model 'Run' |
279 | - db.create_table('runs', ( |
280 | - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), |
281 | - ('build_no', self.gf('django.db.models.fields.CharField')(max_length=200, db_index=True)), |
282 | - ('release', self.gf('django.db.models.fields.CharField')(max_length=200, db_index=True)), |
283 | - ('flavor', self.gf('django.db.models.fields.CharField')(max_length=200, db_index=True)), |
284 | - ('test_type', self.gf('django.db.models.fields.IntegerField')(null=True)), |
285 | - ('ran_at', self.gf('django.db.models.fields.DateTimeField')()), |
286 | - ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), |
287 | - ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), |
288 | - )) |
289 | - db.send_create_signal('dashboard', ['Run']) |
290 | - |
291 | - # Adding model 'Build' |
292 | - db.create_table('builds', ( |
293 | - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), |
294 | - ('run', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['dashboard.Run'])), |
295 | - ('name', self.gf('django.db.models.fields.CharField')(max_length=200, null=True)), |
296 | - ('flavor', self.gf('django.db.models.fields.CharField')(max_length=200)), |
297 | - ('variant', self.gf('django.db.models.fields.CharField')(max_length=200)), |
298 | - ('arch', self.gf('django.db.models.fields.CharField')(max_length=200)), |
299 | - ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), |
300 | - ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), |
301 | - )) |
302 | - db.send_create_signal('dashboard', ['Build']) |
303 | - |
304 | - # Adding model 'Result' |
305 | - db.create_table('results', ( |
306 | - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), |
307 | - ('build', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['dashboard.Build'])), |
308 | - ('name', self.gf('django.db.models.fields.CharField')(max_length=255)), |
309 | - ('jenkins_build', self.gf('django.db.models.fields.CharField')(max_length=255)), |
310 | - ('jenkins_url', self.gf('django.db.models.fields.URLField')(max_length=200)), |
311 | - ('fail_count', self.gf('django.db.models.fields.IntegerField')()), |
312 | - ('skip_count', self.gf('django.db.models.fields.IntegerField')()), |
313 | - ('pass_count', self.gf('django.db.models.fields.IntegerField')()), |
314 | - ('total_count', self.gf('django.db.models.fields.IntegerField')()), |
315 | - ('ran_at', self.gf('django.db.models.fields.DateTimeField')()), |
316 | - ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), |
317 | - ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), |
318 | - )) |
319 | - db.send_create_signal('dashboard', ['Result']) |
320 | - |
321 | - # Adding M2M table for field bugs on 'Result' |
322 | - db.create_table('results_bugs', ( |
323 | - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), |
324 | - ('result', models.ForeignKey(orm['dashboard.result'], null=False)), |
325 | - ('bug', models.ForeignKey(orm['dashboard.bug'], null=False)) |
326 | - )) |
327 | - db.create_unique('results_bugs', ['result_id', 'bug_id']) |
328 | - |
329 | - |
330 | - def backwards(self, orm): |
331 | - # Deleting model 'Bug' |
332 | - db.delete_table('bugs') |
333 | - |
334 | - # Deleting model 'ResultLog' |
335 | - db.delete_table('result_logs') |
336 | - |
337 | - # Deleting model 'Run' |
338 | - db.delete_table('runs') |
339 | - |
340 | - # Deleting model 'Build' |
341 | - db.delete_table('builds') |
342 | - |
343 | - # Deleting model 'Result' |
344 | - db.delete_table('results') |
345 | - |
346 | - # Removing M2M table for field bugs on 'Result' |
347 | - db.delete_table('results_bugs') |
348 | - |
349 | - |
350 | - models = { |
351 | - 'dashboard.bug': { |
352 | - 'Meta': {'object_name': 'Bug', 'db_table': "'bugs'"}, |
353 | - 'bug_no': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
354 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
355 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
356 | - 'status': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
357 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
358 | - }, |
359 | - 'dashboard.build': { |
360 | - 'Meta': {'object_name': 'Build', 'db_table': "'builds'"}, |
361 | - 'arch': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
362 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
363 | - 'flavor': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
364 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
365 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}), |
366 | - 'run': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Run']"}), |
367 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
368 | - 'variant': ('django.db.models.fields.CharField', [], {'max_length': '200'}) |
369 | - }, |
370 | - 'dashboard.result': { |
371 | - 'Meta': {'object_name': 'Result', 'db_table': "'results'"}, |
372 | - 'bugs': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard.Bug']", 'symmetrical': 'False'}), |
373 | - 'build': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Build']"}), |
374 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
375 | - 'fail_count': ('django.db.models.fields.IntegerField', [], {}), |
376 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
377 | - 'jenkins_build': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
378 | - 'jenkins_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
379 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
380 | - 'pass_count': ('django.db.models.fields.IntegerField', [], {}), |
381 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
382 | - 'skip_count': ('django.db.models.fields.IntegerField', [], {}), |
383 | - 'total_count': ('django.db.models.fields.IntegerField', [], {}), |
384 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
385 | - }, |
386 | - 'dashboard.resultlog': { |
387 | - 'Meta': {'object_name': 'ResultLog', 'db_table': "'result_logs'"}, |
388 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
389 | - 'display_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), |
390 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
391 | - 'path': ('django.db.models.fields.TextField', [], {}), |
392 | - 'remote_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
393 | - 'result': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Result']"}), |
394 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
395 | - }, |
396 | - 'dashboard.run': { |
397 | - 'Meta': {'object_name': 'Run', 'db_table': "'runs'"}, |
398 | - 'build_no': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
399 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
400 | - 'flavor': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
401 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
402 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
403 | - 'release': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
404 | - 'test_type': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), |
405 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
406 | - } |
407 | - } |
408 | - |
409 | - complete_apps = ['dashboard'] |
410 | \ No newline at end of file |
411 | |
412 | === removed file 'dashboard/migrations/0002_auto__add_field_run_internal__add_field_bug_internal__add_field_build_.py' |
413 | --- dashboard/migrations/0002_auto__add_field_run_internal__add_field_bug_internal__add_field_build_.py 2012-12-02 02:51:10 +0000 |
414 | +++ dashboard/migrations/0002_auto__add_field_run_internal__add_field_bug_internal__add_field_build_.py 1970-01-01 00:00:00 +0000 |
415 | @@ -1,133 +0,0 @@ |
416 | -# QA Dashboard |
417 | -# Copyright 2012 Canonical Ltd. |
418 | - |
419 | -# This program is free software: you can redistribute it and/or modify it |
420 | -# under the terms of the GNU Affero General Public License version 3, as published |
421 | -# by the Free Software Foundation. |
422 | - |
423 | -# This program is distributed in the hope that it will be useful, but |
424 | -# WITHOUT ANY WARRANTY; without even the implied warranties of |
425 | -# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
426 | -# PURPOSE. See the GNU Affero General Public License for more details. |
427 | - |
428 | -# You should have received a copy of the GNU Affero General Public License along |
429 | -# with this program. If not, see <http://www.gnu.org/licenses/>. |
430 | - |
431 | -# -*- coding: utf-8 -*- |
432 | -import datetime |
433 | -from south.db import db |
434 | -from south.v2 import SchemaMigration |
435 | -from django.db import models |
436 | - |
437 | - |
438 | -class Migration(SchemaMigration): |
439 | - |
440 | - def forwards(self, orm): |
441 | - # Adding field 'Run.internal' |
442 | - db.add_column('runs', 'internal', |
443 | - self.gf('django.db.models.fields.BooleanField')(default=True), |
444 | - keep_default=False) |
445 | - |
446 | - # Adding field 'Bug.internal' |
447 | - db.add_column('bugs', 'internal', |
448 | - self.gf('django.db.models.fields.BooleanField')(default=True), |
449 | - keep_default=False) |
450 | - |
451 | - # Adding field 'Build.internal' |
452 | - db.add_column('builds', 'internal', |
453 | - self.gf('django.db.models.fields.BooleanField')(default=True), |
454 | - keep_default=False) |
455 | - |
456 | - # Adding field 'ResultLog.internal' |
457 | - db.add_column('result_logs', 'internal', |
458 | - self.gf('django.db.models.fields.BooleanField')(default=True), |
459 | - keep_default=False) |
460 | - |
461 | - # Adding field 'Result.internal' |
462 | - db.add_column('results', 'internal', |
463 | - self.gf('django.db.models.fields.BooleanField')(default=True), |
464 | - keep_default=False) |
465 | - |
466 | - |
467 | - def backwards(self, orm): |
468 | - # Deleting field 'Run.internal' |
469 | - db.delete_column('runs', 'internal') |
470 | - |
471 | - # Deleting field 'Bug.internal' |
472 | - db.delete_column('bugs', 'internal') |
473 | - |
474 | - # Deleting field 'Build.internal' |
475 | - db.delete_column('builds', 'internal') |
476 | - |
477 | - # Deleting field 'ResultLog.internal' |
478 | - db.delete_column('result_logs', 'internal') |
479 | - |
480 | - # Deleting field 'Result.internal' |
481 | - db.delete_column('results', 'internal') |
482 | - |
483 | - |
484 | - models = { |
485 | - 'dashboard.bug': { |
486 | - 'Meta': {'object_name': 'Bug', 'db_table': "'bugs'"}, |
487 | - 'bug_no': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
488 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
489 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
490 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
491 | - 'status': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
492 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
493 | - }, |
494 | - 'dashboard.build': { |
495 | - 'Meta': {'object_name': 'Build', 'db_table': "'builds'"}, |
496 | - 'arch': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
497 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
498 | - 'flavor': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
499 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
500 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
501 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}), |
502 | - 'run': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Run']"}), |
503 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
504 | - 'variant': ('django.db.models.fields.CharField', [], {'max_length': '200'}) |
505 | - }, |
506 | - 'dashboard.result': { |
507 | - 'Meta': {'object_name': 'Result', 'db_table': "'results'"}, |
508 | - 'bugs': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard.Bug']", 'symmetrical': 'False'}), |
509 | - 'build': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Build']"}), |
510 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
511 | - 'fail_count': ('django.db.models.fields.IntegerField', [], {}), |
512 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
513 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
514 | - 'jenkins_build': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
515 | - 'jenkins_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
516 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
517 | - 'pass_count': ('django.db.models.fields.IntegerField', [], {}), |
518 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
519 | - 'skip_count': ('django.db.models.fields.IntegerField', [], {}), |
520 | - 'total_count': ('django.db.models.fields.IntegerField', [], {}), |
521 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
522 | - }, |
523 | - 'dashboard.resultlog': { |
524 | - 'Meta': {'object_name': 'ResultLog', 'db_table': "'result_logs'"}, |
525 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
526 | - 'display_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), |
527 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
528 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
529 | - 'path': ('django.db.models.fields.TextField', [], {}), |
530 | - 'remote_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
531 | - 'result': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Result']"}), |
532 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
533 | - }, |
534 | - 'dashboard.run': { |
535 | - 'Meta': {'object_name': 'Run', 'db_table': "'runs'"}, |
536 | - 'build_no': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
537 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
538 | - 'flavor': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
539 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
540 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
541 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
542 | - 'release': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
543 | - 'test_type': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), |
544 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
545 | - } |
546 | - } |
547 | - |
548 | - complete_apps = ['dashboard'] |
549 | \ No newline at end of file |
550 | |
551 | === removed file 'dashboard/migrations/0003_auto__add_field_run_publish__add_field_bug_publish__add_field_build_pu.py' |
552 | --- dashboard/migrations/0003_auto__add_field_run_publish__add_field_bug_publish__add_field_build_pu.py 2012-12-02 02:51:10 +0000 |
553 | +++ dashboard/migrations/0003_auto__add_field_run_publish__add_field_bug_publish__add_field_build_pu.py 1970-01-01 00:00:00 +0000 |
554 | @@ -1,138 +0,0 @@ |
555 | -# QA Dashboard |
556 | -# Copyright 2012 Canonical Ltd. |
557 | - |
558 | -# This program is free software: you can redistribute it and/or modify it |
559 | -# under the terms of the GNU Affero General Public License version 3, as published |
560 | -# by the Free Software Foundation. |
561 | - |
562 | -# This program is distributed in the hope that it will be useful, but |
563 | -# WITHOUT ANY WARRANTY; without even the implied warranties of |
564 | -# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
565 | -# PURPOSE. See the GNU Affero General Public License for more details. |
566 | - |
567 | -# You should have received a copy of the GNU Affero General Public License along |
568 | -# with this program. If not, see <http://www.gnu.org/licenses/>. |
569 | - |
570 | -# -*- coding: utf-8 -*- |
571 | -import datetime |
572 | -from south.db import db |
573 | -from south.v2 import SchemaMigration |
574 | -from django.db import models |
575 | - |
576 | - |
577 | -class Migration(SchemaMigration): |
578 | - |
579 | - def forwards(self, orm): |
580 | - # Adding field 'Run.publish' |
581 | - db.add_column('runs', 'publish', |
582 | - self.gf('django.db.models.fields.BooleanField')(default=True), |
583 | - keep_default=False) |
584 | - |
585 | - # Adding field 'Bug.publish' |
586 | - db.add_column('bugs', 'publish', |
587 | - self.gf('django.db.models.fields.BooleanField')(default=True), |
588 | - keep_default=False) |
589 | - |
590 | - # Adding field 'Build.publish' |
591 | - db.add_column('builds', 'publish', |
592 | - self.gf('django.db.models.fields.BooleanField')(default=True), |
593 | - keep_default=False) |
594 | - |
595 | - # Adding field 'ResultLog.publish' |
596 | - db.add_column('result_logs', 'publish', |
597 | - self.gf('django.db.models.fields.BooleanField')(default=True), |
598 | - keep_default=False) |
599 | - |
600 | - # Adding field 'Result.publish' |
601 | - db.add_column('results', 'publish', |
602 | - self.gf('django.db.models.fields.BooleanField')(default=True), |
603 | - keep_default=False) |
604 | - |
605 | - |
606 | - def backwards(self, orm): |
607 | - # Deleting field 'Run.publish' |
608 | - db.delete_column('runs', 'publish') |
609 | - |
610 | - # Deleting field 'Bug.publish' |
611 | - db.delete_column('bugs', 'publish') |
612 | - |
613 | - # Deleting field 'Build.publish' |
614 | - db.delete_column('builds', 'publish') |
615 | - |
616 | - # Deleting field 'ResultLog.publish' |
617 | - db.delete_column('result_logs', 'publish') |
618 | - |
619 | - # Deleting field 'Result.publish' |
620 | - db.delete_column('results', 'publish') |
621 | - |
622 | - |
623 | - models = { |
624 | - 'dashboard.bug': { |
625 | - 'Meta': {'object_name': 'Bug', 'db_table': "'bugs'"}, |
626 | - 'bug_no': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
627 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
628 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
629 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
630 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
631 | - 'status': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
632 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
633 | - }, |
634 | - 'dashboard.build': { |
635 | - 'Meta': {'object_name': 'Build', 'db_table': "'builds'"}, |
636 | - 'arch': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
637 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
638 | - 'flavor': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
639 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
640 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
641 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}), |
642 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
643 | - 'run': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Run']"}), |
644 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
645 | - 'variant': ('django.db.models.fields.CharField', [], {'max_length': '200'}) |
646 | - }, |
647 | - 'dashboard.result': { |
648 | - 'Meta': {'object_name': 'Result', 'db_table': "'results'"}, |
649 | - 'bugs': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard.Bug']", 'symmetrical': 'False'}), |
650 | - 'build': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Build']"}), |
651 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
652 | - 'fail_count': ('django.db.models.fields.IntegerField', [], {}), |
653 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
654 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
655 | - 'jenkins_build': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
656 | - 'jenkins_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
657 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
658 | - 'pass_count': ('django.db.models.fields.IntegerField', [], {}), |
659 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
660 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
661 | - 'skip_count': ('django.db.models.fields.IntegerField', [], {}), |
662 | - 'total_count': ('django.db.models.fields.IntegerField', [], {}), |
663 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
664 | - }, |
665 | - 'dashboard.resultlog': { |
666 | - 'Meta': {'object_name': 'ResultLog', 'db_table': "'result_logs'"}, |
667 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
668 | - 'display_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), |
669 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
670 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
671 | - 'path': ('django.db.models.fields.TextField', [], {}), |
672 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
673 | - 'remote_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
674 | - 'result': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Result']"}), |
675 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
676 | - }, |
677 | - 'dashboard.run': { |
678 | - 'Meta': {'object_name': 'Run', 'db_table': "'runs'"}, |
679 | - 'build_no': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
680 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
681 | - 'flavor': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
682 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
683 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
684 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
685 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
686 | - 'release': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
687 | - 'test_type': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), |
688 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
689 | - } |
690 | - } |
691 | - |
692 | - complete_apps = ['dashboard'] |
693 | \ No newline at end of file |
694 | |
695 | === removed file 'dashboard/migrations/0004_auto__add_kernel__add_sruresult__add_sruresultlog.py' |
696 | --- dashboard/migrations/0004_auto__add_kernel__add_sruresult__add_sruresultlog.py 2012-12-02 02:51:10 +0000 |
697 | +++ dashboard/migrations/0004_auto__add_kernel__add_sruresult__add_sruresultlog.py 1970-01-01 00:00:00 +0000 |
698 | @@ -1,208 +0,0 @@ |
699 | -# QA Dashboard |
700 | -# Copyright 2012 Canonical Ltd. |
701 | - |
702 | -# This program is free software: you can redistribute it and/or modify it |
703 | -# under the terms of the GNU Affero General Public License version 3, as published |
704 | -# by the Free Software Foundation. |
705 | - |
706 | -# This program is distributed in the hope that it will be useful, but |
707 | -# WITHOUT ANY WARRANTY; without even the implied warranties of |
708 | -# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
709 | -# PURPOSE. See the GNU Affero General Public License for more details. |
710 | - |
711 | -# You should have received a copy of the GNU Affero General Public License along |
712 | -# with this program. If not, see <http://www.gnu.org/licenses/>. |
713 | - |
714 | -# encoding: utf-8 |
715 | -import datetime |
716 | -from south.db import db |
717 | -from south.v2 import SchemaMigration |
718 | -from django.db import models |
719 | - |
720 | -class Migration(SchemaMigration): |
721 | - |
722 | - def forwards(self, orm): |
723 | - |
724 | - # Adding model 'Kernel' |
725 | - db.create_table('kernels', ( |
726 | - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), |
727 | - ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), |
728 | - ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), |
729 | - ('internal', self.gf('django.db.models.fields.BooleanField')(default=True)), |
730 | - ('publish', self.gf('django.db.models.fields.BooleanField')(default=True)), |
731 | - ('release', self.gf('django.db.models.fields.CharField')(max_length=100)), |
732 | - ('variant', self.gf('django.db.models.fields.CharField')(max_length=100)), |
733 | - ('arch', self.gf('django.db.models.fields.CharField')(max_length=100)), |
734 | - ('gpu', self.gf('django.db.models.fields.CharField')(max_length=100)), |
735 | - )) |
736 | - db.send_create_signal('dashboard', ['Kernel']) |
737 | - |
738 | - # Adding model 'SRUResult' |
739 | - db.create_table('sru_results', ( |
740 | - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), |
741 | - ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), |
742 | - ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), |
743 | - ('internal', self.gf('django.db.models.fields.BooleanField')(default=True)), |
744 | - ('publish', self.gf('django.db.models.fields.BooleanField')(default=True)), |
745 | - ('kernel', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['dashboard.Kernel'])), |
746 | - ('jenkins_build', self.gf('django.db.models.fields.CharField')(max_length=255)), |
747 | - ('jenkins_url', self.gf('django.db.models.fields.URLField')(max_length=200)), |
748 | - ('name', self.gf('django.db.models.fields.CharField')(max_length=255)), |
749 | - ('pass_count', self.gf('django.db.models.fields.IntegerField')()), |
750 | - ('fail_count', self.gf('django.db.models.fields.IntegerField')()), |
751 | - ('skip_count', self.gf('django.db.models.fields.IntegerField')()), |
752 | - ('total_count', self.gf('django.db.models.fields.IntegerField')()), |
753 | - ('ran_at', self.gf('django.db.models.fields.DateTimeField')()), |
754 | - )) |
755 | - db.send_create_signal('dashboard', ['SRUResult']) |
756 | - |
757 | - # Adding M2M table for field bugs on 'SRUResult' |
758 | - db.create_table('sru_results_bugs', ( |
759 | - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), |
760 | - ('sruresult', models.ForeignKey(orm['dashboard.sruresult'], null=False)), |
761 | - ('bug', models.ForeignKey(orm['dashboard.bug'], null=False)) |
762 | - )) |
763 | - db.create_unique('sru_results_bugs', ['sruresult_id', 'bug_id']) |
764 | - |
765 | - # Adding model 'SRUResultLog' |
766 | - db.create_table('sru_result_logs', ( |
767 | - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), |
768 | - ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), |
769 | - ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), |
770 | - ('internal', self.gf('django.db.models.fields.BooleanField')(default=True)), |
771 | - ('publish', self.gf('django.db.models.fields.BooleanField')(default=True)), |
772 | - ('display_name', self.gf('django.db.models.fields.CharField')(max_length=255, null=True)), |
773 | - ('path', self.gf('django.db.models.fields.TextField')()), |
774 | - ('sru_result', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['dashboard.SRUResult'])), |
775 | - ('remote_url', self.gf('django.db.models.fields.URLField')(max_length=200)), |
776 | - )) |
777 | - db.send_create_signal('dashboard', ['SRUResultLog']) |
778 | - |
779 | - |
780 | - def backwards(self, orm): |
781 | - |
782 | - # Deleting model 'Kernel' |
783 | - db.delete_table('kernels') |
784 | - |
785 | - # Deleting model 'SRUResult' |
786 | - db.delete_table('sru_results') |
787 | - |
788 | - # Removing M2M table for field bugs on 'SRUResult' |
789 | - db.delete_table('sru_results_bugs') |
790 | - |
791 | - # Deleting model 'SRUResultLog' |
792 | - db.delete_table('sru_result_logs') |
793 | - |
794 | - |
795 | - models = { |
796 | - 'dashboard.bug': { |
797 | - 'Meta': {'object_name': 'Bug', 'db_table': "'bugs'"}, |
798 | - 'bug_no': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
799 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
800 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
801 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
802 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
803 | - 'status': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
804 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
805 | - }, |
806 | - 'dashboard.build': { |
807 | - 'Meta': {'object_name': 'Build', 'db_table': "'builds'"}, |
808 | - 'arch': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
809 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
810 | - 'flavor': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
811 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
812 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
813 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}), |
814 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
815 | - 'run': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Run']"}), |
816 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
817 | - 'variant': ('django.db.models.fields.CharField', [], {'max_length': '200'}) |
818 | - }, |
819 | - 'dashboard.kernel': { |
820 | - 'Meta': {'object_name': 'Kernel', 'db_table': "'kernels'"}, |
821 | - 'arch': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
822 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
823 | - 'gpu': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
824 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
825 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
826 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
827 | - 'release': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
828 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
829 | - 'variant': ('django.db.models.fields.CharField', [], {'max_length': '100'}) |
830 | - }, |
831 | - 'dashboard.result': { |
832 | - 'Meta': {'object_name': 'Result', 'db_table': "'results'"}, |
833 | - 'bugs': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard.Bug']", 'symmetrical': 'False'}), |
834 | - 'build': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Build']"}), |
835 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
836 | - 'fail_count': ('django.db.models.fields.IntegerField', [], {}), |
837 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
838 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
839 | - 'jenkins_build': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
840 | - 'jenkins_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
841 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
842 | - 'pass_count': ('django.db.models.fields.IntegerField', [], {}), |
843 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
844 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
845 | - 'skip_count': ('django.db.models.fields.IntegerField', [], {}), |
846 | - 'total_count': ('django.db.models.fields.IntegerField', [], {}), |
847 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
848 | - }, |
849 | - 'dashboard.resultlog': { |
850 | - 'Meta': {'object_name': 'ResultLog', 'db_table': "'result_logs'"}, |
851 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
852 | - 'display_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), |
853 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
854 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
855 | - 'path': ('django.db.models.fields.TextField', [], {}), |
856 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
857 | - 'remote_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
858 | - 'result': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Result']"}), |
859 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
860 | - }, |
861 | - 'dashboard.run': { |
862 | - 'Meta': {'object_name': 'Run', 'db_table': "'runs'"}, |
863 | - 'build_no': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
864 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
865 | - 'flavor': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
866 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
867 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
868 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
869 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
870 | - 'release': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
871 | - 'test_type': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), |
872 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
873 | - }, |
874 | - 'dashboard.sruresult': { |
875 | - 'Meta': {'object_name': 'SRUResult', 'db_table': "'sru_results'"}, |
876 | - 'bugs': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard.Bug']", 'symmetrical': 'False'}), |
877 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
878 | - 'fail_count': ('django.db.models.fields.IntegerField', [], {}), |
879 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
880 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
881 | - 'jenkins_build': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
882 | - 'jenkins_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
883 | - 'kernel': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Kernel']"}), |
884 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
885 | - 'pass_count': ('django.db.models.fields.IntegerField', [], {}), |
886 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
887 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
888 | - 'skip_count': ('django.db.models.fields.IntegerField', [], {}), |
889 | - 'total_count': ('django.db.models.fields.IntegerField', [], {}), |
890 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
891 | - }, |
892 | - 'dashboard.sruresultlog': { |
893 | - 'Meta': {'object_name': 'SRUResultLog', 'db_table': "'sru_result_logs'"}, |
894 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
895 | - 'display_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), |
896 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
897 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
898 | - 'path': ('django.db.models.fields.TextField', [], {}), |
899 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
900 | - 'remote_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
901 | - 'sru_result': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.SRUResult']"}), |
902 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
903 | - } |
904 | - } |
905 | - |
906 | - complete_apps = ['dashboard'] |
907 | |
908 | === removed file 'dashboard/migrations/0005_auto__add_field_kernel_job_type.py' |
909 | --- dashboard/migrations/0005_auto__add_field_kernel_job_type.py 2012-12-02 02:51:10 +0000 |
910 | +++ dashboard/migrations/0005_auto__add_field_kernel_job_type.py 1970-01-01 00:00:00 +0000 |
911 | @@ -1,148 +0,0 @@ |
912 | -# QA Dashboard |
913 | -# Copyright 2012 Canonical Ltd. |
914 | - |
915 | -# This program is free software: you can redistribute it and/or modify it |
916 | -# under the terms of the GNU Affero General Public License version 3, as published |
917 | -# by the Free Software Foundation. |
918 | - |
919 | -# This program is distributed in the hope that it will be useful, but |
920 | -# WITHOUT ANY WARRANTY; without even the implied warranties of |
921 | -# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
922 | -# PURPOSE. See the GNU Affero General Public License for more details. |
923 | - |
924 | -# You should have received a copy of the GNU Affero General Public License along |
925 | -# with this program. If not, see <http://www.gnu.org/licenses/>. |
926 | - |
927 | -# encoding: utf-8 |
928 | -import datetime |
929 | -from south.db import db |
930 | -from south.v2 import SchemaMigration |
931 | -from django.db import models |
932 | - |
933 | -class Migration(SchemaMigration): |
934 | - |
935 | - def forwards(self, orm): |
936 | - |
937 | - # Adding field 'Kernel.job_type' |
938 | - db.add_column('kernels', 'job_type', self.gf('django.db.models.fields.CharField')(default='sru_kernel', max_length=100), keep_default=False) |
939 | - |
940 | - |
941 | - def backwards(self, orm): |
942 | - |
943 | - # Deleting field 'Kernel.job_type' |
944 | - db.delete_column('kernels', 'job_type') |
945 | - |
946 | - |
947 | - models = { |
948 | - 'dashboard.bug': { |
949 | - 'Meta': {'object_name': 'Bug', 'db_table': "'bugs'"}, |
950 | - 'bug_no': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
951 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
952 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
953 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
954 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
955 | - 'status': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
956 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
957 | - }, |
958 | - 'dashboard.build': { |
959 | - 'Meta': {'object_name': 'Build', 'db_table': "'builds'"}, |
960 | - 'arch': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
961 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
962 | - 'flavor': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
963 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
964 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
965 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}), |
966 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
967 | - 'run': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Run']"}), |
968 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
969 | - 'variant': ('django.db.models.fields.CharField', [], {'max_length': '200'}) |
970 | - }, |
971 | - 'dashboard.kernel': { |
972 | - 'Meta': {'object_name': 'Kernel', 'db_table': "'kernels'"}, |
973 | - 'arch': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
974 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
975 | - 'gpu': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
976 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
977 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
978 | - 'job_type': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
979 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
980 | - 'release': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
981 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
982 | - 'variant': ('django.db.models.fields.CharField', [], {'max_length': '100'}) |
983 | - }, |
984 | - 'dashboard.result': { |
985 | - 'Meta': {'object_name': 'Result', 'db_table': "'results'"}, |
986 | - 'bugs': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard.Bug']", 'symmetrical': 'False'}), |
987 | - 'build': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Build']"}), |
988 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
989 | - 'fail_count': ('django.db.models.fields.IntegerField', [], {}), |
990 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
991 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
992 | - 'jenkins_build': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
993 | - 'jenkins_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
994 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
995 | - 'pass_count': ('django.db.models.fields.IntegerField', [], {}), |
996 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
997 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
998 | - 'skip_count': ('django.db.models.fields.IntegerField', [], {}), |
999 | - 'total_count': ('django.db.models.fields.IntegerField', [], {}), |
1000 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1001 | - }, |
1002 | - 'dashboard.resultlog': { |
1003 | - 'Meta': {'object_name': 'ResultLog', 'db_table': "'result_logs'"}, |
1004 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1005 | - 'display_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), |
1006 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1007 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1008 | - 'path': ('django.db.models.fields.TextField', [], {}), |
1009 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1010 | - 'remote_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
1011 | - 'result': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Result']"}), |
1012 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1013 | - }, |
1014 | - 'dashboard.run': { |
1015 | - 'Meta': {'object_name': 'Run', 'db_table': "'runs'"}, |
1016 | - 'build_no': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
1017 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1018 | - 'flavor': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
1019 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1020 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1021 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1022 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
1023 | - 'release': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
1024 | - 'test_type': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), |
1025 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1026 | - }, |
1027 | - 'dashboard.sruresult': { |
1028 | - 'Meta': {'object_name': 'SRUResult', 'db_table': "'sru_results'"}, |
1029 | - 'bugs': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard.Bug']", 'symmetrical': 'False'}), |
1030 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1031 | - 'fail_count': ('django.db.models.fields.IntegerField', [], {}), |
1032 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1033 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1034 | - 'jenkins_build': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
1035 | - 'jenkins_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
1036 | - 'kernel': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Kernel']"}), |
1037 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
1038 | - 'pass_count': ('django.db.models.fields.IntegerField', [], {}), |
1039 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1040 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
1041 | - 'skip_count': ('django.db.models.fields.IntegerField', [], {}), |
1042 | - 'total_count': ('django.db.models.fields.IntegerField', [], {}), |
1043 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1044 | - }, |
1045 | - 'dashboard.sruresultlog': { |
1046 | - 'Meta': {'object_name': 'SRUResultLog', 'db_table': "'sru_result_logs'"}, |
1047 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1048 | - 'display_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), |
1049 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1050 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1051 | - 'path': ('django.db.models.fields.TextField', [], {}), |
1052 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1053 | - 'remote_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
1054 | - 'sru_result': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.SRUResult']"}), |
1055 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1056 | - } |
1057 | - } |
1058 | - |
1059 | - complete_apps = ['dashboard'] |
1060 | |
1061 | === removed file 'dashboard/migrations/0006_auto__add_field_sruresult_kernel_version.py' |
1062 | --- dashboard/migrations/0006_auto__add_field_sruresult_kernel_version.py 2012-12-02 02:51:10 +0000 |
1063 | +++ dashboard/migrations/0006_auto__add_field_sruresult_kernel_version.py 1970-01-01 00:00:00 +0000 |
1064 | @@ -1,149 +0,0 @@ |
1065 | -# QA Dashboard |
1066 | -# Copyright 2012 Canonical Ltd. |
1067 | - |
1068 | -# This program is free software: you can redistribute it and/or modify it |
1069 | -# under the terms of the GNU Affero General Public License version 3, as published |
1070 | -# by the Free Software Foundation. |
1071 | - |
1072 | -# This program is distributed in the hope that it will be useful, but |
1073 | -# WITHOUT ANY WARRANTY; without even the implied warranties of |
1074 | -# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
1075 | -# PURPOSE. See the GNU Affero General Public License for more details. |
1076 | - |
1077 | -# You should have received a copy of the GNU Affero General Public License along |
1078 | -# with this program. If not, see <http://www.gnu.org/licenses/>. |
1079 | - |
1080 | -# encoding: utf-8 |
1081 | -import datetime |
1082 | -from south.db import db |
1083 | -from south.v2 import SchemaMigration |
1084 | -from django.db import models |
1085 | - |
1086 | -class Migration(SchemaMigration): |
1087 | - |
1088 | - def forwards(self, orm): |
1089 | - |
1090 | - # Adding field 'SRUResult.kernel_version' |
1091 | - db.add_column('sru_results', 'kernel_version', self.gf('django.db.models.fields.CharField')(default='Unknown', max_length=100), keep_default=False) |
1092 | - |
1093 | - |
1094 | - def backwards(self, orm): |
1095 | - |
1096 | - # Deleting field 'SRUResult.kernel_version' |
1097 | - db.delete_column('sru_results', 'kernel_version') |
1098 | - |
1099 | - |
1100 | - models = { |
1101 | - 'dashboard.bug': { |
1102 | - 'Meta': {'object_name': 'Bug', 'db_table': "'bugs'"}, |
1103 | - 'bug_no': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
1104 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1105 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1106 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1107 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1108 | - 'status': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
1109 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1110 | - }, |
1111 | - 'dashboard.build': { |
1112 | - 'Meta': {'object_name': 'Build', 'db_table': "'builds'"}, |
1113 | - 'arch': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
1114 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1115 | - 'flavor': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
1116 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1117 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1118 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}), |
1119 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1120 | - 'run': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Run']"}), |
1121 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
1122 | - 'variant': ('django.db.models.fields.CharField', [], {'max_length': '200'}) |
1123 | - }, |
1124 | - 'dashboard.kernel': { |
1125 | - 'Meta': {'object_name': 'Kernel', 'db_table': "'kernels'"}, |
1126 | - 'arch': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
1127 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1128 | - 'gpu': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
1129 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1130 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1131 | - 'job_type': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
1132 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1133 | - 'release': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
1134 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
1135 | - 'variant': ('django.db.models.fields.CharField', [], {'max_length': '100'}) |
1136 | - }, |
1137 | - 'dashboard.result': { |
1138 | - 'Meta': {'object_name': 'Result', 'db_table': "'results'"}, |
1139 | - 'bugs': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard.Bug']", 'symmetrical': 'False'}), |
1140 | - 'build': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Build']"}), |
1141 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1142 | - 'fail_count': ('django.db.models.fields.IntegerField', [], {}), |
1143 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1144 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1145 | - 'jenkins_build': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
1146 | - 'jenkins_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
1147 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
1148 | - 'pass_count': ('django.db.models.fields.IntegerField', [], {}), |
1149 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1150 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
1151 | - 'skip_count': ('django.db.models.fields.IntegerField', [], {}), |
1152 | - 'total_count': ('django.db.models.fields.IntegerField', [], {}), |
1153 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1154 | - }, |
1155 | - 'dashboard.resultlog': { |
1156 | - 'Meta': {'object_name': 'ResultLog', 'db_table': "'result_logs'"}, |
1157 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1158 | - 'display_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), |
1159 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1160 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1161 | - 'path': ('django.db.models.fields.TextField', [], {}), |
1162 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1163 | - 'remote_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
1164 | - 'result': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Result']"}), |
1165 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1166 | - }, |
1167 | - 'dashboard.run': { |
1168 | - 'Meta': {'object_name': 'Run', 'db_table': "'runs'"}, |
1169 | - 'build_no': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
1170 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1171 | - 'flavor': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
1172 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1173 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1174 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1175 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
1176 | - 'release': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
1177 | - 'test_type': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), |
1178 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1179 | - }, |
1180 | - 'dashboard.sruresult': { |
1181 | - 'Meta': {'object_name': 'SRUResult', 'db_table': "'sru_results'"}, |
1182 | - 'bugs': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard.Bug']", 'symmetrical': 'False'}), |
1183 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1184 | - 'fail_count': ('django.db.models.fields.IntegerField', [], {}), |
1185 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1186 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1187 | - 'jenkins_build': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
1188 | - 'jenkins_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
1189 | - 'kernel': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Kernel']"}), |
1190 | - 'kernel_version': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
1191 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
1192 | - 'pass_count': ('django.db.models.fields.IntegerField', [], {}), |
1193 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1194 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
1195 | - 'skip_count': ('django.db.models.fields.IntegerField', [], {}), |
1196 | - 'total_count': ('django.db.models.fields.IntegerField', [], {}), |
1197 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1198 | - }, |
1199 | - 'dashboard.sruresultlog': { |
1200 | - 'Meta': {'object_name': 'SRUResultLog', 'db_table': "'sru_result_logs'"}, |
1201 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1202 | - 'display_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), |
1203 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1204 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1205 | - 'path': ('django.db.models.fields.TextField', [], {}), |
1206 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1207 | - 'remote_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
1208 | - 'sru_result': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.SRUResult']"}), |
1209 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1210 | - } |
1211 | - } |
1212 | - |
1213 | - complete_apps = ['dashboard'] |
1214 | |
1215 | === removed file 'dashboard/migrations/0007_auto__add_field_kernel_version__del_field_sruresult_kernel_version.py' |
1216 | --- dashboard/migrations/0007_auto__add_field_kernel_version__del_field_sruresult_kernel_version.py 2012-12-02 02:51:10 +0000 |
1217 | +++ dashboard/migrations/0007_auto__add_field_kernel_version__del_field_sruresult_kernel_version.py 1970-01-01 00:00:00 +0000 |
1218 | @@ -1,155 +0,0 @@ |
1219 | -# QA Dashboard |
1220 | -# Copyright 2012 Canonical Ltd. |
1221 | - |
1222 | -# This program is free software: you can redistribute it and/or modify it |
1223 | -# under the terms of the GNU Affero General Public License version 3, as published |
1224 | -# by the Free Software Foundation. |
1225 | - |
1226 | -# This program is distributed in the hope that it will be useful, but |
1227 | -# WITHOUT ANY WARRANTY; without even the implied warranties of |
1228 | -# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
1229 | -# PURPOSE. See the GNU Affero General Public License for more details. |
1230 | - |
1231 | -# You should have received a copy of the GNU Affero General Public License along |
1232 | -# with this program. If not, see <http://www.gnu.org/licenses/>. |
1233 | - |
1234 | -# encoding: utf-8 |
1235 | -import datetime |
1236 | -from south.db import db |
1237 | -from south.v2 import SchemaMigration |
1238 | -from django.db import models |
1239 | - |
1240 | -class Migration(SchemaMigration): |
1241 | - |
1242 | - def forwards(self, orm): |
1243 | - |
1244 | - # Adding field 'Kernel.version' |
1245 | - db.add_column('kernels', 'version', self.gf('django.db.models.fields.CharField')(default='Unknown', max_length=100), keep_default=False) |
1246 | - |
1247 | - # Deleting field 'SRUResult.kernel_version' |
1248 | - db.delete_column('sru_results', 'kernel_version') |
1249 | - |
1250 | - |
1251 | - def backwards(self, orm): |
1252 | - |
1253 | - # Deleting field 'Kernel.version' |
1254 | - db.delete_column('kernels', 'version') |
1255 | - |
1256 | - # Adding field 'SRUResult.kernel_version' |
1257 | - db.add_column('sru_results', 'kernel_version', self.gf('django.db.models.fields.CharField')(default='Unknown', max_length=100), keep_default=False) |
1258 | - |
1259 | - |
1260 | - models = { |
1261 | - 'dashboard.bug': { |
1262 | - 'Meta': {'object_name': 'Bug', 'db_table': "'bugs'"}, |
1263 | - 'bug_no': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
1264 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1265 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1266 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1267 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1268 | - 'status': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
1269 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1270 | - }, |
1271 | - 'dashboard.build': { |
1272 | - 'Meta': {'object_name': 'Build', 'db_table': "'builds'"}, |
1273 | - 'arch': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
1274 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1275 | - 'flavor': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
1276 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1277 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1278 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}), |
1279 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1280 | - 'run': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Run']"}), |
1281 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
1282 | - 'variant': ('django.db.models.fields.CharField', [], {'max_length': '200'}) |
1283 | - }, |
1284 | - 'dashboard.kernel': { |
1285 | - 'Meta': {'object_name': 'Kernel', 'db_table': "'kernels'"}, |
1286 | - 'arch': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
1287 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1288 | - 'gpu': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
1289 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1290 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1291 | - 'job_type': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
1292 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1293 | - 'release': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
1294 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
1295 | - 'variant': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
1296 | - 'version': ('django.db.models.fields.CharField', [], {'max_length': '100'}) |
1297 | - }, |
1298 | - 'dashboard.result': { |
1299 | - 'Meta': {'object_name': 'Result', 'db_table': "'results'"}, |
1300 | - 'bugs': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard.Bug']", 'symmetrical': 'False'}), |
1301 | - 'build': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Build']"}), |
1302 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1303 | - 'fail_count': ('django.db.models.fields.IntegerField', [], {}), |
1304 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1305 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1306 | - 'jenkins_build': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
1307 | - 'jenkins_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
1308 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
1309 | - 'pass_count': ('django.db.models.fields.IntegerField', [], {}), |
1310 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1311 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
1312 | - 'skip_count': ('django.db.models.fields.IntegerField', [], {}), |
1313 | - 'total_count': ('django.db.models.fields.IntegerField', [], {}), |
1314 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1315 | - }, |
1316 | - 'dashboard.resultlog': { |
1317 | - 'Meta': {'object_name': 'ResultLog', 'db_table': "'result_logs'"}, |
1318 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1319 | - 'display_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), |
1320 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1321 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1322 | - 'path': ('django.db.models.fields.TextField', [], {}), |
1323 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1324 | - 'remote_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
1325 | - 'result': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Result']"}), |
1326 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1327 | - }, |
1328 | - 'dashboard.run': { |
1329 | - 'Meta': {'object_name': 'Run', 'db_table': "'runs'"}, |
1330 | - 'build_no': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
1331 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1332 | - 'flavor': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
1333 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1334 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1335 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1336 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
1337 | - 'release': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
1338 | - 'test_type': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), |
1339 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1340 | - }, |
1341 | - 'dashboard.sruresult': { |
1342 | - 'Meta': {'object_name': 'SRUResult', 'db_table': "'sru_results'"}, |
1343 | - 'bugs': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard.Bug']", 'symmetrical': 'False'}), |
1344 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1345 | - 'fail_count': ('django.db.models.fields.IntegerField', [], {}), |
1346 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1347 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1348 | - 'jenkins_build': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
1349 | - 'jenkins_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
1350 | - 'kernel': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Kernel']"}), |
1351 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
1352 | - 'pass_count': ('django.db.models.fields.IntegerField', [], {}), |
1353 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1354 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
1355 | - 'skip_count': ('django.db.models.fields.IntegerField', [], {}), |
1356 | - 'total_count': ('django.db.models.fields.IntegerField', [], {}), |
1357 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1358 | - }, |
1359 | - 'dashboard.sruresultlog': { |
1360 | - 'Meta': {'object_name': 'SRUResultLog', 'db_table': "'sru_result_logs'"}, |
1361 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1362 | - 'display_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), |
1363 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1364 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1365 | - 'path': ('django.db.models.fields.TextField', [], {}), |
1366 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1367 | - 'remote_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
1368 | - 'sru_result': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.SRUResult']"}), |
1369 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1370 | - } |
1371 | - } |
1372 | - |
1373 | - complete_apps = ['dashboard'] |
1374 | |
1375 | === removed file 'dashboard/migrations/0008_auto__add_imageresult__add_machine__add_image.py' |
1376 | --- dashboard/migrations/0008_auto__add_imageresult__add_machine__add_image.py 2012-12-02 02:51:10 +0000 |
1377 | +++ dashboard/migrations/0008_auto__add_imageresult__add_machine__add_image.py 1970-01-01 00:00:00 +0000 |
1378 | @@ -1,238 +0,0 @@ |
1379 | -# QA Dashboard |
1380 | -# Copyright 2012 Canonical Ltd. |
1381 | - |
1382 | -# This program is free software: you can redistribute it and/or modify it |
1383 | -# under the terms of the GNU Affero General Public License version 3, as published |
1384 | -# by the Free Software Foundation. |
1385 | - |
1386 | -# This program is distributed in the hope that it will be useful, but |
1387 | -# WITHOUT ANY WARRANTY; without even the implied warranties of |
1388 | -# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
1389 | -# PURPOSE. See the GNU Affero General Public License for more details. |
1390 | - |
1391 | -# You should have received a copy of the GNU Affero General Public License along |
1392 | -# with this program. If not, see <http://www.gnu.org/licenses/>. |
1393 | - |
1394 | -# encoding: utf-8 |
1395 | -import datetime |
1396 | -from south.db import db |
1397 | -from south.v2 import SchemaMigration |
1398 | -from django.db import models |
1399 | - |
1400 | -class Migration(SchemaMigration): |
1401 | - |
1402 | - def forwards(self, orm): |
1403 | - |
1404 | - # Adding model 'ImageResult' |
1405 | - db.create_table('images_results', ( |
1406 | - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), |
1407 | - ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), |
1408 | - ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), |
1409 | - ('internal', self.gf('django.db.models.fields.BooleanField')(default=True)), |
1410 | - ('publish', self.gf('django.db.models.fields.BooleanField')(default=True)), |
1411 | - ('image', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['dashboard.Image'])), |
1412 | - ('machine', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['dashboard.Machine'])), |
1413 | - ('ran_at', self.gf('django.db.models.fields.DateTimeField')()), |
1414 | - ('kernel_init', self.gf('django.db.models.fields.FloatField')()), |
1415 | - ('kernel', self.gf('django.db.models.fields.FloatField')()), |
1416 | - ('plumbing', self.gf('django.db.models.fields.FloatField')()), |
1417 | - ('xorg', self.gf('django.db.models.fields.FloatField')()), |
1418 | - ('desktop', self.gf('django.db.models.fields.FloatField')()), |
1419 | - ('boot', self.gf('django.db.models.fields.FloatField')()), |
1420 | - )) |
1421 | - db.send_create_signal('dashboard', ['ImageResult']) |
1422 | - |
1423 | - # Adding model 'Machine' |
1424 | - db.create_table('machines', ( |
1425 | - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), |
1426 | - ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), |
1427 | - ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), |
1428 | - ('internal', self.gf('django.db.models.fields.BooleanField')(default=True)), |
1429 | - ('publish', self.gf('django.db.models.fields.BooleanField')(default=True)), |
1430 | - ('name', self.gf('django.db.models.fields.CharField')(max_length=200)), |
1431 | - ('mac_address', self.gf('django.db.models.fields.CharField')(max_length=200)), |
1432 | - )) |
1433 | - db.send_create_signal('dashboard', ['Machine']) |
1434 | - |
1435 | - # Adding model 'Image' |
1436 | - db.create_table('images', ( |
1437 | - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), |
1438 | - ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), |
1439 | - ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), |
1440 | - ('internal', self.gf('django.db.models.fields.BooleanField')(default=True)), |
1441 | - ('publish', self.gf('django.db.models.fields.BooleanField')(default=True)), |
1442 | - ('release', self.gf('django.db.models.fields.CharField')(max_length=200)), |
1443 | - ('variant', self.gf('django.db.models.fields.CharField')(max_length=200)), |
1444 | - ('arch', self.gf('django.db.models.fields.CharField')(max_length=200)), |
1445 | - ('md5', self.gf('django.db.models.fields.CharField')(max_length=200)), |
1446 | - ('build_number', self.gf('django.db.models.fields.CharField')(max_length=50)), |
1447 | - )) |
1448 | - db.send_create_signal('dashboard', ['Image']) |
1449 | - |
1450 | - |
1451 | - def backwards(self, orm): |
1452 | - |
1453 | - # Deleting model 'ImageResult' |
1454 | - db.delete_table('images_results') |
1455 | - |
1456 | - # Deleting model 'Machine' |
1457 | - db.delete_table('machines') |
1458 | - |
1459 | - # Deleting model 'Image' |
1460 | - db.delete_table('images') |
1461 | - |
1462 | - |
1463 | - models = { |
1464 | - 'dashboard.bug': { |
1465 | - 'Meta': {'object_name': 'Bug', 'db_table': "'bugs'"}, |
1466 | - 'bug_no': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
1467 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1468 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1469 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1470 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1471 | - 'status': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
1472 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1473 | - }, |
1474 | - 'dashboard.build': { |
1475 | - 'Meta': {'object_name': 'Build', 'db_table': "'builds'"}, |
1476 | - 'arch': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
1477 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1478 | - 'flavor': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
1479 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1480 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1481 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}), |
1482 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1483 | - 'run': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Run']"}), |
1484 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
1485 | - 'variant': ('django.db.models.fields.CharField', [], {'max_length': '200'}) |
1486 | - }, |
1487 | - 'dashboard.image': { |
1488 | - 'Meta': {'object_name': 'Image', 'db_table': "'images'"}, |
1489 | - 'arch': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
1490 | - 'build_number': ('django.db.models.fields.CharField', [], {'max_length': '50'}), |
1491 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1492 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1493 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1494 | - 'md5': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
1495 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1496 | - 'release': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
1497 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
1498 | - 'variant': ('django.db.models.fields.CharField', [], {'max_length': '200'}) |
1499 | - }, |
1500 | - 'dashboard.imageresult': { |
1501 | - 'Meta': {'object_name': 'ImageResult', 'db_table': "'images_results'"}, |
1502 | - 'boot': ('django.db.models.fields.FloatField', [], {}), |
1503 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1504 | - 'desktop': ('django.db.models.fields.FloatField', [], {}), |
1505 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1506 | - 'image': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Image']"}), |
1507 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1508 | - 'kernel': ('django.db.models.fields.FloatField', [], {}), |
1509 | - 'kernel_init': ('django.db.models.fields.FloatField', [], {}), |
1510 | - 'machine': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Machine']"}), |
1511 | - 'plumbing': ('django.db.models.fields.FloatField', [], {}), |
1512 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1513 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
1514 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
1515 | - 'xorg': ('django.db.models.fields.FloatField', [], {}) |
1516 | - }, |
1517 | - 'dashboard.kernel': { |
1518 | - 'Meta': {'object_name': 'Kernel', 'db_table': "'kernels'"}, |
1519 | - 'arch': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
1520 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1521 | - 'gpu': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
1522 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1523 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1524 | - 'job_type': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
1525 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1526 | - 'release': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
1527 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
1528 | - 'variant': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
1529 | - 'version': ('django.db.models.fields.CharField', [], {'max_length': '100'}) |
1530 | - }, |
1531 | - 'dashboard.machine': { |
1532 | - 'Meta': {'object_name': 'Machine', 'db_table': "'machines'"}, |
1533 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1534 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1535 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1536 | - 'mac_address': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
1537 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
1538 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1539 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1540 | - }, |
1541 | - 'dashboard.result': { |
1542 | - 'Meta': {'object_name': 'Result', 'db_table': "'results'"}, |
1543 | - 'bugs': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard.Bug']", 'symmetrical': 'False'}), |
1544 | - 'build': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Build']"}), |
1545 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1546 | - 'fail_count': ('django.db.models.fields.IntegerField', [], {}), |
1547 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1548 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1549 | - 'jenkins_build': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
1550 | - 'jenkins_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
1551 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
1552 | - 'pass_count': ('django.db.models.fields.IntegerField', [], {}), |
1553 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1554 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
1555 | - 'skip_count': ('django.db.models.fields.IntegerField', [], {}), |
1556 | - 'total_count': ('django.db.models.fields.IntegerField', [], {}), |
1557 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1558 | - }, |
1559 | - 'dashboard.resultlog': { |
1560 | - 'Meta': {'object_name': 'ResultLog', 'db_table': "'result_logs'"}, |
1561 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1562 | - 'display_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), |
1563 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1564 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1565 | - 'path': ('django.db.models.fields.TextField', [], {}), |
1566 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1567 | - 'remote_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
1568 | - 'result': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Result']"}), |
1569 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1570 | - }, |
1571 | - 'dashboard.run': { |
1572 | - 'Meta': {'object_name': 'Run', 'db_table': "'runs'"}, |
1573 | - 'build_no': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
1574 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1575 | - 'flavor': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
1576 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1577 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1578 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1579 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
1580 | - 'release': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
1581 | - 'test_type': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), |
1582 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1583 | - }, |
1584 | - 'dashboard.sruresult': { |
1585 | - 'Meta': {'object_name': 'SRUResult', 'db_table': "'sru_results'"}, |
1586 | - 'bugs': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard.Bug']", 'symmetrical': 'False'}), |
1587 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1588 | - 'fail_count': ('django.db.models.fields.IntegerField', [], {}), |
1589 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1590 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1591 | - 'jenkins_build': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
1592 | - 'jenkins_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
1593 | - 'kernel': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Kernel']"}), |
1594 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
1595 | - 'pass_count': ('django.db.models.fields.IntegerField', [], {}), |
1596 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1597 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
1598 | - 'skip_count': ('django.db.models.fields.IntegerField', [], {}), |
1599 | - 'total_count': ('django.db.models.fields.IntegerField', [], {}), |
1600 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1601 | - }, |
1602 | - 'dashboard.sruresultlog': { |
1603 | - 'Meta': {'object_name': 'SRUResultLog', 'db_table': "'sru_result_logs'"}, |
1604 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1605 | - 'display_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), |
1606 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1607 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1608 | - 'path': ('django.db.models.fields.TextField', [], {}), |
1609 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1610 | - 'remote_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
1611 | - 'sru_result': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.SRUResult']"}), |
1612 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1613 | - } |
1614 | - } |
1615 | - |
1616 | - complete_apps = ['dashboard'] |
1617 | |
1618 | === removed file 'dashboard/migrations/0009_auto__add_unique_machine_name__add_unique_image_release_arch_variant_b.py' |
1619 | --- dashboard/migrations/0009_auto__add_unique_machine_name__add_unique_image_release_arch_variant_b.py 2012-12-02 02:51:10 +0000 |
1620 | +++ dashboard/migrations/0009_auto__add_unique_machine_name__add_unique_image_release_arch_variant_b.py 1970-01-01 00:00:00 +0000 |
1621 | @@ -1,195 +0,0 @@ |
1622 | -# QA Dashboard |
1623 | -# Copyright 2012 Canonical Ltd. |
1624 | - |
1625 | -# This program is free software: you can redistribute it and/or modify it |
1626 | -# under the terms of the GNU Affero General Public License version 3, as published |
1627 | -# by the Free Software Foundation. |
1628 | - |
1629 | -# This program is distributed in the hope that it will be useful, but |
1630 | -# WITHOUT ANY WARRANTY; without even the implied warranties of |
1631 | -# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
1632 | -# PURPOSE. See the GNU Affero General Public License for more details. |
1633 | - |
1634 | -# You should have received a copy of the GNU Affero General Public License along |
1635 | -# with this program. If not, see <http://www.gnu.org/licenses/>. |
1636 | - |
1637 | -# encoding: utf-8 |
1638 | -import datetime |
1639 | -from south.db import db |
1640 | -from south.v2 import SchemaMigration |
1641 | -from django.db import models |
1642 | - |
1643 | -class Migration(SchemaMigration): |
1644 | - |
1645 | - def forwards(self, orm): |
1646 | - |
1647 | - # Adding unique constraint on 'Machine', fields ['name'] |
1648 | - db.create_unique('machines', ['name']) |
1649 | - |
1650 | - # Adding unique constraint on 'Image', fields ['release', 'arch', 'variant', 'build_number'] |
1651 | - db.create_unique('images', ['release', 'arch', 'variant', 'build_number']) |
1652 | - |
1653 | - |
1654 | - def backwards(self, orm): |
1655 | - |
1656 | - # Removing unique constraint on 'Image', fields ['release', 'arch', 'variant', 'build_number'] |
1657 | - db.delete_unique('images', ['release', 'arch', 'variant', 'build_number']) |
1658 | - |
1659 | - # Removing unique constraint on 'Machine', fields ['name'] |
1660 | - db.delete_unique('machines', ['name']) |
1661 | - |
1662 | - |
1663 | - models = { |
1664 | - 'dashboard.bug': { |
1665 | - 'Meta': {'object_name': 'Bug', 'db_table': "'bugs'"}, |
1666 | - 'bug_no': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
1667 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1668 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1669 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1670 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1671 | - 'status': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
1672 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1673 | - }, |
1674 | - 'dashboard.build': { |
1675 | - 'Meta': {'object_name': 'Build', 'db_table': "'builds'"}, |
1676 | - 'arch': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
1677 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1678 | - 'flavor': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
1679 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1680 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1681 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}), |
1682 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1683 | - 'run': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Run']"}), |
1684 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
1685 | - 'variant': ('django.db.models.fields.CharField', [], {'max_length': '200'}) |
1686 | - }, |
1687 | - 'dashboard.image': { |
1688 | - 'Meta': {'unique_together': "(('release', 'variant', 'arch', 'build_number'),)", 'object_name': 'Image', 'db_table': "'images'"}, |
1689 | - 'arch': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
1690 | - 'build_number': ('django.db.models.fields.CharField', [], {'max_length': '50'}), |
1691 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1692 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1693 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1694 | - 'md5': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
1695 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1696 | - 'release': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
1697 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
1698 | - 'variant': ('django.db.models.fields.CharField', [], {'max_length': '200'}) |
1699 | - }, |
1700 | - 'dashboard.imageresult': { |
1701 | - 'Meta': {'object_name': 'ImageResult', 'db_table': "'images_results'"}, |
1702 | - 'boot': ('django.db.models.fields.FloatField', [], {}), |
1703 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1704 | - 'desktop': ('django.db.models.fields.FloatField', [], {}), |
1705 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1706 | - 'image': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Image']"}), |
1707 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1708 | - 'kernel': ('django.db.models.fields.FloatField', [], {}), |
1709 | - 'kernel_init': ('django.db.models.fields.FloatField', [], {}), |
1710 | - 'machine': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Machine']"}), |
1711 | - 'plumbing': ('django.db.models.fields.FloatField', [], {}), |
1712 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1713 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
1714 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
1715 | - 'xorg': ('django.db.models.fields.FloatField', [], {}) |
1716 | - }, |
1717 | - 'dashboard.kernel': { |
1718 | - 'Meta': {'object_name': 'Kernel', 'db_table': "'kernels'"}, |
1719 | - 'arch': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
1720 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1721 | - 'gpu': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
1722 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1723 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1724 | - 'job_type': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
1725 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1726 | - 'release': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
1727 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
1728 | - 'variant': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
1729 | - 'version': ('django.db.models.fields.CharField', [], {'max_length': '100'}) |
1730 | - }, |
1731 | - 'dashboard.machine': { |
1732 | - 'Meta': {'object_name': 'Machine', 'db_table': "'machines'"}, |
1733 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1734 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1735 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1736 | - 'mac_address': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
1737 | - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '200'}), |
1738 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1739 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1740 | - }, |
1741 | - 'dashboard.result': { |
1742 | - 'Meta': {'object_name': 'Result', 'db_table': "'results'"}, |
1743 | - 'bugs': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard.Bug']", 'symmetrical': 'False'}), |
1744 | - 'build': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Build']"}), |
1745 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1746 | - 'fail_count': ('django.db.models.fields.IntegerField', [], {}), |
1747 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1748 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1749 | - 'jenkins_build': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
1750 | - 'jenkins_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
1751 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
1752 | - 'pass_count': ('django.db.models.fields.IntegerField', [], {}), |
1753 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1754 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
1755 | - 'skip_count': ('django.db.models.fields.IntegerField', [], {}), |
1756 | - 'total_count': ('django.db.models.fields.IntegerField', [], {}), |
1757 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1758 | - }, |
1759 | - 'dashboard.resultlog': { |
1760 | - 'Meta': {'object_name': 'ResultLog', 'db_table': "'result_logs'"}, |
1761 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1762 | - 'display_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), |
1763 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1764 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1765 | - 'path': ('django.db.models.fields.TextField', [], {}), |
1766 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1767 | - 'remote_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
1768 | - 'result': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Result']"}), |
1769 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1770 | - }, |
1771 | - 'dashboard.run': { |
1772 | - 'Meta': {'object_name': 'Run', 'db_table': "'runs'"}, |
1773 | - 'build_no': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
1774 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1775 | - 'flavor': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
1776 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1777 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1778 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1779 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
1780 | - 'release': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
1781 | - 'test_type': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), |
1782 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1783 | - }, |
1784 | - 'dashboard.sruresult': { |
1785 | - 'Meta': {'object_name': 'SRUResult', 'db_table': "'sru_results'"}, |
1786 | - 'bugs': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard.Bug']", 'symmetrical': 'False'}), |
1787 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1788 | - 'fail_count': ('django.db.models.fields.IntegerField', [], {}), |
1789 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1790 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1791 | - 'jenkins_build': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
1792 | - 'jenkins_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
1793 | - 'kernel': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Kernel']"}), |
1794 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
1795 | - 'pass_count': ('django.db.models.fields.IntegerField', [], {}), |
1796 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1797 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
1798 | - 'skip_count': ('django.db.models.fields.IntegerField', [], {}), |
1799 | - 'total_count': ('django.db.models.fields.IntegerField', [], {}), |
1800 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1801 | - }, |
1802 | - 'dashboard.sruresultlog': { |
1803 | - 'Meta': {'object_name': 'SRUResultLog', 'db_table': "'sru_result_logs'"}, |
1804 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1805 | - 'display_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), |
1806 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1807 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1808 | - 'path': ('django.db.models.fields.TextField', [], {}), |
1809 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1810 | - 'remote_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
1811 | - 'sru_result': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.SRUResult']"}), |
1812 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1813 | - } |
1814 | - } |
1815 | - |
1816 | - complete_apps = ['dashboard'] |
1817 | |
1818 | === removed file 'dashboard/migrations/0010_auto__add_unique_image_md5.py' |
1819 | --- dashboard/migrations/0010_auto__add_unique_image_md5.py 2012-12-02 02:51:10 +0000 |
1820 | +++ dashboard/migrations/0010_auto__add_unique_image_md5.py 1970-01-01 00:00:00 +0000 |
1821 | @@ -1,189 +0,0 @@ |
1822 | -# QA Dashboard |
1823 | -# Copyright 2012 Canonical Ltd. |
1824 | - |
1825 | -# This program is free software: you can redistribute it and/or modify it |
1826 | -# under the terms of the GNU Affero General Public License version 3, as published |
1827 | -# by the Free Software Foundation. |
1828 | - |
1829 | -# This program is distributed in the hope that it will be useful, but |
1830 | -# WITHOUT ANY WARRANTY; without even the implied warranties of |
1831 | -# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
1832 | -# PURPOSE. See the GNU Affero General Public License for more details. |
1833 | - |
1834 | -# You should have received a copy of the GNU Affero General Public License along |
1835 | -# with this program. If not, see <http://www.gnu.org/licenses/>. |
1836 | - |
1837 | -# encoding: utf-8 |
1838 | -import datetime |
1839 | -from south.db import db |
1840 | -from south.v2 import SchemaMigration |
1841 | -from django.db import models |
1842 | - |
1843 | -class Migration(SchemaMigration): |
1844 | - |
1845 | - def forwards(self, orm): |
1846 | - |
1847 | - # Adding unique constraint on 'Image', fields ['md5'] |
1848 | - db.create_unique('images', ['md5']) |
1849 | - |
1850 | - |
1851 | - def backwards(self, orm): |
1852 | - |
1853 | - # Removing unique constraint on 'Image', fields ['md5'] |
1854 | - db.delete_unique('images', ['md5']) |
1855 | - |
1856 | - |
1857 | - models = { |
1858 | - 'dashboard.bug': { |
1859 | - 'Meta': {'object_name': 'Bug', 'db_table': "'bugs'"}, |
1860 | - 'bug_no': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
1861 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1862 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1863 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1864 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1865 | - 'status': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
1866 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1867 | - }, |
1868 | - 'dashboard.build': { |
1869 | - 'Meta': {'object_name': 'Build', 'db_table': "'builds'"}, |
1870 | - 'arch': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
1871 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1872 | - 'flavor': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
1873 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1874 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1875 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}), |
1876 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1877 | - 'run': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Run']"}), |
1878 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
1879 | - 'variant': ('django.db.models.fields.CharField', [], {'max_length': '200'}) |
1880 | - }, |
1881 | - 'dashboard.image': { |
1882 | - 'Meta': {'unique_together': "(('release', 'variant', 'arch', 'build_number'),)", 'object_name': 'Image', 'db_table': "'images'"}, |
1883 | - 'arch': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
1884 | - 'build_number': ('django.db.models.fields.CharField', [], {'max_length': '50'}), |
1885 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1886 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1887 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1888 | - 'md5': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '200'}), |
1889 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1890 | - 'release': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
1891 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
1892 | - 'variant': ('django.db.models.fields.CharField', [], {'max_length': '200'}) |
1893 | - }, |
1894 | - 'dashboard.imageresult': { |
1895 | - 'Meta': {'object_name': 'ImageResult', 'db_table': "'images_results'"}, |
1896 | - 'boot': ('django.db.models.fields.FloatField', [], {}), |
1897 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1898 | - 'desktop': ('django.db.models.fields.FloatField', [], {}), |
1899 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1900 | - 'image': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Image']"}), |
1901 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1902 | - 'kernel': ('django.db.models.fields.FloatField', [], {}), |
1903 | - 'kernel_init': ('django.db.models.fields.FloatField', [], {}), |
1904 | - 'machine': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Machine']"}), |
1905 | - 'plumbing': ('django.db.models.fields.FloatField', [], {}), |
1906 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1907 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
1908 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
1909 | - 'xorg': ('django.db.models.fields.FloatField', [], {}) |
1910 | - }, |
1911 | - 'dashboard.kernel': { |
1912 | - 'Meta': {'object_name': 'Kernel', 'db_table': "'kernels'"}, |
1913 | - 'arch': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
1914 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1915 | - 'gpu': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
1916 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1917 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1918 | - 'job_type': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
1919 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1920 | - 'release': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
1921 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
1922 | - 'variant': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
1923 | - 'version': ('django.db.models.fields.CharField', [], {'max_length': '100'}) |
1924 | - }, |
1925 | - 'dashboard.machine': { |
1926 | - 'Meta': {'object_name': 'Machine', 'db_table': "'machines'"}, |
1927 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1928 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1929 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1930 | - 'mac_address': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
1931 | - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '200'}), |
1932 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1933 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1934 | - }, |
1935 | - 'dashboard.result': { |
1936 | - 'Meta': {'object_name': 'Result', 'db_table': "'results'"}, |
1937 | - 'bugs': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard.Bug']", 'symmetrical': 'False'}), |
1938 | - 'build': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Build']"}), |
1939 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1940 | - 'fail_count': ('django.db.models.fields.IntegerField', [], {}), |
1941 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1942 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1943 | - 'jenkins_build': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
1944 | - 'jenkins_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
1945 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
1946 | - 'pass_count': ('django.db.models.fields.IntegerField', [], {}), |
1947 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1948 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
1949 | - 'skip_count': ('django.db.models.fields.IntegerField', [], {}), |
1950 | - 'total_count': ('django.db.models.fields.IntegerField', [], {}), |
1951 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1952 | - }, |
1953 | - 'dashboard.resultlog': { |
1954 | - 'Meta': {'object_name': 'ResultLog', 'db_table': "'result_logs'"}, |
1955 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1956 | - 'display_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), |
1957 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1958 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1959 | - 'path': ('django.db.models.fields.TextField', [], {}), |
1960 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1961 | - 'remote_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
1962 | - 'result': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Result']"}), |
1963 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1964 | - }, |
1965 | - 'dashboard.run': { |
1966 | - 'Meta': {'object_name': 'Run', 'db_table': "'runs'"}, |
1967 | - 'build_no': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
1968 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1969 | - 'flavor': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
1970 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1971 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1972 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1973 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
1974 | - 'release': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
1975 | - 'test_type': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), |
1976 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1977 | - }, |
1978 | - 'dashboard.sruresult': { |
1979 | - 'Meta': {'object_name': 'SRUResult', 'db_table': "'sru_results'"}, |
1980 | - 'bugs': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard.Bug']", 'symmetrical': 'False'}), |
1981 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1982 | - 'fail_count': ('django.db.models.fields.IntegerField', [], {}), |
1983 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
1984 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1985 | - 'jenkins_build': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
1986 | - 'jenkins_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
1987 | - 'kernel': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Kernel']"}), |
1988 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
1989 | - 'pass_count': ('django.db.models.fields.IntegerField', [], {}), |
1990 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
1991 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
1992 | - 'skip_count': ('django.db.models.fields.IntegerField', [], {}), |
1993 | - 'total_count': ('django.db.models.fields.IntegerField', [], {}), |
1994 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
1995 | - }, |
1996 | - 'dashboard.sruresultlog': { |
1997 | - 'Meta': {'object_name': 'SRUResultLog', 'db_table': "'sru_result_logs'"}, |
1998 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
1999 | - 'display_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), |
2000 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
2001 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2002 | - 'path': ('django.db.models.fields.TextField', [], {}), |
2003 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2004 | - 'remote_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
2005 | - 'sru_result': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.SRUResult']"}), |
2006 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
2007 | - } |
2008 | - } |
2009 | - |
2010 | - complete_apps = ['dashboard'] |
2011 | |
2012 | === removed file 'dashboard/migrations/0011_removing_bootspeed.py' |
2013 | --- dashboard/migrations/0011_removing_bootspeed.py 2012-12-02 02:51:10 +0000 |
2014 | +++ dashboard/migrations/0011_removing_bootspeed.py 1970-01-01 00:00:00 +0000 |
2015 | @@ -1,203 +0,0 @@ |
2016 | -# QA Dashboard |
2017 | -# Copyright 2012 Canonical Ltd. |
2018 | - |
2019 | -# This program is free software: you can redistribute it and/or modify it |
2020 | -# under the terms of the GNU Affero General Public License version 3, as published |
2021 | -# by the Free Software Foundation. |
2022 | - |
2023 | -# This program is distributed in the hope that it will be useful, but |
2024 | -# WITHOUT ANY WARRANTY; without even the implied warranties of |
2025 | -# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
2026 | -# PURPOSE. See the GNU Affero General Public License for more details. |
2027 | - |
2028 | -# You should have received a copy of the GNU Affero General Public License along |
2029 | -# with this program. If not, see <http://www.gnu.org/licenses/>. |
2030 | - |
2031 | -# -*- coding: utf-8 -*- |
2032 | -import datetime |
2033 | -from south.db import db |
2034 | -from south.v2 import SchemaMigration |
2035 | -from django.db import models |
2036 | - |
2037 | - |
2038 | -class Migration(SchemaMigration): |
2039 | - |
2040 | - def forwards(self, orm): |
2041 | - # Removing unique constraint on 'Image', fields ['release', 'variant', 'arch', 'build_number'] |
2042 | - db.delete_unique('images', ['release', 'variant', 'arch', 'build_number']) |
2043 | - |
2044 | - # Deleting model 'ImageResult' |
2045 | - db.delete_table('images_results') |
2046 | - |
2047 | - # Deleting model 'Machine' |
2048 | - db.delete_table('machines') |
2049 | - |
2050 | - # Deleting model 'Image' |
2051 | - db.delete_table('images') |
2052 | - |
2053 | - |
2054 | - def backwards(self, orm): |
2055 | - # Adding model 'ImageResult' |
2056 | - db.create_table('images_results', ( |
2057 | - ('kernel', self.gf('django.db.models.fields.FloatField')()), |
2058 | - ('image', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['dashboard.Image'])), |
2059 | - ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), |
2060 | - ('xorg', self.gf('django.db.models.fields.FloatField')()), |
2061 | - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), |
2062 | - ('ran_at', self.gf('django.db.models.fields.DateTimeField')()), |
2063 | - ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), |
2064 | - ('kernel_init', self.gf('django.db.models.fields.FloatField')()), |
2065 | - ('boot', self.gf('django.db.models.fields.FloatField')()), |
2066 | - ('publish', self.gf('django.db.models.fields.BooleanField')(default=True)), |
2067 | - ('desktop', self.gf('django.db.models.fields.FloatField')()), |
2068 | - ('machine', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['dashboard.Machine'])), |
2069 | - ('internal', self.gf('django.db.models.fields.BooleanField')(default=True)), |
2070 | - ('plumbing', self.gf('django.db.models.fields.FloatField')()), |
2071 | - )) |
2072 | - db.send_create_signal('dashboard', ['ImageResult']) |
2073 | - |
2074 | - # Adding model 'Machine' |
2075 | - db.create_table('machines', ( |
2076 | - ('name', self.gf('django.db.models.fields.CharField')(max_length=200, unique=True)), |
2077 | - ('internal', self.gf('django.db.models.fields.BooleanField')(default=True)), |
2078 | - ('mac_address', self.gf('django.db.models.fields.CharField')(max_length=200)), |
2079 | - ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), |
2080 | - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), |
2081 | - ('publish', self.gf('django.db.models.fields.BooleanField')(default=True)), |
2082 | - ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), |
2083 | - )) |
2084 | - db.send_create_signal('dashboard', ['Machine']) |
2085 | - |
2086 | - # Adding model 'Image' |
2087 | - db.create_table('images', ( |
2088 | - ('variant', self.gf('django.db.models.fields.CharField')(max_length=200)), |
2089 | - ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), |
2090 | - ('arch', self.gf('django.db.models.fields.CharField')(max_length=200)), |
2091 | - ('internal', self.gf('django.db.models.fields.BooleanField')(default=True)), |
2092 | - ('md5', self.gf('django.db.models.fields.CharField')(max_length=200, unique=True)), |
2093 | - ('build_number', self.gf('django.db.models.fields.CharField')(max_length=50)), |
2094 | - ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), |
2095 | - ('publish', self.gf('django.db.models.fields.BooleanField')(default=True)), |
2096 | - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), |
2097 | - ('release', self.gf('django.db.models.fields.CharField')(max_length=200)), |
2098 | - )) |
2099 | - db.send_create_signal('dashboard', ['Image']) |
2100 | - |
2101 | - # Adding unique constraint on 'Image', fields ['release', 'variant', 'arch', 'build_number'] |
2102 | - db.create_unique('images', ['release', 'variant', 'arch', 'build_number']) |
2103 | - |
2104 | - |
2105 | - models = { |
2106 | - 'dashboard.bug': { |
2107 | - 'Meta': {'object_name': 'Bug', 'db_table': "'bugs'"}, |
2108 | - 'bug_no': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
2109 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
2110 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
2111 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2112 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2113 | - 'status': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
2114 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
2115 | - }, |
2116 | - 'dashboard.build': { |
2117 | - 'Meta': {'object_name': 'Build', 'db_table': "'builds'"}, |
2118 | - 'arch': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
2119 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
2120 | - 'flavor': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
2121 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
2122 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2123 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}), |
2124 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2125 | - 'run': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Run']"}), |
2126 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
2127 | - 'variant': ('django.db.models.fields.CharField', [], {'max_length': '200'}) |
2128 | - }, |
2129 | - 'dashboard.kernel': { |
2130 | - 'Meta': {'object_name': 'Kernel', 'db_table': "'kernels'"}, |
2131 | - 'arch': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
2132 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
2133 | - 'gpu': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
2134 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
2135 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2136 | - 'job_type': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
2137 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2138 | - 'release': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
2139 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
2140 | - 'variant': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
2141 | - 'version': ('django.db.models.fields.CharField', [], {'max_length': '100'}) |
2142 | - }, |
2143 | - 'dashboard.result': { |
2144 | - 'Meta': {'object_name': 'Result', 'db_table': "'results'"}, |
2145 | - 'bugs': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard.Bug']", 'symmetrical': 'False'}), |
2146 | - 'build': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Build']"}), |
2147 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
2148 | - 'fail_count': ('django.db.models.fields.IntegerField', [], {}), |
2149 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
2150 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2151 | - 'jenkins_build': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
2152 | - 'jenkins_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
2153 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
2154 | - 'pass_count': ('django.db.models.fields.IntegerField', [], {}), |
2155 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2156 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
2157 | - 'skip_count': ('django.db.models.fields.IntegerField', [], {}), |
2158 | - 'total_count': ('django.db.models.fields.IntegerField', [], {}), |
2159 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
2160 | - }, |
2161 | - 'dashboard.resultlog': { |
2162 | - 'Meta': {'object_name': 'ResultLog', 'db_table': "'result_logs'"}, |
2163 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
2164 | - 'display_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), |
2165 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
2166 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2167 | - 'path': ('django.db.models.fields.TextField', [], {}), |
2168 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2169 | - 'remote_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
2170 | - 'result': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Result']"}), |
2171 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
2172 | - }, |
2173 | - 'dashboard.run': { |
2174 | - 'Meta': {'object_name': 'Run', 'db_table': "'runs'"}, |
2175 | - 'build_no': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
2176 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
2177 | - 'flavor': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
2178 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
2179 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2180 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2181 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
2182 | - 'release': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
2183 | - 'test_type': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), |
2184 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
2185 | - }, |
2186 | - 'dashboard.sruresult': { |
2187 | - 'Meta': {'object_name': 'SRUResult', 'db_table': "'sru_results'"}, |
2188 | - 'bugs': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard.Bug']", 'symmetrical': 'False'}), |
2189 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
2190 | - 'fail_count': ('django.db.models.fields.IntegerField', [], {}), |
2191 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
2192 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2193 | - 'jenkins_build': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
2194 | - 'jenkins_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
2195 | - 'kernel': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Kernel']"}), |
2196 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
2197 | - 'pass_count': ('django.db.models.fields.IntegerField', [], {}), |
2198 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2199 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
2200 | - 'skip_count': ('django.db.models.fields.IntegerField', [], {}), |
2201 | - 'total_count': ('django.db.models.fields.IntegerField', [], {}), |
2202 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
2203 | - }, |
2204 | - 'dashboard.sruresultlog': { |
2205 | - 'Meta': {'object_name': 'SRUResultLog', 'db_table': "'sru_result_logs'"}, |
2206 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
2207 | - 'display_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), |
2208 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
2209 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2210 | - 'path': ('django.db.models.fields.TextField', [], {}), |
2211 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2212 | - 'remote_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
2213 | - 'sru_result': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.SRUResult']"}), |
2214 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
2215 | - } |
2216 | - } |
2217 | - |
2218 | - complete_apps = ['dashboard'] |
2219 | \ No newline at end of file |
2220 | |
2221 | === removed file 'dashboard/migrations/0012_change_skip_to_error.py' |
2222 | --- dashboard/migrations/0012_change_skip_to_error.py 2012-12-05 22:24:13 +0000 |
2223 | +++ dashboard/migrations/0012_change_skip_to_error.py 1970-01-01 00:00:00 +0000 |
2224 | @@ -1,143 +0,0 @@ |
2225 | -# -*- coding: utf-8 -*- |
2226 | -import datetime |
2227 | -from south.db import db |
2228 | -from south.v2 import SchemaMigration |
2229 | -from django.db import models |
2230 | - |
2231 | - |
2232 | -class Migration(SchemaMigration): |
2233 | - |
2234 | - def forwards(self, orm): |
2235 | - # Deleting field 'Result.skip_count' |
2236 | - db.delete_column('results', 'skip_count') |
2237 | - |
2238 | - # Adding field 'Result.error_count' |
2239 | - db.add_column('results', 'error_count', |
2240 | - self.gf('django.db.models.fields.IntegerField')(default=0), |
2241 | - keep_default=False) |
2242 | - |
2243 | - |
2244 | - def backwards(self, orm): |
2245 | - # Adding field 'Result.skip_count' |
2246 | - db.add_column('results', 'skip_count', |
2247 | - self.gf('django.db.models.fields.IntegerField')(default=0), |
2248 | - keep_default=False) |
2249 | - |
2250 | - # Deleting field 'Result.error_count' |
2251 | - db.delete_column('results', 'error_count') |
2252 | - |
2253 | - |
2254 | - models = { |
2255 | - 'dashboard.bug': { |
2256 | - 'Meta': {'object_name': 'Bug', 'db_table': "'bugs'"}, |
2257 | - 'bug_no': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
2258 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
2259 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
2260 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2261 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2262 | - 'status': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
2263 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
2264 | - }, |
2265 | - 'dashboard.build': { |
2266 | - 'Meta': {'object_name': 'Build', 'db_table': "'builds'"}, |
2267 | - 'arch': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
2268 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
2269 | - 'flavor': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
2270 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
2271 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2272 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}), |
2273 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2274 | - 'run': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Run']"}), |
2275 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
2276 | - 'variant': ('django.db.models.fields.CharField', [], {'max_length': '200'}) |
2277 | - }, |
2278 | - 'dashboard.kernel': { |
2279 | - 'Meta': {'object_name': 'Kernel', 'db_table': "'kernels'"}, |
2280 | - 'arch': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
2281 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
2282 | - 'gpu': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
2283 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
2284 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2285 | - 'job_type': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
2286 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2287 | - 'release': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
2288 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
2289 | - 'variant': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
2290 | - 'version': ('django.db.models.fields.CharField', [], {'max_length': '100'}) |
2291 | - }, |
2292 | - 'dashboard.result': { |
2293 | - 'Meta': {'object_name': 'Result', 'db_table': "'results'"}, |
2294 | - 'bugs': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard.Bug']", 'symmetrical': 'False'}), |
2295 | - 'build': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Build']"}), |
2296 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
2297 | - 'error_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), |
2298 | - 'fail_count': ('django.db.models.fields.IntegerField', [], {}), |
2299 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
2300 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2301 | - 'jenkins_build': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
2302 | - 'jenkins_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
2303 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
2304 | - 'pass_count': ('django.db.models.fields.IntegerField', [], {}), |
2305 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2306 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
2307 | - 'total_count': ('django.db.models.fields.IntegerField', [], {}), |
2308 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
2309 | - }, |
2310 | - 'dashboard.resultlog': { |
2311 | - 'Meta': {'object_name': 'ResultLog', 'db_table': "'result_logs'"}, |
2312 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
2313 | - 'display_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), |
2314 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
2315 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2316 | - 'path': ('django.db.models.fields.TextField', [], {}), |
2317 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2318 | - 'remote_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
2319 | - 'result': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Result']"}), |
2320 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
2321 | - }, |
2322 | - 'dashboard.run': { |
2323 | - 'Meta': {'object_name': 'Run', 'db_table': "'runs'"}, |
2324 | - 'build_no': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
2325 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
2326 | - 'flavor': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
2327 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
2328 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2329 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2330 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
2331 | - 'release': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
2332 | - 'test_type': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), |
2333 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
2334 | - }, |
2335 | - 'dashboard.sruresult': { |
2336 | - 'Meta': {'object_name': 'SRUResult', 'db_table': "'sru_results'"}, |
2337 | - 'bugs': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard.Bug']", 'symmetrical': 'False'}), |
2338 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
2339 | - 'fail_count': ('django.db.models.fields.IntegerField', [], {}), |
2340 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
2341 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2342 | - 'jenkins_build': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
2343 | - 'jenkins_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
2344 | - 'kernel': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.Kernel']"}), |
2345 | - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
2346 | - 'pass_count': ('django.db.models.fields.IntegerField', [], {}), |
2347 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2348 | - 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
2349 | - 'skip_count': ('django.db.models.fields.IntegerField', [], {}), |
2350 | - 'total_count': ('django.db.models.fields.IntegerField', [], {}), |
2351 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
2352 | - }, |
2353 | - 'dashboard.sruresultlog': { |
2354 | - 'Meta': {'object_name': 'SRUResultLog', 'db_table': "'sru_result_logs'"}, |
2355 | - 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
2356 | - 'display_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), |
2357 | - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
2358 | - 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2359 | - 'path': ('django.db.models.fields.TextField', [], {}), |
2360 | - 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2361 | - 'remote_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
2362 | - 'sru_result': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard.SRUResult']"}), |
2363 | - 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
2364 | - } |
2365 | - } |
2366 | - |
2367 | - complete_apps = ['dashboard'] |
2368 | \ No newline at end of file |
2369 | |
2370 | === removed file 'dashboard/migrations/__init__.py' |
2371 | --- dashboard/migrations/__init__.py 2012-12-02 02:51:10 +0000 |
2372 | +++ dashboard/migrations/__init__.py 1970-01-01 00:00:00 +0000 |
2373 | @@ -1,15 +0,0 @@ |
2374 | -# QA Dashboard |
2375 | -# Copyright 2012 Canonical Ltd. |
2376 | - |
2377 | -# This program is free software: you can redistribute it and/or modify it |
2378 | -# under the terms of the GNU Affero General Public License version 3, as published |
2379 | -# by the Free Software Foundation. |
2380 | - |
2381 | -# This program is distributed in the hope that it will be useful, but |
2382 | -# WITHOUT ANY WARRANTY; without even the implied warranties of |
2383 | -# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
2384 | -# PURPOSE. See the GNU Affero General Public License for more details. |
2385 | - |
2386 | -# You should have received a copy of the GNU Affero General Public License along |
2387 | -# with this program. If not, see <http://www.gnu.org/licenses/>. |
2388 | - |
2389 | |
2390 | === removed directory 'dashboard/views' |
2391 | === removed file 'dashboard/views/__init__.py' |
2392 | --- dashboard/views/__init__.py 2012-12-04 22:45:22 +0000 |
2393 | +++ dashboard/views/__init__.py 1970-01-01 00:00:00 +0000 |
2394 | @@ -1,21 +0,0 @@ |
2395 | -# QA Dashboard |
2396 | -# Copyright 2012 Canonical Ltd. |
2397 | - |
2398 | -# This program is free software: you can redistribute it and/or modify it |
2399 | -# under the terms of the GNU Affero General Public License version 3, as published |
2400 | -# by the Free Software Foundation. |
2401 | - |
2402 | -# This program is distributed in the hope that it will be useful, but |
2403 | -# WITHOUT ANY WARRANTY; without even the implied warranties of |
2404 | -# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
2405 | -# PURPOSE. See the GNU Affero General Public License for more details. |
2406 | - |
2407 | -# You should have received a copy of the GNU Affero General Public License along |
2408 | -# with this program. If not, see <http://www.gnu.org/licenses/>. |
2409 | - |
2410 | -from django.views.decorators.http import require_GET |
2411 | -from django.shortcuts import redirect |
2412 | - |
2413 | -@require_GET |
2414 | -def index(request): |
2415 | - return redirect('smoke/raring/flat/') |
2416 | |
2417 | === removed directory 'dashboard/views/api' |
2418 | === removed file 'dashboard/views/api/__init__.py' |
2419 | --- dashboard/views/api/__init__.py 2012-12-13 02:03:19 +0000 |
2420 | +++ dashboard/views/api/__init__.py 1970-01-01 00:00:00 +0000 |
2421 | @@ -1,35 +0,0 @@ |
2422 | -# QA Dashboard |
2423 | -# Copyright 2012 Canonical Ltd. |
2424 | - |
2425 | -# This program is free software: you can redistribute it and/or modify it |
2426 | -# under the terms of the GNU Affero General Public License version 3, as published |
2427 | -# by the Free Software Foundation. |
2428 | - |
2429 | -# This program is distributed in the hope that it will be useful, but |
2430 | -# WITHOUT ANY WARRANTY; without even the implied warranties of |
2431 | -# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
2432 | -# PURPOSE. See the GNU Affero General Public License for more details. |
2433 | - |
2434 | -# You should have received a copy of the GNU Affero General Public License along |
2435 | -# with this program. If not, see <http://www.gnu.org/licenses/>. |
2436 | - |
2437 | -import json |
2438 | - |
2439 | -from django.shortcuts import render_to_response |
2440 | -from django.views.decorators.csrf import csrf_exempt |
2441 | -from django.views.decorators.http import ( |
2442 | - require_GET, |
2443 | - ) |
2444 | - |
2445 | -from dashboard.forms import ( |
2446 | - ResultSmokeAddForm, |
2447 | - ResultKernelSRUAddForm, |
2448 | - BugForm, |
2449 | - ) |
2450 | -from dashboard.utils import ( |
2451 | - JSONResponse, |
2452 | - ) |
2453 | - |
2454 | -@require_GET |
2455 | -def api_help(request): |
2456 | - return render_to_response('api_help.html') |
2457 | |
2458 | === removed file 'dashboard/views/sru.py' |
2459 | --- dashboard/views/sru.py 2012-12-14 23:59:31 +0000 |
2460 | +++ dashboard/views/sru.py 1970-01-01 00:00:00 +0000 |
2461 | @@ -1,142 +0,0 @@ |
2462 | -# QA Dashboard |
2463 | -# Copyright 2012 Canonical Ltd. |
2464 | - |
2465 | -# This program is free software: you can redistribute it and/or modify it |
2466 | -# under the terms of the GNU Affero General Public License version 3, as published |
2467 | -# by the Free Software Foundation. |
2468 | - |
2469 | -# This program is distributed in the hope that it will be useful, but |
2470 | -# WITHOUT ANY WARRANTY; without even the implied warranties of |
2471 | -# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
2472 | -# PURPOSE. See the GNU Affero General Public License for more details. |
2473 | - |
2474 | -# You should have received a copy of the GNU Affero General Public License along |
2475 | -# with this program. If not, see <http://www.gnu.org/licenses/>. |
2476 | - |
2477 | -from django.shortcuts import render_to_response |
2478 | -from django.views.decorators.http import require_GET |
2479 | -from django.db.models import Sum, F |
2480 | -from django.template import RequestContext |
2481 | - |
2482 | -from dashboard.models import Kernel |
2483 | -from dashboard.utils import ( |
2484 | - JSONResponse, |
2485 | - MySerializer, |
2486 | - get_verbose, |
2487 | - ) |
2488 | - |
2489 | -def _get_kernel_names(): |
2490 | - kernels = [] |
2491 | - for kernel in Kernel.objects.values('variant').distinct().exclude(publish=False).order_by('variant'): |
2492 | - kernels.append(kernel['variant']) |
2493 | - |
2494 | - return kernels |
2495 | - |
2496 | -def _get_kernel_releases(): |
2497 | - releases = [] |
2498 | - for kernel in Kernel.objects.values('release').distinct().exclude(publish=False).order_by('-release'): |
2499 | - releases.append(kernel['release']) |
2500 | - |
2501 | - return releases |
2502 | - |
2503 | -@require_GET |
2504 | -def api_overview(request, release='', version=''): |
2505 | - kernels = Kernel.objects.all() |
2506 | - |
2507 | - if release != '': |
2508 | - kernels = kernels.filter(release=release) |
2509 | - |
2510 | - if version != '': |
2511 | - kernels = kernels.filter(version=version) |
2512 | - |
2513 | - serializer = MySerializer(use_extra_fields=get_verbose(request, True)) |
2514 | - data = serializer.serialize(kernels) |
2515 | - |
2516 | - return JSONResponse(data) |
2517 | - |
2518 | -@require_GET |
2519 | -def overview(request, release=''): |
2520 | - data = {} |
2521 | - data['kernel_names'] = _get_kernel_names() |
2522 | - data['releases'] = _get_kernel_releases() |
2523 | - data['kernels'] = [] |
2524 | - data['show_unknown'] = True |
2525 | - |
2526 | - show_unknown = request.GET.get('show_unknown') |
2527 | - |
2528 | - kernels = Kernel.objects.all() |
2529 | - |
2530 | - if show_unknown is None or show_unknown != "1": |
2531 | - data['show_unknown'] = False |
2532 | - kernels = kernels.exclude(version__startswith="Unknown") |
2533 | - |
2534 | - if release != '': |
2535 | - kernels = kernels.filter(release=release) |
2536 | - |
2537 | - kernel_data = {} |
2538 | - for kernel in kernels: |
2539 | - version = kernel.version |
2540 | - if version not in kernel_data: |
2541 | - kernel_data[version] = { |
2542 | - 'version': version, |
2543 | - 'pass_count': 0, |
2544 | - 'fail_count': 0, |
2545 | - 'skip_count': 0, |
2546 | - 'total_count': 0, |
2547 | - 'bug_count': 0, |
2548 | - } |
2549 | - |
2550 | - kernel_data[version]['pass_count'] += kernel.pass_count |
2551 | - kernel_data[version]['skip_count'] += kernel.skip_count |
2552 | - kernel_data[version]['fail_count'] += kernel.fail_count |
2553 | - kernel_data[version]['total_count'] += kernel.total_count |
2554 | - kernel_data[version]['bug_count'] += kernel.bug_count |
2555 | - kernel_data[version]['release'] = kernel.release |
2556 | - kernel_data[version]['last_run_date'] = kernel.last_run_date |
2557 | - |
2558 | - |
2559 | - for k,v in kernel_data.iteritems(): |
2560 | - if v['total_count'] == 0: |
2561 | - v['pass_rate'] = 0 |
2562 | - else: |
2563 | - v['pass_rate'] = v['pass_count'] * 1.0 / v['total_count'] |
2564 | - |
2565 | - v['pass_rate_pct'] = "{:<.2%}".format(v['pass_rate']) |
2566 | - |
2567 | - data['kernels'].append(v) |
2568 | - |
2569 | - return render_to_response('sru/overview.html', data, RequestContext(request)) |
2570 | - |
2571 | -@require_GET |
2572 | -def overview_kernel(request, release=None, kernel_version=None): |
2573 | - kernels = Kernel.objects.filter(version=kernel_version).select_related() |
2574 | - |
2575 | - data = { |
2576 | - 'kernels': kernels, |
2577 | - 'kernel_version': kernel_version, |
2578 | - 'release': release |
2579 | - } |
2580 | - |
2581 | - totals = { |
2582 | - 'skip_count': 0, |
2583 | - 'pass_count': 0, |
2584 | - 'fail_count': 0, |
2585 | - 'total_count': 0, |
2586 | - 'pass_rate': 0.0, |
2587 | - } |
2588 | - |
2589 | - for k in kernels: |
2590 | - totals['skip_count'] += k.skip_count |
2591 | - totals['pass_count'] += k.pass_count |
2592 | - totals['fail_count'] += k.fail_count |
2593 | - totals['total_count'] += k.total_count |
2594 | - |
2595 | - if totals['total_count'] == 0: |
2596 | - totals['pass_rate'] = 0.0 |
2597 | - else: |
2598 | - totals['pass_rate'] = totals['pass_count'] * 1.0 / totals['total_count'] |
2599 | - totals['pass_rate_pct'] = "{:.2%}".format(totals['pass_rate']) |
2600 | - |
2601 | - data['totals'] = totals |
2602 | - |
2603 | - return render_to_response('sru/overview_kernel.html', data, RequestContext(request)) |
2604 | |
2605 | === modified file 'qa_dashboard/settings.py' |
2606 | --- qa_dashboard/settings.py 2012-12-14 23:59:31 +0000 |
2607 | +++ qa_dashboard/settings.py 2012-12-20 01:49:23 +0000 |
2608 | @@ -142,9 +142,10 @@ |
2609 | 'django.contrib.sessions', |
2610 | 'django.contrib.staticfiles', |
2611 | 'django_tables2', |
2612 | - 'dashboard', |
2613 | 'bootspeed', |
2614 | 'common', |
2615 | + 'smoke', |
2616 | + 'sru', |
2617 | 'south', |
2618 | ) |
2619 | |
2620 | |
2621 | === modified file 'qa_dashboard/urls.py' |
2622 | --- qa_dashboard/urls.py 2012-12-13 03:33:47 +0000 |
2623 | +++ qa_dashboard/urls.py 2012-12-20 01:49:23 +0000 |
2624 | @@ -17,33 +17,38 @@ |
2625 | |
2626 | from django.conf.urls.defaults import patterns, url |
2627 | |
2628 | -urlpatterns = patterns('dashboard.views', |
2629 | +urlpatterns = patterns('common.views', |
2630 | url(r'^$', 'index', name='index'), |
2631 | - url(r'^smoke/(?P<release>\w+)/$', 'smoke.overview', name='smoke_overview'), |
2632 | - url(r'^smoke/(?P<release>\w+)/flat/$', 'smoke.overview', dict(is_flat=True), name='flat'), |
2633 | - url(r'^smoke/(?P<release>\w+)/run/(?P<run_id>\d+)/$', 'smoke.build_overview', name='build_overview'), |
2634 | - url(r'^smoke/(?P<release>\w+)/run/(?P<run_id>\d+)/pie/$', 'smoke.build_pie', name='build_pie'), |
2635 | - url(r'^smoke/(?P<release>\w+)/run/(?P<run_id>\d+)/image/(?P<image_id>\d+)/$', 'smoke.results', name='smoke_results'), |
2636 | - url(r'^smoke/(?P<release>\w+)/run/(?P<run_id>\d+)/image/(?P<image_id>\d+)/pie/$', 'smoke.results_pie', name='results_pie'), |
2637 | - url(r'^smoke/(?P<release>\w+)/run/(?P<run_id>\d+)/image/(?P<image_id>\d+)/logs/(?P<result_id>\d+)/$', 'smoke.results_logs', name='results_logs'), |
2638 | - url(r'^api/stats/$', 'api.smoke.api_stats'), |
2639 | - url(r'^api/stats/(?P<release>\w+)/$', 'api.smoke.api_stats'), |
2640 | - url(r'^api/smoke/(?P<release>\w+)/run/$', 'api.smoke.api_runs'), |
2641 | - url(r'^api/smoke/run/$', 'api.smoke.api_runs'), |
2642 | - url(r'^api/smoke/run/(?P<run_id>\d+)/$', 'api.smoke.api_run'), |
2643 | - url(r'^api/smoke/run/(?P<run_id>\d+)/image/$', 'api.smoke.api_images'), |
2644 | - url(r'^api/smoke/run/(?P<run_id>\d+)/image/(?P<image_id>\d+)/$', 'api.smoke.api_image'), |
2645 | - url(r'^api/smoke/run/(?P<run_id>\d+)/image/(?P<image_id>\d+)/result/$', 'api.smoke.api_results'), |
2646 | - url(r'^api/smoke/run/(?P<run_id>\d+)/image/(?P<image_id>\d+)/result/(?P<result_id>\d+)/$', 'api.smoke.api_result'), |
2647 | - url(r'^sru/$', 'sru.overview', name='sru'), |
2648 | - url(r'^sru/(?P<release>\w+)/$', 'sru.overview', name='sru_overview'), |
2649 | - url(r'^sru/(?P<release>\w+)/version/(?P<kernel_version>[^/]+)/$', 'sru.overview_kernel', name='sru_overview_kernel'), |
2650 | - url(r'^api/sru/$', 'sru.api_overview'), |
2651 | - url(r'^api/sru/(?P<release>\w+)/$', 'sru.api_overview'), |
2652 | - url(r'^api/sru/(?P<release>\w+)/(?P<version>[^/]+)/$', 'sru.api_overview'), |
2653 | - url(r'^api/help/$', 'api.api_help', name='api_help'), |
2654 | -) |
2655 | - |
2656 | + url(r'^api/help/$', 'api_help', name='api_help'), |
2657 | +) |
2658 | + |
2659 | +urlpatterns += patterns('smoke.views', |
2660 | + url(r'^smoke/(?P<release>\w+)/$', 'overview', name='smoke_overview'), |
2661 | + url(r'^smoke/(?P<release>\w+)/flat/$', 'overview', dict(is_flat=True), name='flat'), |
2662 | + url(r'^smoke/(?P<release>\w+)/run/(?P<run_id>\d+)/$', 'build_overview', name='build_overview'), |
2663 | + url(r'^smoke/(?P<release>\w+)/run/(?P<run_id>\d+)/pie/$', 'build_pie', name='build_pie'), |
2664 | + url(r'^smoke/(?P<release>\w+)/run/(?P<run_id>\d+)/image/(?P<image_id>\d+)/$', 'results', name='smoke_results'), |
2665 | + url(r'^smoke/(?P<release>\w+)/run/(?P<run_id>\d+)/image/(?P<image_id>\d+)/pie/$', 'results_pie', name='results_pie'), |
2666 | + url(r'^smoke/(?P<release>\w+)/run/(?P<run_id>\d+)/image/(?P<image_id>\d+)/logs/(?P<result_id>\d+)/$', 'results_logs', name='results_logs'), |
2667 | +) |
2668 | + |
2669 | +urlpatterns += patterns('smoke.api', |
2670 | + url(r'^api/stats/$', 'api_stats'), |
2671 | + url(r'^api/stats/(?P<release>\w+)/$', 'api_stats'), |
2672 | + url(r'^api/smoke/(?P<release>\w+)/run/$', 'api_runs'), |
2673 | + url(r'^api/smoke/run/$', 'api_runs'), |
2674 | + url(r'^api/smoke/run/(?P<run_id>\d+)/$', 'api_run'), |
2675 | + url(r'^api/smoke/run/(?P<run_id>\d+)/image/$', 'api_images'), |
2676 | + url(r'^api/smoke/run/(?P<run_id>\d+)/image/(?P<image_id>\d+)/$', 'api_image'), |
2677 | + url(r'^api/smoke/run/(?P<run_id>\d+)/image/(?P<image_id>\d+)/result/$', 'api_results'), |
2678 | + url(r'^api/smoke/run/(?P<run_id>\d+)/image/(?P<image_id>\d+)/result/(?P<result_id>\d+)/$', 'api_result'), |
2679 | +) |
2680 | + |
2681 | +urlpatterns += patterns('sru.views', |
2682 | + url(r'^sru/$', 'overview', name='sru'), |
2683 | + url(r'^sru/(?P<release>\w+)/$', 'overview', name='sru_overview'), |
2684 | + url(r'^sru/(?P<release>\w+)/version/(?P<kernel_version>[^/]+)/$', 'overview_kernel', name='sru_overview_kernel'), |
2685 | +) |
2686 | urlpatterns += patterns('bootspeed.views', |
2687 | url(r'^bootspeed/$', 'arch_overview', name='bootspeed_arch'), |
2688 | url(r'^bootspeed/arch/(?P<arch>\w+)/$', 'arch_overview', name='bootspeed_arch_overview'), |
2689 | |
2690 | === added directory 'smoke' |
2691 | === renamed file 'dashboard/NOTES' => 'smoke/NOTES' |
2692 | === renamed file 'dashboard/__init__.py' => 'smoke/__init__.py' |
2693 | === renamed file 'dashboard/views/api/smoke.py' => 'smoke/api.py' |
2694 | --- dashboard/views/api/smoke.py 2012-12-13 02:03:19 +0000 |
2695 | +++ smoke/api.py 2012-12-20 01:49:23 +0000 |
2696 | @@ -23,7 +23,6 @@ |
2697 | |
2698 | from dashboard.forms import ( |
2699 | ResultSmokeAddForm, |
2700 | - ResultKernelSRUAddForm, |
2701 | BugForm, |
2702 | ) |
2703 | |
2704 | @@ -35,7 +34,7 @@ |
2705 | ResultLog, |
2706 | ) |
2707 | |
2708 | -from dashboard.utils import ( |
2709 | +from common.utils import ( |
2710 | get_smoke_data, |
2711 | JSONResponse, |
2712 | MySerializer, |
2713 | |
2714 | === renamed file 'dashboard/forms.py' => 'smoke/forms.py' |
2715 | --- dashboard/forms.py 2012-12-05 22:05:06 +0000 |
2716 | +++ smoke/forms.py 2012-12-20 01:49:23 +0000 |
2717 | @@ -24,21 +24,6 @@ |
2718 | model = Result |
2719 | fields = ['name'] |
2720 | |
2721 | -class ResultKernelSRUAddForm(forms.Form): |
2722 | - build_no = forms.CharField(max_length=200) |
2723 | - job_type = forms.CharField(max_length=200) |
2724 | - flavor = forms.CharField(max_length=200) |
2725 | - release = forms.CharField(max_length=200) |
2726 | - variant = forms.CharField(max_length=200) |
2727 | - arch = forms.CharField(max_length=200) |
2728 | - version = forms.CharField(max_length=200) |
2729 | - build_name = forms.CharField(max_length=200) |
2730 | - ran_at = forms.DateTimeField() |
2731 | - |
2732 | - pass_count = forms.IntegerField() |
2733 | - fail_count = forms.IntegerField() |
2734 | - skip_count = forms.IntegerField() |
2735 | - |
2736 | class ResultSmokeAddForm(forms.Form): |
2737 | # Needed for Run class |
2738 | build_no = forms.CharField(max_length=200) |
2739 | |
2740 | === renamed directory 'dashboard/management' => 'smoke/management' |
2741 | === modified file 'smoke/management/__init__.py' |
2742 | --- dashboard/management/__init__.py 2012-12-02 02:51:10 +0000 |
2743 | +++ smoke/management/__init__.py 2012-12-20 01:49:23 +0000 |
2744 | @@ -12,31 +12,3 @@ |
2745 | |
2746 | # You should have received a copy of the GNU Affero General Public License along |
2747 | # with this program. If not, see <http://www.gnu.org/licenses/>. |
2748 | - |
2749 | -import json |
2750 | -import urllib2 |
2751 | - |
2752 | -BUILD_COUNT_MAX=20 # XXX: DEBUG |
2753 | -JOB_COUNT_MAX=20 # XXX: DEBUG |
2754 | -DEBUG_LIMITS=False |
2755 | - |
2756 | -def jenkins_get(loc, as_json=True): |
2757 | - req = urllib2.Request(loc) |
2758 | - response = '' |
2759 | - try_count = 0 |
2760 | - |
2761 | - while try_count < 5: |
2762 | - try: |
2763 | - f = urllib2.urlopen(req) |
2764 | - response = f.read() |
2765 | - f.close() |
2766 | - break |
2767 | - except urllib2.HTTPError: |
2768 | - try_count += 1 |
2769 | - except urllib2.URLError as e: |
2770 | - try_count += 1 |
2771 | - |
2772 | - if response != '' and as_json: |
2773 | - return json.loads(response) |
2774 | - else: |
2775 | - return response |
2776 | |
2777 | === modified file 'smoke/management/commands/jenkins_pull.py' |
2778 | --- dashboard/management/commands/jenkins_pull.py 2012-12-14 15:36:30 +0000 |
2779 | +++ smoke/management/commands/jenkins_pull.py 2012-12-20 01:49:23 +0000 |
2780 | @@ -24,27 +24,27 @@ |
2781 | |
2782 | from optparse import make_option |
2783 | |
2784 | -from dashboard.models import ( |
2785 | +from smoke.models import ( |
2786 | Bug, |
2787 | Build, |
2788 | Result, |
2789 | ResultLog, |
2790 | Run, |
2791 | ) |
2792 | -from dashboard.management import ( |
2793 | +from common.helpers import ( |
2794 | jenkins_get, |
2795 | BUILD_COUNT_MAX, |
2796 | JOB_COUNT_MAX, |
2797 | DEBUG_LIMITS, |
2798 | ) |
2799 | |
2800 | -from dashboard.utah_utils import process_smoke_log |
2801 | +from smoke.utah_utils import process_smoke_log |
2802 | |
2803 | #l = logging.getLogger('django.db.backends') |
2804 | #l.setLevel(logging.DEBUG) |
2805 | #l.addHandler(logging.StreamHandler()) |
2806 | |
2807 | -from dashboard.utils import regexes |
2808 | +from common.utils import regexes |
2809 | |
2810 | def _get_utah_logs(artifacts): |
2811 | """ |
2812 | |
2813 | === added directory 'smoke/migrations' |
2814 | === added file 'smoke/migrations/0001_create_smoke_app.py' |
2815 | --- smoke/migrations/0001_create_smoke_app.py 1970-01-01 00:00:00 +0000 |
2816 | +++ smoke/migrations/0001_create_smoke_app.py 2012-12-20 01:49:23 +0000 |
2817 | @@ -0,0 +1,184 @@ |
2818 | +# -*- coding: utf-8 -*- |
2819 | +import datetime |
2820 | +from south.db import db |
2821 | +from south.v2 import SchemaMigration |
2822 | +from django.db import models |
2823 | + |
2824 | + |
2825 | +class Migration(SchemaMigration): |
2826 | + |
2827 | + def forwards(self, orm): |
2828 | + # Adding model 'Bug' |
2829 | + db.create_table('bugs', ( |
2830 | + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), |
2831 | + ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), |
2832 | + ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), |
2833 | + ('internal', self.gf('django.db.models.fields.BooleanField')(default=True)), |
2834 | + ('publish', self.gf('django.db.models.fields.BooleanField')(default=True)), |
2835 | + ('bug_no', self.gf('django.db.models.fields.CharField')(max_length=255)), |
2836 | + ('status', self.gf('django.db.models.fields.CharField')(max_length=255)), |
2837 | + )) |
2838 | + db.send_create_signal('smoke', ['Bug']) |
2839 | + |
2840 | + # Adding model 'ResultLog' |
2841 | + db.create_table('result_logs', ( |
2842 | + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), |
2843 | + ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), |
2844 | + ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), |
2845 | + ('internal', self.gf('django.db.models.fields.BooleanField')(default=True)), |
2846 | + ('publish', self.gf('django.db.models.fields.BooleanField')(default=True)), |
2847 | + ('display_name', self.gf('django.db.models.fields.CharField')(max_length=255, null=True)), |
2848 | + ('path', self.gf('django.db.models.fields.TextField')()), |
2849 | + ('result', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['smoke.Result'])), |
2850 | + ('remote_url', self.gf('django.db.models.fields.URLField')(max_length=200)), |
2851 | + )) |
2852 | + db.send_create_signal('smoke', ['ResultLog']) |
2853 | + |
2854 | + # Adding model 'Run' |
2855 | + db.create_table('runs', ( |
2856 | + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), |
2857 | + ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), |
2858 | + ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), |
2859 | + ('internal', self.gf('django.db.models.fields.BooleanField')(default=True)), |
2860 | + ('publish', self.gf('django.db.models.fields.BooleanField')(default=True)), |
2861 | + ('build_no', self.gf('django.db.models.fields.CharField')(max_length=200, db_index=True)), |
2862 | + ('release', self.gf('django.db.models.fields.CharField')(max_length=200, db_index=True)), |
2863 | + ('flavor', self.gf('django.db.models.fields.CharField')(max_length=200, db_index=True)), |
2864 | + ('test_type', self.gf('django.db.models.fields.IntegerField')(null=True)), |
2865 | + ('ran_at', self.gf('django.db.models.fields.DateTimeField')()), |
2866 | + )) |
2867 | + db.send_create_signal('smoke', ['Run']) |
2868 | + |
2869 | + # Adding model 'Build' |
2870 | + db.create_table('builds', ( |
2871 | + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), |
2872 | + ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), |
2873 | + ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), |
2874 | + ('internal', self.gf('django.db.models.fields.BooleanField')(default=True)), |
2875 | + ('publish', self.gf('django.db.models.fields.BooleanField')(default=True)), |
2876 | + ('run', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['smoke.Run'])), |
2877 | + ('name', self.gf('django.db.models.fields.CharField')(max_length=200, null=True)), |
2878 | + ('flavor', self.gf('django.db.models.fields.CharField')(max_length=200)), |
2879 | + ('variant', self.gf('django.db.models.fields.CharField')(max_length=200)), |
2880 | + ('arch', self.gf('django.db.models.fields.CharField')(max_length=200)), |
2881 | + )) |
2882 | + db.send_create_signal('smoke', ['Build']) |
2883 | + |
2884 | + # Adding model 'Result' |
2885 | + db.create_table('results', ( |
2886 | + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), |
2887 | + ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), |
2888 | + ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), |
2889 | + ('internal', self.gf('django.db.models.fields.BooleanField')(default=True)), |
2890 | + ('publish', self.gf('django.db.models.fields.BooleanField')(default=True)), |
2891 | + ('build', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['smoke.Build'])), |
2892 | + ('name', self.gf('django.db.models.fields.CharField')(max_length=255)), |
2893 | + ('jenkins_build', self.gf('django.db.models.fields.CharField')(max_length=255)), |
2894 | + ('jenkins_url', self.gf('django.db.models.fields.URLField')(max_length=200)), |
2895 | + ('fail_count', self.gf('django.db.models.fields.IntegerField')()), |
2896 | + ('error_count', self.gf('django.db.models.fields.IntegerField')(default=0)), |
2897 | + ('pass_count', self.gf('django.db.models.fields.IntegerField')()), |
2898 | + ('total_count', self.gf('django.db.models.fields.IntegerField')()), |
2899 | + ('ran_at', self.gf('django.db.models.fields.DateTimeField')()), |
2900 | + )) |
2901 | + db.send_create_signal('smoke', ['Result']) |
2902 | + |
2903 | + # Adding M2M table for field bugs on 'Result' |
2904 | + db.create_table('results_bugs', ( |
2905 | + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), |
2906 | + ('result', models.ForeignKey(orm['smoke.result'], null=False)), |
2907 | + ('bug', models.ForeignKey(orm['smoke.bug'], null=False)) |
2908 | + )) |
2909 | + db.create_unique('results_bugs', ['result_id', 'bug_id']) |
2910 | + |
2911 | + |
2912 | + def backwards(self, orm): |
2913 | + # Deleting model 'Bug' |
2914 | + db.delete_table('bugs') |
2915 | + |
2916 | + # Deleting model 'ResultLog' |
2917 | + db.delete_table('result_logs') |
2918 | + |
2919 | + # Deleting model 'Run' |
2920 | + db.delete_table('runs') |
2921 | + |
2922 | + # Deleting model 'Build' |
2923 | + db.delete_table('builds') |
2924 | + |
2925 | + # Deleting model 'Result' |
2926 | + db.delete_table('results') |
2927 | + |
2928 | + # Removing M2M table for field bugs on 'Result' |
2929 | + db.delete_table('results_bugs') |
2930 | + |
2931 | + |
2932 | + models = { |
2933 | + 'smoke.bug': { |
2934 | + 'Meta': {'object_name': 'Bug', 'db_table': "'bugs'"}, |
2935 | + 'bug_no': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
2936 | + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
2937 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
2938 | + 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2939 | + 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2940 | + 'status': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
2941 | + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
2942 | + }, |
2943 | + 'smoke.build': { |
2944 | + 'Meta': {'object_name': 'Build', 'db_table': "'builds'"}, |
2945 | + 'arch': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
2946 | + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
2947 | + 'flavor': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
2948 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
2949 | + 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2950 | + 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}), |
2951 | + 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2952 | + 'run': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['smoke.Run']"}), |
2953 | + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
2954 | + 'variant': ('django.db.models.fields.CharField', [], {'max_length': '200'}) |
2955 | + }, |
2956 | + 'smoke.result': { |
2957 | + 'Meta': {'object_name': 'Result', 'db_table': "'results'"}, |
2958 | + 'bugs': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['smoke.Bug']", 'symmetrical': 'False'}), |
2959 | + 'build': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['smoke.Build']"}), |
2960 | + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
2961 | + 'error_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), |
2962 | + 'fail_count': ('django.db.models.fields.IntegerField', [], {}), |
2963 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
2964 | + 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2965 | + 'jenkins_build': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
2966 | + 'jenkins_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
2967 | + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
2968 | + 'pass_count': ('django.db.models.fields.IntegerField', [], {}), |
2969 | + 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2970 | + 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
2971 | + 'total_count': ('django.db.models.fields.IntegerField', [], {}), |
2972 | + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
2973 | + }, |
2974 | + 'smoke.resultlog': { |
2975 | + 'Meta': {'object_name': 'ResultLog', 'db_table': "'result_logs'"}, |
2976 | + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
2977 | + 'display_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), |
2978 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
2979 | + 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2980 | + 'path': ('django.db.models.fields.TextField', [], {}), |
2981 | + 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2982 | + 'remote_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
2983 | + 'result': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['smoke.Result']"}), |
2984 | + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
2985 | + }, |
2986 | + 'smoke.run': { |
2987 | + 'Meta': {'object_name': 'Run', 'db_table': "'runs'"}, |
2988 | + 'build_no': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
2989 | + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
2990 | + 'flavor': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
2991 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
2992 | + 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2993 | + 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
2994 | + 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
2995 | + 'release': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
2996 | + 'test_type': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), |
2997 | + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
2998 | + } |
2999 | + } |
3000 | + |
3001 | + complete_apps = ['smoke'] |
3002 | \ No newline at end of file |
3003 | |
3004 | === added file 'smoke/migrations/0002_remove_bug_model.py' |
3005 | --- smoke/migrations/0002_remove_bug_model.py 1970-01-01 00:00:00 +0000 |
3006 | +++ smoke/migrations/0002_remove_bug_model.py 2012-12-20 01:49:23 +0000 |
3007 | @@ -0,0 +1,98 @@ |
3008 | +# -*- coding: utf-8 -*- |
3009 | +import datetime |
3010 | +from south.db import db |
3011 | +from south.v2 import SchemaMigration |
3012 | +from django.db import models |
3013 | + |
3014 | + |
3015 | +class Migration(SchemaMigration): |
3016 | + |
3017 | + def forwards(self, orm): |
3018 | + # Deleting model 'Bug' |
3019 | + db.delete_table('bugs') |
3020 | + |
3021 | + |
3022 | + def backwards(self, orm): |
3023 | + # Adding model 'Bug' |
3024 | + db.create_table('bugs', ( |
3025 | + ('status', self.gf('django.db.models.fields.CharField')(max_length=255)), |
3026 | + ('internal', self.gf('django.db.models.fields.BooleanField')(default=True)), |
3027 | + ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), |
3028 | + ('bug_no', self.gf('django.db.models.fields.CharField')(max_length=255)), |
3029 | + ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), |
3030 | + ('publish', self.gf('django.db.models.fields.BooleanField')(default=True)), |
3031 | + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), |
3032 | + )) |
3033 | + db.send_create_signal('smoke', ['Bug']) |
3034 | + |
3035 | + |
3036 | + models = { |
3037 | + 'common.bug': { |
3038 | + 'Meta': {'object_name': 'Bug', 'db_table': "'bugs'"}, |
3039 | + 'bug_no': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
3040 | + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
3041 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
3042 | + 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
3043 | + 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
3044 | + 'status': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
3045 | + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
3046 | + }, |
3047 | + 'smoke.build': { |
3048 | + 'Meta': {'object_name': 'Build', 'db_table': "'builds'"}, |
3049 | + 'arch': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
3050 | + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
3051 | + 'flavor': ('django.db.models.fields.CharField', [], {'max_length': '200'}), |
3052 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
3053 | + 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
3054 | + 'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}), |
3055 | + 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
3056 | + 'run': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['smoke.Run']"}), |
3057 | + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
3058 | + 'variant': ('django.db.models.fields.CharField', [], {'max_length': '200'}) |
3059 | + }, |
3060 | + 'smoke.result': { |
3061 | + 'Meta': {'object_name': 'Result', 'db_table': "'results'"}, |
3062 | + 'bugs': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['common.Bug']", 'symmetrical': 'False'}), |
3063 | + 'build': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['smoke.Build']"}), |
3064 | + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
3065 | + 'error_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), |
3066 | + 'fail_count': ('django.db.models.fields.IntegerField', [], {}), |
3067 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
3068 | + 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
3069 | + 'jenkins_build': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
3070 | + 'jenkins_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
3071 | + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
3072 | + 'pass_count': ('django.db.models.fields.IntegerField', [], {}), |
3073 | + 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
3074 | + 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
3075 | + 'total_count': ('django.db.models.fields.IntegerField', [], {}), |
3076 | + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
3077 | + }, |
3078 | + 'smoke.resultlog': { |
3079 | + 'Meta': {'object_name': 'ResultLog', 'db_table': "'result_logs'"}, |
3080 | + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
3081 | + 'display_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), |
3082 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
3083 | + 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
3084 | + 'path': ('django.db.models.fields.TextField', [], {}), |
3085 | + 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
3086 | + 'remote_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
3087 | + 'result': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['smoke.Result']"}), |
3088 | + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
3089 | + }, |
3090 | + 'smoke.run': { |
3091 | + 'Meta': {'object_name': 'Run', 'db_table': "'runs'"}, |
3092 | + 'build_no': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
3093 | + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
3094 | + 'flavor': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
3095 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
3096 | + 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
3097 | + 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
3098 | + 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
3099 | + 'release': ('django.db.models.fields.CharField', [], {'max_length': '200', 'db_index': 'True'}), |
3100 | + 'test_type': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), |
3101 | + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
3102 | + } |
3103 | + } |
3104 | + |
3105 | + complete_apps = ['smoke'] |
3106 | \ No newline at end of file |
3107 | |
3108 | === added file 'smoke/migrations/__init__.py' |
3109 | === renamed file 'dashboard/models.py' => 'smoke/models.py' |
3110 | --- dashboard/models.py 2012-12-06 20:00:30 +0000 |
3111 | +++ smoke/models.py 2012-12-20 01:49:23 +0000 |
3112 | @@ -16,40 +16,9 @@ |
3113 | from django.db import models |
3114 | import datetime |
3115 | |
3116 | -class DashboardBaseModel(models.Model): |
3117 | - """ |
3118 | - Common base class that provides fields needed on every model. |
3119 | - """ |
3120 | - class Meta: |
3121 | - abstract = True |
3122 | - |
3123 | - created_at = models.DateTimeField(auto_now_add = True) |
3124 | - updated_at = models.DateTimeField(auto_now = True) |
3125 | - internal = models.BooleanField(default=True) |
3126 | - publish = models.BooleanField(default=True) |
3127 | - |
3128 | -class Bug(DashboardBaseModel): |
3129 | - class Meta: |
3130 | - db_table = 'bugs' |
3131 | - bug_no = models.CharField(max_length=255) |
3132 | - status = models.CharField(max_length=255) |
3133 | - |
3134 | - def __unicode__(self): |
3135 | - return self.bug_no |
3136 | - |
3137 | - @property |
3138 | - def debug_str(self): |
3139 | - return "{}-{}-{}-{}-{}".format( |
3140 | - self.id, |
3141 | - self.bug_no, |
3142 | - self.status, |
3143 | - self.created_at, |
3144 | - self.updated_at, |
3145 | - ) |
3146 | - |
3147 | -### |
3148 | -# Smoke |
3149 | -### |
3150 | +from common.models import DashboardBaseModel, Bug |
3151 | + |
3152 | + |
3153 | class ResultLog(DashboardBaseModel): |
3154 | class Meta: |
3155 | db_table = 'result_logs' |
3156 | @@ -265,132 +234,3 @@ |
3157 | @property |
3158 | def log_count(self): |
3159 | return self.resultlog_set.count() |
3160 | - |
3161 | -### |
3162 | -# Kernel SRU |
3163 | -### |
3164 | - |
3165 | -class Kernel(DashboardBaseModel): |
3166 | - class Meta: |
3167 | - db_table = "kernels" |
3168 | - |
3169 | - job_type = models.CharField(max_length=100) |
3170 | - release = models.CharField(max_length=100) |
3171 | - variant = models.CharField(max_length=100) |
3172 | - arch = models.CharField(max_length=100) |
3173 | - gpu = models.CharField(max_length=100) |
3174 | - version = models.CharField(max_length=100) |
3175 | - |
3176 | - # Used by MySerializer to add property fields to the JSON representation |
3177 | - # of an instance of this class. |
3178 | - extra_fields = [ |
3179 | - 'pass_count', |
3180 | - 'skip_count', |
3181 | - 'fail_count', |
3182 | - 'total_count', |
3183 | - 'pass_rate', |
3184 | - 'pass_rate_pct', |
3185 | - 'bug_count', |
3186 | - 'log_count', |
3187 | - ] |
3188 | - |
3189 | - def debug_str(self): |
3190 | - return "{}-{}-{}-{}".format( |
3191 | - self.release, |
3192 | - self.variant, |
3193 | - self.arch, |
3194 | - self.gpu, |
3195 | - ) |
3196 | - |
3197 | - @property |
3198 | - def name(self): |
3199 | - return "{}-{}".format(self.release, self.variant) |
3200 | - |
3201 | - @property |
3202 | - def total_count(self): |
3203 | - return self.sruresult_set.aggregate(models.Sum('total_count'))['total_count__sum'] or 0 |
3204 | - |
3205 | - @property |
3206 | - def pass_count(self): |
3207 | - return self.sruresult_set.aggregate(models.Sum('pass_count'))['pass_count__sum'] or 0 |
3208 | - |
3209 | - @property |
3210 | - def fail_count(self): |
3211 | - return self.sruresult_set.aggregate(models.Sum('fail_count'))['fail_count__sum'] or 0 |
3212 | - |
3213 | - @property |
3214 | - def skip_count(self): |
3215 | - return self.sruresult_set.aggregate(models.Sum('skip_count'))['skip_count__sum'] or 0 |
3216 | - |
3217 | - @property |
3218 | - def pass_rate(self): |
3219 | - return self.pass_count*1.0 / self.total_count if self.total_count > 0 else 0 |
3220 | - |
3221 | - @property |
3222 | - def pass_rate_pct(self): |
3223 | - return "%d%%" % int(self.pass_rate*100) |
3224 | - |
3225 | - @property |
3226 | - def bug_count(self): |
3227 | - return self.sruresult_set.annotate(num_bugs=models.Count('bugs')).aggregate(models.Sum('num_bugs'))['num_bugs__sum'] or 0 |
3228 | - |
3229 | - @property |
3230 | - def log_count(self): |
3231 | - return self.sruresultlog_set.count() |
3232 | - |
3233 | - @property |
3234 | - def last_run_date(self): |
3235 | - return self.sruresult_set.aggregate(models.Max('ran_at'))['ran_at__max'].strftime("%Y-%m-%d %H:%M") |
3236 | - |
3237 | -# XXX: refactor this and Result |
3238 | -class SRUResult(DashboardBaseModel): |
3239 | - class Meta: |
3240 | - db_table = 'sru_results' |
3241 | - |
3242 | - kernel = models.ForeignKey(Kernel) |
3243 | - bugs = models.ManyToManyField(Bug) |
3244 | - |
3245 | - jenkins_build = models.CharField(max_length=255) |
3246 | - jenkins_url = models.URLField() |
3247 | - name = models.CharField(max_length=255) |
3248 | - pass_count = models.IntegerField() |
3249 | - fail_count = models.IntegerField() |
3250 | - skip_count = models.IntegerField() |
3251 | - total_count = models.IntegerField() |
3252 | - ran_at = models.DateTimeField('date run') |
3253 | - |
3254 | - # Used by MySerializer to add property fields to the JSON representation |
3255 | - # of an instance of this class. |
3256 | - extra_fields = [ |
3257 | - 'pass_rate', |
3258 | - 'pass_rate_pct', |
3259 | - 'bug_count', |
3260 | - 'log_count', |
3261 | - ] |
3262 | - |
3263 | - @property |
3264 | - def pass_rate(self): |
3265 | - return self.pass_count*1.0 / self.total_count if self.total_count > 0 else 0 |
3266 | - |
3267 | - @property |
3268 | - def pass_rate_pct(self): |
3269 | - return "%d%%" % int(self.pass_rate*100) |
3270 | - |
3271 | - @property |
3272 | - def bug_count(self): |
3273 | - return self.bugs.count() |
3274 | - |
3275 | - @property |
3276 | - def log_count(self): |
3277 | - return self.resultlog_set.count() |
3278 | - |
3279 | -class SRUResultLog(DashboardBaseModel): |
3280 | - class Meta: |
3281 | - db_table = 'sru_result_logs' |
3282 | - display_name = models.CharField(max_length=255, null = True) |
3283 | - path = models.TextField() |
3284 | - sru_result = models.ForeignKey('SRUResult') |
3285 | - remote_url = models.URLField() |
3286 | - |
3287 | - def __unicode__(self): |
3288 | - return self.path |
3289 | |
3290 | === renamed directory 'dashboard/templates' => 'smoke/templates' |
3291 | === renamed directory 'dashboard/templatetags' => 'smoke/templatetags' |
3292 | === renamed file 'dashboard/tests.py' => 'smoke/tests.py' |
3293 | === renamed file 'dashboard/utah_parser.py' => 'smoke/utah_parser.py' |
3294 | --- dashboard/utah_parser.py 2012-12-13 23:48:40 +0000 |
3295 | +++ smoke/utah_parser.py 2012-12-20 01:49:23 +0000 |
3296 | @@ -1,3 +1,18 @@ |
3297 | +# QA Dashboard |
3298 | +# Copyright 2012 Canonical Ltd. |
3299 | + |
3300 | +# This program is free software: you can redistribute it and/or modify it |
3301 | +# under the terms of the GNU Affero General Public License version 3, as published |
3302 | +# by the Free Software Foundation. |
3303 | + |
3304 | +# This program is distributed in the hope that it will be useful, but |
3305 | +# WITHOUT ANY WARRANTY; without even the implied warranties of |
3306 | +# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
3307 | +# PURPOSE. See the GNU Affero General Public License for more details. |
3308 | + |
3309 | +# You should have received a copy of the GNU Affero General Public License along |
3310 | +# with this program. If not, see <http://www.gnu.org/licenses/>. |
3311 | + |
3312 | """UTAH Client log parser.""" |
3313 | import argparse |
3314 | import urllib2 |
3315 | |
3316 | === renamed file 'dashboard/utah_utils.py' => 'smoke/utah_utils.py' |
3317 | --- dashboard/utah_utils.py 2012-12-14 14:02:04 +0000 |
3318 | +++ smoke/utah_utils.py 2012-12-20 01:49:23 +0000 |
3319 | @@ -19,8 +19,8 @@ |
3320 | |
3321 | import logging |
3322 | |
3323 | -from dashboard.utah_parser import UTAHParser, ParserError |
3324 | -from dashboard.models import ( |
3325 | +from smoke.utah_parser import UTAHParser, ParserError |
3326 | +from smoke.models import ( |
3327 | Build, |
3328 | Run, |
3329 | Result, |
3330 | |
3331 | === renamed file 'dashboard/views/smoke.py' => 'smoke/views.py' |
3332 | --- dashboard/views/smoke.py 2012-12-14 23:59:31 +0000 |
3333 | +++ smoke/views.py 2012-12-20 01:49:23 +0000 |
3334 | @@ -41,10 +41,10 @@ |
3335 | |
3336 | from dashboard.forms import ( |
3337 | ResultSmokeAddForm, |
3338 | - ResultKernelSRUAddForm, |
3339 | BugForm, |
3340 | ) |
3341 | -from dashboard.utils import ( |
3342 | + |
3343 | +from common.utils import ( |
3344 | get_smoke_data, |
3345 | require_API_TOKEN, |
3346 | JSONResponse, |
3347 | |
3348 | === added directory 'sru' |
3349 | === added file 'sru/__init__.py' |
3350 | --- sru/__init__.py 1970-01-01 00:00:00 +0000 |
3351 | +++ sru/__init__.py 2012-12-20 01:49:23 +0000 |
3352 | @@ -0,0 +1,14 @@ |
3353 | +# QA Dashboard |
3354 | +# Copyright 2012 Canonical Ltd. |
3355 | + |
3356 | +# This program is free software: you can redistribute it and/or modify it |
3357 | +# under the terms of the GNU Affero General Public License version 3, as published |
3358 | +# by the Free Software Foundation. |
3359 | + |
3360 | +# This program is distributed in the hope that it will be useful, but |
3361 | +# WITHOUT ANY WARRANTY; without even the implied warranties of |
3362 | +# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
3363 | +# PURPOSE. See the GNU Affero General Public License for more details. |
3364 | + |
3365 | +# You should have received a copy of the GNU Affero General Public License along |
3366 | +# with this program. If not, see <http://www.gnu.org/licenses/>. |
3367 | |
3368 | === added file 'sru/forms.py' |
3369 | --- sru/forms.py 1970-01-01 00:00:00 +0000 |
3370 | +++ sru/forms.py 2012-12-20 01:49:23 +0000 |
3371 | @@ -0,0 +1,33 @@ |
3372 | +# QA Dashboard |
3373 | +# Copyright 2012 Canonical Ltd. |
3374 | + |
3375 | +# This program is free software: you can redistribute it and/or modify it |
3376 | +# under the terms of the GNU Affero General Public License version 3, as published |
3377 | +# by the Free Software Foundation. |
3378 | + |
3379 | +# This program is distributed in the hope that it will be useful, but |
3380 | +# WITHOUT ANY WARRANTY; without even the implied warranties of |
3381 | +# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
3382 | +# PURPOSE. See the GNU Affero General Public License for more details. |
3383 | + |
3384 | +# You should have received a copy of the GNU Affero General Public License along |
3385 | +# with this program. If not, see <http://www.gnu.org/licenses/>. |
3386 | + |
3387 | +# Make sure field lengths match those in dashboard/models.py |
3388 | + |
3389 | +from django import forms |
3390 | + |
3391 | +class ResultKernelSRUAddForm(forms.Form): |
3392 | + build_no = forms.CharField(max_length=200) |
3393 | + job_type = forms.CharField(max_length=200) |
3394 | + flavor = forms.CharField(max_length=200) |
3395 | + release = forms.CharField(max_length=200) |
3396 | + variant = forms.CharField(max_length=200) |
3397 | + arch = forms.CharField(max_length=200) |
3398 | + version = forms.CharField(max_length=200) |
3399 | + build_name = forms.CharField(max_length=200) |
3400 | + ran_at = forms.DateTimeField() |
3401 | + |
3402 | + pass_count = forms.IntegerField() |
3403 | + fail_count = forms.IntegerField() |
3404 | + skip_count = forms.IntegerField() |
3405 | |
3406 | === added directory 'sru/management' |
3407 | === added file 'sru/management/__init__.py' |
3408 | --- sru/management/__init__.py 1970-01-01 00:00:00 +0000 |
3409 | +++ sru/management/__init__.py 2012-12-20 01:49:23 +0000 |
3410 | @@ -0,0 +1,14 @@ |
3411 | +# QA Dashboard |
3412 | +# Copyright 2012 Canonical Ltd. |
3413 | + |
3414 | +# This program is free software: you can redistribute it and/or modify it |
3415 | +# under the terms of the GNU Affero General Public License version 3, as published |
3416 | +# by the Free Software Foundation. |
3417 | + |
3418 | +# This program is distributed in the hope that it will be useful, but |
3419 | +# WITHOUT ANY WARRANTY; without even the implied warranties of |
3420 | +# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
3421 | +# PURPOSE. See the GNU Affero General Public License for more details. |
3422 | + |
3423 | +# You should have received a copy of the GNU Affero General Public License along |
3424 | +# with this program. If not, see <http://www.gnu.org/licenses/>. |
3425 | |
3426 | === added directory 'sru/management/commands' |
3427 | === added file 'sru/management/commands/__init__.py' |
3428 | --- sru/management/commands/__init__.py 1970-01-01 00:00:00 +0000 |
3429 | +++ sru/management/commands/__init__.py 2012-12-20 01:49:23 +0000 |
3430 | @@ -0,0 +1,14 @@ |
3431 | +# QA Dashboard |
3432 | +# Copyright 2012 Canonical Ltd. |
3433 | + |
3434 | +# This program is free software: you can redistribute it and/or modify it |
3435 | +# under the terms of the GNU Affero General Public License version 3, as published |
3436 | +# by the Free Software Foundation. |
3437 | + |
3438 | +# This program is distributed in the hope that it will be useful, but |
3439 | +# WITHOUT ANY WARRANTY; without even the implied warranties of |
3440 | +# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
3441 | +# PURPOSE. See the GNU Affero General Public License for more details. |
3442 | + |
3443 | +# You should have received a copy of the GNU Affero General Public License along |
3444 | +# with this program. If not, see <http://www.gnu.org/licenses/>. |
3445 | |
3446 | === renamed file 'dashboard/management/commands/jenkins_pull_sru.py' => 'sru/management/commands/jenkins_pull_sru.py' |
3447 | --- dashboard/management/commands/jenkins_pull_sru.py 2012-12-14 15:36:30 +0000 |
3448 | +++ sru/management/commands/jenkins_pull_sru.py 2012-12-20 01:49:23 +0000 |
3449 | @@ -19,14 +19,14 @@ |
3450 | from optparse import make_option |
3451 | from django.core.management.base import BaseCommand, CommandError |
3452 | |
3453 | -from dashboard.management import ( |
3454 | +from common.helpers import ( |
3455 | jenkins_get, |
3456 | BUILD_COUNT_MAX, |
3457 | JOB_COUNT_MAX, |
3458 | DEBUG_LIMITS, |
3459 | ) |
3460 | -from dashboard.utils import regexes |
3461 | -from dashboard.models import ( |
3462 | +from common.utils import regexes |
3463 | +from sru.models import ( |
3464 | Kernel, |
3465 | SRUResult, |
3466 | SRUResultLog, |
3467 | |
3468 | === added directory 'sru/migrations' |
3469 | === added file 'sru/migrations/0001_create_sru_app.py' |
3470 | --- sru/migrations/0001_create_sru_app.py 1970-01-01 00:00:00 +0000 |
3471 | +++ sru/migrations/0001_create_sru_app.py 2012-12-20 01:49:23 +0000 |
3472 | @@ -0,0 +1,140 @@ |
3473 | +# -*- coding: utf-8 -*- |
3474 | +import datetime |
3475 | +from south.db import db |
3476 | +from south.v2 import SchemaMigration |
3477 | +from django.db import models |
3478 | + |
3479 | + |
3480 | +class Migration(SchemaMigration): |
3481 | + |
3482 | + def forwards(self, orm): |
3483 | + # Adding model 'Kernel' |
3484 | + db.create_table('kernels', ( |
3485 | + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), |
3486 | + ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), |
3487 | + ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), |
3488 | + ('internal', self.gf('django.db.models.fields.BooleanField')(default=True)), |
3489 | + ('publish', self.gf('django.db.models.fields.BooleanField')(default=True)), |
3490 | + ('job_type', self.gf('django.db.models.fields.CharField')(max_length=100)), |
3491 | + ('release', self.gf('django.db.models.fields.CharField')(max_length=100)), |
3492 | + ('variant', self.gf('django.db.models.fields.CharField')(max_length=100)), |
3493 | + ('arch', self.gf('django.db.models.fields.CharField')(max_length=100)), |
3494 | + ('gpu', self.gf('django.db.models.fields.CharField')(max_length=100)), |
3495 | + ('version', self.gf('django.db.models.fields.CharField')(max_length=100)), |
3496 | + )) |
3497 | + db.send_create_signal('sru', ['Kernel']) |
3498 | + |
3499 | + # Adding model 'SRUResult' |
3500 | + db.create_table('sru_results', ( |
3501 | + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), |
3502 | + ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), |
3503 | + ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), |
3504 | + ('internal', self.gf('django.db.models.fields.BooleanField')(default=True)), |
3505 | + ('publish', self.gf('django.db.models.fields.BooleanField')(default=True)), |
3506 | + ('kernel', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['sru.Kernel'])), |
3507 | + ('jenkins_build', self.gf('django.db.models.fields.CharField')(max_length=255)), |
3508 | + ('jenkins_url', self.gf('django.db.models.fields.URLField')(max_length=200)), |
3509 | + ('name', self.gf('django.db.models.fields.CharField')(max_length=255)), |
3510 | + ('pass_count', self.gf('django.db.models.fields.IntegerField')()), |
3511 | + ('fail_count', self.gf('django.db.models.fields.IntegerField')()), |
3512 | + ('skip_count', self.gf('django.db.models.fields.IntegerField')()), |
3513 | + ('total_count', self.gf('django.db.models.fields.IntegerField')()), |
3514 | + ('ran_at', self.gf('django.db.models.fields.DateTimeField')()), |
3515 | + )) |
3516 | + db.send_create_signal('sru', ['SRUResult']) |
3517 | + |
3518 | + # Adding M2M table for field bugs on 'SRUResult' |
3519 | + db.create_table('sru_results_bugs', ( |
3520 | + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), |
3521 | + ('sruresult', models.ForeignKey(orm['sru.sruresult'], null=False)), |
3522 | + ('bug', models.ForeignKey(orm['dashboard.bug'], null=False)) |
3523 | + )) |
3524 | + db.create_unique('sru_results_bugs', ['sruresult_id', 'bug_id']) |
3525 | + |
3526 | + # Adding model 'SRUResultLog' |
3527 | + db.create_table('sru_result_logs', ( |
3528 | + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), |
3529 | + ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), |
3530 | + ('updated_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), |
3531 | + ('internal', self.gf('django.db.models.fields.BooleanField')(default=True)), |
3532 | + ('publish', self.gf('django.db.models.fields.BooleanField')(default=True)), |
3533 | + ('display_name', self.gf('django.db.models.fields.CharField')(max_length=255, null=True)), |
3534 | + ('path', self.gf('django.db.models.fields.TextField')()), |
3535 | + ('sru_result', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['sru.SRUResult'])), |
3536 | + ('remote_url', self.gf('django.db.models.fields.URLField')(max_length=200)), |
3537 | + )) |
3538 | + db.send_create_signal('sru', ['SRUResultLog']) |
3539 | + |
3540 | + |
3541 | + def backwards(self, orm): |
3542 | + # Deleting model 'Kernel' |
3543 | + db.delete_table('kernels') |
3544 | + |
3545 | + # Deleting model 'SRUResult' |
3546 | + db.delete_table('sru_results') |
3547 | + |
3548 | + # Removing M2M table for field bugs on 'SRUResult' |
3549 | + db.delete_table('sru_results_bugs') |
3550 | + |
3551 | + # Deleting model 'SRUResultLog' |
3552 | + db.delete_table('sru_result_logs') |
3553 | + |
3554 | + |
3555 | + models = { |
3556 | + 'dashboard.bug': { |
3557 | + 'Meta': {'object_name': 'Bug', 'db_table': "'bugs'"}, |
3558 | + 'bug_no': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
3559 | + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
3560 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
3561 | + 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
3562 | + 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
3563 | + 'status': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
3564 | + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
3565 | + }, |
3566 | + 'sru.kernel': { |
3567 | + 'Meta': {'object_name': 'Kernel', 'db_table': "'kernels'"}, |
3568 | + 'arch': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
3569 | + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
3570 | + 'gpu': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
3571 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
3572 | + 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
3573 | + 'job_type': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
3574 | + 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
3575 | + 'release': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
3576 | + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
3577 | + 'variant': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
3578 | + 'version': ('django.db.models.fields.CharField', [], {'max_length': '100'}) |
3579 | + }, |
3580 | + 'sru.sruresult': { |
3581 | + 'Meta': {'object_name': 'SRUResult', 'db_table': "'sru_results'"}, |
3582 | + 'bugs': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard.Bug']", 'symmetrical': 'False'}), |
3583 | + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
3584 | + 'fail_count': ('django.db.models.fields.IntegerField', [], {}), |
3585 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
3586 | + 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
3587 | + 'jenkins_build': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
3588 | + 'jenkins_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
3589 | + 'kernel': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['sru.Kernel']"}), |
3590 | + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
3591 | + 'pass_count': ('django.db.models.fields.IntegerField', [], {}), |
3592 | + 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
3593 | + 'ran_at': ('django.db.models.fields.DateTimeField', [], {}), |
3594 | + 'skip_count': ('django.db.models.fields.IntegerField', [], {}), |
3595 | + 'total_count': ('django.db.models.fields.IntegerField', [], {}), |
3596 | + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
3597 | + }, |
3598 | + 'sru.sruresultlog': { |
3599 | + 'Meta': {'object_name': 'SRUResultLog', 'db_table': "'sru_result_logs'"}, |
3600 | + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
3601 | + 'display_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), |
3602 | + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
3603 | + 'internal': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
3604 | + 'path': ('django.db.models.fields.TextField', [], {}), |
3605 | + 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), |
3606 | + 'remote_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}), |
3607 | + 'sru_result': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['sru.SRUResult']"}), |
3608 | + 'updated_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
3609 | + } |
3610 | + } |
3611 | + |
3612 | + complete_apps = ['sru'] |
3613 | \ No newline at end of file |
3614 | |
3615 | === added file 'sru/migrations/__init__.py' |
3616 | === added file 'sru/models.py' |
3617 | --- sru/models.py 1970-01-01 00:00:00 +0000 |
3618 | +++ sru/models.py 2012-12-20 01:49:23 +0000 |
3619 | @@ -0,0 +1,144 @@ |
3620 | +# QA Dashboard |
3621 | +# Copyright 2012 Canonical Ltd. |
3622 | + |
3623 | +# This program is free software: you can redistribute it and/or modify it |
3624 | +# under the terms of the GNU Affero General Public License version 3, as published |
3625 | +# by the Free Software Foundation. |
3626 | + |
3627 | +# This program is distributed in the hope that it will be useful, but |
3628 | +# WITHOUT ANY WARRANTY; without even the implied warranties of |
3629 | +# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
3630 | +# PURPOSE. See the GNU Affero General Public License for more details. |
3631 | + |
3632 | +# You should have received a copy of the GNU Affero General Public License along |
3633 | +# with this program. If not, see <http://www.gnu.org/licenses/>. |
3634 | + |
3635 | +from django.db import models |
3636 | +import datetime |
3637 | + |
3638 | +from common.models import DashboardBaseModel, Bug |
3639 | + |
3640 | +class Kernel(DashboardBaseModel): |
3641 | + class Meta: |
3642 | + db_table = "kernels" |
3643 | + |
3644 | + job_type = models.CharField(max_length=100) |
3645 | + release = models.CharField(max_length=100) |
3646 | + variant = models.CharField(max_length=100) |
3647 | + arch = models.CharField(max_length=100) |
3648 | + gpu = models.CharField(max_length=100) |
3649 | + version = models.CharField(max_length=100) |
3650 | + |
3651 | + # Used by MySerializer to add property fields to the JSON representation |
3652 | + # of an instance of this class. |
3653 | + extra_fields = [ |
3654 | + 'pass_count', |
3655 | + 'skip_count', |
3656 | + 'fail_count', |
3657 | + 'total_count', |
3658 | + 'pass_rate', |
3659 | + 'pass_rate_pct', |
3660 | + 'bug_count', |
3661 | + 'log_count', |
3662 | + ] |
3663 | + |
3664 | + def debug_str(self): |
3665 | + return "{}-{}-{}-{}".format( |
3666 | + self.release, |
3667 | + self.variant, |
3668 | + self.arch, |
3669 | + self.gpu, |
3670 | + ) |
3671 | + |
3672 | + @property |
3673 | + def name(self): |
3674 | + return "{}-{}".format(self.release, self.variant) |
3675 | + |
3676 | + @property |
3677 | + def total_count(self): |
3678 | + return self.sruresult_set.aggregate(models.Sum('total_count'))['total_count__sum'] or 0 |
3679 | + |
3680 | + @property |
3681 | + def pass_count(self): |
3682 | + return self.sruresult_set.aggregate(models.Sum('pass_count'))['pass_count__sum'] or 0 |
3683 | + |
3684 | + @property |
3685 | + def fail_count(self): |
3686 | + return self.sruresult_set.aggregate(models.Sum('fail_count'))['fail_count__sum'] or 0 |
3687 | + |
3688 | + @property |
3689 | + def skip_count(self): |
3690 | + return self.sruresult_set.aggregate(models.Sum('skip_count'))['skip_count__sum'] or 0 |
3691 | + |
3692 | + @property |
3693 | + def pass_rate(self): |
3694 | + return self.pass_count*1.0 / self.total_count if self.total_count > 0 else 0 |
3695 | + |
3696 | + @property |
3697 | + def pass_rate_pct(self): |
3698 | + return "%d%%" % int(self.pass_rate*100) |
3699 | + |
3700 | + @property |
3701 | + def bug_count(self): |
3702 | + return self.sruresult_set.annotate(num_bugs=models.Count('bugs')).aggregate(models.Sum('num_bugs'))['num_bugs__sum'] or 0 |
3703 | + |
3704 | + @property |
3705 | + def log_count(self): |
3706 | + return self.sruresultlog_set.count() |
3707 | + |
3708 | + @property |
3709 | + def last_run_date(self): |
3710 | + return self.sruresult_set.aggregate(models.Max('ran_at'))['ran_at__max'].strftime("%Y-%m-%d %H:%M") |
3711 | + |
3712 | +# XXX: refactor this and Result |
3713 | +class SRUResult(DashboardBaseModel): |
3714 | + class Meta: |
3715 | + db_table = 'sru_results' |
3716 | + |
3717 | + kernel = models.ForeignKey(Kernel) |
3718 | + bugs = models.ManyToManyField(Bug, related_name='sruresult_bugs') |
3719 | + |
3720 | + jenkins_build = models.CharField(max_length=255) |
3721 | + jenkins_url = models.URLField() |
3722 | + name = models.CharField(max_length=255) |
3723 | + pass_count = models.IntegerField() |
3724 | + fail_count = models.IntegerField() |
3725 | + skip_count = models.IntegerField() |
3726 | + total_count = models.IntegerField() |
3727 | + ran_at = models.DateTimeField('date run') |
3728 | + |
3729 | + # Used by MySerializer to add property fields to the JSON representation |
3730 | + # of an instance of this class. |
3731 | + extra_fields = [ |
3732 | + 'pass_rate', |
3733 | + 'pass_rate_pct', |
3734 | + 'bug_count', |
3735 | + 'log_count', |
3736 | + ] |
3737 | + |
3738 | + @property |
3739 | + def pass_rate(self): |
3740 | + return self.pass_count*1.0 / self.total_count if self.total_count > 0 else 0 |
3741 | + |
3742 | + @property |
3743 | + def pass_rate_pct(self): |
3744 | + return "%d%%" % int(self.pass_rate*100) |
3745 | + |
3746 | + @property |
3747 | + def bug_count(self): |
3748 | + return self.bugs.count() |
3749 | + |
3750 | + @property |
3751 | + def log_count(self): |
3752 | + return self.resultlog_set.count() |
3753 | + |
3754 | +class SRUResultLog(DashboardBaseModel): |
3755 | + class Meta: |
3756 | + db_table = 'sru_result_logs' |
3757 | + display_name = models.CharField(max_length=255, null = True) |
3758 | + path = models.TextField() |
3759 | + sru_result = models.ForeignKey('SRUResult') |
3760 | + remote_url = models.URLField() |
3761 | + |
3762 | + def __unicode__(self): |
3763 | + return self.path |
3764 | |
3765 | === added file 'sru/tests.py' |
3766 | --- sru/tests.py 1970-01-01 00:00:00 +0000 |
3767 | +++ sru/tests.py 2012-12-20 01:49:23 +0000 |
3768 | @@ -0,0 +1,14 @@ |
3769 | +# QA Dashboard |
3770 | +# Copyright 2012 Canonical Ltd. |
3771 | + |
3772 | +# This program is free software: you can redistribute it and/or modify it |
3773 | +# under the terms of the GNU Affero General Public License version 3, as published |
3774 | +# by the Free Software Foundation. |
3775 | + |
3776 | +# This program is distributed in the hope that it will be useful, but |
3777 | +# WITHOUT ANY WARRANTY; without even the implied warranties of |
3778 | +# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
3779 | +# PURPOSE. See the GNU Affero General Public License for more details. |
3780 | + |
3781 | +# You should have received a copy of the GNU Affero General Public License along |
3782 | +# with this program. If not, see <http://www.gnu.org/licenses/>. |
3783 | |
3784 | === added file 'sru/views.py' |
3785 | --- sru/views.py 1970-01-01 00:00:00 +0000 |
3786 | +++ sru/views.py 2012-12-20 01:49:23 +0000 |
3787 | @@ -0,0 +1,142 @@ |
3788 | +# QA Dashboard |
3789 | +# Copyright 2012 Canonical Ltd. |
3790 | + |
3791 | +# This program is free software: you can redistribute it and/or modify it |
3792 | +# under the terms of the GNU Affero General Public License version 3, as published |
3793 | +# by the Free Software Foundation. |
3794 | + |
3795 | +# This program is distributed in the hope that it will be useful, but |
3796 | +# WITHOUT ANY WARRANTY; without even the implied warranties of |
3797 | +# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
3798 | +# PURPOSE. See the GNU Affero General Public License for more details. |
3799 | + |
3800 | +# You should have received a copy of the GNU Affero General Public License along |
3801 | +# with this program. If not, see <http://www.gnu.org/licenses/>. |
3802 | + |
3803 | +from django.shortcuts import render_to_response |
3804 | +from django.views.decorators.http import require_GET |
3805 | +from django.db.models import Sum, F |
3806 | +from django.template import RequestContext |
3807 | + |
3808 | +from sru.models import Kernel |
3809 | +from common.utils import ( |
3810 | + JSONResponse, |
3811 | + MySerializer, |
3812 | + get_verbose, |
3813 | + ) |
3814 | + |
3815 | +def _get_kernel_names(): |
3816 | + kernels = [] |
3817 | + for kernel in Kernel.objects.values('variant').distinct().exclude(publish=False).order_by('variant'): |
3818 | + kernels.append(kernel['variant']) |
3819 | + |
3820 | + return kernels |
3821 | + |
3822 | +def _get_kernel_releases(): |
3823 | + releases = [] |
3824 | + for kernel in Kernel.objects.values('release').distinct().exclude(publish=False).order_by('-release'): |
3825 | + releases.append(kernel['release']) |
3826 | + |
3827 | + return releases |
3828 | + |
3829 | +@require_GET |
3830 | +def api_overview(request, release='', version=''): |
3831 | + kernels = Kernel.objects.all() |
3832 | + |
3833 | + if release != '': |
3834 | + kernels = kernels.filter(release=release) |
3835 | + |
3836 | + if version != '': |
3837 | + kernels = kernels.filter(version=version) |
3838 | + |
3839 | + serializer = MySerializer(use_extra_fields=get_verbose(request, True)) |
3840 | + data = serializer.serialize(kernels) |
3841 | + |
3842 | + return JSONResponse(data) |
3843 | + |
3844 | +@require_GET |
3845 | +def overview(request, release=''): |
3846 | + data = {} |
3847 | + data['kernel_names'] = _get_kernel_names() |
3848 | + data['releases'] = _get_kernel_releases() |
3849 | + data['kernels'] = [] |
3850 | + data['show_unknown'] = True |
3851 | + |
3852 | + show_unknown = request.GET.get('show_unknown') |
3853 | + |
3854 | + kernels = Kernel.objects.all() |
3855 | + |
3856 | + if show_unknown is None or show_unknown != "1": |
3857 | + data['show_unknown'] = False |
3858 | + kernels = kernels.exclude(version__startswith="Unknown") |
3859 | + |
3860 | + if release != '': |
3861 | + kernels = kernels.filter(release=release) |
3862 | + |
3863 | + kernel_data = {} |
3864 | + for kernel in kernels: |
3865 | + version = kernel.version |
3866 | + if version not in kernel_data: |
3867 | + kernel_data[version] = { |
3868 | + 'version': version, |
3869 | + 'pass_count': 0, |
3870 | + 'fail_count': 0, |
3871 | + 'skip_count': 0, |
3872 | + 'total_count': 0, |
3873 | + 'bug_count': 0, |
3874 | + } |
3875 | + |
3876 | + kernel_data[version]['pass_count'] += kernel.pass_count |
3877 | + kernel_data[version]['skip_count'] += kernel.skip_count |
3878 | + kernel_data[version]['fail_count'] += kernel.fail_count |
3879 | + kernel_data[version]['total_count'] += kernel.total_count |
3880 | + kernel_data[version]['bug_count'] += kernel.bug_count |
3881 | + kernel_data[version]['release'] = kernel.release |
3882 | + kernel_data[version]['last_run_date'] = kernel.last_run_date |
3883 | + |
3884 | + |
3885 | + for k,v in kernel_data.iteritems(): |
3886 | + if v['total_count'] == 0: |
3887 | + v['pass_rate'] = 0 |
3888 | + else: |
3889 | + v['pass_rate'] = v['pass_count'] * 1.0 / v['total_count'] |
3890 | + |
3891 | + v['pass_rate_pct'] = "{:<.2%}".format(v['pass_rate']) |
3892 | + |
3893 | + data['kernels'].append(v) |
3894 | + |
3895 | + return render_to_response('sru/overview.html', data, RequestContext(request)) |
3896 | + |
3897 | +@require_GET |
3898 | +def overview_kernel(request, release=None, kernel_version=None): |
3899 | + kernels = Kernel.objects.filter(version=kernel_version).select_related() |
3900 | + |
3901 | + data = { |
3902 | + 'kernels': kernels, |
3903 | + 'kernel_version': kernel_version, |
3904 | + 'release': release |
3905 | + } |
3906 | + |
3907 | + totals = { |
3908 | + 'skip_count': 0, |
3909 | + 'pass_count': 0, |
3910 | + 'fail_count': 0, |
3911 | + 'total_count': 0, |
3912 | + 'pass_rate': 0.0, |
3913 | + } |
3914 | + |
3915 | + for k in kernels: |
3916 | + totals['skip_count'] += k.skip_count |
3917 | + totals['pass_count'] += k.pass_count |
3918 | + totals['fail_count'] += k.fail_count |
3919 | + totals['total_count'] += k.total_count |
3920 | + |
3921 | + if totals['total_count'] == 0: |
3922 | + totals['pass_rate'] = 0.0 |
3923 | + else: |
3924 | + totals['pass_rate'] = totals['pass_count'] * 1.0 / totals['total_count'] |
3925 | + totals['pass_rate_pct'] = "{:.2%}".format(totals['pass_rate']) |
3926 | + |
3927 | + data['totals'] = totals |
3928 | + |
3929 | + return render_to_response('sru/overview_kernel.html', data, RequestContext(request)) |