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 3289df7  Current tracked branch: Option added to show tests longer 
that N seconds
3289df7 is described below

commit 3289df74676b819fd9357d001709590e1189f2a1
Author: Dmitriy Pavlov <[email protected]>
AuthorDate: Fri Jul 26 20:15:05 2019 +0300

    Current tracked branch: Option added to show tests longer that N seconds
---
 .../ignite/ci/tcbot/issue/IssueDetector.java       |  6 ++-
 .../org/apache/ignite/ci/web/model/Version.java    |  2 +-
 .../ignite/ci/web/rest/GetChainResultsAsHtml.java  |  2 +-
 .../ci/web/rest/build/GetBuildTestFailures.java    |  2 +-
 .../rest/tracked/GetTrackedBranchTestResults.java  | 31 ++++++++-----
 ignite-tc-helper-web/src/main/webapp/current.html  | 54 ++++++++++++++--------
 .../src/main/webapp/js/testfails-2.2.js            |  4 +-
 .../ci/tcbot/chain/TrackedBranchProcessorTest.java |  3 +-
 .../ignite/tcbot/engine/chain/MultBuildRunCtx.java |  7 +++
 .../tcbot/engine/chain/TestCompactedMult.java      |  7 +++
 .../ignite/tcbot/engine/pr/PrChainsProcessor.java  |  4 +-
 .../tracked/IDetailedStatusForTrackedBranch.java   |  3 +-
 .../tracked/TrackedBranchChainsProcessor.java      |  5 +-
 .../apache/ignite/tcbot/engine/ui/DsChainUi.java   | 12 +++--
 .../apache/ignite/tcbot/engine/ui/DsSuiteUi.java   | 18 +++++---
 15 files changed, 108 insertions(+), 52 deletions(-)

diff --git 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/issue/IssueDetector.java
 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/issue/IssueDetector.java
index 7d6ebbb..d65449d 100644
--- 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/issue/IssueDetector.java
+++ 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/issue/IssueDetector.java
@@ -579,7 +579,8 @@ public class IssueDetector {
             false,
             null,
             DisplayMode.None,
-            null);
+            null,
+            -1);
 
         DsSummaryUi failures =
             tbProc.getTrackedBranchTestFailures(brachName,
@@ -590,7 +591,8 @@ public class IssueDetector {
                 false,
                 null,
                 DisplayMode.OnlyFailures,
-                null);
+                null,
+                -1);
 
         String issRes = registerIssuesAndNotifyLater(failures, 
backgroundOpsCreds);
 
diff --git 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/Version.java
 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/Version.java
index 79310e2..96d838f 100644
--- 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/Version.java
+++ 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/Version.java
@@ -28,7 +28,7 @@ package org.apache.ignite.ci.web.model;
     public static final String GITHUB_REF = 
"https://github.com/apache/ignite-teamcity-bot";;
 
     /** TC Bot Version. */
-    public static final String VERSION = "20190725";
+    public static final String VERSION = "20190726";
 
     /** Java version, where Web App is running. */
     public String javaVer;
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 6fc3b53..16cad16 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
@@ -91,7 +91,7 @@ public class GetChainResultsAsHtml {
         status.chainName = ctx.suiteName();
 
         IStringCompactor c = injector.getInstance(IStringCompactor.class);
-        status.initFromContext(tcIgn, ctx, failRateBranch, c, false, null, 
null);
+        status.initFromContext(tcIgn, ctx, failRateBranch, c, false, null, 
null, -1);
 
         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 0960b68..c016bf3 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
@@ -140,7 +140,7 @@ public class GetBuildTestFailures {
         if (cnt > 0)
             runningUpdates.addAndGet(cnt);
 
-        chainStatus.initFromContext(tcIgnited, ctx, failRateBranch, 
injector.getInstance(IStringCompactor.class), false, null, null);
+        chainStatus.initFromContext(tcIgnited, ctx, failRateBranch, 
injector.getInstance(IStringCompactor.class), false, null, null, -1);
 
         res.addChainOnServer(chainStatus);
 
diff --git 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/tracked/GetTrackedBranchTestResults.java
 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/tracked/GetTrackedBranchTestResults.java
index 474d40c..0458eb2 100644
--- 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/tracked/GetTrackedBranchTestResults.java
+++ 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/tracked/GetTrackedBranchTestResults.java
@@ -69,9 +69,10 @@ public class GetTrackedBranchTestResults {
         @Nullable @QueryParam("tagSelected") String tagSelected,
         @Nullable @QueryParam("displayMode") String displayMode,
         @Nullable @QueryParam("sortOption") String sortOption,
-        @Nullable @QueryParam("count") Integer mergeCnt) {
+        @Nullable @QueryParam("count") Integer mergeCnt,
+        @Nullable @QueryParam("showTestLongerThan") Integer 
showTestLongerThan) {
         return new 
UpdateInfo().copyFrom(getTestFailsResultsNoSync(branchOrNull, checkAllLogs, 
trustedTests, tagSelected,
-            displayMode, sortOption, mergeCnt));
+            displayMode, sortOption, mergeCnt, showTestLongerThan));
     }
 
     @GET
