summaryrefslogtreecommitdiffstats
path: root/metrics-proxy/src/main/java
diff options
context:
space:
mode:
authorOla Aunronning <olaa@yahooinc.com>2023-08-28 15:29:20 +0200
committerOla Aunronning <olaa@yahooinc.com>2023-08-28 15:29:20 +0200
commit16c3f00730d73504a855879693094160e9ef820c (patch)
tree249c9b0331bb33b9d20e6d68f68eac83958599a0 /metrics-proxy/src/main/java
parentde1692aad9de5d06a64c5231be8be01a0357f854 (diff)
Support fetching metrics in JSONL format
Diffstat (limited to 'metrics-proxy/src/main/java')
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/yamas/YamasHandler.java10
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/yamas/YamasResponse.java9
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/json/YamasJsonUtil.java10
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) {