summaryrefslogtreecommitdiffstats
path: root/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response
diff options
context:
space:
mode:
Diffstat (limited to 'configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response')
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/ApplicationSuspendedResponse.java12
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/DeleteApplicationResponse.java11
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/DeploymentMetricsResponse.java50
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/GetApplicationResponse.java19
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/ListApplicationsResponse.java41
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/ListTenantsResponse.java22
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/ProtonMetricsResponse.java35
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/QuotaUsageResponse.java12
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/ReindexingResponse.java52
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/SessionActiveResponse.java29
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/SessionCreateResponse.java27
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/SessionPrepareAndActivateResponse.java38
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/SessionPrepareResponse.java40
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/TenantCreateResponse.java19
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/TenantDeleteResponse.java18
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/TenantGetResponse.java18
16 files changed, 443 insertions, 0 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/ApplicationSuspendedResponse.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/ApplicationSuspendedResponse.java
new file mode 100644
index 00000000000..c2449d9a31d
--- /dev/null
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/ApplicationSuspendedResponse.java
@@ -0,0 +1,12 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.config.server.http.v2.response;
+
+import com.yahoo.jdisc.Response;
+import com.yahoo.vespa.config.server.http.JSONResponse;
+
+public class ApplicationSuspendedResponse extends JSONResponse {
+ public ApplicationSuspendedResponse(boolean suspended) {
+ super(Response.Status.OK);
+ object.setBool("suspended", suspended);
+ }
+}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/DeleteApplicationResponse.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/DeleteApplicationResponse.java
new file mode 100644
index 00000000000..375a6d5e57f
--- /dev/null
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/DeleteApplicationResponse.java
@@ -0,0 +1,11 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.config.server.http.v2.response;
+
+import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.restapi.MessageResponse;
+
+public class DeleteApplicationResponse extends MessageResponse {
+ public DeleteApplicationResponse(ApplicationId applicationId) {
+ super("Application '" + applicationId + "' deleted");
+ }
+}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/DeploymentMetricsResponse.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/DeploymentMetricsResponse.java
new file mode 100644
index 00000000000..253e37f2b0a
--- /dev/null
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/DeploymentMetricsResponse.java
@@ -0,0 +1,50 @@
+// Copyright 2019 Oath 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.response;
+
+import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.restapi.SlimeJsonResponse;
+import com.yahoo.slime.Cursor;
+import com.yahoo.vespa.config.server.metrics.ClusterInfo;
+import com.yahoo.vespa.config.server.metrics.DeploymentMetricsAggregator;
+
+import java.util.Map;
+
+/**
+ * @author olaa
+ */
+public class DeploymentMetricsResponse extends SlimeJsonResponse {
+
+ public DeploymentMetricsResponse(ApplicationId applicationId, Map<ClusterInfo, DeploymentMetricsAggregator> aggregatedMetrics) {
+ Cursor application = slime.setObject();
+ application.setString("applicationId", applicationId.serializedForm());
+
+ Cursor clusters = application.setArray("clusters");
+
+ for (var entry : aggregatedMetrics.entrySet()) {
+ Cursor cluster = clusters.addObject();
+ cluster.setString("clusterId", entry.getKey().getClusterId());
+ cluster.setString("clusterType", entry.getKey().getClusterType());
+
+ DeploymentMetricsAggregator aggregator = entry.getValue();
+ Cursor metrics = cluster.setObject("metrics");
+ aggregator.aggregateQueryRate().ifPresent(queryRate -> metrics.setDouble("queriesPerSecond", queryRate));
+ aggregator.aggregateFeedRate().ifPresent(feedRate -> metrics.setDouble("feedPerSecond", feedRate));
+ aggregator.aggregateDocumentCount().ifPresent(documentCount -> metrics.setDouble("documentCount", documentCount));
+ aggregator.aggregateQueryLatency().ifPresent(queryLatency -> metrics.setDouble("queryLatency",queryLatency));
+ aggregator.aggregateFeedLatency().ifPresent(feedLatency -> metrics.setDouble("feedLatency", feedLatency));
+ aggregator.memoryUsage().ifPresent(memory -> {
+ metrics.setDouble("memoryUtil", memory.util());
+ metrics.setDouble("memoryFeedBlockLimit", memory.feedBlockLimit());
+ });
+ aggregator.diskUsage().ifPresent(disk -> {
+ metrics.setDouble("diskUtil", disk.util());
+ metrics.setDouble("diskFeedBlockLimit", disk.feedBlockLimit());
+ });
+
+ aggregator.reindexingProgress().ifPresent(reindexingProgress -> {
+ Cursor progressObject = cluster.setObject("reindexingProgress");
+ reindexingProgress.forEach(progressObject::setDouble);
+ });
+ }
+ }
+}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/GetApplicationResponse.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/GetApplicationResponse.java
new file mode 100644
index 00000000000..dc124891540
--- /dev/null
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/GetApplicationResponse.java
@@ -0,0 +1,19 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.config.server.http.v2.response;
+
+import com.yahoo.component.Version;
+import com.yahoo.slime.Cursor;
+import com.yahoo.vespa.config.server.http.JSONResponse;
+
+import java.util.List;
+import java.util.Optional;
+
+public class GetApplicationResponse extends JSONResponse {
+ public GetApplicationResponse(int status, long generation, List<Version> modelVersions, Optional<String> applicationPackageReference) {
+ super(status);
+ object.setLong("generation", generation);
+ object.setString("applicationPackageFileReference", applicationPackageReference.orElse(""));
+ Cursor modelVersionArray = object.setArray("modelVersions");
+ modelVersions.forEach(version -> modelVersionArray.addString(version.toFullString()));
+ }
+}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/ListApplicationsResponse.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/ListApplicationsResponse.java
new file mode 100644
index 00000000000..6b1f7031d81
--- /dev/null
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/ListApplicationsResponse.java
@@ -0,0 +1,41 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.config.server.http.v2.response;
+
+import com.yahoo.container.jdisc.HttpResponse;
+import com.yahoo.slime.Cursor;
+import com.yahoo.slime.JsonFormat;
+import com.yahoo.slime.Slime;
+import com.yahoo.vespa.config.server.http.HttpConfigResponse;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Collection;
+
+/**
+ * Response that lists applications.
+ *
+ * @author Ulf Lilleengen
+ */
+public class ListApplicationsResponse extends HttpResponse {
+
+ private final Slime slime = new Slime();
+
+ public ListApplicationsResponse(int status, Collection<String> applications) {
+ super(status);
+ Cursor array = slime.setArray();
+ for (String url : applications) {
+ array.addString(url);
+ }
+ }
+
+ @Override
+ public void render(OutputStream outputStream) throws IOException {
+ new JsonFormat(true).encode(outputStream, slime);
+ }
+
+ @Override
+ public String getContentType() {
+ return HttpConfigResponse.JSON_CONTENT_TYPE;
+ }
+
+}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/ListTenantsResponse.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/ListTenantsResponse.java
new file mode 100644
index 00000000000..ec1b3c83604
--- /dev/null
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/ListTenantsResponse.java
@@ -0,0 +1,22 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.config.server.http.v2.response;
+
+import com.yahoo.config.provision.TenantName;
+import com.yahoo.restapi.SlimeJsonResponse;
+import com.yahoo.slime.Cursor;
+
+import java.util.Set;
+
+/**
+ * Tenant list response
+ *
+ * @author vegardh
+ */
+public class ListTenantsResponse extends SlimeJsonResponse {
+
+ public ListTenantsResponse(Set<TenantName> tenants) {
+ Cursor tenantArray = slime.setObject().setArray("tenants");
+ tenants.forEach(tenantName -> tenantArray.addString(tenantName.value()));
+ }
+
+}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/ProtonMetricsResponse.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/ProtonMetricsResponse.java
new file mode 100644
index 00000000000..25e770c7211
--- /dev/null
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/ProtonMetricsResponse.java
@@ -0,0 +1,35 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.config.server.http.v2.response;
+
+import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.restapi.SlimeJsonResponse;
+import com.yahoo.slime.Cursor;
+import com.yahoo.vespa.config.server.metrics.ProtonMetricsAggregator;
+import java.util.Map;
+
+/**
+ * @author akvalsvik
+ */
+public class ProtonMetricsResponse extends SlimeJsonResponse {
+
+ public ProtonMetricsResponse(ApplicationId applicationId, Map<String, ProtonMetricsAggregator> aggregatedProtonMetrics) {
+ Cursor application = slime.setObject();
+ application.setString("applicationId", applicationId.serializedForm());
+
+ Cursor clusters = application.setArray("clusters");
+
+ for (var entry : aggregatedProtonMetrics.entrySet()) {
+ Cursor cluster = clusters.addObject();
+ cluster.setString("clusterId", entry.getKey());
+
+ ProtonMetricsAggregator aggregator = entry.getValue();
+ Cursor metrics = cluster.setObject("metrics");
+ metrics.setDouble("documentsActiveCount", aggregator.aggregateDocumentActiveCount());
+ metrics.setDouble("documentsReadyCount", aggregator.aggregateDocumentReadyCount());
+ metrics.setDouble("documentsTotalCount", aggregator.aggregateDocumentTotalCount());
+ metrics.setDouble("documentDiskUsage", aggregator.aggregateDocumentDiskUsage());
+ metrics.setDouble("resourceDiskUsageAverage", aggregator.aggregateResourceDiskUsageAverage());
+ metrics.setDouble("resourceMemoryUsageAverage", aggregator.aggregateResourceMemoryUsageAverage());
+ }
+ }
+}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/QuotaUsageResponse.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/QuotaUsageResponse.java
new file mode 100644
index 00000000000..e30f0f45098
--- /dev/null
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/QuotaUsageResponse.java
@@ -0,0 +1,12 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.config.server.http.v2.response;
+
+import com.yahoo.jdisc.Response;
+import com.yahoo.vespa.config.server.http.JSONResponse;
+
+public class QuotaUsageResponse extends JSONResponse {
+ public QuotaUsageResponse(double usageRate) {
+ super(Response.Status.OK);
+ object.setDouble("rate", usageRate);
+ }
+}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/ReindexingResponse.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/ReindexingResponse.java
new file mode 100644
index 00000000000..e73d4a9cb56
--- /dev/null
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/ReindexingResponse.java
@@ -0,0 +1,52 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.config.server.http.v2.response;
+
+import com.yahoo.jdisc.Response;
+import com.yahoo.slime.Cursor;
+import com.yahoo.vespa.config.server.application.ApplicationReindexing;
+import com.yahoo.vespa.config.server.application.ClusterReindexing;
+import com.yahoo.vespa.config.server.http.JSONResponse;
+
+import java.util.Map;
+import java.util.Set;
+
+public class ReindexingResponse extends JSONResponse {
+ public ReindexingResponse(Map<String, Set<String>> documentTypes, ApplicationReindexing reindexing,
+ Map<String, ClusterReindexing> clusters) {
+ super(Response.Status.OK);
+ object.setBool("enabled", reindexing.enabled());
+ Cursor clustersObject = object.setObject("clusters");
+ documentTypes.forEach((cluster, types) -> {
+ Cursor clusterObject = clustersObject.setObject(cluster);
+ Cursor pendingObject = clusterObject.setObject("pending");
+ Cursor readyObject = clusterObject.setObject("ready");
+
+ for (String type : types) {
+ Cursor statusObject = readyObject.setObject(type);
+ if (reindexing.clusters().containsKey(cluster)) {
+ if (reindexing.clusters().get(cluster).pending().containsKey(type))
+ pendingObject.setLong(type, reindexing.clusters().get(cluster).pending().get(type));
+
+ if (reindexing.clusters().get(cluster).ready().containsKey(type))
+ setStatus(statusObject, reindexing.clusters().get(cluster).ready().get(type));
+ }
+ if (clusters.containsKey(cluster))
+ if (clusters.get(cluster).documentTypeStatus().containsKey(type))
+ setStatus(statusObject, clusters.get(cluster).documentTypeStatus().get(type));
+ }
+ });
+ }
+
+ private static void setStatus(Cursor object, ApplicationReindexing.Status readyStatus) {
+ object.setLong("readyMillis", readyStatus.ready().toEpochMilli());
+ }
+
+ private static void setStatus(Cursor object, ClusterReindexing.Status status) {
+ object.setLong("startedMillis", status.startedAt().toEpochMilli());
+ status.endedAt().ifPresent(endedAt -> object.setLong("endedMillis", endedAt.toEpochMilli()));
+ status.state().map(ClusterReindexing.State::asString).ifPresent(state -> object.setString("state", state));
+ status.message().ifPresent(message -> object.setString("message", message));
+ status.progress().ifPresent(progress -> object.setDouble("progress", progress));
+ }
+
+}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/SessionActiveResponse.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/SessionActiveResponse.java
new file mode 100644
index 00000000000..f14f9cc6575
--- /dev/null
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/SessionActiveResponse.java
@@ -0,0 +1,29 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.config.server.http.v2.response;
+
+import com.yahoo.config.provision.TenantName;
+import com.yahoo.config.provision.Zone;
+import com.yahoo.container.jdisc.HttpRequest;
+import com.yahoo.restapi.SlimeJsonResponse;
+import com.yahoo.slime.Cursor;
+import com.yahoo.slime.Slime;
+import com.yahoo.config.provision.ApplicationId;
+
+public class SessionActiveResponse extends SlimeJsonResponse {
+
+ public SessionActiveResponse(Slime metaData, HttpRequest request, ApplicationId applicationId, long sessionId, Zone zone) {
+ super(metaData);
+ TenantName tenantName = applicationId.tenant();
+ String message = "Session " + sessionId + " for tenant '" + tenantName.value() + "' activated.";
+ Cursor root = metaData.get();
+
+ root.setString("tenant", tenantName.value());
+ root.setString("message", message);
+ root.setString("url", "http://" + request.getHost() + ":" + request.getPort() +
+ "/application/v2/tenant/" + tenantName +
+ "/application/" + applicationId.application().value() +
+ "/environment/" + zone.environment().value() +
+ "/region/" + zone.region().value() +
+ "/instance/" + applicationId.instance().value());
+ }
+}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/SessionCreateResponse.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/SessionCreateResponse.java
new file mode 100644
index 00000000000..047962ea16b
--- /dev/null
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/SessionCreateResponse.java
@@ -0,0 +1,27 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.config.server.http.v2.response;
+
+import com.yahoo.config.provision.TenantName;
+import com.yahoo.restapi.SlimeJsonResponse;
+import com.yahoo.slime.Cursor;
+import com.yahoo.slime.Slime;
+
+/**
+ * Creates a response for SessionCreateHandler.
+ *
+ * @author hmusum
+ */
+public class SessionCreateResponse extends SlimeJsonResponse {
+
+ public SessionCreateResponse(Slime deployLog, TenantName tenantName, String hostName, int port, long sessionId) {
+ super(deployLog);
+ String path = "http://" + hostName + ":" + port + "/application/v2/tenant/" + tenantName.value() + "/session/" + sessionId;
+ Cursor root = deployLog.get();
+
+ root.setString("tenant", tenantName.value());
+ root.setString("session-id", Long.toString(sessionId));
+ root.setString("prepared", path + "/prepared");
+ root.setString("content", path + "/content/");
+ root.setString("message", "Session " + sessionId + " for tenant '" + tenantName.value() + "' created.");
+ }
+}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/SessionPrepareAndActivateResponse.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/SessionPrepareAndActivateResponse.java
new file mode 100644
index 00000000000..d219ff64b4e
--- /dev/null
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/SessionPrepareAndActivateResponse.java
@@ -0,0 +1,38 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.config.server.http.v2.response;
+
+import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.config.provision.TenantName;
+import com.yahoo.config.provision.Zone;
+import com.yahoo.container.jdisc.HttpRequest;
+import com.yahoo.restapi.SlimeJsonResponse;
+import com.yahoo.slime.Cursor;
+import com.yahoo.vespa.config.server.configchange.ConfigChangeActionsSlimeConverter;
+import com.yahoo.vespa.config.server.http.v2.PrepareResult;
+
+/**
+ * Creates a response for SessionPrepareHandler.
+ *
+ * @author hmusum
+ */
+public class SessionPrepareAndActivateResponse extends SlimeJsonResponse {
+
+ public SessionPrepareAndActivateResponse(PrepareResult result, HttpRequest request, ApplicationId applicationId, Zone zone) {
+ super(result.deployLogger().slime());
+
+ TenantName tenantName = applicationId.tenant();
+ String message = "Session " + result.sessionId() + " for tenant '" + tenantName.value() + "' prepared and activated.";
+ Cursor root = slime.get();
+
+ root.setString("tenant", tenantName.value());
+ root.setString("url", "http://" + request.getHost() + ":" + request.getPort() +
+ "/application/v2/tenant/" + tenantName +
+ "/application/" + applicationId.application().value() +
+ "/environment/" + zone.environment().value() +
+ "/region/" + zone.region().value() +
+ "/instance/" + applicationId.instance().value());
+ root.setString("message", message);
+ new ConfigChangeActionsSlimeConverter(result.configChangeActions()).toSlime(root);
+ }
+
+}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/SessionPrepareResponse.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/SessionPrepareResponse.java
new file mode 100644
index 00000000000..5f50a5236fb
--- /dev/null
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/SessionPrepareResponse.java
@@ -0,0 +1,40 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.config.server.http.v2.response;
+
+import com.yahoo.config.provision.TenantName;
+import com.yahoo.container.jdisc.HttpRequest;
+import com.yahoo.restapi.SlimeJsonResponse;
+import com.yahoo.slime.Cursor;
+import com.yahoo.slime.Slime;
+import com.yahoo.slime.Type;
+import com.yahoo.vespa.config.server.configchange.ConfigChangeActions;
+import com.yahoo.vespa.config.server.configchange.ConfigChangeActionsSlimeConverter;
+import com.yahoo.vespa.config.server.http.v2.PrepareResult;
+
+/**
+ * Creates a response for SessionPrepareHandler.
+ *
+ * @author hmusum
+ */
+public class SessionPrepareResponse extends SlimeJsonResponse {
+
+ public SessionPrepareResponse(TenantName tenantName, HttpRequest request, long sessionId) {
+ this(new Slime(), tenantName, request, sessionId, new ConfigChangeActions());
+ }
+
+ public SessionPrepareResponse(PrepareResult result, TenantName tenantName, HttpRequest request) {
+ this(result.deployLogger().slime(), tenantName, request, result.sessionId(), result.configChangeActions());
+ }
+
+ private SessionPrepareResponse(Slime deployLog, TenantName tenantName, HttpRequest request, long sessionId, ConfigChangeActions actions) {
+ super(deployLog);
+
+ Cursor root = deployLog.get().type() != Type.NIX ? deployLog.get() : deployLog.setObject();
+ root.setString("tenant", tenantName.value());
+ root.setString("activate", "http://" + request.getHost() + ":" + request.getPort() +
+ "/application/v2/tenant/" + tenantName.value() + "/session/" + sessionId + "/active");
+ root.setString("message", "Session " + sessionId + " for tenant '" + tenantName.value() + "' prepared.");
+ new ConfigChangeActionsSlimeConverter(actions).toSlime(root);
+ }
+
+}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/TenantCreateResponse.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/TenantCreateResponse.java
new file mode 100644
index 00000000000..395a52df9f2
--- /dev/null
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/TenantCreateResponse.java
@@ -0,0 +1,19 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.config.server.http.v2.response;
+
+import com.yahoo.config.provision.TenantName;
+import com.yahoo.restapi.MessageResponse;
+
+/**
+ * Response for tenant create
+ *
+ * @author vegardh
+ *
+ */
+public class TenantCreateResponse extends MessageResponse {
+
+ public TenantCreateResponse(TenantName tenant) {
+ super("Tenant " + tenant + " created.");
+ }
+
+}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/TenantDeleteResponse.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/TenantDeleteResponse.java
new file mode 100644
index 00000000000..fbfb4d581c6
--- /dev/null
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/TenantDeleteResponse.java
@@ -0,0 +1,18 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.config.server.http.v2.response;
+import com.yahoo.config.provision.TenantName;
+import com.yahoo.restapi.MessageResponse;
+
+/**
+ * Response for tenant delete
+ *
+ * @author vegardh
+ *
+ */
+public class TenantDeleteResponse extends MessageResponse {
+
+ public TenantDeleteResponse(TenantName tenant) {
+ super("Tenant " + tenant + " deleted.");
+ }
+
+}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/TenantGetResponse.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/TenantGetResponse.java
new file mode 100644
index 00000000000..3a50a68cb21
--- /dev/null
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/response/TenantGetResponse.java
@@ -0,0 +1,18 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.config.server.http.v2.response;
+
+import com.yahoo.config.provision.TenantName;
+import com.yahoo.restapi.MessageResponse;
+
+/**
+ * Response for tenant create
+ *
+ * @author hmusum
+ */
+public class TenantGetResponse extends MessageResponse {
+
+ public TenantGetResponse(TenantName tenant) {
+ super("Tenant '" + tenant + "' exists.");
+ }
+
+}