Skip to content

Commit 5dc71fd

Browse files
Add api naming rules (#134)
* add api naming rules * update config service version
1 parent 26fcc89 commit 5dc71fd

File tree

41 files changed

+972
-100
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+972
-100
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.25")
16+
api("org.hypertrace.config.service:span-processing-config-service-api:0.1.26")
1717
}
1818
}

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

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,25 @@
11
package org.hypertrace.graphql.spanprocessing.dao;
22

33
import javax.inject.Inject;
4+
import org.hypertrace.graphql.spanprocessing.request.mutation.ApiNamingCreateRuleRequest;
5+
import org.hypertrace.graphql.spanprocessing.request.mutation.ApiNamingDeleteRuleRequest;
6+
import org.hypertrace.graphql.spanprocessing.request.mutation.ApiNamingUpdateRuleRequest;
47
import org.hypertrace.graphql.spanprocessing.request.mutation.ExcludeSpanCreateRuleRequest;
58
import org.hypertrace.graphql.spanprocessing.request.mutation.ExcludeSpanDeleteRuleRequest;
69
import org.hypertrace.graphql.spanprocessing.request.mutation.ExcludeSpanUpdateRuleRequest;
10+
import org.hypertrace.graphql.spanprocessing.schema.mutation.ApiNamingRuleCreate;
11+
import org.hypertrace.graphql.spanprocessing.schema.mutation.ApiNamingRuleUpdate;
712
import org.hypertrace.graphql.spanprocessing.schema.mutation.ExcludeSpanRuleCreate;
813
import org.hypertrace.graphql.spanprocessing.schema.mutation.ExcludeSpanRuleUpdate;
14+
import org.hypertrace.span.processing.config.service.v1.ApiNamingRuleConfig;
15+
import org.hypertrace.span.processing.config.service.v1.ApiNamingRuleInfo;
16+
import org.hypertrace.span.processing.config.service.v1.CreateApiNamingRuleRequest;
917
import org.hypertrace.span.processing.config.service.v1.CreateExcludeSpanRuleRequest;
18+
import org.hypertrace.span.processing.config.service.v1.DeleteApiNamingRuleRequest;
1019
import org.hypertrace.span.processing.config.service.v1.DeleteExcludeSpanRuleRequest;
1120
import org.hypertrace.span.processing.config.service.v1.ExcludeSpanRuleInfo;
21+
import org.hypertrace.span.processing.config.service.v1.UpdateApiNamingRule;
22+
import org.hypertrace.span.processing.config.service.v1.UpdateApiNamingRuleRequest;
1223
import org.hypertrace.span.processing.config.service.v1.UpdateExcludeSpanRule;
1324
import org.hypertrace.span.processing.config.service.v1.UpdateExcludeSpanRuleRequest;
1425

