From e649ef44cc7b749b2077391dcc6c8e992787dc20 Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Thu, 23 May 2013 19:26:25 +0100 Subject: [PATCH] [bs-107] Finish off varz->metrics [Fixes #49496887] [bs-107] Remove trailing "z" from management endpoint URLs --- spring-bootstrap-actuator/README.md | 12 +++--- .../autoconfigure/HealthConfiguration.java | 2 +- .../autoconfigure/MetricsConfiguration.java | 4 +- .../autoconfigure/SecurityConfiguration.java | 6 +-- .../endpoint/health/HealthEndpoint.java | 4 +- .../endpoint/metrics/MetricsEndpoint.java | 4 +- .../SecurityConfigurationTests.java | 37 +++++++++++++++++++ ...dressServiceBootstrapApplicationTests.java | 8 ++-- ...ementServiceBootstrapApplicationTests.java | 4 +- ...ementServiceBootstrapApplicationTests.java | 4 +- .../ServiceBootstrapApplicationTests.java | 8 ++-- 11 files changed, 65 insertions(+), 28 deletions(-) diff --git a/spring-bootstrap-actuator/README.md b/spring-bootstrap-actuator/README.md index e666934301d..109a8ae69b6 100644 --- a/spring-bootstrap-actuator/README.md +++ b/spring-bootstrap-actuator/README.md @@ -85,13 +85,13 @@ You should be able to run it already: Then in another terminal - $ curl localhost:8080/healthz + $ curl localhost:8080/health ok - $ curl localhost:8080/varz - {"counter.status.200.healthz":1.0,"gauge.response.healthz":10.0,"mem":120768.0,"mem.free":105012.0,"processors":4.0} + $ curl localhost:8080/metrics + {"counter.status.200.health":1.0,"gauge.response.health":10.0,"mem":120768.0,"mem.free":105012.0,"processors":4.0} -`/healthz` is the default location for the health endpoint - it tells -you if the application is running and healthy. `/varz` is the default +`/health` is the default location for the health endpoint - it tells +you if the application is running and healthy. `/metrics` is the default location for the metrics endpoint - it gives you basic counts and response timing data by default but there are plenty of ways to customize it. You can also try `/trace` and `/dump` to get some @@ -196,7 +196,7 @@ will find the home page on port 9000 instead of 8080: and the management endpoints on port 9001 instead of 8080: - $ curl localhost:9001/healthz + $ curl localhost:9001/health ok To externalize business configuration you can simply add a default diff --git a/spring-bootstrap-actuator/src/main/java/org/springframework/bootstrap/actuate/autoconfigure/HealthConfiguration.java b/spring-bootstrap-actuator/src/main/java/org/springframework/bootstrap/actuate/autoconfigure/HealthConfiguration.java index da2e8a95ec1..3e34f8ac171 100644 --- a/spring-bootstrap-actuator/src/main/java/org/springframework/bootstrap/actuate/autoconfigure/HealthConfiguration.java +++ b/spring-bootstrap-actuator/src/main/java/org/springframework/bootstrap/actuate/autoconfigure/HealthConfiguration.java @@ -43,7 +43,7 @@ public class HealthConfiguration { private HealthIndicator healthIndicator = new VanillaHealthIndicator(); @Bean - public HealthEndpoint healthzEndpoint() { + public HealthEndpoint healthEndpoint() { return new HealthEndpoint(this.healthIndicator); } diff --git a/spring-bootstrap-actuator/src/main/java/org/springframework/bootstrap/actuate/autoconfigure/MetricsConfiguration.java b/spring-bootstrap-actuator/src/main/java/org/springframework/bootstrap/actuate/autoconfigure/MetricsConfiguration.java index 48ac70a5a9e..a12f405e288 100644 --- a/spring-bootstrap-actuator/src/main/java/org/springframework/bootstrap/actuate/autoconfigure/MetricsConfiguration.java +++ b/spring-bootstrap-actuator/src/main/java/org/springframework/bootstrap/actuate/autoconfigure/MetricsConfiguration.java @@ -19,9 +19,9 @@ package org.springframework.bootstrap.actuate.autoconfigure; import javax.servlet.Servlet; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.bootstrap.actuate.endpoint.metrics.MetricsEndpoint; import org.springframework.bootstrap.actuate.endpoint.metrics.PublicMetrics; import org.springframework.bootstrap.actuate.endpoint.metrics.VanillaPublicMetrics; -import org.springframework.bootstrap.actuate.endpoint.metrics.MetricsEndpoint; import org.springframework.bootstrap.actuate.metrics.MetricRepository; import org.springframework.bootstrap.context.annotation.ConditionalOnClass; import org.springframework.bootstrap.context.annotation.ConditionalOnMissingBean; @@ -31,7 +31,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.DispatcherServlet; /** - * {@link EnableAutoConfiguration Auto-configuration} for /varz endpoint. + * {@link EnableAutoConfiguration Auto-configuration} for /metrics endpoint. * * @author Dave Syer */ diff --git a/spring-bootstrap-actuator/src/main/java/org/springframework/bootstrap/actuate/autoconfigure/SecurityConfiguration.java b/spring-bootstrap-actuator/src/main/java/org/springframework/bootstrap/actuate/autoconfigure/SecurityConfiguration.java index d805191c4ab..2dfc06edf89 100644 --- a/spring-bootstrap-actuator/src/main/java/org/springframework/bootstrap/actuate/autoconfigure/SecurityConfiguration.java +++ b/spring-bootstrap-actuator/src/main/java/org/springframework/bootstrap/actuate/autoconfigure/SecurityConfiguration.java @@ -57,8 +57,8 @@ public class SecurityConfiguration { private static class BoostrapWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter { - @Value("${endpoints.healthz.path:/healthz}") - private String healthzPath = "/healthz"; + @Value("${endpoints.health.path:/health}") + private String healthPath = "/health"; @Value("${endpoints.info.path:/info}") private String infoPath = "/info"; @@ -80,7 +80,7 @@ public class SecurityConfiguration { @Override public void configure(WebSecurityConfiguration builder) throws Exception { - builder.ignoring().antMatchers(this.healthzPath, this.infoPath); + builder.ignoring().antMatchers(this.healthPath, this.infoPath); } @Override diff --git a/spring-bootstrap-actuator/src/main/java/org/springframework/bootstrap/actuate/endpoint/health/HealthEndpoint.java b/spring-bootstrap-actuator/src/main/java/org/springframework/bootstrap/actuate/endpoint/health/HealthEndpoint.java index 22e058ad6ee..947625cb6a7 100644 --- a/spring-bootstrap-actuator/src/main/java/org/springframework/bootstrap/actuate/endpoint/health/HealthEndpoint.java +++ b/spring-bootstrap-actuator/src/main/java/org/springframework/bootstrap/actuate/endpoint/health/HealthEndpoint.java @@ -36,9 +36,9 @@ public class HealthEndpoint { this.indicator = indicator; } - @RequestMapping("${endpoints.healthz.path:/healthz}") + @RequestMapping("${endpoints.health.path:/health}") @ResponseBody - public T healthz() { + public T health() { return this.indicator.health(); } diff --git a/spring-bootstrap-actuator/src/main/java/org/springframework/bootstrap/actuate/endpoint/metrics/MetricsEndpoint.java b/spring-bootstrap-actuator/src/main/java/org/springframework/bootstrap/actuate/endpoint/metrics/MetricsEndpoint.java index f1ef14cd5e1..71bbb263c97 100644 --- a/spring-bootstrap-actuator/src/main/java/org/springframework/bootstrap/actuate/endpoint/metrics/MetricsEndpoint.java +++ b/spring-bootstrap-actuator/src/main/java/org/springframework/bootstrap/actuate/endpoint/metrics/MetricsEndpoint.java @@ -39,9 +39,9 @@ public class MetricsEndpoint { this.metrics = metrics; } - @RequestMapping("${endpoints.varz.path:/varz}") + @RequestMapping("${endpoints.metrics.path:/metrics}") @ResponseBody - public Map varz() { + public Map metrics() { Map result = new LinkedHashMap(); for (Metric metric : this.metrics.metrics()) { result.put(metric.getName(), metric.getValue()); diff --git a/spring-bootstrap-actuator/src/test/java/org/springframework/bootstrap/actuate/autoconfigure/SecurityConfigurationTests.java b/spring-bootstrap-actuator/src/test/java/org/springframework/bootstrap/actuate/autoconfigure/SecurityConfigurationTests.java index 79d8af54a3a..d7bc24d747d 100644 --- a/spring-bootstrap-actuator/src/test/java/org/springframework/bootstrap/actuate/autoconfigure/SecurityConfigurationTests.java +++ b/spring-bootstrap-actuator/src/test/java/org/springframework/bootstrap/actuate/autoconfigure/SecurityConfigurationTests.java @@ -18,10 +18,16 @@ package org.springframework.bootstrap.actuate.autoconfigure; import org.junit.Test; import org.springframework.bootstrap.autoconfigure.PropertyPlaceholderAutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; import org.springframework.mock.web.MockServletContext; import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.TestingAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.AuthenticationException; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; /** @@ -41,4 +47,35 @@ public class SecurityConfigurationTests { assertNotNull(this.context.getBean(AuthenticationManager.class)); } + @Test + public void testOverrideAuthenticationManager() throws Exception { + this.context = new AnnotationConfigWebApplicationContext(); + this.context.setServletContext(new MockServletContext()); + this.context.register(TestConfiguration.class, SecurityConfiguration.class, + PropertyPlaceholderAutoConfiguration.class); + this.context.refresh(); + assertEquals(this.context.getBean(TestConfiguration.class).authenticationManager, + this.context.getBean(AuthenticationManager.class)); + } + + @Configuration + protected static class TestConfiguration { + + private AuthenticationManager authenticationManager; + + @Bean + public AuthenticationManager myAuthenticationManager() { + this.authenticationManager = new AuthenticationManager() { + + @Override + public Authentication authenticate(Authentication authentication) + throws AuthenticationException { + return new TestingAuthenticationToken("foo", "bar"); + } + }; + return this.authenticationManager; + } + + } + } diff --git a/spring-bootstrap-samples/spring-bootstrap-actuator-sample/src/test/java/org/springframework/bootstrap/sample/service/ManagementAddressServiceBootstrapApplicationTests.java b/spring-bootstrap-samples/spring-bootstrap-actuator-sample/src/test/java/org/springframework/bootstrap/sample/service/ManagementAddressServiceBootstrapApplicationTests.java index 0a8506dbfae..7bf0deea663 100644 --- a/spring-bootstrap-samples/spring-bootstrap-actuator-sample/src/test/java/org/springframework/bootstrap/sample/service/ManagementAddressServiceBootstrapApplicationTests.java +++ b/spring-bootstrap-samples/spring-bootstrap-actuator-sample/src/test/java/org/springframework/bootstrap/sample/service/ManagementAddressServiceBootstrapApplicationTests.java @@ -77,11 +77,11 @@ public class ManagementAddressServiceBootstrapApplicationTests { } @Test - public void testVarz() throws Exception { + public void testMetrics() throws Exception { testHome(); // makes sure some requests have been made @SuppressWarnings("rawtypes") ResponseEntity entity = getRestTemplate().getForEntity( - "http://localhost:" + managementPort + "/varz", Map.class); + "http://localhost:" + managementPort + "/metrics", Map.class); assertEquals(HttpStatus.OK, entity.getStatusCode()); @SuppressWarnings("unchecked") Map body = entity.getBody(); @@ -89,9 +89,9 @@ public class ManagementAddressServiceBootstrapApplicationTests { } @Test - public void testHealthz() throws Exception { + public void testHealth() throws Exception { ResponseEntity entity = getRestTemplate().getForEntity( - "http://localhost:" + managementPort + "/healthz", String.class); + "http://localhost:" + managementPort + "/health", String.class); assertEquals(HttpStatus.OK, entity.getStatusCode()); assertEquals("ok", entity.getBody()); } diff --git a/spring-bootstrap-samples/spring-bootstrap-actuator-sample/src/test/java/org/springframework/bootstrap/sample/service/ManagementServiceBootstrapApplicationTests.java b/spring-bootstrap-samples/spring-bootstrap-actuator-sample/src/test/java/org/springframework/bootstrap/sample/service/ManagementServiceBootstrapApplicationTests.java index e84a419b407..c2abfbab927 100644 --- a/spring-bootstrap-samples/spring-bootstrap-actuator-sample/src/test/java/org/springframework/bootstrap/sample/service/ManagementServiceBootstrapApplicationTests.java +++ b/spring-bootstrap-samples/spring-bootstrap-actuator-sample/src/test/java/org/springframework/bootstrap/sample/service/ManagementServiceBootstrapApplicationTests.java @@ -65,9 +65,9 @@ public class ManagementServiceBootstrapApplicationTests { } @Test - public void testHealthz() throws Exception { + public void testHealth() throws Exception { ResponseEntity entity = getRestTemplate().getForEntity( - "http://localhost:" + managementPort + "/healthz", String.class); + "http://localhost:" + managementPort + "/health", String.class); assertEquals(HttpStatus.OK, entity.getStatusCode()); assertEquals("ok", entity.getBody()); } diff --git a/spring-bootstrap-samples/spring-bootstrap-actuator-sample/src/test/java/org/springframework/bootstrap/sample/service/NoManagementServiceBootstrapApplicationTests.java b/spring-bootstrap-samples/spring-bootstrap-actuator-sample/src/test/java/org/springframework/bootstrap/sample/service/NoManagementServiceBootstrapApplicationTests.java index 5be515bcc41..773084d9c1e 100644 --- a/spring-bootstrap-samples/spring-bootstrap-actuator-sample/src/test/java/org/springframework/bootstrap/sample/service/NoManagementServiceBootstrapApplicationTests.java +++ b/spring-bootstrap-samples/spring-bootstrap-actuator-sample/src/test/java/org/springframework/bootstrap/sample/service/NoManagementServiceBootstrapApplicationTests.java @@ -75,11 +75,11 @@ public class NoManagementServiceBootstrapApplicationTests { } @Test(expected = ResourceAccessException.class) - public void testVarzNotAvailable() throws Exception { + public void testMetricsNotAvailable() throws Exception { testHome(); // makes sure some requests have been made @SuppressWarnings("rawtypes") ResponseEntity entity = getRestTemplate("user", "password").getForEntity( - "http://localhost:" + managementPort + "/varz", Map.class); + "http://localhost:" + managementPort + "/metrics", Map.class); assertEquals(HttpStatus.NOT_FOUND, entity.getStatusCode()); } diff --git a/spring-bootstrap-samples/spring-bootstrap-actuator-sample/src/test/java/org/springframework/bootstrap/sample/service/ServiceBootstrapApplicationTests.java b/spring-bootstrap-samples/spring-bootstrap-actuator-sample/src/test/java/org/springframework/bootstrap/sample/service/ServiceBootstrapApplicationTests.java index e87798f7efb..b759c03fadc 100644 --- a/spring-bootstrap-samples/spring-bootstrap-actuator-sample/src/test/java/org/springframework/bootstrap/sample/service/ServiceBootstrapApplicationTests.java +++ b/spring-bootstrap-samples/spring-bootstrap-actuator-sample/src/test/java/org/springframework/bootstrap/sample/service/ServiceBootstrapApplicationTests.java @@ -84,11 +84,11 @@ public class ServiceBootstrapApplicationTests { } @Test - public void testVarz() throws Exception { + public void testMetrics() throws Exception { testHome(); // makes sure some requests have been made @SuppressWarnings("rawtypes") ResponseEntity entity = getRestTemplate("user", "password").getForEntity( - "http://localhost:8080/varz", Map.class); + "http://localhost:8080/metrics", Map.class); assertEquals(HttpStatus.OK, entity.getStatusCode()); @SuppressWarnings("unchecked") Map body = entity.getBody(); @@ -96,9 +96,9 @@ public class ServiceBootstrapApplicationTests { } @Test - public void testHealthz() throws Exception { + public void testHealth() throws Exception { ResponseEntity entity = getRestTemplate().getForEntity( - "http://localhost:8080/healthz", String.class); + "http://localhost:8080/health", String.class); assertEquals(HttpStatus.OK, entity.getStatusCode()); assertEquals("ok", entity.getBody()); }