summaryrefslogtreecommitdiffstats
path: root/metrics-proxy
diff options
context:
space:
mode:
authorgjoranv <gv@verizonmedia.com>2022-12-16 14:35:09 +0100
committergjoranv <gv@verizonmedia.com>2022-12-16 14:35:09 +0100
commit020918476f83d16e939f4dadd3f18972a1619c67 (patch)
tree852d99950a90117582fba7f7521b430e13d208a9 /metrics-proxy
parenta5dc4e9c1cf0ecba44a5eebe6e5e003f2e813076 (diff)
Non-functional: rearrange functions, add comments and whitespace.
Diffstat (limited to 'metrics-proxy')
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/MetricsParser.java79
1 files changed, 44 insertions, 35 deletions
diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/MetricsParser.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/MetricsParser.java
index bb21485e0e7..ea2b35959f7 100644
--- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/MetricsParser.java
+++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/MetricsParser.java
@@ -38,6 +38,8 @@ public class MetricsParser {
static void parse(InputStream data, Consumer consumer) throws IOException {
parse(jsonMapper.createParser(data), consumer);
}
+
+ // Top level 'metrics' object, with e.g. 'time', 'status' and 'metrics'.
private static void parse(JsonParser parser, Consumer consumer) throws IOException {
if (parser.nextToken() != JsonToken.START_OBJECT) {
throw new IOException("Expected start of object, got " + parser.currentToken());
@@ -55,6 +57,7 @@ public class MetricsParser {
}
}
}
+
static private Instant parseSnapshot(JsonParser parser) throws IOException {
if (parser.getCurrentToken() != JsonToken.START_OBJECT) {
throw new IOException("Expected start of 'snapshot' object, got " + parser.currentToken());
@@ -75,6 +78,28 @@ public class MetricsParser {
return timestamp;
}
+ // 'metrics' object with 'snapshot' and 'values' arrays
+ static private void parseMetrics(JsonParser parser, Consumer consumer) throws IOException {
+ if (parser.getCurrentToken() != JsonToken.START_OBJECT) {
+ throw new IOException("Expected start of 'metrics' object, got " + parser.currentToken());
+ }
+ Instant timestamp = Instant.now();
+ for (parser.nextToken(); parser.getCurrentToken() != JsonToken.END_OBJECT; parser.nextToken()) {
+ String fieldName = parser.getCurrentName();
+ JsonToken token = parser.nextToken();
+ if (fieldName.equals("snapshot")) {
+ timestamp = parseSnapshot(parser);
+ } else if (fieldName.equals("values")) {
+ parseMetricValues(parser, timestamp, consumer);
+ } else {
+ if (token == JsonToken.START_OBJECT || token == JsonToken.START_ARRAY) {
+ parser.skipChildren();
+ }
+ }
+ }
+ }
+
+ // 'values' array
static private void parseMetricValues(JsonParser parser, Instant timestamp, Consumer consumer) throws IOException {
if (parser.getCurrentToken() != JsonToken.START_ARRAY) {
throw new IOException("Expected start of 'metrics:values' array, got " + parser.currentToken());
@@ -86,24 +111,33 @@ public class MetricsParser {
}
}
- static private void parseMetrics(JsonParser parser, Consumer consumer) throws IOException {
- if (parser.getCurrentToken() != JsonToken.START_OBJECT) {
- throw new IOException("Expected start of 'metrics' object, got " + parser.currentToken());
- }
- Instant timestamp = Instant.now();
+ // One item in the 'values' array, where each item has 'name', 'values' and 'dimensions'
+ static private void handleValue(JsonParser parser, Instant timestamp, Consumer consumer,
+ Map<Long, Map<DimensionId, String>> uniqueDimensions) throws IOException {
+ String name = "";
+ String description = "";
+ Map<DimensionId, String> dim = Map.of();
+ List<Map.Entry<String, Number>> values = List.of();
for (parser.nextToken(); parser.getCurrentToken() != JsonToken.END_OBJECT; parser.nextToken()) {
String fieldName = parser.getCurrentName();
JsonToken token = parser.nextToken();
- if (fieldName.equals("snapshot")) {
- timestamp = parseSnapshot(parser);
+ if (fieldName.equals("name")) {
+ name = parser.getText();
+ } else if (fieldName.equals("description")) {
+ description = parser.getText();
+ } else if (fieldName.equals("dimensions")) {
+ dim = parseDimensions(parser, uniqueDimensions);
} else if (fieldName.equals("values")) {
- parseMetricValues(parser, timestamp, consumer);
+ values = parseValues(name+".", parser);
} else {
if (token == JsonToken.START_OBJECT || token == JsonToken.START_ARRAY) {
parser.skipChildren();
}
}
}
+ for (Map.Entry<String, Number> value : values) {
+ consumer.consume(new Metric(MetricId.toMetricId(value.getKey()), value.getValue(), timestamp, dim, description));
+ }
}
private static Map<DimensionId, String> parseDimensions(JsonParser parser,
@@ -128,6 +162,7 @@ public class MetricsParser {
Long uniqueKey = (((long) keyHash) << 32) | (valueHash & 0xffffffffL);
return uniqueDimensions.computeIfAbsent(uniqueKey, key -> dims.stream().collect(Collectors.toUnmodifiableMap(e -> toDimensionId(e.getKey()), Map.Entry::getValue)));
}
+
private static List<Map.Entry<String, Number>> parseValues(String prefix, JsonParser parser) throws IOException {
List<Map.Entry<String, Number>> metrics = new ArrayList<>();
for (parser.nextToken(); parser.getCurrentToken() != JsonToken.END_OBJECT; parser.nextToken()) {
@@ -144,31 +179,5 @@ public class MetricsParser {
}
return metrics;
}
- static private void handleValue(JsonParser parser, Instant timestamp, Consumer consumer,
- Map<Long, Map<DimensionId, String>> uniqueDimensions) throws IOException {
- String name = "";
- String description = "";
- Map<DimensionId, String> dim = Map.of();
- List<Map.Entry<String, Number>> values = List.of();
- for (parser.nextToken(); parser.getCurrentToken() != JsonToken.END_OBJECT; parser.nextToken()) {
- String fieldName = parser.getCurrentName();
- JsonToken token = parser.nextToken();
- if (fieldName.equals("name")) {
- name = parser.getText();
- } else if (fieldName.equals("description")) {
- description = parser.getText();
- } else if (fieldName.equals("dimensions")) {
- dim = parseDimensions(parser, uniqueDimensions);
- } else if (fieldName.equals("values")) {
- values = parseValues(name+".", parser);
- } else {
- if (token == JsonToken.START_OBJECT || token == JsonToken.START_ARRAY) {
- parser.skipChildren();
- }
- }
- }
- for (Map.Entry<String, Number> value : values) {
- consumer.consume(new Metric(MetricId.toMetricId(value.getKey()), value.getValue(), timestamp, dim, description));
- }
- }
+
}