aboutsummaryrefslogtreecommitdiffstats
path: root/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ListApplicationsHandler.java
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2016-06-15 23:09:44 +0200
committerJon Bratseth <bratseth@yahoo-inc.com>2016-06-15 23:09:44 +0200
commit72231250ed81e10d66bfe70701e64fa5fe50f712 (patch)
tree2728bba1131a6f6e5bdf95afec7d7ff9358dac50 /configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ListApplicationsHandler.java
Publish
Diffstat (limited to 'configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ListApplicationsHandler.java')
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ListApplicationsHandler.java67
1 files changed, 67 insertions, 0 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ListApplicationsHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ListApplicationsHandler.java
new file mode 100644
index 00000000000..e77c3928f11
--- /dev/null
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ListApplicationsHandler.java
@@ -0,0 +1,67 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.config.server.http.v2;
+
+import com.google.common.base.Function;
+import com.google.common.collect.Collections2;
+import com.yahoo.config.provision.TenantName;
+import com.yahoo.config.provision.Zone;
+import com.yahoo.container.jdisc.HttpRequest;
+import com.yahoo.container.jdisc.HttpResponse;
+import com.yahoo.container.logging.AccessLog;
+import com.yahoo.jdisc.Response;
+import com.yahoo.vespa.config.server.Tenant;
+import com.yahoo.vespa.config.server.Tenants;
+import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.vespa.config.server.application.ApplicationRepo;
+import com.yahoo.vespa.config.server.http.HttpHandler;
+import com.yahoo.vespa.config.server.http.Utils;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.concurrent.Executor;
+
+/**
+ * Handler for listing currently active applications for a tenant.
+ *
+ * @author lulf
+ * @since 5.1
+ */
+public class ListApplicationsHandler extends HttpHandler {
+ private final Tenants tenants;
+ private final Zone zone;
+ public ListApplicationsHandler(Executor executor, AccessLog accessLog, Tenants tenants, Zone zone) {
+ super(executor, accessLog);
+ this.tenants = tenants;
+ this.zone = zone;
+ }
+
+ @Override
+ public HttpResponse handleGET(HttpRequest request) {
+ TenantName tenantName = Utils.getTenantFromApplicationsRequest(request);
+ final String urlBase = Utils.getUrlBase(request, "/application/v2/tenant/" + tenantName + "/application/");
+
+ List<ApplicationId> applicationIds = listApplicationIds(tenantName);
+ Collection<String> applicationUrls = Collections2.transform(applicationIds, new Function<ApplicationId, String>() {
+ @Override
+ public String apply(ApplicationId id) {
+ return createUrlStringFromId(urlBase, id, zone);
+ }
+ });
+ return new ListApplicationsResponse(Response.Status.OK, applicationUrls);
+ }
+
+ private List<ApplicationId> listApplicationIds(TenantName tenantName) {
+ Tenant tenant = Utils.checkThatTenantExists(tenants, tenantName);
+ ApplicationRepo applicationRepo = tenant.getApplicationRepo();
+ return applicationRepo.listApplications();
+ }
+
+ private static String createUrlStringFromId(String urlBase, ApplicationId id, Zone zone) {
+ StringBuilder sb = new StringBuilder();
+ sb.append(urlBase).append(id.application().value());
+ sb.append("/environment/").append(zone.environment().value());
+ sb.append("/region/").append(zone.region().value());
+ sb.append("/instance/").append(id.instance().value());
+ return sb.toString();
+ }
+}