public void processBuild()

in src/main/java/jetbrains/buildServer/investigationsAutoAssigner/processing/FailedTestAndBuildProblemsProcessor.java [50:115]


  public void processBuild(final FailedBuildInfo failedBuildInfo) {
    SBuild sBuild = failedBuildInfo.getBuild();
    SProject sProject = getProject(sBuild);
    if (sProject == null) return;

    if (LOGGER.isDebugEnabled()) {
      LOGGER.debug("Start processing build #" + sBuild.getBuildId() + ". " +
                   "Delay assignment: " + failedBuildInfo.shouldDelayAssignments());
    }
    if (failedBuildInfo.isOverProcessedProblemsThreshold()) {
      LOGGER.debug("Stop processing build #" + sBuild.getBuildId() + " as the threshold was exceeded.");
      return;
    }

    Map<Long, String> notApplicableTestsDescription = new HashMap<>();
    List<BuildProblem> allBuildProblems = ((BuildEx)sBuild).getBuildProblems();
    List<STestRun> allFailedTests = requestBrokenTestsWithStats(sBuild);
    List<BuildProblem> applicableProblems = myBuildProblemsFilter.apply(failedBuildInfo, sProject, allBuildProblems);
    List<STestRun> applicableFailedTests = myFailedTestFilter.apply(failedBuildInfo, sProject, allFailedTests, notApplicableTestsDescription);
    logProblemsNumber(sBuild, applicableFailedTests, applicableProblems);

    HeuristicResult heuristicsResult =
      myResponsibleUserFinder.findResponsibleUser(sBuild, sProject, applicableProblems, applicableFailedTests);

    List<STestRun> testsForAssign = myFailedTestFilter.getStillApplicable(failedBuildInfo, sProject, applicableFailedTests, notApplicableTestsDescription);
    List<BuildProblem> problemsForAssign =
      myBuildProblemsFilter.getStillApplicable(failedBuildInfo, sProject, applicableProblems);
    logChangedProblemsNumber(sBuild, applicableFailedTests, testsForAssign, applicableProblems, problemsForAssign);

    myAssignerArtifactDao.appendHeuristicsResult(sBuild, testsForAssign, heuristicsResult);
    if (TeamCityProperties.getBoolean(SHOULD_PERSIST_FILTERED_TESTS_DESCRIPTION)) {
      myAssignerArtifactDao.appendNotApplicableTestsDescription(sBuild, notApplicableTestsDescription);
    }

    if (heuristicsResult.isEmpty()) {
      return;
    }

    if (myCustomParameters.isBuildFeatureEnabled(sBuild) && !failedBuildInfo.shouldDelayAssignments()) {
      myFailedTestAssigner.assign(heuristicsResult, sProject, sBuild, testsForAssign);
      myBuildProblemsAssigner.assign(heuristicsResult, sProject, sBuild, problemsForAssign);
      failedBuildInfo.addHeuristicsResult(heuristicsResult);

      return;
    }

    if (!myCustomParameters.isBuildFeatureEnabled(sBuild)) {
      if (LOGGER.isDebugEnabled()) {
        LOGGER.debug(String.format("Build id:%s. Found investigations but build feature is not configured.",
                                   sBuild.getBuildId()));
      }
    } else if (failedBuildInfo.shouldDelayAssignments()) {
      List<BuildProblem> forcedAssignInstantlyProblems =
        problemsForAssign.stream()
                         .filter(x -> !BuildProblemTypes.TC_EXIT_CODE_TYPE.equals(x.getBuildProblemData().getType()))
                         .collect(Collectors.toList());
      if (!forcedAssignInstantlyProblems.isEmpty()) {
        myBuildProblemsAssigner.assign(heuristicsResult, sProject, sBuild, forcedAssignInstantlyProblems);
      }

      LOGGER.debug(String.format("Build id:%s. Found investigations but assignments should be delayed.",
                                 sBuild.getBuildId()));
    }

    failedBuildInfo.addHeuristicsResult(heuristicsResult);
  }