Skip to content

Commit 0724193

Browse files
committed
添加灰度追踪信息的决策工厂类
1 parent e01bcdc commit 0724193

File tree

10 files changed

+177
-18
lines changed

10 files changed

+177
-18
lines changed

spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/zuul/ZuulRequestInterceptor.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,6 @@ public boolean pre(GrayRequest request) {
3939
String name = new StringBuilder().append(GrayHttpTrackInfo.GRAY_TRACK_PARAMETER_PREFIX)
4040
.append(GrayTrackInfo.GRAY_TRACK_SEPARATE)
4141
.append(entry.getKey()).toString();
42-
context.addZuulRequestHeader(GrayHttpTrackInfo.GRAY_TRACK_METHOD, grayTrack.getMethod());
43-
4442
entry.getValue().forEach(v -> {
4543
context.addZuulRequestHeader(name, v);
4644
});

spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayDecisionFactoryConfiguration.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,21 @@ public HttpParameterGrayDecisionFactory httpParameterGrayDecisionFactory() {
3737
public TraceIpGrayDecisionFactory traceIpGrayDecisionFactory() {
3838
return new TraceIpGrayDecisionFactory();
3939
}
40+
41+
@Bean
42+
public HttpTrackParameterGrayDecisionFactory httpTrackParameterGrayDecisionFactory() {
43+
return new HttpTrackParameterGrayDecisionFactory();
44+
}
45+
46+
@Bean
47+
public HttpTrackHeaderGrayDecisionFactory httpTrackHeaderGrayDecisionFactory() {
48+
return new HttpTrackHeaderGrayDecisionFactory();
49+
}
50+
51+
@Bean
52+
public TrackAttributeGrayDecisionFactory trackAttributeGrayDecisionFactory() {
53+
return new TrackAttributeGrayDecisionFactory();
54+
}
4055
}
4156

4257

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
package cn.springcloud.gray.decision.compare;
22

3+
import org.apache.commons.lang3.StringUtils;
4+
5+
import java.util.Collection;
36
import java.util.HashMap;
47
import java.util.Map;
58

69
public class Comparators {
710

811

9-
private static Map<CompareMode, PredicateComparator> collectionStringComparators = new HashMap<>();
12+
private static Map<CompareMode, PredicateComparator<Collection<String>>> collectionStringComparators = new HashMap<>();
13+
private static Map<CompareMode, PredicateComparator<String>> stringStringComparators = new HashMap<>();
1014

1115
static {
1216
collectionStringComparators.put(CompareMode.EQUAL, new CollectionStringEqualComparator());
@@ -15,10 +19,18 @@ public class Comparators {
1519
collectionStringComparators.put(CompareMode.CONTAINS_ALL, new CollectionStringContainAllComparator());
1620
collectionStringComparators.put(CompareMode.NOT_CONTAINS_ALL, new CollectionStringNotContainAllComparator());
1721
collectionStringComparators.put(CompareMode.NOT_CONTAINS_ANY, new CollectionStringNotContainAnyComparator());
22+
23+
stringStringComparators.put(CompareMode.EQUAL, (arg1, arg2) -> StringUtils.equals(arg1, arg2));
24+
stringStringComparators.put(CompareMode.UNEQUAL, (arg1, arg2) -> !StringUtils.equals(arg1, arg2));
1825
}
1926

2027

21-
public static PredicateComparator getCollectionStringComparator(CompareMode mode) {
28+
public static PredicateComparator<Collection<String>> getCollectionStringComparator(CompareMode mode) {
2229
return collectionStringComparators.get(mode);
2330
}
31+
32+
33+
public static PredicateComparator<String> getStringComparator(CompareMode mode) {
34+
return stringStringComparators.get(mode);
35+
}
2436
}

spring-cloud-gray-client/src/main/java/cn/springcloud/gray/decision/factory/HttpHeaderGrayDecisionFactory.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
import cn.springcloud.gray.decision.GrayDecision;
44
import cn.springcloud.gray.decision.compare.Comparators;
5+
import cn.springcloud.gray.decision.compare.PredicateComparator;
56
import cn.springcloud.gray.request.GrayHttpRequest;
6-
import cn.springcloud.gray.request.GrayRequest;
77
import lombok.Getter;
88
import lombok.Setter;
99

@@ -23,9 +23,14 @@ public HttpHeaderGrayDecisionFactory() {
2323
public GrayDecision apply(Config configBean) {
2424
return args -> {
2525
GrayHttpRequest grayRequest = (GrayHttpRequest) args.getGrayRequest();
26+
27+
PredicateComparator<Collection<String>> predicateComparator =
28+
Comparators.getCollectionStringComparator(configBean.getCompareMode());
29+
if (predicateComparator == null) {
30+
return false;
31+
}
2632
Map<String, ? extends Collection<String>> headers = grayRequest.getHeaders();
27-
return Comparators.getCollectionStringComparator(configBean.getCompareMode())
28-
.test(headers.get(configBean.getHeader()), configBean.getValues());
33+
return predicateComparator.test(headers.get(configBean.getHeader()), configBean.getValues());
2934
};
3035
}
3136

spring-cloud-gray-client/src/main/java/cn/springcloud/gray/decision/factory/HttpMethodGrayDecisionFactory.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
package cn.springcloud.gray.decision.factory;
22

33
import cn.springcloud.gray.decision.GrayDecision;
4+
import cn.springcloud.gray.decision.compare.Comparators;
5+
import cn.springcloud.gray.decision.compare.PredicateComparator;
46
import cn.springcloud.gray.request.GrayHttpRequest;
5-
import cn.springcloud.gray.request.GrayRequest;
67
import lombok.Getter;
78
import lombok.Setter;
8-
import org.apache.commons.lang3.StringUtils;
99
import org.springframework.http.HttpMethod;
1010

11-
import java.util.Objects;
12-
1311
public class HttpMethodGrayDecisionFactory extends AbstractGrayDecisionFactory<HttpMethodGrayDecisionFactory.Config> {
1412

1513

@@ -21,14 +19,18 @@ public HttpMethodGrayDecisionFactory() {
2119
public GrayDecision apply(Config configBean) {
2220
return args -> {
2321
GrayHttpRequest grayRequest = (GrayHttpRequest) args.getGrayRequest();
24-
return StringUtils.endsWithIgnoreCase(grayRequest.getMethod(), configBean.getMethod().name());
22+
PredicateComparator<String> predicateComparator = Comparators.getStringComparator(configBean.getCompareMode());
23+
if (predicateComparator == null) {
24+
return false;
25+
}
26+
return predicateComparator.test(grayRequest.getMethod(), configBean.getMethod().name());
2527
};
2628
}
2729

2830

2931
@Setter
3032
@Getter
31-
public static class Config {
33+
public static class Config extends CompareGrayDecisionFactory.CompareConfig {
3234
private HttpMethod method;
3335

3436
}

spring-cloud-gray-client/src/main/java/cn/springcloud/gray/decision/factory/HttpParameterGrayDecisionFactory.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,14 @@
22

33
import cn.springcloud.gray.decision.GrayDecision;
44
import cn.springcloud.gray.decision.compare.Comparators;
5+
import cn.springcloud.gray.decision.compare.PredicateComparator;
56
import cn.springcloud.gray.request.GrayHttpRequest;
6-
import cn.springcloud.gray.request.GrayRequest;
77
import lombok.Getter;
88
import lombok.Setter;
99

1010
import java.util.Collection;
1111
import java.util.Collections;
1212
import java.util.List;
13-
import java.util.Map;
1413

1514
public class HttpParameterGrayDecisionFactory extends CompareGrayDecisionFactory<HttpParameterGrayDecisionFactory.Config> {
1615

@@ -23,8 +22,12 @@ public HttpParameterGrayDecisionFactory() {
2322
public GrayDecision apply(Config configBean) {
2423
return args -> {
2524
GrayHttpRequest grayRequest = (GrayHttpRequest) args.getGrayRequest();
26-
return Comparators.getCollectionStringComparator(configBean.getCompareMode())
27-
.test(grayRequest.getParameters().get(configBean.getName()), configBean.getValues());
25+
PredicateComparator<Collection<String>> predicateComparator =
26+
Comparators.getCollectionStringComparator(configBean.getCompareMode());
27+
if (predicateComparator == null) {
28+
return false;
29+
}
30+
return predicateComparator.test(grayRequest.getParameters().get(configBean.getName()), configBean.getValues());
2831
};
2932
}
3033

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package cn.springcloud.gray.decision.factory;
2+
3+
import cn.springcloud.gray.decision.GrayDecision;
4+
import cn.springcloud.gray.decision.compare.Comparators;
5+
import cn.springcloud.gray.decision.compare.PredicateComparator;
6+
import cn.springcloud.gray.request.GrayHttpTrackInfo;
7+
8+
import java.util.Collection;
9+
import java.util.Map;
10+
11+
public class HttpTrackHeaderGrayDecisionFactory extends CompareGrayDecisionFactory<HttpHeaderGrayDecisionFactory.Config> {
12+
13+
public HttpTrackHeaderGrayDecisionFactory() {
14+
super(HttpHeaderGrayDecisionFactory.Config.class);
15+
}
16+
17+
@Override
18+
public GrayDecision apply(HttpHeaderGrayDecisionFactory.Config configBean) {
19+
return args -> {
20+
GrayHttpTrackInfo grayTrackInfo = (GrayHttpTrackInfo) args.getGrayRequest().getGrayTrackInfo();
21+
if (grayTrackInfo == null) {
22+
return false;
23+
}
24+
25+
Map<String, ? extends Collection<String>> headers = grayTrackInfo.getHeaders();
26+
PredicateComparator<Collection<String>> predicateComparator =
27+
Comparators.getCollectionStringComparator(configBean.getCompareMode());
28+
if (predicateComparator == null) {
29+
return false;
30+
}
31+
return predicateComparator.test(headers.get(configBean.getHeader()), configBean.getValues());
32+
};
33+
}
34+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package cn.springcloud.gray.decision.factory;
2+
3+
import cn.springcloud.gray.decision.GrayDecision;
4+
import cn.springcloud.gray.decision.compare.Comparators;
5+
import cn.springcloud.gray.decision.compare.PredicateComparator;
6+
import cn.springcloud.gray.request.GrayHttpTrackInfo;
7+
8+
import java.util.Collection;
9+
10+
public class HttpTrackParameterGrayDecisionFactory extends CompareGrayDecisionFactory<HttpParameterGrayDecisionFactory.Config> {
11+
12+
13+
public HttpTrackParameterGrayDecisionFactory() {
14+
super(HttpParameterGrayDecisionFactory.Config.class);
15+
}
16+
17+
@Override
18+
public GrayDecision apply(HttpParameterGrayDecisionFactory.Config configBean) {
19+
return args -> {
20+
GrayHttpTrackInfo grayTrackInfo = (GrayHttpTrackInfo) args.getGrayRequest().getGrayTrackInfo();
21+
if (grayTrackInfo == null) {
22+
return false;
23+
}
24+
PredicateComparator<Collection<String>> predicateComparator =
25+
Comparators.getCollectionStringComparator(configBean.getCompareMode());
26+
if (predicateComparator == null) {
27+
return false;
28+
}
29+
return predicateComparator.test(grayTrackInfo.getParameters().get(configBean.getName()), configBean.getValues());
30+
};
31+
}
32+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package cn.springcloud.gray.decision.factory;
2+
3+
import cn.springcloud.gray.decision.GrayDecision;
4+
import cn.springcloud.gray.decision.compare.Comparators;
5+
import cn.springcloud.gray.decision.compare.PredicateComparator;
6+
import cn.springcloud.gray.request.GrayHttpTrackInfo;
7+
import lombok.Getter;
8+
import lombok.Setter;
9+
10+
public class TrackAttributeGrayDecisionFactory extends CompareGrayDecisionFactory<TrackAttributeGrayDecisionFactory.Config> {
11+
12+
public TrackAttributeGrayDecisionFactory() {
13+
super(TrackAttributeGrayDecisionFactory.Config.class);
14+
}
15+
16+
17+
@Override
18+
public GrayDecision apply(Config configBean) {
19+
return args -> {
20+
GrayHttpTrackInfo grayTrackInfo = (GrayHttpTrackInfo) args.getGrayRequest().getGrayTrackInfo();
21+
if (grayTrackInfo == null) {
22+
return false;
23+
}
24+
PredicateComparator<String> predicateComparator = Comparators.getStringComparator(configBean.getCompareMode());
25+
if (predicateComparator == null) {
26+
return false;
27+
}
28+
return predicateComparator.test(grayTrackInfo.getAttribute(configBean.getName()), configBean.getValue());
29+
};
30+
}
31+
32+
@Setter
33+
@Getter
34+
public static class Config extends CompareGrayDecisionFactory.CompareConfig {
35+
private String name;
36+
private String value;
37+
38+
}
39+
40+
}

spring-cloud-gray-client/src/main/java/cn/springcloud/gray/request/GrayTrackInfo.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
import lombok.Getter;
44
import lombok.Setter;
55

6-
import java.util.Collection;
76
import java.util.HashMap;
87
import java.util.Map;
8+
import java.util.Objects;
99

1010
@Getter
1111
public class GrayTrackInfo {
@@ -31,4 +31,22 @@ public void setAttribute(String name, String value) {
3131
attributes.put(name, value);
3232
}
3333

34+
35+
/**
36+
* 生成灰度追踪的名称
37+
*
38+
* @param keys
39+
* @return
40+
*/
41+
public static String generateGrayTrackName(String... keys) {
42+
StringBuilder str = new StringBuilder();
43+
for (int i = 0; i < keys.length; i++) {
44+
str.append(keys[i]);
45+
if (!Objects.equals(i + 1, keys.length)) {
46+
str.append(GRAY_TRACK_SEPARATE);
47+
}
48+
}
49+
return str.toString();
50+
}
51+
3452
}

0 commit comments

Comments
 (0)