You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by dp...@apache.org on 2019/08/03 22:45:14 UTC

[ignite-teamcity-bot] branch filter-hist-by-tag updated: Filtering history by build tag selected at tracked page: filtering whole suite by parameters

This is an automated email from the ASF dual-hosted git repository.

dpavlov pushed a commit to branch filter-hist-by-tag
in repository https://gitbox.apache.org/repos/asf/ignite-teamcity-bot.git


The following commit(s) were added to refs/heads/filter-hist-by-tag by this push:
     new 8f6baa7  Filtering history by build tag selected at tracked page: filtering whole suite by parameters
8f6baa7 is described below

commit 8f6baa761e5f058e580d80483fec0c3589dee788
Author: Dmitriy Pavlov <dp...@apache.org>
AuthorDate: Sun Aug 4 01:44:43 2019 +0300

    Filtering history by build tag selected at tracked page: filtering whole suite by parameters
---
 .../ci/teamcity/ignited/TeamcityIgnitedMock.java   |  2 +-
 .../tcbot/engine/chain/BuildChainProcessor.java    |  4 +-
 .../ignite/tcbot/engine/chain/MultBuildRunCtx.java | 51 +++++++++++-----------
 .../tcbot/engine/chain/TestCompactedMult.java      |  9 +---
 .../ignite/tcbot/engine/pr/PrChainsProcessor.java  |  2 +-
 .../apache/ignite/tcbot/engine/ui/DsSuiteUi.java   | 39 ++++++++---------
 .../ignited/buildtype/ParametersCompacted.java     | 25 ++++++++---
 .../ignited/fatbuild/FatBuildCompacted.java        | 20 +++++----
 .../ci/teamcity/ignited/runhist/Invocation.java    |  7 ++-
 .../teamcity/ignited/runhist/InvocationData.java   |  4 ++
 .../teamcity/ignited/runhist/RunHistCompacted.java | 38 +++++++++++-----
 .../ignite/tcignited/build/SuiteHistory.java       | 19 ++++++++
 .../ignite/tcignited/build/TestCompactedV2.java    | 28 +++---------
 .../ignite/tcignited/history/HistoryCollector.java |  8 ++--
 .../ignite/tcignited/history/IRunHistory.java      |  3 +-
 .../ignite/tcignited/history/ISuiteRunHistory.java |  4 ++
 16 files changed, 147 insertions(+), 116 deletions(-)

diff --git a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedMock.java b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedMock.java
index 2de7fee..b4484dd 100644
--- a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedMock.java
+++ b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedMock.java
@@ -183,7 +183,7 @@ public class TeamcityIgnitedMock {
 
                 final RunHistCompacted hist = histCache.computeIfAbsent(histKey, RunHistCompacted::new);
 
-                Invocation inv = TestCompactedV2.toInvocation(testCompacted, build, (k, v) -> false, successStatusStrId);
+                Invocation inv = TestCompactedV2.toInvocation(testCompacted, build, successStatusStrId);
 
                 hist.addInvocation(inv);
             });
