diff options
author | Jon Marius Venstad <jvenstad@yahoo-inc.com> | 2019-01-07 17:17:42 +0100 |
---|---|---|
committer | Jon Marius Venstad <jvenstad@yahoo-inc.com> | 2019-01-07 17:17:42 +0100 |
commit | dbe19ae207ea7faf5b39b960363bec8b35bf657d (patch) | |
tree | 945c0bd4118312d895f0055f204e6b769ff24a8e /controller-server | |
parent | d28cbfba33057ae487f303f0d388206c6bffd048 (diff) |
Improve logic for last completed
Diffstat (limited to 'controller-server')
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 + |