diff options
Diffstat (limited to 'metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/prometheus/PrometheusUtil.java')
-rw-r--r-- | metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/prometheus/PrometheusUtil.java | 17 |
1 files changed, 13 insertions, 4 deletions
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 d7436ccf404..f1050933a01 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,7 +19,15 @@ 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)); @@ -28,13 +36,14 @@ public class PrometheusUtil { Map<String, List<Sample>> samples = new HashMap<>(); packetsByService.forEach(((serviceId, packets) -> { - var serviceName = Collector.sanitizeMetricName(serviceId.id); + var serviceName = sanitize(serviceId.id, sanitizedMetrics); 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 = Collector.sanitizeMetricName(entry.getKey().id); + var labelName = sanitize(entry.getKey().id, sanitizedMetrics); labels.add(labelName); labelValues.add(entry.getValue()); } @@ -42,7 +51,7 @@ public class PrometheusUtil { labelValues.add(serviceName); for (var metric : packet.metrics().entrySet()) { - var metricName = Collector.sanitizeMetricName(metric.getKey().id); + var metricName = sanitize(metric.getKey().id, sanitizedMetrics); List<Sample> sampleList; if (samples.containsKey(metricName)) { sampleList = samples.get(metricName); @@ -51,7 +60,7 @@ public class PrometheusUtil { samples.put(metricName, sampleList); metricFamilySamples.add(new MetricFamilySamples(metricName, Collector.Type.UNKNOWN, "", sampleList)); } - sampleList.add(new Sample(metricName, labels, labelValues, metric.getValue().doubleValue(), packet.timestamp * 1000)); + sampleList.add(new Sample(metricName, labels, labelValues, metric.getValue().doubleValue(), timeStamp)); } } if (!packets.isEmpty()) { |