diff options
author | Valerij Fredriksen <valerij92@gmail.com> | 2021-07-05 14:54:27 +0200 |
---|---|---|
committer | Valerij Fredriksen <valerij92@gmail.com> | 2021-08-11 09:08:51 +0200 |
commit | 3f780cafdea2d10a898856f5f4df19c125a373c1 (patch) | |
tree | 30d074b75560585d04e4b564a3bae3ea03160c99 /controller-server | |
parent | b120c447fa737576df4956e27c8312bba58b3ea1 (diff) |
Remove old job response format
Diffstat (limited to 'controller-server')
5 files changed, 422 insertions, 297 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 c9d21ea86aa..e2f456b33f0 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 @@ -251,7 +251,7 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler { if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/deploying")) return deploying(path.get("tenant"), path.get("application"), path.get("instance"), request); if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/deploying/pin")) return deploying(path.get("tenant"), path.get("application"), path.get("instance"), request); if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/job")) return JobControllerApiHandlerHelper.jobTypeResponse(controller, appIdFromPath(path), request.getUri()); - if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/job/{jobtype}")) return JobControllerApiHandlerHelper.runResponse(controller.jobController().runs(appIdFromPath(path), jobTypeFromPath(path)), Optional.ofNullable(request.getProperty("limit")), request.getUri()); + if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/job/{jobtype}")) return JobControllerApiHandlerHelper.runResponse(controller.jobController().runs(appIdFromPath(path), jobTypeFromPath(path)).descendingMap(), Optional.ofNullable(request.getProperty("limit")), request.getUri()); if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/job/{jobtype}/package")) return devApplicationPackage(appIdFromPath(path), jobTypeFromPath(path)); if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/job/{jobtype}/test-config")) return testConfig(appIdFromPath(path), jobTypeFromPath(path)); if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/job/{jobtype}/run/{number}")) return JobControllerApiHandlerHelper.runDetailsResponse(controller.jobController(), runIdFromPath(path), request.getProperty("after")); diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java index eb9b0e03f3d..260fc9628e9 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java @@ -50,8 +50,6 @@ import java.util.stream.Stream; import static com.yahoo.config.application.api.DeploymentSpec.UpgradePolicy.canary; import static com.yahoo.vespa.hosted.controller.deployment.Step.Status.succeeded; -import static com.yahoo.vespa.hosted.controller.deployment.Step.Status.unfinished; -import static com.yahoo.vespa.hosted.controller.deployment.Step.deployReal; import static com.yahoo.vespa.hosted.controller.deployment.Step.installInitialReal; import static com.yahoo.vespa.hosted.controller.deployment.Step.installReal; import static com.yahoo.vespa.hosted.controller.versions.VespaVersion.Confidence.broken; @@ -92,57 +90,17 @@ class JobControllerApiHandlerHelper { return new SlimeJsonResponse(slime); } - private static void runToSlime(Cursor runObject, Run run, URI baseUriForJobType) { - runObject.setLong("id", run.id().number()); - runObject.setString("status", nameOf(run.status())); - runObject.setLong("start", run.start().toEpochMilli()); - run.end().ifPresent(instant -> runObject.setLong("end", instant.toEpochMilli())); - - versionsToSlime(runObject, run.versions()); - - Cursor stepsObject = runObject.setObject("steps"); - run.steps().forEach((step, info) -> stepsObject.setString(step.name(), info.status().name())); - Cursor tasksObject = runObject.setObject("tasks"); - taskStatus(deployReal, run).ifPresent(status -> tasksObject.setString("deploy", status)); - taskStatus(Step.installReal, run).ifPresent(status -> tasksObject.setString("install", status)); - taskStatus(Step.endTests, run).ifPresent(status -> tasksObject.setString("test", status)); - - runObject.setString("log", baseUriForJobType.resolve(baseUriForJobType.getPath() + "/run/" + run.id().number()).normalize().toString()); - } - - /** Returns the status of the task represented by the given step, if it has started. */ - private static Optional<String> taskStatus(Step step, Run run) { - return run.readySteps().contains(step) ? Optional.of("running") - : Optional.ofNullable(run.steps().get(step)) - .filter(info -> info.status() != unfinished) - .map(info -> info.status().name()); - } - /** Returns a response with the runs for the given job type. */ static HttpResponse runResponse(Map<RunId, Run> runs, Optional<String> limitStr, URI baseUriForJobType) { Slime slime = new Slime(); Cursor cursor = slime.setObject(); - // TODO (freva): Remove after console migrated to use new format - if (limitStr.isEmpty()) - runs.forEach((runid, run) -> runToSlime(cursor.setObject(Long.toString(runid.number())), run, baseUriForJobType)); - else { - int limit = limitStr.map(Integer::parseInt).orElse(Integer.MAX_VALUE); - toSlime(cursor.setArray("runs"), runs.values().stream() - .sorted(Comparator.comparing((Run run) -> run.id().number()).reversed()) - .collect(Collectors.toUnmodifiableList()), limit, baseUriForJobType); - } + int limit = limitStr.map(Integer::parseInt).orElse(Integer.MAX_VALUE); + toSlime(cursor.setArray("runs"), runs.values(), limit, baseUriForJobType); return new SlimeJsonResponse(slime); } - private static void versionsToSlime(Cursor runObject, Versions versions) { - runObject.setString("wantedPlatform", versions.targetPlatform().toString()); - applicationVersionToSlime(runObject.setObject("wantedApplication"), versions.targetApplication()); - versions.sourcePlatform().ifPresent(version -> runObject.setString("currentPlatform", version.toString())); - versions.sourceApplication().ifPresent(version -> applicationVersionToSlime(runObject.setObject("currentApplication"), version)); - } - static void applicationVersionToSlime(Cursor versionObject, ApplicationVersion version) { versionObject.setString("hash", version.id()); if (version.isUnknown()) 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 3348454c6af..ebfd78c2764 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 @@ -805,7 +805,7 @@ public class ApplicationApiTest extends ControllerContainerTest { // GET system test job overview. tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/job/system-test", GET) - .userIdentity(USER_ID).properties(Map.of("limit", "100")), + .userIdentity(USER_ID), new File("system-test-job.json")); // GET system test run 1 details. diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/dev-aws-us-east-2a-runs.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/dev-aws-us-east-2a-runs.json index 3a78f8c44a0..acde58f2a28 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/dev-aws-us-east-2a-runs.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/dev-aws-us-east-2a-runs.json @@ -1,22 +1,29 @@ { - "1": { - "id": 1, - "status": "success", - "start": 14503000, - "end": 14503000, - "wantedPlatform": "7.1", - "wantedApplication": { - "hash": "unknown" - }, - "steps": { - "deployReal": "succeeded", - "installReal": "succeeded", - "copyVespaLogs": "succeeded" - }, - "tasks": { - "deploy": "succeeded", - "install": "succeeded" - }, - "log": "https://some.url:43/root/run/1" - } + "runs": [ + { + "id": 1, + "url": "https://some.url:43/root/run/1", + "start": 14503000, + "end": 14503000, + "status": "success", + "versions": { + "targetPlatform": "7.1.0", + "targetApplication": {} + }, + "steps": [ + { + "name": "deployReal", + "status": "succeeded" + }, + { + "name": "installReal", + "status": "succeeded" + }, + { + "name": "copyVespaLogs", + "status": "succeeded" + } + ] + } + ] } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/staging-runs.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/staging-runs.json index 37ae9e4b56b..a98ae5c678d 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/staging-runs.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/staging-runs.json @@ -1,242 +1,402 @@ { - "1": { - "id": 1, - "status": "success", - "start": 0, - "end": 0, - "wantedPlatform": "6.1", - "wantedApplication": { - "hash": "1.0.1-commit1", - "build": 1, - "source": { - "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" + "runs": [ + { + "id": 1, + "url": "https://some.url:43/root/run/1", + "start": 0, + "end": 0, + "status": "success", + "versions": { + "targetPlatform": "6.1.0", + "targetApplication": { + "build": 1, + "compileVersion": "6.1.0", + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" + } }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" + "steps": [ + { + "name": "deployTester", + "status": "succeeded" + }, + { + "name": "installTester", + "status": "succeeded" + }, + { + "name": "deployInitialReal", + "status": "succeeded" + }, + { + "name": "installInitialReal", + "status": "succeeded" + }, + { + "name": "startStagingSetup", + "status": "succeeded" + }, + { + "name": "endStagingSetup", + "status": "succeeded" + }, + { + "name": "deployReal", + "status": "succeeded" + }, + { + "name": "installReal", + "status": "succeeded" + }, + { + "name": "startTests", + "status": "succeeded" + }, + { + "name": "endTests", + "status": "succeeded" + }, + { + "name": "copyVespaLogs", + "status": "succeeded" + }, + { + "name": "deactivateReal", + "status": "succeeded" + }, + { + "name": "deactivateTester", + "status": "succeeded" + }, + { + "name": "report", + "status": "succeeded" + } + ] }, - "steps": { - "deployTester": "succeeded", - "installTester": "succeeded", - "deployInitialReal": "succeeded", - "installInitialReal": "succeeded", - "startStagingSetup": "succeeded", - "endStagingSetup": "succeeded", - "deployReal": "succeeded", - "installReal": "succeeded", - "startTests": "succeeded", - "endTests": "succeeded", - "copyVespaLogs": "succeeded", - "deactivateReal": "succeeded", - "deactivateTester": "succeeded", - "report": "succeeded" - }, - "tasks": { - "deploy": "succeeded", - "install": "succeeded", - "test": "succeeded" - }, - "log": "https://some.url:43/root/run/1" - }, - "2": { - "id": 2, - "status": "success", - "start": 1000, - "end": 1000, - "wantedPlatform": "6.1", - "wantedApplication": { - "hash": "1.0.2-commit1", - "build": 2, - "source": { - "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" + { + "id": 2, + "url": "https://some.url:43/root/run/2", + "start": 1000, + "end": 1000, + "status": "success", + "versions": { + "targetPlatform": "6.1.0", + "targetApplication": { + "build": 2, + "compileVersion": "6.1.0", + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" + }, + "sourcePlatform": "6.1.0", + "sourceApplication": { + "build": 1, + "compileVersion": "6.1.0", + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" + } }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" + "steps": [ + { + "name": "deployTester", + "status": "succeeded" + }, + { + "name": "installTester", + "status": "succeeded" + }, + { + "name": "deployInitialReal", + "status": "succeeded" + }, + { + "name": "installInitialReal", + "status": "succeeded" + }, + { + "name": "startStagingSetup", + "status": "succeeded" + }, + { + "name": "endStagingSetup", + "status": "succeeded" + }, + { + "name": "deployReal", + "status": "succeeded" + }, + { + "name": "installReal", + "status": "succeeded" + }, + { + "name": "startTests", + "status": "succeeded" + }, + { + "name": "endTests", + "status": "succeeded" + }, + { + "name": "copyVespaLogs", + "status": "succeeded" + }, + { + "name": "deactivateReal", + "status": "succeeded" + }, + { + "name": "deactivateTester", + "status": "succeeded" + }, + { + "name": "report", + "status": "succeeded" + } + ] }, - "currentPlatform": "6.1", - "currentApplication": { - "hash": "1.0.1-commit1", - "build": 1, - "source": { - "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" + { + "id": 3, + "url": "https://some.url:43/root/run/3", + "start": 14403000, + "end": 14403000, + "status": "success", + "versions": { + "targetPlatform": "6.1.0", + "targetApplication": { + "build": 3, + "compileVersion": "6.1.0", + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" + }, + "sourcePlatform": "6.1.0", + "sourceApplication": { + "build": 2, + "compileVersion": "6.1.0", + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" + } }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" - }, - "steps": { - "deployTester": "succeeded", - "installTester": "succeeded", - "deployInitialReal": "succeeded", - "installInitialReal": "succeeded", - "startStagingSetup": "succeeded", - "endStagingSetup": "succeeded", - "deployReal": "succeeded", - "installReal": "succeeded", - "startTests": "succeeded", - "endTests": "succeeded", - "copyVespaLogs": "succeeded", - "deactivateReal": "succeeded", - "deactivateTester": "succeeded", - "report": "succeeded" + "steps": [ + { + "name": "deployTester", + "status": "succeeded" + }, + { + "name": "installTester", + "status": "succeeded" + }, + { + "name": "deployInitialReal", + "status": "succeeded" + }, + { + "name": "installInitialReal", + "status": "succeeded" + }, + { + "name": "startStagingSetup", + "status": "succeeded" + }, + { + "name": "endStagingSetup", + "status": "succeeded" + }, + { + "name": "deployReal", + "status": "succeeded" + }, + { + "name": "installReal", + "status": "succeeded" + }, + { + "name": "startTests", + "status": "succeeded" + }, + { + "name": "endTests", + "status": "succeeded" + }, + { + "name": "copyVespaLogs", + "status": "succeeded" + }, + { + "name": "deactivateReal", + "status": "succeeded" + }, + { + "name": "deactivateTester", + "status": "succeeded" + }, + { + "name": "report", + "status": "succeeded" + } + ] }, - "tasks": { - "deploy": "succeeded", - "install": "succeeded", - "test": "succeeded" - }, - "log": "https://some.url:43/root/run/2" - }, - "3": { - "id": 3, - "status": "success", - "start": 14403000, - "end": 14403000, - "wantedPlatform": "6.1", - "wantedApplication": { - "hash": "1.0.3-commit1", - "build": 3, - "source": { - "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" + { + "id": 4, + "url": "https://some.url:43/root/run/4", + "start": 14403000, + "end": 14403000, + "status": "installationFailed", + "versions": { + "targetPlatform": "6.1.0", + "targetApplication": { + "build": 3, + "compileVersion": "6.1.0", + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" + }, + "sourcePlatform": "6.1.0", + "sourceApplication": { + "build": 1, + "compileVersion": "6.1.0", + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" + } }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" + "steps": [ + { + "name": "deployTester", + "status": "succeeded" + }, + { + "name": "installTester", + "status": "unfinished" + }, + { + "name": "deployInitialReal", + "status": "succeeded" + }, + { + "name": "installInitialReal", + "status": "failed" + }, + { + "name": "startStagingSetup", + "status": "unfinished" + }, + { + "name": "endStagingSetup", + "status": "unfinished" + }, + { + "name": "deployReal", + "status": "unfinished" + }, + { + "name": "installReal", + "status": "unfinished" + }, + { + "name": "startTests", + "status": "unfinished" + }, + { + "name": "endTests", + "status": "unfinished" + }, + { + "name": "copyVespaLogs", + "status": "succeeded" + }, + { + "name": "deactivateReal", + "status": "succeeded" + }, + { + "name": "deactivateTester", + "status": "succeeded" + }, + { + "name": "report", + "status": "succeeded" + } + ] }, - "currentPlatform": "6.1", - "currentApplication": { - "hash": "1.0.2-commit1", - "build": 2, - "source": { - "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" + { + "id": 5, + "url": "https://some.url:43/root/run/5", + "start": 14503000, + "end": 14503000, + "status": "installationFailed", + "versions": { + "targetPlatform": "6.1.0", + "targetApplication": { + "build": 3, + "compileVersion": "6.1.0", + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" + }, + "sourcePlatform": "6.1.0", + "sourceApplication": { + "build": 1, + "compileVersion": "6.1.0", + "sourceUrl": "repository1/tree/commit1", + "commit": "commit1" + } }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" - }, - "steps": { - "deployTester": "succeeded", - "installTester": "succeeded", - "deployInitialReal": "succeeded", - "installInitialReal": "succeeded", - "startStagingSetup": "succeeded", - "endStagingSetup": "succeeded", - "deployReal": "succeeded", - "installReal": "succeeded", - "startTests": "succeeded", - "endTests": "succeeded", - "copyVespaLogs": "succeeded", - "deactivateReal": "succeeded", - "deactivateTester": "succeeded", - "report": "succeeded" - }, - "tasks": { - "deploy": "succeeded", - "install": "succeeded", - "test": "succeeded" - }, - "log": "https://some.url:43/root/run/3" - }, - "4": { - "id": 4, - "status": "installationFailed", - "start": 14403000, - "end": 14403000, - "wantedPlatform": "6.1", - "wantedApplication": { - "hash": "1.0.3-commit1", - "build": 3, - "source": { - "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" - }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" - }, - "currentPlatform": "6.1", - "currentApplication": { - "hash": "1.0.1-commit1", - "build": 1, - "source": { - "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" - }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" - }, - "steps": { - "deployTester": "succeeded", - "installTester": "unfinished", - "deployInitialReal": "succeeded", - "installInitialReal": "failed", - "startStagingSetup": "unfinished", - "endStagingSetup": "unfinished", - "deployReal": "unfinished", - "installReal": "unfinished", - "startTests": "unfinished", - "endTests": "unfinished", - "copyVespaLogs": "succeeded", - "deactivateReal": "succeeded", - "deactivateTester": "succeeded", - "report": "succeeded" - }, - "tasks": {}, - "log": "https://some.url:43/root/run/4" - }, - "5": { - "id": 5, - "status": "installationFailed", - "start": 14503000, - "end": 14503000, - "wantedPlatform": "6.1", - "wantedApplication": { - "hash": "1.0.3-commit1", - "build": 3, - "source": { - "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" - }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" - }, - "currentPlatform": "6.1", - "currentApplication": { - "hash": "1.0.1-commit1", - "build": 1, - "source": { - "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" - }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" - }, - "steps": { - "deployTester": "succeeded", - "installTester": "unfinished", - "deployInitialReal": "succeeded", - "installInitialReal": "failed", - "startStagingSetup": "unfinished", - "endStagingSetup": "unfinished", - "deployReal": "unfinished", - "installReal": "unfinished", - "startTests": "unfinished", - "endTests": "unfinished", - "copyVespaLogs": "succeeded", - "deactivateReal": "succeeded", - "deactivateTester": "succeeded", - "report": "succeeded" - }, - "tasks": {}, - "log": "https://some.url:43/root/run/5" - } + "steps": [ + { + "name": "deployTester", + "status": "succeeded" + }, + { + "name": "installTester", + "status": "unfinished" + }, + { + "name": "deployInitialReal", + "status": "succeeded" + }, + { + "name": "installInitialReal", + "status": "failed" + }, + { + "name": "startStagingSetup", + "status": "unfinished" + }, + { + "name": "endStagingSetup", + "status": "unfinished" + }, + { + "name": "deployReal", + "status": "unfinished" + }, + { + "name": "installReal", + "status": "unfinished" + }, + { + "name": "startTests", + "status": "unfinished" + }, + { + "name": "endTests", + "status": "unfinished" + }, + { + "name": "copyVespaLogs", + "status": "succeeded" + }, + { + "name": "deactivateReal", + "status": "succeeded" + }, + { + "name": "deactivateTester", + "status": "succeeded" + }, + { + "name": "report", + "status": "succeeded" + } + ] + } + ] } |