aboutsummaryrefslogtreecommitdiffstats
path: root/metrics-proxy
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-04-07 23:43:53 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2021-04-07 23:43:53 +0200
commit38a5f9ccc1259a15c117785d4f0b5dcf6f84365c (patch)
tree4f22d74a2b95dd666b26534545d00fd7a07bd432 /metrics-proxy
parent9d9d835752c5d35808276754ad7467b6ec64242c (diff)
Avoid creating a string when a byte array will do.
Diffstat (limited to 'metrics-proxy')
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/HttpMetricFetcher.java6
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/MetricsParser.java8
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/RemoteHealthMetricFetcher.java8
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/RemoteMetricsFetcher.java10
4 files changed, 23 insertions, 9 deletions
diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/HttpMetricFetcher.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/HttpMetricFetcher.java
index 81f2cce5558..2348f65bc9f 100644
--- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/HttpMetricFetcher.java
+++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/HttpMetricFetcher.java
@@ -47,11 +47,11 @@ public abstract class HttpMetricFetcher {
log.log(Level.FINE, "Fetching metrics from " + u + " with timeout " + CONNECTION_TIMEOUT);
}
- String getJson() throws IOException {
+ byte [] getJson() throws IOException {
log.log(Level.FINE, "Connecting to url " + url + " for service '" + service + "'");
Future<SimpleHttpResponse> response = httpClient.execute(new SimpleHttpRequest("GET", url), null);
try {
- return response.get().getBodyText();
+ return response.get().getBodyBytes();
} catch (InterruptedException | ExecutionException e) {
throw new IOException("Failed fetching '" + url + "': " + e);
}
@@ -66,7 +66,7 @@ public abstract class HttpMetricFetcher {
Exceptions.toMessageString(e);
}
- void handleException(Exception e, String data, int timesFetched) {
+ void handleException(Exception e, Object data, int timesFetched) {
logMessage("Unable to parse json '" + data + "' for service '" + service + "': " +
Exceptions.toMessageString(e), timesFetched);
}
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 f9445e5b26a..e43aab8b26f 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
@@ -27,8 +27,12 @@ public class MetricsParser {
private static final ObjectMapper jsonMapper = new ObjectMapper();
static Metrics parse(String data) throws IOException {
- JsonParser parser = jsonMapper.createParser(data);
-
+ return parse(jsonMapper.createParser(data));
+ }
+ static Metrics parse(byte [] data) throws IOException {
+ return parse(jsonMapper.createParser(data));
+ }
+ private static Metrics parse(JsonParser parser) throws IOException {
if (parser.nextToken() != JsonToken.START_OBJECT) {
throw new IOException("Expected start of object, got " + parser.currentToken());
}
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 827f513a418..f078081c430 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
@@ -29,7 +29,7 @@ public class RemoteHealthMetricFetcher extends HttpMetricFetcher {
* Connect to remote service over http and fetch metrics
*/
public HealthMetric getHealth(int fetchCount) {
- String data = "{}";
+ byte [] data = {'{', '}'};
try {
data = getJson();
} catch (IOException e) {
@@ -41,7 +41,7 @@ public class RemoteHealthMetricFetcher extends HttpMetricFetcher {
/**
* Connect to remote service over http and fetch metrics
*/
- private HealthMetric createHealthMetrics(String data, int fetchCount) {
+ private HealthMetric createHealthMetrics(byte [] data, int fetchCount) {
HealthMetric healthMetric = HealthMetric.getDown("Failed fetching status page for service");
try {
healthMetric = parse(data);
@@ -51,8 +51,8 @@ public class RemoteHealthMetricFetcher extends HttpMetricFetcher {
return healthMetric;
}
- private HealthMetric parse(String data) {
- if (data == null || data.isEmpty()) {
+ private HealthMetric parse(byte [] data) {
+ if ((data == null) || (data.length == 0)) {
return HealthMetric.getUnknown("Empty response from status page");
}
try {
diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/RemoteMetricsFetcher.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/RemoteMetricsFetcher.java
index 72f77926099..787f0e33157 100644
--- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/RemoteMetricsFetcher.java
+++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/RemoteMetricsFetcher.java
@@ -39,4 +39,14 @@ public class RemoteMetricsFetcher extends HttpMetricFetcher {
return remoteMetrics;
}
+ Metrics createMetrics(byte [] data, int fetchCount) {
+ Metrics remoteMetrics = new Metrics();
+ try {
+ remoteMetrics = MetricsParser.parse(data);
+ } catch (Exception e) {
+ handleException(e, data, fetchCount);
+ }
+
+ return remoteMetrics;
+ }
}