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:22 UTC

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

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