aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHåkon Hallingstad <hakon@oath.com>2019-01-15 13:38:53 +0100
committerHåkon Hallingstad <hakon@oath.com>2019-01-15 13:38:53 +0100
commitbb4d6627a9046cb9728f1bb97d76c5d290e7b3e9 (patch)
treec9ef2f115bd3e7ecf6bb6864e26d5e25cfcd264b
parent86336dc42b3d412abf7eb986fbe2bc9c44ea8e68 (diff)
Get single flag definition
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/flags/DefinedFlag.java48
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/flags/DefinedFlags.java7
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/flags/FlagsHandler.java7
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/flags/FlagsHandlerTest.java3
4 files changed, 54 insertions, 11 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/flags/DefinedFlag.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/flags/DefinedFlag.java
new file mode 100644
index 00000000000..1c59113787d
--- /dev/null
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/flags/DefinedFlag.java
@@ -0,0 +1,48 @@
+// Copyright 2019 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.flags;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.yahoo.container.jdisc.HttpResponse;
+import com.yahoo.jdisc.Response;
+import com.yahoo.vespa.config.server.http.HttpConfigResponse;
+import com.yahoo.vespa.flags.FlagDefinition;
+import com.yahoo.vespa.flags.json.DimensionHelper;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Optional;
+
+/**
+ * @author hakonhall
+ */
+public class DefinedFlag extends HttpResponse {
+ private static ObjectMapper mapper = new ObjectMapper();
+
+ private final Optional<FlagDefinition> flagDefinition;
+
+ public DefinedFlag(Optional<FlagDefinition> flagDefinition) {
+ super(Response.Status.OK);
+ this.flagDefinition = flagDefinition;
+ }
+
+ @Override
+ public void render(OutputStream outputStream) throws IOException {
+ ObjectNode rootNode = mapper.createObjectNode();
+ flagDefinition.ifPresent(definition -> renderFlagDefinition(definition, rootNode));
+ mapper.writeValue(outputStream, rootNode);
+ }
+
+ static void renderFlagDefinition(FlagDefinition flagDefinition, ObjectNode definitionNode) {
+ definitionNode.put("description", flagDefinition.getDescription());
+ definitionNode.put("modification-effect", flagDefinition.getModificationEffect());
+ ArrayNode dimensionsNode = definitionNode.putArray("dimensions");
+ flagDefinition.getDimensions().forEach(dimension -> dimensionsNode.add(DimensionHelper.toWire(dimension)));
+ }
+
+ @Override
+ public String getContentType() {
+ return HttpConfigResponse.JSON_CONTENT_TYPE;
+ }
+}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/flags/DefinedFlags.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/flags/DefinedFlags.java
index 6d5d0df8f1a..9604c51ee4b 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/flags/DefinedFlags.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/flags/DefinedFlags.java
@@ -2,13 +2,11 @@
package com.yahoo.vespa.config.server.http.flags;
import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.yahoo.container.jdisc.HttpResponse;
import com.yahoo.jdisc.Response;
import com.yahoo.vespa.config.server.http.HttpConfigResponse;
import com.yahoo.vespa.flags.FlagDefinition;
-import com.yahoo.vespa.flags.json.DimensionHelper;
import java.io.IOException;
import java.io.OutputStream;
@@ -35,10 +33,7 @@ public class DefinedFlags extends HttpResponse {
ObjectNode rootNode = mapper.createObjectNode();
flags.stream().sorted(sortByFlagId).forEach(flagDefinition -> {
ObjectNode definitionNode = rootNode.putObject(flagDefinition.getUnboundFlag().id().toString());
- definitionNode.put("description", flagDefinition.getDescription());
- definitionNode.put("modification-effect", flagDefinition.getModificationEffect());
- ArrayNode dimensionsNode = definitionNode.putArray("dimensions");
- flagDefinition.getDimensions().forEach(dimension -> dimensionsNode.add(DimensionHelper.toWire(dimension)));
+ DefinedFlag.renderFlagDefinition(flagDefinition, definitionNode);
});
mapper.writeValue(outputStream, rootNode);
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/flags/FlagsHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/flags/FlagsHandler.java
index 1b1595eb897..1cf1ff3c307 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/flags/FlagsHandler.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/flags/FlagsHandler.java
@@ -40,7 +40,8 @@ public class FlagsHandler extends HttpHandler {
if (path.matches("/flags/v1")) return new V1Response(flagsV1Uri(request), "data", "defined");
if (path.matches("/flags/v1/data")) return getFlagDataList(request);
if (path.matches("/flags/v1/data/{flagId}")) return getFlagData(findFlagId(request, path));
- if (path.matches("/flags/v1/defined")) return getDefinedFlagList(request);
+ if (path.matches("/flags/v1/defined")) return new DefinedFlags(Flags.getAllFlags());
+ if (path.matches("/flags/v1/defined/{flagId}")) return new DefinedFlag(Flags.getFlag(findFlagId(request, path)));
throw new NotFoundException("Nothing at path '" + path + "'");
}
@@ -58,10 +59,6 @@ public class FlagsHandler extends HttpHandler {
throw new NotFoundException("Nothing at path '" + path + "'");
}
- private HttpResponse getDefinedFlagList(HttpRequest request) {
- return new DefinedFlags(Flags.getAllFlags());
- }
-
private String flagsV1Uri(HttpRequest request) {
URI uri = request.getUri();
String port = uri.getPort() < 0 ? "" : ":" + uri.getPort();
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/flags/FlagsHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/flags/FlagsHandlerTest.java
index 11958454a70..78bc664d050 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/flags/FlagsHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/flags/FlagsHandlerTest.java
@@ -58,6 +58,9 @@ public class FlagsHandlerTest {
Flags.defineFeatureFlag("id", false, "desc", "mod", FetchVector.Dimension.HOSTNAME);
verifySuccessfulRequest(Method.GET, "/defined", "",
"{\"id\":{\"description\":\"desc\",\"modification-effect\":\"mod\",\"dimensions\":[\"hostname\"]}}");
+
+ verifySuccessfulRequest(Method.GET, "/defined/id", "",
+ "{\"description\":\"desc\",\"modification-effect\":\"mod\",\"dimensions\":[\"hostname\"]}");
}
}