aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgjoranv <gjoranv@gmail.com>2023-08-17 15:23:04 +0200
committergjoranv <gjoranv@gmail.com>2023-08-18 13:48:32 +0200
commitd1ec754bceb31c541619fde39ecb5c6e1bcccbfe (patch)
tree80f46e36511151238c8dace2d661326d7f584204
parent5c51af58b98c987975e3db62d9ed09d72b8188d8 (diff)
Add Builder to MetricSet class
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/admin/monitoring/MetricSetTest.java48
-rw-r--r--metrics/src/main/java/ai/vespa/metrics/set/MetricSet.java34
2 files changed, 82 insertions, 0 deletions
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/admin/monitoring/MetricSetTest.java b/config-model/src/test/java/com/yahoo/vespa/model/admin/monitoring/MetricSetTest.java
index 8235f45aaec..4fda553e39d 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/admin/monitoring/MetricSetTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/admin/monitoring/MetricSetTest.java
@@ -1,6 +1,8 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.model.admin.monitoring;
+import ai.vespa.metrics.Unit;
+import ai.vespa.metrics.VespaMetrics;
import ai.vespa.metrics.set.Metric;
import ai.vespa.metrics.set.MetricSet;
import com.google.common.collect.Sets;
@@ -60,4 +62,50 @@ public class MetricSetTest {
assertEquals(3, combinedMetric.dimensions.size());
assertEquals("parentCommonVal", combinedMetric.dimensions.get(COMMON_DIMENSION_KEY));
}
+
+ @Test
+ void it_can_be_generated_from_builder() {
+ MetricSet metricSet = new MetricSet.Builder("test")
+ .metric("metric1")
+ .metric(TestMetrics.ENUM_METRIC.last())
+ .metric(new Metric("metric2"))
+ .metrics(List.of(new Metric("metric3")))
+ .metricSet(new MetricSet.Builder("child")
+ .metric("child_metric1")
+ .metric("child_metric2")
+ .build())
+ .build();
+
+ Map<String, Metric> metrics = metricSet.getMetrics();
+ assertEquals(6, metrics.size());
+ assertNotNull(metrics.get("metric1"));
+ assertNotNull(metrics.get("emum-metric.last"));
+ assertNotNull(metrics.get("metric2"));
+ assertNotNull(metrics.get("metric3"));
+ assertNotNull(metrics.get("child_metric1"));
+ assertNotNull(metrics.get("child_metric1"));
+ }
+
+ enum TestMetrics implements VespaMetrics {
+ ENUM_METRIC("emum-metric");
+
+ private final String name;
+
+ TestMetrics(String name) {
+ this.name = name;
+ }
+
+ public String baseName() {
+ return name;
+ }
+
+ public Unit unit() {
+ return null;
+ }
+
+ public String description() {
+ return null;
+ }
+
+ }
}
diff --git a/metrics/src/main/java/ai/vespa/metrics/set/MetricSet.java b/metrics/src/main/java/ai/vespa/metrics/set/MetricSet.java
index b8409fb7663..d502109e24e 100644
--- a/metrics/src/main/java/ai/vespa/metrics/set/MetricSet.java
+++ b/metrics/src/main/java/ai/vespa/metrics/set/MetricSet.java
@@ -88,4 +88,38 @@ public class MetricSet {
return metricMap;
}
+
+ public static class Builder {
+ private final String id;
+ private final Set<Metric> metrics = new LinkedHashSet<>();
+ private final Set<MetricSet> children = new LinkedHashSet<>();
+
+ public Builder(String id) {
+ this.id = id;
+ }
+
+ public Builder metric(String metric) {
+ return metric(new Metric(metric));
+ }
+
+ public Builder metric(Metric metric) {
+ metrics.add(metric);
+ return this;
+ }
+
+ public Builder metrics(Collection<Metric> metrics) {
+ this.metrics.addAll(metrics);
+ return this;
+ }
+
+ public Builder metricSet(MetricSet child) {
+ children.add(child);
+ return this;
+ }
+
+ public MetricSet build() {
+ return new MetricSet(id, metrics, children);
+ }
+ }
+
}