@@ -53,4 +64,48 @@ private UpdateExcludeSpanRule convertInput(ExcludeSpanRuleUpdate excludeSpanRule
5364
DeleteExcludeSpanRuleRequest convert(ExcludeSpanDeleteRuleRequest request) {
5465
return DeleteExcludeSpanRuleRequest.newBuilder().setId(request.id()).build();
5566
}
67+
68+
CreateApiNamingRuleRequest convert(ApiNamingCreateRuleRequest request) {
69+
return CreateApiNamingRuleRequest.newBuilder()
70+
.setRuleInfo(convertInput(request.createInput()))
71+
.build();
72+
}
73+
74+
private org.hypertrace.span.processing.config.service.v1.ApiNamingRuleInfo convertInput(
75+
ApiNamingRuleCreate apiNamingRuleCreate) {
76+
return ApiNamingRuleInfo.newBuilder()
77+
.setName(apiNamingRuleCreate.name())
78+
.setFilter(this.filterConverter.convert(apiNamingRuleCreate.spanFilter()))
79+
.setDisabled(apiNamingRuleCreate.disabled())
80+
.setRuleConfig(
81+
ApiNamingRuleConfig.newBuilder()
82+
.setRegex(apiNamingRuleCreate.regex())
83+
.setValue(apiNamingRuleCreate.value())
84+
.build())
85+
.build();
86+
}
87+
88+
UpdateApiNamingRuleRequest convert(ApiNamingUpdateRuleRequest request) {
89+
return UpdateApiNamingRuleRequest.newBuilder()
90+
.setRule(convertInput(request.updateInput()))
91+
.build();
92+
}
93+
94+
private UpdateApiNamingRule convertInput(ApiNamingRuleUpdate apiNamingRuleUpdate) {
95+
return UpdateApiNamingRule.newBuilder()
96+
.setId(apiNamingRuleUpdate.id())
97+
.setName(apiNamingRuleUpdate.name())
98+
.setFilter(this.filterConverter.convert(apiNamingRuleUpdate.spanFilter()))
99+
.setDisabled(apiNamingRuleUpdate.disabled())
100+
.setRuleConfig(
101+
ApiNamingRuleConfig.newBuilder()
102+
.setRegex(apiNamingRuleUpdate.regex())
103+
.setValue(apiNamingRuleUpdate.value())
104+
.build())
105+
.build();
106+
}
107+
108+
DeleteApiNamingRuleRequest convert(ApiNamingDeleteRuleRequest request) {
109+
return DeleteApiNamingRuleRequest.newBuilder().setId(request.id()).build();
110+
}
56111
}

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

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,17 @@
99
import lombok.experimental.Accessors;
1010
import lombok.extern.slf4j.Slf4j;
1111
import org.hypertrace.graphql.spanprocessing.schema.mutation.DeleteSpanProcessingRuleResponse;
12+
import org.hypertrace.graphql.spanprocessing.schema.query.ApiNamingRuleResultSet;
1213
import org.hypertrace.graphql.spanprocessing.schema.query.ExcludeSpanRuleResultSet;
14+
import org.hypertrace.graphql.spanprocessing.schema.rule.ApiNamingRule;
1315
import org.hypertrace.graphql.spanprocessing.schema.rule.ExcludeSpanRule;
16+
import org.hypertrace.span.processing.config.service.v1.CreateApiNamingRuleResponse;
1417
import org.hypertrace.span.processing.config.service.v1.CreateExcludeSpanRuleResponse;
18+
import org.hypertrace.span.processing.config.service.v1.DeleteApiNamingRuleResponse;
1519
import org.hypertrace.span.processing.config.service.v1.DeleteExcludeSpanRuleResponse;
20+
import org.hypertrace.span.processing.config.service.v1.GetAllApiNamingRulesResponse;
1621
import org.hypertrace.span.processing.config.service.v1.GetAllExcludeSpanRulesResponse;
22+
import org.hypertrace.span.processing.config.service.v1.UpdateApiNamingRuleResponse;
1723
import org.hypertrace.span.processing.config.service.v1.UpdateExcludeSpanRuleResponse;
1824

1925
@Slf4j
@@ -28,7 +34,11 @@ public class ConfigServiceSpanProcessingResponseConverter {
2834
}
2935

3036
Single<ExcludeSpanRuleResultSet> convert(GetAllExcludeSpanRulesResponse response) {
31-
return this.convertResultSet(response.getRuleDetailsList());
37+
return this.convertExcludeSpanRuleResultSet(response.getRuleDetailsList());
38+
}
39+
40+
Single<ApiNamingRuleResultSet> convert(GetAllApiNamingRulesResponse response) {
41+
return this.convertApiNamingRuleResultSet(response.getRuleDetailsList());
3242
}
3343

