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/12 11:31:20 UTC

[ignite-teamcity-bot] branch upd-cntrs updated (d7dba3a -> 25bda08)

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

dpavlov pushed a change to branch upd-cntrs
in repository https://gitbox.apache.org/repos/asf/ignite-teamcity-bot.git.


    from d7dba3a  Counters for tracking updates for particular branches implementation started
     add 38e3465  Expand suiteId field - Fixes #149.
     add 230935d  Resize suite id field (#150)
     add 9c93dd7  YAGNI
     new a661255  Merge branch 'master' into upd-cntrs
     new 25bda08  Counters for tracking updates for particular branches implementation

The 2 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.


Summary of changes:
 .../ignite/ci/web/rest/GetChainResultsAsHtml.java  | 339 ---------------------
 ...es.java => GetSingleBuildTestFailuresRest.java} |  85 ++----
 ignite-tc-helper-web/src/main/webapp/all.html      |  21 +-
 ignite-tc-helper-web/src/main/webapp/build.html    |  33 +-
 ignite-tc-helper-web/src/main/webapp/prs.html      |   4 +-
 ignite-tc-helper-web/src/main/webapp/tracked.html  | 181 -----------
 .../ignite/tcbot/engine/TcBotEngineModule.java     |   3 +-
 .../engine/build/SingleBuildResultsService.java    | 100 ++++++
 .../ignite/tcbot/engine/chain/FullChainRunCtx.java |  10 -
 .../ignite/tcbot/engine/chain/MultBuildRunCtx.java |   4 -
 .../tcbot/engine/chain/SingleBuildRunCtx.java      |   4 -
 .../apache/ignite/tcbot/engine/ui/DsSummaryUi.java |   7 -
 .../apache/ignite/tcbot/engine/ui/UpdateInfo.java  |   9 +-
 13 files changed, 157 insertions(+), 643 deletions(-)
 delete mode 100644 ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/GetChainResultsAsHtml.java
 rename ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/build/{GetBuildTestFailures.java => GetSingleBuildTestFailuresRest.java} (69%)
 delete mode 100644 ignite-tc-helper-web/src/main/webapp/tracked.html
 create mode 100644 tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/build/SingleBuildResultsService.java


[ignite-teamcity-bot] 01/02: Merge branch 'master' into upd-cntrs

Posted by dp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

dpavlov pushed a commit to branch upd-cntrs
in repository https://gitbox.apache.org/repos/asf/ignite-teamcity-bot.git

commit a661255c79bdeba5a225c8485bcfa1f82c8a07b5
Merge: d7dba3a 9c93dd7
Author: Dmitriy Pavlov <dp...@apache.org>
AuthorDate: Mon Aug 12 14:06:41 2019 +0300

    Merge branch 'master' into upd-cntrs

 .../ignite/ci/web/rest/GetChainResultsAsHtml.java  | 339 ---------------------
 ignite-tc-helper-web/src/main/webapp/prs.html      |   4 +-
 ignite-tc-helper-web/src/main/webapp/tracked.html  | 181 -----------
 3 files changed, 2 insertions(+), 522 deletions(-)


[ignite-teamcity-bot] 02/02: Counters for tracking updates for particular branches implementation

Posted by dp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

dpavlov pushed a commit to branch upd-cntrs
in repository https://gitbox.apache.org/repos/asf/ignite-teamcity-bot.git

commit 25bda08ce436ec2f0328329f405af5d706a61b29
Author: Dmitriy Pavlov <dp...@apache.org>
AuthorDate: Mon Aug 12 14:31:11 2019 +0300

    Counters for tracking updates for particular branches implementation
---
 ...es.java => GetSingleBuildTestFailuresRest.java} |  85 ++++++------------
 ignite-tc-helper-web/src/main/webapp/all.html      |  21 ++---
 ignite-tc-helper-web/src/main/webapp/build.html    |  33 +++----
 .../ignite/tcbot/engine/TcBotEngineModule.java     |   3 +-
 .../engine/build/SingleBuildResultsService.java    | 100 +++++++++++++++++++++
 .../ignite/tcbot/engine/chain/FullChainRunCtx.java |  10 ---
 .../ignite/tcbot/engine/chain/MultBuildRunCtx.java |   4 -
 .../tcbot/engine/chain/SingleBuildRunCtx.java      |   4 -
 .../apache/ignite/tcbot/engine/ui/DsSummaryUi.java |   7 --
 .../apache/ignite/tcbot/engine/ui/UpdateInfo.java  |   9 +-
 10 files changed, 155 insertions(+), 121 deletions(-)

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/GetSingleBuildTestFailuresRest.java
similarity index 69%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/build/GetBuildTestFailures.java
rename to ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/build/GetSingleBuildTestFailuresRest.java
index 316b447..09af56a 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/GetSingleBuildTestFailuresRest.java
@@ -20,8 +20,6 @@ package org.apache.ignite.ci.web.rest.build;
 import com.google.common.collect.BiMap;
 import com.google.inject.Injector;
 import java.text.ParseException;
