diff options
author | Bjørn Christian Seime <bjorncs@oath.com> | 2018-02-15 17:52:56 +0100 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@oath.com> | 2018-02-15 17:52:56 +0100 |
commit | 0d1afa9450280ed26b28d3e17469bd703dc8ca2e (patch) | |
tree | f909cafc6dd9dd2271d2a0588c2dc4f73aeddbae /controller-server/src | |
parent | 61c5c820c167cd26d9544380af755ed46d267f7b (diff) |
Add jobreport method to application v4 api
Diffstat (limited to 'controller-server/src')
4 files changed, 43 insertions, 2 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 6fc65253da3..a99b50f0980 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 @@ -64,6 +64,7 @@ import com.yahoo.vespa.hosted.controller.application.ClusterCost; import com.yahoo.vespa.hosted.controller.application.ClusterUtilization; import com.yahoo.vespa.hosted.controller.application.Deployment; import com.yahoo.vespa.hosted.controller.application.DeploymentCost; +import com.yahoo.vespa.hosted.controller.application.DeploymentJobs; import com.yahoo.vespa.hosted.controller.application.DeploymentMetrics; import com.yahoo.vespa.hosted.controller.application.JobStatus; import com.yahoo.vespa.hosted.controller.application.SourceRevision; @@ -194,6 +195,7 @@ public class ApplicationApiHandler extends LoggingRequestHandler { if (path.matches("/application/v4/tenant/{tenant}/application/{application}")) return createApplication(path.get("tenant"), path.get("application"), request); if (path.matches("/application/v4/tenant/{tenant}/application/{application}/promote")) return promoteApplication(path.get("tenant"), path.get("application"), request); if (path.matches("/application/v4/tenant/{tenant}/application/{application}/deploying")) return deploy(path.get("tenant"), path.get("application"), request); + if (path.matches("/application/v4/tenant/{tenant}/application/{application}/jobreport")) return notifyJobCompletion(path.get("tenant"), path.get("application"), request); if (path.matches("/application/v4/tenant/{tenant}/application/{application}/environment/{environment}/region/{region}/instance/{instance}")) return deploy(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region"), request); if (path.matches("/application/v4/tenant/{tenant}/application/{application}/environment/{environment}/region/{region}/instance/{instance}/deploy")) return deploy(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region"), request); // legacy synonym of the above if (path.matches("/application/v4/tenant/{tenant}/application/{application}/environment/{environment}/region/{region}/instance/{instance}/restart")) return restart(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region"), request); @@ -897,6 +899,40 @@ public class ApplicationApiHandler extends LoggingRequestHandler { } } + private HttpResponse notifyJobCompletion(String tenant, String applicationName, HttpRequest request) { + try { + controller.applications().notifyJobCompletion(toJobReport(tenant, applicationName, toSlime(request.getData()).get())); + return new MessageResponse("ok"); + } catch (IllegalStateException e) { + return ErrorResponse.badRequest(Exceptions.toMessageString(e)); + } + } + + private static DeploymentJobs.JobReport toJobReport(String tenantName, String applicationName, Inspector report) { + Optional<DeploymentJobs.JobError> jobError = Optional.empty(); + if (report.field("jobError").valid()) { + jobError = Optional.of(DeploymentJobs.JobError.valueOf(report.field("jobError").asString())); + } + return new DeploymentJobs.JobReport( + ApplicationId.from(tenantName, applicationName, report.field("instance").asString()), + DeploymentJobs.JobType.fromJobName(report.field("jobName").asString()), + report.field("projectId").asLong(), + report.field("buildNumber").asLong(), + toSourceRevision(report.field("sourceRevision")), + jobError + ); + } + + private static Optional<SourceRevision> toSourceRevision(Inspector object) { + if (!object.field("repository").valid() || + !object.field("branch").valid() || + !object.field("commit").valid()) { + return Optional.empty(); + } + return Optional.of(new SourceRevision(object.field("repository").asString(), object.field("branch").asString(), + object.field("commit").asString())); + } + private Tenant getTenantOrThrow(String tenantName) { return controller.tenants().tenant(new TenantId(tenantName)) .orElseThrow(() -> new NotExistsException(new TenantId(tenantName))); diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/filter/ControllerAuthorizationFilter.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/filter/ControllerAuthorizationFilter.java index 8063a0d1c2d..2f1f59b90d9 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/filter/ControllerAuthorizationFilter.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/filter/ControllerAuthorizationFilter.java @@ -134,7 +134,8 @@ public class ControllerAuthorizationFilter implements SecurityRequestFilter { private static boolean isTenantPipelineOperation(Path path, Method method) { if (isTenantAdminOperation(path, method)) return false; - return path.matches("/application/v4/tenant/{tenant}/application/{application}/environment/prod/{*}") || + return path.matches("/application/v4/tenant/{tenant}/application/{application}/jobreport") || + path.matches("/application/v4/tenant/{tenant}/application/{application}/environment/prod/{*}") || path.matches("/application/v4/tenant/{tenant}/application/{application}/environment/test/{*}") || path.matches("/application/v4/tenant/{tenant}/application/{application}/environment/staging/{*}"); } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/screwdriver/ScrewdriverApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/screwdriver/ScrewdriverApiHandler.java index 44f3197643a..14f3e6b2f61 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/screwdriver/ScrewdriverApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/screwdriver/ScrewdriverApiHandler.java @@ -147,6 +147,10 @@ public class ScrewdriverApiHandler extends LoggingRequestHandler { return new SlimeJsonResponse(slime); } + /** + * @deprecated Method migrated to application v4 - this method will be removed soon. + */ + @Deprecated private HttpResponse notifyJobCompletion(HttpRequest request) { controller.applications().notifyJobCompletion(toJobReport(toSlime(request.getData()).get())); return new StringResponse("ok"); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/screwdriver/ScrewdriverApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/screwdriver/ScrewdriverApiTest.java index d680d943f84..274d2f63fa8 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/screwdriver/ScrewdriverApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/screwdriver/ScrewdriverApiTest.java @@ -73,7 +73,7 @@ public class ScrewdriverApiTest extends ControllerContainerTest { notifyCompletion(app.id(), projectId, JobType.systemTest, Optional.empty()); // Notifying about unknown job fails - tester.containerTester().assertResponse(new Request("http://localhost:8080/screwdriver/v1/jobreport", + tester.containerTester().assertResponse(new Request("http://localhost:8080/application/v4/tenant/tenant1/application/application1/jobreport", jsonReport(app.id(), JobType.productionUsEast3, projectId, 1L, Optional.empty()) .getBytes(StandardCharsets.UTF_8), |