Skip to content

Commit 5214c17

Browse files
authored
Merge pull request aol#279 from aol/configurable-expansions
Configurable expansions for Datadog metrics
2 parents 3bb2138 + ba0a901 commit 5214c17

File tree

3 files changed

+79
-1
lines changed

3 files changed

+79
-1
lines changed

micro-metrics-datadog/readme.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,11 @@ datadog.apikey = <your api key goes here>
3535
datadog.tags = "stage:dev", "owner:abc"
3636
datadog.report.period = 10
3737
datadog.report.timeunit = SECONDS
38+
datadog.report.expansions=<comma separated list of expansions>
3839
```
3940

41+
Default setting is to report all available expansions. List is available here [Datadog expansions](http://static.javadoc.io/org.coursera/metrics-datadog/1.1.6/org/coursera/metrics/datadog/DatadogReporter.Expansion.html).
42+
4043
This will report the metrics to datadog with tags as "stage:dev" and "owner:abc" and for every 10 seconds
4144

4245

micro-metrics-datadog/src/main/java/com/aol/micro/server/datadog/metrics/DatadogMetricsConfigurer.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,22 @@
55
import java.util.List;
66
import java.util.Optional;
77
import java.util.concurrent.TimeUnit;
8+
import java.util.stream.Collectors;
9+
import java.util.stream.Stream;
810

911
import org.coursera.metrics.datadog.DatadogReporter;
1012
import org.coursera.metrics.datadog.transport.HttpTransport;
1113
import org.springframework.beans.factory.annotation.Autowired;
1214
import org.springframework.beans.factory.annotation.Value;
1315
import org.springframework.context.annotation.Configuration;
1416

17+
import com.aol.cyclops.control.Maybe;
1518
import com.codahale.metrics.MetricRegistry;
1619
import com.ryantenney.metrics.spring.config.annotation.EnableMetrics;
1720
import com.ryantenney.metrics.spring.config.annotation.MetricsConfigurerAdapter;
1821

22+
import lombok.Getter;
23+
1924
@Configuration
2025
@EnableMetrics
2126
public class DatadogMetricsConfigurer extends MetricsConfigurerAdapter {
@@ -24,17 +29,33 @@ public class DatadogMetricsConfigurer extends MetricsConfigurerAdapter {
2429
private List<String> tags;
2530
private int period;
2631
private TimeUnit timeUnit;
32+
@Getter
33+
private EnumSet<DatadogReporter.Expansion> expansions;
2734

2835
@Autowired
2936
public DatadogMetricsConfigurer(@Value("${datadog.apikey}") String apiKey,
3037
@Value("${datadog.tags:{\"stage:dev\"}}") String tags, @Value("${datadog.report.period:1}") int period,
31-
@Value("${datadog.report.timeunit:SECONDS}") TimeUnit timeUnit) {
38+
@Value("${datadog.report.timeunit:SECONDS}") TimeUnit timeUnit,
39+
@Value("${datadog.report.expansions:#{null}}") String expStr) {
3240
this.apiKey = apiKey;
3341
this.tags = Arrays.asList(Optional.ofNullable(tags)
3442
.orElse("")
3543
.split(","));
3644
this.period = period;
3745
this.timeUnit = timeUnit;
46+
this.expansions = expansions(expStr);
47+
}
48+
49+
private EnumSet<DatadogReporter.Expansion> expansions(String expStr) {
50+
return Maybe.just(Maybe.ofNullable(expStr)
51+
.map(s -> s.split(","))
52+
.stream()
53+
.flatMap(Stream::of)
54+
.map(String::trim)
55+
.map(DatadogReporter.Expansion::valueOf)
56+
.collect(Collectors.toCollection(() -> EnumSet.noneOf(DatadogReporter.Expansion.class))))
57+
.filter(s -> !s.isEmpty())
58+
.orElse(DatadogReporter.Expansion.ALL);
3859
}
3960

4061
@Override
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package com.aol.micro.server.datadog.metrics;
2+
3+
import static org.hamcrest.Matchers.equalTo;
4+
import static org.junit.Assert.assertThat;
5+
6+
import java.util.EnumSet;
7+
import java.util.concurrent.TimeUnit;
8+
9+
import org.coursera.metrics.datadog.DatadogReporter;
10+
import org.junit.Test;
11+
12+
public class DatadogMetricsConfigurerTest {
13+
14+
private String apiKey = "api";
15+
private String tags = "tags";
16+
private int period = 10;
17+
private TimeUnit timeUnit = TimeUnit.DAYS;
18+
19+
@Test
20+
public void expansionsDefault() {
21+
String expStr = null;
22+
DatadogMetricsConfigurer c = new DatadogMetricsConfigurer(
23+
apiKey, tags, period, timeUnit, expStr);
24+
assertThat(c.getExpansions(), equalTo(DatadogReporter.Expansion.ALL));
25+
}
26+
27+
@Test
28+
public void expansionsSingle() {
29+
String expStr = DatadogReporter.Expansion.MEDIAN.name();
30+
DatadogMetricsConfigurer c = new DatadogMetricsConfigurer(
31+
apiKey, tags, period, timeUnit, expStr);
32+
assertThat(c.getExpansions(), equalTo(EnumSet.of(DatadogReporter.Expansion.MEDIAN)));
33+
}
34+
35+
@Test
36+
public void expansionsTwo() {
37+
String expStr = DatadogReporter.Expansion.MEDIAN.name() + "," + DatadogReporter.Expansion.RATE_15_MINUTE.name();
38+
DatadogMetricsConfigurer c = new DatadogMetricsConfigurer(
39+
apiKey, tags, period, timeUnit, expStr);
40+
assertThat(c.getExpansions(),
41+
equalTo(EnumSet.of(DatadogReporter.Expansion.MEDIAN, DatadogReporter.Expansion.RATE_15_MINUTE)));
42+
}
43+
44+
@Test
45+
public void expansionsTwoSpace() {
46+
String expStr = DatadogReporter.Expansion.MEDIAN.name() + " , "
47+
+ DatadogReporter.Expansion.RATE_15_MINUTE.name();
48+
DatadogMetricsConfigurer c = new DatadogMetricsConfigurer(
49+
apiKey, tags, period, timeUnit, expStr);
50+
assertThat(c.getExpansions(),
51+
equalTo(EnumSet.of(DatadogReporter.Expansion.MEDIAN, DatadogReporter.Expansion.RATE_15_MINUTE)));
52+
}
53+
54+
}

0 commit comments

Comments
 (0)