From 650eba270a16e150d9d7b47cb90791465725909f Mon Sep 17 00:00:00 2001 From: Jon Marius Venstad Date: Mon, 24 Aug 2020 11:20:48 +0200 Subject: Remove unused parts of API response, and code generating it --- .../application/JobControllerApiHandlerHelper.java | 302 +------ .../application/responses/dev-overview.json | 47 +- .../responses/jobs-direct-deployment.json | 5 - .../restapi/application/responses/jobs.json | 350 -------- .../responses/overview-user-instance.json | 68 +- .../restapi/application/responses/overview.json | 947 --------------------- 6 files changed, 17 insertions(+), 1702 deletions(-) (limited to 'controller-server/src') 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 0e25ee1fe85..2f0a462c69f 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 @@ -1,14 +1,9 @@ // Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.restapi.application; -import com.google.common.base.Joiner; -import com.yahoo.component.Version; -import com.yahoo.config.application.api.DeploymentInstanceSpec; import com.yahoo.config.application.api.DeploymentSpec; import com.yahoo.config.application.api.DeploymentSpec.ChangeBlocker; import com.yahoo.config.provision.ApplicationId; -import com.yahoo.config.provision.SystemName; -import com.yahoo.config.provision.zone.ZoneId; import com.yahoo.container.jdisc.HttpResponse; import com.yahoo.restapi.MessageResponse; import com.yahoo.restapi.SlimeJsonResponse; @@ -16,7 +11,6 @@ import com.yahoo.slime.Cursor; import com.yahoo.slime.Slime; import com.yahoo.vespa.hosted.controller.Application; import com.yahoo.vespa.hosted.controller.Controller; -import com.yahoo.vespa.hosted.controller.Instance; import com.yahoo.vespa.hosted.controller.NotExistsException; import com.yahoo.vespa.hosted.controller.api.integration.LogEntry; import com.yahoo.vespa.hosted.controller.api.integration.deployment.ApplicationVersion; @@ -26,13 +20,10 @@ import com.yahoo.vespa.hosted.controller.api.integration.deployment.RunId; import com.yahoo.vespa.hosted.controller.api.integration.deployment.SourceRevision; import com.yahoo.vespa.hosted.controller.application.ApplicationPackage; import com.yahoo.vespa.hosted.controller.application.Change; -import com.yahoo.vespa.hosted.controller.application.Deployment; import com.yahoo.vespa.hosted.controller.application.TenantAndApplicationId; import com.yahoo.vespa.hosted.controller.deployment.ConvergenceSummary; import com.yahoo.vespa.hosted.controller.deployment.DeploymentStatus; -import com.yahoo.vespa.hosted.controller.deployment.DeploymentSteps; import com.yahoo.vespa.hosted.controller.deployment.JobController; -import com.yahoo.vespa.hosted.controller.deployment.JobList; import com.yahoo.vespa.hosted.controller.deployment.JobStatus; import com.yahoo.vespa.hosted.controller.deployment.Run; import com.yahoo.vespa.hosted.controller.deployment.RunLog; @@ -44,35 +35,22 @@ import com.yahoo.vespa.hosted.controller.versions.VespaVersion; import java.net.URI; import java.time.Instant; import java.time.format.TextStyle; -import java.util.ArrayDeque; import java.util.Arrays; import java.util.Collection; -import java.util.Comparator; -import java.util.Deque; -import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Optional; -import java.util.stream.Collectors; import java.util.stream.Stream; import static com.yahoo.config.application.api.DeploymentSpec.UpgradePolicy.canary; -import static com.yahoo.config.application.api.DeploymentSpec.UpgradePolicy.conservative; -import static com.yahoo.config.application.api.DeploymentSpec.UpgradePolicy.defaultPolicy; -import static com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType.stagingTest; -import static com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType.systemTest; 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; -import static com.yahoo.vespa.hosted.controller.versions.VespaVersion.Confidence.high; import static com.yahoo.vespa.hosted.controller.versions.VespaVersion.Confidence.normal; -import static java.util.stream.Collectors.groupingBy; -import static java.util.stream.Collectors.toList; -import static java.util.stream.Collectors.toMap; /** * Implements the REST API for the job controller delegated from the Application API. @@ -89,104 +67,13 @@ class JobControllerApiHandlerHelper { * @return Response with all job types that have recorded runs for the application _and_ the status for the last run of that type */ static HttpResponse jobTypeResponse(Controller controller, ApplicationId id, URI baseUriForJobs) { - Application application = controller.applications().requireApplication(TenantAndApplicationId.from(id)); - DeploymentStatus deploymentStatus = controller.jobController().deploymentStatus(application); - Instance instance = application.require(id.instance()); - Change change = instance.change(); - Optional spec = application.deploymentSpec().instance(id.instance()); - Optional steps = spec.map(s -> new DeploymentSteps(s, controller::system)); - List jobs = deploymentStatus.jobSteps().keySet().stream() - .filter(jobId -> id.equals(jobId.application())) - .map(JobId::type) - .collect(Collectors.toUnmodifiableList()); - List productionJobs = jobs.stream() - .filter(JobType::isProduction) - .collect(Collectors.toUnmodifiableList()); - Map status = deploymentStatus.instanceJobs(id.instance()); - - // The logic for pending runs imitates DeploymentTrigger logic; not good, but the trigger wiring must be re-written to reuse :S - Map pendingProduction = - productionJobs.stream() - .filter(type -> ! controller.applications().deploymentTrigger().isComplete(change, change, instance, type, status.get(type))) - .collect(Collectors.toMap(type -> type, - type -> Versions.from(change, - application, - Optional.ofNullable(instance.deployments().get(type.zone(controller.system()))), - controller.systemVersion()), - (v1, v2) -> { throw new IllegalStateException("Entries '" + v1 + "' and '" + v2 + "' have the same key!"); }, - LinkedHashMap::new)); - - Map running = jobs.stream() - .map(type -> controller.jobController().last(id, type)) - .flatMap(Optional::stream) - .filter(run -> ! run.hasEnded()) - .collect(toMap(run -> run.id().type(), - run -> run)); - Slime slime = new Slime(); Cursor responseObject = slime.setObject(); - Cursor lastVersionsObject = responseObject.setObject("lastVersions"); - if (application.latestVersion().isPresent()) { - lastPlatformToSlime(lastVersionsObject.setObject("platform"), controller, application, instance, status, change, productionJobs, spec); - lastApplicationToSlime(lastVersionsObject.setObject("application"), application, instance, status, change, productionJobs, controller); - } - - Cursor deployingObject = responseObject.setObject("deploying"); - if ( ! change.isEmpty()) { - change.platform().ifPresent(version -> deployingObject.setString("platform", version.toString())); - change.application().ifPresent(version -> applicationVersionToSlime(deployingObject.setObject("application"), version)); - } - - Cursor deploymentsArray = responseObject.setArray("deployments"); - steps.ifPresent(deploymentSteps -> deploymentSteps.production().forEach(step -> { - if (step.isTest()) return; - Cursor deploymentsObject = deploymentsArray.addObject(); - deploymentSteps.toJobs(step).forEach(type -> { - ZoneId zone = type.zone(controller.system()); - Deployment deployment = instance.deployments().get(zone); - if (deployment != null) - deploymentToSlime(deploymentsObject.setObject(zone.region().value()), - change, - pendingProduction, - running, - type, - status.get(type), - deployment); - }); - })); - - Cursor jobsObject = responseObject.setObject("jobs"); - steps.ifPresent(deploymentSteps -> jobs.forEach(type -> { - jobTypeToSlime(jobsObject.setObject(shortNameOf(type, controller.system())), - controller, - application, - instance, - status, - type, - deploymentSteps, - pendingProduction, - running, - baseUriForJobs.resolve(baseUriForJobs.getPath() + "/" + type.jobName()).normalize()); - })); - - Cursor devJobsObject = responseObject.setObject("devJobs"); - for (JobType type : JobType.allIn(controller.system())) - if ( type.environment() != null - && type.environment().isManuallyDeployed()) - controller.jobController().last(instance.id(), type) - .ifPresent(last -> { - Cursor devJobObject = devJobsObject.setObject(type.jobName()); - runToSlime(devJobObject.setArray("runs").addObject(), - last, - baseUriForJobs.resolve(baseUriForJobs.getPath() + "/" + type.jobName()).normalize()); - devJobObject.setString("url", baseUriForJobs.resolve(baseUriForJobs.getPath() + "/" + type.jobName()).normalize().toString()); - }); - Cursor jobsArray = responseObject.setArray("deployment"); Arrays.stream(JobType.values()) .filter(type -> type.environment().isManuallyDeployed()) - .map(devType -> new JobId(instance.id(), devType)) + .map(devType -> new JobId(id, devType)) .forEach(job -> { Collection runs = controller.jobController().runs(job).descendingMap().values(); if (runs.isEmpty()) @@ -200,193 +87,6 @@ class JobControllerApiHandlerHelper { return new SlimeJsonResponse(slime); } - private static void lastPlatformToSlime(Cursor lastPlatformObject, Controller controller, Application application, - Instance instance, Map status, Change change, - List productionJobs, Optional instanceSpec) { - VespaVersion lastVespa = controller.versionStatus().version(controller.systemVersion()); - VespaVersion.Confidence targetConfidence = instanceSpec.map(spec -> Map.of(defaultPolicy, normal, - conservative, high) - .getOrDefault(spec.upgradePolicy(), broken)) - .orElse(normal); - for (VespaVersion version : controller.versionStatus().versions()) - if ( ! version.versionNumber().isAfter(controller.systemVersion()) - && version.confidence().equalOrHigherThan(targetConfidence)) - lastVespa = version; - - Version lastPlatform = lastVespa.versionNumber(); - lastPlatformObject.setString("platform", lastPlatform.toString()); - lastPlatformObject.setLong("at", lastVespa.committedAt().toEpochMilli()); - long completed = productionJobs.stream() - .filter(type -> ! type.isTest()) - .filter(type -> controller.applications().deploymentTrigger().isComplete(Change.of(lastPlatform), change.withoutPlatform().withoutPin().with(lastPlatform), instance, type, status.get(type))) - .count(); - long total = productionJobs.stream().filter(type -> ! type.isTest()).count(); - if (Optional.of(lastPlatform).equals(change.platform())) - lastPlatformObject.setString("deploying", completed + " of " + total + " complete"); - else if (completed == total) - lastPlatformObject.setString("completed", completed + " of " + total + " complete"); - else if ( ! application.deploymentSpec().requireInstance(instance.name()).canUpgradeAt(controller.clock().instant())) { - lastPlatformObject.setString("blocked", application.deploymentSpec().instances().stream() - .flatMap(spec -> spec.changeBlocker().stream()) - .filter(blocker -> blocker.blocksVersions()) - .filter(blocker -> blocker.window().includes(controller.clock().instant())) - .findAny().map(blocker -> blocker.window().toString()).get()); - } - else - lastPlatformObject.setString("pending", - instance.change().isEmpty() - ? "Waiting for upgrade slot" - : "Waiting for " + instance.change() + " to complete"); - } - - private static void lastApplicationToSlime(Cursor lastApplicationObject, Application application, Instance instance, Map status, Change change, List productionJobs, Controller controller) { - ApplicationVersion lastApplication = application.latestVersion().get(); - applicationVersionToSlime(lastApplicationObject.setObject("application"), lastApplication); - lastApplicationObject.setLong("at", lastApplication.buildTime().get().toEpochMilli()); - long completed = productionJobs.stream() - .filter(type -> ! type.isTest()) - .filter(type -> controller.applications().deploymentTrigger().isComplete(Change.of(lastApplication), change.withoutApplication().with(lastApplication), instance, type, status.get(type))) - .count(); - long total = productionJobs.stream().filter(type -> ! type.isTest()).count(); - if (Optional.of(lastApplication).equals(change.application())) - lastApplicationObject.setString("deploying", completed + " of " + total + " complete"); - else if (completed == total) - lastApplicationObject.setString("completed", completed + " of " + total + " complete"); - else if ( ! application.deploymentSpec().instances().stream() - .allMatch(spec -> spec.canChangeRevisionAt(controller.clock().instant()))) { - lastApplicationObject.setString("blocked", application.deploymentSpec().instances().stream() - .flatMap(spec -> spec.changeBlocker().stream()) - .filter(blocker -> blocker.blocksRevisions()) - .filter(blocker -> blocker.window().includes(controller.clock().instant())) - .findAny().map(blocker -> blocker.window().toString()).get()); - } - else - lastApplicationObject.setString("pending", "Waiting for current deployment to complete"); - } - - private static void deploymentToSlime(Cursor deploymentObject, Change change, - Map pendingProduction, Map running, - JobType type, JobStatus jobStatus, Deployment deployment) { - deploymentObject.setLong("at", deployment.at().toEpochMilli()); - deploymentObject.setString("platform", deployment.version().toString()); - applicationVersionToSlime(deploymentObject.setObject("application"), deployment.applicationVersion()); - deploymentObject.setBool("verified", jobStatus.lastSuccess() - .map(Run::versions) - .filter(run -> run.targetPlatform().equals(deployment.version()) - && run.targetApplication().equals(deployment.applicationVersion())) - .isPresent()); - if (running.containsKey(type)) - deploymentObject.setString("status", running.get(type).stepStatus(deployReal).equals(Optional.of(unfinished)) ? "deploying" : "verifying"); - else if (change.hasTargets()) - deploymentObject.setString("status", pendingProduction.containsKey(type) ? "pending" : "completed"); - } - - private static void jobTypeToSlime(Cursor jobObject, Controller controller, Application application, Instance instance, - Map status, JobType type, DeploymentSteps steps, - Map pendingProduction, Map running, URI baseUriForJob) { - instance.jobPause(type).ifPresent(until -> jobObject.setLong("pausedUntil", until.toEpochMilli())); - int runs = 0; - Cursor runArray = jobObject.setArray("runs"); - JobList jobList = JobList.from(status.values()); - if (type.environment().isTest()) { - Deque> pending = new ArrayDeque<>(); - pendingProduction.entrySet().stream() - .filter(typeVersions -> jobList.type(type).successOn(typeVersions.getValue()).isEmpty()) - .filter(typeVersions -> jobList.production().triggeredOn(typeVersions.getValue()).isEmpty()) - .collect(groupingBy(Map.Entry::getValue, - LinkedHashMap::new, - Collectors.mapping(Map.Entry::getKey, toList()))) - .forEach((versions, types) -> pending.addFirst(types)); - for (List productionTypes : pending) { - Versions versions = pendingProduction.get(productionTypes.get(0)); - if (statusOf(controller, instance.id(), type, versions).equals("running")) - continue; - - runs++; - Cursor runObject = runArray.addObject(); - runObject.setString("status", "pending"); - versionsToSlime(runObject, versions); - if ( ! controller.applications().deploymentTrigger().triggerAt(controller.clock().instant(), type, status.get(type), versions, instance, application.deploymentSpec())) - runObject.setObject("tasks").setString("cooldown", "failed"); - else - runObject.setObject("tasks").setString("capacity", "running"); - - runObject.setString("reason", "Testing for " + Joiner.on(", ").join(productionTypes)); - } - } - else if ( pendingProduction.containsKey(type) - && ! running.containsKey(type)) { - Versions versions = pendingProduction.get(type); - runs++; - Cursor runObject = runArray.addObject(); - runObject.setString("status", "pending"); - versionsToSlime(runObject, pendingProduction.get(type)); - Cursor pendingObject = runObject.setObject("tasks"); - if (instance.jobPauses().containsKey(type)) - pendingObject.setString("paused", "pending"); - else if ( ! controller.applications().deploymentTrigger().triggerAt(controller.clock().instant(), type, status.get(type), versions, instance, application.deploymentSpec())) - pendingObject.setString("cooldown", "failed"); - else { - int pending = 0; - controller.applications().deploymentTrigger(); - if (jobList.production().triggeredOn(versions).isEmpty()) { - if (jobList.type(systemTest).successOn(versions).isEmpty()) { - pending++; - pendingObject.setString(shortNameOf(systemTest, controller.system()), statusOf(controller, instance.id(), systemTest, versions)); - } - if (jobList.type(stagingTest).successOn(versions).isEmpty()) { - pending++; - pendingObject.setString(shortNameOf(stagingTest, controller.system()), statusOf(controller, instance.id(), stagingTest, versions)); - } - } - steps: for (DeploymentSpec.Step step : steps.production()) { - if (steps.toJobs(step).contains(type)) - break; - for (JobType stepType : steps.toJobs(step)) { - if (pendingProduction.containsKey(stepType)) { - Versions jobVersions = Versions.from(instance.change(), - application, - Optional.ofNullable(instance.deployments().get(stepType.zone(controller.system()))), - controller.systemVersion()); - pendingObject.setString(shortNameOf(stepType, controller.system()), statusOf(controller, instance.id(), stepType, jobVersions)); - if (++pending == 3) - break steps; - } - } - } - if (pending == 0) - pendingObject.setString("delay", "running"); - } - } - - controller.jobController().runs(instance.id(), type).values().stream() - .sorted(Comparator.comparing(run -> -run.id().number())) - .limit(Math.max(0, 10 - runs)) - .forEach(run -> runToSlime(runArray.addObject(), run, baseUriForJob)); - - jobObject.setString("url", baseUriForJob.toString()); - } - - private static String statusOf(Controller controller, ApplicationId id, JobType type, Versions versions) { - return controller.jobController().last(id, type) - .filter(run -> run.versions().targetsMatch(versions)) - .filter(run -> type != stagingTest || run.versions().sourcesMatchIfPresent(versions)) - .map(JobControllerApiHandlerHelper::taskStatusOf) - .orElse("pending"); - } - - private static String shortNameOf(JobType type, SystemName system) { - return type.jobName().replaceFirst("production-", ""); - } - - private static String taskStatusOf(Run run) { - switch (run.status()) { - case running: return "running"; - case success: return "succeeded"; - default: return "failed"; - } - } - private static void runToSlime(Cursor runObject, Run run, URI baseUriForJobType) { runObject.setLong("id", run.id().number()); runObject.setString("status", nameOf(run.status())); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/dev-overview.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/dev-overview.json index b37d0d41ae4..e3beb371acd 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/dev-overview.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/dev-overview.json @@ -1,49 +1,16 @@ { - "lastVersions": {}, - "deploying": {}, - "deployments": [], - "jobs": {}, - "devJobs": { - "dev-us-east-1": { - "runs": [ - { - "id": 1, - "status": "success", - "start": 0, - "end": 0, - "wantedPlatform": "6.1", - "wantedApplication": { - "hash": "unknown" - }, - "steps": { - "deployReal": "succeeded", - "installReal": "succeeded", - "copyVespaLogs": "succeeded" - }, - "tasks": { - "deploy": "succeeded", - "install": "succeeded" - }, - "log": "https://some.url:43/root/dev-us-east-1/run/1" - } - ], - "url": "https://some.url:43/root/dev-us-east-1" - } - }, "deployment": [ { "jobName": "dev-us-east-1", "runs": [ { - "id": 1, - "url": "https://some.url:43/root/run/1", - "start": 0, - "end": 0, - "status": "success", "versions": { - "targetPlatform": "6.1.0", - "targetApplication": {} + "targetApplication": {}, + "targetPlatform": "6.1.0" }, + "start": 0, + "end": 0, + "id": 1, "steps": [ { "name": "deployReal", @@ -57,7 +24,9 @@ "name": "copyVespaLogs", "status": "succeeded" } - ] + ], + "url": "https://some.url:43/root/run/1", + "status": "success" } ] } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs-direct-deployment.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs-direct-deployment.json index 1e43c6e2953..25f6ed21466 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs-direct-deployment.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs-direct-deployment.json @@ -1,8 +1,3 @@ { - "lastVersions": {}, - "deploying": {}, - "deployments": [], - "jobs": {}, - "devJobs": {}, "deployment": [] } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs.json index b16ca4cc67c..9a742a9b176 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs.json @@ -1,354 +1,4 @@ { - "lastVersions": { - "platform": { - "platform": "6.1", - "at": "(ignore)", - "pending": "Waiting for application change to 1.0.4-commit1 to complete" - }, - "application": { - "application": { - "hash": "1.0.4-commit1", - "build": 4, - "source": { - "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" - }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" - }, - "at": 1000, - "deploying": "0 of 3 complete" - } - }, - "deploying": { - "application": { - "hash": "1.0.4-commit1", - "build": 4, - "source": { - "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" - }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" - } - }, - "deployments": [ - {}, - {} - ], - "jobs": { - "system-test": { - "runs": [ - { - "id": 2, - "status": "running", - "start": "(ignore)", - "wantedPlatform": "6.1", - "wantedApplication": { - "hash": "1.0.4-commit1", - "build": 4, - "source": { - "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" - }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" - }, - "steps": { - "deployTester": "unfinished", - "installTester": "unfinished", - "deployReal": "unfinished", - "installReal": "unfinished", - "startTests": "unfinished", - "endTests": "unfinished", - "copyVespaLogs": "unfinished", - "deactivateReal": "unfinished", - "deactivateTester": "unfinished", - "report": "unfinished" - }, - "tasks": {}, - "log": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/system-test/run/2" - }, - { - "id": 1, - "status": "success", - "start": "(ignore)", - "end": "(ignore)", - "wantedPlatform": "6.1", - "wantedApplication": { - "hash": "1.0.1-commit1", - "build": 1, - "source": { - "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" - }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" - }, - "steps": { - "deployTester": "succeeded", - "installTester": "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": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/system-test/run/1" - } - ], - "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/system-test" - }, - "staging-test": { - "runs": [ - { - "id": 2, - "status": "running", - "start": "(ignore)", - "wantedPlatform": "6.1", - "wantedApplication": { - "hash": "1.0.4-commit1", - "build": 4, - "source": { - "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" - }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" - }, - "steps": { - "deployTester": "unfinished", - "installTester": "unfinished", - "deployInitialReal": "unfinished", - "installInitialReal": "unfinished", - "startStagingSetup": "unfinished", - "endStagingSetup": "unfinished", - "deployReal": "unfinished", - "installReal": "unfinished", - "startTests": "unfinished", - "endTests": "unfinished", - "copyVespaLogs": "unfinished", - "deactivateReal": "unfinished", - "deactivateTester": "unfinished", - "report": "unfinished" - }, - "tasks": {}, - "log": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/staging-test/run/2" - }, - { - "id": 1, - "status": "success", - "start": "(ignore)", - "end": "(ignore)", - "wantedPlatform": "6.1", - "wantedApplication": { - "hash": "1.0.1-commit1", - "build": 1, - "source": { - "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "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": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/staging-test/run/1" - } - ], - "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/staging-test" - }, - "us-central-1": { - "runs": [ - { - "status": "pending", - "wantedPlatform": "6.1", - "wantedApplication": { - "hash": "1.0.4-commit1", - "build": 4, - "source": { - "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" - }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" - }, - "tasks": { - "system-test": "running", - "staging-test": "running" - } - }, - { - "id": 1, - "status": "success", - "start": "(ignore)", - "end": "(ignore)", - "wantedPlatform": "6.1", - "wantedApplication": { - "hash": "1.0.1-commit1", - "build": 1, - "source": { - "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" - }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" - }, - "steps": { - "deployReal": "succeeded", - "installReal": "succeeded", - "report": "succeeded" - }, - "tasks": { - "deploy": "succeeded", - "install": "succeeded" - }, - "log": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/production-us-central-1/run/1" - } - ], - "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/production-us-central-1" - }, - "us-west-1": { - "runs": [ - { - "id": 1, - "status": "aborted", - "start": "(ignore)", - "wantedPlatform": "6.1", - "wantedApplication": { - "hash": "1.0.1-commit1", - "build": 1, - "source": { - "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" - }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" - }, - "steps": { - "deployReal": "unfinished", - "installReal": "unfinished", - "report": "unfinished" - }, - "tasks": {}, - "log": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/production-us-west-1/run/1" - } - ], - "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/production-us-west-1" - }, - "us-east-3": { - "runs": [ - { - "id": 2, - "status": "aborted", - "start": "(ignore)", - "wantedPlatform": "6.1", - "wantedApplication": { - "hash": "1.0.1-commit1", - "build": 1, - "source": { - "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" - }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" - }, - "steps": { - "deployReal": "unfinished", - "installReal": "unfinished", - "report": "unfinished" - }, - "tasks": {}, - "log": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/production-us-east-3/run/2" - }, - { - "id": 1, - "status": "success", - "start": "(ignore)", - "end": "(ignore)", - "wantedPlatform": "6.1", - "wantedApplication": { - "hash": "unknown" - }, - "steps": { - "deployReal": "succeeded", - "installReal": "succeeded", - "copyVespaLogs": "succeeded" - }, - "tasks": { - "deploy": "succeeded", - "install": "succeeded" - }, - "log": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/production-us-east-3/run/1" - } - ], - "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/production-us-east-3" - } - }, - "devJobs": { - "dev-us-east-1": { - "runs": [ - { - "id": 1, - "status": "success", - "start": "(ignore)", - "end": "(ignore)", - "wantedPlatform": "6.1", - "wantedApplication": { - "hash": "unknown" - }, - "steps": { - "deployReal": "succeeded", - "installReal": "succeeded", - "copyVespaLogs": "succeeded" - }, - "tasks": { - "deploy": "succeeded", - "install": "succeeded" - }, - "log": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/dev-us-east-1/run/1" - } - ], - "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/dev-us-east-1" - } - }, "deployment": [ { "jobName": "dev-us-east-1", diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview-user-instance.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview-user-instance.json index d46b396b8cd..285e7f14e8f 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview-user-instance.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview-user-instance.json @@ -1,70 +1,16 @@ { - "lastVersions": { - "platform": { - "platform": "7.1", - "at": 0, - "completed": "0 of 0 complete" - }, - "application": { - "application": { - "hash": "1.0.3-commit1", - "build": 3, - "source": { - "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" - }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" - }, - "at": 1000, - "completed": "0 of 0 complete" - } - }, - "deploying": {}, - "deployments": [], - "jobs": {}, - "devJobs": { - "dev-aws-us-east-2a": { - "runs": [ - { - "id": 1, - "status": "success", - "start": 7303000, - "end": 7303000, - "wantedPlatform": "7.1", - "wantedApplication": { - "hash": "unknown" - }, - "steps": { - "deployReal": "succeeded", - "installReal": "succeeded", - "copyVespaLogs": "succeeded" - }, - "tasks": { - "deploy": "succeeded", - "install": "succeeded" - }, - "log": "https://some.url:43/root/dev-aws-us-east-2a/run/1" - } - ], - "url": "https://some.url:43/root/dev-aws-us-east-2a" - } - }, "deployment": [ { "jobName": "dev-aws-us-east-2a", "runs": [ { - "id": 1, - "url": "https://some.url:43/root//run/1", - "start": 7303000, - "end": 7303000, - "status": "success", "versions": { - "targetPlatform": "7.1.0", - "targetApplication": {} + "targetApplication": {}, + "targetPlatform": "7.1.0" }, + "start": 7303000, + "end": 7303000, + "id": 1, "steps": [ { "name": "deployReal", @@ -78,7 +24,9 @@ "name": "copyVespaLogs", "status": "succeeded" } - ] + ], + "url": "https://some.url:43/root//run/1", + "status": "success" } ] } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview.json index 2c43aa45d06..25f6ed21466 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview.json @@ -1,950 +1,3 @@ { - "lastVersions": { - "platform": { - "platform": "7.1", - "at": 0, - "pending": "Waiting for application change to 1.0.3-commit1 to complete" - }, - "application": { - "application": { - "hash": "1.0.3-commit1", - "build": 3, - "source": { - "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" - }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" - }, - "at": 1000, - "deploying": "0 of 3 complete" - } - }, - "deploying": { - "application": { - "hash": "1.0.3-commit1", - "build": 3, - "source": { - "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" - }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" - } - }, - "deployments": [ - { - "us-central-1": { - "at": 7203000, - "platform": "6.1", - "application": { - "hash": "1.0.3-commit1", - "build": 3, - "source": { - "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" - }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" - }, - "verified": false, - "status": "verifying" - } - }, - { - "us-west-1": { - "at": 1000, - "platform": "6.1", - "application": { - "hash": "1.0.2-commit1", - "build": 2, - "source": { - "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" - }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" - }, - "verified": false, - "status": "pending" - }, - "us-east-3": { - "at": 0, - "platform": "6.1", - "application": { - "hash": "1.0.1-commit1", - "build": 1, - "source": { - "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" - }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" - }, - "verified": true, - "status": "pending" - } - } - ], - "jobs": { - "system-test": { - "runs": [ - { - "id": 3, - "status": "success", - "start": 7203000, - "end": 7203000, - "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.2-commit1", - "build": 2, - "source": { - "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" - }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" - }, - "steps": { - "deployTester": "succeeded", - "installTester": "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/system-test/run/3" - }, - { - "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" - }, - "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": "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/system-test/run/2" - }, - { - "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" - }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" - }, - "steps": { - "deployTester": "succeeded", - "installTester": "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/system-test/run/1" - } - ], - "url": "https://some.url:43/root/system-test" - }, - "staging-test": { - "runs": [ - { - "status": "pending", - "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" - }, - "tasks": { - "cooldown": "failed" - }, - "reason": "Testing for productionUsEast3" - }, - { - "id": 5, - "status": "installationFailed", - "start": 7303000, - "end": 7303000, - "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/staging-test/run/5" - }, - { - "id": 4, - "status": "installationFailed", - "start": 7203000, - "end": 7203000, - "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/staging-test/run/4" - }, - { - "id": 3, - "status": "success", - "start": 7203000, - "end": 7203000, - "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.2-commit1", - "build": 2, - "source": { - "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "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/staging-test/run/3" - }, - { - "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" - }, - "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": "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/staging-test/run/2" - }, - { - "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" - }, - "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/staging-test/run/1" - } - ], - "url": "https://some.url:43/root/staging-test" - }, - "us-central-1": { - "runs": [ - { - "id": 3, - "status": "running", - "start": 7203000, - "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.2-commit1", - "build": 2, - "source": { - "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" - }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" - }, - "steps": { - "deployReal": "succeeded", - "installReal": "unfinished", - "report": "unfinished" - }, - "tasks": { - "deploy": "succeeded", - "install": "running" - }, - "log": "https://some.url:43/root/production-us-central-1/run/3" - }, - { - "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" - }, - "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": { - "deployReal": "succeeded", - "installReal": "succeeded", - "report": "succeeded" - }, - "tasks": { - "deploy": "succeeded", - "install": "succeeded" - }, - "log": "https://some.url:43/root/production-us-central-1/run/2" - }, - { - "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" - }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" - }, - "steps": { - "deployReal": "succeeded", - "installReal": "succeeded", - "report": "succeeded" - }, - "tasks": { - "deploy": "succeeded", - "install": "succeeded" - }, - "log": "https://some.url:43/root/production-us-central-1/run/1" - } - ], - "url": "https://some.url:43/root/production-us-central-1" - }, - "test-us-central-1": { - "runs": [ - { - "status": "pending", - "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.3-commit1", - "build": 3, - "source": { - "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" - }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" - }, - "tasks": { - "us-central-1": "running", - "us-west-1": "pending", - "us-east-3": "pending" - } - }, - { - "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" - }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" - }, - "currentPlatform": "6.1", - "currentApplication": { - "hash": "1.0.2-commit1", - "build": 2, - "source": { - "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" - }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" - }, - "steps": { - "deployTester": "succeeded", - "installTester": "succeeded", - "startTests": "succeeded", - "endTests": "succeeded", - "deactivateTester": "succeeded", - "report": "succeeded" - }, - "tasks": { - "test": "succeeded" - }, - "log": "https://some.url:43/root/test-us-central-1/run/2" - }, - { - "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" - }, - "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": "succeeded", - "startTests": "succeeded", - "endTests": "succeeded", - "deactivateTester": "succeeded", - "report": "succeeded" - }, - "tasks": { - "test": "succeeded" - }, - "log": "https://some.url:43/root/test-us-central-1/run/1" - } - ], - "url": "https://some.url:43/root/test-us-central-1" - }, - "us-west-1": { - "runs": [ - { - "status": "pending", - "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.2-commit1", - "build": 2, - "source": { - "gitRepository": "repository1", - "gitBranch": "master", - "gitCommit": "commit1" - }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" - }, - "tasks": { - "us-central-1": "running" - } - }, - { - "id": 2, - "status": "installationFailed", - "start": 1000, - "end": 7202000, - "wantedPlatform": "6.1", - "wantedApplication": { - "hash": "1.0.2-commit1", - "build": 2, - "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": { - "deployReal": "succeeded", - "installReal": "failed", - "report": "succeeded" - }, - "tasks": { - "deploy": "succeeded", - "install": "failed" - }, - "log": "https://some.url:43/root/production-us-west-1/run/2" - }, - { - "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" - }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" - }, - "steps": { - "deployReal": "succeeded", - "installReal": "succeeded", - "report": "succeeded" - }, - "tasks": { - "deploy": "succeeded", - "install": "succeeded" - }, - "log": "https://some.url:43/root/production-us-west-1/run/1" - } - ], - "url": "https://some.url:43/root/production-us-west-1" - }, - "us-east-3": { - "runs": [ - { - "status": "pending", - "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" - }, - "tasks": { - "staging-test": "failed", - "us-central-1": "running" - } - }, - { - "id": 2, - "status": "deploymentFailed", - "start": 1000, - "end": 1000, - "wantedPlatform": "6.1", - "wantedApplication": { - "hash": "1.0.2-commit1", - "build": 2, - "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": { - "deployReal": "failed", - "installReal": "unfinished", - "report": "succeeded" - }, - "tasks": { - "deploy": "failed" - }, - "log": "https://some.url:43/root/production-us-east-3/run/2" - }, - { - "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" - }, - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" - }, - "steps": { - "deployReal": "succeeded", - "installReal": "succeeded", - "report": "succeeded" - }, - "tasks": { - "deploy": "succeeded", - "install": "succeeded" - }, - "log": "https://some.url:43/root/production-us-east-3/run/1" - } - ], - "url": "https://some.url:43/root/production-us-east-3" - } - }, - "devJobs": {}, "deployment": [] } -- cgit v1.2.3