From 020918476f83d16e939f4dadd3f18972a1619c67 Mon Sep 17 00:00:00 2001 From: gjoranv Date: Fri, 16 Dec 2022 14:35:09 +0100 Subject: Non-functional: rearrange functions, add comments and whitespace. --- .../vespa/metricsproxy/service/MetricsParser.java | 79 ++++++++++++---------- 1 file changed, 44 insertions(+), 35 deletions(-) (limited to 'metrics-proxy/src/main') 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> uniqueDimensions) throws IOException { + String name = ""; + String description = ""; + Map dim = Map.of(); + List> 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 value : values) { + consumer.consume(new Metric(MetricId.toMetricId(value.getKey()), value.getValue(), timestamp, dim, description)); + } } private static Map 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> parseValues(String prefix, JsonParser parser) throws IOException { List> 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> uniqueDimensions) throws IOException { - String name = ""; - String description = ""; - Map dim = Map.of(); - List> 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 value : values) { - consumer.consume(new Metric(MetricId.toMetricId(value.getKey()), value.getValue(), timestamp, dim, description)); - } - } + } -- cgit v1.2.3