-import java.util.Collections;
-import java.util.concurrent.atomic.AtomicInteger;
 import javax.servlet.ServletContext;
 import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.GET;
@@ -30,34 +28,28 @@ import javax.ws.rs.Produces;
 import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.MediaType;
-import org.apache.ignite.tcbot.engine.chain.FullChainRunCtx;
-import org.apache.ignite.tcbot.engine.chain.LatestRebuildMode;
-import org.apache.ignite.tcbot.engine.chain.ProcessLogsMode;
-import org.apache.ignite.tcbot.engine.chain.BuildChainProcessor;
-import org.apache.ignite.tcbot.engine.conf.ITcBotConfig;
 import org.apache.ignite.ci.tcbot.trends.MasterTrendsService;
 import org.apache.ignite.ci.teamcity.ignited.buildcondition.BuildCondition;
 import org.apache.ignite.ci.user.ITcBotUserCreds;
 import org.apache.ignite.ci.web.CtxListener;
-import org.apache.ignite.tcbot.engine.ui.DsChainUi;
-import org.apache.ignite.tcbot.engine.ui.DsSummaryUi;
-import org.apache.ignite.tcbot.engine.ui.UpdateInfo;
 import org.apache.ignite.ci.web.model.trends.BuildStatisticsSummary;
 import org.apache.ignite.ci.web.model.trends.BuildsHistory;
 import org.apache.ignite.tcbot.common.exeption.ServiceUnauthorizedException;
-import org.apache.ignite.tcbot.persistence.IStringCompactor;
+import org.apache.ignite.tcbot.engine.build.SingleBuildResultsService;
+import org.apache.ignite.tcbot.engine.conf.ITcBotConfig;
+import org.apache.ignite.tcbot.engine.ui.DsSummaryUi;
+import org.apache.ignite.tcbot.engine.ui.UpdateInfo;
 import org.apache.ignite.tcignited.ITeamcityIgnited;
 import org.apache.ignite.tcignited.ITeamcityIgnitedProvider;
 import org.apache.ignite.tcignited.SyncMode;
-import org.apache.ignite.tcservice.ITeamcity;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 import static com.google.common.base.Strings.isNullOrEmpty;
 
-@Path(GetBuildTestFailures.BUILD)
+@Path(GetSingleBuildTestFailuresRest.BUILD)
 @Produces(MediaType.APPLICATION_JSON)
