Skip to content

Commit 36b1d3c

Browse files
committed
Merge branch '4.4.x-stable' into 4.x.x-stable
Conflicts: release-versions.txt
2 parents 1ef26df + 95c33e7 commit 36b1d3c

File tree

4 files changed

+109
-15
lines changed

4 files changed

+109
-15
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656

5757
<slf4j.version>1.7.21</slf4j.version>
5858
<metrics.version>3.1.2</metrics.version>
59-
<micrometer.version>1.0.0-rc.2</micrometer.version>
59+
<micrometer.version>1.0.0-rc.6</micrometer.version>
6060
<logback.version>1.1.7</logback.version>
6161
<commons-cli.version>1.1</commons-cli.version>
6262
<junit.version>4.12</junit.version>

src/main/java/com/rabbitmq/client/impl/MicrometerMetricsCollector.java

Lines changed: 36 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,11 @@
2020
import com.rabbitmq.client.MetricsCollector;
2121
import io.micrometer.core.instrument.Counter;
2222
import io.micrometer.core.instrument.MeterRegistry;
23+
import io.micrometer.core.instrument.Tag;
24+
import io.micrometer.core.instrument.Tags;
2325

26+
import java.util.Collection;
27+
import java.util.Collections;
2428
import java.util.concurrent.atomic.AtomicLong;
2529

2630
import static com.rabbitmq.client.impl.MicrometerMetricsCollector.Metrics.ACKNOWLEDGED_MESSAGES;
@@ -61,10 +65,14 @@ public MicrometerMetricsCollector(MeterRegistry registry) {
6165
}
6266

