From 13766008b40c1980e07c32d31fe0c5372358a2e3 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Sat, 25 Feb 2017 09:46:44 +0100 Subject: [PATCH] Remove metric export auto-configuration This commit removes the auto-configuration that export metrics automatically to Redis. This feature has been superseded by the stats feature and can be restored at any time in a custom service. Closes gh-373 --- initializr-actuator/pom.xml | 5 - .../InitializrMetricsConfiguration.java | 32 ------ .../autoconfigure/MetricsProperties.java | 97 ------------------- .../actuate/metric/MetricsExportTests.java | 95 ------------------ .../initializr/actuate/test/RedisRunning.java | 50 ---------- .../src/main/resources/application-cloud.yml | 4 - 6 files changed, 283 deletions(-) delete mode 100644 initializr-actuator/src/main/java/io/spring/initializr/actuate/autoconfigure/MetricsProperties.java delete mode 100644 initializr-actuator/src/test/java/io/spring/initializr/actuate/metric/MetricsExportTests.java delete mode 100644 initializr-actuator/src/test/java/io/spring/initializr/actuate/test/RedisRunning.java delete mode 100644 initializr-service/src/main/resources/application-cloud.yml diff --git a/initializr-actuator/pom.xml b/initializr-actuator/pom.xml index 67e94c40..e11b8678 100644 --- a/initializr-actuator/pom.xml +++ b/initializr-actuator/pom.xml @@ -21,11 +21,6 @@ org.springframework.boot spring-boot-actuator - - org.springframework.boot - spring-boot-starter-data-redis - true - org.springframework spring-web diff --git a/initializr-actuator/src/main/java/io/spring/initializr/actuate/autoconfigure/InitializrMetricsConfiguration.java b/initializr-actuator/src/main/java/io/spring/initializr/actuate/autoconfigure/InitializrMetricsConfiguration.java index e2eeaca3..133f9947 100644 --- a/initializr-actuator/src/main/java/io/spring/initializr/actuate/autoconfigure/InitializrMetricsConfiguration.java +++ b/initializr-actuator/src/main/java/io/spring/initializr/actuate/autoconfigure/InitializrMetricsConfiguration.java @@ -18,22 +18,9 @@ package io.spring.initializr.actuate.autoconfigure; import io.spring.initializr.actuate.metric.ProjectGenerationMetricsListener; -import org.springframework.boot.actuate.autoconfigure.ExportMetricWriter; -import org.springframework.boot.actuate.autoconfigure.MetricExportAutoConfiguration; import org.springframework.boot.actuate.metrics.CounterService; -import org.springframework.boot.actuate.metrics.repository.redis.RedisMetricRepository; -import org.springframework.boot.actuate.metrics.writer.MetricWriter; -import org.springframework.boot.autoconfigure.AutoConfigureAfter; -import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.data.redis.connection.RedisConnectionFactory; -import org.springframework.scheduling.annotation.EnableScheduling; -import org.springframework.util.ObjectUtils; /** * {@link org.springframework.boot.autoconfigure.EnableAutoConfiguration @@ -42,7 +29,6 @@ import org.springframework.util.ObjectUtils; * @author Dave Syer */ @Configuration -@AutoConfigureAfter({ RedisAutoConfiguration.class, MetricExportAutoConfiguration.class }) public class InitializrMetricsConfiguration { @Bean @@ -51,22 +37,4 @@ public class InitializrMetricsConfiguration { return new ProjectGenerationMetricsListener(counterService); } - @ConditionalOnBean(RedisConnectionFactory.class) - @ConditionalOnProperty(value = "spring.metrics.export.enabled") - @EnableScheduling - @EnableConfigurationProperties(MetricsProperties.class) - @Configuration - protected static class MetricsExportConfiguration { - - @Bean - @ExportMetricWriter - public MetricWriter writer(RedisConnectionFactory connectionFactory, - MetricsProperties metrics, ApplicationContext context) { - return new RedisMetricRepository(connectionFactory, - metrics.getPrefix() + metrics.getId(context.getId()) + "." - + ObjectUtils.getIdentityHexString(context) + ".", - metrics.getKey()); - } - } - } diff --git a/initializr-actuator/src/main/java/io/spring/initializr/actuate/autoconfigure/MetricsProperties.java b/initializr-actuator/src/main/java/io/spring/initializr/actuate/autoconfigure/MetricsProperties.java deleted file mode 100644 index 7f0d48b2..00000000 --- a/initializr-actuator/src/main/java/io/spring/initializr/actuate/autoconfigure/MetricsProperties.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright 2012-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.spring.initializr.actuate.autoconfigure; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.util.StringUtils; - -/** - * Metrics-related configuration. - * - * @author Dave Syer - */ -@ConfigurationProperties("initializr.metrics") -public class MetricsProperties { - - /** - * Prefix for redis keys holding metrics in data store. - */ - private String prefix = "spring.metrics.collector."; - - /** - * Redis key holding index to metrics keys in data store. - */ - private String key = "keys.spring.metrics.collector"; - - /** - * Identifier for application in metrics keys. Keys will be exported in the form - * "[id].[hex].[name]" (where "[id]" is this value, "[hex]" is unique per application - * context, and "[name]" is the "natural" name for the metric. - */ - @Value("${spring.application.name:${vcap.application.name:application}}") - private String id; - - /** - * The rate (in milliseconds) at which metrics are exported to Redis. If the value is - * <=0 then the export is disabled. - */ - @Value("${spring.metrics.export.default.delayMillis:5000}") - private long rateMillis = 5000L; - - public String getPrefix() { - if (prefix.endsWith(".")) { - return prefix; - } - return prefix + "."; - } - - public String getId(String defaultValue) { - if (StringUtils.hasText(id)) { - return id; - } - return defaultValue; - } - - public String getKey() { - return key; - } - - public void setKey(String key) { - this.key = key; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public long getRateMillis() { - return rateMillis; - } - - public void setRateMillis(long rateMillis) { - this.rateMillis = rateMillis; - } - - public void setPrefix(String prefix) { - this.prefix = prefix; - } -} diff --git a/initializr-actuator/src/test/java/io/spring/initializr/actuate/metric/MetricsExportTests.java b/initializr-actuator/src/test/java/io/spring/initializr/actuate/metric/MetricsExportTests.java deleted file mode 100644 index bb125322..00000000 --- a/initializr-actuator/src/test/java/io/spring/initializr/actuate/metric/MetricsExportTests.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright 2012-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.spring.initializr.actuate.metric; - -import io.spring.initializr.actuate.metric.MetricsExportTests.Config; -import io.spring.initializr.actuate.test.RedisRunning; -import io.spring.initializr.generator.ProjectGeneratedEvent; -import io.spring.initializr.generator.ProjectRequest; -import io.spring.initializr.metadata.InitializrMetadata; -import io.spring.initializr.metadata.InitializrMetadataBuilder; -import io.spring.initializr.metadata.InitializrMetadataProvider; -import io.spring.initializr.metadata.InitializrProperties; -import io.spring.initializr.metadata.SimpleInitializrMetadataProvider; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.boot.actuate.metrics.repository.redis.RedisMetricRepository; -import org.springframework.boot.actuate.metrics.writer.MetricWriter; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.test.context.junit4.SpringRunner; - -import static org.junit.Assert.assertTrue; - -/** - * @author Dave Syer - */ -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Config.class, properties = { - "spring.metrics.export.delayMillis:500", "spring.metrics.export.enabled:true", - "initializr.metrics.prefix:test.prefix", "initializr.metrics.key:key.test" }) -public class MetricsExportTests { - - @Rule - public RedisRunning running = new RedisRunning(); - - @Autowired - private ProjectGenerationMetricsListener listener; - - @Autowired - @Qualifier("writer") - private MetricWriter writer; - - private RedisMetricRepository repository; - - @Before - public void init() throws Exception { - repository = (RedisMetricRepository) writer; - repository.findAll().forEach(it -> repository.reset(it.getName())); - assertTrue("Metrics not empty", repository.count() == 0); - } - - @Test - public void exportAndCheckMetricsExist() throws Exception { - listener.onGeneratedProject(new ProjectGeneratedEvent(new ProjectRequest())); - Thread.sleep(1000L); - assertTrue("No metrics exported", repository.count() > 0); - } - - @Configuration - @EnableAutoConfiguration - @EnableConfigurationProperties(InitializrProperties.class) - protected static class Config { - - @Bean - public InitializrMetadataProvider initializrMetadataProvider( - InitializrProperties properties) { - InitializrMetadata metadata = InitializrMetadataBuilder - .fromInitializrProperties(properties).build(); - return new SimpleInitializrMetadataProvider(metadata); - } - } - -} diff --git a/initializr-actuator/src/test/java/io/spring/initializr/actuate/test/RedisRunning.java b/initializr-actuator/src/test/java/io/spring/initializr/actuate/test/RedisRunning.java deleted file mode 100644 index b312136b..00000000 --- a/initializr-actuator/src/test/java/io/spring/initializr/actuate/test/RedisRunning.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2012-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.spring.initializr.actuate.test; - -import org.junit.Assume; -import org.junit.rules.TestWatcher; -import org.junit.runner.Description; -import org.junit.runners.model.Statement; - -import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; - -/** - * A {@link org.junit.rules.TestRule} that validates Redis is available. - * - * @author Dave Syer - */ -public class RedisRunning extends TestWatcher { - - private JedisConnectionFactory connectionFactory; - - @Override - public Statement apply(Statement base, Description description) { - if (connectionFactory == null) { - connectionFactory = new JedisConnectionFactory(); - connectionFactory.afterPropertiesSet(); - } - try { - connectionFactory.getConnection(); - } - catch (Exception ex) { - Assume.assumeNoException("Cannot connect to Redis (so skipping tests)", ex); - } - return super.apply(base, description); - } - -} diff --git a/initializr-service/src/main/resources/application-cloud.yml b/initializr-service/src/main/resources/application-cloud.yml deleted file mode 100644 index 1818dd20..00000000 --- a/initializr-service/src/main/resources/application-cloud.yml +++ /dev/null @@ -1,4 +0,0 @@ -spring: - metrics: - export: - enabled: true \ No newline at end of file