Skip to content

Commit c3ee4ea

Browse files
author
Roman Shulnyaev
committed
Merge remote-tracking branch 'origin/release_2-1-1' into release_3-0
# Conflicts: # README.md # metrics-facade-base/pom.xml # metrics-facade-benchmark/pom.xml # metrics-facade-default-impl/pom.xml # metrics-facade-dropwizard-to-prometheus/pom.xml # metrics-facade-dropwizard/pom.xml # metrics-facade-prometheus/pom.xml # metrics-facade-samples/pom.xml # metrics-facade-shared-tests/pom.xml # metrics-facade-spring/metrics-facade-prometheus-spring-boot-autoconfigure/pom.xml # metrics-facade-spring/metrics-facade-prometheus-spring-boot-starter/pom.xml # metrics-facade-spring/metrics-facade-spring-boot-autoconfigure/pom.xml # metrics-facade-spring/metrics-facade-spring-boot-sample-app/pom.xml # metrics-facade-spring/metrics-facade-spring-boot-starter/pom.xml # metrics-facade-spring/micrometer-registry-metrics-facade/pom.xml # metrics-facade-spring/pom.xml # metrics-facade-test-support/pom.xml # pom.xml
2 parents 712dbd5 + e1e3754 commit c3ee4ea

File tree

15 files changed

+637
-160
lines changed

15 files changed

+637
-160
lines changed

metrics-facade-base/src/main/java/com/ringcentral/platform/metrics/infoProviders/ConcurrentMaskTreeMetricNamedInfoProvider.java

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,44 @@
11
package com.ringcentral.platform.metrics.infoProviders;
22

3-
import java.util.List;
4-
import java.util.concurrent.locks.*;
53
import com.ringcentral.platform.metrics.names.MetricNamed;
64
import com.ringcentral.platform.metrics.predicates.MetricNamedPredicate;
75

