def _GetAllSuspectedCLsAndCheckStatus(master_name, builder_name, build_number,
                                      analysis):
    build_key = build_util.CreateBuildId(master_name, builder_name,
                                         build_number)
    suspected_cls = copy.deepcopy(analysis.suspected_cls)
    if not suspected_cls:
        return []

    confidences = SuspectedCLConfidence.Get()

    for cl in suspected_cls:
        cl['status'] = _ANALYSIS_CL_STATUS_MAP.get(analysis.result_status,
                                                   None)
        cl['confidence'] = None

        suspected_cl = WfSuspectedCL.Get(cl['repo_name'], cl['revision'])
        if not suspected_cl:
            continue

        build = suspected_cl.builds.get(build_key)
        if build:
            cl['status'] = build['status']
            cl['confidence'] = '%d%%' % (
                suspected_cl_util.GetSuspectedCLConfidenceScore(
                    confidences, build))

    return suspected_cls
def _SavesNewCLConfidence():
    """Queries all CLs and calculates confidence of each type of results."""
    date_end = time_util.GetUTCNow().replace(hour=0,
                                             minute=0,
                                             second=0,
                                             microsecond=0)
    date_start = date_end - datetime.timedelta(days=TIME_RANGE_DAYS)
    result_heuristic = _GetCLDataForHeuristic(date_start, date_end)
    result_try_job, result_both = _GetCLDataForTryJob(date_start, date_end)

    new_compile_heuristic = _CalculateConfidenceLevelsForHeuristic(
        result_heuristic[failure_type.COMPILE])
    new_test_heuristic = _CalculateConfidenceLevelsForHeuristic(
        result_heuristic[failure_type.TEST])
    new_compile_try_job = _CreateConfidenceInformation(
        result_try_job[failure_type.COMPILE])
    new_test_try_job = _CreateConfidenceInformation(
        result_try_job[failure_type.TEST])
    new_compile_heuristic_try_job = _CreateConfidenceInformation(
        result_both[failure_type.COMPILE])
    new_test_heuristic_try_job = _CreateConfidenceInformation(
        result_both[failure_type.TEST])

    confidence = SuspectedCLConfidence.Get()
    confidence.Update(date_start, date_end, new_compile_heuristic,
                      new_compile_try_job, new_compile_heuristic_try_job,
                      new_test_heuristic, new_test_try_job,
                      new_test_heuristic_try_job)
    return confidence
Exemple #3
0
    def setUp(self):
        super(BuildFailureTest, self).setUp()

        # Setup clean task queues.
        self.testbed.init_taskqueue_stub(root_path=ROOT_DIR)
        self.taskqueue_stub = self.testbed.get_stub(
            testbed.TASKQUEUE_SERVICE_NAME)
        for queue in self.taskqueue_stub.GetQueues():
            self.taskqueue_stub.FlushQueue(queue['name'])

        def MockedGetAllTryJobResults(master_name, builder_name, build_number,
                                      _):
            build_key = BaseBuildModel.CreateBuildKey(master_name,
                                                      builder_name,
                                                      build_number)
            return SAMPLE_TRY_JOB_INFO.get(build_key, None)

        self.mock(handlers_util, 'GetAllTryJobResults',
                  MockedGetAllTryJobResults)

        self.cl_confidences = SuspectedCLConfidence.Create()
        self.cl_confidences.compile_heuristic = [
            SAMPLE_HEURISTIC_1, SAMPLE_HEURISTIC_2
        ]
        self.cl_confidences.test_heuristic = [
            SAMPLE_HEURISTIC_2, SAMPLE_HEURISTIC_1
        ]
        self.cl_confidences.compile_try_job = SAMPLE_TRY_JOB
        self.cl_confidences.test_try_job = SAMPLE_TRY_JOB
        self.cl_confidences.compile_heuristic_try_job = SAMPLE_HEURISTIC_TRY_JOB
        self.cl_confidences.test_heuristic_try_job = SAMPLE_HEURISTIC_TRY_JOB
        self.cl_confidences.Save()
    def testUpdateSuspectedCLConfidence(self):
        cl_confidence = SuspectedCLConfidence.Get()
        start_date = datetime.datetime(2016, 10, 06, 0, 0, 0)
        end_date = datetime.datetime(2016, 10, 07, 0, 0, 0)
        compile_heuristic = [
            ConfidenceInformation(correct=100,
                                  total=100,
                                  confidence=1.0,
                                  score=5)
        ]
        compile_try_job = ConfidenceInformation(correct=99,
                                                total=100,
                                                confidence=0.99,
                                                score=None)
        compile_heuristic_try_job = ConfidenceInformation(correct=98,
                                                          total=100,
                                                          confidence=0.98,
                                                          score=None)
        test_heuristic = [
            ConfidenceInformation(correct=97,
                                  total=100,
                                  confidence=0.97,
                                  score=5)
        ]
        test_try_job = ConfidenceInformation(correct=96,
                                             total=100,
                                             confidence=0.96,
                                             score=None)
        test_heuristic_try_job = ConfidenceInformation(correct=95,
                                                       total=100,
                                                       confidence=0.95,
                                                       score=None)

        cl_confidence.Update(start_date, end_date, compile_heuristic,
                             compile_try_job, compile_heuristic_try_job,
                             test_heuristic, test_try_job,
                             test_heuristic_try_job)
        cl_confidence = SuspectedCLConfidence.Get()

        self.assertEqual(compile_heuristic, cl_confidence.compile_heuristic)
        self.assertEqual(compile_try_job, cl_confidence.compile_try_job)
        self.assertEqual(compile_heuristic_try_job,
                         cl_confidence.compile_heuristic_try_job)
        self.assertEqual(test_heuristic, cl_confidence.test_heuristic)
        self.assertEqual(test_try_job, cl_confidence.test_try_job)
        self.assertEqual(test_heuristic_try_job,
                         cl_confidence.test_heuristic_try_job)