3444
private Maybe<ExcludeSpanRule> convertOrDrop(
@@ -39,14 +49,30 @@ private Maybe<ExcludeSpanRule> convertOrDrop(
3949
.onErrorComplete();
4050
}
4151

42-
private Single<ExcludeSpanRuleResultSet> convertResultSet(
52+
private Maybe<ApiNamingRule> convertOrDrop(
53+
org.hypertrace.span.processing.config.service.v1.ApiNamingRuleDetails ruleDetails) {
54+
return this.ruleConverter
55+
.convert(ruleDetails)
56+
.doOnError(error -> log.error("Error converting ExcludeSpanRule", error))
57+
.onErrorComplete();
58+
}
59+
60+
private Single<ExcludeSpanRuleResultSet> convertExcludeSpanRuleResultSet(
4361
List<org.hypertrace.span.processing.config.service.v1.ExcludeSpanRuleDetails> ruleDetails) {
4462
return Observable.fromIterable(ruleDetails)
4563
.concatMapMaybe(this::convertOrDrop)
4664
.toList()
4765
.map(ConvertedExcludeSpanRuleResultSet::new);
4866
}
4967

68+
private Single<ApiNamingRuleResultSet> convertApiNamingRuleResultSet(
69+
List<org.hypertrace.span.processing.config.service.v1.ApiNamingRuleDetails> ruleDetails) {
70+
return Observable.fromIterable(ruleDetails)
71+
.concatMapMaybe(this::convertOrDrop)
72+
.toList()
73+
.map(ConvertedApiNamingRuleResultSet::new);
74+
}
75+
5076
Single<ExcludeSpanRule> convert(CreateExcludeSpanRuleResponse response) {
5177
return this.ruleConverter.convert(response.getRuleDetails());
5278
}
@@ -59,6 +85,18 @@ Single<DeleteSpanProcessingRuleResponse> convert(DeleteExcludeSpanRuleResponse r
5985
return Single.just(new DefaultDeleteSpanProcessingRuleResponse(true));
6086
}
6187

88+
Single<ApiNamingRule> convert(CreateApiNamingRuleResponse response) {
89+
return this.ruleConverter.convert(response.getRuleDetails());
90+
}
91+
92+
Single<ApiNamingRule> convert(UpdateApiNamingRuleResponse response) {
93+
return this.ruleConverter.convert(response.getRuleDetails());
94+
}
95+
96+
Single<DeleteSpanProcessingRuleResponse> convert(DeleteApiNamingRuleResponse response) {
97+
return Single.just(new DefaultDeleteSpanProcessingRuleResponse(true));
98+
}
99+
62100
@Value
63101
@Accessors(fluent = true)
64102
private static class DefaultDeleteSpanProcessingRuleResponse
@@ -79,4 +117,18 @@ private ConvertedExcludeSpanRuleResultSet(List<ExcludeSpanRule> results) {
79117
this.total = results.size();
80118
}
81119
}
120+
121+
@Value
122+
@Accessors(fluent = true)
123+
private static class ConvertedApiNamingRuleResultSet implements ApiNamingRuleResultSet {
124+
List<ApiNamingRule> results;
125+
long total;
126+
long count;
127+
128+
private ConvertedApiNamingRuleResultSet(List<ApiNamingRule> results) {
129+
this.results = results;
130+
this.count = results.size();
131+
this.total = results.size();
132+
}
133+
}
82134
}

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

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,12 @@
55
import javax.inject.Inject;
66
import lombok.Value;
77
import lombok.experimental.Accessors;
8-
import org.hypertrace.core.graphql.common.utils.Converter;
8+
import org.hypertrace.graphql.spanprocessing.schema.rule.ApiNamingRule;
99
import org.hypertrace.graphql.spanprocessing.schema.rule.ExcludeSpanRule;
1010
import org.hypertrace.graphql.spanprocessing.schema.rule.filter.SpanProcessingRuleFilter;
11+
import org.hypertrace.span.processing.config.service.v1.ApiNamingRuleDetails;
1112

12-
class ConfigServiceSpanProcessingRuleConverter
13-
implements Converter<
14-
org.hypertrace.span.processing.config.service.v1.ExcludeSpanRuleDetails, ExcludeSpanRule> {
13+
class ConfigServiceSpanProcessingRuleConverter {
1514

1615
private final ConfigServiceSpanFilterConverter filterConverter;
1716

@@ -20,7 +19,6 @@ class ConfigServiceSpanProcessingRuleConverter
2019
this.filterConverter = filterConverter;
2120
}
2221

23-
@Override
2422
public Single<ExcludeSpanRule> convert(
2523
org.hypertrace.span.processing.config.service.v1.ExcludeSpanRuleDetails ruleDetails) {
2624
return this.filterConverter
@@ -40,6 +38,26 @@ public Single<ExcludeSpanRule> convert(
4038
ruleDetails.getMetadata().getLastUpdatedTimestamp().getNanos())));
4139
}
4240

