diff --git a/.gitignore b/.gitignore
index d807477..3d66646 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,3 @@
-/.*
*.iml
/work
diff --git a/.mvn/extensions.xml b/.mvn/extensions.xml
new file mode 100644
index 0000000..9ac2968
--- /dev/null
+++ b/.mvn/extensions.xml
@@ -0,0 +1,7 @@
+
+
+ io.jenkins.tools.incrementals
+ git-changelist-maven-extension
+ 1.4
+
+
diff --git a/.mvn/maven.config b/.mvn/maven.config
new file mode 100644
index 0000000..2a0299c
--- /dev/null
+++ b/.mvn/maven.config
@@ -0,0 +1,2 @@
+-Pconsume-incrementals
+-Pmight-produce-incrementals
diff --git a/pom.xml b/pom.xml
index 582a64c..c0c3cfe 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
cloud-stats
- 0.28-SNAPSHOT
+ ${revision}${changelist}
hpi
Cloud Statistics Plugin
Report Jenkins dynamic provisioning activities and statistics
@@ -29,10 +29,10 @@
- scm:git:git://github.com/jenkinsci/cloud-stats-plugin.git
- scm:git:git@github.com:jenkinsci/cloud-stats-plugin.git
- https://github.com/jenkinsci/cloud-stats-plugin
- HEAD
+ scm:git:git://github.com/${gitHubRepo}.git
+ scm:git:git@github.com:${gitHubRepo}.git
+ https://github.com/${gitHubRepo}
+ ${scmTag}
@@ -42,6 +42,19 @@
2.3
test
+
+ org.awaitility
+ awaitility
+ 4.2.0
+ test
+
+
+
+ org.hamcrest
+ hamcrest
+
+
+
@@ -59,6 +72,9 @@
+ 0.28
+ -SNAPSHOT
+ jenkinsci/cloud-stats-plugin
2.235.1
8
false
diff --git a/src/main/resources/org/jenkinsci/plugins/cloudstats/CloudAction/summary.groovy b/src/main/resources/org/jenkinsci/plugins/cloudstats/CloudAction/summary.groovy
index 4693342..43b8299 100644
--- a/src/main/resources/org/jenkinsci/plugins/cloudstats/CloudAction/summary.groovy
+++ b/src/main/resources/org/jenkinsci/plugins/cloudstats/CloudAction/summary.groovy
@@ -18,7 +18,7 @@ Health.Report report = index.cloudHealth(action.cloud.name).current
HealthReport hr = report.weather
h2 {
- l.icon("class": "${hr.iconClassName} icon-md", alt: hr.score)
+ l.icon("class": "${hr.iconClassName} icon-md", alt: hr.score + "")
st.nbsp()
text("${action.displayName} (Health ${report})")
}
diff --git a/src/main/resources/org/jenkinsci/plugins/cloudstats/CloudStatistics/index.groovy b/src/main/resources/org/jenkinsci/plugins/cloudstats/CloudStatistics/index.groovy
index 1cb91fa..235ee5c 100644
--- a/src/main/resources/org/jenkinsci/plugins/cloudstats/CloudStatistics/index.groovy
+++ b/src/main/resources/org/jenkinsci/plugins/cloudstats/CloudStatistics/index.groovy
@@ -56,13 +56,13 @@ l.layout(permission: stats.getRequiredPermission()) {
td()
td {
def score = ch.overall
- l.icon("class": "${score.weather.iconClassName} icon-sm", alt: score.weather.score)
+ l.icon("class": "${score.weather.iconClassName} icon-sm", alt: score.weather.score + "")
st.nbsp()
text(score)
}
td {
def score = ch.current
- l.icon("class": "${score.weather.iconClassName} icon-sm", alt: score.weather.score)
+ l.icon("class": "${score.weather.iconClassName} icon-sm", alt: score.weather.score + "")
st.nbsp()
text(score)
}
@@ -76,13 +76,13 @@ l.layout(permission: stats.getRequiredPermission()) {
td(template)
td {
def score = th.overall
- l.icon("class": "${score.weather.iconClassName} icon-sm", alt: score.weather.score)
+ l.icon("class": "${score.weather.iconClassName} icon-sm", alt: score.weather.score + "")
st.nbsp()
text(score)
}
td {
def score = th.current
- l.icon("class": "${score.weather.iconClassName} icon-sm", alt: score.weather.score)
+ l.icon("class": "${score.weather.iconClassName} icon-sm", alt: score.weather.score + "")
st.nbsp()
text(score)
}
diff --git a/src/main/resources/org/jenkinsci/plugins/cloudstats/StatsWidget/index.groovy b/src/main/resources/org/jenkinsci/plugins/cloudstats/StatsWidget/index.groovy
index 1a56d13..b2be470 100644
--- a/src/main/resources/org/jenkinsci/plugins/cloudstats/StatsWidget/index.groovy
+++ b/src/main/resources/org/jenkinsci/plugins/cloudstats/StatsWidget/index.groovy
@@ -50,7 +50,7 @@ if (widget.displayed) {
tr {
def score = index.cloudHealth(cloudName).getCurrent()
td(colspan: 2) {
- l.icon("class": "${score.weather.iconClassName} icon-sm", alt: score.weather.score)
+ l.icon("class": "${score.weather.iconClassName} icon-sm", alt: score.weather.score + "")
st.nbsp()
if (cloudViews && j.getCloud(cloudName) != null) {
a(href: rootURL + "/cloud/" + cloudName) {
@@ -68,7 +68,7 @@ if (widget.displayed) {
tr {
td()
td {
- l.icon("class": "${health.current.weather.iconClassName} icon-sm", alt: health.current.weather.score)
+ l.icon("class": "${health.current.weather.iconClassName} icon-sm", alt: health.current.weather.score + "")
st.nbsp()
text(templateName)
}
diff --git a/src/test/java/org/jenkinsci/plugins/cloudstats/CloudStatisticsTest.java b/src/test/java/org/jenkinsci/plugins/cloudstats/CloudStatisticsTest.java
index b47dade..705a77d 100644
--- a/src/test/java/org/jenkinsci/plugins/cloudstats/CloudStatisticsTest.java
+++ b/src/test/java/org/jenkinsci/plugins/cloudstats/CloudStatisticsTest.java
@@ -31,12 +31,7 @@
import hudson.BulkChange;
import hudson.ExtensionList;
import hudson.Functions;
-import hudson.model.Computer;
-import hudson.model.FreeStyleBuild;
-import hudson.model.FreeStyleProject;
-import hudson.model.Label;
-import hudson.model.LoadStatistics;
-import hudson.model.Node;
+import hudson.model.*;
import hudson.model.queue.QueueTaskFuture;
import hudson.security.AuthorizationStrategy;
import hudson.slaves.NodeProvisioner;
@@ -56,12 +51,16 @@
import javax.annotation.Nonnull;
import java.io.ObjectStreamException;
import java.net.URL;
+import java.time.Duration;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.concurrent.Callable;
+import java.util.concurrent.TimeUnit;
+import static java.util.concurrent.TimeUnit.SECONDS;
+import static org.awaitility.Awaitility.await;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.contains;
import static org.hamcrest.Matchers.containsString;
@@ -229,13 +228,13 @@ public void ui() throws Exception {
Id okId = new Id("MyCloud", "working-template", "future-agent");
provisioningListener.onStarted(okId);
- slave = TrackedAgent.create(okId, j);
- provisioningListener.onComplete(okId, slave);
- slave.toComputer().waitUntilOnline();
- Thread.sleep(500);
- slave.toComputer().doDoDelete();
+ final Node agent = TrackedAgent.create(okId, j);
+ provisioningListener.onComplete(okId, agent);
+ agent.toComputer().waitUntilOnline();
+ Thread.sleep(1000L);
+ agent.toComputer().doDoDelete();
- Thread.sleep(500);
+ await().atMost(10, SECONDS).until(() -> j.jenkins.getNode(agent.getNodeName()) == null);
// Then
ProvisioningActivity failedToProvision = cs.getActivityFor(failId);