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

Reply via email to