@@ -83,8 +84,9 @@ public class GetTrackedBranchTestResults {
         @Nullable @QueryParam("tagSelected") String tagSelected,
         @Nullable @QueryParam("displayMode") String displayMode,
         @Nullable @QueryParam("sortOption") String sortOption,
-        @Nullable @QueryParam("count") Integer mergeCnt) {
-        return getTestFailsResultsNoSync(branchOrNull, checkAllLogs, 
trustedTests, tagSelected, displayMode, sortOption, mergeCnt).toString();
+        @Nullable @QueryParam("count") Integer mergeCnt,
+        @Nullable @QueryParam("showTestLongerThan") Integer 
showTestLongerThan) {
+        return getTestFailsResultsNoSync(branchOrNull, checkAllLogs, 
trustedTests, tagSelected, displayMode, sortOption, mergeCnt, 
showTestLongerThan).toString();
     }
 
     @GET
@@ -96,8 +98,9 @@ public class GetTrackedBranchTestResults {
         @Nullable @QueryParam("tagSelected") String tagSelected,
         @Nullable @QueryParam("displayMode") String displayMode,
         @Nullable @QueryParam("sortOption") String sortOption,
-        @Nullable @QueryParam("count") Integer mergeCnt) {
-        return latestBuildResults(branch, checkAllLogs, trustedTests, 
tagSelected, SyncMode.NONE, displayMode, sortOption, mergeCnt);
+        @Nullable @QueryParam("count") Integer mergeCnt,
+        @Nullable @QueryParam("showTestLongerThan") Integer 
showTestLongerThan) {
+        return latestBuildResults(branch, checkAllLogs, trustedTests, 
tagSelected, SyncMode.NONE, displayMode, sortOption, mergeCnt, 
showTestLongerThan);
     }
 
     @GET
@@ -110,8 +113,9 @@ public class GetTrackedBranchTestResults {
         @Nullable @QueryParam("tagSelected") String tagSelected,
         @Nullable @QueryParam("displayMode") String displayMode,
         @Nullable @QueryParam("sortOption") String sortOption,
-        @Nullable @QueryParam("count") Integer mergeCnt) {
-        return latestBuildResults(branch, checkAllLogs, trustedTests, 
tagSelected, SyncMode.RELOAD_QUEUED, displayMode, sortOption, mergeCnt);
+        @Nullable @QueryParam("count") Integer mergeCnt,
+        @Nullable @QueryParam("showTestLongerThan") Integer 
showTestLongerThan) {
+        return latestBuildResults(branch, checkAllLogs, trustedTests, 
tagSelected, SyncMode.RELOAD_QUEUED, displayMode, sortOption, mergeCnt, 
showTestLongerThan);
     }
 
     @NotNull private DsSummaryUi latestBuildResults(
@@ -122,18 +126,22 @@ public class GetTrackedBranchTestResults {
         @Nonnull SyncMode mode,
         @Nullable String displayMode,
         @Nullable String sortOption,
-        @Nullable Integer mergeCnt) {
+        @Nullable Integer mergeCnt,
+        @Nullable Integer showTestLongerThan) {
         ITcBotUserCreds creds = ITcBotUserCreds.get(req);
 
         Injector injector = CtxListener.getInjector(ctx);
 
         int actualMergeBuilds = (mergeCnt == null || mergeCnt < 1) ? 1 : 
mergeCnt;
 
+        int maxDurationSec = (showTestLongerThan == null || showTestLongerThan 
< 1) ? 0 : showTestLongerThan;
+
         return injector.getInstance(IDetailedStatusForTrackedBranch.class)
             .getTrackedBranchTestFailures(branch, checkAllLogs, 
actualMergeBuilds, creds, mode,
                 Boolean.TRUE.equals(trustedTests), tagSelected,
                 DisplayMode.parseStringValue(displayMode),
-                SortOption.parseStringValue(sortOption));
+                SortOption.parseStringValue(sortOption),
+                maxDurationSec);
     }
 
     @GET
