From d55ff191a61468e6dcf5b70ecfffe1b37609aa5c Mon Sep 17 00:00:00 2001 From: SrikarMannepalli Date: Wed, 23 Feb 2022 20:10:03 +0530 Subject: [PATCH 1/4] update exclude span rules apis to expose creation and last updated timestamp --- .../v1/span_processing_config_service.proto | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/span-processing-config-service-api/src/main/proto/org/hypertrace/span/processing/config/service/v1/span_processing_config_service.proto b/span-processing-config-service-api/src/main/proto/org/hypertrace/span/processing/config/service/v1/span_processing_config_service.proto index 8699f56d..887904c8 100644 --- a/span-processing-config-service-api/src/main/proto/org/hypertrace/span/processing/config/service/v1/span_processing_config_service.proto +++ b/span-processing-config-service-api/src/main/proto/org/hypertrace/span/processing/config/service/v1/span_processing_config_service.proto @@ -19,13 +19,15 @@ message CreateExcludeSpanRuleRequest { } message CreateExcludeSpanRuleResponse { - ExcludeSpanRule rule = 1; + ExcludeSpanRule rule = 1[deprecated = true]; + ExcludeSpanRuleDetails rule_details = 2; } message GetAllExcludeSpanRulesRequest {} message GetAllExcludeSpanRulesResponse { - repeated ExcludeSpanRule rules = 1; + repeated ExcludeSpanRule rules = 1[deprecated = true]; + repeated ExcludeSpanRuleDetails rule_details = 2; } message UpdateExcludeSpanRuleRequest { @@ -33,7 +35,8 @@ message UpdateExcludeSpanRuleRequest { } message UpdateExcludeSpanRuleResponse { - ExcludeSpanRule rule = 1; + ExcludeSpanRule rule = 1[deprecated = true]; + ExcludeSpanRuleDetails rule_details = 2; } message DeleteExcludeSpanRuleRequest { @@ -47,11 +50,21 @@ message ExcludeSpanRule { ExcludeSpanRuleInfo rule_info = 2; } +message ExcludeSpanRuleDetails { + ExcludeSpanRule rule = 1; + ExcludeSpanRuleMetadata metadata = 2; +} + message ExcludeSpanRuleInfo { string name = 1; SpanFilter filter = 2; } +message ExcludeSpanRuleMetadata { + int64 creation_timestamp = 1; + int64 last_updated_timestamp = 2; +} + message UpdateExcludeSpanRule { string id = 1; string name = 2; From 1872da589e851dfddb81e815e27c9cc83ff7a181 Mon Sep 17 00:00:00 2001 From: SrikarMannepalli Date: Thu, 24 Feb 2022 11:45:52 +0530 Subject: [PATCH 2/4] impl changrs --- .../v1/span_processing_config_service.proto | 15 ++++--- .../SpanProcessingConfigServiceImpl.java | 41 +++++++++++++++++-- .../store/ExcludeSpanRulesConfigStore.java | 21 ++++++++-- .../service/utils/TimestampConverter.java | 13 ++++++ .../SpanProcessingConfigServiceImplTest.java | 23 ++++++++--- 5 files changed, 94 insertions(+), 19 deletions(-) create mode 100644 span-processing-config-service-impl/src/main/java/org/hypertrace/span/processing/config/service/utils/TimestampConverter.java diff --git a/span-processing-config-service-api/src/main/proto/org/hypertrace/span/processing/config/service/v1/span_processing_config_service.proto b/span-processing-config-service-api/src/main/proto/org/hypertrace/span/processing/config/service/v1/span_processing_config_service.proto index 887904c8..b27060dd 100644 --- a/span-processing-config-service-api/src/main/proto/org/hypertrace/span/processing/config/service/v1/span_processing_config_service.proto +++ b/span-processing-config-service-api/src/main/proto/org/hypertrace/span/processing/config/service/v1/span_processing_config_service.proto @@ -4,6 +4,8 @@ package org.hypertrace.span.processing.config.service.v1; option java_multiple_files = true; +import "google/protobuf/timestamp.proto"; + service SpanProcessingConfigService { rpc CreateExcludeSpanRule(CreateExcludeSpanRuleRequest) returns (CreateExcludeSpanRuleResponse) {} @@ -19,15 +21,13 @@ message CreateExcludeSpanRuleRequest { } message CreateExcludeSpanRuleResponse { - ExcludeSpanRule rule = 1[deprecated = true]; - ExcludeSpanRuleDetails rule_details = 2; + ExcludeSpanRuleDetails rule_details = 1; } message GetAllExcludeSpanRulesRequest {} message GetAllExcludeSpanRulesResponse { - repeated ExcludeSpanRule rules = 1[deprecated = true]; - repeated ExcludeSpanRuleDetails rule_details = 2; + repeated ExcludeSpanRuleDetails rule_details = 1; } message UpdateExcludeSpanRuleRequest { @@ -35,8 +35,7 @@ message UpdateExcludeSpanRuleRequest { } message UpdateExcludeSpanRuleResponse { - ExcludeSpanRule rule = 1[deprecated = true]; - ExcludeSpanRuleDetails rule_details = 2; + ExcludeSpanRuleDetails rule_details = 1; } message DeleteExcludeSpanRuleRequest { @@ -61,8 +60,8 @@ message ExcludeSpanRuleInfo { } message ExcludeSpanRuleMetadata { - int64 creation_timestamp = 1; - int64 last_updated_timestamp = 2; + google.protobuf.Timestamp creation_timestamp = 1; + google.protobuf.Timestamp last_updated_timestamp = 2; } message UpdateExcludeSpanRule { diff --git a/span-processing-config-service-impl/src/main/java/org/hypertrace/span/processing/config/service/SpanProcessingConfigServiceImpl.java b/span-processing-config-service-impl/src/main/java/org/hypertrace/span/processing/config/service/SpanProcessingConfigServiceImpl.java index 6959a617..cd1a2737 100644 --- a/span-processing-config-service-impl/src/main/java/org/hypertrace/span/processing/config/service/SpanProcessingConfigServiceImpl.java +++ b/span-processing-config-service-impl/src/main/java/org/hypertrace/span/processing/config/service/SpanProcessingConfigServiceImpl.java @@ -5,14 +5,18 @@ import io.grpc.stub.StreamObserver; import java.util.UUID; import lombok.extern.slf4j.Slf4j; +import org.hypertrace.config.objectstore.ContextualConfigObject; import org.hypertrace.core.grpcutils.context.RequestContext; import org.hypertrace.span.processing.config.service.store.ExcludeSpanRulesConfigStore; +import org.hypertrace.span.processing.config.service.utils.TimestampConverter; import org.hypertrace.span.processing.config.service.v1.CreateExcludeSpanRuleRequest; import org.hypertrace.span.processing.config.service.v1.CreateExcludeSpanRuleResponse; import org.hypertrace.span.processing.config.service.v1.DeleteExcludeSpanRuleRequest; import org.hypertrace.span.processing.config.service.v1.DeleteExcludeSpanRuleResponse; import org.hypertrace.span.processing.config.service.v1.ExcludeSpanRule; +import org.hypertrace.span.processing.config.service.v1.ExcludeSpanRuleDetails; import org.hypertrace.span.processing.config.service.v1.ExcludeSpanRuleInfo; +import org.hypertrace.span.processing.config.service.v1.ExcludeSpanRuleMetadata; import org.hypertrace.span.processing.config.service.v1.GetAllExcludeSpanRulesRequest; import org.hypertrace.span.processing.config.service.v1.GetAllExcludeSpanRulesResponse; import org.hypertrace.span.processing.config.service.v1.SpanProcessingConfigServiceGrpc; @@ -45,7 +49,7 @@ public void getAllExcludeSpanRules( responseObserver.onNext( GetAllExcludeSpanRulesResponse.newBuilder() - .addAllRules(ruleStore.getAllData(requestContext)) + .addAllRuleDetails(ruleStore.getAllData(requestContext)) .build()); responseObserver.onCompleted(); } catch (Exception e) { @@ -69,9 +73,24 @@ public void createExcludeSpanRule( .setRuleInfo(request.getRuleInfo()) .build(); + ContextualConfigObject excludeSpanRuleContextualConfigObject = + this.ruleStore.upsertObject(requestContext, newRule); + responseObserver.onNext( CreateExcludeSpanRuleResponse.newBuilder() - .setRule(this.ruleStore.upsertObject(requestContext, newRule).getData()) + .setRuleDetails( + ExcludeSpanRuleDetails.newBuilder() + .setRule(excludeSpanRuleContextualConfigObject.getData()) + .setMetadata( + ExcludeSpanRuleMetadata.newBuilder() + .setCreationTimestamp( + TimestampConverter.convert( + excludeSpanRuleContextualConfigObject.getCreationTimestamp())) + .setLastUpdatedTimestamp( + TimestampConverter.convert( + excludeSpanRuleContextualConfigObject + .getLastUpdatedTimestamp())) + .build())) .build()); responseObserver.onCompleted(); } catch (Exception exception) { @@ -95,9 +114,25 @@ public void updateExcludeSpanRule( .orElseThrow(Status.NOT_FOUND::asException); ExcludeSpanRule updatedRule = buildUpdatedRule(existingRule, updateExcludeSpanRule); + ContextualConfigObject excludeSpanRuleContextualConfigObject = + this.ruleStore.upsertObject(requestContext, updatedRule); + responseObserver.onNext( UpdateExcludeSpanRuleResponse.newBuilder() - .setRule(this.ruleStore.upsertObject(requestContext, updatedRule).getData()) + .setRuleDetails( + ExcludeSpanRuleDetails.newBuilder() + .setRule(excludeSpanRuleContextualConfigObject.getData()) + .setMetadata( + ExcludeSpanRuleMetadata.newBuilder() + .setCreationTimestamp( + TimestampConverter.convert( + excludeSpanRuleContextualConfigObject.getCreationTimestamp())) + .setLastUpdatedTimestamp( + TimestampConverter.convert( + excludeSpanRuleContextualConfigObject + .getLastUpdatedTimestamp())) + .build()) + .build()) .build()); responseObserver.onCompleted(); } catch (Exception exception) { diff --git a/span-processing-config-service-impl/src/main/java/org/hypertrace/span/processing/config/service/store/ExcludeSpanRulesConfigStore.java b/span-processing-config-service-impl/src/main/java/org/hypertrace/span/processing/config/service/store/ExcludeSpanRulesConfigStore.java index 9b20e2fa..bddc0f8c 100644 --- a/span-processing-config-service-impl/src/main/java/org/hypertrace/span/processing/config/service/store/ExcludeSpanRulesConfigStore.java +++ b/span-processing-config-service-impl/src/main/java/org/hypertrace/span/processing/config/service/store/ExcludeSpanRulesConfigStore.java @@ -6,12 +6,14 @@ import java.util.Optional; import java.util.stream.Collectors; import lombok.SneakyThrows; -import org.hypertrace.config.objectstore.ContextualConfigObject; import org.hypertrace.config.objectstore.IdentifiedObjectStore; import org.hypertrace.config.proto.converter.ConfigProtoConverter; import org.hypertrace.config.service.v1.ConfigServiceGrpc; import org.hypertrace.core.grpcutils.context.RequestContext; +import org.hypertrace.span.processing.config.service.utils.TimestampConverter; import org.hypertrace.span.processing.config.service.v1.ExcludeSpanRule; +import org.hypertrace.span.processing.config.service.v1.ExcludeSpanRuleDetails; +import org.hypertrace.span.processing.config.service.v1.ExcludeSpanRuleMetadata; public class ExcludeSpanRulesConfigStore extends IdentifiedObjectStore { @@ -28,9 +30,22 @@ public ExcludeSpanRulesConfigStore( EXCLUDE_SPAN_RULES_RESOURCE_NAME); } - public List getAllData(RequestContext requestContext) { + public List getAllData(RequestContext requestContext) { return this.getAllObjects(requestContext).stream() - .map(ContextualConfigObject::getData) + .map( + contextualConfigObject -> + ExcludeSpanRuleDetails.newBuilder() + .setRule(contextualConfigObject.getData()) + .setMetadata( + ExcludeSpanRuleMetadata.newBuilder() + .setCreationTimestamp( + TimestampConverter.convert( + contextualConfigObject.getCreationTimestamp())) + .setLastUpdatedTimestamp( + TimestampConverter.convert( + contextualConfigObject.getLastUpdatedTimestamp())) + .build()) + .build()) .collect(Collectors.toUnmodifiableList()); } diff --git a/span-processing-config-service-impl/src/main/java/org/hypertrace/span/processing/config/service/utils/TimestampConverter.java b/span-processing-config-service-impl/src/main/java/org/hypertrace/span/processing/config/service/utils/TimestampConverter.java new file mode 100644 index 00000000..415ea075 --- /dev/null +++ b/span-processing-config-service-impl/src/main/java/org/hypertrace/span/processing/config/service/utils/TimestampConverter.java @@ -0,0 +1,13 @@ +package org.hypertrace.span.processing.config.service.utils; + +import com.google.protobuf.Timestamp; +import java.time.Instant; + +public class TimestampConverter { + public static Timestamp convert(Instant instant) { + return Timestamp.newBuilder() + .setSeconds(instant.toEpochMilli()) + .setNanos(instant.getNano()) + .build(); + } +} diff --git a/span-processing-config-service-impl/src/test/java/org/hypertrace/span/processing/config/service/SpanProcessingConfigServiceImplTest.java b/span-processing-config-service-impl/src/test/java/org/hypertrace/span/processing/config/service/SpanProcessingConfigServiceImplTest.java index 345a978b..1a53a59c 100644 --- a/span-processing-config-service-impl/src/test/java/org/hypertrace/span/processing/config/service/SpanProcessingConfigServiceImplTest.java +++ b/span-processing-config-service-impl/src/test/java/org/hypertrace/span/processing/config/service/SpanProcessingConfigServiceImplTest.java @@ -4,12 +4,14 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.List; +import java.util.stream.Collectors; import org.hypertrace.config.service.test.MockGenericConfigService; import org.hypertrace.config.service.v1.ConfigServiceGrpc; import org.hypertrace.span.processing.config.service.store.ExcludeSpanRulesConfigStore; import org.hypertrace.span.processing.config.service.v1.CreateExcludeSpanRuleRequest; import org.hypertrace.span.processing.config.service.v1.DeleteExcludeSpanRuleRequest; import org.hypertrace.span.processing.config.service.v1.ExcludeSpanRule; +import org.hypertrace.span.processing.config.service.v1.ExcludeSpanRuleDetails; import org.hypertrace.span.processing.config.service.v1.ExcludeSpanRuleInfo; import org.hypertrace.span.processing.config.service.v1.Field; import org.hypertrace.span.processing.config.service.v1.GetAllExcludeSpanRulesRequest; @@ -78,6 +80,7 @@ void testCrud() { .setRightOperand( SpanFilterValue.newBuilder().setStringValue("a"))))) .build()) + .getRuleDetails() .getRule(); ExcludeSpanRule secondCreatedExcludeSpanRule = @@ -97,13 +100,16 @@ void testCrud() { .setRightOperand( SpanFilterValue.newBuilder().setStringValue("a"))))) .build()) + .getRuleDetails() .getRule(); List excludeSpanRules = this.spanProcessingConfigServiceStub - .getAllExcludeSpanRules( - GetAllExcludeSpanRulesRequest.newBuilder().build().newBuilder().build()) - .getRulesList(); + .getAllExcludeSpanRules(GetAllExcludeSpanRulesRequest.newBuilder().build()) + .getRuleDetailsList() + .stream() + .map(ExcludeSpanRuleDetails::getRule) + .collect(Collectors.toUnmodifiableList()); assertEquals(2, excludeSpanRules.size()); assertTrue(excludeSpanRules.contains(firstCreatedExcludeSpanRule)); assertTrue(excludeSpanRules.contains(secondCreatedExcludeSpanRule)); @@ -126,13 +132,17 @@ void testCrud() { .setRightOperand( SpanFilterValue.newBuilder().setStringValue("a"))))) .build()) + .getRuleDetails() .getRule(); assertEquals("updatedRuleName1", updatedFirstExcludeSpanRule.getRuleInfo().getName()); excludeSpanRules = this.spanProcessingConfigServiceStub .getAllExcludeSpanRules(GetAllExcludeSpanRulesRequest.newBuilder().build()) - .getRulesList(); + .getRuleDetailsList() + .stream() + .map(ExcludeSpanRuleDetails::getRule) + .collect(Collectors.toUnmodifiableList()); assertEquals(2, excludeSpanRules.size()); assertTrue(excludeSpanRules.contains(updatedFirstExcludeSpanRule)); @@ -144,7 +154,10 @@ void testCrud() { excludeSpanRules = this.spanProcessingConfigServiceStub .getAllExcludeSpanRules(GetAllExcludeSpanRulesRequest.newBuilder().build()) - .getRulesList(); + .getRuleDetailsList() + .stream() + .map(ExcludeSpanRuleDetails::getRule) + .collect(Collectors.toUnmodifiableList()); assertEquals(1, excludeSpanRules.size()); assertEquals(secondCreatedExcludeSpanRule, excludeSpanRules.get(0)); } From a3301f4bcf4026984cd2d94aa82776614cb46c4b Mon Sep 17 00:00:00 2001 From: SrikarMannepalli Date: Thu, 24 Feb 2022 11:51:02 +0530 Subject: [PATCH 3/4] cleanup --- .../SpanProcessingConfigServiceImpl.java | 50 +++++++------------ 1 file changed, 18 insertions(+), 32 deletions(-) diff --git a/span-processing-config-service-impl/src/main/java/org/hypertrace/span/processing/config/service/SpanProcessingConfigServiceImpl.java b/span-processing-config-service-impl/src/main/java/org/hypertrace/span/processing/config/service/SpanProcessingConfigServiceImpl.java index cd1a2737..407b6cbe 100644 --- a/span-processing-config-service-impl/src/main/java/org/hypertrace/span/processing/config/service/SpanProcessingConfigServiceImpl.java +++ b/span-processing-config-service-impl/src/main/java/org/hypertrace/span/processing/config/service/SpanProcessingConfigServiceImpl.java @@ -66,31 +66,17 @@ public void createExcludeSpanRule( RequestContext requestContext = RequestContext.CURRENT.get(); this.validator.validateOrThrow(requestContext, request); - // TODO: need to handle prorities + // TODO: need to handle priorities ExcludeSpanRule newRule = ExcludeSpanRule.newBuilder() .setId(UUID.randomUUID().toString()) .setRuleInfo(request.getRuleInfo()) .build(); - ContextualConfigObject excludeSpanRuleContextualConfigObject = - this.ruleStore.upsertObject(requestContext, newRule); - responseObserver.onNext( CreateExcludeSpanRuleResponse.newBuilder() .setRuleDetails( - ExcludeSpanRuleDetails.newBuilder() - .setRule(excludeSpanRuleContextualConfigObject.getData()) - .setMetadata( - ExcludeSpanRuleMetadata.newBuilder() - .setCreationTimestamp( - TimestampConverter.convert( - excludeSpanRuleContextualConfigObject.getCreationTimestamp())) - .setLastUpdatedTimestamp( - TimestampConverter.convert( - excludeSpanRuleContextualConfigObject - .getLastUpdatedTimestamp())) - .build())) + buildExcludeSpanRuleDetails(this.ruleStore.upsertObject(requestContext, newRule))) .build()); responseObserver.onCompleted(); } catch (Exception exception) { @@ -114,25 +100,11 @@ public void updateExcludeSpanRule( .orElseThrow(Status.NOT_FOUND::asException); ExcludeSpanRule updatedRule = buildUpdatedRule(existingRule, updateExcludeSpanRule); - ContextualConfigObject excludeSpanRuleContextualConfigObject = - this.ruleStore.upsertObject(requestContext, updatedRule); - responseObserver.onNext( UpdateExcludeSpanRuleResponse.newBuilder() .setRuleDetails( - ExcludeSpanRuleDetails.newBuilder() - .setRule(excludeSpanRuleContextualConfigObject.getData()) - .setMetadata( - ExcludeSpanRuleMetadata.newBuilder() - .setCreationTimestamp( - TimestampConverter.convert( - excludeSpanRuleContextualConfigObject.getCreationTimestamp())) - .setLastUpdatedTimestamp( - TimestampConverter.convert( - excludeSpanRuleContextualConfigObject - .getLastUpdatedTimestamp())) - .build()) - .build()) + buildExcludeSpanRuleDetails( + this.ruleStore.upsertObject(requestContext, updatedRule))) .build()); responseObserver.onCompleted(); } catch (Exception exception) { @@ -172,4 +144,18 @@ private ExcludeSpanRule buildUpdatedRule( .build()) .build(); } + + private ExcludeSpanRuleDetails buildExcludeSpanRuleDetails( + ContextualConfigObject configObject) { + return ExcludeSpanRuleDetails.newBuilder() + .setRule(configObject.getData()) + .setMetadata( + ExcludeSpanRuleMetadata.newBuilder() + .setCreationTimestamp( + TimestampConverter.convert(configObject.getCreationTimestamp())) + .setLastUpdatedTimestamp( + TimestampConverter.convert(configObject.getLastUpdatedTimestamp())) + .build()) + .build(); + } } From 134f928787f1001c6bf9dbf53eff10a96528684e Mon Sep 17 00:00:00 2001 From: SrikarMannepalli Date: Thu, 24 Feb 2022 12:09:56 +0530 Subject: [PATCH 4/4] address review comments --- .../SpanProcessingConfigServiceImpl.java | 9 ++++--- .../store/ExcludeSpanRulesConfigStore.java | 9 ++++--- .../service/utils/TimestampConverter.java | 2 +- .../SpanProcessingConfigServiceImplTest.java | 27 +++++++++++++++---- 4 files changed, 35 insertions(+), 12 deletions(-) diff --git a/span-processing-config-service-impl/src/main/java/org/hypertrace/span/processing/config/service/SpanProcessingConfigServiceImpl.java b/span-processing-config-service-impl/src/main/java/org/hypertrace/span/processing/config/service/SpanProcessingConfigServiceImpl.java index 407b6cbe..f8e99e7d 100644 --- a/span-processing-config-service-impl/src/main/java/org/hypertrace/span/processing/config/service/SpanProcessingConfigServiceImpl.java +++ b/span-processing-config-service-impl/src/main/java/org/hypertrace/span/processing/config/service/SpanProcessingConfigServiceImpl.java @@ -30,13 +30,16 @@ class SpanProcessingConfigServiceImpl extends SpanProcessingConfigServiceGrpc.SpanProcessingConfigServiceImplBase { private final SpanProcessingConfigRequestValidator validator; private final ExcludeSpanRulesConfigStore ruleStore; + private final TimestampConverter timestampConverter; @Inject SpanProcessingConfigServiceImpl( ExcludeSpanRulesConfigStore ruleStore, - SpanProcessingConfigRequestValidator requestValidator) { + SpanProcessingConfigRequestValidator requestValidator, + TimestampConverter timestampConverter) { this.validator = requestValidator; this.ruleStore = ruleStore; + this.timestampConverter = timestampConverter; } @Override @@ -152,9 +155,9 @@ private ExcludeSpanRuleDetails buildExcludeSpanRuleDetails( .setMetadata( ExcludeSpanRuleMetadata.newBuilder() .setCreationTimestamp( - TimestampConverter.convert(configObject.getCreationTimestamp())) + timestampConverter.convert(configObject.getCreationTimestamp())) .setLastUpdatedTimestamp( - TimestampConverter.convert(configObject.getLastUpdatedTimestamp())) + timestampConverter.convert(configObject.getLastUpdatedTimestamp())) .build()) .build(); } diff --git a/span-processing-config-service-impl/src/main/java/org/hypertrace/span/processing/config/service/store/ExcludeSpanRulesConfigStore.java b/span-processing-config-service-impl/src/main/java/org/hypertrace/span/processing/config/service/store/ExcludeSpanRulesConfigStore.java index bddc0f8c..00f4eb78 100644 --- a/span-processing-config-service-impl/src/main/java/org/hypertrace/span/processing/config/service/store/ExcludeSpanRulesConfigStore.java +++ b/span-processing-config-service-impl/src/main/java/org/hypertrace/span/processing/config/service/store/ExcludeSpanRulesConfigStore.java @@ -20,14 +20,17 @@ public class ExcludeSpanRulesConfigStore extends IdentifiedObjectStore getAllData(RequestContext requestContext) { @@ -39,10 +42,10 @@ public List getAllData(RequestContext requestContext) { .setMetadata( ExcludeSpanRuleMetadata.newBuilder() .setCreationTimestamp( - TimestampConverter.convert( + timestampConverter.convert( contextualConfigObject.getCreationTimestamp())) .setLastUpdatedTimestamp( - TimestampConverter.convert( + timestampConverter.convert( contextualConfigObject.getLastUpdatedTimestamp())) .build()) .build()) diff --git a/span-processing-config-service-impl/src/main/java/org/hypertrace/span/processing/config/service/utils/TimestampConverter.java b/span-processing-config-service-impl/src/main/java/org/hypertrace/span/processing/config/service/utils/TimestampConverter.java index 415ea075..19091691 100644 --- a/span-processing-config-service-impl/src/main/java/org/hypertrace/span/processing/config/service/utils/TimestampConverter.java +++ b/span-processing-config-service-impl/src/main/java/org/hypertrace/span/processing/config/service/utils/TimestampConverter.java @@ -4,7 +4,7 @@ import java.time.Instant; public class TimestampConverter { - public static Timestamp convert(Instant instant) { + public Timestamp convert(Instant instant) { return Timestamp.newBuilder() .setSeconds(instant.toEpochMilli()) .setNanos(instant.getNano()) diff --git a/span-processing-config-service-impl/src/test/java/org/hypertrace/span/processing/config/service/SpanProcessingConfigServiceImplTest.java b/span-processing-config-service-impl/src/test/java/org/hypertrace/span/processing/config/service/SpanProcessingConfigServiceImplTest.java index 1a53a59c..a97617db 100644 --- a/span-processing-config-service-impl/src/test/java/org/hypertrace/span/processing/config/service/SpanProcessingConfigServiceImplTest.java +++ b/span-processing-config-service-impl/src/test/java/org/hypertrace/span/processing/config/service/SpanProcessingConfigServiceImplTest.java @@ -2,12 +2,17 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import com.google.protobuf.Timestamp; import java.util.List; import java.util.stream.Collectors; import org.hypertrace.config.service.test.MockGenericConfigService; import org.hypertrace.config.service.v1.ConfigServiceGrpc; import org.hypertrace.span.processing.config.service.store.ExcludeSpanRulesConfigStore; +import org.hypertrace.span.processing.config.service.utils.TimestampConverter; import org.hypertrace.span.processing.config.service.v1.CreateExcludeSpanRuleRequest; import org.hypertrace.span.processing.config.service.v1.DeleteExcludeSpanRuleRequest; import org.hypertrace.span.processing.config.service.v1.ExcludeSpanRule; @@ -31,6 +36,7 @@ class SpanProcessingConfigServiceImplTest { SpanProcessingConfigServiceGrpc.SpanProcessingConfigServiceBlockingStub spanProcessingConfigServiceStub; MockGenericConfigService mockGenericConfigService; + TimestampConverter timestampConverter; @BeforeEach void beforeEach() { @@ -45,15 +51,20 @@ void beforeEach() { ConfigServiceGrpc.ConfigServiceBlockingStub genericStub = ConfigServiceGrpc.newBlockingStub(this.mockGenericConfigService.channel()); + this.timestampConverter = mock(TimestampConverter.class); this.mockGenericConfigService .addService( new SpanProcessingConfigServiceImpl( - new ExcludeSpanRulesConfigStore(genericStub), - new SpanProcessingConfigRequestValidator())) + new ExcludeSpanRulesConfigStore(genericStub, this.timestampConverter), + new SpanProcessingConfigRequestValidator(), + this.timestampConverter)) .start(); this.spanProcessingConfigServiceStub = SpanProcessingConfigServiceGrpc.newBlockingStub(this.mockGenericConfigService.channel()); + + when(this.timestampConverter.convert(any())) + .thenReturn(Timestamp.newBuilder().setSeconds(100).build()); } @AfterEach @@ -63,7 +74,7 @@ void afterEach() { @Test void testCrud() { - ExcludeSpanRule firstCreatedExcludeSpanRule = + ExcludeSpanRuleDetails firstCreatedExcludeSpanRuleDetails = this.spanProcessingConfigServiceStub .createExcludeSpanRule( CreateExcludeSpanRuleRequest.newBuilder() @@ -80,8 +91,14 @@ void testCrud() { .setRightOperand( SpanFilterValue.newBuilder().setStringValue("a"))))) .build()) - .getRuleDetails() - .getRule(); + .getRuleDetails(); + ExcludeSpanRule firstCreatedExcludeSpanRule = firstCreatedExcludeSpanRuleDetails.getRule(); + Timestamp expectedTimestamp = Timestamp.newBuilder().setSeconds(100).build(); + assertEquals( + expectedTimestamp, firstCreatedExcludeSpanRuleDetails.getMetadata().getCreationTimestamp()); + assertEquals( + expectedTimestamp, + firstCreatedExcludeSpanRuleDetails.getMetadata().getLastUpdatedTimestamp()); ExcludeSpanRule secondCreatedExcludeSpanRule = this.spanProcessingConfigServiceStub