summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorJon Marius Venstad <jvenstad@yahoo-inc.com>2019-01-07 17:17:42 +0100
committerJon Marius Venstad <jvenstad@yahoo-inc.com>2019-01-07 17:17:42 +0100
commitdbe19ae207ea7faf5b39b960363bec8b35bf657d (patch)
tree945c0bd4118312d895f0055f204e6b769ff24a8e /controller-server
parentd28cbfba33057ae487f303f0d388206c6bffd048 (diff)
Improve logic for last completed
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/Badges.java15
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java12
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java2
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/BadgesTest.java8
4 files changed, 17 insertions, 20 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/Badges.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/Badges.java
index 8737220efc4..2576a439be9 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/Badges.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/Badges.java
@@ -4,6 +4,7 @@ import com.yahoo.config.provision.ApplicationId;
import java.net.URI;
import java.util.List;
+import java.util.Optional;
/**
* URLs for deployment job badges using <a href="https://github.com/yahoo/badge-up">badge-up</a>.
@@ -26,18 +27,12 @@ class Badges {
}
/** Returns a URI which gives a history badge for the given runs. */
- URI historic(ApplicationId id, List<Run> runs) {
+ URI historic(ApplicationId id, Optional<Run> lastCompleted, List<Run> runs) {
StringBuilder path = new StringBuilder(id + ";" + dark);
- if ( ! runs.isEmpty()) {
- Run lastCompleted = runs.get(runs.size() - 1);
- if (runs.size() > 1 && !lastCompleted.hasEnded())
- lastCompleted = runs.get(runs.size() - 2);
-
- path.append("/").append(lastCompleted.id().type().jobName()).append(";").append(colorOf(lastCompleted));
- for (Run run : runs)
- path.append("/%20;").append(colorOf(run)).append(";s%7B").append(white).append("%7D");
- }
+ lastCompleted.ifPresent(last -> path.append("/").append(last.id().type().jobName()).append(";").append(colorOf(last)));
+ for (Run run : runs)
+ path.append("/%20;").append(colorOf(run)).append(";s%7B").append(white).append("%7D");
return badgeApi.resolve(path.toString());
}
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java
index d74f260df48..b8921ae983a 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java
@@ -24,6 +24,7 @@ import com.yahoo.vespa.hosted.controller.persistence.BufferedLogStore;
import com.yahoo.vespa.hosted.controller.persistence.CuratorDb;
import java.net.URI;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
@@ -319,11 +320,12 @@ public class JobController {
/** Returns a URI which points at a badge showing historic status of given length for the given job type for the given application. */
public URI historicBadge(ApplicationId id, JobType type, int historyLength) {
- Map<RunId, Run> runs = runs(id, type);
- return badges.historic(id,
- runs.values().stream()
- .skip(Math.max(0, runs.size() - historyLength))
- .collect(toList()));
+ List<Run> runs = new ArrayList<>(runs(id, type).values());
+ Optional<Run> lastCompleted = runs.isEmpty() ? Optional.empty()
+ : runs.size() == 1 || runs.get(runs.size() - 1).hasEnded() ? Optional.of(runs.get(runs.size() - 1))
+ : Optional.of(runs.get(runs.size() - 2));
+
+ return badges.historic(id, lastCompleted, runs.subList(Math.max(0, runs.size() - historyLength), runs.size()));
}
/** Returns a URI which points at a badge showing current status for all jobs for the given application. */
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
index dcf8f1fd5a9..010d6b60965 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
@@ -962,7 +962,7 @@ public class ApplicationApiHandler extends LoggingRequestHandler {
private HttpResponse badge(String tenant, String application, String instance, String jobName, String historyLength) {
URI location = controller.jobController().historicBadge(ApplicationId.from(tenant, application, instance),
JobType.fromJobName(jobName),
- historyLength == null ? 5 : Math.min(32, Math.max(2, Integer.parseInt(historyLength))));
+ historyLength == null ? 5 : Math.min(32, Math.max(0, Integer.parseInt(historyLength))));
return redirect(location);
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/BadgesTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/BadgesTest.java
index 2c89dec61a8..f219dd66dd6 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/BadgesTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/BadgesTest.java
@@ -44,18 +44,18 @@ public class BadgesTest {
Badges badges = new Badges(URI.create("https://badges.tld/api/"));
assertEquals(URI.create("https://badges.tld/api/tenant.application;" + Badges.dark),
- badges.historic(id, Collections.emptyList()));
+ badges.historic(id, Optional.empty(), Collections.emptyList()));
assertEquals(URI.create("https://badges.tld/api/tenant.application;" + Badges.dark +
- "/" + systemTest.jobName() + ";" + Badges.purple +
+ "/" + systemTest.jobName() + ";" + Badges.blue +
"/%20;" + Badges.purple + ";s%7B" + Badges.white + "%7D"),
- badges.historic(id, Collections.singletonList(running)));
+ badges.historic(id, Optional.of(success), Collections.singletonList(running)));
assertEquals(URI.create("https://badges.tld/api/tenant.application;" + Badges.dark +
"/" + systemTest.jobName() + ";" + Badges.blue +
"/%20;" + Badges.blue + ";s%7B" + Badges.white + "%7D" +
"/%20;" + Badges.purple + ";s%7B" + Badges.white + "%7D"),
- badges.historic(id, Arrays.asList(success, running)));
+ badges.historic(id, Optional.of(success), Arrays.asList(success, running)));
assertEquals(URI.create("https://badges.tld/api/tenant.application;" + Badges.dark +
"/" + systemTest.jobName() + ";" + Badges.purple +