6367
public MicrometerMetricsCollector(final MeterRegistry registry, final String prefix) {
68+
this(registry, prefix, new String[] {});
69+
}
70+
71+
public MicrometerMetricsCollector(final MeterRegistry registry, final String prefix, final String ... tags) {
6472
this(new MetricsCreator() {
6573
@Override
6674
public Object create(Metrics metric) {
67-
return metric.create(registry, prefix);
75+
return metric.create(registry, prefix, tags);
6876
}
6977
});
7078
}
@@ -145,42 +153,56 @@ public Counter getRejectedMessages() {
145153
public enum Metrics {
146154
CONNECTIONS {
147155
@Override
148-
Object create(MeterRegistry registry, String prefix) {
149-
return registry.gauge(prefix + ".connections", new AtomicLong(0));
156+
Object create(MeterRegistry registry, String prefix, String... tags) {
157+
return registry.gauge(prefix + ".connections", tags(tags), new AtomicLong(0));
150158
}
151159
},
152160
CHANNELS {
153161
@Override
154-
Object create(MeterRegistry registry, String prefix) {
155-
return registry.gauge(prefix + ".channels", new AtomicLong(0));
162+
Object create(MeterRegistry registry, String prefix, String... tags) {
163+
return registry.gauge(prefix + ".channels", tags(tags), new AtomicLong(0));
156164
}
157165
},
158166
PUBLISHED_MESSAGES {
159167
@Override
160-
Object create(MeterRegistry registry, String prefix) {
161-
return registry.counter(prefix + ".published");
168+
Object create(MeterRegistry registry, String prefix, String... tags) {
169+
return registry.counter(prefix + ".published", tags);
162170
}
163171
},
164172
CONSUMED_MESSAGES {
165173
@Override
166-
Object create(MeterRegistry registry, String prefix) {
167-
return registry.counter(prefix + ".consumed");
174+
Object create(MeterRegistry registry, String prefix, String... tags) {
175+
return registry.counter(prefix + ".consumed", tags);
168176
}
169177
},
170178
ACKNOWLEDGED_MESSAGES {
171179
@Override
172-
Object create(MeterRegistry registry, String prefix) {
173-
return registry.counter(prefix + ".acknowledged");
180+
Object create(MeterRegistry registry, String prefix, String... tags) {
181+
return registry.counter(prefix + ".acknowledged", tags);
174182
}
175183
},
176184
REJECTED_MESSAGES {
177185
@Override
178-
Object create(MeterRegistry registry, String prefix) {
179-
return registry.counter(prefix + ".rejected");
186+
Object create(MeterRegistry registry, String prefix, String... tags) {
187+
return registry.counter(prefix + ".rejected", tags);
180188
}
181189
};
182190

183-
abstract Object create(MeterRegistry registry, String prefix);
191+
Object create(MeterRegistry registry, String prefix) {
192+
return this.create(registry, prefix, new String[] {});
193+
}
194+
195+
abstract Object create(MeterRegistry registry, String prefix, String... tags);
196+
197+
private static Iterable<Tag> tags(String... tagStrings) {
198+
Collection<Tag> tags;
199+
if (tagStrings != null && tagStrings.length > 0) {
200+
tags = Tags.zip(tagStrings);
201+
} else {
202+
tags = Collections.emptyList();
203+
}
204+
return tags;
205+
}
184206
}
185207

186208
public interface MetricsCreator {

src/test/java/com/rabbitmq/client/test/ClientTests.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
SharedThreadPoolTest.class,
4545
DnsRecordIpAddressResolverTests.class,
4646
MetricsCollectorTest.class,
47+
MicrometerMetricsCollectorTest.class,
4748
DnsSrvRecordAddressResolverTest.class,
4849
JavaNioTest.class,
4950
ConnectionFactoryTest.class,
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
// Copyright (c) 2018-Present Pivotal Software, Inc. All rights reserved.
2+
//
3+
// This software, the RabbitMQ Java client library, is triple-licensed under the
4+
// Mozilla Public License 1.1 ("MPL"), the GNU General Public License version 2
5+
// ("GPL") and the Apache License version 2 ("ASL"). For the MPL, please see
6+
// LICENSE-MPL-RabbitMQ. For the GPL, please see LICENSE-GPL2. For the ASL,
7+
// please see LICENSE-APACHE2.
8+
//
9+
// This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND,
10+
// either express or implied. See the LICENSE file for specific language governing
11+
// rights and limitations of this software.
12+
//
13+
// If you have any questions regarding licensing, please contact us at
14+
15+
16+
package com.rabbitmq.client.test;
17+
18+
import com.rabbitmq.client.impl.MicrometerMetricsCollector;
19+
import io.micrometer.core.instrument.Meter;
20+
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
21+
import org.junit.Before;
22+
import org.junit.Test;
23+
24+
import java.util.Iterator;
25+
26+
import static org.hamcrest.Matchers.is;
27+
import static org.junit.Assert.assertThat;
28+
29+
/**
30+
*
31+
*/
32+
public class MicrometerMetricsCollectorTest {
33+
34+
SimpleMeterRegistry registry;
35+
36+
MicrometerMetricsCollector collector;
37+
38+
@Before
39+
public void init() {
40+
registry = new SimpleMeterRegistry();
41+
}
42+
43+
@Test
44+
public void noTag() {
45+
collector = new MicrometerMetricsCollector(registry, "rabbitmq");
46+
for (Meter meter : registry.getMeters()) {
47+
assertThat(size(meter.getId().getTags()), is(0));
48+
}
49+
}
50+
51+
@Test
52+
public void tags() {
53+
collector = new MicrometerMetricsCollector(registry, "rabbitmq", "uri", "/api/users");
54+
for (Meter meter : registry.getMeters()) {
55+
assertThat(size(meter.getId().getTags()), is(1));
56+
}
57+
}
58+
59+
@Test(expected = IllegalArgumentException.class)
60+
public void tagsMustBeKeyValuePairs() {
61+
collector = new MicrometerMetricsCollector(registry, "rabbitmq", "uri");
62+
}
63+
64+
static int size(Iterable<?> iterable) {
65+
Iterator<?> iterator = iterable.iterator();
66+
int i = 0;
67+
for ( ; iterator.hasNext() ; ++i ) iterator.next();
68+
return i;
69+
}
70+
71+
}

0 commit comments

Comments
 (0)