diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-04-07 23:43:53 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2021-04-07 23:43:53 +0200 |
commit | 38a5f9ccc1259a15c117785d4f0b5dcf6f84365c (patch) | |
tree | 4f22d74a2b95dd666b26534545d00fd7a07bd432 /metrics-proxy | |
parent | 9d9d835752c5d35808276754ad7467b6ec64242c (diff) |
Avoid creating a string when a byte array will do.
Diffstat (limited to 'metrics-proxy')
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; + } } |