diff options
Diffstat (limited to 'metrics-proxy/src/main/java/ai')
7 files changed, 36 insertions, 36 deletions
diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/json/GenericApplicationModel.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/json/GenericApplicationModel.java index a9ebd41fd36..59d1f9e5c83 100644 --- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/json/GenericApplicationModel.java +++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/json/GenericApplicationModel.java @@ -4,7 +4,6 @@ package ai.vespa.metricsproxy.metric.model.json; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; import java.util.List; @@ -22,9 +21,8 @@ public class GenericApplicationModel { public List<GenericJsonModel> nodes; public String serialize() { - ObjectMapper mapper = JacksonUtil.createObjectMapper(); try { - return mapper.writeValueAsString(this); + return JacksonUtil.objectMapper().writeValueAsString(this); } catch (IOException e) { throw new JsonRenderingException("Could not render application nodes. Check the log for details.", e); } diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/json/GenericJsonModel.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/json/GenericJsonModel.java index ffb9813d257..c4ba0f39a18 100644 --- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/json/GenericJsonModel.java +++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/json/GenericJsonModel.java @@ -5,7 +5,6 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; import java.util.List; @@ -33,9 +32,8 @@ public class GenericJsonModel { public List<GenericService> services; public String serialize() { - ObjectMapper mapper = JacksonUtil.createObjectMapper(); try { - return mapper.writeValueAsString(this); + return JacksonUtil.objectMapper().writeValueAsString(this); } catch (IOException e) { throw new JsonRenderingException("Could not render metrics. Check the log for details.", e); } diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/json/GenericJsonUtil.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/json/GenericJsonUtil.java index 02f45010873..c32e90ecc9f 100644 --- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/json/GenericJsonUtil.java +++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/json/GenericJsonUtil.java @@ -5,7 +5,6 @@ import ai.vespa.metricsproxy.http.application.Node; import ai.vespa.metricsproxy.metric.model.MetricsPacket; import ai.vespa.metricsproxy.metric.model.ServiceId; import ai.vespa.metricsproxy.metric.model.StatusCode; -import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; import java.util.ArrayList; @@ -18,7 +17,7 @@ import java.util.stream.Collectors; import static ai.vespa.metricsproxy.metric.ExternalMetrics.VESPA_NODE_SERVICE_ID; import static ai.vespa.metricsproxy.metric.model.DimensionId.toDimensionId; import static ai.vespa.metricsproxy.metric.model.MetricId.toMetricId; -import static ai.vespa.metricsproxy.metric.model.json.JacksonUtil.createObjectMapper; +import static ai.vespa.metricsproxy.metric.model.json.JacksonUtil.objectMapper; import static java.util.Collections.emptyList; import static java.util.Collections.singletonList; import static java.util.logging.Level.WARNING; @@ -87,8 +86,7 @@ public class GenericJsonUtil { public static List<MetricsPacket.Builder> toMetricsPackets(String jsonString) { try { - ObjectMapper mapper = createObjectMapper(); - GenericJsonModel jsonModel = mapper.readValue(jsonString, GenericJsonModel.class); + GenericJsonModel jsonModel = objectMapper().readValue(jsonString, GenericJsonModel.class); return toMetricsPackets(jsonModel); } catch (IOException e) { log.log(WARNING, "Could not create metrics packet from string:\n" + jsonString, e); diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/json/JacksonUtil.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/json/JacksonUtil.java index 72835a44e7f..8eb7df20218 100644 --- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/json/JacksonUtil.java +++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/json/JacksonUtil.java @@ -1,6 +1,7 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package ai.vespa.metricsproxy.metric.model.json; +import ai.vespa.json.Jackson; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.Version; import com.fasterxml.jackson.databind.JsonSerializer; @@ -22,6 +23,7 @@ public class JacksonUtil { private static final ThreadLocal<DecimalFormat> withinLongRangeFormat = ThreadLocal.withInitial(JacksonUtil::createWithinLongRangeFormat); private static final ThreadLocal<DecimalFormat> outsideLongRangeFormat = ThreadLocal.withInitial(JacksonUtil::createOutsideLongRangeFormat); + private static final ObjectMapper objectMapper = createObjectMapper(); private static DecimalFormat createWithinLongRangeFormat() { DecimalFormat df = new DecimalFormat("#.####", new DecimalFormatSymbols(Locale.ENGLISH)); df.setMaximumFractionDigits(13); @@ -35,14 +37,17 @@ public class JacksonUtil { /** * Returns an object mapper with a custom floating point serializer to avoid scientific notation */ - public static ObjectMapper createObjectMapper() { - ObjectMapper mapper = new ObjectMapper(); + private static ObjectMapper createObjectMapper() { + ObjectMapper mapper = Jackson.createMapper(); SimpleModule module = new SimpleModule("DoubleSerializer", new Version(1, 0, 0, "", null, null)); module.addSerializer(Double.class, new DoubleSerializer()); mapper.registerModule(module); return mapper; } + public static ObjectMapper objectMapper() { + return objectMapper; + } /** * Returns an object mapper with a custom floating point serializer to avoid scientific notation */ @@ -63,8 +68,8 @@ public class JacksonUtil { } public static class DoubleSerializer extends JsonSerializer<Double> { - private DecimalFormat withinLongRangeFormat = createWithinLongRangeFormat(); - private DecimalFormat outsideLongRangeFormat = createOutsideLongRangeFormat(); + private final DecimalFormat withinLongRangeFormat = createWithinLongRangeFormat(); + private final DecimalFormat outsideLongRangeFormat = createOutsideLongRangeFormat(); @Override public void serialize(Double value, JsonGenerator jgen, SerializerProvider provider) throws IOException { jgen.writeNumber(format(value, withinLongRangeFormat, outsideLongRangeFormat)); 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 6a88350d5ed..82049da5115 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 @@ -9,7 +9,6 @@ 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; import java.io.IOException; @@ -21,6 +20,7 @@ import java.util.logging.Logger; import java.util.stream.Collectors; import static ai.vespa.metricsproxy.http.ValuesFetcher.defaultMetricsConsumerId; +import static ai.vespa.metricsproxy.metric.model.json.JacksonUtil.objectMapper; import static java.util.Collections.emptyList; import static java.util.logging.Level.WARNING; @@ -56,9 +56,8 @@ public class YamasJsonUtil { */ public static List<MetricsPacket.Builder> toMetricsPackets(String jsonString) { List<MetricsPacket.Builder> packets = new ArrayList<>(); - try { - JsonParser jp = new JsonFactory().createParser(jsonString); - jp.setCodec(new ObjectMapper()); + var mapper = objectMapper(); + try (JsonParser jp = mapper.createParser(jsonString)) { while (jp.nextToken() != null) { YamasJsonModel jsonModel = jp.readValueAs(YamasJsonModel.class); packets.add(toMetricsPacketBuilder(jsonModel)); 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 43011a24f8c..80ad2256b1c 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 @@ -1,6 +1,7 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package ai.vespa.metricsproxy.service; +import ai.vespa.json.Jackson; import ai.vespa.metricsproxy.metric.Metric; import ai.vespa.metricsproxy.metric.model.DimensionId; import ai.vespa.metricsproxy.metric.model.MetricId; @@ -31,14 +32,18 @@ public class MetricsParser { void accept(Metric metric); } - private static final ObjectMapper jsonMapper = new ObjectMapper(); + private static final ObjectMapper jsonMapper = Jackson.mapper(); public static void parse(String data, Collector consumer) throws IOException { - parse(jsonMapper.createParser(data), consumer); + try (JsonParser parser = jsonMapper.createParser(data)) { + parse(parser, consumer); + } } static void parse(InputStream data, Collector consumer) throws IOException { - parse(jsonMapper.createParser(data), consumer); + try (JsonParser parser = jsonMapper.createParser(data)) { + parse(parser, consumer); + } } // Top level 'metrics' object, with e.g. 'time', 'status' and 'metrics'. @@ -123,21 +128,19 @@ public class MetricsParser { 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(parser); - } else { - if (token == JsonToken.START_OBJECT || token == JsonToken.START_ARRAY) { - parser.skipChildren(); + switch (fieldName) { + case "name" -> name = parser.getText(); + case "description" -> description = parser.getText(); + case "dimensions" -> dim = parseDimensions(parser, uniqueDimensions); + case "values" -> values = parseValues(parser); + default -> { + if (token == JsonToken.START_OBJECT || token == JsonToken.START_ARRAY) { + parser.skipChildren(); + } } } } - if (name.equals("")) { + if (name.isEmpty()) { throw new IOException("missing name for entry in 'values' array"); } for (Map.Entry<String, Number> value : values) { diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/RemoteHealthMetricFetcher.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/RemoteHealthMetricFetcher.java index b3ade5074b8..2f4a807a4d0 100644 --- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/RemoteHealthMetricFetcher.java +++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/RemoteHealthMetricFetcher.java @@ -1,9 +1,9 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package ai.vespa.metricsproxy.service; +import ai.vespa.json.Jackson; import ai.vespa.metricsproxy.metric.HealthMetric; import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse; import org.apache.hc.core5.http.HttpEntity; import org.apache.hc.core5.http.io.entity.EntityUtils; @@ -20,7 +20,6 @@ import java.util.logging.Logger; * @author Jo Kristian Bergum */ public class RemoteHealthMetricFetcher extends HttpMetricFetcher { - private static final ObjectMapper jsonMapper = new ObjectMapper(); private final static Logger log = Logger.getLogger(RemoteHealthMetricFetcher.class.getPackage().getName()); private final static String HEALTH_PATH = STATE_PATH + "health"; @@ -54,7 +53,7 @@ public class RemoteHealthMetricFetcher extends HttpMetricFetcher { private HealthMetric parse(InputStream data) { try { - JsonNode o = jsonMapper.readTree(data); + JsonNode o = Jackson.mapper().readTree(data); JsonNode status = o.get("status"); String code = status.get("code").asText(); String message = ""; |