Skip to content

Commit 6d2f870

Browse files
RomehRobWin
authored andcommitted
Issue ReactiveX#509: Added Spring support for custom global tags (ReactiveX#749)
1 parent 98ac127 commit 6d2f870

File tree

36 files changed

+575
-266
lines changed

36 files changed

+575
-266
lines changed

resilience4j-bulkhead/src/main/java/io/github/resilience4j/bulkhead/BulkheadRegistry.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,22 @@ static BulkheadRegistry of(Map<String, BulkheadConfig> configs,
124124
return new InMemoryBulkheadRegistry(configs, registryEventConsumer);
125125
}
126126

127+
/**
128+
* Creates a BulkheadRegistry with a Map of shared Bulkhead configurations and a Bulkhead
129+
* registry event consumer.
130+
*
131+
* @param configs a Map of shared Bulkhead configurations.
132+
* @param registryEventConsumer a Bulkhead registry event consumer.
133+
* @param tags default tags to add to the registry
134+
* @return a BulkheadRegistry with a Map of shared Bulkhead configurations and a Bulkhead
135+
* registry event consumer.
136+
*/
137+
static BulkheadRegistry of(Map<String, BulkheadConfig> configs,
138+
RegistryEventConsumer<Bulkhead> registryEventConsumer,
139+
io.vavr.collection.Map<String, String> tags) {
140+
return new InMemoryBulkheadRegistry(configs, registryEventConsumer, tags);
141+
}
142+
127143
/**
128144
* Creates a BulkheadRegistry with a Map of shared Bulkhead configurations and a list of
129145
* Bulkhead registry event consumers.

resilience4j-bulkhead/src/test/java/io/github/resilience4j/bulkhead/BulkheadRegistryTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import io.github.resilience4j.core.registry.EntryRemovedEvent;
2525
import io.github.resilience4j.core.registry.EntryReplacedEvent;
2626
import io.github.resilience4j.core.registry.RegistryEventConsumer;
27+
import io.vavr.Tuple;
2728
import org.assertj.core.api.Assertions;
2829
import org.junit.Before;
2930
import org.junit.Test;
@@ -54,6 +55,13 @@ public void setUp() {
5455
.build();
5556
}
5657

58+
@Test
59+
public void shouldInitRegistryTags() {
60+
BulkheadRegistry registry = BulkheadRegistry.of(config,io.vavr.collection.HashMap.of("Tag1Key","Tag1Value"));
61+
assertThat(registry.getTags()).isNotEmpty();
62+
assertThat(registry.getTags()).containsOnly(Tuple.of("Tag1Key","Tag1Value"));
63+
}
64+
5765
@Test
5866
public void shouldReturnCustomConfig() {
5967
BulkheadRegistry registry = BulkheadRegistry.of(config);

resilience4j-circuitbreaker/src/main/java/io/github/resilience4j/circuitbreaker/CircuitBreakerRegistry.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,23 @@ static CircuitBreakerRegistry of(Map<String, CircuitBreakerConfig> configs,
111111
return new InMemoryCircuitBreakerRegistry(configs, registryEventConsumer);
112112
}
113113

114+
/**
115+
* Creates a CircuitBreakerRegistry with a Map of shared CircuitBreaker configurations and a
116+
* CircuitBreaker registry event consumer.
117+
*
118+
* @param configs a Map of shared CircuitBreaker configurations.
119+
* @param registryEventConsumer a CircuitBreaker registry event consumer.
120+
* @param tags default tags to add to the registry
121+
* @return a CircuitBreakerRegistry with a Map of shared CircuitBreaker configurations and a
122+
* CircuitBreaker registry event consumer.
123+
*/
124+
static CircuitBreakerRegistry of(Map<String, CircuitBreakerConfig> configs,
125+
RegistryEventConsumer<CircuitBreaker> registryEventConsumer,
126+
io.vavr.collection.Map<String, String> tags) {
127+
return new InMemoryCircuitBreakerRegistry(configs, registryEventConsumer, tags);
128+
}
129+
130+
114131
/**
115132
* Creates a CircuitBreakerRegistry with a Map of shared CircuitBreaker configurations and a
116133
* list of CircuitBreaker registry event consumers.

resilience4j-circuitbreaker/src/main/java/io/github/resilience4j/circuitbreaker/internal/InMemoryCircuitBreakerRegistry.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,14 @@ public InMemoryCircuitBreakerRegistry(Map<String, CircuitBreakerConfig> configs,
6868
this.configurations.putAll(configs);
6969
}
7070

71+
public InMemoryCircuitBreakerRegistry(Map<String, CircuitBreakerConfig> configs,
72+
RegistryEventConsumer<CircuitBreaker> registryEventConsumer,
73+
io.vavr.collection.Map<String, String> tags) {
74+
this(configs.getOrDefault(DEFAULT_CONFIG, CircuitBreakerConfig.ofDefaults()),
75+
registryEventConsumer, tags);
76+
this.configurations.putAll(configs);
77+
}
78+
7179
public InMemoryCircuitBreakerRegistry(Map<String, CircuitBreakerConfig> configs,
7280
List<RegistryEventConsumer<CircuitBreaker>> registryEventConsumers) {
7381
this(configs.getOrDefault(DEFAULT_CONFIG, CircuitBreakerConfig.ofDefaults()),
@@ -100,6 +108,12 @@ public InMemoryCircuitBreakerRegistry(CircuitBreakerConfig defaultConfig,
100108
super(defaultConfig, registryEventConsumer);
101109
}
102110

111+
public InMemoryCircuitBreakerRegistry(CircuitBreakerConfig defaultConfig,
112+
RegistryEventConsumer<CircuitBreaker> registryEventConsumer,
113+
io.vavr.collection.Map<String, String> tags) {
114+
super(defaultConfig, registryEventConsumer, tags);
115+
}
116+
103117
public InMemoryCircuitBreakerRegistry(CircuitBreakerConfig defaultConfig,
104118
List<RegistryEventConsumer<CircuitBreaker>> registryEventConsumers) {
105119
super(defaultConfig, registryEventConsumers);

resilience4j-circuitbreaker/src/test/java/io/github/resilience4j/circuitbreaker/CircuitBreakerRegistryTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import io.github.resilience4j.core.registry.EntryRemovedEvent;
2525
import io.github.resilience4j.core.registry.EntryReplacedEvent;
2626
import io.github.resilience4j.core.registry.RegistryEventConsumer;
27+
import io.vavr.Tuple;
2728
import org.junit.Test;
2829

2930
import java.util.*;
@@ -43,6 +44,16 @@ private static Optional<EventProcessor<?>> getEventProcessor(
4344
return Optional.empty();
4445
}
4546

47+
@Test
48+
public void shouldInitRegistryTags() {
49+
CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.ofDefaults();
50+
Map<String, CircuitBreakerConfig> circuitBreakerConfigs = Collections
51+
.singletonMap("default", circuitBreakerConfig);
52+
CircuitBreakerRegistry registry = CircuitBreakerRegistry.of(circuitBreakerConfigs,new NoOpCircuitBreakerEventConsumer(),io.vavr.collection.HashMap.of("Tag1Key","Tag1Value"));
53+
assertThat(registry.getTags()).isNotEmpty();
54+
assertThat(registry.getTags()).containsOnly(Tuple.of("Tag1Key","Tag1Value"));
55+
}
56+
4657
@Test
4758
public void shouldReturnTheCorrectName() {
4859
CircuitBreakerRegistry circuitBreakerRegistry = CircuitBreakerRegistry.ofDefaults();

resilience4j-core/src/main/java/io/github/resilience4j/core/Registry.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import io.github.resilience4j.core.registry.EntryRemovedEvent;
2323
import io.github.resilience4j.core.registry.EntryReplacedEvent;
2424
import io.github.resilience4j.core.registry.RegistryEvent;
25+
import io.vavr.collection.Map;
2526

2627
import java.util.Optional;
2728

@@ -75,6 +76,11 @@ public interface Registry<E, C> {
7576
*/
7677
C getDefaultConfig();
7778

