diff options
author | Ola Aunronning <olaa@yahooinc.com> | 2023-08-28 15:29:20 +0200 |
---|---|---|
committer | Ola Aunronning <olaa@yahooinc.com> | 2023-08-28 15:29:20 +0200 |
commit | 16c3f00730d73504a855879693094160e9ef820c (patch) | |
tree | 249c9b0331bb33b9d20e6d68f68eac83958599a0 /metrics-proxy/src/main/java/ai | |
parent | de1692aad9de5d06a64c5231be8be01a0357f854 (diff) |
Support fetching metrics in JSONL format
Diffstat (limited to 'metrics-proxy/src/main/java/ai')
3 files changed, 24 insertions, 5 deletions
diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/yamas/YamasHandler.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/yamas/YamasHandler.java index ef23a5ad070..fc5c790db54 100644 --- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/yamas/YamasHandler.java +++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/yamas/YamasHandler.java @@ -59,18 +59,18 @@ public class YamasHandler extends HttpHandlerBase { @Override public Optional<HttpResponse> doHandle(URI requestUri, Path apiPath, String consumer) { if (apiPath.matches(V1_PATH)) return Optional.of(resourceListResponse(requestUri, List.of(VALUES_PATH, CONSUMERS_PATH))); - if (apiPath.matches(VALUES_PATH)) return Optional.of(valuesResponse(consumer)); + if (apiPath.matches(VALUES_PATH)) return Optional.of(valuesResponse(consumer, requestUri.getQuery())); if (apiPath.matches(CONSUMERS_PATH)) return Optional.of(consumersResponse()); return Optional.empty(); } - private HttpResponse valuesResponse(String consumer) { + private HttpResponse valuesResponse(String consumer, String query) { try { List<MetricsPacket> metrics = new ArrayList<>(consumer == null ? valuesFetcher.fetchAllMetrics() : valuesFetcher.fetch(consumer)); if (consumer == null || "Vespa".equalsIgnoreCase(consumer)) { metrics.addAll(nodeMetricGatherer.gatherMetrics()); // TODO: Currently only add these metrics in this handler. Eventually should be included in all handlers } - return new YamasResponse(OK, metrics); + return new YamasResponse(OK, metrics, useJsonl(query)); } catch (JsonRenderingException e) { return new ErrorResponse(INTERNAL_SERVER_ERROR, e.getMessage()); } @@ -93,4 +93,8 @@ public class YamasHandler extends HttpHandlerBase { }; } + private boolean useJsonl(String query) { + return query != null && query.contains("jsonl=true"); + } + }
\ No newline at end of file diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/yamas/YamasResponse.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/yamas/YamasResponse.java index 6c94de49140..e838987133f 100644 --- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/yamas/YamasResponse.java +++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/yamas/YamasResponse.java @@ -16,10 +16,12 @@ import java.util.List; public class YamasResponse extends HttpResponse { private final List<MetricsPacket> metrics; + private boolean useJsonl; - public YamasResponse(int code, List<MetricsPacket> metrics) { + public YamasResponse(int code, List<MetricsPacket> metrics, boolean useJsonl) { super(code); this.metrics = metrics; + this.useJsonl = useJsonl; } @Override @@ -29,7 +31,10 @@ public class YamasResponse extends HttpResponse { @Override public void render(OutputStream outputStream) throws IOException { - YamasJsonUtil.toJson(metrics, outputStream, false); + if (useJsonl) + YamasJsonUtil.toJsonl(metrics, outputStream, false); + else + YamasJsonUtil.toJson(metrics, outputStream, false); } } diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/json/YamasJsonUtil.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/json/YamasJsonUtil.java index 5086846293b..39589e144e6 100644 --- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/json/YamasJsonUtil.java +++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/json/YamasJsonUtil.java @@ -8,6 +8,7 @@ import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.StreamWriteFeature; +import com.fasterxml.jackson.core.util.MinimalPrettyPrinter; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.ByteArrayOutputStream; @@ -113,6 +114,15 @@ public class YamasJsonUtil { generator.close(); } + public static void toJsonl(List<MetricsPacket> metrics, OutputStream outputStream, boolean addStatus) throws IOException { + JsonGenerator generator = factory.createGenerator(outputStream) + .setPrettyPrinter(new MinimalPrettyPrinter("\n")); + for (MetricsPacket metricsPacket : metrics) { + toJson(metricsPacket, generator, addStatus); + } + generator.close(); + } + private static void toJson(MetricsPacket metric, JsonGenerator generator, boolean addStatus) throws IOException { generator.writeStartObject(); if (addStatus) { |