diff options
author | Leandro Alves <leandroalves@verizonmedia.com> | 2021-01-08 12:10:43 +0100 |
---|---|---|
committer | Leandro Alves <leandroalves@verizonmedia.com> | 2021-01-08 12:10:43 +0100 |
commit | dd0bde5039b4871a935cff05540d914d63e33b62 (patch) | |
tree | ab66b008a4f6b978240b29161e43d5bf347b96a4 /controller-server | |
parent | 12b1ce99916dab082504479c82993562ca5d0c80 (diff) |
add more fields to tenant metaData
Diffstat (limited to 'controller-server')
3 files changed, 50 insertions, 0 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 22dd098adfb..307ea3080f4 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 @@ -1970,6 +1970,23 @@ public class ApplicationApiHandler extends LoggingRequestHandler { default: throw new IllegalArgumentException("Unexpected tenant type '" + tenant.type() + "'."); } object.setString("url", withPath("/application/v4/tenant/" + tenant.name().value(), requestURI).toString()); + tenantMetaDataToSlime(tenant, metaData); + } + + private void tenantMetaDataToSlime(Tenant tenant, Cursor object) { + List<com.yahoo.vespa.hosted.controller.Application> applications = controller.applications().asList(tenant.name()); + Optional<Instant> lastDev = applications.stream() + .flatMap(application -> application.instances().values().stream()) + .flatMap(instance -> controller.jobController().jobs(instance.id()).stream() + .filter(jobType -> jobType.environment() == Environment.dev) + .flatMap(jobType -> controller.jobController().last(instance.id(), jobType).stream())) + .map(Run::start) + .max(Comparator.naturalOrder()); + Optional<Instant> lastSubmission = applications.stream() + .flatMap(app -> app.latestVersion().flatMap(ApplicationVersion::buildTime).stream()) + .max(Comparator.naturalOrder()); + lastDev.ifPresent(instant -> object.setLong("lastDeploymentToDev", instant.toEpochMilli())); + lastSubmission.ifPresent(instant -> object.setLong("lastSubmissionToProd", instant.toEpochMilli())); } /** Returns a copy of the given URI with the host and port from the given URI, the path set to the given path and the query set to given query*/ 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 3d1375601ad..826810bb803 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 @@ -92,6 +92,7 @@ import static com.yahoo.application.container.handler.Request.Method.GET; import static com.yahoo.application.container.handler.Request.Method.PATCH; import static com.yahoo.application.container.handler.Request.Method.POST; import static com.yahoo.application.container.handler.Request.Method.PUT; +import static com.yahoo.vespa.hosted.controller.deployment.DeploymentContext.applicationPackage; import static java.net.URLEncoder.encode; import static java.nio.charset.StandardCharsets.UTF_8; import static java.util.stream.Collectors.joining; @@ -1515,6 +1516,19 @@ public class ApplicationApiTest extends ControllerContainerTest { new File("deployment-without-shared-endpoints.json")); } + @Test + public void testTenantMetaData() { + createAthenzDomainWithAdmin(ATHENZ_TENANT_DOMAIN, USER_ID); + deploymentTester.clock().setInstant(Instant.parse("2020-01-08T10:47:01Z")); + deploymentTester.controllerTester().createTenant("tenant1", "domain1", 1L); + deploymentTester.controllerTester().createApplication("tenant1", "application1", "instance1"); + var app = deploymentTester.newDeploymentContext(); + app.submit(applicationPackageDefault).deploy(); + deploymentTester.jobs().deploy(app.instanceId(), JobType.devUsEast1, Optional.empty(), applicationPackage()); + tester.assertResponse(request("/application/v4/tenant", GET).userIdentity(USER_ID), + new File("tenant-with-metadata.json")); + } + private MultiPartStreamer createApplicationDeployData(ApplicationPackage applicationPackage, boolean deployDirectly) { return createApplicationDeployData(Optional.of(applicationPackage), deployDirectly); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/tenant-with-metadata.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/tenant-with-metadata.json new file mode 100644 index 00000000000..95933791a45 --- /dev/null +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/tenant-with-metadata.json @@ -0,0 +1,19 @@ +[{ + "tenant": "tenant", + "metaData": { + "type": "ATHENS", + "athensDomain": "domain1000", + "property": "Property1000", + "lastDeploymentToDev": 1578480421000, + "lastSubmissionToProd": 1000 + }, + "url": "http://localhost:8080/application/v4/tenant/tenant" +}, { + "tenant": "tenant1", + "metaData": { + "type": "ATHENS", + "athensDomain": "domain1", + "property": "Property1" + }, + "url": "http://localhost:8080/application/v4/tenant/tenant1" +}] |