Skip to content

Commit 9d38e53

Browse files
committed
Extra config conditions and tests for servlet config
1 parent 1499702 commit 9d38e53

File tree

9 files changed

+113
-6
lines changed

9 files changed

+113
-6
lines changed

datadog-autoconfiguration/build.gradle

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
dependencies {
33
compile "org.springframework.boot:spring-boot-autoconfigure:${springVersion}"
44
compile "org.projectlombok:lombok:1.16.10"
5-
compile "org.coursera:dropwizard-metrics-datadog:1.1.6"
6-
compileOnly "io.dropwizard.metrics:metrics-jvm:3.1.2"
7-
compileOnly "io.dropwizard.metrics:metrics-logback:3.1.2"
5+
compile "org.coursera:dropwizard-metrics-datadog:1.1.10"
6+
compileOnly "io.dropwizard.metrics:metrics-jvm:${dropwizardVersion}"
7+
compileOnly "io.dropwizard.metrics:metrics-logback:${dropwizardVersion}"
88

99
testCompile "org.springframework.boot:spring-boot-starter-test:${springVersion}"
1010
testCompile "org.springframework.boot:spring-boot-starter-web:${springVersion}"

datadog-autoconfiguration/src/main/java/smartthings/springboot/metrics/autoconfiguration/dropwizard/DropwizardJvmAutoConfiguration.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,17 @@
55
import com.codahale.metrics.jvm.MemoryUsageGaugeSet;
66
import javax.annotation.PostConstruct;
77
import org.springframework.beans.factory.annotation.Autowired;
8+
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
89
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
910

1011
/**
1112
* Automatically adds {@link MemoryUsageGaugeSet} and {@link GarbageCollectorMetricSet} to
1213
* the Datadog {@link MetricRegistry} when these classes are present on the classpath.
1314
*/
14-
@ConditionalOnClass(value = {MemoryUsageGaugeSet.class, GarbageCollectorMetricSet.class})
15+
@ConditionalOnClass(value = {
16+
MemoryUsageGaugeSet.class, GarbageCollectorMetricSet.class
17+
})
18+
@ConditionalOnBean(MetricRegistry.class)
1519
public class DropwizardJvmAutoConfiguration {
1620

1721
@Autowired

gradle.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
groovyVersion=2.4.1
22
slf4jVersion=1.7.10
33
springVersion=1.4.1.RELEASE
4-
dropwizardVersion=3.1.2
4+
dropwizardVersion=3.2.2

servlet-filter-autoconfiguration/build.gradle

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ dependencies {
1313
testCompile "org.mockito:mockito-core:1.10.19"
1414
testCompile "org.hamcrest:hamcrest-core:1.3"
1515
testCompile "org.assertj:assertj-core:3.6.1"
16+
testCompile project(":datadog-autoconfiguration")
1617
testRuntime 'ch.qos.logback:logback-classic:1.1.2'
1718
testRuntime "org.slf4j:log4j-over-slf4j:${slf4jVersion}"
1819
testRuntime "org.slf4j:jcl-over-slf4j:${slf4jVersion}"

servlet-filter-autoconfiguration/src/main/java/smartthings/springboot/metrics/autoconfiguration/servlet/ServletFilterAutoConfiguration.java

+28
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,27 @@
44
import com.codahale.metrics.servlet.InstrumentedFilter;
55
import com.codahale.metrics.servlet.InstrumentedFilterContextListener;
66
import javax.servlet.Filter;
7+
import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
8+
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
79
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
10+
import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
11+
import org.springframework.boot.context.properties.EnableConfigurationProperties;
812
import org.springframework.boot.web.servlet.FilterRegistrationBean;
913
import org.springframework.context.annotation.Bean;
14+
import org.springframework.context.annotation.ConditionContext;
15+
import org.springframework.context.annotation.Conditional;
1016
import org.springframework.context.annotation.Configuration;
17+
import org.springframework.core.type.AnnotatedTypeMetadata;
1118

1219
/**
1320
* Automatically adds a {@link InstrumentedFilter} to the servlet configuration when one is
1421
* present on the classpath.
1522
*/
1623
@Configuration
24+
@EnableConfigurationProperties(value = {ServletFilterProperties.class})
1725
@ConditionalOnClass(value = {InstrumentedFilter.class, Filter.class})
26+
@ConditionalOnBean(value = {MetricRegistry.class})
27+
@Conditional(ServletFilterAutoConfiguration.ServletFilterSetCondition.class)
1828
public class ServletFilterAutoConfiguration {
1929

2030
@Bean
@@ -47,4 +57,22 @@ private MetricRegistryContextListener(MetricRegistry metricRegistry) {
4757
}
4858
}
4959

60+
static final class ServletFilterSetCondition extends SpringBootCondition {
61+
private static final String ENABLED_PROPERTY = "metrics.servlet.enabled";
62+
63+
@Override public ConditionOutcome getMatchOutcome(ConditionContext context,
64+
AnnotatedTypeMetadata a) {
65+
66+
boolean enabled = isTrue(context.getEnvironment().getProperty(ENABLED_PROPERTY, Boolean.class));
67+
68+
return enabled ?
69+
ConditionOutcome.match() :
70+
ConditionOutcome.noMatch(ENABLED_PROPERTY + " is false or not set");
71+
}
72+
73+
private static boolean isTrue(Boolean b) {
74+
return b != null && b;
75+
}
76+
}
77+
5078
}

servlet-filter-autoconfiguration/src/main/java/smartthings/springboot/metrics/autoconfiguration/servlet/ServletFilterProperties.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
@ConfigurationProperties(prefix = "metrics.servlet")
99
public class ServletFilterProperties {
1010

11-
private String namePrefix = "instrumented";
11+
private String namePrefix = "servlet";
1212

1313
public String getNamePrefix() {
1414
return this.namePrefix;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package smartthings.springboot.metrics.autoconfiguration.servlet;
2+
3+
import org.junit.Test;
4+
import org.junit.runner.RunWith;
5+
import org.springframework.beans.factory.annotation.Autowired;
6+
import org.springframework.boot.context.properties.EnableConfigurationProperties;
7+
import org.springframework.boot.test.context.SpringBootTest;
8+
import org.springframework.test.context.TestPropertySource;
9+
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
10+
import org.springframework.test.context.web.WebAppConfiguration;
11+
import org.springframework.web.context.ConfigurableWebApplicationContext;
12+
13+
import static org.assertj.core.api.Assertions.assertThat;
14+
15+
/**
16+
* ServletFilterIntegrationTest.
17+
*/
18+
@SpringBootTest(classes = TestServer.class)
19+
@RunWith(SpringJUnit4ClassRunner.class)
20+
@WebAppConfiguration
21+
@TestPropertySource(properties = {
22+
"metrics.servlet.enabled=true",
23+
"metrics.datadog.enabled=true",
24+
"metrics.datadog.expansions=COUNT,MIN,MAX,MEDIAN",
25+
"metrics.datadog.includes=counter.one,counter.two,counter.test",
26+
"metrics.datadog.transport.type=http",
27+
"metrics.datadog.transport.api-key=test"
28+
})
29+
@EnableConfigurationProperties(ServletFilterProperties.class)
30+
public class ServletFilterIntegrationTest {
31+
32+
@Autowired
33+
ConfigurableWebApplicationContext context;
34+
35+
@Test
36+
public void check_propertiesFromConfig() throws Exception {
37+
38+
ServletFilterProperties properties = context.getBean(ServletFilterProperties.class);
39+
40+
assertThat(properties.getNamePrefix()).isEqualTo("servlet");
41+
42+
}
43+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package smartthings.springboot.metrics.autoconfiguration.servlet;
2+
3+
import org.springframework.boot.autoconfigure.SpringBootApplication;
4+
import org.springframework.boot.builder.SpringApplicationBuilder;
5+
6+
/**
7+
* SpringBootApplication used for integration tests.
8+
*/
9+
@SpringBootApplication
10+
public class TestServer {
11+
12+
public static void main(String[] args) {
13+
new SpringApplicationBuilder(TestServer.class)
14+
.properties("spring.config.name=test-server")
15+
.run(args);
16+
}
17+
18+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
metrics:
2+
datadog:
3+
enabled: true
4+
expansion:
5+
- COUNT
6+
- MIN
7+
- MAX
8+
- MEDIAN
9+
transport:
10+
type: http
11+
api-key: test
12+
servlet:
13+
enabled: true

0 commit comments

Comments
 (0)