Added Windows agents filter for builds triggering on TeamCity. Fixes #184
Signed-off-by: Slava Koptilin <slava.koptilin@gmail.com>
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jobs/CheckQueueJob.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jobs/CheckQueueJob.java
index 0baa5f8..46af5f0 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jobs/CheckQueueJob.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jobs/CheckQueueJob.java
@@ -47,6 +47,7 @@
import org.apache.ignite.tcbot.persistence.IStringCompactor;
import org.apache.ignite.tcignited.ITeamcityIgnited;
import org.apache.ignite.tcignited.ITeamcityIgnitedProvider;
+import org.apache.ignite.tcservice.model.Property;
import org.apache.ignite.tcservice.model.agent.Agent;
import org.apache.ignite.tcservice.model.result.Build;
import org.apache.ignite.tcservice.model.result.Triggered;
@@ -70,6 +71,10 @@
private static final int CHECK_QUEUE_MIN_FREE_AGENTS_PERCENT =
Integer.getInteger("CHECK_QUEUE_MIN_FREE_AGENTS_PERCENT", 15);
+ /** Percentage of free windows agents required to trigger build. */
+ private static final int CHECK_QUEUE_MIN_FREE_WINDOWS_AGENTS_PERCENT =
+ Integer.getInteger("CHECK_QUEUE_MIN_FREE_WINDOWS_AGENTS_PERCENT", 1);
+
/** */
private ITcBotUserCreds creds;
@@ -192,16 +197,35 @@
List<Agent> agents = tcIgn.agents(true, true);
int total = agents.size();
+ int winAgents = 0;
int running = 0;
+ int winRunning = 0;
for (Agent agent : agents) {
+ //filter for windows agents
+ if (agent.getPool().getName().contains("Default") &&
+ agent.isEnabled() &&
+ agent.getProperties().getProperty().stream()
+ .filter(prop -> prop.getName().equals("teamcity.agent.jvm.os.name")).findAny().orElseGet(() -> {
+ Property emptyProp = new Property();
+
+ emptyProp.setValue("");
+
+ return emptyProp;
+ }).getValue().contains("Windows")) {
+ winAgents++;
+
+ if (agent.getBuild() != null)
+ winRunning++;
+ }
+
if (agent.getBuild() != null) // || !STATE_RUNNING.equals(agent.getFatBuild().status)
++running;
}
int free = total == 0 ? -1 : (total - running) * 100 / total;
- final String agentStatus = MessageFormat.format("{0}% of agents are free ({1} total, {2} running builds).", free, total, running);
+ String agentStatus = MessageFormat.format("{0}% of agents are free ({1} total, {2} running builds).", free, total, running);
logger.info(agentStatus);
@@ -211,6 +235,18 @@
logger.info("There are more than {}% free agents (total={}, free={}).", CHECK_QUEUE_MIN_FREE_AGENTS_PERCENT,
total, total - running);
+ int winFree = winAgents == 0 ? -1 : (winAgents - winRunning) * 100 / winAgents;
+
+ agentStatus = MessageFormat.format("{0}% of Windows agents are free ({1} total, {2} running builds).", winFree, winAgents, winRunning);
+
+ logger.info(agentStatus);
+
+ if (winAgents > 0 && winFree < CHECK_QUEUE_MIN_FREE_WINDOWS_AGENTS_PERCENT)
+ return "Min agent percent of free Windows agents not met:" + agentStatus;
+
+ logger.info("There are more than {}% free Windows agents (total={}, free={}).", CHECK_QUEUE_MIN_FREE_WINDOWS_AGENTS_PERCENT,
+ winAgents, winAgents - winRunning);
+
String selfLogin = creds.getUser(srvCode);
tcIgn.actualizeRecentBuildRefs();