This is an automated email from the ASF dual-hosted git repository.
dpavlov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite-teamcity-bot.git
The following commit(s) were added to refs/heads/master by this push:
new 1866e39 IGNITE-10372 Step 2 In memory caching of build statistics,
don't loading tests for composite. - Fixes #80.
1866e39 is described below
commit 1866e39573c3231a6dd9ab72321c77659ac8ea44
Author: Dmitriy Pavlov <[email protected]>
AuthorDate: Thu Nov 22 18:20:48 2018 +0300
IGNITE-10372 Step 2 In memory caching of build statistics, don't loading
tests for composite. - Fixes #80.
Signed-off-by: Dmitriy Pavlov <[email protected]>
---
.../org/apache/ignite/ci/di/IgniteTcBotModule.java | 2 +
.../ignite/ci/tcbot/chain/BuildChainProcessor.java | 3 +-
.../ci/tcbot/trends/MasterTrendsService.java | 144 +++++++++++++++++++++
.../ci/teamcity/ignited/TeamcityIgnitedImpl.java | 10 +-
.../ignited/fatbuild/ProactiveFatBuildSync.java | 5 +-
.../java/org/apache/ignite/ci/util/FutureUtil.java | 7 +
.../web/model/current/BuildStatisticsSummary.java | 88 +++----------
.../ignite/ci/web/model/hist/BuildsHistory.java | 19 ++-
.../ci/web/rest/build/GetBuildTestFailures.java | 4 +
9 files changed, 198 insertions(+), 84 deletions(-)
diff --git
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/IgniteTcBotModule.java
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/IgniteTcBotModule.java
index 7022b45..e61e2bd 100644
---
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/IgniteTcBotModule.java
+++
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/IgniteTcBotModule.java
@@ -37,6 +37,7 @@ import org.apache.ignite.ci.issue.IssueDetector;
import org.apache.ignite.ci.jira.IJiraIntegration;
import org.apache.ignite.ci.observer.BuildObserver;
import org.apache.ignite.ci.observer.ObserverTask;
+import org.apache.ignite.ci.tcbot.trends.MasterTrendsService;
import org.apache.ignite.ci.teamcity.ignited.TeamcityIgnitedModule;
import org.apache.ignite.ci.user.ICredentialsProv;
import org.apache.ignite.ci.util.ExceptionUtil;
@@ -83,6 +84,7 @@ public class IgniteTcBotModule extends AbstractModule {
bind(IJiraIntegration.class).to(Jira.class).in(new SingletonScope());
bind(BackgroundUpdater.class).in(new SingletonScope());
+ bind(MasterTrendsService.class).in(new SingletonScope());
install(new TeamcityIgnitedModule());
install(new GitHubIgnitedModule());
diff --git
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/BuildChainProcessor.java
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/BuildChainProcessor.java
index 5142fe6..d6678f9 100644
---
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/BuildChainProcessor.java
+++
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/BuildChainProcessor.java
@@ -188,8 +188,7 @@ public class BuildChainProcessor {
List<MultBuildRunCtx> contexts = new ArrayList<>(freshRebuilds.size());
freshRebuilds.forEach((bt, listBuilds) -> {
- List<FatBuildCompacted> buildsForSuite = listBuilds.stream()
- .map(FutureUtil::getResult)
+ List<FatBuildCompacted> buildsForSuite =
FutureUtil.getResults(listBuilds)
.filter(buildCompacted -> !buildCompacted.isFakeStub())
.collect(Collectors.toList());
diff --git
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/trends/MasterTrendsService.java
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/trends/MasterTrendsService.java
new file mode 100644
index 0000000..2e1b8bc
--- /dev/null
+++
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/trends/MasterTrendsService.java
@@ -0,0 +1,144 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ci.tcbot.trends;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.concurrent.Future;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import javax.annotation.Nonnull;
+import javax.inject.Inject;
+import org.apache.ignite.ci.di.AutoProfiling;
+import org.apache.ignite.ci.di.cache.GuavaCached;
+import org.apache.ignite.ci.tcbot.chain.BuildChainProcessor;
+import org.apache.ignite.ci.teamcity.ignited.IStringCompactor;
+import org.apache.ignite.ci.teamcity.ignited.ITeamcityIgnited;
+import org.apache.ignite.ci.teamcity.ignited.SyncMode;
+import org.apache.ignite.ci.teamcity.ignited.fatbuild.FatBuildCompacted;
+import org.apache.ignite.ci.teamcity.ignited.fatbuild.ProblemCompacted;
+import org.apache.ignite.ci.util.FutureUtil;
+import org.apache.ignite.ci.web.model.current.BuildStatisticsSummary;
+import org.jetbrains.annotations.NotNull;
+
+import static org.apache.ignite.ci.tcmodel.hist.BuildRef.STATUS_SUCCESS;
+import static
org.apache.ignite.ci.tcmodel.result.problems.ProblemOccurrence.TC_EXECUTION_TIMEOUT;
+import static
org.apache.ignite.ci.tcmodel.result.problems.ProblemOccurrence.TC_EXIT_CODE;
+import static
org.apache.ignite.ci.tcmodel.result.problems.ProblemOccurrence.TC_JVM_CRASH;
+import static
org.apache.ignite.ci.tcmodel.result.problems.ProblemOccurrence.TC_OOME;
+
+/**
+ *
+ */
+public class MasterTrendsService {
+ public static final boolean DEBUG = false;
+ @Inject private IStringCompactor compactor;
+
+ @Inject private BuildChainProcessor bcp;
+
+ @NotNull
+ @GuavaCached(maximumSize = 500, softValues = true)
+ @AutoProfiling
+ public BuildStatisticsSummary getBuildSummary(ITeamcityIgnited ignited,
int buildId) {
+ String msg = "Loading build [" + buildId + "] summary";
+ System.out.println(msg);
+
+ BuildStatisticsSummary buildsStatistic = new
BuildStatisticsSummary(buildId);
+ initialize(buildsStatistic, ignited);
+ return buildsStatistic;
+ }
+
+ /** Initialize build statistics. */
+ public void initialize(BuildStatisticsSummary s, @Nonnull final
ITeamcityIgnited tcIgn) {
+ if (s.strIds.isEmpty()) {
+ s.strIds.put(STATUS_SUCCESS,
compactor.getStringId(STATUS_SUCCESS));
+ s.strIds.put(TC_EXIT_CODE, compactor.getStringId(TC_EXIT_CODE));
+ s.strIds.put(TC_OOME, compactor.getStringId(TC_OOME));
+ s.strIds.put(TC_JVM_CRASH, compactor.getStringId(TC_JVM_CRASH));
+ s.strIds.put(TC_EXECUTION_TIMEOUT,
compactor.getStringId(TC_EXECUTION_TIMEOUT));
+ }
+
+ FatBuildCompacted build = tcIgn.getFatBuild(s.buildId);
+
+ s.isFakeStub = build.isFakeStub();
+
+ if (s.isFakeStub)
+ return;
+
+ Map<Integer, Future<FatBuildCompacted>> builds =
bcp.loadAllBuildsInChains(
+ Collections.singletonList(s.buildId), SyncMode.RELOAD_QUEUED,
tcIgn);
+
+ List<FatBuildCompacted> chainBuilds =
FutureUtil.getResults(builds.values()).collect(Collectors.toList());
+
+ if (chainBuilds.stream().allMatch(b -> build.isFakeStub())) {
+ s.isFakeStub = true;
+ return;
+ }
+
+ Date startDate =
FutureUtil.getResult(builds.get(s.buildId)).getStartDate();
+
+ DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy'T'HH:mm:ss");
+
+ s.startDate = dateFormat.format(startDate);
+
+ int[] arr = new int[4];
+
+ chainBuilds.stream().filter(b -> !b.isComposite())
+ .forEach(b -> {
+ b.getAllTests().forEach(t -> {
+ if (t.getIgnoredFlag())
+ arr[0]++;
+ else if (t.getMutedFlag())
+ arr[1]++;
+ else if (t.status() != s.strIds.get(STATUS_SUCCESS))
+ arr[2]++;
+
+ arr[3]++;
+ });
+ });
+
+ s.testOccurrences.ignored = arr[0];
+ s.testOccurrences.muted = arr[1];
+ s.testOccurrences.failed = arr[2];
+ s.testOccurrences.count = arr[3];
+ s.testOccurrences.passed = s.testOccurrences.count -
s.testOccurrences.failed - s.testOccurrences.ignored -
+ s.testOccurrences.muted;
+
+ Stream<FatBuildCompacted> snapshotDependenciesWithProblems
+ = chainBuilds.stream()
+ .filter(b -> !b.isComposite())
+ .filter(b -> b.status() !=
BuildStatisticsSummary.strIds.get(STATUS_SUCCESS));
+
+ s.duration = chainBuilds.stream()
+ .filter(b -> !b.isComposite())
+ .map(b -> b.buildDuration(compactor))
+ .filter(Objects::nonNull)
+ .mapToLong(ts -> ts / 1000).sum();
+
+ List<ProblemCompacted> problems =
s.getProblems(snapshotDependenciesWithProblems);
+
+ s.totalProblems = s.getBuildTypeProblemsCount(problems);
+ }
+
+
+}
diff --git
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedImpl.java
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedImpl.java
index d37efe6..fa4a0fe 100644
---
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedImpl.java
+++
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedImpl.java
@@ -25,6 +25,7 @@ import org.apache.ignite.ci.di.AutoProfiling;
import org.apache.ignite.ci.di.MonitoredTask;
import org.apache.ignite.ci.di.cache.GuavaCached;
import org.apache.ignite.ci.di.scheduler.IScheduler;
+import org.apache.ignite.ci.tcbot.trends.MasterTrendsService;
import org.apache.ignite.ci.teamcity.ignited.buildcondition.BuildCondition;
import org.apache.ignite.ci.teamcity.ignited.buildcondition.BuildConditionDao;
import org.apache.ignite.ci.tcmodel.hist.BuildRef;
@@ -347,7 +348,12 @@ public class TeamcityIgnitedImpl implements
ITeamcityIgnited {
@GuavaCached(maximumSize = 2000, cacheNullRval = false)
@AutoProfiling
@Nullable public Date getBuildStartDate(int buildId) {
- logger.info("Loading build [" + buildId + "] start date");
+ String msg = "Loading build [" + buildId + "] start date";
+
+ if (MasterTrendsService.DEBUG)
+ System.out.println(msg);
+
+ logger.info(msg);
FatBuildCompacted highBuild = getFatBuild(buildId, SyncMode.LOAD_NEW);
if (highBuild == null || highBuild.isFakeStub())
@@ -357,7 +363,7 @@ public class TeamcityIgnitedImpl implements
ITeamcityIgnited {
}
/** {@inheritDoc} */
- @GuavaCached(maximumSize = 200, expireAfterAccessSecs = 30, softValues =
true)
+ @GuavaCached(maximumSize = 500, expireAfterAccessSecs = 30, softValues =
true)
@Override public FatBuildCompacted getFatBuild(int buildId, SyncMode mode)
{
FatBuildCompacted existingBuild = getFatBuildFromIgnite(buildId);
diff --git
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/ProactiveFatBuildSync.java
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/ProactiveFatBuildSync.java
index 3ca9f4f..dc00780 100644
---
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/ProactiveFatBuildSync.java
+++
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/ProactiveFatBuildSync.java
@@ -274,11 +274,10 @@ public class ProactiveFatBuildSync {
try {
build = conn.getBuild(buildId);
- if(build.testOccurrences!=null) {
+ if(build.testOccurrences != null && !build.isComposite()) { //
don't query tests for compoite
String nextHref = null;
do {
- boolean testDtls = !build.isComposite(); // don't query
test details for compoite
- TestOccurrencesFull page = conn.getTestsPage(buildId,
nextHref, testDtls);
+ TestOccurrencesFull page = conn.getTestsPage(buildId,
nextHref, true);
nextHref = page.nextHref();
tests.add(page);
diff --git
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/util/FutureUtil.java
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/util/FutureUtil.java
index 4309ce1..edcc95a 100644
---
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/util/FutureUtil.java
+++
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/util/FutureUtil.java
@@ -17,8 +17,11 @@
package org.apache.ignite.ci.util;
+import java.util.Collection;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
+import java.util.stream.Stream;
+import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -79,4 +82,8 @@ public class FutureUtil {
return logCheckRes;
}
+
+ @NotNull public static <V> Stream<V> getResults(Collection<Future<V>>
listBuilds) {
+ return listBuilds.stream() .map(FutureUtil::getResult);
+ }
}
diff --git
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/current/BuildStatisticsSummary.java
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/current/BuildStatisticsSummary.java
index c8dc04e..80f1661 100644
---
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/current/BuildStatisticsSummary.java
+++
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/current/BuildStatisticsSummary.java
@@ -19,17 +19,15 @@ package org.apache.ignite.ci.web.model.current;
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
+import java.util.stream.Stream;
import javax.annotation.Nonnull;
import org.apache.ignite.ci.tcmodel.result.TestOccurrencesRef;
-import org.apache.ignite.ci.teamcity.ignited.IStringCompactor;
import org.apache.ignite.ci.teamcity.ignited.ITeamcityIgnited;
import org.apache.ignite.ci.teamcity.ignited.fatbuild.FatBuildCompacted;
import org.apache.ignite.ci.teamcity.ignited.fatbuild.ProblemCompacted;
@@ -72,9 +70,6 @@ public class BuildStatisticsSummary {
/** Test occurrences. */
public TestOccurrencesRef testOccurrences = new TestOccurrencesRef();
- /** List of problem occurrences. */
- private List<ProblemCompacted> problemOccurrenceList;
-
/** Duration (seconds). */
public long duration;
@@ -94,66 +89,17 @@ public class BuildStatisticsSummary {
this.buildId = buildId;
}
- /** Initialize build statistics. */
- public void initialize(@Nonnull final IStringCompactor compactor, @Nonnull
final ITeamcityIgnited ignitedTeamcity) {
- if (strIds.isEmpty()) {
- strIds.put(STATUS_SUCCESS, compactor.getStringId(STATUS_SUCCESS));
- strIds.put(TC_EXIT_CODE, compactor.getStringId(TC_EXIT_CODE));
- strIds.put(TC_OOME, compactor.getStringId(TC_OOME));
- strIds.put(TC_JVM_CRASH, compactor.getStringId(TC_JVM_CRASH));
- strIds.put(TC_EXECUTION_TIMEOUT,
compactor.getStringId(TC_EXECUTION_TIMEOUT));
- }
-
- FatBuildCompacted build = ignitedTeamcity.getFatBuild(buildId);
-
- isFakeStub = build.isFakeStub();
-
- if (isFakeStub)
- return;
-
- DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy'T'HH:mm:ss");
-
- startDate = dateFormat.format(build.getStartDate());
-
- int[] arr = new int[4];
-
- build.getAllTests().forEach(t -> {
- if (t.getIgnoredFlag())
- arr[0]++;
- else if (t.getMutedFlag())
- arr[1]++;
- else if (t.status() != strIds.get(STATUS_SUCCESS))
- arr[2]++;
-
- arr[3]++;
- });
-
- testOccurrences.ignored = arr[0];
- testOccurrences.muted = arr[1];
- testOccurrences.failed = arr[2];
- testOccurrences.count = arr[3];
- testOccurrences.passed = testOccurrences.count -
testOccurrences.failed - testOccurrences.ignored -
- testOccurrences.muted;
-
- duration = build.buildDuration(compactor) / 1000;
-
- List<FatBuildCompacted> snapshotDependencies =
getSnapshotDependencies(ignitedTeamcity, buildId);
-
- List<FatBuildCompacted> snapshotDependenciesWithProblems =
getBuildsWithProblems(snapshotDependencies);
-
- problemOccurrenceList = getProblems(snapshotDependenciesWithProblems);
-
- totalProblems = getBuildTypeProblemsCount();
- }
/**
* @param problemName Problem name.
+ * @param problems
*/
- private long getProblemsCount(String problemName) {
- if (problemOccurrenceList == null)
+ private long getProblemsCount(String problemName,
+ List<ProblemCompacted> problems) {
+ if (problems == null)
return 0;
- return problemOccurrenceList.stream()
+ return problems.stream()
.filter(Objects::nonNull)
.filter(p -> p.type() == strIds.get(problemName)).count();
}
@@ -163,14 +109,15 @@ public class BuildStatisticsSummary {
*
* @param builds Builds.
*/
- private List<ProblemCompacted> getProblems(List<FatBuildCompacted> builds)
{
+ public List<ProblemCompacted> getProblems(Stream<FatBuildCompacted>
builds) {
List<ProblemCompacted> problemOccurrences = new ArrayList<>();
- for (FatBuildCompacted build : builds) {
+ builds.forEach(build -> {
problemOccurrences.addAll(
build.problems()
);
- }
+ });
+
return problemOccurrences;
}
@@ -205,14 +152,16 @@ public class BuildStatisticsSummary {
/**
* BuildType problems count (EXECUTION TIMEOUT, JVM CRASH, OOMe, EXIT
CODE, TOTAL PROBLEMS COUNT).
+ * @param problems
*/
- private Map<String, Long> getBuildTypeProblemsCount() {
+ public Map<String, Long> getBuildTypeProblemsCount(
+ List<ProblemCompacted> problems) {
Map<String, Long> occurrences = new HashMap<>();
- occurrences.put(shortProblemNames.get(TC_EXECUTION_TIMEOUT),
getProblemsCount(TC_EXECUTION_TIMEOUT));
- occurrences.put(shortProblemNames.get(TC_JVM_CRASH),
getProblemsCount(TC_JVM_CRASH));
- occurrences.put(shortProblemNames.get(TC_OOME),
getProblemsCount(TC_OOME));
- occurrences.put(shortProblemNames.get(TC_EXIT_CODE),
getProblemsCount(TC_EXIT_CODE));
+ occurrences.put(shortProblemNames.get(TC_EXECUTION_TIMEOUT),
getProblemsCount(TC_EXECUTION_TIMEOUT, problems));
+ occurrences.put(shortProblemNames.get(TC_JVM_CRASH),
getProblemsCount(TC_JVM_CRASH, problems));
+ occurrences.put(shortProblemNames.get(TC_OOME),
getProblemsCount(TC_OOME, problems));
+ occurrences.put(shortProblemNames.get(TC_EXIT_CODE),
getProblemsCount(TC_EXIT_CODE, problems));
occurrences.put(shortProblemNames.get(TOTAL),
occurrences.values().stream().mapToLong(Long::longValue).sum());
return occurrences;
@@ -232,14 +181,13 @@ public class BuildStatisticsSummary {
Objects.equals(buildId, that.buildId) &&
Objects.equals(startDate, that.startDate) &&
Objects.equals(testOccurrences, that.testOccurrences) &&
- Objects.equals(problemOccurrenceList, that.problemOccurrenceList)
&&
Objects.equals(duration, that.duration) &&
Objects.equals(totalProblems, that.totalProblems);
}
/** {@inheritDoc} */
@Override public int hashCode() {
- return Objects.hash(buildId, startDate, testOccurrences,
problemOccurrenceList,
+ return Objects.hash(buildId, startDate, testOccurrences,
duration, totalProblems, isFakeStub);
}
}
diff --git
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/hist/BuildsHistory.java
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/hist/BuildsHistory.java
index 0ba1e47..59e6e6c 100644
---
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/hist/BuildsHistory.java
+++
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/hist/BuildsHistory.java
@@ -23,11 +23,11 @@ import com.google.inject.Inject;
import com.google.inject.Injector;
import org.apache.ignite.ci.ITeamcity;
import org.apache.ignite.ci.tcbot.chain.BuildChainProcessor;
+import org.apache.ignite.ci.tcbot.trends.MasterTrendsService;
import org.apache.ignite.ci.tcmodel.result.Build;
import org.apache.ignite.ci.tcmodel.result.tests.TestOccurrence;
import org.apache.ignite.ci.tcmodel.result.tests.TestOccurrences;
import org.apache.ignite.ci.teamcity.ignited.BuildRefCompacted;
-import org.apache.ignite.ci.teamcity.ignited.IStringCompactor;
import org.apache.ignite.ci.teamcity.ignited.ITeamcityIgnited;
import org.apache.ignite.ci.teamcity.ignited.ITeamcityIgnitedProvider;
import org.apache.ignite.ci.teamcity.restcached.ITcServerProvider;
@@ -91,7 +91,7 @@ public class BuildsHistory {
@Inject private ITcServerProvider tcServerProvider;
- @Inject private IStringCompactor compactor;
+ @Inject private MasterTrendsService masterTrendsService;
/** */
public void initialize(ICredentialsProv prov) {
@@ -107,7 +107,7 @@ public class BuildsHistory {
Map<Integer, Boolean> buildIdsWithConditions =
finishedBuildsIds.stream()
.collect(Collectors.toMap(v -> v, ignitedTeamcity::buildIsValid,
(e1, e2) -> e1, LinkedHashMap::new));
- initStatistics(compactor, teamcity, ignitedTeamcity,
buildIdsWithConditions);
+ initStatistics(ignitedTeamcity, buildIdsWithConditions);
List<Integer> validBuilds = buildIdsWithConditions.keySet()
.stream()
@@ -117,6 +117,9 @@ public class BuildsHistory {
if (!skipTests)
initFailedTests(teamcity, validBuilds);
+ if (MasterTrendsService.DEBUG)
+ System.out.println("Preparing response");
+
ObjectMapper objMapper = new ObjectMapper();
try {
@@ -127,22 +130,24 @@ public class BuildsHistory {
}
/** */
- private void initStatistics(IStringCompactor compactor, ITeamcity
teamcity, ITeamcityIgnited ignited,
+ private void initStatistics(ITeamcityIgnited ignited,
Map<Integer, Boolean> buildIdsWithConditions) {
List<Future<BuildStatisticsSummary>> buildStaticsFutures = new
ArrayList<>();
for (int buildId : buildIdsWithConditions.keySet()) {
Future<BuildStatisticsSummary> buildFut =
CompletableFuture.supplyAsync(() -> {
- BuildStatisticsSummary buildsStatistic = new
BuildStatisticsSummary(buildId);
+ BuildStatisticsSummary buildsStatistic =
masterTrendsService.getBuildSummary(ignited, buildId);
buildsStatistic.isValid = buildIdsWithConditions.get(buildId);
- buildsStatistic.initialize(compactor, ignited);
return buildsStatistic;
- }, teamcity.getExecutor());
+ });
buildStaticsFutures.add(buildFut);
}
+ if (MasterTrendsService.DEBUG)
+ System.out.println("Waiting for stat to collect");
+
buildStaticsFutures.forEach(fut -> {
try {
BuildStatisticsSummary buildsStatistic = fut.get();
diff --git
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/build/GetBuildTestFailures.java
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/build/GetBuildTestFailures.java
index 7e7b97c..e8c312f 100644
---
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/build/GetBuildTestFailures.java
+++
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/build/GetBuildTestFailures.java
@@ -22,6 +22,7 @@ import java.text.ParseException;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import com.google.inject.Injector;
+import org.apache.ignite.ci.tcbot.trends.MasterTrendsService;
import org.apache.ignite.ci.teamcity.ignited.SyncMode;
import org.apache.ignite.ci.teamcity.ignited.buildcondition.BuildCondition;
import org.apache.ignite.ci.tcbot.chain.BuildChainProcessor;
@@ -269,6 +270,9 @@ public class GetBuildTestFailures {
buildsHist.initialize(prov);
+ if (MasterTrendsService.DEBUG)
+ System.out.println("MasterTrendsService: Responding");
+
return buildsHist;
}
}