6+
import java.util.List;
7+
import java.util.concurrent.locks.ReadWriteLock;
8+
import java.util.concurrent.locks.ReentrantReadWriteLock;
9+
import java.util.function.Predicate;
10+
811
public class ConcurrentMaskTreeMetricNamedInfoProvider<I>
912
extends MaskTreeMetricNamedInfoProvider<I>
1013
implements ConcurrentMetricNamedInfoProvider<I> {
1114

1215
private final ReadWriteLock rwLock = new ReentrantReadWriteLock();
1316

1417
@Override
15-
public MaskTreeMetricNamedInfoProvider<I> addInfo(MetricNamedPredicate predicate, I info) {
18+
public MaskTreeMetricNamedInfoProvider<I> addInfo(String key, MetricNamedPredicate predicate, I info) {
19+
try {
20+
rwLock.writeLock().lock();
21+
return super.addInfo(key, predicate, info);
22+
} finally {
23+
rwLock.writeLock().unlock();
24+
}
25+
}
26+
27+
@Override
28+
public MaskTreeMetricNamedInfoProvider<I> removeInfo(String key) {
29+
try {
30+
rwLock.writeLock().lock();
31+
return super.removeInfo(key);
32+
} finally {
33+
rwLock.writeLock().unlock();
34+
}
35+
}
36+
37+
@Override
38+
public PredicativeMetricNamedInfoProvider<I> removeInfos(Predicate<String> keyPredicate) {
1639
try {
1740
rwLock.writeLock().lock();
18-
return super.addInfo(predicate, info);
41+
return super.removeInfos(keyPredicate);
1942
} finally {
2043
rwLock.writeLock().unlock();
2144
}
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,34 @@
11
package com.ringcentral.platform.metrics.infoProviders;
22

3+
import com.ringcentral.platform.metrics.predicates.MetricNamedPredicate;
4+
5+
import java.util.HashMap;
36
import java.util.concurrent.CopyOnWriteArrayList;
7+
import java.util.function.Predicate;
48

59
public class DefaultConcurrentMetricNamedInfoProvider<I>
610
extends DefaultMetricNamedInfoProvider<I>
711
implements ConcurrentMetricNamedInfoProvider<I> {
812

913
public DefaultConcurrentMetricNamedInfoProvider() {
10-
super(new CopyOnWriteArrayList<>());
14+
super(new CopyOnWriteArrayList<>(), new HashMap<>());
15+
}
16+
17+
@Override
18+
public synchronized DefaultConcurrentMetricNamedInfoProvider<I> addInfo(String key, MetricNamedPredicate predicate, I info) {
19+
super.addInfo(key, predicate, info);
20+
return this;
21+
}
22+
23+
@Override
24+
public synchronized DefaultConcurrentMetricNamedInfoProvider<I> removeInfo(String key) {
25+
super.removeInfo(key);
26+
return this;
27+
}
28+
29+
@Override
30+
public synchronized DefaultConcurrentMetricNamedInfoProvider<I> removeInfos(Predicate<String> keyPredicate) {
31+
super.removeInfos(keyPredicate);
32+
return this;
1133
}
1234
}

metrics-facade-base/src/main/java/com/ringcentral/platform/metrics/infoProviders/DefaultMetricNamedInfoProvider.java

Lines changed: 51 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,67 @@
11
package com.ringcentral.platform.metrics.infoProviders;
22

3-
import java.util.*;
43
import com.ringcentral.platform.metrics.names.MetricNamed;
54
import com.ringcentral.platform.metrics.predicates.MetricNamedPredicate;
6-
import static java.util.stream.Collectors.*;
5+
6+
import java.util.ArrayList;
7+
import java.util.HashMap;
8+
import java.util.List;
9+
import java.util.Map;
10+
import java.util.function.Predicate;
11+
12+
import static java.util.Objects.requireNonNull;
13+
import static java.util.stream.Collectors.toList;
714

815
public class DefaultMetricNamedInfoProvider<I> implements PredicativeMetricNamedInfoProvider<I> {
916

1017
private final List<Entry<I>> entries;
18+
private final Map<String, Entry<I>> keyToEntry;
1119

1220
public DefaultMetricNamedInfoProvider() {
13-
this(new ArrayList<>());
21+
this(new ArrayList<>(), new HashMap<>());
1422
}
1523

16-
protected DefaultMetricNamedInfoProvider(List<Entry<I>> entries) {
17-
this.entries = entries;
24+
protected DefaultMetricNamedInfoProvider(List<Entry<I>> entries, Map<String, Entry<I>> keyToEntry) {
25+
this.entries = requireNonNull(entries);
26+
this.keyToEntry = requireNonNull(keyToEntry);
1827
}
1928

2029
@Override
2130
public DefaultMetricNamedInfoProvider<I> addInfo(MetricNamedPredicate predicate, I info) {
22-
entries.add(new Entry<>(predicate, info));
31+
return addInfo(null, predicate, info);
32+
}
33+
34+
@Override
35+
public DefaultMetricNamedInfoProvider<I> addInfo(String key, MetricNamedPredicate predicate, I info) {
36+
Entry<I> entry = new Entry<>(key, predicate, info);
37+
38+
if (key != null) {
39+
if (keyToEntry.containsKey(key)) {
40+
throw new IllegalArgumentException("Duplicate key " + key);
41+
}
42+
43+
keyToEntry.put(key, entry);
44+
}
45+
46+
entries.add(entry);
47+
return this;
48+
}
49+
50+
@Override
51+
public DefaultMetricNamedInfoProvider<I> removeInfo(String key) {
52+
Entry<I> entry = keyToEntry.remove(key);
53+
54+
if (entry != null) {
55+
entries.remove(entry);
56+
}
57+
58+
return this;
59+
}
60+
61+
@Override
62+
public PredicativeMetricNamedInfoProvider<I> removeInfos(Predicate<String> keyPredicate) {
63+
keyToEntry.keySet().removeIf(keyPredicate);
64+
entries.removeIf(e -> keyPredicate.test(e.key));
2365
return this;
2466
}
2567

@@ -30,10 +72,12 @@ public List<I> infosFor(MetricNamed named) {
3072

3173
private static class Entry<I> {
3274

75+
final String key;
3376
final MetricNamedPredicate predicate;
3477
final I info;
3578

36-
Entry(MetricNamedPredicate predicate, I info) {
79+
Entry(String key, MetricNamedPredicate predicate, I info) {
80+
this.key = key;
3781
this.predicate = predicate;
3882
this.info = info;
3983
}

0 commit comments

Comments
 (0)