aboutsummaryrefslogtreecommitdiffstats
path: root/controller-server/src
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@oath.com>2018-02-15 17:52:56 +0100
committerBjørn Christian Seime <bjorncs@oath.com>2018-02-15 17:52:56 +0100
commit0d1afa9450280ed26b28d3e17469bd703dc8ca2e (patch)
treef909cafc6dd9dd2271d2a0588c2dc4f73aeddbae /controller-server/src
parent61c5c820c167cd26d9544380af755ed46d267f7b (diff)
Add jobreport method to application v4 api
Diffstat (limited to 'controller-server/src')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java36
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/filter/ControllerAuthorizationFilter.java3
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/screwdriver/ScrewdriverApiHandler.java4
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/screwdriver/ScrewdriverApiTest.java2
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),