-public class GetBuildTestFailures {
+public class GetSingleBuildTestFailuresRest {
     public static final String BUILD = "build";
 
     /** Context. */
@@ -68,23 +60,29 @@ public class GetBuildTestFailures {
     @Context
     private HttpServletRequest req;
 
+
     @GET
     @Path("failures/updates")
     public UpdateInfo getTestFailsUpdates(
-        @QueryParam("serverId") String srvId,
+        @QueryParam("serverId") String srvCodeOrAlias,
         @QueryParam("buildId") Integer buildId,
         @Nullable @QueryParam("checkAllLogs") Boolean checkAllLogs) throws ServiceUnauthorizedException {
-        return new UpdateInfo().copyFrom(getBuildTestFailsNoSync(srvId, buildId, checkAllLogs));
+        UpdateInfo res = new UpdateInfo();
+        res.initCounters(CtxListener.getInjector(ctx)
+            .getInstance(SingleBuildResultsService.class)
+            .getBranchCntrs(srvCodeOrAlias, buildId, ITcBotUserCreds.get(req)));
+
+        return res;
     }
 
     @GET
     @Path("failures/txt")
     @Produces(MediaType.TEXT_PLAIN)
     public String getTestFailsText(
-        @QueryParam("serverId") String srvId,
+        @QueryParam("serverId") String srvCodeOrAlias,
         @QueryParam("buildId") Integer buildId,
         @Nullable @QueryParam("checkAllLogs") Boolean checkAllLogs) throws ServiceUnauthorizedException {
-        return getBuildTestFails(srvId, buildId, checkAllLogs).toString();
+        return getBuildTestFails(srvCodeOrAlias, buildId, checkAllLogs).toString();
     }
 
     @GET
@@ -105,50 +103,17 @@ public class GetBuildTestFailures {
         return collectBuildCtxById(srvId, buildId, checkAllLogs, SyncMode.RELOAD_QUEUED);
     }
 
-    @NotNull public DsSummaryUi collectBuildCtxById(@QueryParam("serverId") String srvCode,
-                                                    @QueryParam("buildId") Integer buildId,
-                                                    @QueryParam("checkAllLogs") @Nullable Boolean checkAllLogs, SyncMode syncMode) {
-        final ITcBotUserCreds prov = ITcBotUserCreds.get(req);
-        final Injector injector = CtxListener.getInjector(ctx);
-        ITeamcityIgnitedProvider tcIgnitedProv = injector.getInstance(ITeamcityIgnitedProvider.class);
-        final BuildChainProcessor buildChainProcessor = injector.getInstance(BuildChainProcessor.class);
-
-        final DsSummaryUi res = new DsSummaryUi();
-        final AtomicInteger runningUpdates = new AtomicInteger();
-
-        tcIgnitedProv.checkAccess(srvCode, prov);
-
-        ITeamcityIgnited tcIgnited = tcIgnitedProv.server(srvCode, prov);
-
-        String failRateBranch = ITeamcity.DEFAULT;
-
-        ProcessLogsMode procLogs = (checkAllLogs != null && checkAllLogs) ? ProcessLogsMode.ALL : ProcessLogsMode.SUITE_NOT_COMPLETE;
-
-        FullChainRunCtx ctx = buildChainProcessor.loadFullChainContext(
-            tcIgnited,
-            Collections.singletonList(buildId),
-            LatestRebuildMode.NONE,
-            procLogs,
-            false,
-            failRateBranch,
-            syncMode,
-            null,
-            null);
-
-        DsChainUi chainStatus = new DsChainUi(srvCode, tcIgnited.serverCode(), ctx.branchName());
-
-        int cnt = (int)ctx.getRunningUpdates().count();
-        if (cnt > 0)
-            runningUpdates.addAndGet(cnt);
-
-        chainStatus.initFromContext(tcIgnited, ctx, failRateBranch, injector.getInstance(IStringCompactor.class), false, null, null, -1, null, false, false);
-
-        res.addChainOnServer(chainStatus);
+    @NotNull public DsSummaryUi collectBuildCtxById(String srvCodeOrAlias,
+        Integer buildId,
+        @Nullable Boolean checkAllLogs,
+        SyncMode syncMode) {
+        return CtxListener.getInjector(ctx)
+            .getInstance(SingleBuildResultsService.class)
+            .getSingleBuildResults(srvCodeOrAlias, buildId, checkAllLogs, syncMode,
+                ITcBotUserCreds.get(req));
+    }
 
-        res.postProcess(runningUpdates.get());
 
-        return res;
-    }
 
     /**
      * Mark builds as "valid" or "invalid".
diff --git a/ignite-tc-helper-web/src/main/webapp/all.html b/ignite-tc-helper-web/src/main/webapp/all.html
index c3ac6ed..619d677 100644
--- a/ignite-tc-helper-web/src/main/webapp/all.html
+++ b/ignite-tc-helper-web/src/main/webapp/all.html
@@ -24,7 +24,6 @@
         $(document).tooltip();
 
         loadData();
-        //todo fix setInterval( function() { checkForUpdate(); }, 60000);
 
         $.ajax({url: "rest/branches/version", success: showVersionInfo, error: showErrInLoadStatus});
 
@@ -68,10 +67,7 @@
             success: function (result) {
                 if (g_shownDataHashCodeHex !== "" && isDefinedAndFilled(result.hashCodeHex)) {
                     if (g_shownDataHashCodeHex === result.hashCodeHex) {
-                        var fastCheckNeeded = isDefinedAndFilled(result.runningUpdates) && result.runningUpdates > 0;
-                        var ms = fastCheckNeeded ? 6000 : 60000;
-
-                        setTimeout(checkForUpdate, ms);
+                        setTimeout(checkForUpdate, 10000);
 
                         $("#loadStatus").html("");
                     } else {
@@ -93,13 +89,6 @@
         $.ajax({
             url: curFailuresUrl,
             success: function (result) {
-                if ((isDefinedAndFilled(result.runningUpdates) && result.runningUpdates > 0)) {
-                    setTimeout(checkForUpdate, 3000);
-
-                    $("#loadStatus").html("<img src='https://www.wallies.com/filebin/images/loading_apple.gif' width=20px height=20px> Updating");
-                } else {
-                    $("#loadStatus").html("");
-                }
                 showData(result);
 
                 g_shownDataHashCodeHex = isDefinedAndFilled(result.hashCodeHex) ? result.hashCodeHex : "";
@@ -178,6 +167,14 @@
 
 </script>
 
+
+<script>
+   window.location='current.html' + parmsForRest() + "&count=10";
+</script>
+
+<a href="current.html?count=10">This repors functionality was moved here</a>
+
+
 <div id="loadStatus"></div>
 <div><a href=".">Home</a> <select id="tagSelect" style="float:right"></select></div>
 <br/>
diff --git a/ignite-tc-helper-web/src/main/webapp/build.html b/ignite-tc-helper-web/src/main/webapp/build.html
index c3acdbd..db5f798 100644
--- a/ignite-tc-helper-web/src/main/webapp/build.html
+++ b/ignite-tc-helper-web/src/main/webapp/build.html
@@ -15,7 +15,8 @@
 </head>
 <body>
 <script>
-var g_shownDataHashCodeHex = "";
+let g_shownDataHashCodeHex = "";
+let g_checkForUpdateSched = false;
 
 $(document).ready(function() {
     $.getScript("js/testfails-2.2.js", function(data, textStatus, jqxhr){ });
@@ -23,7 +24,7 @@ $(document).ready(function() {
     $( document ).tooltip();
     loadData();
 
-    $.ajax({ url: "rest/branches/version",  success: showVersionInfo, error: showErrInLoadStatus });
+    $.ajax({ url: "/rest/branches/version",  success: showVersionInfo, error: showErrInLoadStatus });
 });
 
 
@@ -46,17 +47,19 @@ function parmsForRest() {
 }
 
 function checkForUpdate() {
-    var curFailuresUrl = "rest/build/failures/updates" + parmsForRest();
+    var curFailuresUrl = "/rest/build/failures/updates" + parmsForRest();
 
+    g_checkForUpdateSched = false;
     $.ajax({
         url: curFailuresUrl,
         success: function (result) {
             if (g_shownDataHashCodeHex !== "" && isDefinedAndFilled(result.hashCodeHex)) {
                 if (g_shownDataHashCodeHex === result.hashCodeHex) {
-                    var fastCheckNeeded = isDefinedAndFilled(result.runningUpdates) && result.runningUpdates > 0;
-                    var ms = fastCheckNeeded ? 3000 : 30000;
+                    if (!g_checkForUpdateSched) {
+                        g_checkForUpdateSched = true;
 
-                    setTimeout(checkForUpdate, ms);
+                        setTimeout(checkForUpdate, 10000);
+                    }
 
                     $("#loadStatus").html("");
                 } else {
@@ -71,29 +74,29 @@ function checkForUpdate() {
 }
 
 function loadData() {
-    var curFailuresUrl = "rest/build/failures" + parmsForRest();
+    var curFailuresUrl = "/rest/build/failures" + parmsForRest();
     
     $("#loadStatus").html("<img src='https://www.wallies.com/filebin/images/loading_apple.gif' width=20px height=20px> Please wait");
     setTimeout(loadPartialData, 3000);
+
     $.ajax({
         url: curFailuresUrl,
         success: function (result) {
-            if (isDefinedAndFilled(result.runningUpdates) && result.runningUpdates > 0) {
-                setTimeout(checkForUpdate, 3000);
-
-                $("#loadStatus").html("<img src='https://www.wallies.com/filebin/images/loading_apple.gif' width=20px height=20px> Updating");
-            } else {
-                $("#loadStatus").html("");
-            }
             showData(result);
             g_shownDataHashCodeHex = isDefinedAndFilled(result.hashCodeHex) ? result.hashCodeHex : "";
+
+            if (!g_checkForUpdateSched) {
+                g_checkForUpdateSched = true;
+
+                setTimeout(checkForUpdate, 10000);
+            }
         },
         error: showErrInLoadStatus
     });
 }
 
 function loadPartialData() {
-    var curFailuresUrl = "rest/build/failuresNoSync" + parmsForRest();
+    var curFailuresUrl = "/rest/build/failuresNoSync" + parmsForRest();
 
     if (g_shownDataHashCodeHex !== "") {
         return;
diff --git a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/TcBotEngineModule.java b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/TcBotEngineModule.java
index 948c002..ab39d2d 100644
--- a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/TcBotEngineModule.java
+++ b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/TcBotEngineModule.java
@@ -20,8 +20,8 @@ package org.apache.ignite.tcbot.engine;
 import com.google.inject.AbstractModule;
 import com.google.inject.internal.SingletonScope;
 import org.apache.ignite.tcbot.common.TcBotCommonModule;
-import org.apache.ignite.tcbot.common.interceptor.MonitoredTaskInterceptorModule;
 import org.apache.ignite.tcbot.engine.board.BoardService;
+import org.apache.ignite.tcbot.engine.build.SingleBuildResultsService;
 import org.apache.ignite.tcbot.engine.buildtime.BuildTimeService;
 import org.apache.ignite.tcbot.engine.chain.BuildChainProcessor;
 import org.apache.ignite.tcbot.engine.issue.IIssuesStorage;
@@ -37,6 +37,7 @@ public class TcBotEngineModule extends AbstractModule {
     @Override protected void configure() {
         bind(BuildChainProcessor.class).in(new SingletonScope());
         bind(IDetailedStatusForTrackedBranch.class).to(TrackedBranchChainsProcessor.class).in(new SingletonScope());
+        bind(SingleBuildResultsService.class).in(new SingletonScope());
 
         bind(BuildTimeService.class).in(new SingletonScope());
 
diff --git a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/build/SingleBuildResultsService.java b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/build/SingleBuildResultsService.java
new file mode 100644
index 0000000..f0ac555
--- /dev/null
+++ b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/build/SingleBuildResultsService.java
@@ -0,0 +1,100 @@
+/*
+ * 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.tcbot.engine.build;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import javax.inject.Inject;
+import org.apache.ignite.tcbot.engine.chain.BuildChainProcessor;
+import org.apache.ignite.tcbot.engine.chain.FullChainRunCtx;
+import org.apache.ignite.tcbot.engine.chain.LatestRebuildMode;
+import org.apache.ignite.tcbot.engine.chain.ProcessLogsMode;
+import org.apache.ignite.tcbot.engine.ui.DsChainUi;
+import org.apache.ignite.tcbot.engine.ui.DsSummaryUi;
+import org.apache.ignite.tcbot.persistence.IStringCompactor;
+import org.apache.ignite.tcignited.ITeamcityIgnited;
+import org.apache.ignite.tcignited.ITeamcityIgnitedProvider;
+import org.apache.ignite.tcignited.SyncMode;
+import org.apache.ignite.tcignited.build.UpdateCountersStorage;
+import org.apache.ignite.tcignited.buildref.BranchEquivalence;
+import org.apache.ignite.tcignited.creds.ICredentialsProv;
+import org.apache.ignite.tcservice.ITeamcity;
+
+/**
+ * Displays single build at server by ID.
+ */
+public class SingleBuildResultsService {
+    @Inject BuildChainProcessor buildChainProcessor;
+    @Inject ITeamcityIgnitedProvider tcIgnitedProv;
+    @Inject BranchEquivalence branchEquivalence;
+    @Inject IStringCompactor compactor;
+    @Inject UpdateCountersStorage updateCounters;
+
+    @Nonnull public DsSummaryUi getSingleBuildResults(String srvCodeOrAlias, Integer buildId,
+        @Nullable Boolean checkAllLogs, SyncMode syncMode, ICredentialsProv prov) {
+        DsSummaryUi res = new DsSummaryUi();
+
+        tcIgnitedProv.checkAccess(srvCodeOrAlias, prov);
+
+        ITeamcityIgnited tcIgnited = tcIgnitedProv.server(srvCodeOrAlias, prov);
+
+        String failRateBranch = ITeamcity.DEFAULT;
+
+        ProcessLogsMode procLogs = (checkAllLogs != null && checkAllLogs) ? ProcessLogsMode.ALL : ProcessLogsMode.SUITE_NOT_COMPLETE;
+
+        FullChainRunCtx ctx = buildChainProcessor.loadFullChainContext(
+            tcIgnited,
+            Collections.singletonList(buildId),
+            LatestRebuildMode.NONE,
+            procLogs,
+            false,
+            failRateBranch,
+            syncMode,
+            null,
+            null);
+
+        DsChainUi chainStatus = new DsChainUi(srvCodeOrAlias, tcIgnited.serverCode(), ctx.branchName());
+
+        chainStatus.initFromContext(tcIgnited, ctx, failRateBranch, compactor, false, null, null, -1, null, false, false);
+
+        res.addChainOnServer(chainStatus);
+
+        res.initCounters(getBranchCntrs(srvCodeOrAlias, buildId, prov));
+        return res;
+    }
+
+
+
+    public Map<Integer, Integer> getBranchCntrs(String srvCodeOrAlias,
+        Integer buildId, ICredentialsProv creds) {
+        tcIgnitedProv.checkAccess(srvCodeOrAlias, creds);
+
+        String tcBranch = tcIgnitedProv.server(srvCodeOrAlias, creds).getFatBuild(buildId, SyncMode.LOAD_NEW).branchName(compactor);
+
+        Set<Integer> allBranchIds = new HashSet<>();
+
+        allBranchIds.addAll(branchEquivalence.branchIdsForQuery(tcBranch, compactor));
+        allBranchIds.addAll(branchEquivalence.branchIdsForQuery(ITeamcity.DEFAULT, compactor));
+
+        return updateCounters.getCounters(allBranchIds);
+    }
+}
diff --git a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/chain/FullChainRunCtx.java b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/chain/FullChainRunCtx.java
index f65a484..e9fb23a 100644
--- a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/chain/FullChainRunCtx.java
+++ b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/chain/FullChainRunCtx.java
@@ -108,16 +108,6 @@ public class FullChainRunCtx {
         this.buildCfgsResults.addAll(suites);
     }
 
-    @Deprecated
-    public Stream<Future<?>> getFutures() {
-        return buildCfgsResults.stream().flatMap(MultBuildRunCtx::getFutures);
-    }
-
-    @Deprecated
-    public Stream<Future<?>> getRunningUpdates() {
-        return getFutures().filter(Objects::nonNull).filter(future -> !future.isDone() && !future.isCancelled());
-    }
-
     public boolean isFakeStub() {
         return fakeStub;
     }
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 53d2486..22ec872 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
@@ -481,10 +481,6 @@ public class MultBuildRunCtx implements ISuiteResults {
             });
     }
 
-    Stream<? extends Future<?>> getFutures() {
-        return buildsStream().flatMap(SingleBuildRunCtx::getFutures);
-    }
-
     /**
      * @return true if all builds are composite
      */
diff --git a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/chain/SingleBuildRunCtx.java b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/chain/SingleBuildRunCtx.java
index 6f3b766..9252003 100644
--- a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/chain/SingleBuildRunCtx.java
+++ b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/chain/SingleBuildRunCtx.java
@@ -175,10 +175,6 @@ public class SingleBuildRunCtx implements ISuiteResults {
         return Collections.unmodifiableList(changes);
     }
 
-    @Nonnull Stream<? extends Future<?>> getFutures() {
-        return logCheckResFut == null ? Stream.empty() : Stream.of((Future<?>)logCheckResFut);
-    }
-
     public boolean isComposite() {
         return buildCompacted.isComposite();
     }
diff --git a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/ui/DsSummaryUi.java b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/ui/DsSummaryUi.java
index 155979e..ff4d2e7 100644
--- a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/ui/DsSummaryUi.java
+++ b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/ui/DsSummaryUi.java
@@ -63,13 +63,6 @@ public class DsSummaryUi extends UpdateInfo {
         return this;
     }
 
-    @Deprecated
-    public void postProcess(int running) {
-        runningUpdates = running;
-
-        hashCodeHex = Integer.toHexString(U.safeAbs(hashCode()));
-    }
-
     /** {@inheritDoc} */
     @Override public boolean equals(Object o) {
         if (this == o)
diff --git a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/ui/UpdateInfo.java b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/ui/UpdateInfo.java
index e051302..16c6063 100644
--- a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/ui/UpdateInfo.java
+++ b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/ui/UpdateInfo.java
@@ -45,16 +45,9 @@ import org.apache.ignite.tcignited.build.UpdateCountersStorage;
     /** Hash code hexadecimal, protects from redraw and minimizing mode info in case data not changed */
     public String hashCodeHex;
 
+    /** Update Counters for all related TC Branches. */
     public Map<Integer, Integer> counters;
 
-    public UpdateInfo copyFrom(UpdateInfo info) {
-        //todo there is no chance to update running futures if info is cached
-        this.runningUpdates = info.runningUpdates;
-        this.hashCodeHex = info.hashCodeHex;
-
-        return this;
-    }
-
     /**
      * @param gitHubCfg
      * @param jiraCfg