41+
public Single<ApiNamingRule> convert(ApiNamingRuleDetails ruleDetails) {
42+
return this.filterConverter
43+
.convert(ruleDetails.getRule().getRuleInfo().getFilter())
44+
.map(
45+
spanProcessingRuleFilter ->
46+
new ConvertedApiNamingRule(
47+
ruleDetails.getRule().getId(),
48+
ruleDetails.getRule().getRuleInfo().getName(),
49+
spanProcessingRuleFilter,
50+
ruleDetails.getRule().getRuleInfo().getDisabled(),
51+
ruleDetails.getRule().getRuleInfo().getRuleConfig().getRegex(),
52+
ruleDetails.getRule().getRuleInfo().getRuleConfig().getValue(),
53+
Instant.ofEpochSecond(
54+
ruleDetails.getMetadata().getCreationTimestamp().getSeconds(),
55+
ruleDetails.getMetadata().getCreationTimestamp().getNanos()),
56+
Instant.ofEpochSecond(
57+
ruleDetails.getMetadata().getLastUpdatedTimestamp().getSeconds(),
58+
ruleDetails.getMetadata().getLastUpdatedTimestamp().getNanos())));
59+
}
60+
4361
@Value
4462
@Accessors(fluent = true)
4563
private static class ConvertedExcludeSpanRule implements ExcludeSpanRule {
@@ -50,4 +68,17 @@ private static class ConvertedExcludeSpanRule implements ExcludeSpanRule {
5068
Instant creationTime;
5169
Instant lastUpdatedTime;
5270
}
71+
72+
@Value
73+
@Accessors(fluent = true)
74+
private static class ConvertedApiNamingRule implements ApiNamingRule {
75+
String id;
76+
String name;
77+
SpanProcessingRuleFilter spanFilter;
78+
boolean disabled;
79+
String regex;
80+
String value;
81+
Instant creationTime;
82+
Instant lastUpdatedTime;
83+
}
5384
}

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

Lines changed: 69 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,18 @@
99
import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry;
1010
import org.hypertrace.core.graphql.utils.grpc.GrpcContextBuilder;
1111
import org.hypertrace.graphql.config.HypertraceGraphQlServiceConfig;
12+
import org.hypertrace.graphql.spanprocessing.request.mutation.ApiNamingCreateRuleRequest;
13+
import org.hypertrace.graphql.spanprocessing.request.mutation.ApiNamingDeleteRuleRequest;
14+
import org.hypertrace.graphql.spanprocessing.request.mutation.ApiNamingUpdateRuleRequest;
1215
import org.hypertrace.graphql.spanprocessing.request.mutation.ExcludeSpanCreateRuleRequest;
1316
import org.hypertrace.graphql.spanprocessing.request.mutation.ExcludeSpanDeleteRuleRequest;
1417
import org.hypertrace.graphql.spanprocessing.request.mutation.ExcludeSpanUpdateRuleRequest;
1518
import org.hypertrace.graphql.spanprocessing.schema.mutation.DeleteSpanProcessingRuleResponse;
19+
import org.hypertrace.graphql.spanprocessing.schema.query.ApiNamingRuleResultSet;
1620
import org.hypertrace.graphql.spanprocessing.schema.query.ExcludeSpanRuleResultSet;
21+
import org.hypertrace.graphql.spanprocessing.schema.rule.ApiNamingRule;
1722
import org.hypertrace.graphql.spanprocessing.schema.rule.ExcludeSpanRule;
23+
import org.hypertrace.span.processing.config.service.v1.GetAllApiNamingRulesRequest;
1824
import org.hypertrace.span.processing.config.service.v1.GetAllExcludeSpanRulesRequest;
1925
import org.hypertrace.span.processing.config.service.v1.SpanProcessingConfigServiceGrpc;
2026

@@ -46,7 +52,7 @@ public class ConfigServiceSpanProcessingRuleDao implements SpanProcessingRuleDao
4652
}
4753

