Skip to content

Commit d03ee28

Browse files
committed
Merge branch '4.x.x-stable' into 5.1.x-stable
Conflicts: pom.xml src/main/java/com/rabbitmq/client/impl/MicrometerMetricsCollector.java
2 parents 32d3392 + 36b1d3c commit d03ee28

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
@@ -57,7 +57,7 @@
5757
<slf4j.version>1.7.25</slf4j.version>
5858
<metrics.version>3.2.4</metrics.version>
5959
<logback.version>1.2.3</logback.version>
60-
<micrometer.version>1.0.0-rc.2</micrometer.version>
60+
<micrometer.version>1.0.0-rc.6</micrometer.version>
6161
<commons-cli.version>1.1</commons-cli.version>
6262
<junit.version>4.12</junit.version>
6363
<awaitility.version>3.0.0</awaitility.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
import java.util.function.Function;
2630

@@ -62,7 +66,11 @@ public MicrometerMetricsCollector(MeterRegistry registry) {
6266
}
6367

6468
public MicrometerMetricsCollector(final MeterRegistry registry, final String prefix) {
65-
this(metric -> metric.create(registry, prefix));
69+
this(metric -> metric.create(registry, prefix, new String[] {}));
70+
}
71+
72+
public MicrometerMetricsCollector(final MeterRegistry registry, final String prefix, final String... tags) {
73+
this(metric -> metric.create(registry, prefix, tags));
6674
}
6775

6876
public MicrometerMetricsCollector(Function<Metrics, Object> metricsCreator) {
@@ -141,42 +149,56 @@ public Counter getRejectedMessages() {
141149
public enum Metrics {
142150
CONNECTIONS {
143151
@Override
144-
Object create(MeterRegistry registry, String prefix) {
145-
return registry.gauge(prefix + ".connections", new AtomicLong(0));
152+
Object create(MeterRegistry registry, String prefix, String... tags) {
153+
return registry.gauge(prefix + ".connections", tags(tags), new AtomicLong(0));
146154
}
147155
},
148156
CHANNELS {
149157
@Override
150-
Object create(MeterRegistry registry, String prefix) {
151-
return registry.gauge(prefix + ".channels", new AtomicLong(0));
158+
Object create(MeterRegistry registry, String prefix, String... tags) {
159+
return registry.gauge(prefix + ".channels", tags(tags), new AtomicLong(0));
152160
}
153161
},
154162
PUBLISHED_MESSAGES {
155163
@Override
156-
Object create(MeterRegistry registry, String prefix) {
157-
return registry.counter(prefix + ".published");
164+
Object create(MeterRegistry registry, String prefix, String... tags) {
165+
return registry.counter(prefix + ".published", tags);
158166
}
159167
},
160168
CONSUMED_MESSAGES {
161169
@Override
162-
Object create(MeterRegistry registry, String prefix) {
163-
return registry.counter(prefix + ".consumed");
170+
Object create(MeterRegistry registry, String prefix, String... tags) {
171+
return registry.counter(prefix + ".consumed", tags);
164172
}
165173
},
166174
ACKNOWLEDGED_MESSAGES {
167175
@Override
168-
Object create(MeterRegistry registry, String prefix) {
169-
return registry.counter(prefix + ".acknowledged");
176+
Object create(MeterRegistry registry, String prefix, String... tags) {
177+
return registry.counter(prefix + ".acknowledged", tags);
170178
}
171179
},
172180
REJECTED_MESSAGES {
173181
@Override
174-
Object create(MeterRegistry registry, String prefix) {
175-
return registry.counter(prefix + ".rejected");
182+
Object create(MeterRegistry registry, String prefix, String... tags) {
183+
return registry.counter(prefix + ".rejected", tags);
176184
}
177185
};
178186

179-
abstract Object create(MeterRegistry registry, String prefix);
187+
Object create(MeterRegistry registry, String prefix) {
188+
return this.create(registry, prefix, new String[] {});
189+
}
190+
191+
abstract Object create(MeterRegistry registry, String prefix, String... tags);
192+
193+
private static Iterable<Tag> tags(String... tagStrings) {
194+
Collection<Tag> tags;
195+
if (tagStrings != null && tagStrings.length > 0) {
196+
tags = Tags.zip(tagStrings);
197+
} else {
198+
tags = Collections.emptyList();
199+
}
200+
return tags;
201+
}
180202
}
181203

182204
}

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+
// info@rabbitmq.com.
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)