Exemple #5
0
  def AnalyzeBuildFailures(self, request):
    """Returns analysis results for the given build failures in the request.

    Analysis of build failures will be triggered automatically on demand.

    Args:
      request (_BuildFailureCollection): A list of build failures.

    Returns:
      _BuildFailureAnalysisResultCollection
      A list of analysis results for the given build failures.
    """
    results = []
    supported_builds = []
    confidences = SuspectedCLConfidence.Get()

    for build in request.builds:
      master_name = buildbot.GetMasterNameFromUrl(build.master_url)
      if not (master_name and waterfall_config.MasterIsSupported(master_name)):
        logging.info('%s/%s/%s is not supported',
                     build.master_url, build.builder_name, build.build_number)
        continue

      supported_builds.append({
          'master_name': master_name,
          'builder_name': build.builder_name,
          'build_number': build.build_number,
          'failed_steps': sorted(build.failed_steps),
      })

      # If the build failure was already analyzed and a new analysis is
      # scheduled to analyze new failed steps, the returned WfAnalysis will
      # still have the result from last completed analysis.
      # If there is no analysis yet, no result is returned.
      heuristic_analysis = WfAnalysis.Get(
          master_name, build.builder_name, build.build_number)
      if not heuristic_analysis:
        continue

      self._GenerateResultsForBuild(
          build, heuristic_analysis, results, confidences)

    logging.info('%d build failure(s), while %d are supported',
                 len(request.builds), len(supported_builds))
    try:
      supported_builds.sort()
      _AsyncProcessFailureAnalysisRequests(supported_builds)
    except Exception:  # pragma: no cover.
      # If we fail to post a task to the task queue, we ignore and wait for next
      # request.
      logging.exception('Failed to add analysis request to task queue: %s',
                        repr(supported_builds))

    return _BuildFailureAnalysisResultCollection(results=results)
Exemple #6
0
def _SavesNewCLConfidence(date_start, date_end, result_heuristic,
                          result_try_job, result_both):

    new_compile_heuristic = _CalculateConfidenceLevelsForHeuristic(
        result_heuristic[failure_type.COMPILE])
    new_test_heuristic = _CalculateConfidenceLevelsForHeuristic(
        result_heuristic[failure_type.TEST])
    new_compile_try_job = _CreateConfidenceInformation(
        result_try_job[failure_type.COMPILE])
    new_test_try_job = _CreateConfidenceInformation(
        result_try_job[failure_type.TEST])
    new_compile_heuristic_try_job = _CreateConfidenceInformation(
        result_both[failure_type.COMPILE])
    new_test_heuristic_try_job = _CreateConfidenceInformation(
        result_both[failure_type.TEST])

    SuspectedCLConfidence.Get().Update(date_start, date_end,
                                       new_compile_heuristic,
                                       new_compile_try_job,
                                       new_compile_heuristic_try_job,
                                       new_test_heuristic, new_test_try_job,
                                       new_test_heuristic_try_job)
    return SuspectedCLConfidence.Get()
Exemple #7
0
    def setUp(self):
        super(SuspectedCLUtilTest, self).setUp()

        self.cl_confidences = SuspectedCLConfidence.Create()
        self.cl_confidences.compile_heuristic = [
            SAMPLE_HEURISTIC_1, SAMPLE_HEURISTIC_2
        ]
        self.cl_confidences.test_heuristic = [
            SAMPLE_HEURISTIC_2, SAMPLE_HEURISTIC_1
        ]
        self.cl_confidences.compile_try_job = SAMPLE_TRY_JOB
        self.cl_confidences.test_try_job = SAMPLE_TRY_JOB
        self.cl_confidences.compile_heuristic_try_job = SAMPLE_HEURISTIC_TRY_JOB
        self.cl_confidences.test_heuristic_try_job = SAMPLE_HEURISTIC_TRY_JOB
        self.cl_confidences.Save()
 def testCreateNewSuspectedCLConfidenceIfNone(self):
     self.assertIsNotNone(SuspectedCLConfidence.Get())