summaryrefslogtreecommitdiffstats
path: root/tenant-cd
diff options
context:
space:
mode:
authorJon Marius Venstad <jvenstad@yahoo-inc.com>2019-04-16 10:45:12 +0200
committerJon Marius Venstad <jvenstad@yahoo-inc.com>2019-06-06 13:03:28 +0200
commit6a0dda8a443641710e95b845b9c54f7a5d7b9980 (patch)
tree9822bee972b77e850245c3313753ff48c089ad7e /tenant-cd
parent0f554ee318980e0a2cb82e1cbd16bfde4e1aa9a0 (diff)
Add Space for convenience construction of points
Diffstat (limited to 'tenant-cd')
-rw-r--r--tenant-cd/src/main/java/com/yahoo/vespa/tenant/cd/metrics/Space.java45
1 files changed, 45 insertions, 0 deletions
diff --git a/tenant-cd/src/main/java/com/yahoo/vespa/tenant/cd/metrics/Space.java b/tenant-cd/src/main/java/com/yahoo/vespa/tenant/cd/metrics/Space.java
new file mode 100644
index 00000000000..31f1557a2ee
--- /dev/null
+++ b/tenant-cd/src/main/java/com/yahoo/vespa/tenant/cd/metrics/Space.java
@@ -0,0 +1,45 @@
+package com.yahoo.vespa.tenant.cd.metrics;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.IntStream;
+
+import static java.util.stream.Collectors.toUnmodifiableMap;
+
+/**
+ * Used to easily generate points for a pre-defined space.
+ *
+ * @author jonmv
+ */
+public class Space {
+
+ private final List<String> dimensions;
+
+ private Space(List<String> dimensions) {
+ this.dimensions = dimensions;
+ }
+
+ /** Creates a new space with the given named dimensions, in order. */
+ public static Space of(List<String> dimensions) {
+ if (Set.copyOf(dimensions).size() != dimensions.size())
+ throw new IllegalArgumentException("Duplicated dimension names in '" + dimensions + "'.");
+
+ return new Space(List.copyOf(dimensions));
+ }
+
+ /** Returns a point in this space, with the given values along each dimensions, in order. */
+ public Map<String, ?> at(List<?> values) {
+ if (dimensions.size() != values.size())
+ throw new IllegalArgumentException("This space has " + dimensions.size() + " dimensions, but " + values.size() + " were given.");
+
+ return IntStream.range(0, dimensions.size()).boxed().collect(toUnmodifiableMap(dimensions::get, values::get));
+ }
+
+ /** Returns a point in this space, with the given values along each dimensions, in order. */
+ public Map<String, ?> at(Object... values) {
+ return at(List.of(values));
+ }
+
+}