in tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/ui/DsChainUi.java [169:293]
public void initFromContext(ITeamcityIgnited tcIgnited,
FullChainRunCtx ctx,
@Nullable String baseBranchTc,
IStringCompactor compactor,
boolean calcTrustedTests,
@Nullable String tagSelected,
@Nullable DisplayMode displayMode,
int maxDurationSec,
@Nullable Map<Integer, Integer> requireParamVal,
boolean showMuted,
boolean showIgnored) {
failedTests = 0;
failedToFinish = 0;
totalTests = 0;
trustedTests = 0;
String failRateNormalizedBranch = normalizeBranch(baseBranchTc);
Integer baseBranchId = compactor.getStringIdIfPresent(failRateNormalizedBranch);
DisplayMode dModeToUse
= displayMode == null ? DisplayMode.OnlyFailures : displayMode;
Predicate<MultBuildRunCtx> suiteFilter = suite -> {
if (Strings.isNullOrEmpty(tagSelected))
return true;
return suite.tags().contains(tagSelected);
};
ctx.suites()
.filter(suite -> !suite.isComposite())
.filter(suiteFilter)
.peek(suite -> {
int totalTests = suite.totalTests();
this.totalTests += totalTests;
if (calcTrustedTests)
trustedTests += suite.trustedTests(tcIgnited, baseBranchId);
})
.forEach(suite -> {
if (dModeToUse == DisplayMode.None)
return; //don't convert any suite for UI
if (suite.isFailed()
|| dModeToUse == DisplayMode.ShowAllSuites
|| suite.hasTestToReport(tcIgnited, baseBranchId, showMuted, showIgnored)
|| suite.hasLongRunningTest(maxDurationSec)) {
DsSuiteUi suiteCurStatus = new DsSuiteUi()
.initFromContext(tcIgnited,
suite,
baseBranchTc,
compactor,
calcTrustedTests,
maxDurationSec,
requireParamVal,
showMuted,
showIgnored);
failedTests += suiteCurStatus.failedTests != null ? suiteCurStatus.failedTests : 0;
if (suite.hasAnyBuildProblemExceptTestOrSnapshot() || suite.onlyCancelledBuilds())
failedToFinish++;
suites.add(suiteCurStatus);
}
});
totalBlockers = suites.stream().mapToInt(DsSuiteUi::totalBlockers).sum();
durationPrintable = ctx.getDurationPrintable(suiteFilter);
testsDurationPrintable = ctx.getTestsDurationPrintable(suiteFilter);
durationNetTimePrintable = ctx.durationNetTimePrintable(suiteFilter);
sourceUpdateDurationPrintable = ctx.sourceUpdateDurationPrintable(suiteFilter);
artifcactPublishingDurationPrintable = ctx.artifcactPublishingDurationPrintable(suiteFilter);
dependeciesResolvingDurationPrintable = ctx.dependeciesResolvingDurationPrintable(suiteFilter);
lostInTimeouts = ctx.getLostInTimeoutsPrintable(suiteFilter);
String suiteId = ctx.suiteId();
this.suiteId = suiteId;
chainName = ctx.suiteName();
webToHist = DsSuiteUi.buildWebLinkToHist(tcIgnited, suiteId, ctx.branchName());
webToBuild = buildWebLinkToBuild(tcIgnited, ctx);
Stream<T2<MultBuildRunCtx, TestCompactedMult>> allLongRunning = ctx.suites()
.filter(suite -> !suite.isComposite())
.filter(suiteFilter)
.flatMap(
suite -> suite.getTopLongRunning().map(t -> new T2<>(suite, t))
);
Comparator<T2<MultBuildRunCtx, TestCompactedMult>> durationComp
= Comparator.comparing((pair) -> pair.get2().getAvgDurationMs());
CollectionUtil.top(allLongRunning, 3, durationComp).forEach(
pairCtxAndOccur -> {
MultBuildRunCtx suite = pairCtxAndOccur.get1();
TestCompactedMult longRunningOccur = pairCtxAndOccur.get2();
DsTestFailureUi failure = createOrrucForLongRun(tcIgnited, compactor, suite, longRunningOccur, baseBranchTc, requireParamVal);
failure.testName = "[" + suite.suiteName() + "] " + failure.testName; //may be separate field
topLongRunning.add(failure);
}
);
Stream<T2<MultBuildRunCtx, Map.Entry<String, Long>>> allLogConsumers = ctx.suites()
.filter(suite -> !suite.isComposite())
.filter(suiteFilter)
.flatMap(suite -> suite.getTopLogConsumers().map(t -> new T2<>(suite, t)));
Comparator<T2<MultBuildRunCtx, Map.Entry<String, Long>>> longConsumingComp
= Comparator.comparing((pair) -> pair.get2().getValue());
CollectionUtil.top(allLogConsumers, 3, longConsumingComp).forEach(
pairCtxAndOccur -> {
MultBuildRunCtx suite = pairCtxAndOccur.get1();
Map.Entry<String, Long> testLogConsuming = pairCtxAndOccur.get2();
DsTestFailureUi failure = createOccurForLogConsumer(testLogConsuming);
failure.name = "[" + suite.suiteName() + "] " + failure.name; //todo suite as be separate field
logConsumers.add(failure);
}
);
}