4854
@Override
49-
public Single<ExcludeSpanRuleResultSet> getRules(ContextualRequest request) {
55+
public Single<ExcludeSpanRuleResultSet> getExcludeSpanRules(ContextualRequest request) {
5056
return Single.fromFuture(
5157
this.grpcContextBuilder
5258
.build(request.context())
@@ -61,7 +67,7 @@ public Single<ExcludeSpanRuleResultSet> getRules(ContextualRequest request) {
6167
}
6268

6369
@Override
64-
public Single<ExcludeSpanRule> createRule(ExcludeSpanCreateRuleRequest request) {
70+
public Single<ExcludeSpanRule> createExcludeSpanRule(ExcludeSpanCreateRuleRequest request) {
6571
return Single.fromFuture(
6672
this.grpcContextBuilder
6773
.build(request.context())
@@ -75,7 +81,7 @@ public Single<ExcludeSpanRule> createRule(ExcludeSpanCreateRuleRequest request)
7581
}
7682

7783
@Override
78-
public Single<ExcludeSpanRule> updateRule(ExcludeSpanUpdateRuleRequest request) {
84+
public Single<ExcludeSpanRule> updateExcludeSpanRule(ExcludeSpanUpdateRuleRequest request) {
7985
return Single.fromFuture(
8086
this.grpcContextBuilder
8187
.build(request.context())
@@ -89,7 +95,8 @@ public Single<ExcludeSpanRule> updateRule(ExcludeSpanUpdateRuleRequest request)
8995
}
9096

9197
@Override
92-
public Single<DeleteSpanProcessingRuleResponse> deleteRule(ExcludeSpanDeleteRuleRequest request) {
98+
public Single<DeleteSpanProcessingRuleResponse> deleteExcludeSpanRule(
99+
ExcludeSpanDeleteRuleRequest request) {
93100
return Single.fromFuture(
94101
this.grpcContextBuilder
95102
.build(request.context())
@@ -101,4 +108,62 @@ public Single<DeleteSpanProcessingRuleResponse> deleteRule(ExcludeSpanDeleteRule
101108
.deleteExcludeSpanRule(this.requestConverter.convert(request))))
102109
.flatMap(this.responseConverter::convert);
103110
}
111+
112+
@Override
113+
public Single<ApiNamingRuleResultSet> getApiNamingRules(ContextualRequest request) {
114+
return Single.fromFuture(
115+
this.grpcContextBuilder
116+
.build(request.context())
117+
.call(
118+
() ->
119+
this.configStub
120+
.withDeadlineAfter(
121+
serviceConfig.getConfigServiceTimeout().toMillis(), MILLISECONDS)
122+
.getAllApiNamingRules(
123+
GetAllApiNamingRulesRequest.getDefaultInstance())))
124+
.flatMap(this.responseConverter::convert);
125+
}
126+
127+
@Override
128+
public Single<ApiNamingRule> createApiNamingRule(ApiNamingCreateRuleRequest request) {
129+
return Single.fromFuture(
130+
this.grpcContextBuilder
131+
.build(request.context())
132+
.call(
133+
() ->
134+
this.configStub
135+
.withDeadlineAfter(
136+
serviceConfig.getConfigServiceTimeout().toMillis(), MILLISECONDS)
137+
.createApiNamingRule(this.requestConverter.convert(request))))
138+
.flatMap(this.responseConverter::convert);
139+
}
140+
141+
@Override
142+
public Single<ApiNamingRule> updateApiNamingRule(ApiNamingUpdateRuleRequest request) {
143+
return Single.fromFuture(
144+
this.grpcContextBuilder
145+
.build(request.context())
146+
.call(
147+
() ->
148+
this.configStub
149+
.withDeadlineAfter(
150+
serviceConfig.getConfigServiceTimeout().toMillis(), MILLISECONDS)
151+
.updateApiNamingRule(this.requestConverter.convert(request))))
152+
.flatMap(this.responseConverter::convert);
153+
}
154+
155+
@Override
156+
public Single<DeleteSpanProcessingRuleResponse> deleteApiNamingRule(
157+
ApiNamingDeleteRuleRequest request) {
158+
return Single.fromFuture(
159+
this.grpcContextBuilder
160+
.build(request.context())
161+
.call(
162+
() ->
163+
this.configStub
164+
.withDeadlineAfter(
165+
serviceConfig.getConfigServiceTimeout().toMillis(), MILLISECONDS)
166+
.deleteApiNamingRule(this.requestConverter.convert(request))))
167+
.flatMap(this.responseConverter::convert);
168+
}
104169
}

0 commit comments

Comments
 (0)