diff --git a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/chain/BuildChainProcessor.java b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/chain/BuildChainProcessor.java
index d4d82ae..cf0dc94 100644
--- a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/chain/BuildChainProcessor.java
+++ b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/chain/BuildChainProcessor.java
@@ -193,7 +193,7 @@ public class BuildChainProcessor {
 
             //ask for history for the suite in parallel
             tcUpdatePool.getService().submit(() -> {
-                ctx.history(tcIgn, failRateBranchId);
+                ctx.history(tcIgn, failRateBranchId, null);
             });
 
             analyzeTests(ctx, tcIgn, procLog);
@@ -212,7 +212,7 @@ public class BuildChainProcessor {
 
         if (sortOption == null || sortOption == SortOption.FailureRate) {
             function = ctx -> {
-                IRunHistory runStat = ctx.history(tcIgn, failRateBranchId);
+                IRunHistory runStat = ctx.history(tcIgn, failRateBranchId, null);
 
                 if (runStat == null)
                     return 0d;
diff --git a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/chain/MultBuildRunCtx.java b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/chain/MultBuildRunCtx.java
index 7e2b48a..86146f3 100644
--- a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/chain/MultBuildRunCtx.java
+++ b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/chain/MultBuildRunCtx.java
@@ -20,23 +20,6 @@ package org.apache.ignite.tcbot.engine.chain;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
 import com.google.common.cache.CacheBuilder;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.OptionalDouble;
-import java.util.Set;
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.function.Predicate;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
 import org.apache.ignite.ci.teamcity.ignited.change.ChangeCompacted;
 import org.apache.ignite.ci.teamcity.ignited.fatbuild.ProblemCompacted;
 import org.apache.ignite.tcbot.common.TcBotConst;
@@ -54,6 +37,17 @@ import org.apache.ignite.tcservice.model.hist.BuildRef;
 import org.apache.ignite.tcservice.model.result.problems.ProblemOccurrence;
 import org.apache.ignite.tcservice.model.result.stat.Statistics;
 
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import java.util.*;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
 /**
  * Run configuration execution results loaded from different API URLs. Includes tests and problem occurrences; if logs
  * processing is done also contains last started test
@@ -672,11 +666,13 @@ public class MultBuildRunCtx implements ISuiteResults {
      * @param tcIgn Tc ign.
      * @param baseBranchId Base branch id.
      */
-    public IRunHistory history(ITeamcityIgnited tcIgn, Integer baseBranchId) {
+    public IRunHistory history(ITeamcityIgnited tcIgn,
+                               @Nullable Integer baseBranchId,
+                               @Nullable Map<Integer, Integer> requireParameters) {
         if (baseBranchId == null)
             return null;
 
-        ISuiteRunHistory suiteHist = suiteHist(tcIgn, baseBranchId);
+        ISuiteRunHistory suiteHist = suiteHist(tcIgn, baseBranchId, requireParameters);
         if (suiteHist == null)
             return null;
 
@@ -684,7 +680,9 @@ public class MultBuildRunCtx implements ISuiteResults {
     }
 
     @Nullable
-    ISuiteRunHistory suiteHist(ITeamcityIgnited tcIgn, @Nullable Integer baseBranchId) {
+    ISuiteRunHistory suiteHist(ITeamcityIgnited tcIgn,
+                               @Nullable Integer baseBranchId,
+                               @Nullable Map<Integer, Integer> requireParameters) {
         Integer buildTypeIdId = buildTypeIdId();
         Preconditions.checkNotNull(buildTypeIdId, "Build type ID should be filled");
 
@@ -693,11 +691,14 @@ public class MultBuildRunCtx implements ISuiteResults {
             return null;
 
         try {
-            return histCacheMap.get(baseBranchId,
-                () -> {
-                    return Optional.ofNullable(tcIgn.getSuiteRunHist(buildTypeIdId, baseBranchId));
-                })
-                .orElse(null);
+            ISuiteRunHistory suiteRunHistory = histCacheMap.get(baseBranchId,
+                    () -> Optional.ofNullable(tcIgn.getSuiteRunHist(buildTypeIdId, baseBranchId)))
+                    .orElse(null);
+
+            if (suiteRunHistory != null && requireParameters != null && !requireParameters.isEmpty())
+                return suiteRunHistory.filter(requireParameters);
+
+            return suiteRunHistory;
         }
         catch (ExecutionException e) {
             throw  ExceptionUtil.propagateException(e);
diff --git a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/chain/TestCompactedMult.java b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/chain/TestCompactedMult.java
index b6cfc09..8462bb8 100644
--- a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/chain/TestCompactedMult.java
+++ b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/chain/TestCompactedMult.java
@@ -150,17 +150,12 @@ public class TestCompactedMult {
         if (name == null || baseBranchId == null)
             return null;
 
-        ISuiteRunHistory suiteRunHist = ctx.suiteHist(ignited, baseBranchId);
+        ISuiteRunHistory suiteRunHist = ctx.suiteHist(ignited, baseBranchId, requireParameters);
 
         if (suiteRunHist == null)
             return null;
 
-        IRunHistory testRunHist = suiteRunHist.getTestRunHist(name);
-
-        if (requireParameters == null || requireParameters.isEmpty())
-            return testRunHist;
-
-        return testRunHist.filter(requireParameters);
+        return suiteRunHist.getTestRunHist(name);
     }
 
     /**
diff --git a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/pr/PrChainsProcessor.java b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/pr/PrChainsProcessor.java
index 96ca393..a31a2a4 100644
--- a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/pr/PrChainsProcessor.java
+++ b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/pr/PrChainsProcessor.java
@@ -303,7 +303,7 @@ public class PrChainsProcessor {
         return fullChainRunCtx
             .filteredChildSuites(filter)
             .map((ctx) -> {
-                IRunHistory statInBaseBranch = ctx.history(tcIgnited, baseBranchId);
+                IRunHistory statInBaseBranch = ctx.history(tcIgnited, baseBranchId, null);
 
                 String suiteComment = ctx.getPossibleBlockerComment(compactor, statInBaseBranch, tcIgnited.config());
 
diff --git a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/ui/DsSuiteUi.java b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/ui/DsSuiteUi.java
index e9fa992..c4551af 100644
--- a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/ui/DsSuiteUi.java
+++ b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/ui/DsSuiteUi.java
@@ -146,13 +146,13 @@ public class DsSuiteUi extends ShortSuiteUi {
                                      @Nullable Map<Integer, Integer> requireParamVal) {
         String failRateNormalizedBranch = normalizeBranch(baseBranch);
         Integer baseBranchId = compactor.getStringIdIfPresent(failRateNormalizedBranch);
-        IRunHistory baseBranchHist = suite.history(tcIgnited, baseBranchId);
+        IRunHistory baseBranchHist = suite.history(tcIgnited, baseBranchId, requireParamVal);
         initFrom(suite, tcIgnited, compactor, baseBranchHist);
 
         String curBranchNormalized = normalizeBranch(suite.branchName());
         Integer curBranchId = compactor.getStringIdIfPresent(curBranchNormalized);
 
-        initSuiteStat(tcIgnited, baseBranchId, curBranchId, suite, baseBranchHist);
+        initSuiteStat(tcIgnited, baseBranchId, curBranchId, suite, baseBranchHist, requireParamVal);
 
         Set<String> collect = suite.lastChangeUsers().collect(Collectors.toSet());
 
@@ -170,7 +170,6 @@ public class DsSuiteUi extends ShortSuiteUi {
         webToHist = buildWebLinkToHist(tcIgnited, suite);
         webToHistBaseBranch = buildWebLinkToHist(tcIgnited, suite, baseBranch);
 
-        Integer buildTypeIdId = suite.buildTypeIdId();
         if (includeTests) {
             List<TestCompactedMult> tests = suite.getFilteredTests(test ->
                 test.hasLongRunningTest(maxDurationSec)
@@ -184,19 +183,17 @@ public class DsSuiteUi extends ShortSuiteUi {
 
             tests.sort(Comparator.comparing(function).reversed());
 
-            tests.forEach(occurrence -> {
-                DsTestFailureUi failure = new DsTestFailureUi()
-                        .initFromOccurrence(occurrence,
-                                tcIgnited,
-                                suite.projectId(),
-                                suite.branchName(),
-                                baseBranch,
-                                baseBranchId,
-                                curBranchId,
-                                requireParamVal);
-
-                testFailures.add(failure);
-            });
+            tests.stream()
+                    .map(occurrence -> new DsTestFailureUi()
+                            .initFromOccurrence(occurrence,
+                                    tcIgnited,
+                                    suite.projectId(),
+                                    suite.branchName(),
+                                    baseBranch,
+                                    baseBranchId,
+                                    curBranchId,
+                                    requireParamVal))
+                    .forEach(testFailureUi -> testFailures.add(testFailureUi));
 
             suite.getTopLongRunning().forEach(occurrence -> {
                 if (occurrence.getAvgDurationMs() > TimeUnit.SECONDS.toMillis(15)) {
@@ -257,9 +254,11 @@ public class DsSuiteUi extends ShortSuiteUi {
 
 
     private IRunHistory initSuiteStat(ITeamcityIgnited tcIgnited,
-        Integer failRateNormalizedBranch,
-        Integer curBranchNormalized,
-        MultBuildRunCtx suite, IRunHistory referenceStat) {
+                                      Integer failRateNormalizedBranch,
+                                      Integer curBranchNormalized,
+                                      MultBuildRunCtx suite,
+                                      IRunHistory referenceStat,
+                                      @Nullable Map<Integer, Integer> requireParamVal) {
         IRunHistory statInBaseBranch = referenceStat;
 
         if (statInBaseBranch != null) {
@@ -276,7 +275,7 @@ public class DsSuiteUi extends ShortSuiteUi {
 
         IRunHistory latestRunsSrc = null;
         if (!Objects.equals(failRateNormalizedBranch, curBranchNormalized)) {
-            IRunHistory statForStripe = suite.history(tcIgnited, curBranchNormalized);
+            IRunHistory statForStripe = suite.history(tcIgnited, curBranchNormalized, requireParamVal);
 
             latestRunsSrc = statForStripe;
             latestRuns = statForStripe != null ? statForStripe.getLatestRunResults() : null;
diff --git a/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/ParametersCompacted.java b/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/ParametersCompacted.java
index 2308ddb..b889c48 100644
--- a/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/ParametersCompacted.java
+++ b/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/ParametersCompacted.java
@@ -19,17 +19,18 @@ package org.apache.ignite.ci.teamcity.ignited.buildtype;
 
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Strings;
+import org.apache.ignite.internal.util.GridIntList;
+import org.apache.ignite.tcbot.persistence.IStringCompactor;
+import org.apache.ignite.tcbot.persistence.Persisted;
+import org.apache.ignite.tcservice.model.conf.bt.Parameters;
+import org.apache.ignite.tcservice.model.conf.bt.Property;
+
+import javax.annotation.Nullable;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.function.BiConsumer;
-import javax.annotation.Nullable;
-
-import org.apache.ignite.tcbot.persistence.Persisted;
-import org.apache.ignite.tcservice.model.conf.bt.Parameters;
-import org.apache.ignite.tcservice.model.conf.bt.Property;
-import org.apache.ignite.tcbot.persistence.IStringCompactor;
-import org.apache.ignite.internal.util.GridIntList;
 
 /**
  * Properties (Build/Build Type parameters) compacted value for storing in TC Bot DB
@@ -74,6 +75,16 @@ public class ParametersCompacted {
         }
     }
 
+    public ParametersCompacted(Map<Integer, Integer> parms) {
+        keys = new GridIntList(parms.size());
+        values = new GridIntList(parms.size());
+
+        parms.forEach((strId, val) -> {
+            keys.add(strId);
+            values.add(val);
+        });
+    }
+
     public Parameters toParameters(IStringCompactor compactor) {
         List<Property> props = null;
 
diff --git a/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/FatBuildCompacted.java b/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/FatBuildCompacted.java
index 51eb4aa..5d71fdc 100644
--- a/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/FatBuildCompacted.java
+++ b/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/FatBuildCompacted.java
@@ -18,14 +18,6 @@ package org.apache.ignite.ci.teamcity.ignited.fatbuild;
 
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Strings;
-
-import java.util.*;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.function.BiPredicate;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
 import org.apache.ignite.ci.teamcity.ignited.BuildRefCompacted;
 import org.apache.ignite.ci.teamcity.ignited.buildtype.ParametersCompacted;
 import org.apache.ignite.ci.teamcity.ignited.change.RevisionCompacted;
@@ -54,6 +46,14 @@ import org.apache.ignite.tcservice.model.vcs.Revision;
 import org.apache.ignite.tcservice.model.vcs.Revisions;
 import org.apache.ignite.tcservice.model.vcs.VcsRootInstance;
 
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.function.BiPredicate;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
 /**
  * Composed data from {@link Build} and other classes, compressed for storage.
  */
@@ -667,7 +667,9 @@ public class FatBuildCompacted extends BuildRefCompacted implements IVersionedEn
                 if (paramsFilter.test(k, v))
                     importantParms.put(k, v);
             });
-            //todo save parameters
+
+            if (!importantParms.isEmpty())
+                invocation.withParameters(importantParms);
         }
 
         return invocation;
diff --git a/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/Invocation.java b/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/Invocation.java
index 6515806..6b11d2b 100644
--- a/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/Invocation.java
+++ b/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/Invocation.java
@@ -52,9 +52,7 @@ public class Invocation {
     private byte changePresent;
 
     /** Additional (important) build Parameters, which can be used for filtering. */
-    @Nullable private Map<Integer, Integer> parms;
-
-    private ParametersCompacted parameters = new ParametersCompacted();
+    @Nullable private ParametersCompacted parameters;
 
     /**
      * Creates invocation.
@@ -131,12 +129,13 @@ public class Invocation {
         if (parms == null || parms.isEmpty())
             return this;
 
-        this.parms = parms;
+        this.parameters = new ParametersCompacted(parms);
 
         return this;
     }
 
     public boolean containsParameters(Map<Integer, Integer> requireParameters) {
+        //todo implement contains parameters (compacted).
         return false;
     }
 }
diff --git a/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/InvocationData.java b/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/InvocationData.java
index 090c39c..f973c07 100644
--- a/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/InvocationData.java
+++ b/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/InvocationData.java
@@ -114,4 +114,8 @@ public class InvocationData {
     public void sort() {
         invocationList.sort(Comparator.comparing(Invocation::buildId));
     }
+
+    public Set<Integer> buildIds() {
+        return invocationList.stream().map(Invocation::buildId).collect(Collectors.toSet());
+    }
 }
diff --git a/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistCompacted.java b/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistCompacted.java
index c93398b..244129e 100644
--- a/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistCompacted.java
+++ b/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistCompacted.java
@@ -28,6 +28,7 @@ import javax.annotation.Nullable;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -102,18 +103,8 @@ public class RunHistCompacted implements IRunHistory {
     }
 
     @Override
-    public IRunHistory filter(Map<Integer, Integer> requireParameters) {
-        RunHistCompacted runHistCompacted = new RunHistCompacted();
-
-        Stream<Invocation> invocationStream = data.invocations().filter(
-                invocation -> invocation.containsParameters(requireParameters)
-        );
-
-        invocationStream.forEach(i -> {
-            runHistCompacted.data.add(i);
-        });
-
-        return runHistCompacted;
+    public Set<Integer> buildIds() {
+        return data.buildIds();
     }
 
     private static int[] concatArr(int[] arr1, int[] arr2) {
@@ -215,4 +206,27 @@ public class RunHistCompacted implements IRunHistory {
     public void sort() {
         data.sort();
     }
+
+
+    public RunHistCompacted filterSuiteInvByParms(Map<Integer, Integer> requireParameters) {
+        RunHistCompacted copy = new RunHistCompacted();
+
+        Stream<Invocation> invocationStream = data.invocations().filter(
+                invocation -> invocation.containsParameters(requireParameters)
+        );
+
+        invocationStream.forEach(invocation -> copy.data.add(invocation));
+
+        return copy;
+    }
+
+    public RunHistCompacted filterByBuilds(Set<Integer> builds) {
+        RunHistCompacted copy = new RunHistCompacted();
+
+        data.invocations()
+                .filter(invocation -> builds.contains(invocation.buildId()))
+                .forEach(invocation -> copy.data.add(invocation));
+
+        return copy;
+    }
 }
diff --git a/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/build/SuiteHistory.java b/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/build/SuiteHistory.java
index 9d5f0e8..c00e243 100644
--- a/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/build/SuiteHistory.java
+++ b/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/build/SuiteHistory.java
@@ -19,6 +19,7 @@ package org.apache.ignite.tcignited.build;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Set;
 
 import org.apache.ignite.Ignite;
 import org.apache.ignite.ci.teamcity.ignited.runhist.Invocation;
@@ -42,6 +43,8 @@ public class SuiteHistory implements ISuiteRunHistory {
         finalizeInvocations();
     }
 
+    private SuiteHistory() {}
+
     private void finalizeInvocations() {
         //todo add missing status to tests
         //  testsHistory.values().registerMissing(suiteHist.buildIds());
@@ -59,6 +62,22 @@ public class SuiteHistory implements ISuiteRunHistory {
         return testsHistory.get(testName);
     }
 
+    @Override
+    public ISuiteRunHistory filter(Map<Integer, Integer> requireParameters) {
+        RunHistCompacted suitesFiltered = this.suiteHist.filterSuiteInvByParms(requireParameters);
+        Set<Integer> builds = suitesFiltered.buildIds();
+
+        SuiteHistory res = new SuiteHistory();
+        res.suiteHist = suitesFiltered;
+
+        this.testsHistory.forEach((tName,invList)->{
+            RunHistCompacted filteredByBuild = invList.filterByBuilds(builds);
+            res.testsHistory.put(tName, filteredByBuild);
+        });
+
+        return res;
+    }
+
     private RunHistCompacted getOrAddTestsHistory(Integer tName) {
         return testsHistory.computeIfAbsent(tName, k_ -> new RunHistCompacted());
     }
diff --git a/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/build/TestCompactedV2.java b/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/build/TestCompactedV2.java
index 39b2d04..8241b3f 100644
--- a/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/build/TestCompactedV2.java
+++ b/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/build/TestCompactedV2.java
@@ -20,11 +20,8 @@ package org.apache.ignite.tcignited.build;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Strings;
 import java.util.Objects;
-import java.util.TreeMap;
-import java.util.function.BiPredicate;
 import javax.annotation.Nullable;
 import org.apache.ignite.ci.tcbot.common.StringFieldCompacted;
-import org.apache.ignite.ci.teamcity.ignited.buildtype.ParametersCompacted;
 import org.apache.ignite.ci.teamcity.ignited.fatbuild.FatBuildCompacted;
 import org.apache.ignite.ci.teamcity.ignited.runhist.Invocation;
 import org.apache.ignite.ci.teamcity.ignited.runhist.InvocationData;
@@ -380,40 +377,25 @@ public class TestCompactedV2 implements ITest {
 
     /**
      * @param build
-     * @param paramsFilter parameters filter to find out parameters to be saved in RunHistory (for future filtering).
      * @param successStatusStrId
      * @return
      */
     public static Invocation toInvocation(
-        ITest test,
-        FatBuildCompacted build,
-        BiPredicate<Integer, Integer> paramsFilter, int successStatusStrId) {
+            ITest test,
+            FatBuildCompacted build,
+            int successStatusStrId) {
         final boolean failedTest = successStatusStrId != test.status();
 
+        //todo implement IGNORED, MUTED_FAILURE, MUTED_SUCCESS
         final int failCode = failedTest
             ? (test.isIgnoredTest() || test.isMutedTest())
             ? InvocationData.MUTED
             : InvocationData.FAILURE
             : InvocationData.OK;
 
-        Invocation invocation = new Invocation(build.getId())
+        return new Invocation(build.getId())
             .withStatus(failCode)
             .withChanges(build.changes());
-
-        java.util.Map<Integer, Integer> importantParms = new TreeMap<>();
-
-        ParametersCompacted parameters = build.parameters();
-        if (parameters == null)
-            return invocation;
-
-        parameters.forEach((k, v) -> {
-            if (paramsFilter.test(k, v))
-                importantParms.put(k, v);
-        });
-
-        //todo implement parameter filter and save to parms compacted
-        // return invocation.withParameters(importantParms);
-        return invocation;
     }
 
     /**
diff --git a/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/history/HistoryCollector.java b/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/history/HistoryCollector.java
index bfb7bea..681aa5a 100644
--- a/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/history/HistoryCollector.java
+++ b/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/history/HistoryCollector.java
@@ -26,11 +26,8 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.BiPredicate;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -275,6 +272,9 @@ public class HistoryCollector {
                     if (!applicableForHistory(fatBuildCompacted))
                         return;
 
+
+                    //todo implement parameter filter based on TC Bot conf
+
                     BiPredicate<Integer, Integer> paramsFilter = (k, v) -> false;
 
                     SuiteInvocation sinv = new SuiteInvocation(srvId, normalizedBaseBranch, fatBuildCompacted, compactor, paramsFilter);
@@ -283,7 +283,7 @@ public class HistoryCollector {
                     tests.forEach(
                         testCompacted -> {
                             Invocation invocation = TestCompactedV2.toInvocation(testCompacted,
-                                fatBuildCompacted, paramsFilter, successStatusStrId);
+                                fatBuildCompacted, successStatusStrId);
 
                             sinv.addTest(testCompacted.testName(), invocation);
                         }
diff --git a/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/history/IRunHistory.java b/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/history/IRunHistory.java
index a477a17..779b516 100644
--- a/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/history/IRunHistory.java
+++ b/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/history/IRunHistory.java
@@ -19,6 +19,7 @@ package org.apache.ignite.tcignited.history;
 import javax.annotation.Nullable;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * Test or Build run statistics.
@@ -60,5 +61,5 @@ public interface IRunHistory extends IRunStat, IRunHistSummary {
         return 1.0f * getFailuresCount() / runs;
     }
 
-    IRunHistory filter(Map<Integer, Integer> requireParameters);
+    Set<Integer> buildIds();
 }
diff --git a/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/history/ISuiteRunHistory.java b/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/history/ISuiteRunHistory.java
index 38dff1c..a3223b9 100644
--- a/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/history/ISuiteRunHistory.java
+++ b/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/history/ISuiteRunHistory.java
@@ -16,7 +16,11 @@
  */
 package org.apache.ignite.tcignited.history;
 
+import java.util.Map;
+
 public interface ISuiteRunHistory {
     IRunHistory self();
     IRunHistory getTestRunHist(int testName);
+
+    ISuiteRunHistory filter(Map<Integer, Integer> requireParameters);
 }