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:06:14 UTC

[ignite-teamcity-bot] branch filter-hist-by-tag created (now f5b9f5d)

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

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


      at f5b9f5d  Filtering history by build tag selected in tracked.html

This branch includes the following new commits:

     new f5b9f5d  Filtering history by build tag selected in tracked.html

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[ignite-teamcity-bot] 01/01: Filtering history by build tag selected in tracked.html

Posted by dp...@apache.org.
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

commit f5b9f5d596cc43e9f3d02a8ce5adb2714195971b
Author: Dmitriy Pavlov <dp...@apache.org>
AuthorDate: Sun Aug 4 01:06:04 2019 +0300

    Filtering history by build tag selected in tracked.html
---
 .../ignite/ci/web/rest/GetChainResultsAsHtml.java  |  2 +-
 .../ci/web/rest/build/GetBuildTestFailures.java    |  2 +-
 .../tcbot/engine/chain/BuildChainProcessor.java    |  2 +-
 .../tcbot/engine/chain/TestCompactedMult.java      | 27 +++++---
 .../ignite/tcbot/engine/pr/PrChainsProcessor.java  |  3 +-
 .../tracked/TrackedBranchChainsProcessor.java      |  3 +-
 .../apache/ignite/tcbot/engine/ui/DsChainUi.java   | 34 +++++-----
 .../apache/ignite/tcbot/engine/ui/DsSuiteUi.java   | 73 +++++++++++-----------
 .../ignite/tcbot/engine/ui/DsTestFailureUi.java    | 44 ++++++++-----
 .../ci/teamcity/ignited/runhist/Invocation.java    |  7 +++
 .../teamcity/ignited/runhist/RunHistCompacted.java | 28 +++++++--
 .../ignite/tcignited/history/IRunHistory.java      |  3 +
 12 files changed, 145 insertions(+), 83 deletions(-)

diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/GetChainResultsAsHtml.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/GetChainResultsAsHtml.java
index 55dd5ad..04c493d 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/GetChainResultsAsHtml.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/GetChainResultsAsHtml.java
@@ -92,7 +92,7 @@ public class GetChainResultsAsHtml {
         status.chainName = ctx.suiteName();
 
         IStringCompactor c = injector.getInstance(IStringCompactor.class);
-        status.initFromContext(tcIgn, ctx, failRateBranch, c, false, null, null, -1);
+        status.initFromContext(tcIgn, ctx, failRateBranch, c, false, null, null, -1, null);
 
         res.append(showChainAtServerData(status));
 
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 2b38122..6de270d 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
@@ -141,7 +141,7 @@ public class GetBuildTestFailures {
         if (cnt > 0)
             runningUpdates.addAndGet(cnt);
 
-        chainStatus.initFromContext(tcIgnited, ctx, failRateBranch, injector.getInstance(IStringCompactor.class), false, null, null, -1);
+        chainStatus.initFromContext(tcIgnited, ctx, failRateBranch, injector.getInstance(IStringCompactor.class), false, null, null, -1, null);
 
         res.addChainOnServer(chainStatus);
 
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 e1f68b8..d4d82ae 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
@@ -138,7 +138,7 @@ public class BuildChainProcessor {
      * @param failRateBranch Fail rate branch.
      * @param mode background data update mode.
      * @param sortOption how to sort suites in context, default is by failure rate (most often - first).
-     * @param requireParamVal Require exact parameters value presence in the build.
+     * @param requireParamVal Require exact parameters value presence in the build. Null means no filtering.
      */
     @AutoProfiling
     public FullChainRunCtx loadFullChainContext(
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 a37faaf..b6cfc09 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
@@ -17,12 +17,6 @@
 
 package org.apache.ignite.tcbot.engine.chain;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-import java.util.concurrent.TimeUnit;
-import java.util.stream.Stream;
-import javax.annotation.Nullable;
 import org.apache.ignite.tcbot.common.TcBotConst;
 import org.apache.ignite.tcbot.persistence.IStringCompactor;
 import org.apache.ignite.tcignited.ITeamcityIgnited;
@@ -33,6 +27,14 @@ import org.apache.ignite.tcignited.history.IRunStat;
 import org.apache.ignite.tcignited.history.ISuiteRunHistory;
 import org.apache.ignite.tcservice.model.result.tests.TestOccurrence;
 
+import javax.annotation.Nullable;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Stream;
+
 /**
  * Test occurrence merged from several runs.
  */
@@ -138,6 +140,12 @@ public class TestCompactedMult {
     }
 
     public IRunHistory history(ITeamcityIgnited ignited, @Nullable Integer baseBranchId) {
+         return history(ignited, baseBranchId, null);
+    }
+
+    public IRunHistory history(ITeamcityIgnited ignited,
+                               @Nullable Integer baseBranchId,
+                               @Nullable Map<Integer, Integer> requireParameters) {
         Integer name = testName();
         if (name == null || baseBranchId == null)
             return null;
@@ -147,7 +155,12 @@ public class TestCompactedMult {
         if (suiteRunHist == null)
             return null;
 
-        return suiteRunHist.getTestRunHist(name);
+        IRunHistory testRunHist = suiteRunHist.getTestRunHist(name);
+
+        if (requireParameters == null || requireParameters.isEmpty())
+            return testRunHist;
+
+        return testRunHist.filter(requireParameters);
     }
 
     /**
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 a307f2a..96ca393 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
@@ -165,7 +165,8 @@ public class PrChainsProcessor {
                 runningUpdates.addAndGet(cnt0);
 
             //fail rate reference is always default (master)
-            chainStatus.initFromContext(tcIgnited, ctx, baseBranchForTc, compactor, false, null, null, -1); // don't need for PR
+            chainStatus.initFromContext(tcIgnited, ctx, baseBranchForTc, compactor, false,
+                    null, null, -1, null); // don't need for PR
 
             initJiraAndGitInfo(chainStatus, jiraIntegration, gitHubConnIgnited);
         }
diff --git a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/tracked/TrackedBranchChainsProcessor.java b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/tracked/TrackedBranchChainsProcessor.java
index 0cbab4e..d74daf0 100644
--- a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/tracked/TrackedBranchChainsProcessor.java
+++ b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/tracked/TrackedBranchChainsProcessor.java
@@ -158,7 +158,8 @@ public class TrackedBranchChainsProcessor implements IDetailedStatusForTrackedBr
                 if (cnt > 0)
                     runningUpdates.addAndGet(cnt);
 
-                chainStatus.initFromContext(tcIgnited, ctx, baseBranchTc, compactor, calcTrustedTests, tagSelected, displayMode, maxDurationSec);
+                chainStatus.initFromContext(tcIgnited, ctx, baseBranchTc, compactor, calcTrustedTests, tagSelected,
+                        displayMode, maxDurationSec, requireParamVal);
 
                 return chainStatus;
             })
diff --git a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/ui/DsChainUi.java b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/ui/DsChainUi.java
index 47b7d0b..3eabb2c 100644
--- a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/ui/DsChainUi.java
+++ b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/ui/DsChainUi.java
@@ -159,13 +159,14 @@ public class DsChainUi {
     }
 
     public void initFromContext(ITeamcityIgnited tcIgnited,
-        FullChainRunCtx ctx,
-        @Nullable String baseBranchTc,
-        IStringCompactor compactor,
-        boolean calcTrustedTests,
-        @Nullable String tagSelected,
-        @Nullable DisplayMode displayMode,
-        int maxDurationSec) {
+                                FullChainRunCtx ctx,
+                                @Nullable String baseBranchTc,
+                                IStringCompactor compactor,
+                                boolean calcTrustedTests,
+                                @Nullable String tagSelected,
+                                @Nullable DisplayMode displayMode,
+                                int maxDurationSec,
+                                @Nullable Map<Integer, Integer> requireParamVal) {
         failedTests = 0;
         failedToFinish = 0;
         totalTests = 0;
@@ -188,8 +189,8 @@ public class DsChainUi {
             .filter(suite -> !suite.isComposite())
             .filter(suiteFilter)
             .peek(suite -> {
-                Integer totalTests = suite.totalTests();
-                this.totalTests += totalTests != null ? totalTests : 0;
+                int totalTests = suite.totalTests();
+                this.totalTests += totalTests;
 
                 if (calcTrustedTests)
                     trustedTests += suite.trustedTests(tcIgnited, baseBranchId);
@@ -202,10 +203,15 @@ public class DsChainUi {
                     || dModeToUse == DisplayMode.ShowAllSuites
                     || suite.hasTestToReport(tcIgnited, baseBranchId)
                     || suite.hasLongRunningTest(maxDurationSec)) {
-                    final DsSuiteUi suiteCurStatus = new DsSuiteUi();
-
-                    suiteCurStatus.initFromContext(tcIgnited, suite, baseBranchTc, compactor, true, calcTrustedTests,
-                        maxDurationSec);
+                    final DsSuiteUi suiteCurStatus = new DsSuiteUi()
+                            .initFromContext(tcIgnited,
+                                    suite,
+                                    baseBranchTc,
+                                    compactor,
+                                    true,
+                                    calcTrustedTests,
+                                    maxDurationSec,
+                                    requireParamVal);
 
                     failedTests += suiteCurStatus.failedTests != null ? suiteCurStatus.failedTests : 0;
 
@@ -241,7 +247,7 @@ public class DsChainUi {
                 MultBuildRunCtx suite = pairCtxAndOccur.get1();
                 TestCompactedMult longRunningOccur = pairCtxAndOccur.get2();
 
-                DsTestFailureUi failure = createOrrucForLongRun(tcIgnited, compactor, suite, longRunningOccur, baseBranchTc);
+                DsTestFailureUi failure = createOrrucForLongRun(tcIgnited, compactor, suite, longRunningOccur, baseBranchTc, requireParamVal);
 
                 failure.testName = "[" + suite.suiteName() + "] " + failure.testName; //may be separate field
 
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 64d4a66..e9fa992 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
@@ -17,19 +17,6 @@
 
 package org.apache.ignite.tcbot.engine.ui;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
 import org.apache.ignite.tcbot.common.util.UrlUtil;
 import org.apache.ignite.tcbot.engine.chain.MultBuildRunCtx;
 import org.apache.ignite.tcbot.engine.chain.TestCompactedMult;
@@ -40,6 +27,13 @@ import org.apache.ignite.tcignited.ITeamcityIgnited;
 import org.apache.ignite.tcignited.buildlog.ITestLogCheckResult;
 import org.apache.ignite.tcignited.history.IRunHistory;
 
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
 import static org.apache.ignite.tcbot.common.util.TimeUtil.millisToDurationPrintable;
 import static org.apache.ignite.tcignited.history.RunHistSync.normalizeBranch;
 
@@ -140,14 +134,16 @@ public class DsSuiteUi extends ShortSuiteUi {
      * @param includeTests Include tests - usually {@code true}, but it may be disabled for speeding up VISA collection.
      * @param calcTrustedTests
      * @param maxDurationSec 0 or negative means don't indclude. has no effect if tests not included
+     * @param requireParamVal filtering for runs history based on parameter value selected.
      */
     public DsSuiteUi initFromContext(ITeamcityIgnited tcIgnited,
-        @Nonnull final MultBuildRunCtx suite,
-        @Nullable final String baseBranch,
-        @Nonnull IStringCompactor compactor,
-        boolean includeTests,
-        boolean calcTrustedTests,
-        int maxDurationSec) {
+                                     @Nonnull final MultBuildRunCtx suite,
+                                     @Nullable final String baseBranch,
+                                     @Nonnull IStringCompactor compactor,
+                                     boolean includeTests,
+                                     boolean calcTrustedTests,
+                                     int maxDurationSec,
+                                     @Nullable Map<Integer, Integer> requireParamVal) {
         String failRateNormalizedBranch = normalizeBranch(baseBranch);
         Integer baseBranchId = compactor.getStringIdIfPresent(failRateNormalizedBranch);
         IRunHistory baseBranchHist = suite.history(tcIgnited, baseBranchId);
@@ -189,18 +185,22 @@ public class DsSuiteUi extends ShortSuiteUi {
             tests.sort(Comparator.comparing(function).reversed());
 
             tests.forEach(occurrence -> {
-                final DsTestFailureUi failure = new DsTestFailureUi();
-
-                failure.initFromOccurrence(occurrence, tcIgnited, suite.projectId(),
-                    suite.branchName(), baseBranch, baseBranchId);
-                failure.initStat(occurrence, buildTypeIdId, tcIgnited, baseBranchId, curBranchId);
+                DsTestFailureUi failure = new DsTestFailureUi()
+                        .initFromOccurrence(occurrence,
+                                tcIgnited,
+                                suite.projectId(),
+                                suite.branchName(),
+                                baseBranch,
+                                baseBranchId,
+                                curBranchId,
+                                requireParamVal);
 
                 testFailures.add(failure);
             });
 
             suite.getTopLongRunning().forEach(occurrence -> {
                 if (occurrence.getAvgDurationMs() > TimeUnit.SECONDS.toMillis(15)) {
-                    final DsTestFailureUi failure = createOrrucForLongRun(tcIgnited, compactor, suite, occurrence, baseBranch);
+                    final DsTestFailureUi failure = createOrrucForLongRun(tcIgnited, compactor, suite, occurrence, baseBranch, requireParamVal);
 
                     topLongRunning.add(failure);
                 }
@@ -303,21 +303,18 @@ public class DsSuiteUi extends ShortSuiteUi {
         return failure;
     }
 
-    @Nonnull public static DsTestFailureUi createOrrucForLongRun(ITeamcityIgnited tcIgnited,
-        IStringCompactor compactor, @Nonnull MultBuildRunCtx suite,
-        final TestCompactedMult occurrence,
-        @Nullable final String failRateBranch) {
-        final DsTestFailureUi failure = new DsTestFailureUi();
-
+    @Nonnull
+    public static DsTestFailureUi createOrrucForLongRun(ITeamcityIgnited tcIgnited,
+                                                        IStringCompactor compactor,
+                                                        @Nonnull MultBuildRunCtx suite,
+                                                        TestCompactedMult occurrence,
+                                                        @Nullable String failRateBranch,
+                                                        @Nullable Map<Integer, Integer> requireParamVal) {
         Integer baseBranchId = compactor.getStringIdIfPresent(normalizeBranch(failRateBranch));
-        Integer buildTypeIdId = suite.buildTypeIdId();
-        failure.initFromOccurrence(occurrence, tcIgnited, suite.projectId(), suite.branchName(),
-            failRateBranch, baseBranchId);
+        Integer curBranchId = compactor.getStringIdIfPresent(normalizeBranch(suite.branchName()));
 
-        failure.initStat(occurrence, buildTypeIdId, tcIgnited,  baseBranchId,
-            compactor.getStringIdIfPresent(normalizeBranch(suite.branchName())));
-
-        return failure;
+        return new DsTestFailureUi().initFromOccurrence(occurrence, tcIgnited, suite.projectId(), suite.branchName(),
+                failRateBranch, baseBranchId, curBranchId, requireParamVal);
     }
 
     public void findFailureAndAddWarning(String testName, ITestLogCheckResult logCheckRes) {
diff --git a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/ui/DsTestFailureUi.java b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/ui/DsTestFailureUi.java
index a4e0458..333db5b 100644
--- a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/ui/DsTestFailureUi.java
+++ b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/ui/DsTestFailureUi.java
@@ -19,6 +19,7 @@ package org.apache.ignite.tcbot.engine.ui;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -85,13 +86,17 @@ public class DsTestFailureUi extends ShortTestFailureUi {
      * @param branchName current branch name.
      * @param baseBranchName base branch name (e.g. master), without normalization.
      * @param baseBranchId Normalized base branch ID (from compactor).
+     * @param curBranchId
+     * @param requireParameters
      */
-    public void initFromOccurrence(@Nonnull final TestCompactedMult failure,
-        @Nonnull final ITeamcityIgnited tcIgn,
-        @Nullable final String projectId,
-        @Nullable final String branchName,
-        @Nullable final String baseBranchName,
-        Integer baseBranchId) {
+    public DsTestFailureUi initFromOccurrence(@Nonnull final TestCompactedMult failure,
+                                              @Nonnull final ITeamcityIgnited tcIgn,
+                                              @Nullable final String projectId,
+                                              @Nullable final String branchName,
+                                              @Nullable final String baseBranchName,
+                                              Integer baseBranchId,
+                                              @Nullable Integer curBranchId,
+                                              @Nullable Map<Integer, Integer> requireParameters) {
         success = !failure.isFailedButNotMuted();
 
         investigated = failure.isInvestigated();
@@ -121,12 +126,17 @@ public class DsTestFailureUi extends ShortTestFailureUi {
             .map(ITest::getTestId)
             .filter(Objects::nonNull)
             .forEach(testNameId -> {
-                if (webUrl == null && testNameId != null)
+                if (webUrl == null)
                     webUrl = buildWebLink(tcIgn, testNameId, projectId, branchName);
 
-                if (webUrlBaseBranch == null && testNameId != null)
+                if (webUrlBaseBranch == null)
                     webUrlBaseBranch = buildWebLink(tcIgn, testNameId, projectId, baseBranchName);
             });
+
+
+        initStat(failure, tcIgn, baseBranchId, curBranchId, requireParameters);
+
+        return this;
     }
 
 
@@ -174,21 +184,23 @@ public class DsTestFailureUi extends ShortTestFailureUi {
 
     /**
      * @param occurrence
-     * @param buildTypeIdId
      * @param tcIgnited TC service as Run stat supplier.
      * @param baseBranchId Base branch: Fail rate and flakyness detection normalized branch.
      * @param curBranchNormalized Cur branch normalized.
+     * @param requireParameters
      */
-    public void initStat(TestCompactedMult occurrence, Integer buildTypeIdId, ITeamcityIgnited tcIgnited,
-        @Nullable Integer baseBranchId,
-        @Nullable Integer curBranchNormalized) {
-        final IRunHistory stat = occurrence.history(tcIgnited, baseBranchId);
+    public void initStat(TestCompactedMult occurrence,
+                         ITeamcityIgnited tcIgnited,
+                         @Nullable Integer baseBranchId,
+                         @Nullable Integer curBranchNormalized,
+                         @Nullable Map<Integer, Integer> requireParameters) {
+        final IRunHistory stat = occurrence.history(tcIgnited, baseBranchId, requireParameters);
         histBaseBranch.init(stat);
 
         IRunHistory statForProblemsDetection;
 
         if (!Objects.equals(curBranchNormalized, baseBranchId)) {
-            statForProblemsDetection = occurrence.history(tcIgnited, curBranchNormalized);
+            statForProblemsDetection = occurrence.history(tcIgnited, curBranchNormalized, requireParameters);
 
             if (statForProblemsDetection != null) {
                 histCurBranch = new DsTestHistoryUi();
@@ -205,6 +217,10 @@ public class DsTestFailureUi extends ShortTestFailureUi {
 
             if (statForProblemsDetection.detectTemplate(EventTemplates.newContributedTestFailure) != null)
                 problemRef = new DsProblemRef("Recently contributed test failure");
+
+            if (stat.isFlaky()
+                    && statForProblemsDetection.detectTemplate(EventTemplates.newFailureForFlakyTest) != null)
+                problemRef = new DsProblemRef("New failure of flaky test");
         }
     }
 
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 68e80cb..6515806 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
@@ -20,6 +20,7 @@ package org.apache.ignite.ci.teamcity.ignited.runhist;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Objects;
 import com.google.common.base.Preconditions;
+import org.apache.ignite.ci.teamcity.ignited.buildtype.ParametersCompacted;
 import org.apache.ignite.tcbot.persistence.Persisted;
 import org.apache.ignite.tcignited.history.ChangesState;
 
@@ -53,6 +54,8 @@ public class Invocation {
     /** Additional (important) build Parameters, which can be used for filtering. */
     @Nullable private Map<Integer, Integer> parms;
 
+    private ParametersCompacted parameters = new ParametersCompacted();
+
     /**
      * Creates invocation.
      * @param buildId Build id.
@@ -132,4 +135,8 @@ public class Invocation {
 
         return this;
     }
+
+    public boolean containsParameters(Map<Integer, Integer> requireParameters) {
+        return false;
+    }
 }
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 3b86767..c93398b 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
@@ -18,20 +18,23 @@
 package org.apache.ignite.ci.teamcity.ignited.runhist;
 
 import com.google.common.base.MoreObjects;
-import java.util.List;
-import java.util.Objects;
-import java.util.stream.Collectors;
-import javax.annotation.Nullable;
 import org.apache.ignite.tcbot.common.TcBotConst;
 import org.apache.ignite.tcignited.history.ChangesState;
 import org.apache.ignite.tcignited.history.IEventTemplate;
 import org.apache.ignite.tcignited.history.IRunHistory;
 import org.apache.ignite.tcignited.history.RunStatus;
 
+import javax.annotation.Nullable;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
 /**
  *
  */
-public class RunHistCompacted implements  IRunHistory {
+public class RunHistCompacted implements IRunHistory {
     /** Data. */
     private InvocationData data = new InvocationData();
 
@@ -98,6 +101,21 @@ public class RunHistCompacted implements  IRunHistory {
         return data.criticalFailuresCount();
     }
 
+    @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;
+    }
+
     private static int[] concatArr(int[] arr1, int[] arr2) {
         int[] arr1and2 = new int[arr1.length + arr2.length];
         System.arraycopy(arr1, 0, arr1and2, 0, arr1.length);
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 cfd3ce4..a477a17 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
@@ -18,6 +18,7 @@ package org.apache.ignite.tcignited.history;
 
 import javax.annotation.Nullable;
 import java.util.List;
+import java.util.Map;
 
 /**
  * Test or Build run statistics.
@@ -58,4 +59,6 @@ public interface IRunHistory extends IRunStat, IRunHistSummary {
 
         return 1.0f * getFailuresCount() / runs;
     }
+
+    IRunHistory filter(Map<Integer, Integer> requireParameters);
 }