summaryrefslogtreecommitdiffstats
path: root/metrics-proxy
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2023-11-23 16:07:43 +0100
committerHenning Baldersheim <balder@yahoo-inc.com>2023-11-23 16:12:51 +0100
commitef535f6c51393d945d9fe07de38de224d5ae443f (patch)
tree2f5976537a200aebbf6644b8e1ef93f2c669319d /metrics-proxy
parentf966346429c85fc31c8ea962b518e02a19f77f46 (diff)
jackson 2.16 changes some of its default settings so we consolidate our use of the ObjectMapper.
Unless special options are used, use a common instance, or create via factory metod.
Diffstat (limited to 'metrics-proxy')
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/json/GenericApplicationModel.java4
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/json/GenericJsonModel.java4
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/json/GenericJsonUtil.java6
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/json/JacksonUtil.java13
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/json/YamasJsonUtil.java7
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/MetricsParser.java33
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/RemoteHealthMetricFetcher.java5
-rw-r--r--metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/application/ApplicationMetricsHandlerTest.java13
-rw-r--r--metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/metrics/MetricsHandlerTestBase.java13
-rw-r--r--metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/prometheus/PrometheusHandlerTest.java7
-rw-r--r--metrics-proxy/src/test/java/ai/vespa/metricsproxy/metric/model/json/GenericApplicationModelTest.java8
-rw-r--r--metrics-proxy/src/test/java/ai/vespa/metricsproxy/metric/model/json/GenericJsonModelTest.java8
-rw-r--r--metrics-proxy/src/test/java/ai/vespa/metricsproxy/metric/model/json/YamasJsonModelTest.java7
-rw-r--r--metrics-proxy/src/test/java/ai/vespa/metricsproxy/metric/model/json/YamasJsonUtilTest.java5
-rw-r--r--metrics-proxy/src/test/java/ai/vespa/metricsproxy/node/NodeMetricGathererTest.java12
-rw-r--r--metrics-proxy/src/test/java/ai/vespa/metricsproxy/rpc/RpcMetricsTest.java12
16 files changed, 69 insertions, 88 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 = "";
diff --git a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/application/ApplicationMetricsHandlerTest.java b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/application/ApplicationMetricsHandlerTest.java
index c57fe836269..3a902767f29 100644
--- a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/application/ApplicationMetricsHandlerTest.java
+++ b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/application/ApplicationMetricsHandlerTest.java
@@ -10,7 +10,6 @@ import ai.vespa.metricsproxy.metric.model.json.GenericJsonModel;
import ai.vespa.metricsproxy.metric.model.json.GenericMetrics;
import ai.vespa.metricsproxy.metric.model.json.GenericService;
import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.github.tomakehurst.wiremock.junit.WireMockRule;
import com.yahoo.container.jdisc.RequestHandlerTestDriver;
@@ -30,7 +29,7 @@ import static ai.vespa.metricsproxy.http.ValuesFetcher.defaultMetricsConsumerId;
import static ai.vespa.metricsproxy.http.application.ApplicationMetricsHandler.METRICS_V1_PATH;
import static ai.vespa.metricsproxy.http.application.ApplicationMetricsHandler.METRICS_VALUES_PATH;
import static ai.vespa.metricsproxy.http.application.ApplicationMetricsHandler.PROMETHEUS_VALUES_PATH;
-import static ai.vespa.metricsproxy.metric.model.json.JacksonUtil.createObjectMapper;
+import static ai.vespa.metricsproxy.metric.model.json.JacksonUtil.objectMapper;
import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
import static com.github.tomakehurst.wiremock.client.WireMock.equalTo;
import static com.github.tomakehurst.wiremock.client.WireMock.get;
@@ -47,8 +46,6 @@ import static org.junit.Assert.fail;
*/
public class ApplicationMetricsHandlerTest {
- private static final ObjectMapper jsonMapper = new ObjectMapper();
-
private static final String HOST = "localhost";
private static final String URI_BASE = "http://" + HOST;
private static final String METRICS_V1_URI = URI_BASE + METRICS_V1_PATH;
@@ -105,7 +102,7 @@ public class ApplicationMetricsHandlerTest {
@Test
public void v1_response_contains_values_uri() throws Exception {
String response = testDriver.sendRequest(METRICS_V1_URI).readAll();
- JsonNode root = jsonMapper.readTree(response);
+ JsonNode root = objectMapper().readTree(response);
assertTrue(root.has("resources"));
ArrayNode resources = (ArrayNode) root.get("resources");
@@ -121,7 +118,7 @@ public class ApplicationMetricsHandlerTest {
@Test
public void visually_inspect_values_response_metrics() throws Exception {
String response = testDriver.sendRequest(METRICS_VALUES_URI).readAll();
- ObjectMapper mapper = createObjectMapper();
+ var mapper = objectMapper();
var jsonModel = mapper.readValue(response, GenericApplicationModel.class);
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonModel));
}
@@ -202,14 +199,14 @@ public class ApplicationMetricsHandlerTest {
@Test
public void invalid_path_yields_error_response() throws Exception {
String response = testDriver.sendRequest(METRICS_V1_URI + "/invalid").readAll();
- JsonNode root = jsonMapper.readTree(response);
+ JsonNode root = objectMapper().readTree(response);
assertTrue(root.has("error"));
}
private GenericApplicationModel getResponseAsJsonModel(String consumer) {
String response = testDriver.sendRequest(METRICS_VALUES_URI + "?consumer=" + consumer).readAll();
try {
- return createObjectMapper().readValue(response, GenericApplicationModel.class);
+ return objectMapper().readValue(response, GenericApplicationModel.class);
} catch (IOException e) {
fail("Failed to create json model: " + e.getMessage());
throw new RuntimeException(e);
diff --git a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/metrics/MetricsHandlerTestBase.java b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/metrics/MetricsHandlerTestBase.java
index 692c4194bda..8e80dbddf9e 100644
--- a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/metrics/MetricsHandlerTestBase.java
+++ b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/metrics/MetricsHandlerTestBase.java
@@ -7,7 +7,6 @@ import ai.vespa.metricsproxy.metric.model.json.GenericMetrics;
import ai.vespa.metricsproxy.metric.model.json.GenericService;
import ai.vespa.metricsproxy.service.DownService;
import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import org.junit.Ignore;
import org.junit.Test;
@@ -19,7 +18,7 @@ import static ai.vespa.metricsproxy.metric.dimensions.PublicDimensions.INTERNAL_
import static ai.vespa.metricsproxy.metric.dimensions.PublicDimensions.REASON;
import static ai.vespa.metricsproxy.metric.dimensions.PublicDimensions.SERVICE_ID;
import static ai.vespa.metricsproxy.metric.model.StatusCode.DOWN;
-import static ai.vespa.metricsproxy.metric.model.json.JacksonUtil.createObjectMapper;
+import static ai.vespa.metricsproxy.metric.model.json.JacksonUtil.objectMapper;
import static ai.vespa.metricsproxy.service.DummyService.METRIC_1;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -33,8 +32,6 @@ import static org.junit.Assert.fail;
*/
public abstract class MetricsHandlerTestBase<MODEL> extends HttpHandlerTestBase {
- private static final ObjectMapper jsonMapper = new ObjectMapper();
-
static String rootUri;
static String valuesUri;
@@ -45,7 +42,7 @@ public abstract class MetricsHandlerTestBase<MODEL> extends HttpHandlerTestBase
private MODEL getResponseAsJsonModel(String consumer) {
String response = testDriver.sendRequest(valuesUri + "?consumer=" + consumer).readAll();
try {
- return createObjectMapper().readValue(response, modelClass);
+ return objectMapper().readValue(response, modelClass);
} catch (IOException e) {
fail("Failed to create json model: " + e.getMessage());
throw new RuntimeException(e);
@@ -59,14 +56,14 @@ public abstract class MetricsHandlerTestBase<MODEL> extends HttpHandlerTestBase
@Test
public void invalid_path_yields_error_response() throws Exception {
String response = testDriver.sendRequest(rootUri + "/invalid").readAll();
- JsonNode root = jsonMapper.readTree(response);
+ JsonNode root = objectMapper().readTree(response);
assertTrue(root.has("error"));
}
@Test
public void root_response_contains_values_uri() throws Exception {
String response = testDriver.sendRequest(rootUri).readAll();
- JsonNode root = jsonMapper.readTree(response);
+ JsonNode root = objectMapper().readTree(response);
assertTrue(root.has("resources"));
ArrayNode resources = (ArrayNode) root.get("resources");
@@ -80,7 +77,7 @@ public abstract class MetricsHandlerTestBase<MODEL> extends HttpHandlerTestBase
@Test
public void visually_inspect_values_response() throws Exception {
String response = testDriver.sendRequest(valuesUri).readAll();
- ObjectMapper mapper = createObjectMapper();
+ var mapper = objectMapper();
var jsonModel = mapper.readValue(response, modelClass);
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonModel));
}
diff --git a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/prometheus/PrometheusHandlerTest.java b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/prometheus/PrometheusHandlerTest.java
index f8e07c3f2ec..b36f521e4ac 100644
--- a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/prometheus/PrometheusHandlerTest.java
+++ b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/http/prometheus/PrometheusHandlerTest.java
@@ -4,7 +4,6 @@ package ai.vespa.metricsproxy.http.prometheus;
import ai.vespa.metricsproxy.http.HttpHandlerTestBase;
import ai.vespa.metricsproxy.service.DummyService;
import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.yahoo.container.jdisc.RequestHandlerTestDriver;
import org.junit.BeforeClass;
@@ -14,17 +13,15 @@ import org.junit.Test;
import java.util.concurrent.Executors;
import static ai.vespa.metricsproxy.metric.dimensions.PublicDimensions.REASON;
+import static ai.vespa.metricsproxy.metric.model.json.JacksonUtil.objectMapper;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
/**
* @author gjoranv
*/
-@SuppressWarnings("UnstableApiUsage")
public class PrometheusHandlerTest extends HttpHandlerTestBase {
- private static final ObjectMapper jsonMapper = new ObjectMapper();
-
private static final String V1_URI = URI_BASE + PrometheusHandler.V1_PATH;
private static final String VALUES_URI = URI_BASE + PrometheusHandler.VALUES_PATH;
@@ -45,7 +42,7 @@ public class PrometheusHandlerTest extends HttpHandlerTestBase {
@Test
public void v1_response_contains_values_uri() throws Exception {
String response = testDriver.sendRequest(V1_URI).readAll();
- JsonNode root = jsonMapper.readTree(response);
+ JsonNode root = objectMapper().readTree(response);
assertTrue(root.has("resources"));
ArrayNode resources = (ArrayNode) root.get("resources");
diff --git a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/metric/model/json/GenericApplicationModelTest.java b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/metric/model/json/GenericApplicationModelTest.java
index f773a1095cd..54736851b3f 100644
--- a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/metric/model/json/GenericApplicationModelTest.java
+++ b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/metric/model/json/GenericApplicationModelTest.java
@@ -4,7 +4,6 @@ package ai.vespa.metricsproxy.metric.model.json;
import ai.vespa.metricsproxy.http.application.Node;
import ai.vespa.metricsproxy.metric.model.MetricsPacket;
import ai.vespa.metricsproxy.metric.model.StatusCode;
-import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test;
import java.io.IOException;
@@ -16,7 +15,7 @@ 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.ServiceId.toServiceId;
-import static ai.vespa.metricsproxy.metric.model.json.JacksonUtil.createObjectMapper;
+import static ai.vespa.metricsproxy.metric.model.json.JacksonUtil.objectMapper;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
@@ -90,7 +89,7 @@ public class GenericApplicationModelTest {
assertEquals("service-dim-value", serviceMetrics.dimensions.get("service-dim"));
// Visual inspection
- System.out.println(createObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(nodeModel));
+ System.out.println(objectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(nodeModel));
}
private MetricsPacket createMetricsPacket(String service, Number metricsValue, boolean isNode) {
@@ -112,8 +111,7 @@ public class GenericApplicationModelTest {
}
private static GenericApplicationModel genericJsonModelFromTestFile() throws IOException {
- ObjectMapper mapper = createObjectMapper();
- return mapper.readValue(getFileContents(TEST_FILE), GenericApplicationModel.class);
+ return objectMapper().readValue(getFileContents(TEST_FILE), GenericApplicationModel.class);
}
}
diff --git a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/metric/model/json/GenericJsonModelTest.java b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/metric/model/json/GenericJsonModelTest.java
index cdcd049ecfc..9eb1ed8cd5a 100644
--- a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/metric/model/json/GenericJsonModelTest.java
+++ b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/metric/model/json/GenericJsonModelTest.java
@@ -3,7 +3,6 @@ package ai.vespa.metricsproxy.metric.model.json;
import ai.vespa.metricsproxy.metric.model.MetricsPacket;
import ai.vespa.metricsproxy.metric.model.StatusCode;
-import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test;
import java.io.IOException;
@@ -14,7 +13,7 @@ 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.ServiceId.toServiceId;
-import static ai.vespa.metricsproxy.metric.model.json.JacksonUtil.createObjectMapper;
+import static ai.vespa.metricsproxy.metric.model.json.JacksonUtil.objectMapper;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
@@ -113,7 +112,7 @@ public class GenericJsonModelTest {
assertEquals("service-dim-value", serviceMetrics.dimensions.get("service-dim"));
// Visual inspection
- System.out.println(createObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(jsonModel));
+ System.out.println(objectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(jsonModel));
}
@Test
@@ -138,8 +137,7 @@ public class GenericJsonModelTest {
}
private GenericJsonModel genericJsonModelFromTestFile(String filename) throws IOException {
- ObjectMapper mapper = createObjectMapper();
- return mapper.readValue(getFileContents(filename), GenericJsonModel.class);
+ return objectMapper().readValue(getFileContents(filename), GenericJsonModel.class);
}
@Test
diff --git a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/metric/model/json/YamasJsonModelTest.java b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/metric/model/json/YamasJsonModelTest.java
index ae0f79746e5..8f3a99c1c68 100644
--- a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/metric/model/json/YamasJsonModelTest.java
+++ b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/metric/model/json/YamasJsonModelTest.java
@@ -16,6 +16,7 @@ import java.util.List;
import static ai.vespa.metricsproxy.metric.model.ConsumerId.toConsumerId;
import static ai.vespa.metricsproxy.metric.model.MetricId.toMetricId;
import static ai.vespa.metricsproxy.metric.model.ServiceId.toServiceId;
+import static ai.vespa.metricsproxy.metric.model.json.JacksonUtil.objectMapper;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
@@ -78,8 +79,7 @@ public class YamasJsonModelTest {
// Read file that was taken from production (real -life example that is)
String filename = getClass().getClassLoader().getResource("yamas-array-no-routing.json").getFile();
BufferedReader reader = Files.newBufferedReader(Paths.get(filename));
- ObjectMapper mapper = new ObjectMapper();
- YamasJsonModel jsonModel = mapper.readValue(reader, YamasJsonModel.class);
+ YamasJsonModel jsonModel = objectMapper().readValue(reader, YamasJsonModel.class);
// Do some sanity checking
assertNull(jsonModel.routing);
@@ -104,8 +104,7 @@ public class YamasJsonModelTest {
private YamasJsonModel getYamasJsonModel(String testFile) throws IOException {
String filename = getClass().getClassLoader().getResource(testFile).getFile();
BufferedReader reader = Files.newBufferedReader(Paths.get(filename));
- ObjectMapper mapper = new ObjectMapper();
- return mapper.readValue(reader, YamasJsonModel.class);
+ return objectMapper().readValue(reader, YamasJsonModel.class);
}
}
diff --git a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/metric/model/json/YamasJsonUtilTest.java b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/metric/model/json/YamasJsonUtilTest.java
index 7281c674745..aa85277b3b7 100644
--- a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/metric/model/json/YamasJsonUtilTest.java
+++ b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/metric/model/json/YamasJsonUtilTest.java
@@ -3,7 +3,6 @@ package ai.vespa.metricsproxy.metric.model.json;
import ai.vespa.metricsproxy.metric.model.MetricsPacket;
import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import org.junit.Test;
@@ -14,6 +13,7 @@ import java.util.Set;
import static ai.vespa.metricsproxy.core.VespaMetrics.vespaMetricsConsumerId;
import static ai.vespa.metricsproxy.http.ValuesFetcher.defaultMetricsConsumerId;
import static ai.vespa.metricsproxy.metric.model.ServiceId.toServiceId;
+import static ai.vespa.metricsproxy.metric.model.json.JacksonUtil.objectMapper;
import static ai.vespa.metricsproxy.metric.model.json.YamasJsonUtil.YAMAS_ROUTING;
import static ai.vespa.metricsproxy.metric.model.json.YamasJsonUtil.toMetricsPackets;
import static org.junit.Assert.assertEquals;
@@ -24,12 +24,11 @@ import static org.junit.Assert.assertTrue;
* @author gjoranv
*/
public class YamasJsonUtilTest {
- private static final ObjectMapper jsonMapper = new ObjectMapper();
private static JsonNode metrics(MetricsPacket packet, boolean addStatus) throws IOException {
return metrics(List.of(packet), addStatus).get(0);
}
private static ArrayNode metrics(List<MetricsPacket> packets, boolean addStatus) throws IOException {
- return (ArrayNode) jsonMapper.readTree(YamasJsonUtil.toJson(packets, addStatus)).get("metrics");
+ return (ArrayNode) objectMapper().readTree(YamasJsonUtil.toJson(packets, addStatus)).get("metrics");
}
@Test
diff --git a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/node/NodeMetricGathererTest.java b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/node/NodeMetricGathererTest.java
index b67967b7e04..20164b91a55 100644
--- a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/node/NodeMetricGathererTest.java
+++ b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/node/NodeMetricGathererTest.java
@@ -5,7 +5,6 @@ import ai.vespa.metricsproxy.metric.model.ConsumerId;
import ai.vespa.metricsproxy.metric.model.MetricId;
import ai.vespa.metricsproxy.metric.model.MetricsPacket;
import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.junit.Test;
@@ -13,6 +12,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Set;
+import static ai.vespa.metricsproxy.metric.model.json.JacksonUtil.objectMapper;
import static org.junit.Assert.assertEquals;
/**
@@ -20,8 +20,6 @@ import static org.junit.Assert.assertEquals;
*/
public class NodeMetricGathererTest {
- private static final ObjectMapper jsonMapper = new ObjectMapper();
-
@Test
public void testJSONObjectIsCorrectlyConvertedToMetricsPacket() {
List<MetricsPacket.Builder> builders = new ArrayList<>();
@@ -31,17 +29,17 @@ public class NodeMetricGathererTest {
assertEquals("host_life", packet.service.id);
assertEquals(123, packet.timestamp);
- assertEquals(12l, packet.metrics().get(MetricId.toMetricId("uptime")));
- assertEquals(1l, packet.metrics().get(MetricId.toMetricId("alive")));
+ assertEquals(12L, packet.metrics().get(MetricId.toMetricId("uptime")));
+ assertEquals(1L, packet.metrics().get(MetricId.toMetricId("alive")));
assertEquals(Set.of(ConsumerId.toConsumerId("Vespa")), packet.consumers());
}
private JsonNode generateHostLifePacket() {
- ObjectNode jsonObject = jsonMapper.createObjectNode();
+ ObjectNode jsonObject = objectMapper().createObjectNode();
jsonObject.put("timestamp", 123);
jsonObject.put("application", "host_life");
- ObjectNode metrics = jsonMapper.createObjectNode();
+ ObjectNode metrics = objectMapper().createObjectNode();
metrics.put("uptime", 12);
metrics.put("alive", 1);
jsonObject.set("metrics", metrics);
diff --git a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/rpc/RpcMetricsTest.java b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/rpc/RpcMetricsTest.java
index 0b333db3c71..e6c3ca20e00 100644
--- a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/rpc/RpcMetricsTest.java
+++ b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/rpc/RpcMetricsTest.java
@@ -6,7 +6,6 @@ import ai.vespa.metricsproxy.metric.Metrics;
import ai.vespa.metricsproxy.metric.model.ConsumerId;
import ai.vespa.metricsproxy.service.VespaService;
import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.yahoo.jrt.Request;
import com.yahoo.jrt.Spec;
@@ -26,6 +25,7 @@ import static ai.vespa.metricsproxy.TestUtil.getFileContents;
import static ai.vespa.metricsproxy.core.VespaMetrics.vespaMetricsConsumerId;
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.objectMapper;
import static ai.vespa.metricsproxy.rpc.IntegrationTester.CUSTOM_CONSUMER_ID;
import static ai.vespa.metricsproxy.rpc.IntegrationTester.MONITORING_SYSTEM;
import static ai.vespa.metricsproxy.rpc.IntegrationTester.SERVICE_1_CONFIG_ID;
@@ -42,8 +42,6 @@ import static org.junit.Assert.assertTrue;
*/
public class RpcMetricsTest {
- private static final ObjectMapper jsonMapper = new ObjectMapper();
-
private static final String METRICS_RESPONSE = getFileContents("metrics-storage-simple.json").trim();
private static final String EXTRA_APP = "extra";
private static final Duration RPC_INVOKE_TIMEOUT = Duration.ofSeconds(60);
@@ -148,7 +146,7 @@ public class RpcMetricsTest {
private static void verifyMetricsFromRpcRequest(VespaService service, RpcClient client) throws IOException {
String jsonResponse = getMetricsForYamas(service.getMonitoringName().id, client).trim();
- ArrayNode metrics = (ArrayNode) jsonMapper.readTree(jsonResponse).get("metrics");
+ ArrayNode metrics = (ArrayNode) objectMapper().readTree(jsonResponse).get("metrics");
assertEquals("Expected 3 metric messages", 3, metrics.size());
for (int i = 0; i < metrics.size() - 1; i++) { // The last "metric message" contains only status code/message
JsonNode jsonObject = metrics.get(i);
@@ -184,7 +182,7 @@ public class RpcMetricsTest {
private void verifyMetricsFromRpcRequestForAllServices(RpcClient client) throws IOException {
// Verify that metrics for all services can be retrieved in one request.
String allServicesResponse = getMetricsForYamas(ALL_SERVICES, client).trim();
- ArrayNode allServicesMetrics = (ArrayNode) jsonMapper.readTree(allServicesResponse).get("metrics");
+ ArrayNode allServicesMetrics = (ArrayNode) objectMapper().readTree(allServicesResponse).get("metrics");
assertEquals(5, allServicesMetrics.size());
}
@@ -221,13 +219,13 @@ public class RpcMetricsTest {
}
private JsonNode findExtraMetricsObject(String jsonResponse) throws IOException {
- ArrayNode metrics = (ArrayNode) jsonMapper.readTree(jsonResponse).get("metrics");
+ ArrayNode metrics = (ArrayNode) objectMapper().readTree(jsonResponse).get("metrics");
for (int i = 0; i < metrics.size(); i++) {
JsonNode jsonObject = metrics.get(i);
assertTrue(jsonObject.has("application"));
if (jsonObject.get("application").textValue().equals(EXTRA_APP)) return jsonObject;
}
- return jsonMapper.createObjectNode();
+ return objectMapper().createObjectNode();
}
private static String getMetricsForYamas(String service, RpcClient client) {