summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/core/ConfiguredMetric.java41
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/core/MetricsConsumers.java22
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/core/VespaMetrics.java39
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/ExternalMetrics.java10
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/Dimension.java13
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/DimensionId.java2
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/MetricsPacket.java18
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/node/ServiceHealthGatherer.java3
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/VespaService.java9
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/VespaServices.java2
-rw-r--r--metrics-proxy/src/test/java/ai/vespa/metricsproxy/rpc/RpcHealthMetricsTest.java2
-rw-r--r--metrics-proxy/src/test/java/ai/vespa/metricsproxy/rpc/RpcMetricsTest.java6
12 files changed, 119 insertions, 48 deletions
diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/core/ConfiguredMetric.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/core/ConfiguredMetric.java
new file mode 100644
index 00000000000..6148e864373
--- /dev/null
+++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/core/ConfiguredMetric.java
@@ -0,0 +1,41 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package ai.vespa.metricsproxy.core;
+
+import ai.vespa.metricsproxy.metric.model.Dimension;
+import ai.vespa.metricsproxy.metric.model.DimensionId;
+import ai.vespa.metricsproxy.metric.model.MetricId;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+public class ConfiguredMetric {
+ private final MetricId name;
+ private final String description;
+ private final String outputname;
+ private final List<Dimension> dimension;
+ public ConfiguredMetric(ConsumersConfig.Consumer.Metric m) {
+ name = MetricId.toMetricId(m.name());
+ outputname = m.outputname();
+ description = m.description();
+ dimension = new ArrayList<>(m.dimension().size());
+ m.dimension().forEach(d -> dimension.add(new Dimension(DimensionId.toDimensionId(d.key()), d.value())));
+ }
+ public MetricId id() { return name; }
+ public String outputname() { return outputname; }
+ public String description() { return description; }
+ public List<Dimension> dimension() { return dimension; }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ ConfiguredMetric that = (ConfiguredMetric) o;
+ return name.equals(that.name) && description.equals(that.description) && outputname.equals(that.outputname) && dimension.equals(that.dimension);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(name, description, outputname, dimension);
+ }
+}
diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/core/MetricsConsumers.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/core/MetricsConsumers.java
index 99d7b9fe8bf..82f341ec64d 100644
--- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/core/MetricsConsumers.java
+++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/core/MetricsConsumers.java
@@ -28,14 +28,14 @@ import static java.util.stream.Collectors.collectingAndThen;
public class MetricsConsumers {
// All metrics for each consumer.
- private final Map<ConsumerId, List<Consumer.Metric>> consumerMetrics;
+ private final Map<ConsumerId, List<ConfiguredMetric>> consumerMetrics;
// All consumers for each metric (more useful than the opposite map).
- private final Map<Consumer.Metric, List<ConsumerId>> consumersByMetric;
+ private final Map<ConfiguredMetric, List<ConsumerId>> consumersByMetric;
public MetricsConsumers(ConsumersConfig config) {
consumerMetrics = config.consumer().stream().collect(
- toUnmodifiableLinkedMap(consumer -> toConsumerId(consumer.name()), Consumer::metric));
+ toUnmodifiableLinkedMap(consumer -> toConsumerId(consumer.name()), consumer -> convert(consumer.metric())));
consumersByMetric = createConsumersByMetric(consumerMetrics);
}
@@ -44,11 +44,11 @@ public class MetricsConsumers {
* @param consumer The consumer
* @return The metrics for the given consumer.
*/
- public List<Consumer.Metric> getMetricDefinitions(ConsumerId consumer) {
+ public List<ConfiguredMetric> getMetricDefinitions(ConsumerId consumer) {
return consumerMetrics.get(consumer);
}
- public Map<Consumer.Metric, List<ConsumerId>> getConsumersByMetric() {
+ public Map<ConfiguredMetric, List<ConsumerId>> getConsumersByMetric() {
return consumersByMetric;
}
@@ -60,9 +60,9 @@ public class MetricsConsumers {
* Helper function to create mapping from metric to consumers.
* TODO: consider reversing the mapping in metrics-consumers.def instead: metric{}.consumer[]
*/
- private static Map<Consumer.Metric, List<ConsumerId>>
- createConsumersByMetric(Map<ConsumerId, List<Consumer.Metric>> metricsByConsumer) {
- Map<Consumer.Metric, List<ConsumerId>> consumersByMetric = new LinkedHashMap<>();
+ private static Map<ConfiguredMetric, List<ConsumerId>>
+ createConsumersByMetric(Map<ConsumerId, List<ConfiguredMetric>> metricsByConsumer) {
+ Map<ConfiguredMetric, List<ConsumerId>> consumersByMetric = new LinkedHashMap<>();
metricsByConsumer.forEach(
(consumer, metrics) -> metrics.forEach(
metric -> consumersByMetric.computeIfAbsent(metric, unused -> new ArrayList<>())
@@ -75,4 +75,10 @@ public class MetricsConsumers {
return collectingAndThen(toLinkedMap(keyMapper, valueMapper), Collections::unmodifiableMap);
}
+ private List<ConfiguredMetric> convert(List<Consumer.Metric> configMetrics) {
+ List<ConfiguredMetric> metrics = new ArrayList<>(configMetrics.size());
+ configMetrics.forEach(m -> metrics.add(new ConfiguredMetric(m)));
+ return metrics;
+ }
+
}
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 f563dd27b86..68f53e3de04 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
@@ -8,6 +8,7 @@ import ai.vespa.metricsproxy.metric.Metric;
import ai.vespa.metricsproxy.metric.Metrics;
import ai.vespa.metricsproxy.metric.MetricsFormatter;
import ai.vespa.metricsproxy.metric.model.ConsumerId;
+import ai.vespa.metricsproxy.metric.model.Dimension;
import ai.vespa.metricsproxy.metric.model.DimensionId;
import ai.vespa.metricsproxy.metric.model.MetricsPacket;
import ai.vespa.metricsproxy.service.VespaService;
@@ -26,7 +27,6 @@ import java.util.stream.Collectors;
import static ai.vespa.metricsproxy.metric.dimensions.PublicDimensions.INTERNAL_SERVICE_ID;
import static ai.vespa.metricsproxy.metric.model.ConsumerId.toConsumerId;
import static ai.vespa.metricsproxy.metric.model.DimensionId.toDimensionId;
-import static ai.vespa.metricsproxy.metric.model.ServiceId.toServiceId;
import static com.google.common.base.Strings.isNullOrEmpty;
/**
@@ -51,7 +51,7 @@ public class VespaMetrics {
List<MetricsPacket> result = new ArrayList<>();
for (VespaService s : services) {
HealthMetric h = s.getHealth();
- MetricsPacket.Builder builder = new MetricsPacket.Builder(toServiceId(s.getMonitoringName()))
+ MetricsPacket.Builder builder = new MetricsPacket.Builder(s.getMonitoringName())
.statusCode(h.isOk() ? 0 : 1)
.statusMessage(h.getMessage())
.putDimension(METRIC_TYPE_DIMENSION_ID, "health")
@@ -70,7 +70,7 @@ public class VespaMetrics {
public List<MetricsPacket.Builder> getMetrics(List<VespaService> services) {
List<MetricsPacket.Builder> metricsPackets = new ArrayList<>();
- Map<ConsumersConfig.Consumer.Metric, List<ConsumerId>> consumersByMetric = metricsConsumers.getConsumersByMetric();
+ Map<ConfiguredMetric, List<ConsumerId>> consumersByMetric = metricsConsumers.getConsumersByMetric();
for (VespaService service : services) {
// One metrics packet for system metrics
@@ -87,7 +87,7 @@ public class VespaMetrics {
Map<AggregationKey, List<Metric>> aggregatedMetrics = aggregateMetrics(service.getDimensions(), serviceMetrics);
aggregatedMetrics.forEach((aggregationKey, metrics) -> {
- MetricsPacket.Builder builder = new MetricsPacket.Builder(toServiceId(service.getMonitoringName()))
+ MetricsPacket.Builder builder = new MetricsPacket.Builder(service.getMonitoringName())
.putMetrics(metrics)
.putDimension(METRIC_TYPE_DIMENSION_ID, "standard")
.putDimension(INSTANCE_DIMENSION_ID, service.getInstanceName())
@@ -107,7 +107,7 @@ public class VespaMetrics {
private MetricsPacket.Builder getHealth(VespaService service) {
HealthMetric health = service.getHealth();
- return new MetricsPacket.Builder(toServiceId(service.getMonitoringName()))
+ return new MetricsPacket.Builder(service.getMonitoringName())
.timestamp(System.currentTimeMillis() / 1000)
.statusCode(health.getStatus().ordinal()) // TODO: MetricsPacket should use StatusCode instead of int
.statusMessage(health.getMessage())
@@ -121,7 +121,7 @@ public class VespaMetrics {
* In order to include a metric, it must exist in the given map of metric to consumers.
* Each returned metric will contain a collection of consumers that it should be routed to.
*/
- private Metrics getServiceMetrics(Metrics allServiceMetrics, Map<ConsumersConfig.Consumer.Metric, List<ConsumerId>> consumersByMetric) {
+ private Metrics getServiceMetrics(Metrics allServiceMetrics, Map<ConfiguredMetric, List<ConsumerId>> consumersByMetric) {
Metrics configuredServiceMetrics = new Metrics();
configuredServiceMetrics.setTimeStamp(getMostRecentTimestamp(allServiceMetrics));
for (Metric candidate : allServiceMetrics.getMetrics()) {
@@ -132,10 +132,10 @@ public class VespaMetrics {
return configuredServiceMetrics;
}
- private Map<DimensionId, String> extractDimensions(Map<DimensionId, String> dimensions, List<ConsumersConfig.Consumer.Metric.Dimension> configuredDimensions) {
+ private Map<DimensionId, String> extractDimensions(Map<DimensionId, String> dimensions, List<Dimension> configuredDimensions) {
if ( ! configuredDimensions.isEmpty()) {
Map<DimensionId, String> dims = new HashMap<>(dimensions);
- configuredDimensions.forEach(d -> dims.put(toDimensionId(d.key()), d.value()));
+ configuredDimensions.forEach(d -> dims.put(d.key(), d.value()));
dimensions = Collections.unmodifiableMap(dims);
}
return dimensions;
@@ -155,8 +155,8 @@ public class VespaMetrics {
}
private Metric metricWithConfigProperties(Metric candidate,
- ConsumersConfig.Consumer.Metric configuredMetric,
- Map<ConsumersConfig.Consumer.Metric, List<ConsumerId>> consumersByMetric) {
+ ConfiguredMetric configuredMetric,
+ Map<ConfiguredMetric, List<ConsumerId>> consumersByMetric) {
Metric metric = candidate.clone();
metric.setDimensions(extractDimensions(candidate.getDimensions(), configuredMetric.dimension()));
metric.setConsumers(extractConsumers(consumersByMetric.get(configuredMetric)));
@@ -169,10 +169,9 @@ public class VespaMetrics {
/**
* Returns all configured metrics (for any consumer) that have the given id as 'name'.
*/
- private static Set<ConsumersConfig.Consumer.Metric> getConfiguredMetrics(String id,
- Set<ConsumersConfig.Consumer.Metric> configuredMetrics) {
+ private static Set<ConfiguredMetric> getConfiguredMetrics(String id, Set<ConfiguredMetric> configuredMetrics) {
return configuredMetrics.stream()
- .filter(m -> m.name().equals(id))
+ .filter(m -> m.id().id.equals(id))
.collect(Collectors.toSet());
}
@@ -180,7 +179,7 @@ public class VespaMetrics {
Metrics systemMetrics = service.getSystemMetrics();
if (systemMetrics.size() == 0) return Optional.empty();
- MetricsPacket.Builder builder = new MetricsPacket.Builder(toServiceId(service.getMonitoringName()));
+ MetricsPacket.Builder builder = new MetricsPacket.Builder(service.getMonitoringName());
setMetaInfo(builder, systemMetrics.getTimeStamp());
builder.putDimension(METRIC_TYPE_DIMENSION_ID, "system")
@@ -223,10 +222,10 @@ public class VespaMetrics {
return aggregatedMetrics;
}
- private List<ConsumersConfig.Consumer.Metric> getMetricDefinitions(ConsumerId consumer) {
+ private List<ConfiguredMetric> getMetricDefinitions(ConsumerId consumer) {
if (metricsConsumers == null) return Collections.emptyList();
- List<ConsumersConfig.Consumer.Metric> definitions = metricsConsumers.getMetricDefinitions(consumer);
+ List<ConfiguredMetric> definitions = metricsConsumers.getMetricDefinitions(consumer);
return definitions == null ? Collections.emptyList() : definitions;
}
@@ -248,8 +247,8 @@ public class VespaMetrics {
String alias = key;
boolean isForwarded = false;
- for (ConsumersConfig.Consumer.Metric metricConsumer : getMetricDefinitions(vespaMetricsConsumerId)) {
- if (metricConsumer.name().equals(key)) {
+ for (ConfiguredMetric metricConsumer : getMetricDefinitions(vespaMetricsConsumerId)) {
+ if (metricConsumer.id().id.equals(key)) {
alias = metricConsumer.outputname();
isForwarded = true;
}
@@ -277,8 +276,8 @@ public class VespaMetrics {
String alias = "";
boolean isForwarded = false;
- for (ConsumersConfig.Consumer.Metric metric : getMetricDefinitions(consumer)) {
- if (metric.name().equals(m.getName())) {
+ for (ConfiguredMetric metric : getMetricDefinitions(consumer)) {
+ if (metric.id().id.equals(m.getName())) {
alias = metric.outputname();
isForwarded = true;
if (description.isEmpty()) {
diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/ExternalMetrics.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/ExternalMetrics.java
index 6818a6b991f..e39f34c43ce 100644
--- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/ExternalMetrics.java
+++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/ExternalMetrics.java
@@ -1,8 +1,8 @@
// Copyright 2020 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package ai.vespa.metricsproxy.metric;
+import ai.vespa.metricsproxy.core.ConfiguredMetric;
import ai.vespa.metricsproxy.core.MetricsConsumers;
-import ai.vespa.metricsproxy.core.ConsumersConfig.Consumer;
import ai.vespa.metricsproxy.metric.model.DimensionId;
import ai.vespa.metricsproxy.metric.model.MetricId;
import ai.vespa.metricsproxy.metric.model.MetricsPacket;
@@ -19,7 +19,6 @@ import java.util.Set;
import java.util.logging.Logger;
import static ai.vespa.metricsproxy.metric.model.DimensionId.toDimensionId;
-import static ai.vespa.metricsproxy.metric.model.MetricId.toMetricId;
import static ai.vespa.metricsproxy.metric.model.ServiceId.toServiceId;
import static java.util.logging.Level.FINE;
import static java.util.stream.Collectors.toCollection;
@@ -66,7 +65,7 @@ public class ExternalMetrics {
private Set<MetricId> metricsToRetain() {
return consumers.getConsumersByMetric().keySet().stream()
- .map(configuredMetric -> toMetricId(configuredMetric.name()))
+ .map(configuredMetric -> configuredMetric.id())
.collect(toCollection(LinkedHashSet::new));
}
@@ -76,9 +75,8 @@ public class ExternalMetrics {
*/
private Map<MetricId, List<String>> outputNamesById() {
Map<MetricId, List<String>> outputNamesById = new LinkedHashMap<>();
- for (Consumer.Metric metric : consumers.getConsumersByMetric().keySet()) {
- MetricId id = toMetricId(metric.name());
- outputNamesById.computeIfAbsent(id, unused -> new ArrayList<>())
+ for (ConfiguredMetric metric : consumers.getConsumersByMetric().keySet()) {
+ outputNamesById.computeIfAbsent(metric.id(), unused -> new ArrayList<>())
.add(metric.outputname());
}
return outputNamesById;
diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/Dimension.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/Dimension.java
new file mode 100644
index 00000000000..b5e61f38ab5
--- /dev/null
+++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/Dimension.java
@@ -0,0 +1,13 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package ai.vespa.metricsproxy.metric.model;
+
+public final class Dimension {
+ private final DimensionId key;
+ private final String value;
+ public Dimension(DimensionId key, String value) {
+ this.key = key;
+ this.value = value;
+ }
+ public DimensionId key() { return key; }
+ public String value() { return value; }
+}
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 c99e54f2607..3804794804b 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
@@ -6,7 +6,7 @@ import java.util.Objects;
/**
* @author gjoranv
*/
-public class DimensionId {
+public final class DimensionId {
public final String id;
private DimensionId(String id) { this.id = id; }
diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/MetricsPacket.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/MetricsPacket.java
index 2d5cd9acb5d..4e60838270a 100644
--- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/MetricsPacket.java
+++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/metric/model/MetricsPacket.java
@@ -6,6 +6,7 @@ import ai.vespa.metricsproxy.metric.Metric;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
@@ -90,7 +91,7 @@ public class MetricsPacket {
private long timestamp = 0L;
private Map<MetricId, Number> metrics = new LinkedHashMap<>();
private final Map<DimensionId, String> dimensions = new LinkedHashMap<>();
- private final Set<ConsumerId> consumers = new LinkedHashSet<>();
+ private Set<ConsumerId> consumers = Collections.emptySet();
public Builder(ServiceId service) {
Objects.requireNonNull(service, "Service cannot be null.");
@@ -177,7 +178,20 @@ public class MetricsPacket {
}
public Builder addConsumers(Set<ConsumerId> extraConsumers) {
- if (extraConsumers != null) consumers.addAll(extraConsumers);
+ if ((extraConsumers != null) && !extraConsumers.isEmpty()) {
+ if (consumers.isEmpty()) {
+ if (extraConsumers.size() == 1) {
+ consumers = Collections.singleton(extraConsumers.iterator().next());
+ return this;
+ }
+ consumers = new LinkedHashSet<>(extraConsumers.size());
+ } else if (consumers.size() == 1) {
+ var copy = new LinkedHashSet<ConsumerId>(extraConsumers.size() + 1);
+ copy.addAll(consumers);
+ consumers = copy;
+ }
+ consumers.addAll(extraConsumers);
+ }
return this;
}
diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/node/ServiceHealthGatherer.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/node/ServiceHealthGatherer.java
index a11acf07156..4a6eeae474a 100644
--- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/node/ServiceHealthGatherer.java
+++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/node/ServiceHealthGatherer.java
@@ -4,7 +4,6 @@ package ai.vespa.metricsproxy.node;
import ai.vespa.metricsproxy.metric.model.ConsumerId;
import ai.vespa.metricsproxy.metric.model.DimensionId;
import ai.vespa.metricsproxy.metric.model.MetricsPacket;
-import ai.vespa.metricsproxy.metric.model.ServiceId;
import ai.vespa.metricsproxy.service.VespaServices;
import java.time.Instant;
@@ -21,7 +20,7 @@ public class ServiceHealthGatherer {
return vespaServices.getVespaServices()
.stream()
.map(service ->
- new MetricsPacket.Builder(ServiceId.toServiceId(service.getMonitoringName()))
+ new MetricsPacket.Builder(service.getMonitoringName())
.timestamp(Instant.now().getEpochSecond())
.statusMessage(service.getHealth().getStatus().status)
.statusCode(service.getHealth().getStatus().code)
diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/VespaService.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/VespaService.java
index b069256f527..9d165b2d5a9 100644
--- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/VespaService.java
+++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/VespaService.java
@@ -4,6 +4,7 @@ package ai.vespa.metricsproxy.service;
import ai.vespa.metricsproxy.metric.HealthMetric;
import ai.vespa.metricsproxy.metric.Metrics;
import ai.vespa.metricsproxy.metric.model.DimensionId;
+import ai.vespa.metricsproxy.metric.model.ServiceId;
import java.util.Collections;
import java.util.Map;
@@ -24,7 +25,7 @@ public class VespaService implements Comparable<VespaService> {
private final String instanceName;
private final String configId;
private final String serviceName;
- private final String monitoringPrefix;
+ private final ServiceId serviceId;
private final Map<DimensionId, String> dimensions;
private volatile int pid = -1;
@@ -67,7 +68,7 @@ public class VespaService implements Comparable<VespaService> {
Map<DimensionId, String> dimensions) {
this.serviceName = serviceName;
this.instanceName = instanceName;
- this.monitoringPrefix = monitoringPrefix;
+ serviceId = ServiceId.toServiceId(monitoringPrefix + SEPARATOR + serviceName);
this.configId = configId;
this.statePort = statePort;
this.dimensions = dimensions;
@@ -81,8 +82,8 @@ public class VespaService implements Comparable<VespaService> {
* The name used for this service in the monitoring system:
* monitoring-system-name.serviceName
*/
- public String getMonitoringName() {
- return monitoringPrefix + SEPARATOR + serviceName;
+ public ServiceId getMonitoringName() {
+ return serviceId;
}
@Override
diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/VespaServices.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/VespaServices.java
index b0ea7e709a1..8d846d17553 100644
--- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/VespaServices.java
+++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/VespaServices.java
@@ -105,7 +105,7 @@ public class VespaServices {
List<VespaService> myServices = new ArrayList<>();
for (VespaService s : services) {
log.log(FINE, () -> "getMonitoringServices. service=" + service + ", checking against " + s + ", which has monitoring name " + s.getMonitoringName());
- if (s.getMonitoringName().equalsIgnoreCase(service)) {
+ if (s.getMonitoringName().id.equalsIgnoreCase(service)) {
myServices.add(s);
}
}
diff --git a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/rpc/RpcHealthMetricsTest.java b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/rpc/RpcHealthMetricsTest.java
index ac5fae9a727..ba46c2d1066 100644
--- a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/rpc/RpcHealthMetricsTest.java
+++ b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/rpc/RpcHealthMetricsTest.java
@@ -53,7 +53,7 @@ public class RpcHealthMetricsTest {
assertThat("Status should be failed" + h.getMessage(), h.isOk(), is(false));
assertThat(h.getMessage(), is("SOMETHING FAILED"));
- String jsonRPCMessage = getHealthMetrics(tester, qrserver.getMonitoringName());
+ String jsonRPCMessage = getHealthMetrics(tester, qrserver.getMonitoringName().id);
assertThat(jsonRPCMessage, is(WANTED_RPC_RESPONSE));
}
}
diff --git a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/rpc/RpcMetricsTest.java b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/rpc/RpcMetricsTest.java
index 70970bfe8da..f4acb8c312f 100644
--- a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/rpc/RpcMetricsTest.java
+++ b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/rpc/RpcMetricsTest.java
@@ -103,7 +103,7 @@ public class RpcMetricsTest {
assertThat("#Services should be 1 for config id " + SERVICE_1_CONFIG_ID, services.size(), is(1));
VespaService qrserver = services.get(0);
- assertThat(qrserver.getMonitoringName(), is(MONITORING_SYSTEM + VespaService.SEPARATOR + "qrserver"));
+ assertThat(qrserver.getMonitoringName().id, is(MONITORING_SYSTEM + VespaService.SEPARATOR + "qrserver"));
Metrics metrics = qrserver.getMetrics();
assertThat("Fetched number of metrics is not correct", metrics.size(), is(2));
@@ -134,7 +134,7 @@ public class RpcMetricsTest {
}
private static void verifyMetricsFromRpcRequest(VespaService service, RpcClient client) throws IOException {
- String jsonResponse = getMetricsForYamas(service.getMonitoringName(), client).trim();
+ String jsonResponse = getMetricsForYamas(service.getMonitoringName().id, client).trim();
ArrayNode metrics = (ArrayNode) jsonMapper.readTree(jsonResponse).get("metrics");
assertThat("Expected 3 metric messages", metrics.size(), is(3));
for (int i = 0; i < metrics.size() - 1; i++) { // The last "metric message" contains only status code/message
@@ -193,7 +193,7 @@ public class RpcMetricsTest {
assertNotNull("Did not find expected metric with name 'bar'", m2);
try (RpcClient rpcClient = new RpcClient(tester.rpcPort())) {
- String response = getAllMetricNamesForService(services.get(0).getMonitoringName(), vespaMetricsConsumerId, rpcClient);
+ String response = getAllMetricNamesForService(services.get(0).getMonitoringName().id, vespaMetricsConsumerId, rpcClient);
assertThat(response, is("foo.count=ON;output-name=foo_count,bar.count=OFF,"));
}
}