@@ -171,7 +179,8 @@ public class GetTrackedBranchTestResults {
         Injector injector = CtxListener.getInjector(ctx);
 
         return injector.getInstance(TrackedBranchChainsProcessor.class)
-            .getTrackedBranchTestFailures(branchOpt, checkAllLogs, cntLimit, 
creds, mode, false, null, DisplayMode.OnlyFailures, null);
+            .getTrackedBranchTestFailures(branchOpt, checkAllLogs, cntLimit, 
creds, mode,
+                false, null, DisplayMode.OnlyFailures, null, -1);
     }
 
     /**
diff --git a/ignite-tc-helper-web/src/main/webapp/current.html 
b/ignite-tc-helper-web/src/main/webapp/current.html
index 221009b..43dcb39 100644
--- a/ignite-tc-helper-web/src/main/webapp/current.html
+++ b/ignite-tc-helper-web/src/main/webapp/current.html
@@ -38,11 +38,11 @@ function genLink() {
 }
 
 function showQueryForm() {
-    let min,max;
+    let min, max;
 
     let minFailRate = findGetParameter("minFailRate");
     if (minFailRate != null) {
-        min = parseInt(minFailRate) ;
+        min = parseInt(minFailRate);
     } else {
         min = 0;
     }
@@ -51,7 +51,7 @@ function showQueryForm() {
     if (maxFailRate != null) {
         max = parseInt(maxFailRate);
     } else {
-        max=100;
+        max = 100;
     }
 
 
@@ -72,6 +72,11 @@ function showQueryForm() {
             absMinFailRate: 0,
             absMaxFailRate: 100,
             failRateRange: [min, max],
+
+            showTestLongerThan: '',
+
+            tagForHistorySelected: '',
+            tagsForHistoryPresent: []
         },
         methods: {
             formChanged: function () {
@@ -105,19 +110,18 @@ function showQueryForm() {
         gVue.$data.count = count;
     }
 
-    let trustedTests = findGetParameter("trustedTests");
-    if (trustedTests != null) {
-        gVue.$data.trustedTests = trustedTests==="true";
-    }
+    gVue.$data.trustedTests = findGetParameter("trustedTests") === "true";
+    gVue.$data.checkAllLogs = findGetParameter("checkAllLogs") === "true";
+    gVue.$data.hideFlakyFailures = findGetParameter("hideFlakyFailures") === 
"true";
 
-    let checkAllLogs = findGetParameter("checkAllLogs");
-    if (checkAllLogs != null) {
-        gVue.$data.checkAllLogs = checkAllLogs==="true";
-    }
+    let showTestLongerThan = findGetParameter("showTestLongerThan");
+    if (showTestLongerThan != null)
+        gVue.$data.showTestLongerThan = showTestLongerThan;
 
-    var hideFlakyFailuresP = findGetParameter("hideFlakyFailures");
-    if (hideFlakyFailuresP != null) {
-        gVue.$data.hideFlakyFailures = hideFlakyFailuresP==="true";
+    let tagForHistorySelected = findGetParameter("tagForHistorySelected");
+    if (tagForHistorySelected != null) {
+        gVue.$data.tagsForHistoryPresent.push(tagForHistorySelected);
+        gVue.$data.tagForHistorySelected = tagForHistorySelected;
     }
 
     genLink();
@@ -173,6 +177,12 @@ function parmsForRest() {
 
     curReqParms += "&hideFlakyFailures=" + gVue.$data.hideFlakyFailures;
 
+    if (gVue.$data.tagForHistorySelected != null)
+        curReqParms += "&tagForHistorySelected=" + 
gVue.$data.tagForHistorySelected;
+
+    if (gVue.$data.showTestLongerThan != null)
+        curReqParms += "&showTestLongerThan=" + gVue.$data.showTestLongerThan;
+
     return curReqParms;
 }
 
@@ -257,6 +267,7 @@ function loadPartialData() {
 
 function showData(result) {
     let setOfTags = new Set(gVue.$data.tagsPresent);
+    let setOfHistTags = new Set(gVue.$data.tagForHistorySelected);
     for (let i = 0; i < result.servers.length; i++) {
         let chain = result.servers[i];
 
@@ -268,12 +279,14 @@ function showData(result) {
                     const tag = suite.tags[k];
 
                     setOfTags.add(tag);
+                    setOfHistTags.add(tag);
                 }
             }
         }
     }
 
     gVue.$data.tagsPresent = Array.from(setOfTags);
+    gVue.$data.tagsForHistoryPresent = Array.from(setOfHistTags);
 
     //var txtUrl = "rest/tracked/results/txt" + parmsForRest();
 
@@ -317,12 +330,15 @@ function showData(result) {
                             <option value="SuiteDuration">Suite 
Duration</option>
                         </select>
                         <br>
-                        <span>Merge Builds: </span> <input 
v-model.number="count" type="number" @change="formChanged">
+                        <span>Merge Builds: </span>
+                        <input v-model.number="count" type="number" 
@change="formChanged">
                         &nbsp;&nbsp;<span title="Show trusted tests 
count">Trusted tests: </span>
                         <input type="checkbox" v-model="trustedTests" 
@change="formChanged">
                         &nbsp;&nbsp;<span title="Download and parse all 
logs">Check logs: </span>
                         <input type="checkbox" v-model="checkAllLogs" 
@change="formChanged">
-
+                        <br>
+                        <span>Show test longer than, seconds: </span>
+                        <input v-model.number="showTestLongerThan" 
type="number" @change="formChanged">
                     </td>
 
                     <td style="width: 50%">
@@ -350,7 +366,8 @@ function showData(result) {
                                                     hide-details
                                                     single-line
                                                     type="number"
-                                                    style="width: 
60px"></v-text-field>
+                                                    style="width: 60px"
+                                                    
@change="formChanged"></v-text-field>
 
                                             <span>Max failure rate: </span>
                                             <v-text-field
@@ -359,7 +376,8 @@ function showData(result) {
                                                     hide-details
                                                     single-line
                                                     type="number"
-                                                    style="width: 
60px"></v-text-field>
+                                                    style="width: 60px"
+                                                    
@change="formChanged"></v-text-field>
                                         </template>
                                         <template v-slot:append>
 
diff --git a/ignite-tc-helper-web/src/main/webapp/js/testfails-2.2.js 
b/ignite-tc-helper-web/src/main/webapp/js/testfails-2.2.js
index bcd935c..d9772fd 100644
--- a/ignite-tc-helper-web/src/main/webapp/js/testfails-2.2.js
+++ b/ignite-tc-helper-web/src/main/webapp/js/testfails-2.2.js
@@ -949,7 +949,9 @@ function showTestFailData(testFail, isFailureShown, 
settings) {
     }
 
 
-    if (!isFailureShown && isDefinedAndFilled(testFail.durationPrintable))
+    let showDuration = (isDefinedAndFilled(testFail.success) && 
testFail.success === true) || !isFailureShown;
+
+    if (showDuration && isDefinedAndFilled(testFail.durationPrintable))
         res += " duration " + testFail.durationPrintable;
 
     if (bold)
diff --git 
a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/TrackedBranchProcessorTest.java
 
b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/TrackedBranchProcessorTest.java
index 499337a..c1f83fc 100644
--- 
a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/TrackedBranchProcessorTest.java
+++ 
b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/TrackedBranchProcessorTest.java
@@ -121,7 +121,8 @@ public class TrackedBranchProcessorTest {
             false,
             1,
             mock, SyncMode.RELOAD_QUEUED,
-            false, null, DisplayMode.OnlyFailures, null);
+            false, null, DisplayMode.OnlyFailures, null,
+            -1);
 
         Gson gson = new GsonBuilder().setPrettyPrinting().create();
         System.out.println(gson.toJson(failures));
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 2afa07a..8218ed0 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
@@ -707,4 +707,11 @@ public class MultBuildRunCtx implements ISuiteResults {
     public boolean hasTestToReport(ITeamcityIgnited tcIgnited, Integer 
baseBranchId) {
         return !getFilteredTests(test -> test.includeIntoReport(tcIgnited, 
baseBranchId)).isEmpty();
     }
+
+    public boolean hasLongRunningTest(int maxSec) {
+        if (maxSec < 1)
+            return false;
+
+        return !getFilteredTests(test -> 
test.hasLongRunningTest(maxSec)).isEmpty();
+    }
 }
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 f54a509..3c2cab5 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
@@ -181,4 +181,11 @@ public class TestCompactedMult {
 
         return false;
     }
+
+    public boolean hasLongRunningTest(int sec) {
+        if (sec < 1)
+            return false;
+
+        return getAvgDurationMs() > TimeUnit.SECONDS.toMillis(sec);
+    }
 }
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 84ed0f1..740f5bc 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,7 @@ public class PrChainsProcessor {
                 runningUpdates.addAndGet(cnt0);
 
             //fail rate reference is always default (master)
-            chainStatus.initFromContext(tcIgnited, ctx, baseBranchForTc, 
compactor, false, null, null); // don't need for PR
+            chainStatus.initFromContext(tcIgnited, ctx, baseBranchForTc, 
compactor, false, null, null, -1); // don't need for PR
 
             initJiraAndGitInfo(chainStatus, jiraIntegration, 
gitHubConnIgnited);
         }
@@ -329,7 +329,7 @@ public class PrChainsProcessor {
                     DsSuiteUi suiteUi = new DsSuiteUi();
                     suiteUi.testFailures = failures;
 
-                    suiteUi.initFromContext(tcIgnited, ctx, baseBranch, 
compactor, false, false);
+                    suiteUi.initFromContext(tcIgnited, ctx, baseBranch, 
compactor, false, false, -1);
 
                     return suiteUi;
                 }
diff --git 
a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/tracked/IDetailedStatusForTrackedBranch.java
 
b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/tracked/IDetailedStatusForTrackedBranch.java
index 851ba38..5621432 100644
--- 
a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/tracked/IDetailedStatusForTrackedBranch.java
+++ 
b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/tracked/IDetailedStatusForTrackedBranch.java
@@ -36,6 +36,7 @@ public interface IDetailedStatusForTrackedBranch {
      * @param tagSelected Selected tag based filter. If null or empty all data 
is returned.
      * @param displayMode Suites and tests display mode. Default - failures 
only.
      * @param sortOption Sort mode
+     * @param maxDurationSec Show test as failed if duration is greater than 
provided seconds count.
      */
     public DsSummaryUi getTrackedBranchTestFailures(
         @Nullable String branch,
@@ -46,7 +47,7 @@ public interface IDetailedStatusForTrackedBranch {
         boolean calcTrustedTests,
         @Nullable String tagSelected,
         @Nullable DisplayMode displayMode,
-        @Nullable SortOption sortOption);
+        @Nullable SortOption sortOption, int maxDurationSec);
 
     //  * @param baseTrackedBranch Branch tracked branch in Bot, has a 
