in tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/board/BoardService.java [286:350]
protected String issuesToDefects() {
Stream<Issue> stream = issuesStorage.allIssues();
//todo make property how old issues can be considered as configuration parameter
long minIssueTs = System.currentTimeMillis() - TimeUnit.DAYS.toMillis(14);
//todo not so good to to call init() twice
fatBuildDao.init();
changeDao.init();
AtomicInteger cntIssues = new AtomicInteger();
HashSet<Integer> processedDefects = new HashSet<>();
stream
.filter(issue -> {
long detected = issue.detectedTs == null ? 0 : issue.detectedTs;
return detected >= minIssueTs;
})
.filter(issue -> {
//String type = issue.type;
//return !IssueType.newContributedTestFailure.code().equals(type);
return true;
})
.forEach(issue -> {
cntIssues.incrementAndGet();
IssueKey key = issue.issueKey;
String srvCode = key.getServer();
//just for init call
int srvId = ITeamcityIgnited.serverIdToInt(srvCode);
FatBuildCompacted fatBuild = fatBuildDao.getFatBuild(srvId, key.buildId);
if (fatBuild == null)
return;
//todo non test failures
String testName = issue.issueKey().getTestOrBuildName();
int issueTypeCid = compactor.getStringId(issue.type);
Integer testNameCid = compactor.getStringIdIfPresent(testName);
int trackedBranchCid = compactor.getStringId(issue.trackedBranchName);
double flakyRate = issue.flakyRate;
int tcSrvCodeCid = compactor.getStringId(srvCode);
defectStorage.merge(tcSrvCodeCid, srvId, fatBuild,
(k, defect) -> {
processedDefects.add(defect.id());
defect.trackedBranchCidSetIfEmpty(trackedBranchCid);
defect.computeIfAbsent(fatBuild).addIssue(issueTypeCid, testNameCid, flakyRate);
defect.removeOldVerBlameCandidates();
if(defect.blameCandidates().isEmpty())
fillBlameCandidates(srvId, fatBuild, defect);
return defect;
});
});
return processedDefects.size() + " defects processed for " + cntIssues.get() + " issues checked";
}