summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorJon Marius Venstad <jonmv@users.noreply.github.com>2021-01-11 12:41:11 +0100
committerGitHub <noreply@github.com>2021-01-11 12:41:11 +0100
commit43d350047e8c7ba83fd3d5d671f16ca23b089fdb (patch)
tree3d99287c9fe0cabf6826da5606a0adedf3b624e6 /controller-server
parentf97496e54edbfc95fb73a9be27a1e6d169197930 (diff)
parentdb3f6f1fae59128b2cab987e7604abeb2ee0daaa (diff)
Merge pull request #15970 from vespa-engine/ldalves/tenant-metadata
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 67490bf9d8c..eb6d0d16737 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
@@ -1983,6 +1983,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("lastDeploymentToDevMillis", instant.toEpochMilli()));
+ lastSubmission.ifPresent(instant -> object.setLong("lastSubmissionToProdMillis", 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 d9234c9a28e..16896b1a5f5 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;
@@ -1531,6 +1532,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..a30f3ddf992
--- /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",
+ "lastDeploymentToDevMillis": 1578480421000,
+ "lastSubmissionToProdMillis": 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"
+}]