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);
}