diff --git a/kayenta-atlas/src/main/java/com/netflix/kayenta/atlas/metrics/AtlasMetricsService.java b/kayenta-atlas/src/main/java/com/netflix/kayenta/atlas/metrics/AtlasMetricsService.java index 0a8e6b334..6fdc7e5ec 100644 --- a/kayenta-atlas/src/main/java/com/netflix/kayenta/atlas/metrics/AtlasMetricsService.java +++ b/kayenta-atlas/src/main/java/com/netflix/kayenta/atlas/metrics/AtlasMetricsService.java @@ -176,6 +176,9 @@ public List queryMetrics(String accountName, metricSetBuilder.tags(filteredTags); } + metricSetBuilder.attribute("query", decoratedQuery); + metricSetBuilder.attribute("baseURL", uri); + metricSetList.add(metricSetBuilder.build()); } diff --git a/kayenta-core/src/main/java/com/netflix/kayenta/metrics/MetricSet.java b/kayenta-core/src/main/java/com/netflix/kayenta/metrics/MetricSet.java index 10efe1d30..8bbac9a4a 100644 --- a/kayenta-core/src/main/java/com/netflix/kayenta/metrics/MetricSet.java +++ b/kayenta-core/src/main/java/com/netflix/kayenta/metrics/MetricSet.java @@ -58,6 +58,10 @@ public class MetricSet { @Getter private List values; + @Singular + @Getter + private Map attributes; + @JsonIgnore private String metricSetKey; @@ -67,6 +71,7 @@ public MetricSet(String name, String startTimeIso, long stepMillis, List values, + Map attributes, String metricSetKey) { this.name = name; this.tags = tags; @@ -74,6 +79,7 @@ public MetricSet(String name, this.startTimeIso = startTimeIso; this.stepMillis = stepMillis; this.values = values; + this.attributes = attributes; this.metricSetKey = metricSetKey; } diff --git a/kayenta-core/src/main/java/com/netflix/kayenta/metrics/MetricSetMixerService.java b/kayenta-core/src/main/java/com/netflix/kayenta/metrics/MetricSetMixerService.java index 3edb5a9e0..b2b430b07 100644 --- a/kayenta-core/src/main/java/com/netflix/kayenta/metrics/MetricSetMixerService.java +++ b/kayenta-core/src/main/java/com/netflix/kayenta/metrics/MetricSetMixerService.java @@ -84,6 +84,13 @@ public MetricSetPair mixOne(MetricSet controlMetricSet, MetricSet experimentMetr .scope("control", controlScope) .scope("experiment", experimentScope); + if (controlMetricSet.getAttributes() != null) { + metricSetPairBuilder.attribute("control", controlMetricSet.getAttributes()); + } + if (experimentMetricSet.getAttributes() != null) { + metricSetPairBuilder.attribute("experiment", experimentMetricSet.getAttributes()); + } + return metricSetPairBuilder.build(); } diff --git a/kayenta-core/src/main/java/com/netflix/kayenta/metrics/MetricSetPair.java b/kayenta-core/src/main/java/com/netflix/kayenta/metrics/MetricSetPair.java index 88543bc6a..38352a7d5 100644 --- a/kayenta-core/src/main/java/com/netflix/kayenta/metrics/MetricSetPair.java +++ b/kayenta-core/src/main/java/com/netflix/kayenta/metrics/MetricSetPair.java @@ -50,16 +50,22 @@ public class MetricSetPair { @Getter private Map scopes; + @Getter + @Singular + private Map> attributes; + public MetricSetPair(String name, String id, Map tags, Map> values, - Map scopes) { + Map scopes, + Map> attributes) { this.name = name; this.id = id; this.tags = tags; this.values = values; this.scopes = scopes; + this.attributes = attributes; } @Builder diff --git a/kayenta-core/src/test/groovy/com/netflix/kayenta/metrics/MetricSetMixerServiceSpec.groovy b/kayenta-core/src/test/groovy/com/netflix/kayenta/metrics/MetricSetMixerServiceSpec.groovy index b372c6093..a03a84461 100644 --- a/kayenta-core/src/test/groovy/com/netflix/kayenta/metrics/MetricSetMixerServiceSpec.groovy +++ b/kayenta-core/src/test/groovy/com/netflix/kayenta/metrics/MetricSetMixerServiceSpec.groovy @@ -28,6 +28,7 @@ class MetricSetMixerServiceSpec extends Specification { .name('cpu') .values([1, 3, 5, 7]) .tag("tagName", "tagValue") + .attribute("attributeName", "attributeValue") .build() @Shared @@ -36,6 +37,7 @@ class MetricSetMixerServiceSpec extends Specification { .name('cpu') .values([2, 4, 6, 8]) .tag("tagName", "tagValue") + .attribute("attributeName", "attributeValue") .build() @Shared @@ -128,6 +130,7 @@ class MetricSetMixerServiceSpec extends Specification { experiment: [2, 4, 6, 8] ] metricSetPair.tags == [tagName: "tagValue"] + metricSetPair.attributes == [ control: [ attributeName: "attributeValue" ], experiment: [ attributeName: "attributeValue" ]] } void "Mixing sets should produce an id field"() {