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/09 17:27:24 UTC
[ignite-teamcity-bot] 01/01: Counters for tracking updates instead
of all model implementation started
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 c84e3d3cd39553383615114406bdc43e90aa87ae
Author: Dmitriy Pavlov <dp...@apache.org>
AuthorDate: Fri Aug 9 20:27:18 2019 +0300
Counters for tracking updates instead of all model implementation started
---
.../rest/tracked/GetTrackedBranchTestResults.java | 17 +++++++--
.../tcbot/engine/chain/BuildChainProcessor.java | 26 ++++++++++----
.../tcbot/engine/chain/SingleBuildRunCtx.java | 4 +++
.../tracked/IDetailedStatusForTrackedBranch.java | 3 ++
.../tracked/TrackedBranchChainsProcessor.java | 26 ++++++++++++++
.../apache/ignite/tcbot/engine/ui/UpdateInfo.java | 9 ++---
.../ignite/tcignited/TeamcityIgnitedModule.java | 2 ++
.../tcignited/build/UpdateCountersStorage.java | 40 ++++++++++++++++++++++
8 files changed, 114 insertions(+), 13 deletions(-)
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 2b0c2ed..b245630 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
@@ -19,6 +19,7 @@ package org.apache.ignite.ci.web.rest.tracked;
import com.google.inject.Injector;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
@@ -45,6 +46,7 @@ import org.apache.ignite.tcbot.engine.ui.GuardBranchStatusUi;
import org.apache.ignite.tcbot.engine.ui.UpdateInfo;
import org.apache.ignite.tcignited.ITeamcityIgnitedProvider;
import org.apache.ignite.tcignited.SyncMode;
+import org.apache.ignite.tcignited.build.UpdateCountersStorage;
import org.apache.ignite.tcservice.model.mute.MuteInfo;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -78,9 +80,18 @@ public class GetTrackedBranchTestResults {
@Nullable @QueryParam("showTestLongerThan") Integer showTestLongerThan,
@Nullable @QueryParam("muted") Boolean showMuted,
@Nullable @QueryParam("ignored") Boolean showIgnored) {
- return new UpdateInfo().copyFrom(
- getTestFailsResultsNoSync(branchOrNull, checkAllLogs, trustedTests, tagSelected, tagForHistSelected,
- displayMode, sortOption, mergeCnt, showTestLongerThan, showMuted, showIgnored));
+
+ ITcBotUserCreds creds = ITcBotUserCreds.get(req);
+
+ Injector injector = CtxListener.getInjector(ctx);
+
+ IDetailedStatusForTrackedBranch instance = injector.getInstance(IDetailedStatusForTrackedBranch.class);
+
+ UpdateInfo info = new UpdateInfo();
+
+ Map<Integer, Integer> cnts = instance.getTrackedBranchUpdateCounters(branchOrNull, creds);
+ info.hashCodeHex = UpdateCountersStorage.getCountersHash(cnts);
+ return info;
}
@GET
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 dca9293..bf55a4a 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
@@ -51,7 +51,9 @@ import org.apache.ignite.tcbot.engine.ui.LrTestsSuiteSummaryUi;
import org.apache.ignite.tcbot.persistence.IStringCompactor;
import org.apache.ignite.tcignited.ITeamcityIgnited;
import org.apache.ignite.tcignited.SyncMode;
+import org.apache.ignite.tcignited.build.UpdateCountersStorage;
import org.apache.ignite.tcignited.buildlog.IBuildLogProcessor;
+import org.apache.ignite.tcignited.buildlog.ILogCheckResult;
import org.apache.ignite.tcignited.buildref.BranchEquivalence;
import org.apache.ignite.tcignited.history.IRunHistory;
import org.apache.ignite.tcservice.model.hist.BuildRef;
@@ -72,6 +74,12 @@ public class BuildChainProcessor {
/** Compactor. */
@Inject private IStringCompactor compactor;
+ /** Build logs processor. */
+ @Inject private IBuildLogProcessor buildLogProcessor;
+
+ @Inject private UpdateCountersStorage counters;
+
+
/**
* Collects data about all long-running tests (run time more than one minute) across all suites in RunAll chain in
* master branch.
@@ -436,8 +444,6 @@ public class BuildChainProcessor {
}
}
- @Inject IBuildLogProcessor buildLogProcessor;
-
@SuppressWarnings("WeakerAccess")
@AutoProfiling
protected void analyzeTests(MultBuildRunCtx outCtx, ITeamcityIgnited teamcity,
@@ -448,10 +454,18 @@ public class BuildChainProcessor {
|| procLog == ProcessLogsMode.ALL)
ctx.setLogCheckResFut(
CompletableFuture.supplyAsync(
- () -> buildLogProcessor.analyzeBuildLog(teamcity,
- ctx.buildId(),
- incompleteFailure),
- tcUpdatePool.getService()));
+ () -> {
+ ILogCheckResult res = buildLogProcessor.analyzeBuildLog(teamcity,
+ ctx.buildId(),
+ incompleteFailure);
+ int branchName = ctx.branchName();
+
+ //build log result is ready for branch.
+ counters.increment(branchName);
+
+ return res;
+ },
+ tcUpdatePool.getService()));
}
}
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 77ddf63..6f3b766 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
@@ -348,4 +348,8 @@ public class SingleBuildRunCtx implements ISuiteResults {
public void addTags(Set<String> strings) {
this.tags.addAll(strings);
}
+
+ public int branchName() {
+ return buildCompacted.branchName();
+ }
}
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 684aa23..13baae2 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
@@ -16,6 +16,7 @@
*/
package org.apache.ignite.tcbot.engine.tracked;
+import java.util.Map;
import javax.annotation.Nullable;
import org.apache.ignite.tcbot.engine.chain.SortOption;
import org.apache.ignite.tcbot.engine.ui.DsSummaryUi;
@@ -63,5 +64,7 @@ public interface IDetailedStatusForTrackedBranch {
*/
public GuardBranchStatusUi getBranchSummary(String name, ICredentialsProv prov);
+ public Map<Integer, Integer> getTrackedBranchUpdateCounters(@Nullable String branch, ICredentialsProv creds);
+
// * @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 6decee6..d2663fd 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
@@ -21,8 +21,10 @@ import java.time.Duration;
import java.util.Collection;
import java.util.Comparator;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import javax.annotation.Nonnull;
@@ -49,6 +51,8 @@ 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 static com.google.common.base.Strings.isNullOrEmpty;
@@ -69,6 +73,8 @@ public class TrackedBranchChainsProcessor implements IDetailedStatusForTrackedBr
/** Compactor. */
@Inject private IStringCompactor compactor;
+ @Inject private UpdateCountersStorage countersStorage;
+
/** {@inheritDoc} */
@AutoProfiling
@Nonnull
@@ -242,6 +248,26 @@ public class TrackedBranchChainsProcessor implements IDetailedStatusForTrackedBr
return statusUi;
}
+ @Override public Map<Integer, Integer> getTrackedBranchUpdateCounters(@Nullable String branch,
+ @Nonnull ICredentialsProv creds) {
+
+ final String branchNn = isNullOrEmpty(branch) ? ITcServerConfig.DEFAULT_TRACKED_BRANCH_NAME : branch;
+ final ITrackedBranch tracked = tcBotCfg.getTrackedBranches().getBranchMandatory(branchNn);
+
+ Set<Integer> allBranches = new HashSet<>();
+ tracked.chainsStream()
+ .filter(chainTracked -> tcIgnitedProv.hasAccess(chainTracked.serverCode(), creds))
+ .forEach(chainTracked -> {
+ String tcBranch = chainTracked.tcBranch();
+
+ Set<Integer> allBranchIds = new BranchEquivalence().branchIdsForQuery(tcBranch, compactor);
+
+ allBranches.addAll(allBranchIds);
+ });
+
+ return countersStorage.getCounters(allBranches);
+ }
+
/**
* Collects data about all long-running tests (run time more than one minute) within one transfer object.
*
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 6e31a09..5c617b9 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
@@ -36,7 +36,8 @@ import org.apache.ignite.tcbot.common.conf.IJiraServerConfig;
/** Flags to use in javascript. */
public Integer javaFlags = 0;
- /** Running updates is in progress, summary is ready, but it is subject to change */
+ /** Running updates is in progress, not used since it should be updated using counters */
+ @Deprecated
public int runningUpdates = 0;
/** Hash code hexadecimal, protects from redraw and minimizing mode info in case data not changed */
@@ -51,14 +52,14 @@ import org.apache.ignite.tcbot.common.conf.IJiraServerConfig;
}
/**
- * @param gitHubConfig
+ * @param gitHubCfg
* @param jiraCfg
*/
- public void setJavaFlags(IGitHubConfig gitHubConfig, IJiraServerConfig jiraCfg) {
+ public void setJavaFlags(IGitHubConfig gitHubCfg, IJiraServerConfig jiraCfg) {
//since user has logged in, TC flag should be set
javaFlags |= TEAMCITY_FLAG;
- if (gitHubConfig.isGitTokenAvailable())
+ if (gitHubCfg.isGitTokenAvailable())
javaFlags |= GITHUB_FLAG;
if (jiraCfg.isJiraTokenAvailable())
diff --git a/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/TeamcityIgnitedModule.java b/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/TeamcityIgnitedModule.java
index 0f39f7a..273c00f 100644
--- a/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/TeamcityIgnitedModule.java
+++ b/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/TeamcityIgnitedModule.java
@@ -19,6 +19,7 @@ package org.apache.ignite.tcignited;
import com.google.inject.AbstractModule;
import com.google.inject.internal.SingletonScope;
import org.apache.ignite.ci.teamcity.ignited.buildcondition.BuildConditionDao;
+import org.apache.ignite.tcignited.build.UpdateCountersStorage;
import org.apache.ignite.tcignited.buildlog.BuildLogCheckResultDao;
import org.apache.ignite.tcignited.buildlog.ILogProductSpecific;
import org.apache.ignite.tcignited.buildlog.LogIgniteSpecific;
@@ -70,6 +71,7 @@ public class TeamcityIgnitedModule extends AbstractModule {
bind(SuiteInvocationHistoryDao.class).in(new SingletonScope());
bind(HistoryCollector.class).in(new SingletonScope());
bind(ILogProductSpecific.class).to(LogIgniteSpecific.class).in(new SingletonScope());
+ bind(UpdateCountersStorage.class).in(new SingletonScope());
TcRealConnectionModule module = new TcRealConnectionModule();
if (conn != null)
diff --git a/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/build/UpdateCountersStorage.java b/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/build/UpdateCountersStorage.java
new file mode 100644
index 0000000..e8bd9a0
--- /dev/null
+++ b/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/build/UpdateCountersStorage.java
@@ -0,0 +1,40 @@
+package org.apache.ignite.tcignited.build;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.atomic.AtomicInteger;
+import org.apache.ignite.internal.util.typedef.internal.U;
+
+public class UpdateCountersStorage {
+ /** Counters: Map from Branch name compactor ID to its correspondent update counter value. */
+ private ConcurrentMap<Integer, AtomicInteger> counters = new ConcurrentHashMap<>();
+
+ public Map<Integer, Integer> getCounters(Collection<Integer> branchNames) {
+ Map<Integer, Integer> res = new TreeMap<>();
+
+ for (Integer name : branchNames) {
+ if (name == null)
+ continue;
+
+ res.put(name, getIntegerForEntry(name).get());
+ }
+
+ return res;
+ }
+
+ public static String getCountersHash(Map<Integer, Integer> counters) {
+ return Integer.toHexString(U.safeAbs(counters.hashCode()));
+ }
+
+ public AtomicInteger getIntegerForEntry(int name) {
+ return counters.computeIfAbsent(name, (k_) -> new AtomicInteger());
+ }
+
+ public void increment(int branchName) {
+ getIntegerForEntry(branchName).incrementAndGet();
+ }
+}