diff options
author | gjoranv <gv@verizonmedia.com> | 2019-08-30 11:11:48 +0200 |
---|---|---|
committer | gjoranv <gv@verizonmedia.com> | 2019-08-30 11:11:48 +0200 |
commit | 7a5514c7918a0b18d5f7fd1906edc58b5310d4f0 (patch) | |
tree | 8eb70716033c28db22935d1c62c3d1f6b847be17 /metrics-proxy | |
parent | 0a34ba7341b0448cdde113a72ae05833bf77426c (diff) |
Move static utilities into the http handler base class.
Diffstat (limited to 'metrics-proxy')
4 files changed, 36 insertions, 65 deletions
diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/HttpHandlerBase.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/HttpHandlerBase.java index d3643bd8e61..d582abdba57 100644 --- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/HttpHandlerBase.java +++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/HttpHandlerBase.java @@ -11,14 +11,21 @@ import com.yahoo.container.jdisc.HttpRequest; import com.yahoo.container.jdisc.HttpResponse; import com.yahoo.container.jdisc.ThreadedHttpRequestHandler; import com.yahoo.restapi.Path; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; import java.net.URI; +import java.util.List; import java.util.Optional; import java.util.concurrent.Executor; +import static com.yahoo.jdisc.Response.Status.INTERNAL_SERVER_ERROR; import static com.yahoo.jdisc.Response.Status.METHOD_NOT_ALLOWED; import static com.yahoo.jdisc.Response.Status.NOT_FOUND; +import static com.yahoo.jdisc.Response.Status.OK; import static com.yahoo.jdisc.http.HttpRequest.Method.GET; +import static java.util.logging.Level.WARNING; /** * @author gjoranv @@ -51,4 +58,33 @@ public abstract class HttpHandlerBase extends ThreadedHttpRequestHandler { return request.getProperty("consumer"); } + protected JsonResponse resourceListResponse(URI requestUri, List<String> resources) { + try { + return new JsonResponse(OK, resourceList(requestUri, resources)); + } catch (JSONException e) { + log.log(WARNING, "Bad JSON construction in generated resource list for " + requestUri.getPath(), e); + return new ErrorResponse(INTERNAL_SERVER_ERROR, + "An error occurred when generating the list of api resources."); + } + } + + // TODO: Use jackson with a "Resources" class instead of JSONObject + private static String resourceList(URI requestUri, List<String> resources) throws JSONException { + int port = requestUri.getPort(); + String host = requestUri.getHost(); + StringBuilder base = new StringBuilder("http://"); + base.append(host); + if (port >= 0) { + base.append(":").append(port); + } + String uriBase = base.toString(); + JSONArray linkList = new JSONArray(); + for (String api : resources) { + JSONObject resource = new JSONObject(); + resource.put("url", uriBase + api); + linkList.put(resource); + } + return new JSONObject().put("resources", linkList).toString(4); + } + } diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/MetricsHandler.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/MetricsHandler.java index 87034c77524..1f163dc6b9a 100644 --- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/MetricsHandler.java +++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/MetricsHandler.java @@ -18,7 +18,6 @@ import java.util.List; import java.util.Optional; import java.util.concurrent.Executor; -import static ai.vespa.metricsproxy.http.RestApiUtil.resourceListResponse; import static ai.vespa.metricsproxy.metric.model.json.GenericJsonUtil.toGenericJsonModel; import static com.yahoo.jdisc.Response.Status.INTERNAL_SERVER_ERROR; import static com.yahoo.jdisc.Response.Status.OK; diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/RestApiUtil.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/RestApiUtil.java deleted file mode 100644 index 9d9256e17e8..00000000000 --- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/RestApiUtil.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. - */ - -package ai.vespa.metricsproxy.http; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -import java.net.URI; -import java.util.List; -import java.util.logging.Logger; - -import static com.yahoo.jdisc.Response.Status.INTERNAL_SERVER_ERROR; -import static com.yahoo.jdisc.Response.Status.OK; -import static java.util.logging.Level.WARNING; - -/** - * @author gjoranv - */ -public class RestApiUtil { - private static Logger log = Logger.getLogger(RestApiUtil.class.getName()); - - - public static JsonResponse resourceListResponse(URI requestUri, List<String> resources) { - try { - return new JsonResponse(OK, RestApiUtil.resourceList(requestUri, resources)); - } catch (JSONException e) { - log.log(WARNING, "Bad JSON construction in generated resource list for " + requestUri.getPath(), e); - return new ErrorResponse(INTERNAL_SERVER_ERROR, - "An error occurred when generating the list of api resources."); - } - } - - // TODO: Use jackson with a "Resources" class instead of JSONObject - private static String resourceList(URI requestUri, List<String> resources) throws JSONException { - int port = requestUri.getPort(); - String host = requestUri.getHost(); - StringBuilder base = new StringBuilder("http://"); - base.append(host); - if (port >= 0) { - base.append(":").append(port); - } - String uriBase = base.toString(); - JSONArray linkList = new JSONArray(); - for (String api : resources) { - JSONObject resource = new JSONObject(); - resource.put("url", uriBase + api); - linkList.put(resource); - } - return new JSONObject().put("resources", linkList).toString(4); - } - -} diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/prometheus/PrometheusHandler.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/prometheus/PrometheusHandler.java index d2aa6a290bd..02f11c7e900 100644 --- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/prometheus/PrometheusHandler.java +++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/prometheus/PrometheusHandler.java @@ -6,18 +6,13 @@ package ai.vespa.metricsproxy.http.prometheus; import ai.vespa.metricsproxy.core.MetricsConsumers; import ai.vespa.metricsproxy.core.MetricsManager; -import ai.vespa.metricsproxy.http.ErrorResponse; import ai.vespa.metricsproxy.http.HttpHandlerBase; -import ai.vespa.metricsproxy.http.JsonResponse; import ai.vespa.metricsproxy.http.TextResponse; -import ai.vespa.metricsproxy.http.ValuesFetcher; import ai.vespa.metricsproxy.metric.model.MetricsPacket; import ai.vespa.metricsproxy.metric.model.json.JsonRenderingException; import ai.vespa.metricsproxy.service.VespaServices; import com.google.inject.Inject; -import com.yahoo.container.jdisc.HttpRequest; import com.yahoo.container.jdisc.HttpResponse; -import com.yahoo.container.jdisc.ThreadedHttpRequestHandler; import com.yahoo.restapi.Path; import java.net.URI; @@ -25,13 +20,9 @@ import java.util.List; import java.util.Optional; import java.util.concurrent.Executor; -import static ai.vespa.metricsproxy.http.RestApiUtil.resourceListResponse; import static ai.vespa.metricsproxy.metric.model.prometheus.PrometheusUtil.toPrometheusModel; import static com.yahoo.jdisc.Response.Status.INTERNAL_SERVER_ERROR; -import static com.yahoo.jdisc.Response.Status.METHOD_NOT_ALLOWED; -import static com.yahoo.jdisc.Response.Status.NOT_FOUND; import static com.yahoo.jdisc.Response.Status.OK; -import static com.yahoo.jdisc.http.HttpRequest.Method.GET; /** * @author gjoranv |