priority if both TC & Bot branches (baseBranchForTcParm) present.
 }
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 8777df3..7bf1aba 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
@@ -70,7 +70,8 @@ public class TrackedBranchChainsProcessor implements 
IDetailedStatusForTrackedBr
         boolean calcTrustedTests,
         @Nullable String tagSelected,
         @Nullable DisplayMode displayMode,
-        @Nullable SortOption sortOption) {
+        @Nullable SortOption sortOption,
+        int maxDurationSec) {
         final DsSummaryUi res = new DsSummaryUi();
         final AtomicInteger runningUpdates = new AtomicInteger();
 
@@ -126,7 +127,7 @@ public class TrackedBranchChainsProcessor implements 
IDetailedStatusForTrackedBr
                 if (cnt > 0)
                     runningUpdates.addAndGet(cnt);
 
-                chainStatus.initFromContext(tcIgnited, ctx, baseBranchTc, 
compactor, calcTrustedTests, tagSelected, displayMode);
+                chainStatus.initFromContext(tcIgnited, ctx, baseBranchTc, 
compactor, calcTrustedTests, tagSelected, displayMode, maxDurationSec);
 
                 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 2b62ffd..14a1c06 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
@@ -165,7 +165,8 @@ public class DsChainUi {
         IStringCompactor compactor,
         boolean calcTrustedTests,
         @Nullable String tagSelected,
-        @Nullable DisplayMode displayMode) {
+        @Nullable DisplayMode displayMode,
+        int maxDurationSec) {
         failedTests = 0;
         failedToFinish = 0;
         totalTests = 0;
@@ -198,11 +199,14 @@ public class DsChainUi {
                 if (dModeToUse == DisplayMode.None)
                     return; //don't convert any suite for UI
 
-                if (suite.isFailed() || dModeToUse == DisplayMode.ShowAllSuites
-                    || suite.hasTestToReport(tcIgnited, baseBranchId)) {
+                if (suite.isFailed()
+                    || dModeToUse == DisplayMode.ShowAllSuites
+                    || suite.hasTestToReport(tcIgnited, baseBranchId)
+                    || suite.hasLongRunningTest(maxDurationSec)) {
                     final DsSuiteUi suiteCurStatus = new DsSuiteUi();
 
-                    suiteCurStatus.initFromContext(tcIgnited, suite, 
baseBranchTc, compactor, true, calcTrustedTests);
+                    suiteCurStatus.initFromContext(tcIgnited, suite, 
baseBranchTc, compactor, true, calcTrustedTests,
+                        maxDurationSec);
 
                     failedTests += suiteCurStatus.failedTests != null ? 
suiteCurStatus.failedTests : 0;
 
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 58dac7e..0f7b059 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
@@ -30,7 +30,6 @@ import java.util.function.Function;
 import java.util.stream.Collectors;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
-import org.apache.ignite.tcbot.common.TcBotConst;
 import org.apache.ignite.tcbot.common.util.UrlUtil;
 import org.apache.ignite.tcbot.engine.chain.MultBuildRunCtx;
 import org.apache.ignite.tcbot.engine.chain.TestCompactedMult;
@@ -156,13 +155,15 @@ public class DsSuiteUi extends DsHistoryStatUi {
      * @param compactor String Compactor.
      * @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
      */
     public DsSuiteUi initFromContext(ITeamcityIgnited tcIgnited,
-                                     @Nonnull final MultBuildRunCtx suite,
-                                     @Nullable final String baseBranch,
-                                     @Nonnull IStringCompactor compactor,
-                                     boolean includeTests,
-                                     boolean calcTrustedTests) {
+        @Nonnull final MultBuildRunCtx suite,
+        @Nullable final String baseBranch,
+        @Nonnull IStringCompactor compactor,
+        boolean includeTests,
+        boolean calcTrustedTests,
+        int maxDurationSec) {
 
         name = suite.suiteName();
 
@@ -194,7 +195,9 @@ public class DsSuiteUi extends DsHistoryStatUi {
 
         Integer buildTypeIdId = suite.buildTypeIdId();
         if (includeTests) {
-            List<TestCompactedMult> tests = suite.getFilteredTests(test -> 
test.includeIntoReport(tcIgnited, baseBranchId));
+            List<TestCompactedMult> tests = suite.getFilteredTests(test ->
+                test.hasLongRunningTest(maxDurationSec)
+                    || test.includeIntoReport(tcIgnited, baseBranchId) );
 
             Function<TestCompactedMult, Float> function = testCompactedMult -> 
{
                 IRunHistory res = testCompactedMult.history(tcIgnited, 
baseBranchId);
@@ -206,6 +209,7 @@ public class DsSuiteUi extends DsHistoryStatUi {
 
             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);

Reply via email to