diff options
author | Jon Bratseth <bratseth@oath.com> | 2018-03-02 09:23:38 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-03-02 09:23:38 +0100 |
commit | a10a644f86db25786bff14fadd92e2609aed994e (patch) | |
tree | 32d701f01d6c145afa03fb9c2e0c1e0bd10ef1d1 | |
parent | 49de666014dcda2581484bebb922d8ac4587f373 (diff) | |
parent | 5e98f0c0068ea14b1b4562e92dab08b573027a7f (diff) |
Merge pull request #5086 from vespa-engine/mpolden/expose-block-change-in-api
Expose change blockers in application API
6 files changed, 79 insertions, 7 deletions
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 d3edd1c0ca5..368fd323fb0 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 @@ -89,6 +89,7 @@ import java.io.InputStream; import java.net.URI; import java.net.URISyntaxException; import java.security.Principal; +import java.time.DayOfWeek; import java.time.Duration; import java.util.Collections; import java.util.List; @@ -375,6 +376,19 @@ public class ApplicationApiHandler extends LoggingRequestHandler { job.lastSuccess().ifPresent(jobRun -> toSlime(jobRun, jobObject.setObject("lastSuccess"))); } + // Change blockers + Cursor changeBlockers = object.setArray("changeBlockers"); + application.deploymentSpec().changeBlocker().forEach(changeBlocker -> { + Cursor changeBlockerObject = changeBlockers.addObject(); + changeBlockerObject.setBool("versions", changeBlocker.blocksVersions()); + changeBlockerObject.setBool("revisions", changeBlocker.blocksRevisions()); + changeBlockerObject.setString("timeZone", changeBlocker.window().zone().getId()); + Cursor days = changeBlockerObject.setArray("days"); + changeBlocker.window().days().stream().map(DayOfWeek::getValue).forEach(days::addLong); + Cursor hours = changeBlockerObject.setArray("hours"); + changeBlocker.window().hours().forEach(hours::addLong); + }); + // Compile version. The version that should be used when building an application object.setString("compileVersion", application.oldestDeployedVersion().orElse(controller.systemVersion()).toFullString()); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerTester.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerTester.java index be987e84cd8..c3dc80c65df 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerTester.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerTester.java @@ -14,7 +14,6 @@ import com.yahoo.jdisc.http.filter.SecurityRequestFilterChain; import com.yahoo.slime.ArrayTraverser; import com.yahoo.slime.Inspector; import com.yahoo.slime.Slime; -import com.yahoo.slime.Type; import com.yahoo.vespa.config.SlimeUtils; import com.yahoo.vespa.hosted.controller.Controller; import com.yahoo.vespa.hosted.controller.versions.VersionStatus; @@ -152,12 +151,19 @@ public class ContainerTester { if ( ! fieldsToCensor.contains(fieldName)) return; String fromString; - if ( fieldValue.type().equals(Type.STRING)) - fromString = "\"" + fieldName + "\":\"" + fieldValue.asString() + "\""; - else if ( fieldValue.type().equals(Type.LONG)) - fromString = "\"" + fieldName + "\":" + fieldValue.asLong(); - else - throw new IllegalArgumentException("Can only censor strings and longs"); + switch (fieldValue.type()) { + case STRING: + fromString = "\"" + fieldName + "\":\"" + fieldValue.asString() + "\""; + break; + case LONG: + fromString = "\"" + fieldName + "\":" + fieldValue.asLong(); + break; + case BOOL: + fromString = "\"" + fieldName + "\":" + fieldValue.asBool(); + break; + default: + throw new IllegalArgumentException("Can only censor strings, longs and booleans"); + } String toString = "\"" + fieldName + "\":\"(ignore)\""; replaceStrings.add(new Pair<>(fromString, toString)); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java index 4a263bf1fbd..4b59e57fd5a 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java @@ -87,6 +87,7 @@ public class ApplicationApiTest extends ControllerContainerTest { .region("corp-us-east-1") .region("us-east-3") .region("us-west-1") + .blockChange(false, true, "mon-fri", "0-8", "UTC") .build(); private static final AthenzDomain ATHENZ_TENANT_DOMAIN = new AthenzDomain("domain1"); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application-without-change-multiple-deployments.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application-without-change-multiple-deployments.json index d3b765551f0..9cd9329e36f 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application-without-change-multiple-deployments.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application-without-change-multiple-deployments.json @@ -219,6 +219,7 @@ } } ], + "changeBlockers": [], "compileVersion": "(ignore)", "globalRotations": [ "http://application1.tenant1.global.vespa.yahooapis.com:4080/", diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application.json index 155166dea4c..29d23034053 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application.json @@ -183,6 +183,31 @@ } } ], + "changeBlockers": [ + { + "versions": true, + "revisions": false, + "timeZone": "UTC", + "days": [ + 1, + 2, + 3, + 4, + 5 + ], + "hours": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ] + } + ], "compileVersion": "(ignore)", "globalRotations": [ "http://application1.tenant1.global.vespa.yahooapis.com:4080/", diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application1-recursive.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application1-recursive.json index 35124adbf68..a1414fa3511 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application1-recursive.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application1-recursive.json @@ -183,6 +183,31 @@ } } ], + "changeBlockers": [ + { + "versions": true, + "revisions": false, + "timeZone": "UTC", + "days": [ + 1, + 2, + 3, + 4, + 5 + ], + "hours": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ] + } + ], "compileVersion": "(ignore)", "globalRotations": [ "http://application1.tenant1.global.vespa.yahooapis.com:4080/", |