diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2024-04-16 08:43:26 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2024-04-16 08:43:26 +0200 |
commit | df8244cb4e59d6a04838e8ef3e93a3834964e8c8 (patch) | |
tree | 4fe2df2c951684fc624a9b104d098f6f4ef49e97 /metrics-proxy | |
parent | 80718d4dedf2b89429b0ac7bc2aa2851fdc684bc (diff) |
We already have deduplication of MericId, DimensionId and ServiceId.
Just santize upfront and use that.
Diffstat (limited to 'metrics-proxy')
4 files changed, 30 insertions, 21 deletions
diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/DimensionId.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/DimensionId.java index a6b09ddefd8..43cc8fda3c9 100644 --- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/DimensionId.java +++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/DimensionId.java @@ -2,6 +2,7 @@ package ai.vespa.metricsproxy.metric.model; import com.yahoo.concurrent.CopyOnWriteHashMap; +import io.prometheus.client.Collector; import java.util.Map; import java.util.Objects; @@ -13,12 +14,18 @@ public final class DimensionId { private static final Map<String, DimensionId> dictionary = new CopyOnWriteHashMap<>(); public final String id; - private DimensionId(String id) { this.id = id; } + private final String idForPrometheus; + private DimensionId(String id) { + this.id = id; + idForPrometheus = Collector.sanitizeMetricName(id); + } public static DimensionId toDimensionId(String id) { return dictionary.computeIfAbsent(id, key -> new DimensionId(key)); } + public String getIdForPrometheus() { return idForPrometheus; } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/MetricId.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/MetricId.java index 9014e818eab..829eb06101f 100644 --- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/MetricId.java +++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/MetricId.java @@ -2,6 +2,7 @@ package ai.vespa.metricsproxy.metric.model; import com.yahoo.concurrent.CopyOnWriteHashMap; +import io.prometheus.client.Collector; import java.util.Map; import java.util.Objects; @@ -14,11 +15,16 @@ public class MetricId { private static final Map<String, MetricId> dictionary = new CopyOnWriteHashMap<>(); public static final MetricId empty = toMetricId(""); public final String id; - private MetricId(String id) { this.id = id; } + private final String idForPrometheus; + private MetricId(String id) { + this.id = id; + idForPrometheus = Collector.sanitizeMetricName(id); + } public static MetricId toMetricId(String id) { - return dictionary.computeIfAbsent(id, key -> new MetricId(key)); + return dictionary.computeIfAbsent(id, MetricId::new); } + public String getIdForPrometheus() { return idForPrometheus; } @Override public boolean equals(Object o) { @@ -29,13 +35,9 @@ public class MetricId { } @Override - public int hashCode() { - return Objects.hash(id); - } + public int hashCode() { return Objects.hash(id); } @Override - public String toString() { - return id; - } + public String toString() { return id; } } diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/ServiceId.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/ServiceId.java index 96ee2fa00e2..28c64b012c1 100644 --- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/ServiceId.java +++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/ServiceId.java @@ -1,6 +1,8 @@ // 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; +import io.prometheus.client.Collector; + import java.util.Objects; /** @@ -9,10 +11,16 @@ import java.util.Objects; public class ServiceId { public final String id; - private ServiceId(String id) { this.id = id; } + private final String idForPrometheus; + private ServiceId(String id) { + this.id = id; + idForPrometheus = Collector.sanitizeMetricName(id); + } public static ServiceId toServiceId(String id) { return new ServiceId(id); } + public String getIdForPrometheus() { return idForPrometheus; } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/prometheus/PrometheusUtil.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/prometheus/PrometheusUtil.java index f1050933a01..2b0db5381bc 100644 --- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/prometheus/PrometheusUtil.java +++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/prometheus/PrometheusUtil.java @@ -19,15 +19,7 @@ import java.util.stream.Collectors; */ public class PrometheusUtil { - private static String sanitize(String name, Map<String, String> sanitizedCache) { - return sanitizedCache.computeIfAbsent(name, key -> { - String sanitized = Collector.sanitizeMetricName(name); - return (name.equals(sanitized)) ? name : sanitized; - }); - } - public static PrometheusModel toPrometheusModel(List<MetricsPacket> metricsPackets) { - Map<String, String> sanitizedMetrics = new HashMap<>(); Map<ServiceId, List<MetricsPacket>> packetsByService = metricsPackets.stream() .collect(Collectors.groupingBy(packet -> packet.service)); @@ -36,14 +28,14 @@ public class PrometheusUtil { Map<String, List<Sample>> samples = new HashMap<>(); packetsByService.forEach(((serviceId, packets) -> { - var serviceName = sanitize(serviceId.id, sanitizedMetrics); + var serviceName = serviceId.getIdForPrometheus(); for (var packet : packets) { Long timeStamp = packet.timestamp * 1000; var dimensions = packet.dimensions(); List<String> labels = new ArrayList<>(dimensions.size()); List<String> labelValues = new ArrayList<>(dimensions.size()); for (var entry : dimensions.entrySet()) { - var labelName = sanitize(entry.getKey().id, sanitizedMetrics); + var labelName = entry.getKey().getIdForPrometheus(); labels.add(labelName); labelValues.add(entry.getValue()); } @@ -51,7 +43,7 @@ public class PrometheusUtil { labelValues.add(serviceName); for (var metric : packet.metrics().entrySet()) { - var metricName = sanitize(metric.getKey().id, sanitizedMetrics); + var metricName = metric.getKey().getIdForPrometheus(); List<Sample> sampleList; if (samples.containsKey(metricName)) { sampleList = samples.get(metricName); |