79+
/**
80+
* @return global configured registry tags
81+
*/
82+
Map<String, String> getTags();
83+
7884
/**
7985
* Returns an EventPublisher which can be used to register event consumers.
8086
*

resilience4j-core/src/main/java/io/github/resilience4j/core/registry/AbstractRegistry.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,11 @@
2424
import io.vavr.collection.HashMap;
2525
import io.vavr.collection.Map;
2626

27-
import java.util.*;
27+
import java.util.ArrayList;
28+
import java.util.Collections;
29+
import java.util.List;
30+
import java.util.Objects;
31+
import java.util.Optional;
2832
import java.util.concurrent.ConcurrentHashMap;
2933
import java.util.concurrent.ConcurrentMap;
3034
import java.util.function.Supplier;
@@ -132,6 +136,11 @@ public C getDefaultConfig() {
132136
return configurations.get(DEFAULT_CONFIG);
133137
}
134138

139+
@Override
140+
public Map<String, String> getTags() {
141+
return registryTags;
142+
}
143+
135144
@Override
136145
public EventPublisher<E> getEventPublisher() {
137146
return eventProcessor;

resilience4j-core/src/test/java/io/github/resilience4j/core/registry/AbstractRegistryTest.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.github.resilience4j.core.registry;
22

3+
import io.vavr.Tuple;
4+
import io.vavr.collection.Map;
35
import org.junit.Test;
46

57
import java.util.ArrayList;
@@ -13,6 +15,14 @@
1315

1416
public class AbstractRegistryTest {
1517

18+
@Test
19+
public void shouldInitRegistryTags(){
20+
TestRegistry testRegistry = new TestRegistry(io.vavr.collection.HashMap.of("Tag1","Tag1Value"));
21+
assertThat(testRegistry.getTags()).isNotEmpty();
22+
assertThat(testRegistry.getTags()).containsOnly(Tuple.of("Tag1","Tag1Value"));
23+
}
24+
25+
1626
@Test
1727
public void shouldContainDefaultAndCustomConfiguration() {
1828
TestRegistry testRegistry = new TestRegistry();
@@ -150,6 +160,11 @@ static class TestRegistry extends AbstractRegistry<String, String> {
150160
super("default", registryEventConsumer);
151161
this.configurations.put(DEFAULT_CONFIG, "default");
152162
}
163+
164+
TestRegistry(Map<String,String> tags) {
165+
super("default", tags);
166+
this.configurations.put(DEFAULT_CONFIG, "default");
167+
}
153168
}
154169

155170
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*
2+
* Copyright Mahmoud Romeh
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package io.github.resilience4j.common;
17+
18+
import java.util.HashMap;
19+
import java.util.Map;
20+
21+
/**
22+
* common properties between different spring resilience4j supported types
23+
*/
24+
public class CommonProperties {
25+
26+
/**
27+
* The Optional configured global registry tags if any that can be used with the exported
28+
* metrics
29+
*/
30+
Map<String, String> tags = new HashMap<>();
31+
32+
/**
33+
* @return the Optional configured registry global tags if any that can be used with the
34+
* exported metrics
35+
*/
36+
public Map<String, String> getTags() {
37+
return tags;
38+
}
39+
40+
/**
41+
* @param tags the optional configured tags values into registry
42+
*/
43+
public void setTags(Map<String, String> tags) {
44+
this.tags = tags;
45+
}
46+
}

resilience4j-framework-common/src/main/java/io/github/resilience4j/common/bulkhead/configuration/BulkheadConfigurationProperties.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2019 Dan Maas
2+
* Copyright 2019 Dan Maas , Mahmoud Romeh
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
1616
package io.github.resilience4j.common.bulkhead.configuration;
1717

1818
import io.github.resilience4j.bulkhead.BulkheadConfig;
19+
import io.github.resilience4j.common.CommonProperties;
1920
import io.github.resilience4j.common.utils.ConfigUtils;
2021
import io.github.resilience4j.core.ConfigurationNotFoundException;
2122
import io.github.resilience4j.core.StringUtils;
@@ -26,7 +27,7 @@
2627
import java.util.Map;
2728
import java.util.Objects;
2829

29-
public class BulkheadConfigurationProperties {
30+
public class BulkheadConfigurationProperties extends CommonProperties {
3031

3132
private Map<String, InstanceProperties> instances = new HashMap<>();
3233
private Map<String, InstanceProperties> configs = new HashMap<>();

0 commit comments

Comments
 (0)