From 9fdd7f9fc5eb8fffa3a309faf90ac1c6c664221c Mon Sep 17 00:00:00 2001 From: Vinicius Carvalho Date: Mon, 27 Mar 2017 11:44:21 -0400 Subject: [PATCH] Metrics: rename `applicationName` to `key` Fix #879 --- .../spring-cloud-stream-overview.adoc | 5 +++++ .../metrics/StreamMetricsProperties.java | 12 +++++----- .../metrics/BinderMetricsEmitterTests.java | 22 +++++++++++++++++++ 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/spring-cloud-stream-core-docs/src/main/asciidoc/spring-cloud-stream-overview.adoc b/spring-cloud-stream-core-docs/src/main/asciidoc/spring-cloud-stream-overview.adoc index 8dc2dcae9..1e39fde4c 100644 --- a/spring-cloud-stream-core-docs/src/main/asciidoc/spring-cloud-stream-overview.adoc +++ b/spring-cloud-stream-core-docs/src/main/asciidoc/spring-cloud-stream-overview.adoc @@ -1834,6 +1834,11 @@ By default the module is configured to only send Spring Integration message chan Available properties for customization using the prefix `spring.cloud.stream.metrics`. +key:: + The name of the metric being emitted. Should be an unique value per application. ++ +Default:: `${spring.application.name:${vcap.application.name:${spring.config.name:application}}}` ++ delay-millis:: The period in which metrics will be posted to the channel + diff --git a/spring-cloud-stream-metrics/src/main/java/org/springframework/cloud/stream/config/metrics/StreamMetricsProperties.java b/spring-cloud-stream-metrics/src/main/java/org/springframework/cloud/stream/config/metrics/StreamMetricsProperties.java index f92bf0351..7becb0f37 100644 --- a/spring-cloud-stream-metrics/src/main/java/org/springframework/cloud/stream/config/metrics/StreamMetricsProperties.java +++ b/spring-cloud-stream-metrics/src/main/java/org/springframework/cloud/stream/config/metrics/StreamMetricsProperties.java @@ -29,7 +29,7 @@ public class StreamMetricsProperties { private String prefix; @Value("${spring.application.name:${vcap.application.name:${spring.config.name:application}}}") - private String applicationName; + private String key; private String metricName; @@ -73,12 +73,12 @@ public class StreamMetricsProperties { this.prefix = prefix; } - public String getApplicationName() { - return applicationName; + public String getKey() { + return key; } - public void setApplicationName(String applicationName) { - this.applicationName = applicationName; + public void setKey(String key) { + this.key = key; } public String[] getProperties() { @@ -97,7 +97,7 @@ public class StreamMetricsProperties { } private String resolveMetricName() { - StringBuffer name = new StringBuffer(this.applicationName); + StringBuffer name = new StringBuffer(this.key); if (!StringUtils.isEmpty(this.prefix)) { String prefix = this.prefix; if (prefix.lastIndexOf(".") == -1) { diff --git a/spring-cloud-stream-metrics/src/test/java/org/springframework/cloud/stream/metrics/BinderMetricsEmitterTests.java b/spring-cloud-stream-metrics/src/test/java/org/springframework/cloud/stream/metrics/BinderMetricsEmitterTests.java index 141154a71..e9c34e518 100644 --- a/spring-cloud-stream-metrics/src/test/java/org/springframework/cloud/stream/metrics/BinderMetricsEmitterTests.java +++ b/spring-cloud-stream-metrics/src/test/java/org/springframework/cloud/stream/metrics/BinderMetricsEmitterTests.java @@ -168,6 +168,28 @@ public class BinderMetricsEmitterTests { applicationContext.close(); } + @Test + public void overrideAppName() throws Exception { + ConfigurableApplicationContext applicationContext = SpringApplication.run(BinderExporterApplication.class, + "--server.port=0", "--spring.jmx.enabled=false", "--spring.cloud.stream.metrics.delay-millis=500", + "--spring.application.name=foo", "--spring.cloud.stream.instanceIndex=1", + "--spring.cloud.stream.bindings.streamMetrics.destination=foo", + "--spring.cloud.stream.metrics.key=foobarfoo"); + Emitter emitterSource = applicationContext.getBean(Emitter.class); + MessageCollector collector = applicationContext.getBean(MessageCollector.class); + Message message = collector.forChannel(emitterSource.metrics()).poll(1000, TimeUnit.MILLISECONDS); + Assert.assertNotNull(message); + ObjectMapper mapper = applicationContext.getBean(ObjectMapper.class); + ApplicationMetrics applicationMetrics = mapper.readValue((String) message.getPayload(), + ApplicationMetrics.class); + Assert.assertTrue(contains("integration.channel.errorChannel.errorRate.mean", applicationMetrics.getMetrics())); + Assert.assertFalse(contains("mem", applicationMetrics.getMetrics())); + Assert.assertEquals("foobarfoo", applicationMetrics.getName()); + Assert.assertEquals(1, applicationMetrics.getInstanceIndex()); + Assert.assertTrue(CollectionUtils.isEmpty(applicationMetrics.getProperties())); + applicationContext.close(); + } + private boolean contains(String metric, Collection metrics) { boolean contains = false; for (Metric entry : metrics) {