| OLD | NEW |
| 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 from __future__ import with_statement | 5 from __future__ import with_statement |
| 6 | 6 |
| 7 import datetime | 7 import datetime |
| 8 import json | 8 import json |
| 9 import logging | 9 import logging |
| 10 import os | 10 import os |
| (...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 339 def AddCategory(self, category, builder_status): | 339 def AddCategory(self, category, builder_status): |
| 340 self.category_order[self.lastMasterSeen].append(category) | 340 self.category_order[self.lastMasterSeen].append(category) |
| 341 # Map(k,v): k=Master/category, v=Dict of category data (last build status) | 341 # Map(k,v): k=Master/category, v=Dict of category data (last build status) |
| 342 self.category_data[self.lastMasterSeen].setdefault(category, {}) | 342 self.category_data[self.lastMasterSeen].setdefault(category, {}) |
| 343 self.category_data[self.lastMasterSeen][category] = builder_status | 343 self.category_data[self.lastMasterSeen][category] = builder_status |
| 344 self.category_count += 1 | 344 self.category_count += 1 |
| 345 | 345 |
| 346 def AddRow(self, row): | 346 def AddRow(self, row): |
| 347 revision = row['rev_number'] | 347 revision = row['rev_number'] |
| 348 self.SawRevision(revision) | 348 self.SawRevision(revision) |
| 349 revlink = BeautifulSoup(row['rev']).td.a['href'] | 349 revlink = BeautifulSoup(row['rev']).a['href'] |
| 350 self.SetLink(revlink) | 350 self.SetLink(revlink) |
| 351 name = BeautifulSoup(row['name']).td.contents | 351 name = BeautifulSoup(row['name']) |
| 352 self.SetName(self.ContentsToHtml(name)) | 352 self.SetName(self.ContentsToHtml(name)) |
| 353 status = BeautifulSoup(row['status']).findAll('table') | 353 status = BeautifulSoup(row['status']).findAll('table') |
| 354 for i, stat in enumerate(status): | 354 for i, stat in enumerate(status): |
| 355 self.SetStatus(self.category_order[self.lastMasterSeen][i], | 355 self.SetStatus(self.category_order[self.lastMasterSeen][i], |
| 356 unicode(stat)) | 356 unicode(stat)) |
| 357 comment = BeautifulSoup(row['comment']).td.contents | 357 comment = BeautifulSoup(row['comment']) |
| 358 self.SetComment(self.ContentsToHtml(comment)) | 358 self.SetComment(self.ContentsToHtml(comment)) |
| 359 if row['details']: | 359 if row['details']: |
| 360 details = BeautifulSoup(row['details']).td.contents | 360 details = BeautifulSoup(row['details']) |
| 361 self.SetDetail(self.ContentsToHtml(details)) | 361 self.SetDetail(self.ContentsToHtml(details)) |
| 362 | 362 |
| 363 def ParseRow(self, row): | 363 def ParseRow(self, row): |
| 364 cells = row.findAll('td', recursive=False) | 364 cells = row.findAll('td', recursive=False) |
| 365 # Figure out which row this is. | 365 # Figure out which row this is. |
| 366 for attrname, attrvalue in cells[0].attrs: | 366 for attrname, attrvalue in cells[0].attrs: |
| 367 if attrname != 'class': | 367 if attrname != 'class': |
| 368 continue | 368 continue |
| 369 attrvalue = re.sub(r'^(\S+).*', r'\1', attrvalue) | 369 attrvalue = re.sub(r'^(\S+).*', r'\1', attrvalue) |
| 370 if attrvalue == 'DevRev': | 370 if attrvalue == 'DevRev': |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 417 continue | 417 continue |
| 418 mergedconsole.SawMaster(master) | 418 mergedconsole.SawMaster(master) |
| 419 # Get the categories for this builder. If the builder doesn't have any | 419 # Get the categories for this builder. If the builder doesn't have any |
| 420 # categories, just use the default empty-string category. | 420 # categories, just use the default empty-string category. |
| 421 category_list = [] | 421 category_list = [] |
| 422 master_categories = get_and_cache_pagedata('%s/console/categories' % master) | 422 master_categories = get_and_cache_pagedata('%s/console/categories' % master) |
| 423 if not master_categories['content']: | 423 if not master_categories['content']: |
| 424 category_list.append('') | 424 category_list.append('') |
| 425 else: | 425 else: |
| 426 category_row = BeautifulSoup(master_categories['content']) | 426 category_row = BeautifulSoup(master_categories['content']) |
| 427 category_list = map(lambda x: x.text, | 427 category_list = [c.text for c in category_row.findAll('td', 'DevStatus')] |
| 428 category_row.findAll('td', 'DevStatus')) | |
| 429 # Get the corresponding summary box(es). | 428 # Get the corresponding summary box(es). |
| 430 summary_row = BeautifulSoup(master_summary['content']) | 429 summary_row = BeautifulSoup(master_summary['content']) |
| 431 summary_list = summary_row.findAll('table') | 430 summary_list = summary_row.findAll('table') |
| 432 for category, summary in zip(category_list, summary_list): | 431 for category, summary in zip(category_list, summary_list): |
| 433 mergedconsole.AddCategory(category, summary) | 432 mergedconsole.AddCategory(category, summary) |
| 434 | 433 |
| 435 # Fetch all of the rows that we need. | 434 # Fetch all of the rows that we need. |
| 436 rows_fetched = 0 | 435 rows_fetched = 0 |
| 437 revs_skipped = 0 | 436 revs_skipped = 0 |
| 438 current_rev = latest_rev | 437 current_rev = latest_rev |
| (...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 701 summary_data['title'] = 'Summary for ' + localpath | 700 summary_data['title'] = 'Summary for ' + localpath |
| 702 summary_data['content'] = unicode(summary) | 701 summary_data['content'] = unicode(summary) |
| 703 save_page(summary_page, localpath + '/summary', ts, summary_data) | 702 save_page(summary_page, localpath + '/summary', ts, summary_data) |
| 704 | 703 |
| 705 curr_row = {} | 704 curr_row = {} |
| 706 # Each table row is either a status row with a revision, name, and status, | 705 # Each table row is either a status row with a revision, name, and status, |
| 707 # a comment row with the commit message, a details row with flakiness info, | 706 # a comment row with the commit message, a details row with flakiness info, |
| 708 # or a spacer row (in which case we finalize the row and save it). | 707 # or a spacer row (in which case we finalize the row and save it). |
| 709 for row in rows: | 708 for row in rows: |
| 710 if row.find('td', 'DevComment'): | 709 if row.find('td', 'DevComment'): |
| 711 curr_row['comment'] = unicode(row) | 710 curr_row['comment'] = ''.join(unicode(tag).strip() for tag in |
| 711 row.td.contents) |
| 712 elif row.find('td', 'DevDetails'): | 712 elif row.find('td', 'DevDetails'): |
| 713 curr_row['details'] = unicode(row) | 713 curr_row['details'] = ''.join(unicode(tag).strip() for tag in |
| 714 row.td.contents) |
| 714 elif row.find('td', 'DevStatus'): | 715 elif row.find('td', 'DevStatus'): |
| 715 curr_row['rev'] = unicode(row.find('td', 'DevRev')) | 716 curr_row['rev'] = unicode(row.find('td', 'DevRev').a) |
| 716 curr_row['rev_number'] = unicode(row.find('td', 'DevRev').a.string) | 717 curr_row['rev_number'] = unicode(row.find('td', 'DevRev').a.string) |
| 717 curr_row['name'] = unicode(row.find('td', 'DevName')) | 718 curr_row['name'] = ''.join(unicode(tag).strip() for tag in |
| 718 curr_row['status'] = unicode(row.findAll('table')) | 719 row.find('td', 'DevName').contents) |
| 720 curr_row['status'] = ''.join(unicode(box.table) for box in |
| 721 row.findAll('td', 'DevStatus')) |
| 719 else: | 722 else: |
| 720 if 'details' not in curr_row: | 723 if 'details' not in curr_row: |
| 721 curr_row['details'] = '' | 724 curr_row['details'] = '' |
| 722 curr_row['fetch_timestamp'] = ts | 725 curr_row['fetch_timestamp'] = ts |
| 723 save_row(curr_row, localpath + '/' + curr_row['rev_number']) | 726 save_row(curr_row, localpath + '/' + curr_row['rev_number']) |
| 724 curr_row = {} | 727 curr_row = {} |
| 725 | 728 |
| 726 return page_data | 729 return page_data |
| 727 | 730 |
| 728 | 731 |
| (...skipping 469 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1198 'builds/-1?as_text=1'), | 1201 'builds/-1?as_text=1'), |
| 1199 'localpath': | 1202 'localpath': |
| 1200 'chromium.lkgr/json/builders/Linux%20x64/builds/-1/as_text=1.json', | 1203 'chromium.lkgr/json/builders/Linux%20x64/builds/-1/as_text=1.json', |
| 1201 'maxage': 2*60, # 2 mins | 1204 'maxage': 2*60, # 2 mins |
| 1202 }, | 1205 }, |
| 1203 | 1206 |
| 1204 # # Trigger background process update. | 1207 # # Trigger background process update. |
| 1205 # { | 1208 # { |
| 1206 # 'remoteurl': 'http://chromium-build.appspot.com/backend/update' | 1209 # 'remoteurl': 'http://chromium-build.appspot.com/backend/update' |
| 1207 ] | 1210 ] |
| OLD | NEW |