diff options
author | Jon Marius Venstad <jvenstad@yahoo-inc.com> | 2019-04-16 10:45:12 +0200 |
---|---|---|
committer | Jon Marius Venstad <jvenstad@yahoo-inc.com> | 2019-06-06 13:03:28 +0200 |
commit | 6a0dda8a443641710e95b845b9c54f7a5d7b9980 (patch) | |
tree | 9822bee972b77e850245c3313753ff48c089ad7e | |
parent | 0f554ee318980e0a2cb82e1cbd16bfde4e1aa9a0 (diff) |
Add Space for convenience construction of points
-rw-r--r-- | tenant-cd/src/main/java/com/yahoo/vespa/tenant/cd/metrics/Space.java | 45 |
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)); + } + +} |