Skip to content

Commit ac42029

Browse files
add inclusion rule apis (#147)
* add inclusio rule apis * fix error message
1 parent e98681f commit ac42029

32 files changed

+861
-2
lines changed

hypertrace-graphql-platform/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,6 @@ dependencies {
1313
api("org.hypertrace.config.service:spaces-config-service-api:0.1.1")
1414
api("org.hypertrace.config.service:labels-config-service-api:0.1.15")
1515
api("org.hypertrace.config.service:label-application-rule-config-service-api:0.1.16")
16-
api("org.hypertrace.config.service:span-processing-config-service-api:0.1.27")
16+
api("org.hypertrace.config.service:span-processing-config-service-api:0.1.34")
1717
}
1818
}

hypertrace-graphql-span-processing-schema/src/main/java/org/hypertrace/graphql/spanprocessing/dao/ConfigServiceSpanProcessingRequestConverter.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,32 @@
88
import org.hypertrace.graphql.spanprocessing.request.mutation.ExcludeSpanCreateRuleRequest;
99
import org.hypertrace.graphql.spanprocessing.request.mutation.ExcludeSpanDeleteRuleRequest;
1010
import org.hypertrace.graphql.spanprocessing.request.mutation.ExcludeSpanUpdateRuleRequest;
11+
import org.hypertrace.graphql.spanprocessing.request.mutation.IncludeSpanCreateRuleRequest;
12+
import org.hypertrace.graphql.spanprocessing.request.mutation.IncludeSpanDeleteRuleRequest;
13+
import org.hypertrace.graphql.spanprocessing.request.mutation.IncludeSpanUpdateRuleRequest;
1114
import org.hypertrace.graphql.spanprocessing.schema.mutation.ApiNamingRuleCreate;
1215
import org.hypertrace.graphql.spanprocessing.schema.mutation.ApiNamingRuleUpdate;
1316
import org.hypertrace.graphql.spanprocessing.schema.mutation.ExcludeSpanRuleCreate;
1417
import org.hypertrace.graphql.spanprocessing.schema.mutation.ExcludeSpanRuleUpdate;
18+
import org.hypertrace.graphql.spanprocessing.schema.mutation.IncludeSpanRuleCreate;
19+
import org.hypertrace.graphql.spanprocessing.schema.mutation.IncludeSpanRuleUpdate;
1520
import org.hypertrace.span.processing.config.service.v1.ApiNamingRuleConfig;
1621
import org.hypertrace.span.processing.config.service.v1.ApiNamingRuleInfo;
1722
import org.hypertrace.span.processing.config.service.v1.CreateApiNamingRuleRequest;
1823
import org.hypertrace.span.processing.config.service.v1.CreateExcludeSpanRuleRequest;
24+
import org.hypertrace.span.processing.config.service.v1.CreateIncludeSpanRuleRequest;
1925
import org.hypertrace.span.processing.config.service.v1.DeleteApiNamingRuleRequest;
2026
import org.hypertrace.span.processing.config.service.v1.DeleteExcludeSpanRuleRequest;
27+
import org.hypertrace.span.processing.config.service.v1.DeleteIncludeSpanRuleRequest;
2128
import org.hypertrace.span.processing.config.service.v1.ExcludeSpanRuleInfo;
29+
import org.hypertrace.span.processing.config.service.v1.IncludeSpanRuleInfo;
2230
import org.hypertrace.span.processing.config.service.v1.SegmentMatchingBasedConfig;
2331
import org.hypertrace.span.processing.config.service.v1.UpdateApiNamingRule;
2432
import org.hypertrace.span.processing.config.service.v1.UpdateApiNamingRuleRequest;
2533
import org.hypertrace.span.processing.config.service.v1.UpdateExcludeSpanRule;
2634
import org.hypertrace.span.processing.config.service.v1.UpdateExcludeSpanRuleRequest;
35+
import org.hypertrace.span.processing.config.service.v1.UpdateIncludeSpanRule;
36+
import org.hypertrace.span.processing.config.service.v1.UpdateIncludeSpanRuleRequest;
2737

