summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorLeandro Alves <leandroalves@verizonmedia.com>2021-01-08 12:10:43 +0100
committerLeandro Alves <leandroalves@verizonmedia.com>2021-01-08 12:10:43 +0100
commitdd0bde5039b4871a935cff05540d914d63e33b62 (patch)
treeab66b008a4f6b978240b29161e43d5bf347b96a4 /controller-server
parent12b1ce99916dab082504479c82993562ca5d0c80 (diff)
add more fields to tenant metaData
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java17
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java14
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/tenant-with-metadata.json19
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"
+}]