Esempio n. 1
0
 def testGetBuildDetailsFromStdioLink_InvalidLink(self):
     base_url, master, bot, number, step = utils.GetBuildDetailsFromStdioLink(
         '[Buildbot stdio](http://notquite/builders/whatever/234)')
     self.assertIsNone(base_url)
     self.assertIsNone(master)
     self.assertIsNone(bot)
     self.assertIsNone(number)
     self.assertIsNone(step)
Esempio n. 2
0
 def testGetBuildDetailsFromStdioLink(self):
     base_url, master, bot, number, step = utils.GetBuildDetailsFromStdioLink(
         ('[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://build.chromium.org/p/chromium.perf/builders/', base_url)
     self.assertEqual('chromium.perf', master)
     self.assertEqual('Android One Perf (2)', bot)
     self.assertEqual('5365', number)
     self.assertEqual('blink_style.top_25', step)
Esempio n. 3
0
 def testGetBuildDetailsFromStdioLink_DifferentBaseUrl(self):
   base_url, master, bot, number, step = utils.GetBuildDetailsFromStdioLink(
       ('[Buildbot stdio]('
        'https://uberchromegw.corp.google.com/i/new.master/builders/Builder/'
        'builds/3486/steps/new_test/logs/stdio)'))
   self.assertEqual(
       'https://uberchromegw.corp.google.com/i/new.master/builders/', base_url)
   self.assertEqual('new.master', master)
   self.assertEqual('Builder', bot)
   self.assertEqual('3486', number)
   self.assertEqual('new_test', step)
Esempio n. 4
0
  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))