def testGetLogdogLogUriFromStdioLink(self): logdog_uri = utils.GetLogdogLogUriFromStdioLink(( '[Buildbot stdio](https://build.chromium.org/p/chromium.perf/builders/' 'Android%20One%20Perf%20%282%29/builds/5365/steps/' 'blink_style.top_25/logs/stdio)')) self.assertEqual(( 'https://luci-logdog.appspot.com/v/?s=' 'chrome%2Fbb%2Fchromium.perf%2FAndroid_One_Perf__2_%2F5365%2F%2B%2F' 'recipes%2Fsteps%2Fblink_style.top_25%2F0%2Fstdout'), logdog_uri)
def _GetUpdatedBuildbotLinks(old_stdio_link): # Links take a markdown format, [title](url) logdog_markdown = None logdog_link = utils.GetLogdogLogUriFromStdioLink(old_stdio_link) if logdog_link: logdog_markdown = '[Buildbot stdio](%s)' % logdog_link buildbot_status_markdown = None buildbot_link = utils.GetBuildbotStatusPageUriFromStdioLink(old_stdio_link) if buildbot_link: buildbot_status_markdown = '[Buildbot status page](%s)' % buildbot_link return logdog_markdown, buildbot_status_markdown
def _StdioLink(alert): stdio_uri = utils.GetStdioLinkFromRow(alert.row.get()) if not stdio_uri: return None return utils.GetLogdogLogUriFromStdioLink(stdio_uri)
def post(self): """Returns JSON data about a data stoppage for debugging dialog. Request parameters: key: Key of the data stoppage alert to debug; test_path and rev are ignored if key is specified. test_path: Test path of the test to debug; ignored if key is specified. rev: Point id of the last known revision; ignored if key is specified. Outputs: JSON which gives as many debugging details as possible. """ stoppage_details = {} row = None if self.request.get('key'): alert = ndb.Key(urlsafe=self.request.get('key')).get() if not alert: self.response.out.write(json.dumps({'error': 'Invalid alert key'})) return row = alert.row.get() else: # Grab row from test_path and rev. rev = self.request.get('rev') try: rev = int(rev) except TypeError: self.response.out.write(json.dumps({'error': 'Invalid rev'})) return test_path = self.request.get('test_path') if not test_path: self.response.out.write(json.dumps({'error': 'No test specified'})) return row = graph_data.Row.get_by_id( rev, parent=ndb.Key('TestContainer', test_path)) if not row: self.response.out.write(json.dumps({'error': 'No row for alert.'})) return test_path = utils.TestPath(row.key.parent()) stoppage_details['test_path'] = test_path current_stdio_link = (getattr(row, 'a_stdio_uri', None) or getattr(row, 'a_a_stdio_uri', None)) if not current_stdio_link: self.response.out.write(json.dumps({'error': 'Cannot find stdio link.'})) return _, master, bot, current_buildnumber, step = ( utils.GetBuildDetailsFromStdioLink(current_stdio_link)) if not master or not current_buildnumber: self.response.out.write(json.dumps({'error': 'Cannot parse stdio link.'})) return next_buildnumber = str(int(current_buildnumber) + 1) next_stdio_link = current_stdio_link.replace( current_buildnumber, next_buildnumber) stoppage_details['current_logdog_uri'] = ( utils.GetLogdogLogUriFromStdioLink(current_stdio_link)) stoppage_details['current_buildbot_status_page'] = ( utils.GetBuildbotStatusPageUriFromStdioLink(current_stdio_link)) stoppage_details['next_logdog_uri'] = ( utils.GetLogdogLogUriFromStdioLink(next_stdio_link)) stoppage_details['next_buildbot_status_page'] = ( utils.GetBuildbotStatusPageUriFromStdioLink(next_stdio_link)) current_build_info = milo_service.GetBuildbotBuildInfo( master, bot, current_buildnumber) stoppage_details['current_commit_pos'] = row.key.id() if current_build_info: commit_pos_str = current_build_info['properties']['got_revision_cp'] stoppage_details['current_commit_pos'] = re.match( r'.*\{#(\d+)\}', commit_pos_str).group(1) current_result = current_build_info['steps'].get(step) if current_result: current_result = current_result.get('results') stoppage_details['current_result'] = current_result next_build_info = milo_service.GetBuildbotBuildInfo( master, bot, next_buildnumber) stoppage_details['next_commit_pos'] = None stoppage_details['next_result'] = None if next_build_info: commit_pos_str = next_build_info['properties']['got_revision_cp'] stoppage_details['next_commit_pos'] = re.match( r'.*\{#(\d+)\}', commit_pos_str).group(1) next_result = next_build_info['steps'].get(step) if next_result: next_result = next_result.get('results') stoppage_details['next_result'] = next_result self.response.out.write(json.dumps(stoppage_details))