2838
public class ConfigServiceSpanProcessingRequestConverter {
2939

@@ -67,6 +77,39 @@ DeleteExcludeSpanRuleRequest convert(ExcludeSpanDeleteRuleRequest request) {
6777
return DeleteExcludeSpanRuleRequest.newBuilder().setId(request.id()).build();
6878
}
6979

80+
CreateIncludeSpanRuleRequest convert(IncludeSpanCreateRuleRequest request) {
81+
return CreateIncludeSpanRuleRequest.newBuilder()
82+
.setRuleInfo(convertInput(request.createInput()))
83+
.build();
84+
}
85+
86+
private IncludeSpanRuleInfo convertInput(IncludeSpanRuleCreate includeSpanRuleCreate) {
87+
return IncludeSpanRuleInfo.newBuilder()
88+
.setName(includeSpanRuleCreate.name())
89+
.setFilter(this.filterConverter.convert(includeSpanRuleCreate.spanFilter()))
90+
.setDisabled(includeSpanRuleCreate.disabled())
91+
.build();
92+
}
93+
94+
UpdateIncludeSpanRuleRequest convert(IncludeSpanUpdateRuleRequest request) {
95+
return UpdateIncludeSpanRuleRequest.newBuilder()
96+
.setRule(convertInput(request.updateInput()))
97+
.build();
98+
}
99+
100+
private UpdateIncludeSpanRule convertInput(IncludeSpanRuleUpdate includeSpanRuleUpdate) {
101+
return UpdateIncludeSpanRule.newBuilder()
102+
.setId(includeSpanRuleUpdate.id())
103+
.setName(includeSpanRuleUpdate.name())
104+
.setFilter(this.filterConverter.convert(includeSpanRuleUpdate.spanFilter()))
105+
.setDisabled(includeSpanRuleUpdate.disabled())
106+
.build();
107+
}
108+
109+
DeleteIncludeSpanRuleRequest convert(IncludeSpanDeleteRuleRequest request) {
110+
return DeleteIncludeSpanRuleRequest.newBuilder().setId(request.id()).build();
111+
}
112+
70113
CreateApiNamingRuleRequest convert(ApiNamingCreateRuleRequest request) {
71114
return CreateApiNamingRuleRequest.newBuilder()
72115
.setRuleInfo(convertInput(request.createInput()))

hypertrace-graphql-span-processing-schema/src/main/java/org/hypertrace/graphql/spanprocessing/dao/ConfigServiceSpanProcessingResponseConverter.java

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,22 @@
1111
import org.hypertrace.graphql.spanprocessing.schema.mutation.DeleteSpanProcessingRuleResponse;
1212
import org.hypertrace.graphql.spanprocessing.schema.query.ApiNamingRuleResultSet;
1313
import org.hypertrace.graphql.spanprocessing.schema.query.ExcludeSpanRuleResultSet;
14+
import org.hypertrace.graphql.spanprocessing.schema.query.IncludeSpanRuleResultSet;
1415
import org.hypertrace.graphql.spanprocessing.schema.rule.ApiNamingRule;
1516
import org.hypertrace.graphql.spanprocessing.schema.rule.ExcludeSpanRule;
17+
import org.hypertrace.graphql.spanprocessing.schema.rule.IncludeSpanRule;
1618
import org.hypertrace.span.processing.config.service.v1.CreateApiNamingRuleResponse;
1719
import org.hypertrace.span.processing.config.service.v1.CreateExcludeSpanRuleResponse;
20+
import org.hypertrace.span.processing.config.service.v1.CreateIncludeSpanRuleResponse;
1821
import org.hypertrace.span.processing.config.service.v1.DeleteApiNamingRuleResponse;
1922
import org.hypertrace.span.processing.config.service.v1.DeleteExcludeSpanRuleResponse;
23+
import org.hypertrace.span.processing.config.service.v1.DeleteIncludeSpanRuleResponse;
2024
import org.hypertrace.span.processing.config.service.v1.GetAllApiNamingRulesResponse;
2125
import org.hypertrace.span.processing.config.service.v1.GetAllExcludeSpanRulesResponse;
26+
import org.hypertrace.span.processing.config.service.v1.GetAllIncludeSpanRulesResponse;
2227
import org.hypertrace.span.processing.config.service.v1.UpdateApiNamingRuleResponse;
2328
import org.hypertrace.span.processing.config.service.v1.UpdateExcludeSpanRuleResponse;
29+
import org.hypertrace.span.processing.config.service.v1.UpdateIncludeSpanRuleResponse;
2430

2531
@Slf4j
2632
public class ConfigServiceSpanProcessingResponseConverter {
@@ -37,6 +43,10 @@ Single<ExcludeSpanRuleResultSet> convert(GetAllExcludeSpanRulesResponse response
3743
return this.convertExcludeSpanRuleResultSet(response.getRuleDetailsList());
3844
}
3945

46+
Single<IncludeSpanRuleResultSet> convert(GetAllIncludeSpanRulesResponse response) {
47+
return this.convertIncludeSpanRuleResultSet(response.getRuleDetailsList());
48+
}
49+
4050
Single<ApiNamingRuleResultSet> convert(GetAllApiNamingRulesResponse response) {
4151
return this.convertApiNamingRuleResultSet(response.getRuleDetailsList());
4252
}
@@ -49,11 +59,19 @@ private Maybe<ExcludeSpanRule> convertOrDrop(
4959
.onErrorComplete();
5060
}
5161

62+
private Maybe<IncludeSpanRule> convertOrDrop(
63+
org.hypertrace.span.processing.config.service.v1.IncludeSpanRuleDetails ruleDetails) {
64+
return this.ruleConverter
65+
.convert(ruleDetails)
66+
.doOnError(error -> log.error("Error converting IncludeSpanRule", error))
67+
.onErrorComplete();
68+
}
69+
5270
private Maybe<ApiNamingRule> convertOrDrop(
5371
org.hypertrace.span.processing.config.service.v1.ApiNamingRuleDetails ruleDetails) {
5472
return this.ruleConverter
5573
.convert(ruleDetails)
56-
.doOnError(error -> log.error("Error converting ExcludeSpanRule", error))
74+
.doOnError(error -> log.error("Error converting ApiNamingRule", error))
5775
.onErrorComplete();
5876
}
5977

@@ -65,6 +83,14 @@ private Single<ExcludeSpanRuleResultSet> convertExcludeSpanRuleResultSet(
6583
.map(ConvertedExcludeSpanRuleResultSet::new);
6684
}
6785

86+
private Single<IncludeSpanRuleResultSet> convertIncludeSpanRuleResultSet(
87+
List<org.hypertrace.span.processing.config.service.v1.IncludeSpanRuleDetails> ruleDetails) {
88+
return Observable.fromIterable(ruleDetails)
89+
.concatMapMaybe(this::convertOrDrop)
90+
.toList()
91+
.map(ConvertedIncludeSpanRuleResultSet::new);
92+
}
93+
6894
private Single<ApiNamingRuleResultSet> convertApiNamingRuleResultSet(
6995
List<org.hypertrace.span.processing.config.service.v1.ApiNamingRuleDetails> ruleDetails) {
7096
return Observable.fromIterable(ruleDetails)
@@ -85,6 +111,18 @@ Single<DeleteSpanProcessingRuleResponse> convert(DeleteExcludeSpanRuleResponse r
85111
return Single.just(new DefaultDeleteSpanProcessingRuleResponse(true));
86112
}
87113

114+
Single<IncludeSpanRule> convert(CreateIncludeSpanRuleResponse response) {
115+
return this.ruleConverter.convert(response.getRuleDetails());
116+
}
117+
118+
Single<IncludeSpanRule> convert(UpdateIncludeSpanRuleResponse response) {
119+
return this.ruleConverter.convert(response.getRuleDetails());
120+
}
121+
122+
Single<DeleteSpanProcessingRuleResponse> convert(DeleteIncludeSpanRuleResponse response) {
123+
return Single.just(new DefaultDeleteSpanProcessingRuleResponse(true));
124+
}
125+
88126
Single<ApiNamingRule> convert(CreateApiNamingRuleResponse response) {
89127
return this.ruleConverter.convert(response.getRuleDetails());
90128
}
@@ -118,6 +156,20 @@ private ConvertedExcludeSpanRuleResultSet(List<ExcludeSpanRule> results) {
118156
}
119157
}
120158

159+
@Value
160+
@Accessors(fluent = true)
161+
private static class ConvertedIncludeSpanRuleResultSet implements IncludeSpanRuleResultSet {
162+
List<IncludeSpanRule> results;
163+
long total;
164+
long count;
165+
166+
private ConvertedIncludeSpanRuleResultSet(List<IncludeSpanRule> results) {
167+
this.results = results;
168+
this.count = results.size();
169+
this.total = results.size();
170+
}
171+
}
172+
121173
@Value
122174
@Accessors(fluent = true)
123175
private static class ConvertedApiNamingRuleResultSet implements ApiNamingRuleResultSet {

hypertrace-graphql-span-processing-schema/src/main/java/org/hypertrace/graphql/spanprocessing/dao/ConfigServiceSpanProcessingRuleConverter.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@
55
import java.util.List;
66
import java.util.NoSuchElementException;
77
import javax.inject.Inject;
8+
import lombok.Builder;
89
import lombok.Value;
910
import lombok.experimental.Accessors;
1011
import org.hypertrace.graphql.spanprocessing.schema.rule.ApiNamingRule;
1112
import org.hypertrace.graphql.spanprocessing.schema.rule.ApiNamingRuleConfig;
1213
import org.hypertrace.graphql.spanprocessing.schema.rule.ApiNamingRuleConfigType;
1314
import org.hypertrace.graphql.spanprocessing.schema.rule.ExcludeSpanRule;
15+
import org.hypertrace.graphql.spanprocessing.schema.rule.IncludeSpanRule;
1416
import org.hypertrace.graphql.spanprocessing.schema.rule.SegmentMatchingBasedRuleConfig;
1517
import org.hypertrace.graphql.spanprocessing.schema.rule.filter.SpanProcessingRuleFilter;
1618
import org.hypertrace.span.processing.config.service.v1.ApiNamingRuleDetails;
@@ -44,6 +46,28 @@ public Single<ExcludeSpanRule> convert(
4446
ruleDetails.getMetadata().getLastUpdatedTimestamp().getNanos())));
4547
}
4648

49+
public Single<IncludeSpanRule> convert(
50+
org.hypertrace.span.processing.config.service.v1.IncludeSpanRuleDetails ruleDetails) {
51+
return this.filterConverter
52+
.convert(ruleDetails.getRule().getRuleInfo().getFilter())
53+
.map(
54+
spanProcessingRuleFilter ->
55+
ConvertedIncludeSpanRule.builder()
56+
.id(ruleDetails.getRule().getId())
57+
.name(ruleDetails.getRule().getRuleInfo().getName())
58+
.spanFilter(spanProcessingRuleFilter)
59+
.disabled(ruleDetails.getRule().getRuleInfo().getDisabled())
60+
.creationTime(
61+
Instant.ofEpochSecond(
62+
ruleDetails.getMetadata().getCreationTimestamp().getSeconds(),
63+
ruleDetails.getMetadata().getCreationTimestamp().getNanos()))
64+
.lastUpdatedTime(
65+
Instant.ofEpochSecond(
66+
ruleDetails.getMetadata().getLastUpdatedTimestamp().getSeconds(),
67+
ruleDetails.getMetadata().getLastUpdatedTimestamp().getNanos()))
68+
.build());
69+
}
70+
4771
public Single<ApiNamingRule> convert(ApiNamingRuleDetails ruleDetails) {
4872
return this.filterConverter
4973
.convert(ruleDetails.getRule().getRuleInfo().getFilter())
@@ -90,6 +114,18 @@ private static class ConvertedExcludeSpanRule implements ExcludeSpanRule {
90114
Instant lastUpdatedTime;
91115
}
92116

117+
@Value
118+
@Builder
119+
@Accessors(fluent = true)
120+
private static class ConvertedIncludeSpanRule implements IncludeSpanRule {
121+
String id;
122+
String name;
123+
SpanProcessingRuleFilter spanFilter;
124+
boolean disabled;
125+
Instant creationTime;
126+
Instant lastUpdatedTime;
127+
}
128+
93129
@Value
94130
@Accessors(fluent = true)
95131
private static class ConvertedApiNamingRule implements ApiNamingRule {

hypertrace-graphql-span-processing-schema/src/main/java/org/hypertrace/graphql/spanprocessing/dao/ConfigServiceSpanProcessingRuleDao.java

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,19 @@
1515
import org.hypertrace.graphql.spanprocessing.request.mutation.ExcludeSpanCreateRuleRequest;
1616
import org.hypertrace.graphql.spanprocessing.request.mutation.ExcludeSpanDeleteRuleRequest;
1717
import org.hypertrace.graphql.spanprocessing.request.mutation.ExcludeSpanUpdateRuleRequest;
18+
import org.hypertrace.graphql.spanprocessing.request.mutation.IncludeSpanCreateRuleRequest;
19+
import org.hypertrace.graphql.spanprocessing.request.mutation.IncludeSpanDeleteRuleRequest;
20+
import org.hypertrace.graphql.spanprocessing.request.mutation.IncludeSpanUpdateRuleRequest;
1821
import org.hypertrace.graphql.spanprocessing.schema.mutation.DeleteSpanProcessingRuleResponse;
1922
import org.hypertrace.graphql.spanprocessing.schema.query.ApiNamingRuleResultSet;
2023
import org.hypertrace.graphql.spanprocessing.schema.query.ExcludeSpanRuleResultSet;
24+
import org.hypertrace.graphql.spanprocessing.schema.query.IncludeSpanRuleResultSet;
2125
import org.hypertrace.graphql.spanprocessing.schema.rule.ApiNamingRule;
2226
import org.hypertrace.graphql.spanprocessing.schema.rule.ExcludeSpanRule;
27+
import org.hypertrace.graphql.spanprocessing.schema.rule.IncludeSpanRule;
2328
import org.hypertrace.span.processing.config.service.v1.GetAllApiNamingRulesRequest;
2429
import org.hypertrace.span.processing.config.service.v1.GetAllExcludeSpanRulesRequest;
30+
import org.hypertrace.span.processing.config.service.v1.GetAllIncludeSpanRulesRequest;
2531
import org.hypertrace.span.processing.config.service.v1.SpanProcessingConfigServiceGrpc;
2632

2733
public class ConfigServiceSpanProcessingRuleDao implements SpanProcessingRuleDao {
@@ -109,6 +115,64 @@ public Single<DeleteSpanProcessingRuleResponse> deleteExcludeSpanRule(
109115
.flatMap(this.responseConverter::convert);
110116
}
111117

118+
@Override
119+
public Single<IncludeSpanRuleResultSet> getIncludeSpanRules(ContextualRequest request) {
120+
return Single.fromFuture(
121+
this.grpcContextBuilder
122+
.build(request.context())
123+
.call(
124+
() ->
125+
this.configStub
126+
.withDeadlineAfter(
127+
serviceConfig.getConfigServiceTimeout().toMillis(), MILLISECONDS)
128+
.getAllIncludeSpanRules(
129+
GetAllIncludeSpanRulesRequest.getDefaultInstance())))
130+
.flatMap(this.responseConverter::convert);
131+
}
132+
133+
@Override
134+
public Single<IncludeSpanRule> createIncludeSpanRule(IncludeSpanCreateRuleRequest request) {
135+
return Single.fromFuture(
136+
this.grpcContextBuilder
137+
.build(request.context())
138+
.call(
139+
() ->
140+
this.configStub
141+
.withDeadlineAfter(
142+
serviceConfig.getConfigServiceTimeout().toMillis(), MILLISECONDS)
143+
.createIncludeSpanRule(this.requestConverter.convert(request))))
144+
.flatMap(this.responseConverter::convert);
145+
}
146+
147+
@Override
148+
public Single<IncludeSpanRule> updateIncludeSpanRule(IncludeSpanUpdateRuleRequest request) {
149+
return Single.fromFuture(
150+
this.grpcContextBuilder
151+
.build(request.context())
152+
.call(
153+
() ->
154+
this.configStub
155+
.withDeadlineAfter(
156+
serviceConfig.getConfigServiceTimeout().toMillis(), MILLISECONDS)
157+
.updateIncludeSpanRule(this.requestConverter.convert(request))))
158+
.flatMap(this.responseConverter::convert);
159+
}
160+
161+
@Override
162+
public Single<DeleteSpanProcessingRuleResponse> deleteIncludeSpanRule(
163+
IncludeSpanDeleteRuleRequest request) {
164+
return Single.fromFuture(
165+
this.grpcContextBuilder
166+
.build(request.context())
167+
.call(
168+
() ->
169+
this.configStub
170+
.withDeadlineAfter(
171+
serviceConfig.getConfigServiceTimeout().toMillis(), MILLISECONDS)
172+
.deleteIncludeSpanRule(this.requestConverter.convert(request))))
173+
.flatMap(this.responseConverter::convert);
174+
}
175+
112176
@Override
113177
public Single<ApiNamingRuleResultSet> getApiNamingRules(ContextualRequest request) {
114178
return Single.fromFuture(

hypertrace-graphql-span-processing-schema/src/main/java/org/hypertrace/graphql/spanprocessing/dao/SpanProcessingRuleDao.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,16 @@
88
import org.hypertrace.graphql.spanprocessing.request.mutation.ExcludeSpanCreateRuleRequest;
99
import org.hypertrace.graphql.spanprocessing.request.mutation.ExcludeSpanDeleteRuleRequest;
1010
import org.hypertrace.graphql.spanprocessing.request.mutation.ExcludeSpanUpdateRuleRequest;
11+
import org.hypertrace.graphql.spanprocessing.request.mutation.IncludeSpanCreateRuleRequest;
12+
import org.hypertrace.graphql.spanprocessing.request.mutation.IncludeSpanDeleteRuleRequest;
13+
import org.hypertrace.graphql.spanprocessing.request.mutation.IncludeSpanUpdateRuleRequest;
1114
import org.hypertrace.graphql.spanprocessing.schema.mutation.DeleteSpanProcessingRuleResponse;
1215
import org.hypertrace.graphql.spanprocessing.schema.query.ApiNamingRuleResultSet;
1316
import org.hypertrace.graphql.spanprocessing.schema.query.ExcludeSpanRuleResultSet;
17+
import org.hypertrace.graphql.spanprocessing.schema.query.IncludeSpanRuleResultSet;
1418
import org.hypertrace.graphql.spanprocessing.schema.rule.ApiNamingRule;
1519
import org.hypertrace.graphql.spanprocessing.schema.rule.ExcludeSpanRule;
20+
import org.hypertrace.graphql.spanprocessing.schema.rule.IncludeSpanRule;
1621

1722
public interface SpanProcessingRuleDao {
1823
Single<ExcludeSpanRuleResultSet> getExcludeSpanRules(ContextualRequest request);
@@ -24,6 +29,15 @@ public interface SpanProcessingRuleDao {
2429
Single<DeleteSpanProcessingRuleResponse> deleteExcludeSpanRule(
2530
ExcludeSpanDeleteRuleRequest request);
2631

32+
Single<IncludeSpanRuleResultSet> getIncludeSpanRules(ContextualRequest request);
33+
34+
Single<IncludeSpanRule> createIncludeSpanRule(IncludeSpanCreateRuleRequest request);
35+
36+
Single<IncludeSpanRule> updateIncludeSpanRule(IncludeSpanUpdateRuleRequest request);
37+
38+
Single<DeleteSpanProcessingRuleResponse> deleteIncludeSpanRule(
39+
IncludeSpanDeleteRuleRequest request);
40+
2741
Single<ApiNamingRuleResultSet> getApiNamingRules(ContextualRequest request);
2842

2943
Single<ApiNamingRule> createApiNamingRule(ApiNamingCreateRuleRequest request);

0 commit comments

Comments
 (0)