diff options
author | gjoranv <gv@verizonmedia.com> | 2021-12-15 23:54:09 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-15 23:54:09 +0100 |
commit | 054bc0a48ac9a358d7058f36f8861be11013fb58 (patch) | |
tree | 0c0b67e955954530d5d3105138394d3ed721b827 /metrics-proxy/src/main | |
parent | 9d615eec41a3bb7e3cb82a889c217cc1cf02066c (diff) | |
parent | 47aa61f921242123db88c4f5334ecce119cfb209 (diff) |
Merge pull request #20533 from vespa-engine/balder/compute-if-absentv7.517.18
Balder/compute if absent
Diffstat (limited to 'metrics-proxy/src/main')
4 files changed, 33 insertions, 37 deletions
diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/core/VespaMetrics.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/core/VespaMetrics.java index 7a3f260cd34..93f8ec0440b 100644 --- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/core/VespaMetrics.java +++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/core/VespaMetrics.java @@ -153,11 +153,8 @@ public class VespaMetrics { } private static Set<ConsumerId> extractConsumers(Set<ConsumerId> configuredConsumers) { - Set<ConsumerId> consumers = Collections.emptySet(); - if (configuredConsumers != null) { - consumers = configuredConsumers; - } - return consumers; + if (configuredConsumers != null) return configuredConsumers; + return Set.of(); } } @@ -189,14 +186,7 @@ public class VespaMetrics { mergedDimensions.putAll(metric.getDimensions()); mergedDimensions.putAll(serviceDimensions); AggregationKey aggregationKey = new AggregationKey(mergedDimensions, metric.getConsumers()); - - if (aggregated.containsKey(aggregationKey)) { - aggregated.get(aggregationKey).add(metric); - } else { - List<Metric> ml = new ArrayList<>(); - ml.add(metric); - aggregated.put(aggregationKey, ml); - } + aggregated.computeIfAbsent(aggregationKey, key -> new ArrayList<>()).add(metric); } } diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/Metric.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/Metric.java index a9e6e8e6e3c..9265e8ef1e5 100644 --- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/Metric.java +++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/Metric.java @@ -5,8 +5,6 @@ import ai.vespa.metricsproxy.metric.model.ConsumerId; import ai.vespa.metricsproxy.metric.model.DimensionId; import ai.vespa.metricsproxy.metric.model.MetricId; -import java.util.Collections; -import java.util.LinkedHashMap; import java.util.Map; import java.util.Objects; import java.util.Set; @@ -34,12 +32,12 @@ public class Metric { this.time = time; this.value = value; this.name = name; - this.dimensions = dimensions; + this.dimensions = Map.copyOf(dimensions); this.description = description; } public Metric(MetricId name, Number value, long timestamp) { - this(name, value, timestamp, Collections.emptyMap(), ""); + this(name, value, timestamp, Map.of(), ""); } public Metric(MetricId name, Number value) { @@ -47,7 +45,7 @@ public class Metric { } public void setDimensions(Map<DimensionId, String> dimensions) { - this.dimensions = dimensions; + this.dimensions = Map.copyOf(dimensions); } /** @@ -104,7 +102,7 @@ public class Metric { @Override public Metric clone() { - return new Metric(name, value, time, new LinkedHashMap<>(dimensions), getDescription()); + return new Metric(name, value, time, dimensions, getDescription()); } @Override 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 8157ecb72fd..f9443c46bad 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 @@ -11,7 +11,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; import java.io.InputStream; -import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.Map; @@ -123,7 +122,7 @@ public class MetricsParser { description = metric.get("description").textValue(); } - Map<DimensionId, String> dim = Collections.emptyMap(); + Map<DimensionId, String> dim = Map.of(); if (metric.has("dimensions")) { JsonNode dimensions = metric.get("dimensions"); StringBuilder sb = new StringBuilder(); @@ -139,7 +138,7 @@ public class MetricsParser { String v = dimensions.get(k).textValue(); dim.put(toDimensionId(k), v); } - uniqueDimensions.put(sb.toString(), Collections.unmodifiableMap(dim)); + uniqueDimensions.put(sb.toString(), Map.copyOf(dim)); } dim = uniqueDimensions.get(sb.toString()); } diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/SystemPoller.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/SystemPoller.java index 27f86b0d503..22eb2844d61 100644 --- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/SystemPoller.java +++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/SystemPoller.java @@ -5,6 +5,7 @@ import ai.vespa.metricsproxy.metric.Metric; import ai.vespa.metricsproxy.metric.Metrics; import ai.vespa.metricsproxy.metric.model.MetricId; +import java.io.Reader; import java.time.Duration; import java.time.Instant; import java.util.HashMap; @@ -106,7 +107,6 @@ public class SystemPoller { * @return array[0] = memoryResident, array[1] = memoryVirtual (kB units) */ static long[] getMemoryUsage(VespaService service) { - long[] size = new long[2]; BufferedReader br; int pid = service.getPid(); @@ -114,24 +114,33 @@ public class SystemPoller { br = new BufferedReader(new FileReader("/proc/" + pid + "/smaps")); } catch (FileNotFoundException ex) { service.setAlive(false); - return size; + return new long[2]; } - String line; try { - while ((line = br.readLine()) != null) { - String[] elems = line.split("\\s+"); - /* Memory size is given in kB - convert to bytes by multiply with 1024*/ - if (line.startsWith("Rss:")) { - size[memoryTypeResident] += Long.parseLong(elems[1]) * 1024; - } else if (line.startsWith("Size:")) { - size[memoryTypeVirtual] += Long.parseLong(elems[1]) * 1024; - } - } - - br.close(); + return getMemoryUsage(br); } catch (IOException ex) { log.log(Level.FINE, "Unable to read line from smaps file", ex); - return size; + return new long[2]; + } finally { + try { + br.close(); + } catch (IOException ex) { + log.log(Level.FINE, "Closing of smaps file failed", ex); + } + } + } + static long[] getMemoryUsage(BufferedReader br) throws IOException{ + String line; + long[] size = new long[2]; + while ((line = br.readLine()) != null) { + /* Memory size is given in kB - convert to bytes by multiply with 1024*/ + if (line.startsWith("Rss:")) { + String remain = line.substring(4).trim(); + size[memoryTypeResident] += Long.parseLong(remain.substring(0, remain.indexOf(' '))) * 1024; + } else if (line.startsWith("Size:")) { + String remain = line.substring(5).trim(); + size[memoryTypeVirtual] += Long.parseLong(remain.substring(0, remain.indexOf(' '))) * 1024; + } } return size; |