From 4f854aae3e01b01b11d380e766fea030e59f5261 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld Date: Wed, 8 Jul 2020 12:56:43 -0400 Subject: [PATCH 001/173] first commit --- .circleci/config.yml | 143 ++++ .github/CODEOWNERS | 4 + .gitignore | 7 + LICENSE.md | 660 ++++++++++++++++++ README.md | 15 + build.gradle.kts | 11 + gradle.properties | 5 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 58910 bytes gradle/wrapper/gradle-wrapper.properties | 5 + gradlew | 185 +++++ gradlew.bat | 104 +++ helm/Chart.yaml | 9 + helm/templates/deployment.yaml | 75 ++ helm/templates/logconfig.yaml | 38 + helm/templates/service.yaml | 15 + helm/templates/serviceconfig.yaml | 28 + helm/values.yaml | 60 ++ .../build.gradle.kts | 14 + ...traceCoreAttributeModelScopeConverter.java | 25 + .../scopes/HypertraceCoreAttributeScope.java | 8 + ...HypertraceCoreAttributeScopeConverter.java | 25 + .../HypertraceCoreAttributeScopeModule.java | 21 + .../build.gradle.kts | 33 + .../graphql/attributes/AttributeClient.java | 56 ++ .../graphql/attributes/AttributeModel.java | 22 + .../AttributeModelMetricAggregationType.java | 12 + .../attributes/AttributeModelScope.java | 17 + .../attributes/AttributeModelTranslator.java | 138 ++++ .../attributes/AttributeModelType.java | 10 + .../graphql/attributes/AttributeStore.java | 21 + .../attributes/AttributeStoreModule.java | 31 + .../attributes/CachingAttributeStore.java | 145 ++++ .../attributes/DefaultAttributeModel.java | 20 + .../graphql/attributes/DefaultIdMapping.java | 20 + .../core/graphql/attributes/IdLookup.java | 30 + .../core/graphql/attributes/IdMapping.java | 31 + .../AttributeModelTranslatorTest.java | 64 ++ .../attributes/CachingAttributeStoreTest.java | 236 +++++++ .../core/graphql/attributes/IdLookupTest.java | 27 + .../build.gradle.kts | 31 + .../CommonDeserializationModule.java | 42 ++ .../FilterArgumentDeserializationConfig.java | 64 ++ .../OrderArgumentDeserializationConfig.java | 42 ++ ...imeRangeArgumentDeserializationConfig.java | 42 ++ .../common/fetcher/InjectableDataFetcher.java | 32 + .../common/request/AttributeAssociation.java | 14 + .../common/request/AttributeRequest.java | 10 + .../request/AttributeRequestBuilder.java | 36 + .../common/request/CommonRequestModule.java | 27 + .../request/DefaultAttributeAssociation.java | 12 + .../DefaultAttributeRequestBuilder.java | 113 +++ .../request/DefaultFilterRequestBuilder.java | 92 +++ .../DefaultResultSetRequestBuilder.java | 158 +++++ .../common/request/FilterRequestBuilder.java | 15 + .../common/request/ResultSetRequest.java | 27 + .../request/ResultSetRequestBuilder.java | 39 ++ .../common/schema/CommonSchemaFragment.java | 38 + .../common/schema/CommonSchemaModule.java | 20 + .../schema/arguments/TimeRangeArgument.java | 24 + .../schema/attributes/AttributeQueryable.java | 14 + .../schema/attributes/AttributeScope.java | 9 + .../schema/attributes/AttributeType.java | 15 + .../attributes/MetricAggregationType.java | 17 + .../arguments/AttributeKeyArgument.java | 7 + .../common/schema/id/Identifiable.java | 15 + .../common/schema/results/ResultSet.java | 34 + .../arguments/filter/FilterArgument.java | 44 ++ .../arguments/filter/FilterOperatorType.java | 19 + .../results/arguments/filter/FilterType.java | 15 + .../arguments/order/OrderArgument.java | 22 + .../arguments/order/OrderDirection.java | 11 + .../results/arguments/page/LimitArgument.java | 7 + .../arguments/page/OffsetArgument.java | 7 + .../graphql/common/schema/time/TimeUnit.java | 21 + .../graphql/common/schema/type/Typed.java | 17 + .../AttributeScopeDynamicEnum.java | 39 ++ .../schema/typefunctions/DateTimeScalar.java | 78 +++ .../schema/typefunctions/UnknownScalar.java | 96 +++ .../graphql/common/utils/BiConverter.java | 16 + .../graphql/common/utils/CollectorUtils.java | 31 + .../core/graphql/common/utils/Converter.java | 8 + .../utils/attributes/AttributeAssociator.java | 24 + ...teModelMetricAggregationTypeConverter.java | 39 ++ .../attributes/AttributeTypeConverter.java | 32 + .../attributes/AttributeUtilsModule.java | 32 + .../DefaultAttributeAssociator.java | 43 ++ .../MetricAggregationTypeConverter.java | 39 ++ ...lterArgumentDeserializationConfigTest.java | 77 ++ ...rderArgumentDeserializationConfigTest.java | 62 ++ ...angeArgumentDeserializationConfigTest.java | 58 ++ .../DefaultAttributeRequestBuilderTest.java | 66 ++ .../DefaultResultSetRequestBuilderTest.java | 117 ++++ .../schema/scalars/DateTimeScalarTest.java | 82 +++ .../schema/scalars/UnknownScalarTest.java | 95 +++ .../build.gradle.kts | 25 + .../graphql/context/ContextualCachingKey.java | 5 + .../DefaultGraphQlRequestContextBuilder.java | 117 ++++ .../context/GraphQlRequestContext.java | 22 + .../context/GraphQlRequestContextBuilder.java | 11 + .../context/GraphQlRequestContextModule.java | 12 + ...faultGraphQlRequestContextBuilderTest.java | 106 +++ .../build.gradle.kts | 29 + .../ArgumentDeserializationConfig.java | 20 + .../deserialization/ArgumentDeserializer.java | 18 + .../DefaultArgumentDeserializer.java | 124 ++++ .../GraphQlDeserializationRegistryModule.java | 13 + .../deserialization/PrimitiveArgument.java | 3 + .../SimpleArgumentDeserializationConfig.java | 9 + .../DefaultArgumentDeserializerTest.java | 205 ++++++ .../build.gradle.kts | 25 + .../utils/gateway/AttributeMapConverter.java | 42 ++ .../gateway/ColumnIdentifierConverter.java | 17 + .../ColumnIdentifierExpressionConverter.java | 26 + .../utils/gateway/FilterConverter.java | 58 ++ .../utils/gateway/GatewayUtilsModule.java | 64 ++ .../gateway/LiteralConstantConverter.java | 75 ++ .../LiteralConstantExpressionConverter.java | 25 + .../utils/gateway/OperatorConverter.java | 41 ++ .../OrderByExpressionListConverter.java | 47 ++ .../SelectionExpressionSetConverter.java | 39 ++ .../utils/gateway/SortOrderConverter.java | 23 + .../gateway/UnwrappedValueConverter.java | 46 ++ .../ColumnIdentifierConverterTest.java | 25 + ...lumnIdentifierExpressionConverterTest.java | 35 + .../gateway/LiteralConstantConverterTest.java | 93 +++ ...iteralConstantExpressionConverterTest.java | 38 + .../build.gradle.kts | 34 + .../DefaultGraphQlGrpcContextBuilder.java | 91 +++ .../grpc/DefaultGrpcChannelRegistry.java | 47 ++ .../utils/grpc/GraphQlGrpcContext.java | 16 + .../utils/grpc/GraphQlGrpcContextBuilder.java | 7 + .../graphql/utils/grpc/GraphQlGrpcModule.java | 16 + .../utils/grpc/GrpcChannelRegistry.java | 7 + .../grpc/PlatformRequestContextBuilder.java | 14 + .../grpc/StreamingClientResponseObserver.java | 46 ++ .../DefaultGraphQlGrpcContextBuilderTest.java | 143 ++++ .../grpc/DefaultGrpcChannelRegistryTest.java | 65 ++ .../PlatformRequestContextBuilderTest.java | 17 + .../StreamingClientResponseObserverTest.java | 65 ++ hypertrace-core-graphql-impl/build.gradle.kts | 39 ++ .../core/graphql/impl/GraphQlFactory.java | 21 + .../core/graphql/impl/GraphQlModule.java | 48 ++ .../core/graphql/impl/GraphQlModuleTest.java | 22 + .../build.gradle.kts | 33 + .../metadata/MetadataSchemaFragment.java | 35 + .../metadata/MetadataSchemaModule.java | 34 + .../metadata/fetcher/MetadataFetcher.java | 39 ++ .../response/DefaultAttributeMetadata.java | 23 + .../response/MetadataResponseBuilder.java | 71 ++ .../metadata/schema/AttributeMetadata.java | 56 ++ .../metadata/schema/MetadataSchema.java | 18 + .../metadata/fetcher/MetadataFetcherTest.java | 51 ++ .../response/MetadataResponseBuilderTest.java | 106 +++ .../build.gradle.kts | 27 + .../DefaultGraphQlSchemaRegistry.java | 28 + .../schema/registry/DefaultSchema.java | 28 + .../GraphQlAnnotatedSchemaMerger.java | 137 ++++ .../registry/GraphQlSchemaRegistry.java | 11 + .../registry/GraphQlSchemaRegistryModule.java | 13 + .../GraphQlAnnotatedSchemaMergerTest.java | 243 +++++++ .../build.gradle.kts | 25 + .../schema/DefaultGraphQlSelectionFinder.java | 66 ++ .../utils/schema/GraphQlSelectionFinder.java | 11 + .../utils/schema/SchemaUtilsModule.java | 10 + .../graphql/utils/schema/SelectionQuery.java | 21 + .../DefaultGraphQlSelectionFinderTest.java | 140 ++++ .../build.gradle.kts | 33 + .../service/DefaultGraphQlServiceConfig.java | 107 +++ .../DefaultGraphQlServiceLifecycle.java | 18 + .../core/graphql/service/GraphQlService.java | 100 +++ .../service/GraphQlServiceHttpServlet.java | 18 + .../resources/configs/common/application.conf | 18 + .../src/main/resources/log4j2.properties | 8 + .../build.gradle.kts | 27 + .../core/graphql/span/SpanSchemaFragment.java | 17 + .../core/graphql/span/SpanSchemaModule.java | 19 + .../span/dao/GatewayServiceSpanConverter.java | 68 ++ .../span/dao/GatewayServiceSpanDao.java | 66 ++ .../dao/GatewayServiceSpanRequestBuilder.java | 54 ++ .../core/graphql/span/dao/SpanDao.java | 11 + .../core/graphql/span/dao/SpanDaoModule.java | 56 ++ .../graphql/span/fetcher/SpanFetcher.java | 42 ++ .../core/graphql/span/schema/Span.java | 10 + .../graphql/span/schema/SpanResultSet.java | 18 + .../core/graphql/span/schema/SpanSchema.java | 28 + hypertrace-core-graphql-spi/build.gradle.kts | 14 + .../spi/config/GraphQlServiceConfig.java | 26 + .../lifecycle/GraphQlServiceLifecycle.java | 8 + .../spi/schema/GraphQlSchemaFragment.java | 26 + .../build.gradle.kts | 29 + .../graphql/trace/TraceSchemaFragment.java | 17 + .../core/graphql/trace/TraceSchemaModule.java | 21 + .../dao/GatewayServiceTraceConverter.java | 67 ++ .../trace/dao/GatewayServiceTraceDao.java | 67 ++ .../GatewayServiceTraceRequestBuilder.java | 61 ++ .../dao/GatewayServiceTraceTypeConverter.java | 30 + .../core/graphql/trace/dao/TraceDao.java | 10 + .../graphql/trace/dao/TraceDaoModule.java | 55 ++ .../TraceDeserializationModule.java | 21 + .../graphql/trace/fetcher/TraceFetcher.java | 38 + .../request/DefaultTraceRequestBuilder.java | 69 ++ .../graphql/trace/request/TraceRequest.java | 14 + .../trace/request/TraceRequestBuilder.java | 14 + .../trace/request/TraceRequestModule.java | 15 + ...aceTypeToAttributeModelScopeConverter.java | 26 + .../core/graphql/trace/schema/Trace.java | 10 + .../graphql/trace/schema/TraceResultSet.java | 18 + .../graphql/trace/schema/TraceSchema.java | 31 + .../trace/schema/arguments/TraceType.java | 13 + .../schema/arguments/TraceTypeArgument.java | 8 + semantic-build-versioning.gradle | 11 + settings.gradle.kts | 29 + 212 files changed, 9384 insertions(+) create mode 100644 .circleci/config.yml create mode 100644 .github/CODEOWNERS create mode 100644 .gitignore create mode 100644 LICENSE.md create mode 100644 README.md create mode 100644 build.gradle.kts create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100644 gradlew.bat create mode 100644 helm/Chart.yaml create mode 100644 helm/templates/deployment.yaml create mode 100644 helm/templates/logconfig.yaml create mode 100644 helm/templates/service.yaml create mode 100644 helm/templates/serviceconfig.yaml create mode 100644 helm/values.yaml create mode 100644 hypertrace-core-graphql-attribute-scope/build.gradle.kts create mode 100644 hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeModelScopeConverter.java create mode 100644 hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScope.java create mode 100644 hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeConverter.java create mode 100644 hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeModule.java create mode 100644 hypertrace-core-graphql-attribute-store/build.gradle.kts create mode 100644 hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeClient.java create mode 100644 hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModel.java create mode 100644 hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelMetricAggregationType.java create mode 100644 hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelScope.java create mode 100644 hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java create mode 100644 hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelType.java create mode 100644 hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStore.java create mode 100644 hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStoreModule.java create mode 100644 hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java create mode 100644 hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/DefaultAttributeModel.java create mode 100644 hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/DefaultIdMapping.java create mode 100644 hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdLookup.java create mode 100644 hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdMapping.java create mode 100644 hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslatorTest.java create mode 100644 hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java create mode 100644 hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/IdLookupTest.java create mode 100644 hypertrace-core-graphql-common-schema/build.gradle.kts create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/CommonDeserializationModule.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/FilterArgumentDeserializationConfig.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/OrderArgumentDeserializationConfig.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/TimeRangeArgumentDeserializationConfig.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/fetcher/InjectableDataFetcher.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/AttributeAssociation.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/AttributeRequest.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/AttributeRequestBuilder.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/CommonRequestModule.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultAttributeAssociation.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilder.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilder.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilder.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/FilterRequestBuilder.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequest.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequestBuilder.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/CommonSchemaFragment.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/CommonSchemaModule.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/arguments/TimeRangeArgument.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeQueryable.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeScope.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeType.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/MetricAggregationType.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/arguments/AttributeKeyArgument.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/id/Identifiable.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/ResultSet.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterArgument.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterOperatorType.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterType.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/order/OrderArgument.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/order/OrderDirection.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/page/LimitArgument.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/page/OffsetArgument.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/time/TimeUnit.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/type/Typed.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/AttributeScopeDynamicEnum.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/DateTimeScalar.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/UnknownScalar.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/BiConverter.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/CollectorUtils.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/Converter.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeAssociator.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeModelMetricAggregationTypeConverter.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeTypeConverter.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeUtilsModule.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/DefaultAttributeAssociator.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/MetricAggregationTypeConverter.java create mode 100644 hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/deserialization/FilterArgumentDeserializationConfigTest.java create mode 100644 hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/deserialization/OrderArgumentDeserializationConfigTest.java create mode 100644 hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/deserialization/TimeRangeArgumentDeserializationConfigTest.java create mode 100644 hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilderTest.java create mode 100644 hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilderTest.java create mode 100644 hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/DateTimeScalarTest.java create mode 100644 hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/UnknownScalarTest.java create mode 100644 hypertrace-core-graphql-context/build.gradle.kts create mode 100644 hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/ContextualCachingKey.java create mode 100644 hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilder.java create mode 100644 hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/GraphQlRequestContext.java create mode 100644 hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/GraphQlRequestContextBuilder.java create mode 100644 hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/GraphQlRequestContextModule.java create mode 100644 hypertrace-core-graphql-context/src/test/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilderTest.java create mode 100644 hypertrace-core-graphql-deserialization/build.gradle.kts create mode 100644 hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/ArgumentDeserializationConfig.java create mode 100644 hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/ArgumentDeserializer.java create mode 100644 hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/DefaultArgumentDeserializer.java create mode 100644 hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/GraphQlDeserializationRegistryModule.java create mode 100644 hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/PrimitiveArgument.java create mode 100644 hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/SimpleArgumentDeserializationConfig.java create mode 100644 hypertrace-core-graphql-deserialization/src/test/java/org/hypertrace/core/graphql/deserialization/DefaultArgumentDeserializerTest.java create mode 100644 hypertrace-core-graphql-gateway-service-utils/build.gradle.kts create mode 100644 hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/AttributeMapConverter.java create mode 100644 hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/ColumnIdentifierConverter.java create mode 100644 hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/ColumnIdentifierExpressionConverter.java create mode 100644 hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/FilterConverter.java create mode 100644 hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayUtilsModule.java create mode 100644 hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/LiteralConstantConverter.java create mode 100644 hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/LiteralConstantExpressionConverter.java create mode 100644 hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/OperatorConverter.java create mode 100644 hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/OrderByExpressionListConverter.java create mode 100644 hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/SelectionExpressionSetConverter.java create mode 100644 hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/SortOrderConverter.java create mode 100644 hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/UnwrappedValueConverter.java create mode 100644 hypertrace-core-graphql-gateway-service-utils/src/test/java/org/hypertrace/core/graphql/utils/gateway/ColumnIdentifierConverterTest.java create mode 100644 hypertrace-core-graphql-gateway-service-utils/src/test/java/org/hypertrace/core/graphql/utils/gateway/ColumnIdentifierExpressionConverterTest.java create mode 100644 hypertrace-core-graphql-gateway-service-utils/src/test/java/org/hypertrace/core/graphql/utils/gateway/LiteralConstantConverterTest.java create mode 100644 hypertrace-core-graphql-gateway-service-utils/src/test/java/org/hypertrace/core/graphql/utils/gateway/LiteralConstantExpressionConverterTest.java create mode 100644 hypertrace-core-graphql-grpc-utils/build.gradle.kts create mode 100644 hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGraphQlGrpcContextBuilder.java create mode 100644 hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGrpcChannelRegistry.java create mode 100644 hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcContext.java create mode 100644 hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcContextBuilder.java create mode 100644 hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcModule.java create mode 100644 hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GrpcChannelRegistry.java create mode 100644 hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/PlatformRequestContextBuilder.java create mode 100644 hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/StreamingClientResponseObserver.java create mode 100644 hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/DefaultGraphQlGrpcContextBuilderTest.java create mode 100644 hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/DefaultGrpcChannelRegistryTest.java create mode 100644 hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/PlatformRequestContextBuilderTest.java create mode 100644 hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/StreamingClientResponseObserverTest.java create mode 100644 hypertrace-core-graphql-impl/build.gradle.kts create mode 100644 hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlFactory.java create mode 100644 hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlModule.java create mode 100644 hypertrace-core-graphql-impl/src/test/java/org/hypertrace/core/graphql/impl/GraphQlModuleTest.java create mode 100644 hypertrace-core-graphql-metadata-schema/build.gradle.kts create mode 100644 hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/MetadataSchemaFragment.java create mode 100644 hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/MetadataSchemaModule.java create mode 100644 hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/fetcher/MetadataFetcher.java create mode 100644 hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/DefaultAttributeMetadata.java create mode 100644 hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilder.java create mode 100644 hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/schema/AttributeMetadata.java create mode 100644 hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/schema/MetadataSchema.java create mode 100644 hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/fetcher/MetadataFetcherTest.java create mode 100644 hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilderTest.java create mode 100644 hypertrace-core-graphql-schema-registry/build.gradle.kts create mode 100644 hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/DefaultGraphQlSchemaRegistry.java create mode 100644 hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/DefaultSchema.java create mode 100644 hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/GraphQlAnnotatedSchemaMerger.java create mode 100644 hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/GraphQlSchemaRegistry.java create mode 100644 hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/GraphQlSchemaRegistryModule.java create mode 100644 hypertrace-core-graphql-schema-registry/src/test/java/org/hypertrace/core/graphql/schema/registry/GraphQlAnnotatedSchemaMergerTest.java create mode 100644 hypertrace-core-graphql-schema-utils/build.gradle.kts create mode 100644 hypertrace-core-graphql-schema-utils/src/main/java/org/hypertrace/core/graphql/utils/schema/DefaultGraphQlSelectionFinder.java create mode 100644 hypertrace-core-graphql-schema-utils/src/main/java/org/hypertrace/core/graphql/utils/schema/GraphQlSelectionFinder.java create mode 100644 hypertrace-core-graphql-schema-utils/src/main/java/org/hypertrace/core/graphql/utils/schema/SchemaUtilsModule.java create mode 100644 hypertrace-core-graphql-schema-utils/src/main/java/org/hypertrace/core/graphql/utils/schema/SelectionQuery.java create mode 100644 hypertrace-core-graphql-schema-utils/src/test/java/org/hypertrace/core/graphql/utils/schema/DefaultGraphQlSelectionFinderTest.java create mode 100644 hypertrace-core-graphql-service/build.gradle.kts create mode 100644 hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java create mode 100644 hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceLifecycle.java create mode 100644 hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/GraphQlService.java create mode 100644 hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/GraphQlServiceHttpServlet.java create mode 100644 hypertrace-core-graphql-service/src/main/resources/configs/common/application.conf create mode 100644 hypertrace-core-graphql-service/src/main/resources/log4j2.properties create mode 100644 hypertrace-core-graphql-span-schema/build.gradle.kts create mode 100644 hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/SpanSchemaFragment.java create mode 100644 hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/SpanSchemaModule.java create mode 100644 hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanConverter.java create mode 100644 hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanDao.java create mode 100644 hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanRequestBuilder.java create mode 100644 hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanDao.java create mode 100644 hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanDaoModule.java create mode 100644 hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/fetcher/SpanFetcher.java create mode 100644 hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/schema/Span.java create mode 100644 hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/schema/SpanResultSet.java create mode 100644 hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/schema/SpanSchema.java create mode 100644 hypertrace-core-graphql-spi/build.gradle.kts create mode 100644 hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java create mode 100644 hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/lifecycle/GraphQlServiceLifecycle.java create mode 100644 hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/schema/GraphQlSchemaFragment.java create mode 100644 hypertrace-core-graphql-trace-schema/build.gradle.kts create mode 100644 hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/TraceSchemaFragment.java create mode 100644 hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/TraceSchemaModule.java create mode 100644 hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceConverter.java create mode 100644 hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceDao.java create mode 100644 hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceRequestBuilder.java create mode 100644 hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceTypeConverter.java create mode 100644 hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/TraceDao.java create mode 100644 hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/TraceDaoModule.java create mode 100644 hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/deserialization/TraceDeserializationModule.java create mode 100644 hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/fetcher/TraceFetcher.java create mode 100644 hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/DefaultTraceRequestBuilder.java create mode 100644 hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/TraceRequest.java create mode 100644 hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/TraceRequestBuilder.java create mode 100644 hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/TraceRequestModule.java create mode 100644 hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/TraceTypeToAttributeModelScopeConverter.java create mode 100644 hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/schema/Trace.java create mode 100644 hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/schema/TraceResultSet.java create mode 100644 hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/schema/TraceSchema.java create mode 100644 hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/schema/arguments/TraceType.java create mode 100644 hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/schema/arguments/TraceTypeArgument.java create mode 100644 semantic-build-versioning.gradle create mode 100644 settings.gradle.kts diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 00000000..90ab79a8 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,143 @@ +version: 2.1 + +orbs: + codecov: codecov/codecov@1 + snyk: snyk/snyk@0.0.10 + +executors: + java: + docker: + - image: cimg/openjdk:11.0 + helm: + docker: + - image: hypertrace/helm-gcs-packager:0.1.1 +commands: + gradle: + description: 'Run the provided gradle command' + parameters: + args: + type: string + when: + default: "on_success" + type: enum + enum: ["on_fail", "on_success", "always"] + steps: + - run: + name: << parameters.args >> + command: ./gradlew << parameters.args >> --info --max-workers=2 -Dorg.gradle.jvmargs=-Xmx2g -Dorg.gradle.console=plain --continue + when: << parameters.when >> + setup_build_environment: + description: 'Generates cache key from a hash of all gradle files' + steps: + - checkout + - run: + name: Generate cache key + command: find . -type f -name "*.gradle*" -exec shasum {} + | sort > /tmp/checksum.txt && cat /tmp/checksum.txt + - restore_cache: + keys: + - v1-dependencies-{{ checksum "/tmp/checksum.txt" }} + # fallback to using the latest cache if no exact match is found + - v1-dependencies- + populate_and_save_cache: + description: 'Downloads all gradle dependencies and uploads cache for later use' + steps: + - gradle: + args: downloadDependencies + - save_cache: + paths: + - ~/.gradle + key: v1-dependencies-{{ checksum "/tmp/checksum.txt" }} + +jobs: + build: + executor: java + steps: + - setup_build_environment + - setup_remote_docker + - populate_and_save_cache + - gradle: + args: build dockerBuildImages + - gradle: + args: jacocoTestReport + - gradle: + args: copyAllReports --output-dir=/tmp/test-reports + when: always + - codecov/upload + - store_test_results: + path: /tmp/test-reports + - store_artifacts: + path: /tmp/test-reports + destination: reports + snyk-scan: + executor: java + environment: + GRADLE_OPTS: -Dorg.gradle.workers.max=1 # Snyk doesn't handle parallelism well + steps: + - setup_build_environment + - snyk/scan: + additional-arguments: --all-sub-projects + + publish: + executor: java + steps: + - setup_build_environment + - setup_remote_docker + - gradle: + args: :tag -Prelease + - add_ssh_keys: + fingerprints: + - 'b9:bd:a2:02:5b:02:ec:2e:53:b4:de:f1:57:45:0a:e6' + - run: git push origin $(./gradlew -q :printVersion) + - gradle: + args: dockerPushImages + validate-charts: + executor: helm + steps: + - checkout + - run: + name: Helm Charts Lint and Template Render + command: | + helm lint --strict ./helm/ + helm template ./helm/ + package-charts: + executor: helm + steps: + - checkout + - run: + name: Package and Publish Helm Charts + command: | + CHART_VERSION=$(git describe --abbrev=0) + CHART_NAME=$(awk '/^name:/ {print $2}' ./helm/Chart.yaml) + export GOOGLE_APPLICATION_CREDENTIALS=${HOME}/helm-gcs-key.json + echo ${HELM_GCS_CREDENTIALS} > ${GOOGLE_APPLICATION_CREDENTIALS} + helm dependency update ./helm/ + helm repo add helm-gcs ${HELM_GCS_REPOSITORY} + helm package --version ${CHART_VERSION} --app-version ${CHART_VERSION} ./helm/ + helm gcs push ${CHART_NAME}-${CHART_VERSION}.tgz helm-gcs --public --retry + +workflows: + version: 2 + build-and-publish: + jobs: + - build + - validate-charts + - snyk-scan: + context: hypertrace-vulnerability-scanning + - publish: + context: hypertrace-publishing + requires: + - build + - snyk-scan + - validate-charts + filters: + branches: + only: + - master + - package-charts: + context: hypertrace-publishing + requires: + - publish + filters: + branches: + only: + - master \ No newline at end of file diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 00000000..c4b8c174 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,4 @@ +# Each line is a file pattern followed by one or more owners. + +# global +* @aaron-steinfeld @tim-mwangi diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..1f93dfcf --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +# Ignore Gradle project-specific cache directory +.gradle + +# Ignore Gradle build output directory +build + +.idea diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 00000000..cba6f6a1 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,660 @@ +### GNU AFFERO GENERAL PUBLIC LICENSE + +Version 3, 19 November 2007 + +Copyright (C) 2007 Free Software Foundation, Inc. + + +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. + +### Preamble + +The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + +The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains +free software for all its users. + +When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + +Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + +A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + +The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + +An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing +under this license. + +The precise terms and conditions for copying, distribution and +modification follow. + +### TERMS AND CONDITIONS + +#### 0. Definitions. + +"This License" refers to version 3 of the GNU Affero General Public +License. + +"Copyright" also means copyright-like laws that apply to other kinds +of works, such as semiconductor masks. + +"The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + +To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of +an exact copy. The resulting work is called a "modified version" of +the earlier work or a work "based on" the earlier work. + +A "covered work" means either the unmodified Program or a work based +on the Program. + +To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + +To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user +through a computer network, with no transfer of a copy, is not +conveying. + +An interactive user interface displays "Appropriate Legal Notices" to +the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + +#### 1. Source Code. + +The "source code" for a work means the preferred form of the work for +making modifications to it. "Object code" means any non-source form of +a work. + +A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + +The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + +The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + +The Corresponding Source need not include anything that users can +regenerate automatically from other parts of the Corresponding Source. + +The Corresponding Source for a work in source code form is that same +work. + +#### 2. Basic Permissions. + +All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + +You may make, run and propagate covered works that you do not convey, +without conditions so long as your license otherwise remains in force. +You may convey covered works to others for the sole purpose of having +them make modifications exclusively for you, or provide you with +facilities for running those works, provided that you comply with the +terms of this License in conveying all material for which you do not +control copyright. Those thus making or running the covered works for +you must do so exclusively on your behalf, under your direction and +control, on terms that prohibit them from making any copies of your +copyrighted material outside their relationship with you. + +Conveying under any other circumstances is permitted solely under the +conditions stated below. Sublicensing is not allowed; section 10 makes +it unnecessary. + +#### 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + +No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + +When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such +circumvention is effected by exercising rights under this License with +respect to the covered work, and you disclaim any intention to limit +operation or modification of the work as a means of enforcing, against +the work's users, your or third parties' legal rights to forbid +circumvention of technological measures. + +#### 4. Conveying Verbatim Copies. + +You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + +You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + +#### 5. Conveying Modified Source Versions. + +You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these +conditions: + +- a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. +- b) The work must carry prominent notices stating that it is + released under this License and any conditions added under + section 7. This requirement modifies the requirement in section 4 + to "keep intact all notices". +- c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. +- d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + +A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + +#### 6. Conveying Non-Source Forms. + +You may convey a covered work in object code form under the terms of +sections 4 and 5, provided that you also convey the machine-readable +Corresponding Source under the terms of this License, in one of these +ways: + +- a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. +- b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the Corresponding + Source from a network server at no charge. +- c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. +- d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. +- e) Convey the object code using peer-to-peer transmission, + provided you inform other peers where the object code and + Corresponding Source of the work are being offered to the general + public at no charge under subsection 6d. + +A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + +A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, +family, or household purposes, or (2) anything designed or sold for +incorporation into a dwelling. In determining whether a product is a +consumer product, doubtful cases shall be resolved in favor of +coverage. For a particular product received by a particular user, +"normally used" refers to a typical or common use of that class of +product, regardless of the status of the particular user or of the way +in which the particular user actually uses, or expects or is expected +to use, the product. A product is a consumer product regardless of +whether the product has substantial commercial, industrial or +non-consumer uses, unless such uses represent the only significant +mode of use of the product. + +"Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to +install and execute modified versions of a covered work in that User +Product from a modified version of its Corresponding Source. The +information must suffice to ensure that the continued functioning of +the modified object code is in no case prevented or interfered with +solely because modification has been made. + +If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + +The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or +updates for a work that has been modified or installed by the +recipient, or for the User Product in which it has been modified or +installed. Access to a network may be denied when the modification +itself materially and adversely affects the operation of the network +or violates the rules and protocols for communication across the +network. + +Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + +#### 7. Additional Terms. + +"Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders +of that material) supplement the terms of this License with terms: + +- a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or +- b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or +- c) Prohibiting misrepresentation of the origin of that material, + or requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or +- d) Limiting the use for publicity purposes of names of licensors + or authors of the material; or +- e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or +- f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions + of it) with contractual assumptions of liability to the recipient, + for any liability that these contractual assumptions directly + impose on those licensors and authors. + +All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + +If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; the +above requirements apply either way. + +#### 8. Termination. + +You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + +#### 9. Acceptance Not Required for Having Copies. + +You are not required to accept this License in order to receive or run +a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + +#### 10. Automatic Licensing of Downstream Recipients. + +Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + +An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + +#### 11. Patents. + +A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + +A contributor's "essential patent claims" are all patent claims owned +or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + +In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + +If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + +A patent license is "discriminatory" if it does not include within the +scope of its coverage, prohibits the exercise of, or is conditioned on +the non-exercise of one or more of the rights that are specifically +granted under this License. You may not convey a covered work if you +are a party to an arrangement with a third party that is in the +business of distributing software, under which you make payment to the +third party based on the extent of your activity of conveying the +work, and under which the third party grants, to any of the parties +who would receive the covered work from you, a discriminatory patent +license (a) in connection with copies of the covered work conveyed by +you (or copies made from those copies), or (b) primarily for and in +connection with specific products or compilations that contain the +covered work, unless you entered into that arrangement, or that patent +license was granted, prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + +#### 12. No Surrender of Others' Freedom. + +If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under +this License and any other pertinent obligations, then as a +consequence you may not convey it at all. For example, if you agree to +terms that obligate you to collect a royalty for further conveying +from those to whom you convey the Program, the only way you could +satisfy both those terms and this License would be to refrain entirely +from conveying the Program. + +#### 13. Remote Network Interaction; Use with the GNU General Public License. + +Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your +version supports such interaction) an opportunity to receive the +Corresponding Source of your version by providing access to the +Corresponding Source from a network server at no charge, through some +standard or customary means of facilitating copying of software. This +Corresponding Source shall include the Corresponding Source for any +work covered by version 3 of the GNU General Public License that is +incorporated pursuant to the following paragraph. + +Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + +#### 14. Revised Versions of this License. + +The Free Software Foundation may publish revised and/or new versions +of the GNU Affero General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever +published by the Free Software Foundation. + +If the Program specifies that a proxy can decide which future versions +of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + +Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + +#### 15. Disclaimer of Warranty. + +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT +WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND +PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE +DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR +CORRECTION. + +#### 16. Limitation of Liability. + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR +CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT +NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR +LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM +TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER +PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +#### 17. Interpretation of Sections 15 and 16. + +If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + +END OF TERMS AND CONDITIONS + +### How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + +To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively state +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper +mail. + +If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for +the specific requirements. + +You should also get your employer (if you work as a programmer) or +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. For more information on this, and how to apply and follow +the GNU AGPL, see . diff --git a/README.md b/README.md new file mode 100644 index 00000000..3b5a5576 --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +# Hypertrace Core GraphQL + + +## Testing + +`./gradlew test` + +## Running + +`./gradlew run` + +## Ports + +GraphQL Service runs on port 23431 at `/graphql` by default + diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 00000000..d3184c17 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,11 @@ +plugins { + id("org.hypertrace.repository-plugin") version "0.2.0" + id("org.hypertrace.ci-utils-plugin") version "0.1.1" + id("org.hypertrace.jacoco-report-plugin") version "0.1.0" apply false + id("org.hypertrace.docker-java-application-plugin") version "0.2.2" apply false + id("org.hypertrace.docker-publish-plugin") version "0.2.2" apply false +} + +subprojects { + group = "org.hypertrace.core.graphql" +} diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 00000000..13e3631b --- /dev/null +++ b/gradle.properties @@ -0,0 +1,5 @@ +org.gradle.parallel=true +org.gradle.daemon=true +org.gradle.caching=true +org.gradle.configureondemand=true + diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..62d4c053550b91381bbd28b1afc82d634bf73a8a GIT binary patch literal 58910 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 literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..ac33e994 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.5.1-all.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100755 index 00000000..fbd7c515 --- /dev/null +++ b/gradlew @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 00000000..5093609d --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,104 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/helm/Chart.yaml b/helm/Chart.yaml new file mode 100644 index 00000000..6fafa00a --- /dev/null +++ b/helm/Chart.yaml @@ -0,0 +1,9 @@ +# Command to package: +# helm package --version --app-version +apiVersion: v2 +name: hypertrace-core-graphql-service +description: A Helm chart for Hypertrace Core GraphQL +type: application + +# This is the chart version. It will always be set at the command line, this value is meaningless. +version: 0.1.0 diff --git a/helm/templates/deployment.yaml b/helm/templates/deployment.yaml new file mode 100644 index 00000000..6e56eb82 --- /dev/null +++ b/helm/templates/deployment.yaml @@ -0,0 +1,75 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ .Chart.Name }} + labels: + release: {{ .Release.Name }} + annotations: + prometheus.io/scrape: "true" + prometheus.io/port: "{{ .Values.service.adminPort }}" +spec: + replicas: {{ .Values.replicaCount }} + strategy: + type: RollingUpdate + rollingUpdate: + maxUnavailable: {{ .Values.maxUnavailable }} + selector: + matchLabels: + {{- toYaml .Values.deploymentSelectorMatchLabels | nindent 6 }} + template: + metadata: + labels: + {{- toYaml .Values.podLabels | nindent 8 }} + spec: + {{- with .Values.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - name: http + containerPort: {{ .Values.service.port }} + - name: admin-port + containerPort: {{ .Values.service.adminPort }} + env: + - name: SERVICE_NAME + value: {{ .Chart.Name }} + - name: BOOTSTRAP_CONFIG_URI + value: "file:///app/resources/configs" + - name: LOG4J_CONFIGURATION_FILE + value: "/app/log/log4j2.properties" + - name: JAVA_TOOL_OPTIONS + value: {{ .Values.javaOpts | quote }} + volumeMounts: + - name: log4j-config + mountPath: /app/log + - name: service-config + mountPath: /app/resources/configs/{{ .Chart.Name }}/application.conf + subPath: application.conf + livenessProbe: + initialDelaySeconds: {{ int .Values.livenessProbe.initialDelaySeconds }} + periodSeconds: {{ int .Values.livenessProbe.periodSeconds }} + tcpSocket: + port: http + readinessProbe: + initialDelaySeconds: {{ int .Values.readinessProbe.initialDelaySeconds }} + periodSeconds: {{ int .Values.readinessProbe.periodSeconds }} + httpGet: + path: /health + port: admin-port + resources: + {{- toYaml .Values.resources | nindent 12 }} + volumes: + - name: service-config + configMap: + name: {{ .Values.serviceConfig.name }} + - name: log4j-config + configMap: + name: {{ .Values.logConfig.name }} + {{- with .Values.nodeLabels }} + nodeSelector: + {{- toYaml . | nindent 8}} + {{- end }} diff --git a/helm/templates/logconfig.yaml b/helm/templates/logconfig.yaml new file mode 100644 index 00000000..d46b0b6a --- /dev/null +++ b/helm/templates/logconfig.yaml @@ -0,0 +1,38 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Values.logConfig.name }} + labels: + release: {{ .Release.Name }} +data: + log4j2.properties: |- + status = error + name = PropertiesConfig + + appender.console.type = Console + appender.console.name = STDOUT + appender.console.layout.type = PatternLayout + appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %c{1.} - %msg%n + + {{- if .Values.logConfig.appender.rolling.enabled }} + appender.rolling.type = RollingFile + appender.rolling.name = ROLLING_FILE + appender.rolling.fileName = ${env:SERVICE_NAME}.log + appender.rolling.filePattern = ${env:SERVICE_NAME}-%d{MM-dd-yy-HH-mm-ss}-%i.log.gz + appender.rolling.layout.type = PatternLayout + appender.rolling.layout.pattern = %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %c{1.} - %msg%n + appender.rolling.policies.type = Policies + appender.rolling.policies.time.type = TimeBasedTriggeringPolicy + appender.rolling.policies.time.interval = 3600 + appender.rolling.policies.time.modulate = true + appender.rolling.policies.size.type = SizeBasedTriggeringPolicy + appender.rolling.policies.size.size = 20MB + appender.rolling.strategy.type = DefaultRolloverStrategy + appender.rolling.strategy.max = 5 + {{- end }} + + rootLogger.level = {{ .Values.logConfig.rootLogger.level }} + rootLogger.appenderRef.stdout.ref = STDOUT + {{- if .Values.logConfig.appender.rolling.enabled }} + rootLogger.appenderRef.rolling.ref = ROLLING_FILE + {{- end }} diff --git a/helm/templates/service.yaml b/helm/templates/service.yaml new file mode 100644 index 00000000..ae718dfa --- /dev/null +++ b/helm/templates/service.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ .Chart.Name }} + labels: + release: {{ .Release.Name }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: http + protocol: TCP + name: http + selector: + {{- toYaml .Values.serviceSelectorLabels | nindent 4 }} diff --git a/helm/templates/serviceconfig.yaml b/helm/templates/serviceconfig.yaml new file mode 100644 index 00000000..2d336b73 --- /dev/null +++ b/helm/templates/serviceconfig.yaml @@ -0,0 +1,28 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Values.serviceConfig.name }} + labels: + release: {{ .Release.Name }} +data: + application.conf: |- + service.name = {{ .Chart.Name }} + service.port = {{ .Values.service.port }} + service.admin.port = {{ .Values.service.adminPort }} + + {{ if .Values.serviceConfig.defaultTenantId }} + defaultTenantId = {{ .Values.serviceConfig.defaultTenantId }} + {{ end }} + + graphql.urlPath = {{ .Values.serviceConfig.urlPath }} + graphql.corsEnabled = {{ .Values.serviceConfig.corsEnabled }} + + attribute.service = { + host = {{ .Values.serviceConfig.attributeService.host }} + port = {{ .Values.serviceConfig.attributeService.port }} + } + + gateway.service = { + host = {{ .Values.serviceConfig.gatewayService.host }} + port = {{ .Values.serviceConfig.gatewayService.port }} + } \ No newline at end of file diff --git a/helm/values.yaml b/helm/values.yaml new file mode 100644 index 00000000..992f79c5 --- /dev/null +++ b/helm/values.yaml @@ -0,0 +1,60 @@ +replicaCount: 1 +maxUnavailable: 0 + +image: + repository: hypertrace/hypertrace-core-graphql-service + pullPolicy: IfNotPresent + +imagePullSecrets: [] + +service: + type: ClusterIP + port: 23431 + adminPort: 23432 + +podLabels: + app: hypertrace-core-graphql + +deploymentSelectorMatchLabels: + app: hypertrace-core-graphql + +serviceSelectorLabels: + app: hypertrace-core-graphql + +nodeLabels: {} + +livenessProbe: + initialDelaySeconds: 10 + periodSeconds: 10 +readinessProbe: + initialDelaySeconds: 2 + periodSeconds: 5 + +javaOpts: "-Xms256M -Xmx512M" + +resources: + limits: + cpu: 0.5 + memory: 512Mi + requests: + cpu: 100m + memory: 512Mi + +serviceConfig: + name: hypertrace-core-graphql-service-config + urlPath: /graphql + corsEnabled: true + defaultTenantId: "" + attributeService: + host: attribute-service + port: 9012 + gatewayService: + host: gateway-service + port: 50071 +logConfig: + name: hypertrace-core-graphql-log-config + rootLogger: + level: INFO + appender: + rolling: + enabled: false diff --git a/hypertrace-core-graphql-attribute-scope/build.gradle.kts b/hypertrace-core-graphql-attribute-scope/build.gradle.kts new file mode 100644 index 00000000..53ab2b3e --- /dev/null +++ b/hypertrace-core-graphql-attribute-scope/build.gradle.kts @@ -0,0 +1,14 @@ +plugins { + `java-library` +} + +java { + sourceCompatibility = JavaVersion.VERSION_11 +} + +dependencies { + api("com.google.inject:guice:4.2.3") + api("io.reactivex.rxjava3:rxjava:3.0.2") + api(project(":hypertrace-core-graphql-attribute-store")) + api(project(":hypertrace-core-graphql-common-schema")) +} \ No newline at end of file diff --git a/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeModelScopeConverter.java b/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeModelScopeConverter.java new file mode 100644 index 00000000..b1929944 --- /dev/null +++ b/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeModelScopeConverter.java @@ -0,0 +1,25 @@ +package org.hypertrace.core.graphql.atttributes.scopes; + +import io.reactivex.rxjava3.core.Single; +import java.util.UnknownFormatConversionException; +import org.hypertrace.core.graphql.attributes.AttributeModelScope; +import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; +import org.hypertrace.core.graphql.common.utils.Converter; + +class HypertraceCoreAttributeModelScopeConverter + implements Converter { + + @Override + public Single convert(AttributeScope scope) { + switch ((HypertraceCoreAttributeScope) scope) { + case TRACE: + return Single.just(AttributeModelScope.TRACE); + case SPAN: + return Single.just(AttributeModelScope.SPAN); + default: + return Single.error( + new UnknownFormatConversionException( + String.format("Unrecognized attribute scope %s", scope))); + } + } +} diff --git a/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScope.java b/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScope.java new file mode 100644 index 00000000..3d18cc01 --- /dev/null +++ b/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScope.java @@ -0,0 +1,8 @@ +package org.hypertrace.core.graphql.atttributes.scopes; + +import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; + +enum HypertraceCoreAttributeScope implements AttributeScope { + TRACE, + SPAN; +} diff --git a/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeConverter.java b/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeConverter.java new file mode 100644 index 00000000..5fcfdbcb --- /dev/null +++ b/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeConverter.java @@ -0,0 +1,25 @@ +package org.hypertrace.core.graphql.atttributes.scopes; + +import io.reactivex.rxjava3.core.Single; +import java.util.UnknownFormatConversionException; +import org.hypertrace.core.graphql.attributes.AttributeModelScope; +import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; +import org.hypertrace.core.graphql.common.utils.Converter; + +class HypertraceCoreAttributeScopeConverter + implements Converter { + + @Override + public Single convert(AttributeModelScope scope) { + switch (scope) { + case TRACE: + return Single.just(HypertraceCoreAttributeScope.TRACE); + case SPAN: + return Single.just(HypertraceCoreAttributeScope.SPAN); + default: + return Single.error( + new UnknownFormatConversionException( + String.format("Unrecognized attribute scope %s", scope.name()))); + } + } +} diff --git a/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeModule.java b/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeModule.java new file mode 100644 index 00000000..06f8b080 --- /dev/null +++ b/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeModule.java @@ -0,0 +1,21 @@ +package org.hypertrace.core.graphql.atttributes.scopes; + +import com.google.inject.AbstractModule; +import com.google.inject.Key; +import com.google.inject.TypeLiteral; +import org.hypertrace.core.graphql.attributes.AttributeModelScope; +import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; +import org.hypertrace.core.graphql.common.utils.Converter; + +public class HypertraceCoreAttributeScopeModule extends AbstractModule { + + @Override + protected void configure() { + bind(Key.get(new TypeLiteral>() {})) + .toInstance(HypertraceCoreAttributeScope.class); + bind(Key.get(new TypeLiteral>() {})) + .to(HypertraceCoreAttributeScopeConverter.class); + bind(Key.get(new TypeLiteral>() {})) + .to(HypertraceCoreAttributeModelScopeConverter.class); + } +} diff --git a/hypertrace-core-graphql-attribute-store/build.gradle.kts b/hypertrace-core-graphql-attribute-store/build.gradle.kts new file mode 100644 index 00000000..38604192 --- /dev/null +++ b/hypertrace-core-graphql-attribute-store/build.gradle.kts @@ -0,0 +1,33 @@ +plugins { + `java-library` + jacoco + id("org.hypertrace.jacoco-report-plugin") +} + +java { + sourceCompatibility = JavaVersion.VERSION_11 +} + +dependencies { + api("com.google.inject:guice:4.2.3") + api(project(":hypertrace-core-graphql-spi")) + api(project(":hypertrace-core-graphql-context")) + + implementation("org.slf4j:slf4j-api:1.7.3") + implementation("io.reactivex.rxjava3:rxjava:3.0.2") + implementation("com.google.guava:guava:29.0-jre") + + implementation("org.hypertrace.core.attribute.service:attribute-service-api:0.1.2") + implementation(project(":hypertrace-core-graphql-grpc-utils")) + + annotationProcessor("org.projectlombok:lombok:1.18.12") + compileOnly("org.projectlombok:lombok:1.18.12") + + testImplementation("org.junit.jupiter:junit-jupiter:5.5.1") + testImplementation("org.mockito:mockito-core:3.2.4") + testImplementation("org.mockito:mockito-junit-jupiter:3.2.4") +} + +tasks.test { + useJUnitPlatform() +} diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeClient.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeClient.java new file mode 100644 index 00000000..79a2698e --- /dev/null +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeClient.java @@ -0,0 +1,56 @@ +package org.hypertrace.core.graphql.attributes; + +import static org.hypertrace.core.attribute.service.v1.AttributeServiceGrpc.AttributeServiceStub; +import static org.hypertrace.core.attribute.service.v1.AttributeServiceGrpc.newStub; + +import io.grpc.CallCredentials; +import io.reactivex.rxjava3.core.Observable; +import java.util.concurrent.TimeUnit; +import javax.inject.Inject; +import javax.inject.Singleton; +import org.hypertrace.core.attribute.service.v1.AttributeMetadata; +import org.hypertrace.core.attribute.service.v1.Empty; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; +import org.hypertrace.core.graphql.utils.grpc.GraphQlGrpcContextBuilder; +import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +@Singleton +class AttributeClient { + private static final int DEFAULT_DEADLINE_SEC = 10; + private final AttributeServiceStub attributeServiceClient; + private final GraphQlGrpcContextBuilder grpcContextBuilder; + private final AttributeModelTranslator translator; + private static final Logger LOG = LoggerFactory.getLogger(AttributeClient.class); + + @Inject + AttributeClient( + GraphQlServiceConfig serviceConfig, + GraphQlGrpcContextBuilder grpcContextBuilder, + GrpcChannelRegistry grpcChannelRegistry, + CallCredentials credentials, + AttributeModelTranslator translator) { + this.grpcContextBuilder = grpcContextBuilder; + this.translator = translator; + + this.attributeServiceClient = + newStub( + grpcChannelRegistry.forAddress( + serviceConfig.getAttributeServiceHost(), + serviceConfig.getAttributeServicePort())) + .withCallCredentials(credentials); + } + + public Observable queryAll(GraphQlRequestContext requestContext) { + return this.grpcContextBuilder + .build(requestContext) + .streamInContext( + streamObserver -> + this.attributeServiceClient + .withDeadlineAfter(DEFAULT_DEADLINE_SEC, TimeUnit.SECONDS) + .findAll(Empty.getDefaultInstance(), streamObserver)) + .mapOptional(this.translator::translate); + } +} diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModel.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModel.java new file mode 100644 index 00000000..8e42747e --- /dev/null +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModel.java @@ -0,0 +1,22 @@ +package org.hypertrace.core.graphql.attributes; + +import java.util.List; + +public interface AttributeModel { + + String id(); + + AttributeModelScope scope(); + + String key(); + + String displayName(); + + AttributeModelType type(); + + String units(); + + boolean requiresAggregation(); + + List supportedMetricAggregationTypes(); +} diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelMetricAggregationType.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelMetricAggregationType.java new file mode 100644 index 00000000..4154650a --- /dev/null +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelMetricAggregationType.java @@ -0,0 +1,12 @@ +package org.hypertrace.core.graphql.attributes; + +public enum AttributeModelMetricAggregationType { + COUNT, + AVG, + SUM, + MIN, + MAX, + AVGRATE, + PERCENTILE, + DISTINCT_COUNT +} diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelScope.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelScope.java new file mode 100644 index 00000000..5a6a36d1 --- /dev/null +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelScope.java @@ -0,0 +1,17 @@ +package org.hypertrace.core.graphql.attributes; + +public enum AttributeModelScope { + TRACE, + SPAN, + INTERACTION, + DOMAIN_EVENT, + API, + SERVICE, + DOMAIN, + TRANSACTION, + SESSION, + API_TRACE, + BACKEND, + BACKEND_TRACE, + ACTOR +} diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java new file mode 100644 index 00000000..01335ffb --- /dev/null +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java @@ -0,0 +1,138 @@ +package org.hypertrace.core.graphql.attributes; + +import java.util.List; +import java.util.Optional; +import java.util.UnknownFormatConversionException; +import java.util.stream.Collectors; +import org.hypertrace.core.attribute.service.v1.AggregateFunction; +import org.hypertrace.core.attribute.service.v1.AttributeKind; +import org.hypertrace.core.attribute.service.v1.AttributeMetadata; +import org.hypertrace.core.attribute.service.v1.AttributeScope; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +class AttributeModelTranslator { + private static final Logger LOGGER = LoggerFactory.getLogger(AttributeModelTranslator.class); + + public Optional translate(AttributeMetadata attributeMetadata) { + try { + return Optional.of( + new DefaultAttributeModel( + attributeMetadata.getId(), + this.convertScope(attributeMetadata.getScope()), + attributeMetadata.getKey(), + attributeMetadata.getDisplayName(), + this.convertType(attributeMetadata.getValueKind()), + attributeMetadata.getUnit(), + attributeMetadata.getOnlyAggregationsAllowed(), + this.convertMetricAggregationTypes( + attributeMetadata.getSupportedAggregationsList()))); + } catch (Exception e) { + LOGGER.warn("Dropping attribute {} : {}", attributeMetadata.getId(), e.getMessage()); + return Optional.empty(); + } + } + + private List convertMetricAggregationTypes( + List aggregationTypes) { + return aggregationTypes.stream() + .map(this::convertMetricAggregationType) + .collect(Collectors.toUnmodifiableList()); + } + + private AttributeModelMetricAggregationType convertMetricAggregationType( + AggregateFunction aggregateFunction) { + switch (aggregateFunction) { + case COUNT: + return AttributeModelMetricAggregationType.COUNT; + case AVG: + return AttributeModelMetricAggregationType.AVG; + case SUM: + return AttributeModelMetricAggregationType.SUM; + case MIN: + return AttributeModelMetricAggregationType.MIN; + case MAX: + return AttributeModelMetricAggregationType.MAX; + case AVGRATE: + return AttributeModelMetricAggregationType.AVGRATE; + case PERCENTILE: + return AttributeModelMetricAggregationType.PERCENTILE; + case DISTINCT_COUNT: + return AttributeModelMetricAggregationType.DISTINCT_COUNT; + case AGG_UNDEFINED: + case UNRECOGNIZED: + default: + throw new UnknownFormatConversionException( + String.format("Unrecognized aggregate function %s", aggregateFunction.name())); + } + } + + private AttributeModelType convertType(AttributeKind kind) { + switch (kind) { + case TYPE_STRING: + return AttributeModelType.STRING; + case TYPE_BOOL: + return AttributeModelType.BOOLEAN; + case TYPE_INT64: + return AttributeModelType.LONG; + case TYPE_DOUBLE: + return AttributeModelType.DOUBLE; + case TYPE_TIMESTAMP: + return AttributeModelType.TIMESTAMP; + case TYPE_STRING_MAP: + return AttributeModelType.STRING_MAP; + case KIND_UNDEFINED: + case UNRECOGNIZED: + case TYPE_BYTES: + case TYPE_STRING_ARRAY: + case TYPE_INT64_ARRAY: + case TYPE_DOUBLE_ARRAY: + case TYPE_BOOL_ARRAY: + default: + throw new UnknownFormatConversionException( + String.format("Unrecognized attribute kind %s", kind.name())); + } + } + + private AttributeModelScope convertScope(AttributeScope scope) { + switch (scope) { + case TRACE: + return AttributeModelScope.TRACE; + case EVENT: + return AttributeModelScope.SPAN; + case INTERACTION: + return AttributeModelScope.INTERACTION; + case DOMAIN_EVENT: + return AttributeModelScope.DOMAIN_EVENT; + case API: + return AttributeModelScope.API; + case SERVICE: + return AttributeModelScope.SERVICE; + case DOMAIN: + return AttributeModelScope.DOMAIN; + case TRANSACTION: + return AttributeModelScope.TRANSACTION; + case SESSION: + return AttributeModelScope.SESSION; + case API_TRACE: + return AttributeModelScope.API_TRACE; + case BACKEND: + return AttributeModelScope.BACKEND; + case BACKEND_TRACE: + return AttributeModelScope.BACKEND_TRACE; + case ACTOR: + return AttributeModelScope.ACTOR; + case SCOPE_UNDEFINED: + case ENTITY: + case EVENT_EVENT_EDGE: + case ENTITY_EVENT_EDGE: + case ENTITY_ENTITY_EDGE: + case THREAT_ACTOR: + case CLUSTERS_SNAPSHOT: + case UNRECOGNIZED: + default: + throw new UnknownFormatConversionException( + String.format("Unrecognized attribute scope %s", scope.name())); + } + } +} diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelType.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelType.java new file mode 100644 index 00000000..ca699ef4 --- /dev/null +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelType.java @@ -0,0 +1,10 @@ +package org.hypertrace.core.graphql.attributes; + +public enum AttributeModelType { + STRING, + BOOLEAN, + LONG, + DOUBLE, + TIMESTAMP, + STRING_MAP +} diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStore.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStore.java new file mode 100644 index 00000000..74dcd98a --- /dev/null +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStore.java @@ -0,0 +1,21 @@ +package org.hypertrace.core.graphql.attributes; + +import io.reactivex.rxjava3.core.Single; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; + +public interface AttributeStore { + Single> getAll(GraphQlRequestContext context); + + Single get(GraphQlRequestContext context, AttributeModelScope scope, String key); + + Single> get( + GraphQlRequestContext context, AttributeModelScope scope, Collection keys); + + Single getIdAttribute(GraphQlRequestContext context, AttributeModelScope scope); + + Single getForeignIdAttribute( + GraphQlRequestContext context, AttributeModelScope scope, AttributeModelScope foreignScope); +} diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStoreModule.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStoreModule.java new file mode 100644 index 00000000..b9650221 --- /dev/null +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStoreModule.java @@ -0,0 +1,31 @@ +package org.hypertrace.core.graphql.attributes; + +import static org.hypertrace.core.graphql.attributes.AttributeModelScope.SPAN; +import static org.hypertrace.core.graphql.attributes.AttributeModelScope.TRACE; +import static org.hypertrace.core.graphql.attributes.IdMapping.forForeignId; +import static org.hypertrace.core.graphql.attributes.IdMapping.forId; + +import com.google.inject.AbstractModule; +import com.google.inject.multibindings.Multibinder; +import io.grpc.CallCredentials; +import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; +import org.hypertrace.core.graphql.utils.grpc.GraphQlGrpcContextBuilder; +import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; + +public class AttributeStoreModule extends AbstractModule { + + @Override + protected void configure() { + bind(AttributeStore.class).to(CachingAttributeStore.class); + requireBinding(GraphQlServiceConfig.class); + requireBinding(GraphQlGrpcContextBuilder.class); + requireBinding(CallCredentials.class); + requireBinding(GrpcChannelRegistry.class); + + Multibinder idBinder = Multibinder.newSetBinder(binder(), IdMapping.class); + idBinder.addBinding().toInstance(forId(SPAN, "id")); + idBinder.addBinding().toInstance(forForeignId(SPAN, TRACE, "traceId")); + + idBinder.addBinding().toInstance(forId(TRACE, "id")); + } +} diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java new file mode 100644 index 00000000..27788719 --- /dev/null +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java @@ -0,0 +1,145 @@ +package org.hypertrace.core.graphql.attributes; + +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import com.google.common.collect.ImmutableTable; +import com.google.common.collect.Table; +import io.reactivex.rxjava3.core.Maybe; +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.Single; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.NoSuchElementException; +import java.util.Optional; +import java.util.concurrent.TimeUnit; +import java.util.function.Function; +import java.util.stream.Collectors; +import javax.inject.Inject; +import javax.inject.Singleton; +import org.hypertrace.core.graphql.context.ContextualCachingKey; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; + +@Singleton +class CachingAttributeStore implements AttributeStore { + + private final AttributeClient attributeClient; + private final IdLookup idLookup; + + @Inject + CachingAttributeStore(AttributeClient attributeClient, IdLookup idLookup) { + this.attributeClient = attributeClient; + this.idLookup = idLookup; + } + + // Has science gone too far?! + private final LoadingCache< + ContextualCachingKey, Single>> + cache = + CacheBuilder.newBuilder() + .maximumSize(1000) + .expireAfterWrite(15, TimeUnit.MINUTES) + .build(CacheLoader.from(this::loadTable)); + + @Override + public Single> getAll(GraphQlRequestContext context) { + return this.getOrInvalidate(context).map(table -> List.copyOf(table.values())); + } + + @Override + public Single get( + GraphQlRequestContext context, AttributeModelScope scope, String key) { + return this.getOrInvalidate(context) + .map(table -> Optional.ofNullable(table.get(scope, key))) + .flatMapMaybe(Maybe::fromOptional) + .switchIfEmpty(Single.error(this.buildErrorForMissingAttribute(scope, key))); + } + + @Override + public Single> get( + GraphQlRequestContext context, AttributeModelScope scope, Collection keys) { + return this.getOrInvalidate(context) + .flatMap(table -> this.getValuesOrError(scope, table.row(scope), keys)); + } + + @Override + public Single getIdAttribute( + GraphQlRequestContext context, AttributeModelScope scope) { + return this.getIdKey(scope).flatMap(key -> this.get(context, scope, key)); + } + + @Override + public Single getForeignIdAttribute( + GraphQlRequestContext context, AttributeModelScope scope, AttributeModelScope foreignScope) { + return this.getForeignIdKey(scope, foreignScope).flatMap(key -> this.get(context, scope, key)); + } + + private Single> loadTable( + ContextualCachingKey cachingKey) { + return this.attributeClient + .queryAll(cachingKey.getContext()) + .toList() + .map(this::buildTable) + .cache(); + } + + private Table buildTable( + List attributes) { + return attributes.stream() + .collect( + ImmutableTable.toImmutableTable( + AttributeModel::scope, AttributeModel::key, Function.identity())); + } + + private Single> getOrInvalidate( + GraphQlRequestContext context) { + return this.cache + .getUnchecked(context.getCachingKey()) + .doOnError(x -> this.cache.invalidate(context.getCachingKey())); + } + + private Single getForeignIdKey( + AttributeModelScope scope, AttributeModelScope foreignScope) { + return Maybe.fromOptional(this.idLookup.foreignIdKey(scope, foreignScope)) + .switchIfEmpty( + Single.error(this.buildErrorForMissingForeignScopeMapping(scope, foreignScope))); + } + + private Single getIdKey(AttributeModelScope scope) { + return Maybe.fromOptional(this.idLookup.idKey(scope)) + .switchIfEmpty(Single.error(this.buildErrorForMissingIdMapping(scope))); + } + + private Single> getValuesOrError( + AttributeModelScope scope, + Map definedAttributes, + Collection requestedAttributeKeys) { + return Observable.fromIterable(requestedAttributeKeys) + .flatMap( + key -> + definedAttributes.containsKey(key) + ? Observable.just(definedAttributes.get(key)) + : Observable.error(this.buildErrorForMissingAttribute(scope, key))) + .collect(Collectors.toUnmodifiableMap(AttributeModel::key, Function.identity())); + } + + private NoSuchElementException buildErrorForMissingAttribute( + AttributeModelScope scope, String key) { + return new NoSuchElementException( + String.format("No attribute available for scope '%s' and key '%s'", scope.name(), key)); + } + + private NoSuchElementException buildErrorForMissingForeignScopeMapping( + AttributeModelScope scope, AttributeModelScope foreignScope) { + return new NoSuchElementException( + String.format( + "No id attribute registered for scope '%s' and foreign scope '%s'", + scope.name(), foreignScope.name())); + } + + private NoSuchElementException buildErrorForMissingIdMapping(AttributeModelScope scope) { + return new NoSuchElementException( + String.format("No id attribute registered for scope '%s'", scope.name())); + } +} diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/DefaultAttributeModel.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/DefaultAttributeModel.java new file mode 100644 index 00000000..dc55e97a --- /dev/null +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/DefaultAttributeModel.java @@ -0,0 +1,20 @@ +package org.hypertrace.core.graphql.attributes; + +import java.util.List; +import lombok.Builder; +import lombok.Value; +import lombok.experimental.Accessors; + +@Value +@Builder +@Accessors(fluent = true) +class DefaultAttributeModel implements AttributeModel { + String id; + AttributeModelScope scope; + String key; + String displayName; + AttributeModelType type; + String units; + boolean requiresAggregation; + List supportedMetricAggregationTypes; +} diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/DefaultIdMapping.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/DefaultIdMapping.java new file mode 100644 index 00000000..a1ba1984 --- /dev/null +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/DefaultIdMapping.java @@ -0,0 +1,20 @@ +package org.hypertrace.core.graphql.attributes; + +import java.util.Optional; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import lombok.Value; +import lombok.experimental.Accessors; + +@Value +@Accessors(fluent = true) +class DefaultIdMapping implements IdMapping { + @Nonnull AttributeModelScope containingScope; + @Nonnull String idAttribute; + @Nullable AttributeModelScope foreignScope; + + @Override + public AttributeModelScope foreignScope() { + return Optional.ofNullable(this.foreignScope).orElse(containingScope); + } +} diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdLookup.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdLookup.java new file mode 100644 index 00000000..7886c99a --- /dev/null +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdLookup.java @@ -0,0 +1,30 @@ +package org.hypertrace.core.graphql.attributes; + +import com.google.common.collect.ImmutableTable; +import java.util.Optional; +import java.util.Set; +import javax.inject.Inject; +import javax.inject.Singleton; + +@Singleton +class IdLookup { + + private final ImmutableTable idTable; + + @Inject + IdLookup(Set idMappings) { + this.idTable = + idMappings.stream() + .collect( + ImmutableTable.toImmutableTable( + IdMapping::containingScope, IdMapping::foreignScope, IdMapping::idAttribute)); + } + + Optional idKey(AttributeModelScope scope) { + return this.foreignIdKey(scope, scope); + } + + Optional foreignIdKey(AttributeModelScope scope, AttributeModelScope foreignScope) { + return Optional.ofNullable(this.idTable.get(scope, foreignScope)); + } +} diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdMapping.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdMapping.java new file mode 100644 index 00000000..8808fa70 --- /dev/null +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdMapping.java @@ -0,0 +1,31 @@ +package org.hypertrace.core.graphql.attributes; + +import java.util.Objects; +import javax.annotation.Nonnull; + +public interface IdMapping { + + AttributeModelScope containingScope(); + + String idAttribute(); + + default AttributeModelScope foreignScope() { + return null; + } + + static IdMapping forId(@Nonnull AttributeModelScope scope, @Nonnull String idAttribute) { + Objects.requireNonNull(scope); + Objects.requireNonNull(idAttribute); + return new DefaultIdMapping(scope, idAttribute, null); + } + + static IdMapping forForeignId( + @Nonnull AttributeModelScope scope, + @Nonnull AttributeModelScope foreignScope, + @Nonnull String idAttribute) { + Objects.requireNonNull(scope); + Objects.requireNonNull(foreignScope); + Objects.requireNonNull(idAttribute); + return new DefaultIdMapping(scope, idAttribute, foreignScope); + } +} diff --git a/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslatorTest.java b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslatorTest.java new file mode 100644 index 00000000..7912a8a7 --- /dev/null +++ b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslatorTest.java @@ -0,0 +1,64 @@ +package org.hypertrace.core.graphql.attributes; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; +import java.util.Optional; +import org.hypertrace.core.attribute.service.v1.AggregateFunction; +import org.hypertrace.core.attribute.service.v1.AttributeKind; +import org.hypertrace.core.attribute.service.v1.AttributeMetadata; +import org.hypertrace.core.attribute.service.v1.AttributeScope; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +class AttributeModelTranslatorTest { + + private AttributeModelTranslator translator; + private AttributeMetadata metadata; + private AttributeModel expectedModel; + + @BeforeEach + void beforeEach() { + this.translator = new AttributeModelTranslator(); + this.metadata = + AttributeMetadata.newBuilder() + .setId("id") + .setScope(AttributeScope.TRACE) + .setKey("key") + .setDisplayName("display name") + .setValueKind(AttributeKind.TYPE_STRING) + .setUnit("unit") + .setOnlyAggregationsAllowed(true) + .addAllSupportedAggregations(List.of(AggregateFunction.SUM, AggregateFunction.AVG)) + .build(); + + this.expectedModel = + DefaultAttributeModel.builder() + .id("id") + .scope(AttributeModelScope.TRACE) + .key("key") + .displayName("display name") + .type(AttributeModelType.STRING) + .units("unit") + .requiresAggregation(true) + .supportedMetricAggregationTypes( + List.of( + AttributeModelMetricAggregationType.SUM, + AttributeModelMetricAggregationType.AVG)) + .build(); + } + + @Test + void canTranslateAttributeModel() { + assertEquals(Optional.of(this.expectedModel), this.translator.translate(this.metadata)); + } + + @Test + void returnsEmptyIfUnsupportedTranslation() { + AttributeMetadata unsupportedMetadata = + AttributeMetadata.newBuilder(this.metadata) + .addSupportedAggregations(AggregateFunction.AGG_UNDEFINED) + .build(); + assertEquals(Optional.empty(), this.translator.translate(unsupportedMetadata)); + } +} diff --git a/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java new file mode 100644 index 00000000..88ccc1d3 --- /dev/null +++ b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java @@ -0,0 +1,236 @@ +package org.hypertrace.core.graphql.attributes; + +import static org.hypertrace.core.graphql.attributes.AttributeModelScope.SPAN; +import static org.hypertrace.core.graphql.attributes.AttributeModelScope.TRACE; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.Single; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.NoSuchElementException; +import java.util.Optional; +import org.hypertrace.core.graphql.context.ContextualCachingKey; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.mockito.junit.jupiter.MockitoSettings; + +@ExtendWith(MockitoExtension.class) +@MockitoSettings +class CachingAttributeStoreTest { + @Mock AttributeClient mockAttributeClient; + @Mock IdLookup mockIdLookup; + + private final AttributeModel traceAttribute = + DefaultAttributeModel.builder().scope(TRACE).key("traceKey").build(); + private final AttributeModel spanAttribute = + DefaultAttributeModel.builder().scope(SPAN).key("spanKey").build(); + + private AttributeStore attributeStore; + + @BeforeEach + void beforeEach() { + this.attributeStore = new CachingAttributeStore(this.mockAttributeClient, this.mockIdLookup); + } + + @Test + void cachesConsecutiveGetAllCallsWithSameCacheKey() { + List expected = List.of(spanAttribute, traceAttribute); + GraphQlRequestContext context = this.buildNewMockContext(); + when(this.mockAttributeClient.queryAll(eq(context))) + .thenReturn(Observable.fromIterable(expected)); + assertEquals(expected, this.attributeStore.getAll(context).blockingGet()); + assertEquals(expected, this.attributeStore.getAll(context).blockingGet()); + + verify(this.mockAttributeClient, times(1)).queryAll(any()); + } + + @Test + void cachesConsecutiveGetCallsWithSameCacheKey() { + GraphQlRequestContext context = this.buildNewMockContext(); + when(this.mockAttributeClient.queryAll(eq(context))) + .thenReturn(Observable.just(spanAttribute, traceAttribute)); + AttributeModel spanResult = + this.attributeStore + .get(context, this.spanAttribute.scope(), this.spanAttribute.key()) + .blockingGet(); + assertEquals(this.spanAttribute, spanResult); + + AttributeModel traceResult = + this.attributeStore + .get(context, this.traceAttribute.scope(), this.traceAttribute.key()) + .blockingGet(); + assertEquals(this.traceAttribute, traceResult); + + verify(this.mockAttributeClient, times(1)).queryAll(any()); + } + + @Test + void throwsErrorIfNoKeyMatch() { + GraphQlRequestContext context = this.buildNewMockContext(); + when(this.mockAttributeClient.queryAll(eq(context))).thenReturn(Observable.empty()); + + assertThrows( + NoSuchElementException.class, + this.attributeStore.get(context, SPAN, "nonExistentKey")::blockingGet); + } + + @Test + void lazilyFetchesAndCachesResultsOnSubscribe() { + GraphQlRequestContext context = this.buildNewMockContext(); + // Mutable, so we can clear it after getting a Single + List attributesList = new ArrayList<>(List.of(this.spanAttribute)); + + when(this.mockAttributeClient.queryAll(eq(context))) + .thenReturn(Observable.defer(() -> Observable.fromIterable(attributesList))); + + Single> resultSingle = this.attributeStore.getAll(context); + attributesList.clear(); + assertEquals(Collections.emptyList(), resultSingle.blockingGet()); + + attributesList.add(this.spanAttribute); + assertEquals(Collections.emptyList(), resultSingle.blockingGet()); + + // Now, make a new request + assertEquals(Collections.emptyList(), this.attributeStore.getAll(context).blockingGet()); + } + + @Test + void supportsMultipleConcurrentCacheKeys() { + GraphQlRequestContext firstContext = this.buildNewMockContext(); + GraphQlRequestContext secondContext = this.buildNewMockContext(); + AttributeModel alternateSpanAttribute = + DefaultAttributeModel.builder() + .scope(this.spanAttribute.scope()) + .key(this.spanAttribute.key()) + .displayName("some new display name") + .build(); + + when(this.mockAttributeClient.queryAll(eq(firstContext))) + .thenReturn(Observable.just(spanAttribute)); + when(this.mockAttributeClient.queryAll(eq(secondContext))) + .thenReturn(Observable.just(alternateSpanAttribute)); + + AttributeModel firstSpanResult = + this.attributeStore + .get(firstContext, this.spanAttribute.scope(), this.spanAttribute.key()) + .blockingGet(); + assertEquals(this.spanAttribute, firstSpanResult); + // Fetch it a second time to make sure it's not just the first call + assertEquals( + firstSpanResult, + this.attributeStore + .get(firstContext, this.spanAttribute.scope(), this.spanAttribute.key()) + .blockingGet()); + + AttributeModel secondSpanResult = + this.attributeStore + .get(secondContext, this.spanAttribute.scope(), this.spanAttribute.key()) + .blockingGet(); + + assertEquals(alternateSpanAttribute, secondSpanResult); + assertNotEquals(firstSpanResult, secondSpanResult); + + verify(this.mockAttributeClient, times(1)).queryAll(eq(firstContext)); + verify(this.mockAttributeClient, times(1)).queryAll(eq(secondContext)); + } + + @Test + void supportsAndCachesMultiValuedGet() { + GraphQlRequestContext context = this.buildNewMockContext(); + when(this.mockAttributeClient.queryAll(eq(context))).thenReturn(Observable.just(spanAttribute)); + this.attributeStore + .get(context, this.spanAttribute.scope(), this.spanAttribute.key()) + .blockingSubscribe(); + + Map mapResult = + this.attributeStore + .get(context, this.spanAttribute.scope(), List.of(this.spanAttribute.key())) + .blockingGet(); + assertEquals(1, mapResult.size()); + assertTrue(mapResult.containsKey(this.spanAttribute.key())); + assertEquals(this.spanAttribute, mapResult.get(this.spanAttribute.key())); + verify(this.mockAttributeClient, times(1)).queryAll(eq(context)); + } + + @Test + void supportsAndCachesIdLookup() { + GraphQlRequestContext context = this.buildNewMockContext(); + DefaultAttributeModel spanIdAttribute = + DefaultAttributeModel.builder().scope(SPAN).key("id").build(); + + when(this.mockAttributeClient.queryAll(eq(context))) + .thenReturn(Observable.just(spanIdAttribute)); + when(this.mockIdLookup.idKey(eq(SPAN))).thenReturn(Optional.of("id")); + + assertEquals( + spanIdAttribute, + this.attributeStore.getIdAttribute(context, spanIdAttribute.scope()).blockingGet()); + + assertEquals( + spanIdAttribute, + this.attributeStore.getIdAttribute(context, spanIdAttribute.scope()).blockingGet()); + + verify(this.mockAttributeClient, times(1)).queryAll(eq(context)); + } + + @Test + void returnsErrorForMissingIdMapping() { + assertThrows( + NoSuchElementException.class, this.attributeStore.getIdAttribute(null, SPAN)::blockingGet); + } + + @Test + void supportsForeignIdLookup() { + GraphQlRequestContext context = this.buildNewMockContext(); + DefaultAttributeModel spanTraceIdAttribute = + DefaultAttributeModel.builder().scope(SPAN).key("traceId").build(); + + when(this.mockIdLookup.foreignIdKey(eq(SPAN), eq(TRACE))).thenReturn(Optional.of("traceId")); + when(this.mockAttributeClient.queryAll(eq(context))) + .thenReturn(Observable.just(spanTraceIdAttribute)); + + assertEquals( + spanTraceIdAttribute, + this.attributeStore.getForeignIdAttribute(context, SPAN, TRACE).blockingGet()); + } + + @Test + void retriesOnError() { + GraphQlRequestContext context = this.buildNewMockContext(); + when(this.mockAttributeClient.queryAll(eq(context))) + .thenReturn(Observable.error(IllegalStateException::new)); + + assertThrows(IllegalStateException.class, this.attributeStore.getAll(context)::blockingGet); + + when(this.mockAttributeClient.queryAll(eq(context))) + .thenReturn(Observable.just(this.spanAttribute)); + + assertEquals(List.of(this.spanAttribute), this.attributeStore.getAll(context).blockingGet()); + + verify(this.mockAttributeClient, times(2)).queryAll(any()); + } + + private GraphQlRequestContext buildNewMockContext() { + ContextualCachingKey mockCachingKey = mock(ContextualCachingKey.class); + GraphQlRequestContext mockContext = mock(GraphQlRequestContext.class); + when(mockCachingKey.getContext()).thenReturn(mockContext); + when(mockContext.getCachingKey()).thenReturn(mockCachingKey); + return mockContext; + } +} diff --git a/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/IdLookupTest.java b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/IdLookupTest.java new file mode 100644 index 00000000..02cddd2c --- /dev/null +++ b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/IdLookupTest.java @@ -0,0 +1,27 @@ +package org.hypertrace.core.graphql.attributes; + +import static org.hypertrace.core.graphql.attributes.AttributeModelScope.SPAN; +import static org.hypertrace.core.graphql.attributes.AttributeModelScope.TRACE; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.Optional; +import java.util.Set; +import org.junit.jupiter.api.Test; + +class IdLookupTest { + + @Test + void canLookupIds() { + IdLookup idLookup = + new IdLookup( + Set.of( + IdMapping.forId(SPAN, "s-id"), + IdMapping.forId(TRACE, "t-id"), + IdMapping.forForeignId(SPAN, TRACE, "s-t-id"))); + + assertEquals(Optional.of("s-id"), idLookup.idKey(SPAN)); + assertEquals(Optional.of("t-id"), idLookup.idKey(TRACE)); + assertEquals(Optional.of("s-t-id"), idLookup.foreignIdKey(SPAN, TRACE)); + assertEquals(Optional.empty(), idLookup.foreignIdKey(TRACE, SPAN)); + } +} diff --git a/hypertrace-core-graphql-common-schema/build.gradle.kts b/hypertrace-core-graphql-common-schema/build.gradle.kts new file mode 100644 index 00000000..8cad312f --- /dev/null +++ b/hypertrace-core-graphql-common-schema/build.gradle.kts @@ -0,0 +1,31 @@ +plugins { + `java-library` + jacoco + id("org.hypertrace.jacoco-report-plugin") +} + +java { + sourceCompatibility = JavaVersion.VERSION_11 +} + +dependencies { + api("com.google.inject:guice:4.2.3") + api("com.graphql-java:graphql-java:14.0") + api(project(":hypertrace-core-graphql-attribute-store")) + api(project(":hypertrace-core-graphql-context")) + api("io.reactivex.rxjava3:rxjava:3.0.2") + api("io.github.graphql-java:graphql-java-annotations:8.0") + + annotationProcessor("org.projectlombok:lombok:1.18.12") + compileOnly("org.projectlombok:lombok:1.18.12") + + implementation(project(":hypertrace-core-graphql-deserialization")) + implementation(project(":hypertrace-core-graphql-schema-utils")) + testImplementation("org.junit.jupiter:junit-jupiter:5.5.1") + testImplementation("org.mockito:mockito-core:3.2.4") + testImplementation("org.mockito:mockito-junit-jupiter:3.2.4") +} + +tasks.test { + useJUnitPlatform() +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/CommonDeserializationModule.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/CommonDeserializationModule.java new file mode 100644 index 00000000..1bffe8f5 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/CommonDeserializationModule.java @@ -0,0 +1,42 @@ +package org.hypertrace.core.graphql.common.deserialization; + +import com.google.inject.AbstractModule; +import com.google.inject.Key; +import com.google.inject.TypeLiteral; +import com.google.inject.multibindings.Multibinder; +import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeKeyArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.page.LimitArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.page.OffsetArgument; +import org.hypertrace.core.graphql.deserialization.ArgumentDeserializationConfig; + +public class CommonDeserializationModule extends AbstractModule { + + @Override + protected void configure() { + Multibinder deserializationConfigMultibinder = + Multibinder.newSetBinder(binder(), ArgumentDeserializationConfig.class); + + deserializationConfigMultibinder.addBinding().to(TimeRangeArgumentDeserializationConfig.class); + deserializationConfigMultibinder + .addBinding() + .toInstance( + ArgumentDeserializationConfig.forPrimitive( + LimitArgument.ARGUMENT_NAME, LimitArgument.class)); + deserializationConfigMultibinder + .addBinding() + .toInstance( + ArgumentDeserializationConfig.forPrimitive( + OffsetArgument.ARGUMENT_NAME, OffsetArgument.class)); + deserializationConfigMultibinder.addBinding().to(OrderArgumentDeserializationConfig.class); + deserializationConfigMultibinder.addBinding().to(FilterArgumentDeserializationConfig.class); + + deserializationConfigMultibinder + .addBinding() + .toInstance( + ArgumentDeserializationConfig.forPrimitive( + AttributeKeyArgument.ARGUMENT_NAME, AttributeKeyArgument.class)); + + requireBinding(Key.get(new TypeLiteral>() {})); + } +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/FilterArgumentDeserializationConfig.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/FilterArgumentDeserializationConfig.java new file mode 100644 index 00000000..e45425dc --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/FilterArgumentDeserializationConfig.java @@ -0,0 +1,64 @@ +package org.hypertrace.core.graphql.common.deserialization; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.Module; +import com.fasterxml.jackson.databind.module.SimpleModule; +import java.util.List; +import javax.inject.Inject; +import lombok.NoArgsConstructor; +import lombok.Value; +import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterOperatorType; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterType; +import org.hypertrace.core.graphql.deserialization.ArgumentDeserializationConfig; + +class FilterArgumentDeserializationConfig implements ArgumentDeserializationConfig { + + private final Class attributeScopeImplementationClass; + + @Inject + FilterArgumentDeserializationConfig( + Class attributeScopeImplementationClass) { + this.attributeScopeImplementationClass = attributeScopeImplementationClass; + } + + @Override + public String getArgumentKey() { + return FilterArgument.ARGUMENT_NAME; + } + + @Override + public Class getArgumentSchema() { + return FilterArgument.class; + } + + @Override + public List jacksonModules() { + return List.of( + new SimpleModule() + .addAbstractTypeMapping(FilterArgument.class, DefaultFilterArgument.class) + .addAbstractTypeMapping(AttributeScope.class, this.attributeScopeImplementationClass)); + } + + @Value + @Accessors(fluent = true) + @NoArgsConstructor(force = true) + private static class DefaultFilterArgument implements FilterArgument { + @JsonProperty(FILTER_ARGUMENT_TYPE) + FilterType type; + + @JsonProperty(FILTER_ARGUMENT_KEY) + String key; + + @JsonProperty(FILTER_ARGUMENT_OPERATOR) + FilterOperatorType operator; + + @JsonProperty(FILTER_ARGUMENT_VALUE) + Object value; + + @JsonProperty(FILTER_ARGUMENT_ID_TYPE) + AttributeScope idScope; + } +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/OrderArgumentDeserializationConfig.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/OrderArgumentDeserializationConfig.java new file mode 100644 index 00000000..78c22050 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/OrderArgumentDeserializationConfig.java @@ -0,0 +1,42 @@ +package org.hypertrace.core.graphql.common.deserialization; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.Module; +import com.fasterxml.jackson.databind.module.SimpleModule; +import java.util.List; +import lombok.NoArgsConstructor; +import lombok.Value; +import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderDirection; +import org.hypertrace.core.graphql.deserialization.ArgumentDeserializationConfig; + +class OrderArgumentDeserializationConfig implements ArgumentDeserializationConfig { + + @Override + public String getArgumentKey() { + return OrderArgument.ARGUMENT_NAME; + } + + @Override + public Class getArgumentSchema() { + return OrderArgument.class; + } + + @Override + public List jacksonModules() { + return List.of( + new SimpleModule().addAbstractTypeMapping(OrderArgument.class, DefaultOrderArgument.class)); + } + + @Value + @Accessors(fluent = true) + @NoArgsConstructor(force = true) + private static class DefaultOrderArgument implements OrderArgument { + @JsonProperty(ORDER_DIRECTION_NAME) + OrderDirection direction = OrderDirection.DESC; + + @JsonProperty(ORDER_KEY_NAME) + String key; + } +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/TimeRangeArgumentDeserializationConfig.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/TimeRangeArgumentDeserializationConfig.java new file mode 100644 index 00000000..c42f8e31 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/TimeRangeArgumentDeserializationConfig.java @@ -0,0 +1,42 @@ +package org.hypertrace.core.graphql.common.deserialization; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.Module; +import com.fasterxml.jackson.databind.module.SimpleModule; +import java.time.Instant; +import java.util.List; +import lombok.NoArgsConstructor; +import lombok.Value; +import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument; +import org.hypertrace.core.graphql.deserialization.ArgumentDeserializationConfig; + +class TimeRangeArgumentDeserializationConfig implements ArgumentDeserializationConfig { + + @Override + public String getArgumentKey() { + return TimeRangeArgument.ARGUMENT_NAME; + } + + @Override + public Class getArgumentSchema() { + return TimeRangeArgument.class; + } + + @Override + public List jacksonModules() { + return List.of( + new SimpleModule().addAbstractTypeMapping(TimeRangeArgument.class, DefaultTimeRange.class)); + } + + @Value + @Accessors(fluent = true) + @NoArgsConstructor(force = true) + private static class DefaultTimeRange implements TimeRangeArgument { + @JsonProperty(TIME_RANGE_ARGUMENT_START_TIME) + Instant startTime; + + @JsonProperty(TIME_RANGE_ARGUMENT_END_TIME) + Instant endTime; + } +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/fetcher/InjectableDataFetcher.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/fetcher/InjectableDataFetcher.java new file mode 100644 index 00000000..a910eabd --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/fetcher/InjectableDataFetcher.java @@ -0,0 +1,32 @@ +package org.hypertrace.core.graphql.common.fetcher; + +import graphql.schema.DataFetcher; +import graphql.schema.DataFetchingEnvironment; +import java.util.concurrent.CompletableFuture; +import javax.annotation.Nullable; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; + +public abstract class InjectableDataFetcher implements DataFetcher> { + + private final Class>> dataFetcherClass; + @Nullable private DataFetcher> dataFetcherInstance; + + protected InjectableDataFetcher( + Class>> dataFetcherClass) { + this.dataFetcherClass = dataFetcherClass; + } + + @Override + public final CompletableFuture get(DataFetchingEnvironment environment) throws Exception { + return this.getOrCreateImplementation(environment.getContext()).get(environment); + } + + private DataFetcher> getOrCreateImplementation( + GraphQlRequestContext context) { + if (this.dataFetcherInstance == null) { + this.dataFetcherInstance = context.constructDataFetcher(this.dataFetcherClass); + } + + return this.dataFetcherInstance; + } +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/AttributeAssociation.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/AttributeAssociation.java new file mode 100644 index 00000000..ea0d0b10 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/AttributeAssociation.java @@ -0,0 +1,14 @@ +package org.hypertrace.core.graphql.common.request; + +import org.hypertrace.core.graphql.attributes.AttributeModel; + +public interface AttributeAssociation { + + AttributeModel attribute(); + + T value(); + + static AttributeAssociation of(AttributeModel attribute, T value) { + return new DefaultAttributeAssociation<>(attribute, value); + } +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/AttributeRequest.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/AttributeRequest.java new file mode 100644 index 00000000..b37a3b52 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/AttributeRequest.java @@ -0,0 +1,10 @@ +package org.hypertrace.core.graphql.common.request; + +import org.hypertrace.core.graphql.attributes.AttributeModel; + +public interface AttributeRequest { + + AttributeModel attribute(); + + String alias(); +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/AttributeRequestBuilder.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/AttributeRequestBuilder.java new file mode 100644 index 00000000..dc08042f --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/AttributeRequestBuilder.java @@ -0,0 +1,36 @@ +package org.hypertrace.core.graphql.common.request; + +import graphql.schema.DataFetchingFieldSelectionSet; +import graphql.schema.SelectedField; +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.Single; +import java.util.stream.Stream; +import org.hypertrace.core.graphql.attributes.AttributeModel; +import org.hypertrace.core.graphql.attributes.AttributeModelScope; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; + +public interface AttributeRequestBuilder { + + Single buildForId( + GraphQlRequestContext context, AttributeModelScope attributeModelScope); + + Observable buildForAttributeQueryableSelectionSet( + GraphQlRequestContext context, + AttributeModelScope attributeScope, + DataFetchingFieldSelectionSet attributeQueryableSelectionSet); + + Observable buildForAttributeQueryableFields( + GraphQlRequestContext context, + AttributeModelScope attributeModelScope, + Stream attributeQueryableFields); + + Observable buildForAttributeQueryableFieldsAndId( + GraphQlRequestContext context, + AttributeModelScope attributeScope, + Stream attributeQueryableFields); + + Single buildForKey( + GraphQlRequestContext context, AttributeModelScope attributeModelScope, String attributeKey); + + AttributeRequest buildForAttribute(AttributeModel attribute); +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/CommonRequestModule.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/CommonRequestModule.java new file mode 100644 index 00000000..482f9640 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/CommonRequestModule.java @@ -0,0 +1,27 @@ +package org.hypertrace.core.graphql.common.request; + +import com.google.inject.AbstractModule; +import com.google.inject.Key; +import com.google.inject.TypeLiteral; +import org.hypertrace.core.graphql.attributes.AttributeModelScope; +import org.hypertrace.core.graphql.attributes.AttributeStore; +import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; +import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.core.graphql.common.utils.attributes.AttributeAssociator; +import org.hypertrace.core.graphql.deserialization.ArgumentDeserializer; +import org.hypertrace.core.graphql.utils.schema.GraphQlSelectionFinder; + +public class CommonRequestModule extends AbstractModule { + + @Override + protected void configure() { + bind(ResultSetRequestBuilder.class).to(DefaultResultSetRequestBuilder.class); + bind(AttributeRequestBuilder.class).to(DefaultAttributeRequestBuilder.class); + bind(FilterRequestBuilder.class).to(DefaultFilterRequestBuilder.class); + requireBinding(AttributeStore.class); + requireBinding(ArgumentDeserializer.class); + requireBinding(AttributeAssociator.class); + requireBinding(GraphQlSelectionFinder.class); + requireBinding(Key.get(new TypeLiteral>() {})); + } +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultAttributeAssociation.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultAttributeAssociation.java new file mode 100644 index 00000000..44f7a6d9 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultAttributeAssociation.java @@ -0,0 +1,12 @@ +package org.hypertrace.core.graphql.common.request; + +import lombok.Value; +import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.attributes.AttributeModel; + +@Value +@Accessors(fluent = true) +class DefaultAttributeAssociation implements AttributeAssociation { + AttributeModel attribute; + T value; +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilder.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilder.java new file mode 100644 index 00000000..16a55572 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilder.java @@ -0,0 +1,113 @@ +package org.hypertrace.core.graphql.common.request; + +import graphql.schema.DataFetchingFieldSelectionSet; +import graphql.schema.SelectedField; +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.Single; +import java.util.stream.Stream; +import javax.inject.Inject; +import lombok.Value; +import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.attributes.AttributeModel; +import org.hypertrace.core.graphql.attributes.AttributeModelScope; +import org.hypertrace.core.graphql.attributes.AttributeStore; +import org.hypertrace.core.graphql.common.schema.attributes.AttributeQueryable; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeKeyArgument; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.core.graphql.deserialization.ArgumentDeserializer; +import org.hypertrace.core.graphql.utils.schema.GraphQlSelectionFinder; +import org.hypertrace.core.graphql.utils.schema.SelectionQuery; + +class DefaultAttributeRequestBuilder implements AttributeRequestBuilder { + + private final AttributeStore attributeStore; + private final ArgumentDeserializer argumentDeserializer; + private final GraphQlSelectionFinder selectionFinder; + + @Inject + DefaultAttributeRequestBuilder( + AttributeStore attributeStore, + ArgumentDeserializer argumentDeserializer, + GraphQlSelectionFinder selectionFinder) { + this.attributeStore = attributeStore; + this.argumentDeserializer = argumentDeserializer; + this.selectionFinder = selectionFinder; + } + + @Override + public Single buildForId( + GraphQlRequestContext context, AttributeModelScope attributeScope) { + return this.attributeStore.getIdAttribute(context, attributeScope).map(this::buildForAttribute); + } + + @Override + public Observable buildForAttributeQueryableSelectionSet( + GraphQlRequestContext context, + AttributeModelScope attributeScope, + DataFetchingFieldSelectionSet attributeQueryableSelectionSet) { + return Observable.fromStream( + this.getAttributeKeysForAttributeQueryableSelectionSet(attributeQueryableSelectionSet)) + .flatMapSingle(key -> this.buildForKey(context, attributeScope, key)) + .distinct(); + } + + @Override + public Observable buildForAttributeQueryableFields( + GraphQlRequestContext context, + AttributeModelScope attributeScope, + Stream attributeQueryableFields) { + return Observable.fromStream(attributeQueryableFields) + .map(SelectedField::getSelectionSet) + .flatMap( + selectionSet -> + this.buildForAttributeQueryableSelectionSet(context, attributeScope, selectionSet)) + .distinct(); + } + + @Override + public Observable buildForAttributeQueryableFieldsAndId( + GraphQlRequestContext context, + AttributeModelScope attributeScope, + Stream attributeQueryableFields) { + return this.buildForAttributeQueryableFields(context, attributeScope, attributeQueryableFields) + .mergeWith(this.buildForId(context, attributeScope)) + .distinct(); + } + + @Override + public Single buildForKey( + GraphQlRequestContext context, AttributeModelScope requestScope, String attributeKey) { + return this.attributeStore + .get(context, requestScope, attributeKey) + .map(this::buildForAttribute); + } + + @Override + public AttributeRequest buildForAttribute(AttributeModel attribute) { + return new DefaultAttributeRequest(attribute); + } + + private Stream getAttributeKeysForAttributeQueryableSelectionSet( + DataFetchingFieldSelectionSet selectionSet) { + return this.selectionFinder + .findSelections( + selectionSet, SelectionQuery.namedChild(AttributeQueryable.ATTRIBUTE_FIELD_NAME)) + .flatMap(this::getArgument); + } + + private Stream getArgument(SelectedField attributeField) { + return this.argumentDeserializer + .deserializePrimitive(attributeField.getArguments(), AttributeKeyArgument.class).stream(); + } + + @Value + @Accessors(fluent = true) + static class DefaultAttributeRequest implements AttributeRequest { + AttributeModel attribute; + + @Override + public String alias() { + return attribute.id(); + } + } +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilder.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilder.java new file mode 100644 index 00000000..d68764d7 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilder.java @@ -0,0 +1,92 @@ +package org.hypertrace.core.graphql.common.request; + +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.Single; +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; +import javax.inject.Inject; +import lombok.Value; +import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.attributes.AttributeModelScope; +import org.hypertrace.core.graphql.attributes.AttributeStore; +import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterOperatorType; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterType; +import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.core.graphql.common.utils.attributes.AttributeAssociator; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; + +public class DefaultFilterRequestBuilder implements FilterRequestBuilder { + + private final AttributeAssociator attributeAssociator; + private final AttributeStore attributeStore; + private final Converter scopeConverter; + + @Inject + DefaultFilterRequestBuilder( + AttributeAssociator attributeAssociator, + AttributeStore attributeStore, + Converter scopeConverter) { + + this.attributeAssociator = attributeAssociator; + this.attributeStore = attributeStore; + this.scopeConverter = scopeConverter; + } + + @Override + public Single>> build( + GraphQlRequestContext requestContext, + AttributeModelScope scope, + Collection filterArguments) { + return Observable.fromIterable(filterArguments) + .flatMapSingle(filter -> this.normalize(requestContext, scope, filter)) + .collect(Collectors.toUnmodifiableList()); + } + + private Single> normalize( + GraphQlRequestContext requestContext, + AttributeModelScope scope, + FilterArgument filterArgument) { + switch (filterArgument.type()) { + case STRING: + case NUMERIC: + case ATTRIBUTE: + return this.attributeAssociator.associateAttribute( + requestContext, + scope, + new NormalizedFilter( + filterArgument.key(), filterArgument.operator(), filterArgument.value()), + FilterArgument::key); + case ID: + return this.scopeConverter + .convert(filterArgument.idScope()) + .flatMap( + foreignScope -> + this.attributeStore.getForeignIdAttribute(requestContext, scope, foreignScope)) + .map( + foreignIdAttribute -> + AttributeAssociation.of( + foreignIdAttribute, + new NormalizedFilter( + foreignIdAttribute.key(), + filterArgument.operator(), + filterArgument.value()))); + default: + return Single.error( + new UnsupportedOperationException( + "Unrecognized filter type: " + filterArgument.type())); + } + } + + @Value + @Accessors(fluent = true) + private static class NormalizedFilter implements FilterArgument { + FilterType type = FilterType.ATTRIBUTE; + String key; + FilterOperatorType operator; + Object value; + AttributeScope idScope = null; + } +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilder.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilder.java new file mode 100644 index 00000000..bb2eb42c --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilder.java @@ -0,0 +1,158 @@ +package org.hypertrace.core.graphql.common.request; + +import static io.reactivex.rxjava3.core.Single.zip; + +import graphql.schema.DataFetchingFieldSelectionSet; +import graphql.schema.SelectedField; +import io.reactivex.rxjava3.core.Single; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import javax.inject.Inject; +import lombok.Value; +import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.attributes.AttributeModelScope; +import org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument; +import org.hypertrace.core.graphql.common.schema.results.ResultSet; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.page.LimitArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.page.OffsetArgument; +import org.hypertrace.core.graphql.common.utils.attributes.AttributeAssociator; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.core.graphql.deserialization.ArgumentDeserializer; +import org.hypertrace.core.graphql.utils.schema.GraphQlSelectionFinder; +import org.hypertrace.core.graphql.utils.schema.SelectionQuery; + +class DefaultResultSetRequestBuilder implements ResultSetRequestBuilder { + private final ArgumentDeserializer argumentDeserializer; + private final GraphQlSelectionFinder selectionFinder; + private final AttributeRequestBuilder attributeRequestBuilder; + private final AttributeAssociator attributeAssociator; + private final FilterRequestBuilder filterRequestBuilder; + private static final int DEFAULT_LIMIT = 100; + private static final int DEFAULT_OFFSET = 0; + + @Inject + DefaultResultSetRequestBuilder( + ArgumentDeserializer argumentDeserializer, + GraphQlSelectionFinder selectionFinder, + AttributeRequestBuilder attributeRequestBuilder, + AttributeAssociator attributeAssociator, + FilterRequestBuilder filterRequestBuilder) { + this.argumentDeserializer = argumentDeserializer; + this.selectionFinder = selectionFinder; + this.attributeRequestBuilder = attributeRequestBuilder; + this.attributeAssociator = attributeAssociator; + this.filterRequestBuilder = filterRequestBuilder; + } + + @Override + public Single> build( + GraphQlRequestContext context, + AttributeModelScope requestScope, + Map arguments, + DataFetchingFieldSelectionSet selectionSet) { + return this.build(context, requestScope, arguments, selectionSet, OrderArgument.class); + } + + @Override + public Single> build( + GraphQlRequestContext context, + AttributeModelScope requestScope, + Map arguments, + DataFetchingFieldSelectionSet selectionSet, + Class orderArgumentClass) { + int limit = + this.argumentDeserializer + .deserializePrimitive(arguments, LimitArgument.class) + .orElse(DEFAULT_LIMIT); + + int offset = + this.argumentDeserializer + .deserializePrimitive(arguments, OffsetArgument.class) + .orElse(DEFAULT_OFFSET); + + TimeRangeArgument timeRange = + this.argumentDeserializer + .deserializeObject(arguments, TimeRangeArgument.class) + .orElseThrow(); + + List requestedOrders = + this.argumentDeserializer + .deserializeObjectList(arguments, orderArgumentClass) + .orElse(Collections.emptyList()); + + List requestedFilters = + this.argumentDeserializer + .deserializeObjectList(arguments, FilterArgument.class) + .orElse(Collections.emptyList()); + + return zip( + this.attributeAssociator + .associateAttributes(context, requestScope, requestedOrders, OrderArgument::key) + .collect(Collectors.toUnmodifiableList()), + this.filterRequestBuilder.build(context, requestScope, requestedFilters), + (orders, filters) -> + this.build( + context, + requestScope, + limit, + offset, + timeRange, + orders, + filters, + this.getAttributeQueryableFields(selectionSet))) + .flatMap(single -> single); + } + + @Override + public Single> build( + GraphQlRequestContext context, + AttributeModelScope requestScope, + int limit, + int offset, + TimeRangeArgument timeRange, + List> orderArguments, + Collection> filterArguments, + Stream attributeQueryableFields) { + return zip( + this.attributeRequestBuilder + .buildForAttributeQueryableFieldsAndId(context, requestScope, attributeQueryableFields) + .collect(Collectors.toUnmodifiableSet()), + this.attributeRequestBuilder.buildForId(context, requestScope), + (attributeRequests, idAttribute) -> + new DefaultResultSetRequest<>( + context, + attributeRequests, + idAttribute, + timeRange, + limit, + offset, + orderArguments, + filterArguments)); + } + + private Stream getAttributeQueryableFields( + DataFetchingFieldSelectionSet selectionSet) { + return this.selectionFinder.findSelections( + selectionSet, SelectionQuery.namedChild(ResultSet.RESULT_SET_RESULTS_NAME)); + } + + @Value + @Accessors(fluent = true) + private static class DefaultResultSetRequest + implements ResultSetRequest { + GraphQlRequestContext context; + Collection attributes; + AttributeRequest idAttribute; + TimeRangeArgument timeRange; + int limit; + int offset; + List> orderArguments; + Collection> filterArguments; + } +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/FilterRequestBuilder.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/FilterRequestBuilder.java new file mode 100644 index 00000000..e070a93c --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/FilterRequestBuilder.java @@ -0,0 +1,15 @@ +package org.hypertrace.core.graphql.common.request; + +import io.reactivex.rxjava3.core.Single; +import java.util.Collection; +import java.util.List; +import org.hypertrace.core.graphql.attributes.AttributeModelScope; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; + +public interface FilterRequestBuilder { + Single>> build( + GraphQlRequestContext requestContext, + AttributeModelScope scope, + Collection filterArguments); +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequest.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequest.java new file mode 100644 index 00000000..b109c264 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequest.java @@ -0,0 +1,27 @@ +package org.hypertrace.core.graphql.common.request; + +import java.util.Collection; +import java.util.List; +import org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; + +public interface ResultSetRequest { + GraphQlRequestContext context(); + + // All attributes to fetch, including ID + Collection attributes(); + + TimeRangeArgument timeRange(); + + AttributeRequest idAttribute(); + + int limit(); + + int offset(); + + List> orderArguments(); + + Collection> filterArguments(); +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequestBuilder.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequestBuilder.java new file mode 100644 index 00000000..8eb78b50 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequestBuilder.java @@ -0,0 +1,39 @@ +package org.hypertrace.core.graphql.common.request; + +import graphql.schema.DataFetchingFieldSelectionSet; +import graphql.schema.SelectedField; +import io.reactivex.rxjava3.core.Single; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.stream.Stream; +import org.hypertrace.core.graphql.attributes.AttributeModelScope; +import org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; + +public interface ResultSetRequestBuilder { + Single> build( + GraphQlRequestContext context, + AttributeModelScope requestScope, + Map arguments, + DataFetchingFieldSelectionSet selectionSet); + + Single> build( + GraphQlRequestContext context, + AttributeModelScope requestScope, + Map arguments, + DataFetchingFieldSelectionSet selectionSet, + Class orderArgumentClass); + + Single> build( + GraphQlRequestContext context, + AttributeModelScope requestScope, + int limit, + int offset, + TimeRangeArgument timeRange, + List> orderArguments, + Collection> filterArguments, + Stream attributeQueryableFields); +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/CommonSchemaFragment.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/CommonSchemaFragment.java new file mode 100644 index 00000000..d0f5c94f --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/CommonSchemaFragment.java @@ -0,0 +1,38 @@ +package org.hypertrace.core.graphql.common.schema; + +import graphql.annotations.processor.typeFunctions.TypeFunction; +import java.util.List; +import javax.annotation.Nonnull; +import javax.inject.Inject; +import org.hypertrace.core.graphql.common.schema.typefunctions.AttributeScopeDynamicEnum; +import org.hypertrace.core.graphql.common.schema.typefunctions.DateTimeScalar; +import org.hypertrace.core.graphql.common.schema.typefunctions.UnknownScalar; +import org.hypertrace.core.graphql.spi.schema.GraphQlSchemaFragment; + +class CommonSchemaFragment implements GraphQlSchemaFragment { + + private final DateTimeScalar dateTimeScalar; + private final UnknownScalar unknownScalar; + private final AttributeScopeDynamicEnum attributeScopeDynamicEnum; + + @Inject + CommonSchemaFragment( + DateTimeScalar dateTimeScalar, + UnknownScalar unknownScalar, + AttributeScopeDynamicEnum attributeScopeDynamicEnum) { + this.dateTimeScalar = dateTimeScalar; + this.unknownScalar = unknownScalar; + this.attributeScopeDynamicEnum = attributeScopeDynamicEnum; + } + + @Override + public String fragmentName() { + return "Common Schema"; + } + + @Nonnull + @Override + public List typeFunctions() { + return List.of(this.unknownScalar, this.dateTimeScalar, this.attributeScopeDynamicEnum); + } +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/CommonSchemaModule.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/CommonSchemaModule.java new file mode 100644 index 00000000..3f26baba --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/CommonSchemaModule.java @@ -0,0 +1,20 @@ +package org.hypertrace.core.graphql.common.schema; + +import com.google.inject.AbstractModule; +import com.google.inject.multibindings.Multibinder; +import org.hypertrace.core.graphql.common.deserialization.CommonDeserializationModule; +import org.hypertrace.core.graphql.common.request.CommonRequestModule; +import org.hypertrace.core.graphql.spi.schema.GraphQlSchemaFragment; + +public class CommonSchemaModule extends AbstractModule { + + @Override + protected void configure() { + Multibinder.newSetBinder(binder(), GraphQlSchemaFragment.class) + .addBinding() + .to(CommonSchemaFragment.class); + + install(new CommonDeserializationModule()); + install(new CommonRequestModule()); + } +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/arguments/TimeRangeArgument.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/arguments/TimeRangeArgument.java new file mode 100644 index 00000000..b04668a3 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/arguments/TimeRangeArgument.java @@ -0,0 +1,24 @@ +package org.hypertrace.core.graphql.common.schema.arguments; + +import graphql.annotations.annotationTypes.GraphQLField; +import graphql.annotations.annotationTypes.GraphQLName; +import graphql.annotations.annotationTypes.GraphQLNonNull; +import java.time.Instant; + +@GraphQLName(TimeRangeArgument.TYPE_NAME) +public interface TimeRangeArgument { + String TYPE_NAME = "TimeRange"; + String ARGUMENT_NAME = "between"; // TODO rename to time range + String TIME_RANGE_ARGUMENT_START_TIME = "startTime"; + String TIME_RANGE_ARGUMENT_END_TIME = "endTime"; + + @GraphQLField + @GraphQLName(TIME_RANGE_ARGUMENT_START_TIME) + @GraphQLNonNull + Instant startTime(); + + @GraphQLField + @GraphQLName(TIME_RANGE_ARGUMENT_END_TIME) + @GraphQLNonNull + Instant endTime(); +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeQueryable.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeQueryable.java new file mode 100644 index 00000000..6557abe6 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeQueryable.java @@ -0,0 +1,14 @@ +package org.hypertrace.core.graphql.common.schema.attributes; + +import graphql.annotations.annotationTypes.GraphQLField; +import graphql.annotations.annotationTypes.GraphQLName; +import graphql.annotations.annotationTypes.GraphQLNonNull; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeKeyArgument; + +public interface AttributeQueryable { + String ATTRIBUTE_FIELD_NAME = "attribute"; + + @GraphQLField + @GraphQLName(ATTRIBUTE_FIELD_NAME) + Object attribute(@GraphQLName(AttributeKeyArgument.ARGUMENT_NAME) @GraphQLNonNull String key); +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeScope.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeScope.java new file mode 100644 index 00000000..f6874852 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeScope.java @@ -0,0 +1,9 @@ +package org.hypertrace.core.graphql.common.schema.attributes; + +import graphql.annotations.annotationTypes.GraphQLName; + +@GraphQLName(AttributeScope.TYPE_NAME) +public interface AttributeScope { + // Should be provided for the specific attributes available + String TYPE_NAME = "AttributeScope"; +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeType.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeType.java new file mode 100644 index 00000000..cdb6f74e --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeType.java @@ -0,0 +1,15 @@ +package org.hypertrace.core.graphql.common.schema.attributes; + +import graphql.annotations.annotationTypes.GraphQLName; + +@GraphQLName(AttributeType.TYPE_NAME) +public enum AttributeType { + STRING, + BOOLEAN, + LONG, + DOUBLE, + TIMESTAMP, + STRING_MAP; + + public static final String TYPE_NAME = "AttributeType"; +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/MetricAggregationType.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/MetricAggregationType.java new file mode 100644 index 00000000..f90d9d64 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/MetricAggregationType.java @@ -0,0 +1,17 @@ +package org.hypertrace.core.graphql.common.schema.attributes; + +import graphql.annotations.annotationTypes.GraphQLName; + +@GraphQLName(MetricAggregationType.TYPE_NAME) +public enum MetricAggregationType { + COUNT, + AVG, + SUM, + MIN, + MAX, + AVGRATE, + PERCENTILE, + DISTINCTCOUNT; + + public static final String TYPE_NAME = "MetricAggregationType"; +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/arguments/AttributeKeyArgument.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/arguments/AttributeKeyArgument.java new file mode 100644 index 00000000..0121215f --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/arguments/AttributeKeyArgument.java @@ -0,0 +1,7 @@ +package org.hypertrace.core.graphql.common.schema.attributes.arguments; + +import org.hypertrace.core.graphql.deserialization.PrimitiveArgument; + +public interface AttributeKeyArgument extends PrimitiveArgument { + String ARGUMENT_NAME = "key"; +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/id/Identifiable.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/id/Identifiable.java new file mode 100644 index 00000000..2822e97f --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/id/Identifiable.java @@ -0,0 +1,15 @@ +package org.hypertrace.core.graphql.common.schema.id; + +import graphql.annotations.annotationTypes.GraphQLField; +import graphql.annotations.annotationTypes.GraphQLName; +import graphql.annotations.annotationTypes.GraphQLNonNull; + +public interface Identifiable { + + String IDENTITY_FIELD_NAME = "id"; + + @GraphQLField + @GraphQLNonNull + @GraphQLName(IDENTITY_FIELD_NAME) + String id(); +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/ResultSet.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/ResultSet.java new file mode 100644 index 00000000..0dfc82fe --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/ResultSet.java @@ -0,0 +1,34 @@ +package org.hypertrace.core.graphql.common.schema.results; + +import graphql.annotations.annotationTypes.GraphQLField; +import graphql.annotations.annotationTypes.GraphQLName; +import graphql.annotations.annotationTypes.GraphQLNonNull; +import java.util.List; + +public interface ResultSet { + String RESULT_SET_RESULTS_NAME = "results"; + String RESULT_SET_COUNT_NAME = "count"; + String RESULT_SET_TOTAL_NAME = "total"; + + /** + * Must be annotated in extending interface. Annotations lib doesn't handle generics, which + * requires a redeclaration and overrides these annotations. + * + *
+   *     \@GraphQLField
+   *     \@GraphQLNonNull
+   *     \@GraphQLName(RESULT_SET_RESULTS_NAME)
+   * 
+ */ + List results(); + + @GraphQLField + @GraphQLNonNull + @GraphQLName(RESULT_SET_COUNT_NAME) + long count(); + + @GraphQLField + @GraphQLNonNull + @GraphQLName(RESULT_SET_TOTAL_NAME) + long total(); +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterArgument.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterArgument.java new file mode 100644 index 00000000..71b8c897 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterArgument.java @@ -0,0 +1,44 @@ +package org.hypertrace.core.graphql.common.schema.results.arguments.filter; + +import graphql.annotations.annotationTypes.GraphQLField; +import graphql.annotations.annotationTypes.GraphQLName; +import graphql.annotations.annotationTypes.GraphQLNonNull; +import javax.annotation.Nullable; +import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; + +// TODO revisit union types +@GraphQLName(FilterArgument.TYPE_NAME) +public interface FilterArgument { + String TYPE_NAME = "Filter"; + String ARGUMENT_NAME = "filterBy"; // TODO rename to filter + String FILTER_ARGUMENT_TYPE = "type"; + String FILTER_ARGUMENT_KEY = "key"; + String FILTER_ARGUMENT_OPERATOR = "operator"; + String FILTER_ARGUMENT_VALUE = "value"; + String FILTER_ARGUMENT_ID_TYPE = "idType"; // TODO rename + + @GraphQLField + @GraphQLNonNull + @GraphQLName(FILTER_ARGUMENT_TYPE) + FilterType type(); + + @GraphQLField + @GraphQLName(FILTER_ARGUMENT_KEY) + @Nullable + String key(); + + @GraphQLField + @GraphQLNonNull + @GraphQLName(FILTER_ARGUMENT_OPERATOR) + FilterOperatorType operator(); + + @GraphQLField + @GraphQLNonNull + @GraphQLName(FILTER_ARGUMENT_VALUE) + Object value(); + + @GraphQLField + @GraphQLName(FILTER_ARGUMENT_ID_TYPE) + @Nullable + AttributeScope idScope(); +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterOperatorType.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterOperatorType.java new file mode 100644 index 00000000..087e668c --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterOperatorType.java @@ -0,0 +1,19 @@ +package org.hypertrace.core.graphql.common.schema.results.arguments.filter; + +import graphql.annotations.annotationTypes.GraphQLName; + +@GraphQLName(FilterOperatorType.TYPE_NAME) +public enum FilterOperatorType { + EQUALS, + NOT_EQUALS, + LESS_THAN, + LESS_THAN_OR_EQUAL_TO, + GREATER_THAN, + GREATER_THAN_OR_EQUAL_TO, + LIKE, + IN, + CONTAINS_KEY, + CONTAINS_KEY_VALUE; + + public static final String TYPE_NAME = "FilterOperatorType"; +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterType.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterType.java new file mode 100644 index 00000000..b90e7a63 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterType.java @@ -0,0 +1,15 @@ +package org.hypertrace.core.graphql.common.schema.results.arguments.filter; + +import graphql.annotations.annotationTypes.GraphQLName; + +@GraphQLName(FilterType.TYPE_NAME) +public enum FilterType { + @Deprecated + STRING, + @Deprecated + NUMERIC, + ATTRIBUTE, + ID; + + public static final String TYPE_NAME = "FilterType"; +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/order/OrderArgument.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/order/OrderArgument.java new file mode 100644 index 00000000..61937efe --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/order/OrderArgument.java @@ -0,0 +1,22 @@ +package org.hypertrace.core.graphql.common.schema.results.arguments.order; + +import graphql.annotations.annotationTypes.GraphQLField; +import graphql.annotations.annotationTypes.GraphQLName; +import graphql.annotations.annotationTypes.GraphQLNonNull; + +@GraphQLName(OrderArgument.TYPE_NAME) +public interface OrderArgument { + String ARGUMENT_NAME = "orderBy"; // TODO rename to order + String TYPE_NAME = "Order"; + String ORDER_KEY_NAME = "key"; + String ORDER_DIRECTION_NAME = "direction"; + + @GraphQLField + @GraphQLNonNull + @GraphQLName(ORDER_KEY_NAME) + String key(); + + @GraphQLField + @GraphQLName(ORDER_DIRECTION_NAME) + OrderDirection direction(); +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/order/OrderDirection.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/order/OrderDirection.java new file mode 100644 index 00000000..a15e09c0 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/order/OrderDirection.java @@ -0,0 +1,11 @@ +package org.hypertrace.core.graphql.common.schema.results.arguments.order; + +import graphql.annotations.annotationTypes.GraphQLName; + +@GraphQLName(OrderDirection.TYPE_NAME) +public enum OrderDirection { + ASC, + DESC; + + public static final String TYPE_NAME = "OrderDirection"; +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/page/LimitArgument.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/page/LimitArgument.java new file mode 100644 index 00000000..f05fdd65 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/page/LimitArgument.java @@ -0,0 +1,7 @@ +package org.hypertrace.core.graphql.common.schema.results.arguments.page; + +import org.hypertrace.core.graphql.deserialization.PrimitiveArgument; + +public interface LimitArgument extends PrimitiveArgument { + String ARGUMENT_NAME = "limit"; +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/page/OffsetArgument.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/page/OffsetArgument.java new file mode 100644 index 00000000..f41ede76 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/page/OffsetArgument.java @@ -0,0 +1,7 @@ +package org.hypertrace.core.graphql.common.schema.results.arguments.page; + +import org.hypertrace.core.graphql.deserialization.PrimitiveArgument; + +public interface OffsetArgument extends PrimitiveArgument { + String ARGUMENT_NAME = "offset"; +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/time/TimeUnit.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/time/TimeUnit.java new file mode 100644 index 00000000..5be3079d --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/time/TimeUnit.java @@ -0,0 +1,21 @@ +package org.hypertrace.core.graphql.common.schema.time; + +import java.time.temporal.ChronoUnit; + +public enum TimeUnit { + MILLISECONDS(ChronoUnit.MILLIS), + SECONDS(ChronoUnit.SECONDS), + MINUTES(ChronoUnit.MINUTES), + HOURS(ChronoUnit.HOURS), + DAYS(ChronoUnit.DAYS); + + private final ChronoUnit chronoUnit; + + TimeUnit(ChronoUnit chronoUnit) { + this.chronoUnit = chronoUnit; + } + + public ChronoUnit getChronoUnit() { + return chronoUnit; + } +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/type/Typed.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/type/Typed.java new file mode 100644 index 00000000..5de19c18 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/type/Typed.java @@ -0,0 +1,17 @@ +package org.hypertrace.core.graphql.common.schema.type; + +public interface Typed { + String TYPE_FIELD_NAME = "type"; + + /** + * Must be annotated in extending interface. Annotations lib doesn't handle generics, which + * requires a redeclaration and overrides these annotations. + * + *
+   *     \@GraphQLField
+   *     \@GraphQLNonNull
+   *     \@GraphQLName(TYPE_FIELD_NAME)
+   * 
+ */ + T type(); +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/AttributeScopeDynamicEnum.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/AttributeScopeDynamicEnum.java new file mode 100644 index 00000000..44b8e037 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/AttributeScopeDynamicEnum.java @@ -0,0 +1,39 @@ +package org.hypertrace.core.graphql.common.schema.typefunctions; + +import graphql.annotations.processor.ProcessingElementsContainer; +import graphql.annotations.processor.retrievers.GraphQLObjectInfoRetriever; +import graphql.annotations.processor.typeBuilders.EnumBuilder; +import graphql.annotations.processor.typeFunctions.TypeFunction; +import graphql.schema.GraphQLEnumType; +import graphql.schema.GraphQLType; +import java.lang.reflect.AnnotatedType; +import javax.inject.Inject; +import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; + +public class AttributeScopeDynamicEnum implements TypeFunction { + + private final GraphQLEnumType enumType; + + @Inject + AttributeScopeDynamicEnum(Class attributeScopeImplementationClass) { + this.enumType = + new EnumBuilder(new GraphQLObjectInfoRetriever()) + .getEnumBuilder(attributeScopeImplementationClass) + .name(AttributeScope.TYPE_NAME) + .build(); + } + + @Override + public boolean canBuildType(Class aClass, AnnotatedType annotatedType) { + return aClass == AttributeScope.class; + } + + @Override + public GraphQLType buildType( + boolean input, + Class aClass, + AnnotatedType annotatedType, + ProcessingElementsContainer container) { + return this.enumType; + } +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/DateTimeScalar.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/DateTimeScalar.java new file mode 100644 index 00000000..b14b72c5 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/DateTimeScalar.java @@ -0,0 +1,78 @@ +package org.hypertrace.core.graphql.common.schema.typefunctions; + +import graphql.GraphqlErrorException; +import graphql.annotations.processor.ProcessingElementsContainer; +import graphql.annotations.processor.typeFunctions.TypeFunction; +import graphql.language.StringValue; +import graphql.schema.Coercing; +import graphql.schema.CoercingParseLiteralException; +import graphql.schema.CoercingParseValueException; +import graphql.schema.CoercingSerializeException; +import graphql.schema.GraphQLScalarType; +import java.lang.reflect.AnnotatedType; +import java.time.DateTimeException; +import java.time.Instant; +import java.time.temporal.TemporalAccessor; +import java.util.function.Function; + +public class DateTimeScalar implements TypeFunction { + + private static final GraphQLScalarType DATE_TIME_SCALAR = + GraphQLScalarType.newScalar() + .name("DateTime") + .description("An ISO-8601 formatted DateTime Scalar") + .coercing( + new Coercing() { + @Override + public String serialize(Object fetcherResult) throws CoercingSerializeException { + return toInstant(fetcherResult, CoercingSerializeException::new).toString(); + } + + @Override + public Instant parseValue(Object input) throws CoercingParseValueException { + return toInstant(input, CoercingParseValueException::new); + } + + @Override + public Instant parseLiteral(Object input) throws CoercingParseLiteralException { + return toInstant(input, CoercingParseLiteralException::new); + } + + private Instant toInstant( + Object instantInput, Function errorWrapper) throws E { + try { + if (instantInput instanceof TemporalAccessor) { + return Instant.from((TemporalAccessor) instantInput); + } + if (instantInput instanceof CharSequence) { + return Instant.parse((CharSequence) instantInput); + } + if (instantInput instanceof StringValue) { + return Instant.parse(((StringValue) instantInput).getValue()); + } + } catch (DateTimeException exception) { + throw errorWrapper.apply(exception); + } + throw errorWrapper.apply( + new DateTimeException( + String.format( + "Cannot convert provided format '%s' to Instant", + instantInput.getClass().getCanonicalName()))); + } + }) + .build(); + + @Override + public boolean canBuildType(Class aClass, AnnotatedType annotatedType) { + return TemporalAccessor.class.isAssignableFrom(aClass); + } + + @Override + public GraphQLScalarType buildType( + boolean input, + Class aClass, + AnnotatedType annotatedType, + ProcessingElementsContainer container) { + return DATE_TIME_SCALAR; + } +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/UnknownScalar.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/UnknownScalar.java new file mode 100644 index 00000000..a6a23770 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/UnknownScalar.java @@ -0,0 +1,96 @@ +package org.hypertrace.core.graphql.common.schema.typefunctions; + +import graphql.annotations.processor.ProcessingElementsContainer; +import graphql.annotations.processor.typeFunctions.TypeFunction; +import graphql.language.ArrayValue; +import graphql.language.BooleanValue; +import graphql.language.FloatValue; +import graphql.language.IntValue; +import graphql.language.ObjectField; +import graphql.language.ObjectValue; +import graphql.language.StringValue; +import graphql.schema.Coercing; +import graphql.schema.CoercingParseLiteralException; +import graphql.schema.CoercingParseValueException; +import graphql.schema.CoercingSerializeException; +import graphql.schema.GraphQLScalarType; +import java.lang.reflect.AnnotatedType; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class UnknownScalar implements TypeFunction { + + private static final GraphQLScalarType ATTRIBUTE_VALUE_SCALAR = + GraphQLScalarType.newScalar() + .name("Unknown") + .description("A value of unknown type: A string, int, float, boolean, array or object") + .coercing( + new Coercing<>() { + @Override + public Object serialize(Object fetcherResult) throws CoercingSerializeException { + // Use default serializer + return fetcherResult; + } + + @Override + public Object parseValue(Object input) throws CoercingParseValueException { + return this.parseFromAst(input, CoercingParseValueException::new); + } + + @Override + public Object parseLiteral(Object input) throws CoercingParseLiteralException { + return this.parseFromAst(input, CoercingParseLiteralException::new); + } + + private Object parseFromAst(Object input, Function errorWrapper) { + Function recurse = + value -> this.parseFromAst(value, errorWrapper); + + if (input instanceof StringValue) { + return ((StringValue) input).getValue(); + } + if (input instanceof IntValue) { + return ((IntValue) input).getValue(); + } + if (input instanceof FloatValue) { + return ((FloatValue) input).getValue(); + } + if (input instanceof BooleanValue) { + return ((BooleanValue) input).isValue(); + } + if (input instanceof ArrayValue) { + return ((ArrayValue) input) + .getValues().stream().map(recurse).collect(Collectors.toUnmodifiableList()); + } + if (input instanceof ObjectValue) { + return ((ObjectValue) input) + .getObjectFields().stream() + .collect( + Collectors.toUnmodifiableMap( + ObjectField::getName, + field -> recurse.apply(field.getValue()))); + } + + return errorWrapper.apply( + new IllegalArgumentException( + String.format( + "Unsupported input of type %s", + input.getClass().getCanonicalName()))); + } + }) + .build(); + + @Override + public boolean canBuildType(Class aClass, AnnotatedType annotatedType) { + return Object.class == aClass; + } + + @Override + public GraphQLScalarType buildType( + boolean input, + Class aClass, + AnnotatedType annotatedType, + ProcessingElementsContainer container) { + return ATTRIBUTE_VALUE_SCALAR; + } +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/BiConverter.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/BiConverter.java new file mode 100644 index 00000000..ce40591b --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/BiConverter.java @@ -0,0 +1,16 @@ +package org.hypertrace.core.graphql.common.utils; + +import io.reactivex.rxjava3.core.Single; + +/** + * A Function, similar to {@link java.util.function.BiFunction} that accepts two arguments and + * converts them to a result asynchronously. + * + * @param + * @param + * @param + */ +public interface BiConverter { + + Single convert(F1 f1, F2 f2); +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/CollectorUtils.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/CollectorUtils.java new file mode 100644 index 00000000..751b57f8 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/CollectorUtils.java @@ -0,0 +1,31 @@ +package org.hypertrace.core.graphql.common.utils; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.function.Function; +import java.util.stream.Collector; +import java.util.stream.Collectors; + +public class CollectorUtils { + + public static Collector, ?, Map> immutableMapEntryCollector() { + return Collectors.toUnmodifiableMap(Entry::getKey, Entry::getValue); + } + + public static Collector> flatten( + Function> collectionMapper) { + return flatten(collectionMapper, Collectors.toUnmodifiableList()); + } + + public static > Collector flatten( + Function> collectionMapper, Collector downstream) { + return Collectors.flatMapping(collectionMapper.andThen(Collection::stream), downstream); + } + + public static Collector firstOrDefault(T defaultValue) { + return Collectors.collectingAndThen( + Collectors.toSet(), set -> set.stream().findFirst().orElse(defaultValue)); + } +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/Converter.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/Converter.java new file mode 100644 index 00000000..a0d30eea --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/Converter.java @@ -0,0 +1,8 @@ +package org.hypertrace.core.graphql.common.utils; + +import io.reactivex.rxjava3.core.Single; + +public interface Converter { + + Single convert(F from); +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeAssociator.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeAssociator.java new file mode 100644 index 00000000..fcb5e5cf --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeAssociator.java @@ -0,0 +1,24 @@ +package org.hypertrace.core.graphql.common.utils.attributes; + +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.Single; +import java.util.Collection; +import java.util.function.Function; +import org.hypertrace.core.graphql.attributes.AttributeModelScope; +import org.hypertrace.core.graphql.common.request.AttributeAssociation; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; + +public interface AttributeAssociator { + + Observable> associateAttributes( + GraphQlRequestContext context, + AttributeModelScope requestScope, + Collection inputs, + Function attributeKeyMapper); + + Single> associateAttribute( + GraphQlRequestContext context, + AttributeModelScope requestScope, + T input, + Function attributeKeyMapper); +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeModelMetricAggregationTypeConverter.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeModelMetricAggregationTypeConverter.java new file mode 100644 index 00000000..ddcf088b --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeModelMetricAggregationTypeConverter.java @@ -0,0 +1,39 @@ +package org.hypertrace.core.graphql.common.utils.attributes; + +import io.reactivex.rxjava3.core.Single; +import java.util.UnknownFormatConversionException; +import org.hypertrace.core.graphql.attributes.AttributeModelMetricAggregationType; +import org.hypertrace.core.graphql.common.schema.attributes.MetricAggregationType; +import org.hypertrace.core.graphql.common.utils.Converter; + +class AttributeModelMetricAggregationTypeConverter + implements Converter { + + @Override + public Single convert( + MetricAggregationType aggregationType) { + switch (aggregationType) { + case COUNT: + return Single.just(AttributeModelMetricAggregationType.COUNT); + case AVG: + return Single.just(AttributeModelMetricAggregationType.AVG); + case SUM: + return Single.just(AttributeModelMetricAggregationType.SUM); + case MIN: + return Single.just(AttributeModelMetricAggregationType.MIN); + case MAX: + return Single.just(AttributeModelMetricAggregationType.MAX); + case AVGRATE: + return Single.just(AttributeModelMetricAggregationType.AVGRATE); + case PERCENTILE: + return Single.just(AttributeModelMetricAggregationType.PERCENTILE); + case DISTINCTCOUNT: + return Single.just(AttributeModelMetricAggregationType.DISTINCT_COUNT); + default: + return Single.error( + new UnknownFormatConversionException( + String.format( + "Unrecognized attribute metric aggregation type %s", aggregationType.name()))); + } + } +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeTypeConverter.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeTypeConverter.java new file mode 100644 index 00000000..9d2f8672 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeTypeConverter.java @@ -0,0 +1,32 @@ +package org.hypertrace.core.graphql.common.utils.attributes; + +import io.reactivex.rxjava3.core.Single; +import java.util.UnknownFormatConversionException; +import org.hypertrace.core.graphql.attributes.AttributeModelType; +import org.hypertrace.core.graphql.common.schema.attributes.AttributeType; +import org.hypertrace.core.graphql.common.utils.Converter; + +class AttributeTypeConverter implements Converter { + + @Override + public Single convert(AttributeModelType type) { + switch (type) { + case STRING: + return Single.just(AttributeType.STRING); + case BOOLEAN: + return Single.just(AttributeType.BOOLEAN); + case LONG: + return Single.just(AttributeType.LONG); + case DOUBLE: + return Single.just(AttributeType.DOUBLE); + case TIMESTAMP: + return Single.just(AttributeType.TIMESTAMP); + case STRING_MAP: + return Single.just(AttributeType.STRING_MAP); + default: + return Single.error( + new UnknownFormatConversionException( + String.format("Unrecognized attribute type %s", type.name()))); + } + } +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeUtilsModule.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeUtilsModule.java new file mode 100644 index 00000000..63ff188f --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeUtilsModule.java @@ -0,0 +1,32 @@ +package org.hypertrace.core.graphql.common.utils.attributes; + +import com.google.inject.AbstractModule; +import com.google.inject.Key; +import com.google.inject.TypeLiteral; +import org.hypertrace.core.graphql.attributes.AttributeModelMetricAggregationType; +import org.hypertrace.core.graphql.attributes.AttributeModelType; +import org.hypertrace.core.graphql.attributes.AttributeStore; +import org.hypertrace.core.graphql.common.schema.attributes.AttributeType; +import org.hypertrace.core.graphql.common.schema.attributes.MetricAggregationType; +import org.hypertrace.core.graphql.common.utils.Converter; + +public class AttributeUtilsModule extends AbstractModule { + + @Override + protected void configure() { + bind(Key.get(new TypeLiteral>() {})) + .to(AttributeTypeConverter.class); + bind(Key.get( + new TypeLiteral< + Converter>() {})) + .to(MetricAggregationTypeConverter.class); + bind(Key.get( + new TypeLiteral< + Converter>() {})) + .to(AttributeModelMetricAggregationTypeConverter.class); + + bind(AttributeAssociator.class).to(DefaultAttributeAssociator.class); + + requireBinding(AttributeStore.class); + } +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/DefaultAttributeAssociator.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/DefaultAttributeAssociator.java new file mode 100644 index 00000000..a2d39518 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/DefaultAttributeAssociator.java @@ -0,0 +1,43 @@ +package org.hypertrace.core.graphql.common.utils.attributes; + +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.Single; +import java.util.Collection; +import java.util.function.Function; +import javax.inject.Inject; +import org.hypertrace.core.graphql.attributes.AttributeModelScope; +import org.hypertrace.core.graphql.attributes.AttributeStore; +import org.hypertrace.core.graphql.common.request.AttributeAssociation; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; + +class DefaultAttributeAssociator implements AttributeAssociator { + + private final AttributeStore attributeStore; + + @Inject + DefaultAttributeAssociator(AttributeStore attributeStore) { + this.attributeStore = attributeStore; + } + + @Override + public Observable> associateAttributes( + GraphQlRequestContext context, + AttributeModelScope requestScope, + Collection inputs, + Function attributeKeyMapper) { + return Observable.fromIterable(inputs) + .flatMapSingle( + input -> this.associateAttribute(context, requestScope, input, attributeKeyMapper)); + } + + @Override + public Single> associateAttribute( + GraphQlRequestContext context, + AttributeModelScope requestScope, + T input, + Function attributeKeyMapper) { + return this.attributeStore + .get(context, requestScope, attributeKeyMapper.apply(input)) + .map(attribute -> AttributeAssociation.of(attribute, input)); + } +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/MetricAggregationTypeConverter.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/MetricAggregationTypeConverter.java new file mode 100644 index 00000000..8a51affc --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/MetricAggregationTypeConverter.java @@ -0,0 +1,39 @@ +package org.hypertrace.core.graphql.common.utils.attributes; + +import io.reactivex.rxjava3.core.Single; +import java.util.UnknownFormatConversionException; +import org.hypertrace.core.graphql.attributes.AttributeModelMetricAggregationType; +import org.hypertrace.core.graphql.common.schema.attributes.MetricAggregationType; +import org.hypertrace.core.graphql.common.utils.Converter; + +class MetricAggregationTypeConverter + implements Converter { + + @Override + public Single convert( + AttributeModelMetricAggregationType aggregationType) { + switch (aggregationType) { + case COUNT: + return Single.just(MetricAggregationType.COUNT); + case AVG: + return Single.just(MetricAggregationType.AVG); + case SUM: + return Single.just(MetricAggregationType.SUM); + case MIN: + return Single.just(MetricAggregationType.MIN); + case MAX: + return Single.just(MetricAggregationType.MAX); + case AVGRATE: + return Single.just(MetricAggregationType.AVGRATE); + case PERCENTILE: + return Single.just(MetricAggregationType.PERCENTILE); + case DISTINCT_COUNT: + return Single.just(MetricAggregationType.DISTINCTCOUNT); + default: + return Single.error( + new UnknownFormatConversionException( + String.format( + "Unrecognized attribute metric aggregation type %s", aggregationType.name()))); + } + } +} diff --git a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/deserialization/FilterArgumentDeserializationConfigTest.java b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/deserialization/FilterArgumentDeserializationConfigTest.java new file mode 100644 index 00000000..5a28ef05 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/deserialization/FilterArgumentDeserializationConfigTest.java @@ -0,0 +1,77 @@ +package org.hypertrace.core.graphql.common.deserialization; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import com.google.inject.AbstractModule; +import com.google.inject.Guice; +import com.google.inject.Key; +import com.google.inject.TypeLiteral; +import com.google.inject.multibindings.Multibinder; +import java.util.List; +import java.util.Map; +import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterOperatorType; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterType; +import org.hypertrace.core.graphql.deserialization.ArgumentDeserializationConfig; +import org.hypertrace.core.graphql.deserialization.ArgumentDeserializer; +import org.hypertrace.core.graphql.deserialization.GraphQlDeserializationRegistryModule; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class FilterArgumentDeserializationConfigTest { + private ArgumentDeserializer argumentDeserializer; + + private enum TestAttributeScope implements AttributeScope { + SCOPE + } + + @BeforeEach + void beforeEach() { + this.argumentDeserializer = + Guice.createInjector( + new GraphQlDeserializationRegistryModule(), + new AbstractModule() { + @Override + protected void configure() { + Multibinder.newSetBinder(binder(), ArgumentDeserializationConfig.class) + .addBinding() + .to(FilterArgumentDeserializationConfig.class); + bind(Key.get(new TypeLiteral>() {})) + .toInstance(TestAttributeScope.class); + } + }) + .getInstance(ArgumentDeserializer.class); + } + + @Test + void deserializesValueIfPresent() { + Map argMap = + Map.of( + FilterArgument.ARGUMENT_NAME, + List.of( + Map.of( + FilterArgument.FILTER_ARGUMENT_KEY, + "fooKey", + FilterArgument.FILTER_ARGUMENT_OPERATOR, + FilterOperatorType.EQUALS, + FilterArgument.FILTER_ARGUMENT_TYPE, + FilterType.ATTRIBUTE, + FilterArgument.FILTER_ARGUMENT_VALUE, + "fooValue", + FilterArgument.FILTER_ARGUMENT_ID_TYPE, + TestAttributeScope.SCOPE))); + + List result = + this.argumentDeserializer.deserializeObjectList(argMap, FilterArgument.class).orElseThrow(); + assertEquals(1, result.size()); + assertEquals("fooKey", result.get(0).key()); + assertEquals(FilterOperatorType.EQUALS, result.get(0).operator()); + assertEquals(FilterType.ATTRIBUTE, result.get(0).type()); + assertEquals("fooValue", result.get(0).value()); + assertEquals(TestAttributeScope.SCOPE, result.get(0).idScope()); + } +} diff --git a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/deserialization/OrderArgumentDeserializationConfigTest.java b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/deserialization/OrderArgumentDeserializationConfigTest.java new file mode 100644 index 00000000..815b46a8 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/deserialization/OrderArgumentDeserializationConfigTest.java @@ -0,0 +1,62 @@ +package org.hypertrace.core.graphql.common.deserialization; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import com.google.inject.AbstractModule; +import com.google.inject.Guice; +import com.google.inject.multibindings.Multibinder; +import java.util.List; +import java.util.Map; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderDirection; +import org.hypertrace.core.graphql.deserialization.ArgumentDeserializationConfig; +import org.hypertrace.core.graphql.deserialization.ArgumentDeserializer; +import org.hypertrace.core.graphql.deserialization.GraphQlDeserializationRegistryModule; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class OrderArgumentDeserializationConfigTest { + private ArgumentDeserializer argumentDeserializer; + + @BeforeEach + void beforeEach() { + this.argumentDeserializer = + Guice.createInjector( + new GraphQlDeserializationRegistryModule(), + new AbstractModule() { + @Override + protected void configure() { + Multibinder.newSetBinder(binder(), ArgumentDeserializationConfig.class) + .addBinding() + .to(OrderArgumentDeserializationConfig.class); + } + }) + .getInstance(ArgumentDeserializer.class); + } + + @Test + void deserializesValueIfPresent() { + Map argMap = + Map.of( + OrderArgument.ARGUMENT_NAME, + List.of( + Map.of( + OrderArgument.ORDER_KEY_NAME, + "fooKey", + OrderArgument.ORDER_DIRECTION_NAME, + OrderDirection.ASC), + Map.of(OrderArgument.ORDER_KEY_NAME, "barKey"))); + + List result = + this.argumentDeserializer.deserializeObjectList(argMap, OrderArgument.class).orElseThrow(); + assertEquals(2, result.size()); + assertEquals("fooKey", result.get(0).key()); + Assertions.assertEquals(OrderDirection.ASC, result.get(0).direction()); + assertEquals("barKey", result.get(1).key()); + Assertions.assertEquals(OrderDirection.DESC, result.get(1).direction()); + } +} diff --git a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/deserialization/TimeRangeArgumentDeserializationConfigTest.java b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/deserialization/TimeRangeArgumentDeserializationConfigTest.java new file mode 100644 index 00000000..8abaf58b --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/deserialization/TimeRangeArgumentDeserializationConfigTest.java @@ -0,0 +1,58 @@ +package org.hypertrace.core.graphql.common.deserialization; + +import static org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument.ARGUMENT_NAME; +import static org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument.TIME_RANGE_ARGUMENT_END_TIME; +import static org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument.TIME_RANGE_ARGUMENT_START_TIME; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import com.google.inject.AbstractModule; +import com.google.inject.Guice; +import com.google.inject.multibindings.Multibinder; +import java.time.Instant; +import java.time.temporal.ChronoUnit; +import java.util.Map; +import org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument; +import org.hypertrace.core.graphql.deserialization.ArgumentDeserializationConfig; +import org.hypertrace.core.graphql.deserialization.ArgumentDeserializer; +import org.hypertrace.core.graphql.deserialization.GraphQlDeserializationRegistryModule; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class TimeRangeArgumentDeserializationConfigTest { + private ArgumentDeserializer argumentDeserializer; + + @BeforeEach + void beforeEach() { + this.argumentDeserializer = + Guice.createInjector( + new GraphQlDeserializationRegistryModule(), + new AbstractModule() { + @Override + protected void configure() { + Multibinder.newSetBinder(binder(), ArgumentDeserializationConfig.class) + .addBinding() + .to(TimeRangeArgumentDeserializationConfig.class); + } + }) + .getInstance(ArgumentDeserializer.class); + } + + @Test + void deserializesValueIfPresent() { + Instant endTime = Instant.now(); + Instant startTime = endTime.minus(1, ChronoUnit.HOURS); + Map argMap = + Map.of( + ARGUMENT_NAME, + Map.of( + TIME_RANGE_ARGUMENT_START_TIME, startTime, TIME_RANGE_ARGUMENT_END_TIME, endTime)); + + TimeRangeArgument result = + this.argumentDeserializer.deserializeObject(argMap, TimeRangeArgument.class).orElseThrow(); + assertEquals(startTime, result.startTime()); + assertEquals(endTime, result.endTime()); + } +} diff --git a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilderTest.java b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilderTest.java new file mode 100644 index 00000000..3aaf2b94 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilderTest.java @@ -0,0 +1,66 @@ +package org.hypertrace.core.graphql.common.request; + +import static org.hypertrace.core.graphql.attributes.AttributeModelScope.SPAN; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.when; + +import graphql.schema.DataFetchingFieldSelectionSet; +import graphql.schema.SelectedField; +import io.reactivex.rxjava3.core.Single; +import java.util.List; +import java.util.Optional; +import java.util.stream.Stream; +import org.hypertrace.core.graphql.attributes.AttributeModel; +import org.hypertrace.core.graphql.attributes.AttributeStore; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeKeyArgument; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.core.graphql.deserialization.ArgumentDeserializer; +import org.hypertrace.core.graphql.utils.schema.GraphQlSelectionFinder; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class DefaultAttributeRequestBuilderTest { + @Mock AttributeStore mockAttributeStore; + @Mock ArgumentDeserializer mockArgumentDeserializer; + @Mock GraphQlSelectionFinder mockSelectionFinder; + @Mock GraphQlRequestContext mockContext; + @Mock DataFetchingFieldSelectionSet mockSelectionSet; + @Mock AttributeModel mockAttribute; + @Mock SelectedField mockSelectedField; + + private DefaultAttributeRequestBuilder requestBuilder; + + @BeforeEach + void beforeEach() { + this.requestBuilder = + new DefaultAttributeRequestBuilder( + mockAttributeStore, mockArgumentDeserializer, mockSelectionFinder); + } + + @Test + void canBuildRequestForSelectionSet() { + when(this.mockSelectionFinder.findSelections(eq(this.mockSelectionSet), any())) + .thenReturn(Stream.of(this.mockSelectedField)); + when(this.mockArgumentDeserializer.deserializePrimitive(any(), eq(AttributeKeyArgument.class))) + .thenReturn(Optional.of("fooKey")); + when(this.mockAttributeStore.get(eq(this.mockContext), eq(SPAN), eq("fooKey"))) + .thenReturn(Single.just(this.mockAttribute)); + when(this.mockAttribute.id()).thenReturn("fooId"); + + List returned = + this.requestBuilder + .buildForAttributeQueryableSelectionSet(this.mockContext, SPAN, this.mockSelectionSet) + .toList() + .blockingGet(); + + assertEquals(1, returned.size()); + assertEquals("fooId", returned.get(0).alias()); + assertEquals(this.mockAttribute, returned.get(0).attribute()); + } +} diff --git a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilderTest.java b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilderTest.java new file mode 100644 index 00000000..14bd0cac --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilderTest.java @@ -0,0 +1,117 @@ +package org.hypertrace.core.graphql.common.request; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.when; + +import graphql.schema.DataFetchingFieldSelectionSet; +import graphql.schema.SelectedField; +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.Single; +import java.util.Collections; +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Stream; +import org.hypertrace.core.graphql.attributes.AttributeModel; +import org.hypertrace.core.graphql.attributes.AttributeModelScope; +import org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.page.LimitArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.page.OffsetArgument; +import org.hypertrace.core.graphql.common.utils.attributes.AttributeAssociator; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.core.graphql.deserialization.ArgumentDeserializer; +import org.hypertrace.core.graphql.utils.schema.GraphQlSelectionFinder; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class DefaultResultSetRequestBuilderTest { + @Mock GraphQlRequestContext mockContext; + @Mock ArgumentDeserializer mockArgumentDeserializer; + @Mock GraphQlSelectionFinder mockSelectionFinder; + @Mock AttributeRequestBuilder mockAttributeRequestBuilder; + @Mock AttributeAssociator mockAttributeAssociator; + @Mock FilterRequestBuilder mockFilterBuilder; + @Mock TimeRangeArgument mockTimeRange; + @Mock OrderArgument mockOrderArgument; + @Mock FilterArgument mockFilterArgument; + @Mock AttributeModel mockFooAttribute; + int mockLimit = 3; + int mockOffset = 4; + @Mock DataFetchingFieldSelectionSet mockSelectionSet; + @Mock Stream mockAttributeQueryableStream; + @Mock AttributeRequest mockFooAttributeRequest; + @Mock AttributeRequest mockIdAttributeRequest; + + private DefaultResultSetRequestBuilder requestBuilder; + + @BeforeEach + void beforeEach() { + this.requestBuilder = + new DefaultResultSetRequestBuilder( + this.mockArgumentDeserializer, + this.mockSelectionFinder, + this.mockAttributeRequestBuilder, + this.mockAttributeAssociator, + this.mockFilterBuilder); + } + + @Test + void canBuildRequest() { + when(this.mockAttributeAssociator.associateAttributes( + any(), eq(AttributeModelScope.SPAN), eq(List.of(this.mockOrderArgument)), any())) + .thenReturn( + Observable.just( + AttributeAssociation.of(this.mockFooAttribute, this.mockOrderArgument))); + when(this.mockFilterBuilder.build( + any(), eq(AttributeModelScope.SPAN), eq(List.of(this.mockFilterArgument)))) + .thenReturn( + Single.just( + List.of(AttributeAssociation.of(this.mockFooAttribute, this.mockFilterArgument)))); + when(this.mockSelectionFinder.findSelections(eq(this.mockSelectionSet), any())) + .thenReturn(mockAttributeQueryableStream); + when(this.mockAttributeRequestBuilder.buildForAttributeQueryableFieldsAndId( + any(), any(), eq(this.mockAttributeQueryableStream))) + .thenReturn(Observable.just(this.mockFooAttributeRequest, this.mockIdAttributeRequest)); + when(this.mockAttributeRequestBuilder.buildForId(any(), any())) + .thenReturn(Single.just(this.mockIdAttributeRequest)); + when(this.mockArgumentDeserializer.deserializePrimitive(any(), eq(LimitArgument.class))) + .thenReturn(Optional.of(this.mockLimit)); + when(this.mockArgumentDeserializer.deserializePrimitive(any(), eq(OffsetArgument.class))) + .thenReturn(Optional.of(this.mockOffset)); + when(this.mockArgumentDeserializer.deserializeObject(any(), eq(TimeRangeArgument.class))) + .thenReturn(Optional.of(this.mockTimeRange)); + when(this.mockArgumentDeserializer.deserializeObjectList(any(), eq(OrderArgument.class))) + .thenReturn(Optional.of(List.of(this.mockOrderArgument))); + when(this.mockArgumentDeserializer.deserializeObjectList(any(), eq(FilterArgument.class))) + .thenReturn(Optional.of(List.of(this.mockFilterArgument))); + + ResultSetRequest request = + this.requestBuilder + .build( + this.mockContext, + AttributeModelScope.SPAN, + Collections.emptyMap(), // Arg parser mocked, don't need values + this.mockSelectionSet) + .blockingGet(); + + assertEquals( + Set.of(this.mockIdAttributeRequest, this.mockFooAttributeRequest), request.attributes()); + assertEquals(this.mockLimit, request.limit()); + assertEquals(this.mockOffset, request.offset()); + assertEquals(this.mockTimeRange, request.timeRange()); + assertEquals( + List.of(AttributeAssociation.of(this.mockFooAttribute, this.mockOrderArgument)), + request.orderArguments()); + assertEquals( + List.of(AttributeAssociation.of(this.mockFooAttribute, this.mockFilterArgument)), + request.filterArguments()); + } +} diff --git a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/DateTimeScalarTest.java b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/DateTimeScalarTest.java new file mode 100644 index 00000000..4a71c9b5 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/DateTimeScalarTest.java @@ -0,0 +1,82 @@ +package org.hypertrace.core.graphql.common.schema.scalars; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import graphql.annotations.processor.ProcessingElementsContainer; +import graphql.language.StringValue; +import graphql.schema.GraphQLScalarType; +import java.lang.reflect.AnnotatedType; +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.OffsetDateTime; +import java.time.ZoneOffset; +import java.time.ZonedDateTime; +import java.time.chrono.ChronoLocalDateTime; +import org.hypertrace.core.graphql.common.schema.typefunctions.DateTimeScalar; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class DateTimeScalarTest { + + private static final String TEST_DATE_TIME_STRING = "2019-10-29T21:30:12.871Z"; + private static final Instant TEST_DATE_TIME_INSTANT = Instant.parse(TEST_DATE_TIME_STRING); + private DateTimeScalar dateTimeFunction; + private GraphQLScalarType dateTimeType; + @Mock AnnotatedType mockAnnotatedType; + // Can't actually mock class, but it's not used so to convey intent using the Mock class. + private final Class mockAnnotatedClass = Mock.class; + @Mock ProcessingElementsContainer mockProcessingElementsContainer; + + @BeforeEach + void beforeEach() { + this.dateTimeFunction = new DateTimeScalar(); + // Can't actually mock class, but it's not used so to convey intent using + this.dateTimeType = + this.dateTimeFunction.buildType( + false, mockAnnotatedClass, mockAnnotatedType, mockProcessingElementsContainer); + } + + @Test + void canDetermineIfConvertible() { + assertTrue(this.dateTimeFunction.canBuildType(Instant.class, this.mockAnnotatedType)); + assertTrue(this.dateTimeFunction.canBuildType(OffsetDateTime.class, this.mockAnnotatedType)); + assertTrue(this.dateTimeFunction.canBuildType(LocalDateTime.class, this.mockAnnotatedType)); + assertTrue( + this.dateTimeFunction.canBuildType(ChronoLocalDateTime.class, this.mockAnnotatedType)); + assertTrue(this.dateTimeFunction.canBuildType(ZonedDateTime.class, this.mockAnnotatedType)); + } + + @Test + void canConvertFromLiteral() { + assertEquals( + TEST_DATE_TIME_INSTANT, dateTimeType.getCoercing().parseLiteral(TEST_DATE_TIME_STRING)); + } + + @Test + void canSerialize() { + assertEquals( + TEST_DATE_TIME_STRING, dateTimeType.getCoercing().serialize(TEST_DATE_TIME_INSTANT)); + assertEquals( + TEST_DATE_TIME_STRING, dateTimeType.getCoercing().serialize(TEST_DATE_TIME_STRING)); + + assertEquals( + TEST_DATE_TIME_STRING, + dateTimeType + .getCoercing() + .serialize(TEST_DATE_TIME_INSTANT.atOffset(ZoneOffset.ofHoursMinutes(12, 30)))); + } + + @Test + void canConvertFromValue() { + assertEquals( + TEST_DATE_TIME_INSTANT, + dateTimeType + .getCoercing() + .parseValue(StringValue.newStringValue().value(TEST_DATE_TIME_STRING).build())); + } +} diff --git a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/UnknownScalarTest.java b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/UnknownScalarTest.java new file mode 100644 index 00000000..2b21299d --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/UnknownScalarTest.java @@ -0,0 +1,95 @@ +package org.hypertrace.core.graphql.common.schema.scalars; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import graphql.annotations.processor.ProcessingElementsContainer; +import graphql.language.ArrayValue; +import graphql.language.BooleanValue; +import graphql.language.FloatValue; +import graphql.language.IntValue; +import graphql.language.StringValue; +import graphql.schema.GraphQLScalarType; +import java.lang.reflect.AnnotatedType; +import java.math.BigDecimal; +import java.math.BigInteger; +import java.time.Instant; +import java.util.List; +import org.hypertrace.core.graphql.common.schema.typefunctions.UnknownScalar; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class UnknownScalarTest { + + private UnknownScalar unknownScalarFunction; + private GraphQLScalarType unknownScalarType; + @Mock AnnotatedType mockAnnotatedType; + // Can't actually mock class, but it's not used so to convey intent using the Mock class. + private final Class mockAnnotatedClass = Mock.class; + @Mock ProcessingElementsContainer mockProcessingElementsContainer; + + @BeforeEach + void beforeEach() { + this.unknownScalarFunction = new UnknownScalar(); + // Can't actually mock class, but it's not used so to convey intent using + this.unknownScalarType = + this.unknownScalarFunction.buildType( + false, mockAnnotatedClass, mockAnnotatedType, mockProcessingElementsContainer); + } + + @Test + void canDetermineIfConvertible() { + // We should only use unknown if we can't type narrower than object in java + assertTrue(this.unknownScalarFunction.canBuildType(Object.class, this.mockAnnotatedType)); + assertFalse(this.unknownScalarFunction.canBuildType(String.class, this.mockAnnotatedType)); + assertFalse(this.unknownScalarFunction.canBuildType(Integer.class, this.mockAnnotatedType)); + assertFalse(this.unknownScalarFunction.canBuildType(Long.class, this.mockAnnotatedType)); + assertFalse(this.unknownScalarFunction.canBuildType(Instant.class, this.mockAnnotatedType)); + assertFalse(this.unknownScalarFunction.canBuildType(Float.class, this.mockAnnotatedType)); + assertFalse(this.unknownScalarFunction.canBuildType(Double.class, this.mockAnnotatedType)); + assertFalse(this.unknownScalarFunction.canBuildType(Boolean.class, this.mockAnnotatedType)); + assertFalse(this.unknownScalarFunction.canBuildType(List.class, this.mockAnnotatedType)); + } + + @Test + void canSerialize() { + assertEquals("five", unknownScalarType.getCoercing().serialize("five")); + assertEquals(5, unknownScalarType.getCoercing().serialize(5)); + assertEquals(5.0d, unknownScalarType.getCoercing().serialize(5.0d)); + assertEquals(true, unknownScalarType.getCoercing().serialize(true)); + assertEquals(List.of(5), unknownScalarType.getCoercing().serialize(List.of(5))); + } + + @Test + void canConvertFromLiteral() { + assertEquals( + "five", + unknownScalarType.getCoercing().parseLiteral(StringValue.newStringValue("five").build())); + assertEquals( + BigInteger.valueOf(5), + unknownScalarType + .getCoercing() + .parseLiteral(IntValue.newIntValue(BigInteger.valueOf(5)).build())); + assertEquals( + BigDecimal.valueOf(5.0d), + unknownScalarType + .getCoercing() + .parseLiteral(FloatValue.newFloatValue(BigDecimal.valueOf(5.0d)).build())); + assertEquals( + true, + unknownScalarType.getCoercing().parseLiteral(BooleanValue.newBooleanValue(true).build())); + assertEquals( + List.of("five"), + unknownScalarType + .getCoercing() + .parseLiteral( + ArrayValue.newArrayValue() + .value(StringValue.newStringValue("five").build()) + .build())); + } +} diff --git a/hypertrace-core-graphql-context/build.gradle.kts b/hypertrace-core-graphql-context/build.gradle.kts new file mode 100644 index 00000000..83285052 --- /dev/null +++ b/hypertrace-core-graphql-context/build.gradle.kts @@ -0,0 +1,25 @@ +plugins { + `java-library` + jacoco + id("org.hypertrace.jacoco-report-plugin") +} + +java { + sourceCompatibility = JavaVersion.VERSION_11 +} + +dependencies { + api("com.google.inject:guice:4.2.3") + api("com.graphql-java:graphql-java:14.0") + api("com.graphql-java-kickstart:graphql-java-servlet:9.1.0") + + implementation(project(":hypertrace-core-graphql-spi")) + + testImplementation("org.junit.jupiter:junit-jupiter:5.5.1") + testImplementation("org.mockito:mockito-core:3.2.4") + testImplementation("org.mockito:mockito-junit-jupiter:3.2.4") +} + +tasks.test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/ContextualCachingKey.java b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/ContextualCachingKey.java new file mode 100644 index 00000000..be32b654 --- /dev/null +++ b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/ContextualCachingKey.java @@ -0,0 +1,5 @@ +package org.hypertrace.core.graphql.context; + +public interface ContextualCachingKey { + GraphQlRequestContext getContext(); +} diff --git a/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilder.java b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilder.java new file mode 100644 index 00000000..9fe38543 --- /dev/null +++ b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilder.java @@ -0,0 +1,117 @@ +package org.hypertrace.core.graphql.context; + +import com.google.inject.Injector; +import graphql.kickstart.servlet.context.DefaultGraphQLServletContext; +import graphql.kickstart.servlet.context.DefaultGraphQLServletContextBuilder; +import graphql.kickstart.servlet.context.GraphQLServletContext; +import graphql.schema.DataFetcher; +import java.util.Arrays; +import java.util.Optional; +import javax.annotation.Nonnull; +import javax.inject.Inject; +import javax.security.auth.Subject; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.dataloader.DataLoaderRegistry; +import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; + +class DefaultGraphQlRequestContextBuilder extends DefaultGraphQLServletContextBuilder + implements GraphQlRequestContextBuilder { + private static final String DEFAULT_CONTEXT_ID = "DEFAULT_CONTEXT_ID"; + static final String AUTHORIZATION_HEADER_KEY = "Authorization"; + static final String TENANT_ID_HEADER_KEY = "x-tenant-id"; + + private final Injector injector; + private final GraphQlServiceConfig serviceConfig; + + @Inject + DefaultGraphQlRequestContextBuilder(Injector injector, GraphQlServiceConfig serviceConfig) { + this.injector = injector; + this.serviceConfig = serviceConfig; + } + + @Override + public GraphQlRequestContext build(HttpServletRequest request, HttpServletResponse response) { + return new DefaultGraphQlRequestContext(request, response); + } + + private final class DefaultGraphQlRequestContext implements GraphQlRequestContext { + private final GraphQLServletContext servletContext; + private final ContextualCachingKey cachingKey; + + private DefaultGraphQlRequestContext(HttpServletRequest request, HttpServletResponse response) { + this.servletContext = + DefaultGraphQLServletContext.createServletContext().with(request).with(response).build(); + this.cachingKey = + new DefaultContextualCacheKey(this, this.getTenantId().orElse(DEFAULT_CONTEXT_ID)); + } + + @Override + public Optional getSubject() { + return this.servletContext.getSubject(); + } + + @Override + public Optional getDataLoaderRegistry() { + return this.servletContext.getDataLoaderRegistry(); + } + + @Override + public > T constructDataFetcher(Class dataFetcherClass) { + return DefaultGraphQlRequestContextBuilder.this.injector.getInstance(dataFetcherClass); + } + + @Override + public Optional getAuthorizationHeader() { + HttpServletRequest request = this.servletContext.getHttpServletRequest(); + return Optional.ofNullable(request.getHeader(AUTHORIZATION_HEADER_KEY)) + .or(() -> Optional.ofNullable(request.getHeader(AUTHORIZATION_HEADER_KEY.toLowerCase()))); + } + + @Override + public Optional getTenantId() { + HttpServletRequest request = this.servletContext.getHttpServletRequest(); + return Optional.ofNullable(request.getHeader(TENANT_ID_HEADER_KEY)) + .or(DefaultGraphQlRequestContextBuilder.this.serviceConfig::getDefaultTenantId); + } + + @Nonnull + @Override + public ContextualCachingKey getCachingKey() { + return this.cachingKey; + } + } + + private static class DefaultContextualCacheKey implements ContextualCachingKey { + + private final GraphQlRequestContext context; + private final Object[] cacheInputs; + + private DefaultContextualCacheKey(GraphQlRequestContext context, Object... cacheInputs) { + this.context = context; + this.cacheInputs = cacheInputs; + } + + @Override + public GraphQlRequestContext getContext() { + return this.context; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + DefaultContextualCacheKey that = (DefaultContextualCacheKey) o; + return Arrays.equals(cacheInputs, that.cacheInputs); + } + + @Override + public int hashCode() { + return Arrays.hashCode(cacheInputs); + } + } +} diff --git a/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/GraphQlRequestContext.java b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/GraphQlRequestContext.java new file mode 100644 index 00000000..a4c5f117 --- /dev/null +++ b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/GraphQlRequestContext.java @@ -0,0 +1,22 @@ +package org.hypertrace.core.graphql.context; + +import graphql.kickstart.execution.context.GraphQLContext; +import graphql.schema.DataFetcher; +import java.util.Optional; +import javax.annotation.Nonnull; + +public interface GraphQlRequestContext extends GraphQLContext { + + /** + * A tool to create data fetchers via injection container due to limitations in the framework. For + * normal injectable instantiation, do not use this method. + */ + > T constructDataFetcher(Class dataFetcherClass); + + Optional getAuthorizationHeader(); + + Optional getTenantId(); + + @Nonnull + ContextualCachingKey getCachingKey(); +} diff --git a/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/GraphQlRequestContextBuilder.java b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/GraphQlRequestContextBuilder.java new file mode 100644 index 00000000..6d59a530 --- /dev/null +++ b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/GraphQlRequestContextBuilder.java @@ -0,0 +1,11 @@ +package org.hypertrace.core.graphql.context; + +import graphql.kickstart.servlet.context.GraphQLServletContextBuilder; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +public interface GraphQlRequestContextBuilder extends GraphQLServletContextBuilder { + @Override + GraphQlRequestContext build( + HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse); +} diff --git a/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/GraphQlRequestContextModule.java b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/GraphQlRequestContextModule.java new file mode 100644 index 00000000..de1ce1d2 --- /dev/null +++ b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/GraphQlRequestContextModule.java @@ -0,0 +1,12 @@ +package org.hypertrace.core.graphql.context; + +import com.google.inject.AbstractModule; +import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; + +public class GraphQlRequestContextModule extends AbstractModule { + @Override + protected void configure() { + bind(GraphQlRequestContextBuilder.class).to(DefaultGraphQlRequestContextBuilder.class); + requireBinding(GraphQlServiceConfig.class); + } +} diff --git a/hypertrace-core-graphql-context/src/test/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilderTest.java b/hypertrace-core-graphql-context/src/test/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilderTest.java new file mode 100644 index 00000000..2eca1410 --- /dev/null +++ b/hypertrace-core-graphql-context/src/test/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilderTest.java @@ -0,0 +1,106 @@ +package org.hypertrace.core.graphql.context; + +import static org.hypertrace.core.graphql.context.DefaultGraphQlRequestContextBuilder.AUTHORIZATION_HEADER_KEY; +import static org.hypertrace.core.graphql.context.DefaultGraphQlRequestContextBuilder.TENANT_ID_HEADER_KEY; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNotSame; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.reset; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import com.google.inject.Injector; +import graphql.schema.DataFetcher; +import java.util.Optional; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class DefaultGraphQlRequestContextBuilderTest { + + @Mock Injector mockInjector; + @Mock HttpServletRequest mockRequest; + @Mock HttpServletResponse mockResponse; + @Mock GraphQlServiceConfig mockServiceConfig; + + GraphQlRequestContextBuilder contextBuilder; + GraphQlRequestContext requestContext; + + @BeforeEach + void beforeEach() { + this.contextBuilder = + new DefaultGraphQlRequestContextBuilder(this.mockInjector, this.mockServiceConfig); + this.requestContext = this.contextBuilder.build(this.mockRequest, this.mockResponse); + } + + @Test + void returnsAuthorizationHeaderIfPresent() { + when(this.mockRequest.getHeader(eq(AUTHORIZATION_HEADER_KEY))).thenReturn("Bearer ABC"); + when(this.mockRequest.getHeader(eq(AUTHORIZATION_HEADER_KEY.toLowerCase()))) + .thenReturn("Bearer abc"); + assertEquals(Optional.of("Bearer ABC"), this.requestContext.getAuthorizationHeader()); + + when(this.mockRequest.getHeader(eq(AUTHORIZATION_HEADER_KEY))).thenReturn(null); + assertEquals(Optional.of("Bearer abc"), this.requestContext.getAuthorizationHeader()); + } + + @Test + void returnsEmptyOptionalIfNoAuthorizationHeaderPresent() { + when(this.mockRequest.getHeader(any())).thenReturn(null); + assertEquals(Optional.empty(), this.requestContext.getAuthorizationHeader()); + } + + @Test + void delegatesDataLoaderRegistry() { + assertTrue(this.requestContext.getDataLoaderRegistry().isPresent()); + } + + @Test + void canConstructDataFetcher() { + this.requestContext.constructDataFetcher(DataFetcher.class); + verify(this.mockInjector).getInstance(DataFetcher.class); + } + + @Test + void returnsTenantIdIfTenantIdHeaderPresent() { + when(this.mockRequest.getHeader(TENANT_ID_HEADER_KEY)).thenReturn("test tenant id"); + assertEquals(Optional.of("test tenant id"), this.requestContext.getTenantId()); + } + + @Test + void returnsDefaultTenantIdOnlyIfNoHeaderPresent() { + when(this.mockRequest.getHeader(TENANT_ID_HEADER_KEY)).thenReturn("test tenant id"); + when(this.mockServiceConfig.getDefaultTenantId()).thenReturn(Optional.of("default tenant id")); + assertEquals(Optional.of("test tenant id"), this.requestContext.getTenantId()); + reset(this.mockRequest); + assertEquals(Optional.of("default tenant id"), this.requestContext.getTenantId()); + } + + @Test + void returnsCachingKeyForNoAuth() { + assertNotNull(this.requestContext.getCachingKey()); + } + + @Test + void returnsCachingKeysEqualForSameTenant() { + when(this.mockRequest.getHeader(TENANT_ID_HEADER_KEY)).thenReturn("first tenant id"); + var firstKey = this.contextBuilder.build(this.mockRequest, this.mockResponse).getCachingKey(); + var secondKey = this.contextBuilder.build(this.mockRequest, this.mockResponse).getCachingKey(); + assertEquals(firstKey, secondKey); + assertNotSame(firstKey, secondKey); + + when(this.mockRequest.getHeader(TENANT_ID_HEADER_KEY)).thenReturn("second tenant id"); + var thirdKey = this.contextBuilder.build(this.mockRequest, this.mockResponse).getCachingKey(); + assertNotEquals(firstKey, thirdKey); + } +} diff --git a/hypertrace-core-graphql-deserialization/build.gradle.kts b/hypertrace-core-graphql-deserialization/build.gradle.kts new file mode 100644 index 00000000..d6b4ab84 --- /dev/null +++ b/hypertrace-core-graphql-deserialization/build.gradle.kts @@ -0,0 +1,29 @@ +plugins { + `java-library` + jacoco + id("org.hypertrace.jacoco-report-plugin") +} + +java { + sourceCompatibility = JavaVersion.VERSION_11 +} + +dependencies { + api("com.google.inject:guice:4.2.3") + api("com.fasterxml.jackson.core:jackson-databind:2.11.0") + api("com.graphql-java:graphql-java:14.0") + + annotationProcessor("org.projectlombok:lombok:1.18.12") + compileOnly("org.projectlombok:lombok:1.18.12") + + implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.0") + implementation("org.slf4j:slf4j-api:1.7.3") + + testImplementation("org.junit.jupiter:junit-jupiter:5.5.1") + testImplementation("org.mockito:mockito-core:3.2.4") + testImplementation("org.mockito:mockito-junit-jupiter:3.2.4") +} + +tasks.test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/ArgumentDeserializationConfig.java b/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/ArgumentDeserializationConfig.java new file mode 100644 index 00000000..be53e8da --- /dev/null +++ b/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/ArgumentDeserializationConfig.java @@ -0,0 +1,20 @@ +package org.hypertrace.core.graphql.deserialization; + +import com.fasterxml.jackson.databind.Module; +import java.util.Collections; +import java.util.List; + +public interface ArgumentDeserializationConfig { + + String getArgumentKey(); + + Class getArgumentSchema(); + + default List jacksonModules() { + return Collections.emptyList(); + } + + static ArgumentDeserializationConfig forPrimitive(String argKey, Class argSchema) { + return new SimpleArgumentDeserializationConfig(argKey, argSchema); + } +} diff --git a/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/ArgumentDeserializer.java b/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/ArgumentDeserializer.java new file mode 100644 index 00000000..1b464b8d --- /dev/null +++ b/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/ArgumentDeserializer.java @@ -0,0 +1,18 @@ +package org.hypertrace.core.graphql.deserialization; + +import java.util.List; +import java.util.Map; +import java.util.Optional; + +public interface ArgumentDeserializer { + + Optional deserializeObject(Map arguments, Class argSchema); + + Optional> deserializeObjectList(Map arguments, Class argSchema); + + Optional deserializePrimitive( + Map arguments, Class> argSchema); + + Optional> deserializePrimitiveList( + Map arguments, Class> argSchema); +} diff --git a/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/DefaultArgumentDeserializer.java b/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/DefaultArgumentDeserializer.java new file mode 100644 index 00000000..3d0ae56b --- /dev/null +++ b/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/DefaultArgumentDeserializer.java @@ -0,0 +1,124 @@ +package org.hypertrace.core.graphql.deserialization; + +import com.fasterxml.jackson.databind.Module; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.json.JsonMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import javax.annotation.Nullable; +import javax.inject.Inject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +class DefaultArgumentDeserializer implements ArgumentDeserializer { + + private static final List defaultModules = List.of(new JavaTimeModule()); + private static final Logger LOG = LoggerFactory.getLogger(DefaultArgumentDeserializer.class); + + private final ObjectMapper objectMapper; + private final Map, String> argKeyBySchema; + + @Inject + DefaultArgumentDeserializer(Set argumentDeserializationConfigs) { + Set jacksonModules = + Stream.concat( + defaultModules.stream(), + argumentDeserializationConfigs.stream() + .map(ArgumentDeserializationConfig::jacksonModules) + .flatMap(Collection::stream)) + .collect(Collectors.toUnmodifiableSet()); + + this.argKeyBySchema = + argumentDeserializationConfigs.stream() + .collect( + Collectors.toUnmodifiableMap( + ArgumentDeserializationConfig::getArgumentSchema, + ArgumentDeserializationConfig::getArgumentKey)); + + this.objectMapper = JsonMapper.builder().addModules(jacksonModules).build(); + } + + @Override + public Optional deserializeObject(Map arguments, Class argSchema) { + return this.argumentKeyForSchema(argSchema) + .flatMap(key -> this.deserializeValue(arguments.get(key), argSchema)); + } + + @Override + public Optional> deserializeObjectList( + Map arguments, Class argSchema) { + return this.argumentKeyForSchema(argSchema) + .flatMap(key -> this.deserializeValueList(arguments.get(key), argSchema)); + } + + @Override + public Optional deserializePrimitive( + Map arguments, Class> argSchema) { + return this.argumentKeyForSchema(argSchema).map(key -> this.uncheckedCast(arguments.get(key))); + } + + @Override + public Optional> deserializePrimitiveList( + Map arguments, Class> argSchema) { + return this.argumentKeyForSchema(argSchema) + .flatMap(key -> this.logIfNotList(arguments.get(key))); + } + + private Optional deserializeValue(@Nullable Object rawValue, Class argSchema) { + try { + return Optional.ofNullable(rawValue) + .map(presentRawValue -> this.objectMapper.convertValue(presentRawValue, argSchema)); + } catch (Throwable t) { + LOG.warn("Failed to deserialize for argument type '{}'", argSchema, t); + return Optional.empty(); + } + } + + private Optional argumentKeyForSchema(Class argSchema) { + return Optional.ofNullable(this.argKeyBySchema.get(argSchema)) + .or( + () -> { + LOG.warn( + "No deserialization config registered for provided class '{}'", + argSchema.getCanonicalName()); + + return Optional.empty(); + }); + } + + private Optional> deserializeValueList( + @Nullable Object rawValueList, Class argSchema) { + try { + return this.logIfNotList(rawValueList) + .map( + list -> + list.stream() + .map(rawValue -> this.deserializeValue(rawValue, argSchema).orElseThrow()) + .collect(Collectors.toUnmodifiableList())); + } catch (Exception e) { + return Optional.empty(); + } + } + + private Optional> logIfNotList(@Nullable Object object) { + if (object instanceof List) { + return Optional.of(this.uncheckedCast(object)); + } + if (Objects.nonNull(object)) { + LOG.warn("Expected to deserialize list but instead got {}", object); + } + return Optional.empty(); + } + + @SuppressWarnings("unchecked") + private T uncheckedCast(Object value) { + return (T) value; + } +} diff --git a/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/GraphQlDeserializationRegistryModule.java b/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/GraphQlDeserializationRegistryModule.java new file mode 100644 index 00000000..cabd8d88 --- /dev/null +++ b/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/GraphQlDeserializationRegistryModule.java @@ -0,0 +1,13 @@ +package org.hypertrace.core.graphql.deserialization; + +import com.google.inject.AbstractModule; +import com.google.inject.multibindings.Multibinder; + +public class GraphQlDeserializationRegistryModule extends AbstractModule { + + @Override + protected void configure() { + bind(ArgumentDeserializer.class).to(DefaultArgumentDeserializer.class); + Multibinder.newSetBinder(binder(), ArgumentDeserializationConfig.class); + } +} diff --git a/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/PrimitiveArgument.java b/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/PrimitiveArgument.java new file mode 100644 index 00000000..bac71cd5 --- /dev/null +++ b/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/PrimitiveArgument.java @@ -0,0 +1,3 @@ +package org.hypertrace.core.graphql.deserialization; + +public interface PrimitiveArgument {} diff --git a/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/SimpleArgumentDeserializationConfig.java b/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/SimpleArgumentDeserializationConfig.java new file mode 100644 index 00000000..5e6c8263 --- /dev/null +++ b/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/SimpleArgumentDeserializationConfig.java @@ -0,0 +1,9 @@ +package org.hypertrace.core.graphql.deserialization; + +import lombok.Value; + +@Value +class SimpleArgumentDeserializationConfig implements ArgumentDeserializationConfig { + String argumentKey; + Class argumentSchema; +} diff --git a/hypertrace-core-graphql-deserialization/src/test/java/org/hypertrace/core/graphql/deserialization/DefaultArgumentDeserializerTest.java b/hypertrace-core-graphql-deserialization/src/test/java/org/hypertrace/core/graphql/deserialization/DefaultArgumentDeserializerTest.java new file mode 100644 index 00000000..b0b6ead1 --- /dev/null +++ b/hypertrace-core-graphql-deserialization/src/test/java/org/hypertrace/core/graphql/deserialization/DefaultArgumentDeserializerTest.java @@ -0,0 +1,205 @@ +package org.hypertrace.core.graphql.deserialization; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.Module; +import com.fasterxml.jackson.databind.module.SimpleModule; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class DefaultArgumentDeserializerTest { + + private DefaultArgumentDeserializer argumentDeserializer; + + private interface TestPrimitiveArgument extends PrimitiveArgument { + String ARG_NAME = "primitiveArg"; + } + + private interface TestObjectArgument { + String ARG_NAME = "objectArg"; + String VALUE_NAME = "value"; + + String value(); + } + + private static class DefaultTestObjectArgument implements TestObjectArgument { + @JsonProperty(VALUE_NAME) + private String value; + + @Override + public String value() { + return this.value; + } + } + + @BeforeEach + void beforeEach() { + this.argumentDeserializer = + new DefaultArgumentDeserializer( + Set.of( + new ArgumentDeserializationConfig() { + @Override + public String getArgumentKey() { + return TestPrimitiveArgument.ARG_NAME; + } + + @Override + public Class getArgumentSchema() { + return TestPrimitiveArgument.class; + } + }, + new ArgumentDeserializationConfig() { + @Override + public String getArgumentKey() { + return TestObjectArgument.ARG_NAME; + } + + @Override + public Class getArgumentSchema() { + return TestObjectArgument.class; + } + + @Override + public List jacksonModules() { + return List.of( + new SimpleModule() + .addAbstractTypeMapping( + TestObjectArgument.class, DefaultTestObjectArgument.class)); + } + })); + } + + @Test + void deserializesObjectListIfPresent() { + Map argMap = + Map.of( + TestObjectArgument.ARG_NAME, + List.of( + Map.of(TestObjectArgument.VALUE_NAME, "foo"), + Map.of(TestObjectArgument.VALUE_NAME, "bar"))); + + List result = + this.argumentDeserializer + .deserializeObjectList(argMap, TestObjectArgument.class) + .orElseThrow(); + assertEquals(2, result.size()); + assertEquals("foo", result.get(0).value()); + assertEquals("bar", result.get(1).value()); + } + + @Test + void emptyObjectListIfNotPresent() { + assertEquals( + Optional.empty(), + this.argumentDeserializer.deserializeObjectList( + Collections.emptyMap(), TestObjectArgument.class)); + } + + @Test + void emptyObjectListIfUnableToDeserialize() { + Map argMap = + Map.of(TestObjectArgument.ARG_NAME, List.of(Map.of("garbage", "more garbage"))); + + assertEquals( + Optional.empty(), + this.argumentDeserializer.deserializeObjectList(argMap, TestObjectArgument.class)); + } + + @Test + void emptyListIfObjectListPresentButEmpty() { + Map argMap = Map.of(TestObjectArgument.ARG_NAME, List.of()); + assertEquals( + Optional.of(List.of()), + this.argumentDeserializer.deserializeObjectList(argMap, TestObjectArgument.class)); + } + + @Test + void deserializeObjectIfPresent() { + Map argMap = + Map.of(TestObjectArgument.ARG_NAME, Map.of(TestObjectArgument.VALUE_NAME, "baz")); + + assertEquals( + "baz", + this.argumentDeserializer + .deserializeObject(argMap, TestObjectArgument.class) + .orElseThrow() + .value()); + } + + @Test + void emptyIfNoObjectPresent() { + assertEquals( + Optional.empty(), + this.argumentDeserializer.deserializeObject( + Collections.emptyMap(), TestObjectArgument.class)); + } + + @Test + void emptyIfDeserializationFailurePresent() { + Map argMap = + Map.of(TestObjectArgument.ARG_NAME, Map.of("garbage", "more garbage")); + + assertEquals( + Optional.empty(), + this.argumentDeserializer.deserializeObject(argMap, TestObjectArgument.class)); + } + + @Test + void deserializePrimitive() { + Map argMap = Map.of(TestPrimitiveArgument.ARG_NAME, "baz"); + + assertEquals( + Optional.of("baz"), + this.argumentDeserializer.deserializePrimitive(argMap, TestPrimitiveArgument.class)); + } + + @Test + void emptyIfNoPrimitivePresent() { + assertEquals( + Optional.empty(), + this.argumentDeserializer.deserializeObject( + Collections.emptyMap(), TestPrimitiveArgument.class)); + } + + @Test + void deserializePrimitiveList() { + Map argMap = + Map.of(TestPrimitiveArgument.ARG_NAME, List.of("foo", "bar", "baz")); + assertEquals( + Optional.of(List.of("foo", "bar", "baz")), + this.argumentDeserializer.deserializePrimitiveList(argMap, TestPrimitiveArgument.class)); + } + + @Test + void emptyListForEmptyPrimitiveList() { + Map argMap = Map.of(TestPrimitiveArgument.ARG_NAME, List.of()); + assertEquals( + Optional.of(List.of()), + this.argumentDeserializer.deserializePrimitiveList(argMap, TestPrimitiveArgument.class)); + } + + @Test + void emptyIfNoPrimitiveList() { + assertEquals( + Optional.empty(), + this.argumentDeserializer.deserializePrimitiveList( + Collections.emptyMap(), TestPrimitiveArgument.class)); + } + + @Test + void emptyIfNotList() { + Map argMap = Map.of(TestPrimitiveArgument.ARG_NAME, "baz"); + assertEquals( + Optional.empty(), + this.argumentDeserializer.deserializePrimitiveList(argMap, TestPrimitiveArgument.class)); + } +} diff --git a/hypertrace-core-graphql-gateway-service-utils/build.gradle.kts b/hypertrace-core-graphql-gateway-service-utils/build.gradle.kts new file mode 100644 index 00000000..8fd9da48 --- /dev/null +++ b/hypertrace-core-graphql-gateway-service-utils/build.gradle.kts @@ -0,0 +1,25 @@ +plugins { + `java-library` + jacoco + id("org.hypertrace.jacoco-report-plugin") +} + +java { + sourceCompatibility = JavaVersion.VERSION_11 +} + +dependencies { + api("com.google.inject:guice:4.2.3") + api("org.hypertrace.gateway.service:gateway-service-api:0.1.0") + api(project(":hypertrace-core-graphql-attribute-store")) + api("io.reactivex.rxjava3:rxjava:3.0.2") + api(project(":hypertrace-core-graphql-common-schema")) + + testImplementation("org.junit.jupiter:junit-jupiter:5.5.1") + testImplementation("org.mockito:mockito-core:3.2.4") + testImplementation("org.mockito:mockito-junit-jupiter:3.2.4") +} + +tasks.test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/AttributeMapConverter.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/AttributeMapConverter.java new file mode 100644 index 00000000..63234f62 --- /dev/null +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/AttributeMapConverter.java @@ -0,0 +1,42 @@ +package org.hypertrace.core.graphql.utils.gateway; + +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.Single; +import java.util.AbstractMap.SimpleImmutableEntry; +import java.util.Collection; +import java.util.Map; +import java.util.Map.Entry; +import javax.inject.Inject; +import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.utils.BiConverter; +import org.hypertrace.core.graphql.common.utils.CollectorUtils; +import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.gateway.service.v1.common.Value; + +class AttributeMapConverter + implements BiConverter, Map, Map> { + + private final Converter valueConverter; + + @Inject + AttributeMapConverter(Converter valueConverter) { + this.valueConverter = valueConverter; + } + + @Override + public Single> convert( + Collection attributes, Map response) { + return Observable.fromIterable(attributes) + .flatMapSingle(attribute -> this.buildAttributeMapEntry(attribute, response)) + .distinct() + .collect(CollectorUtils.immutableMapEntryCollector()); + } + + private Single> buildAttributeMapEntry( + AttributeRequest attributeRequest, Map response) { + // Uses SimpleImmutableEntry to support null values + return this.valueConverter + .convert(response.get(attributeRequest.alias())) + .map(value -> new SimpleImmutableEntry<>(attributeRequest.attribute().key(), value)); + } +} diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/ColumnIdentifierConverter.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/ColumnIdentifierConverter.java new file mode 100644 index 00000000..a6128f35 --- /dev/null +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/ColumnIdentifierConverter.java @@ -0,0 +1,17 @@ +package org.hypertrace.core.graphql.utils.gateway; + +import io.reactivex.rxjava3.core.Single; +import org.hypertrace.core.graphql.attributes.AttributeModel; +import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.gateway.service.v1.common.ColumnIdentifier; +import org.hypertrace.gateway.service.v1.common.ColumnIdentifier.Builder; + +class ColumnIdentifierConverter implements Converter { + + @Override + public Single convert(AttributeModel attribute) { + return Single.just(attribute.id()) + .map(ColumnIdentifier.newBuilder()::setColumnName) + .map(Builder::build); + } +} diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/ColumnIdentifierExpressionConverter.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/ColumnIdentifierExpressionConverter.java new file mode 100644 index 00000000..8d3976f5 --- /dev/null +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/ColumnIdentifierExpressionConverter.java @@ -0,0 +1,26 @@ +package org.hypertrace.core.graphql.utils.gateway; + +import io.reactivex.rxjava3.core.Single; +import javax.inject.Inject; +import org.hypertrace.core.graphql.attributes.AttributeModel; +import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.gateway.service.v1.common.Expression; +import org.hypertrace.gateway.service.v1.common.Expression.Builder; + +class ColumnIdentifierExpressionConverter implements Converter { + + private final ColumnIdentifierConverter columnIdentifierConverter; + + @Inject + ColumnIdentifierExpressionConverter(ColumnIdentifierConverter columnIdentifierConverter) { + this.columnIdentifierConverter = columnIdentifierConverter; + } + + @Override + public Single convert(AttributeModel attribute) { + return this.columnIdentifierConverter + .convert(attribute) + .map(Expression.newBuilder()::setColumnIdentifier) + .map(Builder::build); + } +} diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/FilterConverter.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/FilterConverter.java new file mode 100644 index 00000000..beb62be8 --- /dev/null +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/FilterConverter.java @@ -0,0 +1,58 @@ +package org.hypertrace.core.graphql.utils.gateway; + +import static io.reactivex.rxjava3.core.Single.zip; + +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.Single; +import java.util.Collection; +import java.util.stream.Collectors; +import javax.inject.Inject; +import org.hypertrace.core.graphql.common.request.AttributeAssociation; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; +import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.gateway.service.v1.common.Filter; +import org.hypertrace.gateway.service.v1.common.Operator; + +class FilterConverter + implements Converter>, Filter> { + + private final ColumnIdentifierExpressionConverter columnIdentifierExpressionConverter; + private final OperatorConverter operatorConverter; + private final LiteralConstantExpressionConverter literalConstantExpressionConverter; + + @Inject + FilterConverter( + ColumnIdentifierExpressionConverter columnIdentifierExpressionConverter, + OperatorConverter operatorConverter, + LiteralConstantExpressionConverter literalConstantExpressionConverter) { + this.columnIdentifierExpressionConverter = columnIdentifierExpressionConverter; + this.operatorConverter = operatorConverter; + this.literalConstantExpressionConverter = literalConstantExpressionConverter; + } + + @Override + public Single convert(Collection> filters) { + if (filters.isEmpty()) { + return Single.just(Filter.getDefaultInstance()); + } + + return Observable.fromIterable(filters) + .flatMapSingle(this::buildFilter) + .collect(Collectors.toUnmodifiableList()) + .map( + filterList -> + Filter.newBuilder() + .setOperator(Operator.AND) + .addAllChildFilter(filterList) + .build()); + } + + private Single buildFilter(AttributeAssociation filter) { + return zip( + this.columnIdentifierExpressionConverter.convert(filter.attribute()), + this.operatorConverter.convert(filter.value().operator()), + this.literalConstantExpressionConverter.convert(filter.value().value()), + (key, operator, value) -> + Filter.newBuilder().setLhs(key).setOperator(operator).setRhs(value).build()); + } +} diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayUtilsModule.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayUtilsModule.java new file mode 100644 index 00000000..3dfb7fa8 --- /dev/null +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayUtilsModule.java @@ -0,0 +1,64 @@ +package org.hypertrace.core.graphql.utils.gateway; + +import com.google.inject.AbstractModule; +import com.google.inject.Key; +import com.google.inject.TypeLiteral; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.hypertrace.core.graphql.attributes.AttributeModel; +import org.hypertrace.core.graphql.common.request.AttributeAssociation; +import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderDirection; +import org.hypertrace.core.graphql.common.utils.BiConverter; +import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.gateway.service.v1.common.ColumnIdentifier; +import org.hypertrace.gateway.service.v1.common.Expression; +import org.hypertrace.gateway.service.v1.common.Filter; +import org.hypertrace.gateway.service.v1.common.LiteralConstant; +import org.hypertrace.gateway.service.v1.common.OrderByExpression; +import org.hypertrace.gateway.service.v1.common.SortOrder; +import org.hypertrace.gateway.service.v1.common.Value; + +public class GatewayUtilsModule extends AbstractModule { + + @Override + protected void configure() { + bind(Key.get( + new TypeLiteral< + BiConverter< + Collection, Map, Map>>() {})) + .to(AttributeMapConverter.class); + + bind(Key.get(new TypeLiteral>() {})).to(UnwrappedValueConverter.class); + bind(Key.get(new TypeLiteral, Set>>() {})) + .to(SelectionExpressionSetConverter.class); + + bind(Key.get( + new TypeLiteral< + Converter< + List>, List>>() {})) + .to(OrderByExpressionListConverter.class); + + bind(Key.get( + new TypeLiteral< + Converter>, Filter>>() {})) + .to(FilterConverter.class); + + bind(Key.get(new TypeLiteral>() {})) + .to(ColumnIdentifierConverter.class); + bind(Key.get(new TypeLiteral>() {})) + .to(ColumnIdentifierExpressionConverter.class); + + bind(Key.get(new TypeLiteral>() {})) + .to(LiteralConstantConverter.class); + bind(Key.get(new TypeLiteral>() {})) + .to(LiteralConstantExpressionConverter.class); + + bind(Key.get(new TypeLiteral>() {})) + .to(SortOrderConverter.class); + } +} diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/LiteralConstantConverter.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/LiteralConstantConverter.java new file mode 100644 index 00000000..f828ab77 --- /dev/null +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/LiteralConstantConverter.java @@ -0,0 +1,75 @@ +package org.hypertrace.core.graphql.utils.gateway; + +import io.reactivex.rxjava3.core.Single; +import java.math.BigInteger; +import java.time.Instant; +import java.time.temporal.TemporalAccessor; +import java.util.Arrays; +import java.util.Collection; +import java.util.Optional; +import java.util.stream.Collectors; +import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.gateway.service.v1.common.LiteralConstant; +import org.hypertrace.gateway.service.v1.common.LiteralConstant.Builder; +import org.hypertrace.gateway.service.v1.common.Value; +import org.hypertrace.gateway.service.v1.common.ValueType; + +class LiteralConstantConverter implements Converter { + + @Override + public Single convert(Object from) { + return Single.just(Optional.ofNullable(from)) + .map(this::convertValue) + .map(LiteralConstant.newBuilder()::setValue) + .map(Builder::build); + } + + private Value convertValue(Optional optionalObject) { + if (optionalObject.isEmpty()) { + return Value.getDefaultInstance(); + } + Object object = optionalObject.get(); + + if (this.assignableToAnyOfClasses( + object.getClass(), Long.class, Integer.class, BigInteger.class)) { + return Value.newBuilder() + .setValueType(ValueType.LONG) + .setLong(((Number) object).longValue()) + .build(); + } + if (this.assignableToAnyOfClasses(object.getClass(), Number.class)) { + return Value.newBuilder() + .setValueType(ValueType.DOUBLE) + .setDouble(((Number) object).doubleValue()) + .build(); + } + if (this.assignableToAnyOfClasses(object.getClass(), Boolean.class)) { + return Value.newBuilder().setValueType(ValueType.BOOL).setBoolean((Boolean) object).build(); + } + if (this.assignableToAnyOfClasses(object.getClass(), TemporalAccessor.class)) { + return Value.newBuilder() + .setValueType(ValueType.TIMESTAMP) + .setTimestamp(Instant.from((TemporalAccessor) object).toEpochMilli()) + .build(); + } + if (this.assignableToAnyOfClasses(object.getClass(), Collection.class)) { + // TODO matches old impl, but probably should be expanded + return Value.newBuilder() + .setValueType(ValueType.STRING_ARRAY) + .addAllStringArray( + ((Collection) object) + .stream().map(String::valueOf).collect(Collectors.toUnmodifiableList())) + .build(); + } + + return Value.newBuilder() + .setValueType(ValueType.STRING) + .setString(String.valueOf(object)) + .build(); + } + + private boolean assignableToAnyOfClasses(Class classToCheck, Class... classesAllowed) { + return Arrays.stream(classesAllowed) + .anyMatch(allowedClass -> allowedClass.isAssignableFrom(classToCheck)); + } +} diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/LiteralConstantExpressionConverter.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/LiteralConstantExpressionConverter.java new file mode 100644 index 00000000..e5bbe0b4 --- /dev/null +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/LiteralConstantExpressionConverter.java @@ -0,0 +1,25 @@ +package org.hypertrace.core.graphql.utils.gateway; + +import io.reactivex.rxjava3.core.Single; +import javax.inject.Inject; +import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.gateway.service.v1.common.Expression; +import org.hypertrace.gateway.service.v1.common.Expression.Builder; + +class LiteralConstantExpressionConverter implements Converter { + + private final LiteralConstantConverter constantConverter; + + @Inject + LiteralConstantExpressionConverter(LiteralConstantConverter constantConverter) { + this.constantConverter = constantConverter; + } + + @Override + public Single convert(Object from) { + return this.constantConverter + .convert(from) + .map(Expression.newBuilder()::setLiteral) + .map(Builder::build); + } +} diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/OperatorConverter.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/OperatorConverter.java new file mode 100644 index 00000000..cd97aab9 --- /dev/null +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/OperatorConverter.java @@ -0,0 +1,41 @@ +package org.hypertrace.core.graphql.utils.gateway; + +import io.reactivex.rxjava3.core.Single; +import java.util.UnknownFormatConversionException; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterOperatorType; +import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.gateway.service.v1.common.Operator; + +class OperatorConverter implements Converter { + + @Override + public Single convert(FilterOperatorType filterOperatorType) { + switch (filterOperatorType) { + case LESS_THAN: + return Single.just(Operator.LT); + case LESS_THAN_OR_EQUAL_TO: + return Single.just(Operator.LE); + case GREATER_THAN: + return Single.just(Operator.GT); + case GREATER_THAN_OR_EQUAL_TO: + return Single.just(Operator.GE); + case EQUALS: + return Single.just(Operator.EQ); + case NOT_EQUALS: + return Single.just(Operator.NEQ); + case IN: + return Single.just(Operator.IN); + case LIKE: + return Single.just(Operator.LIKE); + case CONTAINS_KEY: + return Single.just(Operator.CONTAINS_KEY); + case CONTAINS_KEY_VALUE: + return Single.just(Operator.CONTAINS_KEYVALUE); + default: + return Single.error( + new UnknownFormatConversionException( + String.format( + "Unable to convert unknown operator '%s'", filterOperatorType.name()))); + } + } +} diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/OrderByExpressionListConverter.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/OrderByExpressionListConverter.java new file mode 100644 index 00000000..aad30a28 --- /dev/null +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/OrderByExpressionListConverter.java @@ -0,0 +1,47 @@ +package org.hypertrace.core.graphql.utils.gateway; + +import static io.reactivex.rxjava3.core.Single.zip; + +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.Single; +import java.util.List; +import java.util.stream.Collectors; +import javax.inject.Inject; +import org.hypertrace.core.graphql.common.request.AttributeAssociation; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; +import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.gateway.service.v1.common.OrderByExpression; + +class OrderByExpressionListConverter + implements Converter>, List> { + + private final ColumnIdentifierExpressionConverter columnExpressionConverter; + private final SortOrderConverter sortOrderConverter; + + @Inject + OrderByExpressionListConverter( + ColumnIdentifierExpressionConverter columnExpressionConverter, + SortOrderConverter sortOrderConverter) { + this.columnExpressionConverter = columnExpressionConverter; + this.sortOrderConverter = sortOrderConverter; + } + + @Override + public Single> convert(List> orders) { + return Observable.fromIterable(orders) + .flatMapSingle(this::buildOrderByExpression) + .collect(Collectors.toUnmodifiableList()); + } + + private Single buildOrderByExpression( + AttributeAssociation orderArgument) { + return zip( + this.sortOrderConverter.convert(orderArgument.value().direction()), + this.columnExpressionConverter.convert(orderArgument.attribute()), + (sortOrder, columnExpression) -> + OrderByExpression.newBuilder() + .setOrder(sortOrder) + .setExpression(columnExpression) + .build()); + } +} diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/SelectionExpressionSetConverter.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/SelectionExpressionSetConverter.java new file mode 100644 index 00000000..45a8b61f --- /dev/null +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/SelectionExpressionSetConverter.java @@ -0,0 +1,39 @@ +package org.hypertrace.core.graphql.utils.gateway; + +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.Single; +import java.util.Collection; +import java.util.Set; +import java.util.stream.Collectors; +import javax.inject.Inject; +import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.gateway.service.v1.common.Expression; +import org.hypertrace.gateway.service.v1.common.Expression.Builder; + +class SelectionExpressionSetConverter + implements Converter, Set> { + + private final ColumnIdentifierExpressionConverter columnExpressionConverter; + + @Inject + SelectionExpressionSetConverter(ColumnIdentifierExpressionConverter columnExpressionConverter) { + this.columnExpressionConverter = columnExpressionConverter; + } + + @Override + public Single> convert(Collection attributeRequests) { + return Observable.fromIterable(attributeRequests) + .flatMapSingle(this::buildAliasedSelectionExpression) + .collect(Collectors.toUnmodifiableSet()); + } + + private Single buildAliasedSelectionExpression(AttributeRequest attributeRequest) { + return this.columnExpressionConverter + .convert(attributeRequest.attribute()) + .map(Expression::toBuilder) + .doOnSuccess( + builder -> builder.getColumnIdentifierBuilder().setAlias(attributeRequest.alias())) + .map(Builder::build); + } +} diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/SortOrderConverter.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/SortOrderConverter.java new file mode 100644 index 00000000..3ceae53c --- /dev/null +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/SortOrderConverter.java @@ -0,0 +1,23 @@ +package org.hypertrace.core.graphql.utils.gateway; + +import io.reactivex.rxjava3.core.Single; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderDirection; +import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.gateway.service.v1.common.SortOrder; + +class SortOrderConverter implements Converter { + + @Override + public Single convert(OrderDirection orderDirection) { + switch (orderDirection) { + case ASC: + return Single.just(SortOrder.ASC); + case DESC: + return Single.just(SortOrder.DESC); + default: + return Single.error( + new UnsupportedOperationException( + String.format("Cannot convert sort order for unknown value '%s'", orderDirection))); + } + } +} diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/UnwrappedValueConverter.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/UnwrappedValueConverter.java new file mode 100644 index 00000000..859a2f8c --- /dev/null +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/UnwrappedValueConverter.java @@ -0,0 +1,46 @@ +package org.hypertrace.core.graphql.utils.gateway; + +import io.reactivex.rxjava3.core.Single; +import java.time.Instant; +import java.util.Optional; +import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.gateway.service.v1.common.Value; + +class UnwrappedValueConverter implements Converter { + + @Override + public Single convert(Value from) { + Value value = Optional.ofNullable(from).orElse(Value.getDefaultInstance()); + switch (value.getValueType()) { + case STRING: + return Single.just(value.getString()); + case BOOL: + return Single.just(value.getBoolean()); + case LONG: + return Single.just(value.getLong()); + case DOUBLE: + return Single.just(value.getDouble()); + case TIMESTAMP: + try { + return Single.just(Instant.ofEpochMilli(value.getTimestamp())); + } catch (Throwable t) { + return Single.error(t); + } + case STRING_MAP: + return Single.just(value.getStringMapMap()); + case STRING_ARRAY: + return Single.just(value.getStringArrayList()); + case LONG_ARRAY: + case DOUBLE_ARRAY: + case BOOLEAN_ARRAY: + case UNSET: + case UNRECOGNIZED: + default: + return Single.error( + new UnsupportedOperationException( + String.format( + "Cannot convert value for unknown value type '%s'", + value.getValueType().name()))); + } + } +} diff --git a/hypertrace-core-graphql-gateway-service-utils/src/test/java/org/hypertrace/core/graphql/utils/gateway/ColumnIdentifierConverterTest.java b/hypertrace-core-graphql-gateway-service-utils/src/test/java/org/hypertrace/core/graphql/utils/gateway/ColumnIdentifierConverterTest.java new file mode 100644 index 00000000..a4b8de0a --- /dev/null +++ b/hypertrace-core-graphql-gateway-service-utils/src/test/java/org/hypertrace/core/graphql/utils/gateway/ColumnIdentifierConverterTest.java @@ -0,0 +1,25 @@ +package org.hypertrace.core.graphql.utils.gateway; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.when; + +import org.hypertrace.core.graphql.attributes.AttributeModel; +import org.hypertrace.gateway.service.v1.common.ColumnIdentifier; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class ColumnIdentifierConverterTest { + @Mock AttributeModel mockAttribute; + + @Test + void convertsColumnBasedOnAttributeId() { + when(mockAttribute.id()).thenReturn("expectedIdentifier"); + + assertEquals( + ColumnIdentifier.newBuilder().setColumnName("expectedIdentifier").build(), + new ColumnIdentifierConverter().convert(this.mockAttribute).blockingGet()); + } +} diff --git a/hypertrace-core-graphql-gateway-service-utils/src/test/java/org/hypertrace/core/graphql/utils/gateway/ColumnIdentifierExpressionConverterTest.java b/hypertrace-core-graphql-gateway-service-utils/src/test/java/org/hypertrace/core/graphql/utils/gateway/ColumnIdentifierExpressionConverterTest.java new file mode 100644 index 00000000..e0ae38d8 --- /dev/null +++ b/hypertrace-core-graphql-gateway-service-utils/src/test/java/org/hypertrace/core/graphql/utils/gateway/ColumnIdentifierExpressionConverterTest.java @@ -0,0 +1,35 @@ +package org.hypertrace.core.graphql.utils.gateway; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import io.reactivex.rxjava3.core.Single; +import org.hypertrace.core.graphql.attributes.AttributeModel; +import org.hypertrace.gateway.service.v1.common.ColumnIdentifier; +import org.hypertrace.gateway.service.v1.common.Expression; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class ColumnIdentifierExpressionConverterTest { + @Mock ColumnIdentifierConverter mockColumnIdentifierConverter; + @Mock AttributeModel mockAttribute; + + @Test + void convertsColumnBasedOnAttributeId() { + ColumnIdentifier expectedColumnIdentifier = + ColumnIdentifier.newBuilder().setColumnName("foo").build(); + ColumnIdentifierExpressionConverter columnIdentifierExpressionConverter = + new ColumnIdentifierExpressionConverter(this.mockColumnIdentifierConverter); + + when(this.mockColumnIdentifierConverter.convert(any())) + .thenReturn(Single.just(expectedColumnIdentifier)); + + assertEquals( + Expression.newBuilder().setColumnIdentifier(expectedColumnIdentifier).build(), + columnIdentifierExpressionConverter.convert(this.mockAttribute).blockingGet()); + } +} diff --git a/hypertrace-core-graphql-gateway-service-utils/src/test/java/org/hypertrace/core/graphql/utils/gateway/LiteralConstantConverterTest.java b/hypertrace-core-graphql-gateway-service-utils/src/test/java/org/hypertrace/core/graphql/utils/gateway/LiteralConstantConverterTest.java new file mode 100644 index 00000000..051bb31c --- /dev/null +++ b/hypertrace-core-graphql-gateway-service-utils/src/test/java/org/hypertrace/core/graphql/utils/gateway/LiteralConstantConverterTest.java @@ -0,0 +1,93 @@ +package org.hypertrace.core.graphql.utils.gateway; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.time.Instant; +import java.util.List; +import org.hypertrace.gateway.service.v1.common.LiteralConstant; +import org.hypertrace.gateway.service.v1.common.Value; +import org.hypertrace.gateway.service.v1.common.ValueType; +import org.junit.jupiter.api.Test; + +class LiteralConstantConverterTest { + + @Test + void convertsValuesOfVariousTypes() { + LiteralConstantConverter converter = new LiteralConstantConverter(); + + assertEquals( + LiteralConstant.newBuilder() + .setValue(Value.newBuilder().setValueType(ValueType.STRING).setString("foo")) + .build(), + converter.convert("foo").blockingGet()); + + assertEquals( + LiteralConstant.newBuilder() + .setValue( + Value.newBuilder() + .setValueType(ValueType.STRING_ARRAY) + .addAllStringArray(List.of("foo", "bar"))) + .build(), + converter.convert(List.of("foo", "bar")).blockingGet()); + + assertEquals( + LiteralConstant.newBuilder() + .setValue(Value.newBuilder().setValueType(ValueType.LONG).setLong(100)) + .build(), + converter.convert(100L).blockingGet()); + assertEquals( + LiteralConstant.newBuilder() + .setValue(Value.newBuilder().setValueType(ValueType.LONG).setLong(100)) + .build(), + converter.convert(100).blockingGet()); + assertEquals( + LiteralConstant.newBuilder() + .setValue(Value.newBuilder().setValueType(ValueType.LONG).setLong(100)) + .build(), + converter.convert(BigInteger.valueOf(100)).blockingGet()); + + assertEquals( + LiteralConstant.newBuilder() + .setValue( + Value.newBuilder() + .setValueType(ValueType.DOUBLE) + .setDouble( + BigDecimal.valueOf(53.4f).doubleValue())) // careful of double epsilon + .build(), + converter.convert(BigDecimal.valueOf(53.4f)).blockingGet()); + assertEquals( + LiteralConstant.newBuilder() + .setValue(Value.newBuilder().setValueType(ValueType.DOUBLE).setDouble(53.4f)) + .build(), + converter.convert(53.4f).blockingGet()); + assertEquals( + LiteralConstant.newBuilder() + .setValue(Value.newBuilder().setValueType(ValueType.DOUBLE).setDouble(53.4)) + .build(), + converter.convert(53.4d).blockingGet()); + + assertEquals( + LiteralConstant.newBuilder() + .setValue(Value.newBuilder().setValueType(ValueType.BOOL).setBoolean(true)) + .build(), + converter.convert(true).blockingGet()); + + long timestamp = System.currentTimeMillis(); + + assertEquals( + LiteralConstant.newBuilder() + .setValue(Value.newBuilder().setValueType(ValueType.TIMESTAMP).setTimestamp(timestamp)) + .build(), + converter.convert(Instant.ofEpochMilli(timestamp)).blockingGet()); + } + + @Test + void convertsNullValue() { + LiteralConstantConverter converter = new LiteralConstantConverter(); + assertEquals( + LiteralConstant.newBuilder().setValue(Value.getDefaultInstance()).build(), + converter.convert(null).blockingGet()); + } +} diff --git a/hypertrace-core-graphql-gateway-service-utils/src/test/java/org/hypertrace/core/graphql/utils/gateway/LiteralConstantExpressionConverterTest.java b/hypertrace-core-graphql-gateway-service-utils/src/test/java/org/hypertrace/core/graphql/utils/gateway/LiteralConstantExpressionConverterTest.java new file mode 100644 index 00000000..d03ec079 --- /dev/null +++ b/hypertrace-core-graphql-gateway-service-utils/src/test/java/org/hypertrace/core/graphql/utils/gateway/LiteralConstantExpressionConverterTest.java @@ -0,0 +1,38 @@ +package org.hypertrace.core.graphql.utils.gateway; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.when; + +import io.reactivex.rxjava3.core.Single; +import org.hypertrace.gateway.service.v1.common.Expression; +import org.hypertrace.gateway.service.v1.common.LiteralConstant; +import org.hypertrace.gateway.service.v1.common.Value; +import org.hypertrace.gateway.service.v1.common.ValueType; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class LiteralConstantExpressionConverterTest { + @Mock LiteralConstantConverter mockLiteralConstantConverter; + + @Test + void convertsLiteralExpression() { + LiteralConstant expectedLiteral = + LiteralConstant.newBuilder() + .setValue(Value.newBuilder().setString("foo").setValueType(ValueType.STRING)) + .build(); + + LiteralConstantExpressionConverter columnIdentifierExpressionConverter = + new LiteralConstantExpressionConverter(this.mockLiteralConstantConverter); + + when(this.mockLiteralConstantConverter.convert(eq("foo"))) + .thenReturn(Single.just(expectedLiteral)); + + assertEquals( + Expression.newBuilder().setLiteral(expectedLiteral).build(), + columnIdentifierExpressionConverter.convert("foo").blockingGet()); + } +} diff --git a/hypertrace-core-graphql-grpc-utils/build.gradle.kts b/hypertrace-core-graphql-grpc-utils/build.gradle.kts new file mode 100644 index 00000000..85f0f9d8 --- /dev/null +++ b/hypertrace-core-graphql-grpc-utils/build.gradle.kts @@ -0,0 +1,34 @@ +plugins { + `java-library` + jacoco + id("org.hypertrace.jacoco-report-plugin") +} + +java { + sourceCompatibility = JavaVersion.VERSION_11 +} + +dependencies { + api("com.google.inject:guice:4.2.3") + api("com.graphql-java:graphql-java:14.0") + api("io.grpc:grpc-api:1.30.2") + api("io.grpc:grpc-core:1.30.2") + api("io.grpc:grpc-stub:1.30.2") + api(project(":hypertrace-core-graphql-context")) + + implementation("org.hypertrace.core.grpcutils:grpc-context-utils:0.1.0") + implementation("org.hypertrace.core.grpcutils:grpc-client-utils:0.1.0") + implementation("io.grpc:grpc-context:1.30.2") + implementation("io.reactivex.rxjava3:rxjava:3.0.2") + implementation(project(":hypertrace-core-graphql-spi")) + + testImplementation("org.junit.jupiter:junit-jupiter:5.5.1") + testImplementation("org.mockito:mockito-core:3.2.4") + testImplementation("org.mockito:mockito-junit-jupiter:3.2.4") + + testRuntimeOnly("io.grpc:grpc-netty:1.30.2") +} + +tasks.test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGraphQlGrpcContextBuilder.java b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGraphQlGrpcContextBuilder.java new file mode 100644 index 00000000..a7b8a847 --- /dev/null +++ b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGraphQlGrpcContextBuilder.java @@ -0,0 +1,91 @@ +package org.hypertrace.core.graphql.utils.grpc; + +import static org.hypertrace.core.grpcutils.context.RequestContextConstants.AUTHORIZATION_HEADER; +import static org.hypertrace.core.grpcutils.context.RequestContextConstants.TENANT_ID_HEADER_KEY; + +import io.grpc.Context; +import io.grpc.stub.StreamObserver; +import io.reactivex.rxjava3.core.Observable; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Optional; +import java.util.concurrent.Callable; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import javax.inject.Inject; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.core.grpcutils.context.RequestContext; + +class DefaultGraphQlGrpcContextBuilder implements GraphQlGrpcContextBuilder { + + private final PlatformRequestContextBuilder platformRequestContextBuilder; + + @Inject + DefaultGraphQlGrpcContextBuilder(PlatformRequestContextBuilder platformRequestContextBuilder) { + this.platformRequestContextBuilder = platformRequestContextBuilder; + } + + @Override + public GraphQlGrpcContext build(GraphQlRequestContext requestContext) { + return new DefaultGraphQlGrpcContext(requestContext, this.platformRequestContextBuilder); + } + + private static final class DefaultGraphQlGrpcContext implements GraphQlGrpcContext { + private final Context grpcContext; + + private DefaultGraphQlGrpcContext( + GraphQlRequestContext requestContext, + PlatformRequestContextBuilder platformRequestContextBuilder) { + Map grpcHeaders = + this.flattenOptionalMap( + Map.of( + AUTHORIZATION_HEADER, this.extractAuthorizationHeader(requestContext), + TENANT_ID_HEADER_KEY, this.extractTenantId(requestContext))); + + RequestContext platformContext = platformRequestContextBuilder.build(grpcHeaders); + this.grpcContext = this.buildGrpcContext(platformContext); + } + + private Optional extractAuthorizationHeader(GraphQlRequestContext requestContext) { + return requestContext.getAuthorizationHeader().filter(header -> header.length() > 0); + } + + private Optional extractTenantId(GraphQlRequestContext requestContext) { + return requestContext.getTenantId(); + } + + @Override + public TResp callInContext(Callable callable) { + try { + return this.grpcContext.call(callable); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public void runInContext(Runnable runnable) { + this.grpcContext.run(runnable); + } + + @Override + public Observable streamInContext( + Consumer> requestExecutor) { + return Observable.create( + emitter -> + this.runInContext( + () -> requestExecutor.accept(new StreamingClientResponseObserver<>(emitter)))); + } + + private Context buildGrpcContext(RequestContext platformContext) { + return Context.current().withValue(RequestContext.CURRENT, platformContext); + } + + private Map flattenOptionalMap(Map> optionalMap) { + return optionalMap.entrySet().stream() + .map(entry -> entry.getValue().map(value -> Map.entry(entry.getKey(), value))) + .flatMap(Optional::stream) + .collect(Collectors.toUnmodifiableMap(Entry::getKey, Entry::getValue)); + } + } +} diff --git a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGrpcChannelRegistry.java b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGrpcChannelRegistry.java new file mode 100644 index 00000000..3305a76e --- /dev/null +++ b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGrpcChannelRegistry.java @@ -0,0 +1,47 @@ +package org.hypertrace.core.graphql.utils.grpc; + +import io.grpc.ManagedChannel; +import io.grpc.ManagedChannelBuilder; +import java.util.HashMap; +import java.util.Map; +import javax.inject.Inject; +import javax.inject.Singleton; +import org.hypertrace.core.graphql.spi.lifecycle.GraphQlServiceLifecycle; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +@Singleton +class DefaultGrpcChannelRegistry implements GrpcChannelRegistry { + private static final Logger LOG = LoggerFactory.getLogger(DefaultGrpcChannelRegistry.class); + private final Map channelMap = new HashMap<>(); + private volatile boolean isShutdown = false; + + @Inject + DefaultGrpcChannelRegistry(GraphQlServiceLifecycle serviceLifecycle) { + serviceLifecycle.shutdownCompletion().thenRun(this::shutdown); + } + + @Override + public ManagedChannel forAddress(String host, int port) { + assert !this.isShutdown; + String channelId = this.getChannelId(host, port); + if (!this.channelMap.containsKey(channelId)) { + this.channelMap.put(channelId, this.buildNewChannel(host, port)); + } + return this.channelMap.get(channelId); + } + + private ManagedChannel buildNewChannel(String host, int port) { + LOG.info("Creating new channel for {}:{}", host, port); + return ManagedChannelBuilder.forAddress(host, port).usePlaintext().build(); + } + + private String getChannelId(String host, int port) { + return host + ":" + port; + } + + private void shutdown() { + channelMap.values().forEach(ManagedChannel::shutdown); + this.isShutdown = true; + } +} diff --git a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcContext.java b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcContext.java new file mode 100644 index 00000000..107f7676 --- /dev/null +++ b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcContext.java @@ -0,0 +1,16 @@ +package org.hypertrace.core.graphql.utils.grpc; + +import io.grpc.stub.StreamObserver; +import io.reactivex.rxjava3.core.Observable; +import java.util.concurrent.Callable; +import java.util.function.Consumer; + +public interface GraphQlGrpcContext { + + TResp callInContext(Callable callable); + + void runInContext(Runnable runnable); + + Observable streamInContext( + Consumer> requestExecutor); +} diff --git a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcContextBuilder.java b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcContextBuilder.java new file mode 100644 index 00000000..de4c4503 --- /dev/null +++ b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcContextBuilder.java @@ -0,0 +1,7 @@ +package org.hypertrace.core.graphql.utils.grpc; + +import org.hypertrace.core.graphql.context.GraphQlRequestContext; + +public interface GraphQlGrpcContextBuilder { + GraphQlGrpcContext build(GraphQlRequestContext requestContext); +} diff --git a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcModule.java b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcModule.java new file mode 100644 index 00000000..f06b7db2 --- /dev/null +++ b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcModule.java @@ -0,0 +1,16 @@ +package org.hypertrace.core.graphql.utils.grpc; + +import static org.hypertrace.core.grpcutils.client.RequestContextClientCallCredsProviderFactory.getClientCallCredsProvider; + +import com.google.inject.AbstractModule; +import io.grpc.CallCredentials; + +public class GraphQlGrpcModule extends AbstractModule { + + @Override + protected void configure() { + bind(CallCredentials.class).toInstance(getClientCallCredsProvider().get()); + bind(GraphQlGrpcContextBuilder.class).to(DefaultGraphQlGrpcContextBuilder.class); + bind(GrpcChannelRegistry.class).to(DefaultGrpcChannelRegistry.class); + } +} diff --git a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GrpcChannelRegistry.java b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GrpcChannelRegistry.java new file mode 100644 index 00000000..783b04ad --- /dev/null +++ b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GrpcChannelRegistry.java @@ -0,0 +1,7 @@ +package org.hypertrace.core.graphql.utils.grpc; + +import io.grpc.Channel; + +public interface GrpcChannelRegistry { + Channel forAddress(String host, int port); +} diff --git a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/PlatformRequestContextBuilder.java b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/PlatformRequestContextBuilder.java new file mode 100644 index 00000000..1568ab11 --- /dev/null +++ b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/PlatformRequestContextBuilder.java @@ -0,0 +1,14 @@ +package org.hypertrace.core.graphql.utils.grpc; + +import java.util.Map; +import javax.annotation.Nonnull; +import org.hypertrace.core.grpcutils.context.RequestContext; + +class PlatformRequestContextBuilder { + + RequestContext build(@Nonnull Map headers) { + RequestContext platformContext = new RequestContext(); + headers.forEach(platformContext::add); + return platformContext; + } +} diff --git a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/StreamingClientResponseObserver.java b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/StreamingClientResponseObserver.java new file mode 100644 index 00000000..d3f270d0 --- /dev/null +++ b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/StreamingClientResponseObserver.java @@ -0,0 +1,46 @@ +package org.hypertrace.core.graphql.utils.grpc; + +import io.grpc.stub.ClientCallStreamObserver; +import io.grpc.stub.ClientResponseObserver; +import io.reactivex.rxjava3.core.ObservableEmitter; + +class StreamingClientResponseObserver implements ClientResponseObserver { + + private final ObservableEmitter emitter; + private ClientCallStreamObserver requestStream; + + StreamingClientResponseObserver(final ObservableEmitter emitter) { + this.emitter = emitter; + this.emitter.setCancellable( + () -> + this.requestStream.cancel( + "StreamingClientResponseObserver cancelling after emitter disposed", null)); + } + + @Override + public void beforeStart(ClientCallStreamObserver requestStream) { + this.requestStream = requestStream; + } + + @Override + public void onNext(RespT value) { + if (!this.emitter.isDisposed()) { + this.emitter.onNext(value); + } + } + + @Override + public void onError(Throwable t) { + if (!this.emitter.isDisposed()) { + this.emitter.onError(t); + } + } + + @Override + public void onCompleted() { + // This shouldn't generally happen - either an error or next response + if (!this.emitter.isDisposed()) { + emitter.onComplete(); + } + } +} diff --git a/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/DefaultGraphQlGrpcContextBuilderTest.java b/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/DefaultGraphQlGrpcContextBuilderTest.java new file mode 100644 index 00000000..18f09c61 --- /dev/null +++ b/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/DefaultGraphQlGrpcContextBuilderTest.java @@ -0,0 +1,143 @@ +package org.hypertrace.core.graphql.utils.grpc; + +import static org.hypertrace.core.grpcutils.context.RequestContextConstants.TENANT_ID_HEADER_KEY; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.ArgumentMatchers.anyMap; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import io.reactivex.rxjava3.observers.TestObserver; +import java.util.Collections; +import java.util.Map; +import java.util.Optional; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.core.grpcutils.context.RequestContext; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class DefaultGraphQlGrpcContextBuilderTest { + + private static final Optional TEST_TENANT_ID_OPTIONAL = Optional.of("testTenant"); + @Mock PlatformRequestContextBuilder mockPlatformRequestContextBuilder; + @Mock GraphQlRequestContext mockRequestContext; + @Mock RequestContext mockPlatformContext; + + private GraphQlGrpcContextBuilder builder; + + @BeforeEach + void beforeEach() { + this.builder = new DefaultGraphQlGrpcContextBuilder(this.mockPlatformRequestContextBuilder); + when(this.mockPlatformRequestContextBuilder.build(anyMap())) + .thenReturn(this.mockPlatformContext); + when(this.mockRequestContext.getAuthorizationHeader()).thenReturn(Optional.empty()); + } + + @Test + void passesAuthHeaderToPlatformContext() { + this.builder.build(this.mockRequestContext); + verify(this.mockPlatformRequestContextBuilder).build(Collections.emptyMap()); + when(this.mockRequestContext.getAuthorizationHeader()).thenReturn(Optional.of("auth header")); + this.builder.build(this.mockRequestContext); + verify(this.mockPlatformRequestContextBuilder).build(Map.of("authorization", "auth header")); + } + + @Test + void addsGrpcContextToRunnable() { + when(this.mockPlatformContext.getTenantId()).thenReturn(TEST_TENANT_ID_OPTIONAL); + var context = this.builder.build(this.mockRequestContext); + var mockRunnable = mock(Runnable.class); + + doAnswer( + invocation -> { + assertEquals(TEST_TENANT_ID_OPTIONAL, RequestContext.CURRENT.get().getTenantId()); + return null; + }) + .when(mockRunnable) + .run(); + + assertNull(RequestContext.CURRENT.get()); + context.runInContext(mockRunnable); + + verify(mockRunnable, times(1)).run(); + } + + @Test + void propagatesRunnableError() { + var context = this.builder.build(this.mockRequestContext); + assertNull(RequestContext.CURRENT.get()); + assertThrows( + RuntimeException.class, + () -> + context.callInContext( + () -> { + throw new RuntimeException("test"); + })); + } + + @Test + void addsGrpcContextToStreamedRequest() { + when(this.mockPlatformContext.getTenantId()).thenReturn(TEST_TENANT_ID_OPTIONAL); + var context = this.builder.build(this.mockRequestContext); + var testObserver = new TestObserver<>(); + context + .streamInContext( + streamObserver -> { + streamObserver.onNext(RequestContext.CURRENT.get().getTenantId()); + streamObserver.onCompleted(); + }) + .subscribe(testObserver); + + testObserver.assertValue(TEST_TENANT_ID_OPTIONAL); + testObserver.assertComplete(); + } + + @Test + void propagatesErrorsFromStreamedRequest() { + var context = this.builder.build(this.mockRequestContext); + var testObserver = new TestObserver<>(); + context + .streamInContext(streamObserver -> streamObserver.onError(new IllegalStateException())) + .subscribe(testObserver); + + testObserver.assertError(IllegalStateException.class); + } + + @Test + void addsGrpcContextToCallable() { + when(this.mockPlatformContext.getTenantId()).thenReturn(TEST_TENANT_ID_OPTIONAL); + var context = this.builder.build(this.mockRequestContext); + assertNull(RequestContext.CURRENT.get()); + assertEquals( + TEST_TENANT_ID_OPTIONAL, + context.callInContext(() -> RequestContext.CURRENT.get().getTenantId())); + } + + @Test + void propagatesCallableError() { + var context = this.builder.build(this.mockRequestContext); + assertNull(RequestContext.CURRENT.get()); + assertThrows( + RuntimeException.class, + () -> + context.callInContext( + () -> { + throw new RuntimeException("test"); + })); + } + + @Test + void addsTenantIdToContext() { + when(this.mockRequestContext.getTenantId()).thenReturn(Optional.of("tenant id")); + this.builder.build(this.mockRequestContext); + verify(this.mockPlatformRequestContextBuilder).build(Map.of(TENANT_ID_HEADER_KEY, "tenant id")); + } +} diff --git a/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/DefaultGrpcChannelRegistryTest.java b/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/DefaultGrpcChannelRegistryTest.java new file mode 100644 index 00000000..270afa51 --- /dev/null +++ b/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/DefaultGrpcChannelRegistryTest.java @@ -0,0 +1,65 @@ +package org.hypertrace.core.graphql.utils.grpc; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNotSame; +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.when; + +import io.grpc.Channel; +import io.grpc.ManagedChannel; +import java.util.concurrent.CompletableFuture; +import org.hypertrace.core.graphql.spi.lifecycle.GraphQlServiceLifecycle; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class DefaultGrpcChannelRegistryTest { + + @Mock GraphQlServiceLifecycle mockLifecycle; + CompletableFuture shutdown; + + DefaultGrpcChannelRegistry channelRegistry; + + @BeforeEach + void beforeEach() { + this.shutdown = new CompletableFuture<>(); + when(this.mockLifecycle.shutdownCompletion()).thenReturn(this.shutdown); + this.channelRegistry = new DefaultGrpcChannelRegistry(this.mockLifecycle); + } + + @Test + void createsNewChannelsAsRequested() { + assertNotNull(this.channelRegistry.forAddress("foo", 1000)); + } + + @Test + void reusesChannelsForDuplicateRequests() { + Channel firstChannel = this.channelRegistry.forAddress("foo", 1000); + assertSame(firstChannel, this.channelRegistry.forAddress("foo", 1000)); + assertNotSame(firstChannel, this.channelRegistry.forAddress("foo", 1001)); + assertNotSame(firstChannel, this.channelRegistry.forAddress("bar", 1000)); + } + + @Test + void shutdownAllChannelsOnLifecycleShutdown() { + ManagedChannel firstChannel = this.channelRegistry.forAddress("foo", 1000); + ManagedChannel secondChannel = this.channelRegistry.forAddress("foo", 1002); + assertFalse(firstChannel.isShutdown()); + assertFalse(secondChannel.isShutdown()); + this.shutdown.complete(null); + assertTrue(firstChannel.isShutdown()); + assertTrue(secondChannel.isShutdown()); + } + + @Test + void throwsIfNewChannelRequestedAfterLifecycleShutdown() { + this.shutdown.complete(null); + assertThrows(AssertionError.class, () -> this.channelRegistry.forAddress("foo", 1000)); + } +} diff --git a/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/PlatformRequestContextBuilderTest.java b/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/PlatformRequestContextBuilderTest.java new file mode 100644 index 00000000..ab759a02 --- /dev/null +++ b/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/PlatformRequestContextBuilderTest.java @@ -0,0 +1,17 @@ +package org.hypertrace.core.graphql.utils.grpc; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.Map; +import org.junit.jupiter.api.Test; + +class PlatformRequestContextBuilderTest { + + @Test + void addsEachHeaderToRequestContext() { + var provided = Map.of("k1", "v1", "k2", "v2"); + var context = new PlatformRequestContextBuilder().build(provided); + assertEquals(provided, context.getAll()); + assertEquals(provided, context.getRequestHeaders()); + } +} diff --git a/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/StreamingClientResponseObserverTest.java b/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/StreamingClientResponseObserverTest.java new file mode 100644 index 00000000..2ded42bf --- /dev/null +++ b/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/StreamingClientResponseObserverTest.java @@ -0,0 +1,65 @@ +package org.hypertrace.core.graphql.utils.grpc; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoInteractions; + +import io.grpc.stub.ClientCallStreamObserver; +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.observers.TestObserver; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +public class StreamingClientResponseObserverTest { + + @Mock ClientCallStreamObserver requestStreamObserver; + + private StreamingClientResponseObserver responseObserver; + private TestObserver testObserver; + + @BeforeEach + void beforeEach() { + Observable observable = + Observable.create( + observer -> this.responseObserver = new StreamingClientResponseObserver<>(observer)); + this.testObserver = new TestObserver<>(); + observable.subscribe(this.testObserver); + this.responseObserver.beforeStart(this.requestStreamObserver); + } + + @Test + void returnsValues() { + this.responseObserver.onNext("first"); + this.testObserver.assertValue("first"); + + this.responseObserver.onNext("second"); + this.testObserver.assertValueAt(1, "second"); + this.testObserver.assertNotComplete(); + + verifyNoInteractions(requestStreamObserver); + } + + @Test + void propagatesExceptionOnError() { + Throwable t = new Exception("error"); + this.responseObserver.onError(t); + + this.testObserver.assertError(t); + this.testObserver.assertNoValues(); + verify(requestStreamObserver).cancel(any(), any()); + } + + @Test + void propagatesCompletion() { + this.responseObserver.onCompleted(); + + this.testObserver.assertComplete(); + this.testObserver.assertNoValues(); + + verify(requestStreamObserver).cancel(any(), any()); + } +} diff --git a/hypertrace-core-graphql-impl/build.gradle.kts b/hypertrace-core-graphql-impl/build.gradle.kts new file mode 100644 index 00000000..8e6e90e7 --- /dev/null +++ b/hypertrace-core-graphql-impl/build.gradle.kts @@ -0,0 +1,39 @@ +plugins { + `java-library` + jacoco + id("org.hypertrace.jacoco-report-plugin") +} + +java { + sourceCompatibility = JavaVersion.VERSION_11 +} + +dependencies { + api(project(":hypertrace-core-graphql-spi")) + api("com.graphql-java-kickstart:graphql-java-servlet:9.1.0") + + implementation(project(":hypertrace-core-graphql-schema-registry")) + implementation(project(":hypertrace-core-graphql-context")) + implementation(project(":hypertrace-core-graphql-deserialization")) + implementation(project(":hypertrace-core-graphql-grpc-utils")) + implementation(project(":hypertrace-core-graphql-schema-utils")) + implementation(project(":hypertrace-core-graphql-gateway-service-utils")) + implementation(project(":hypertrace-core-graphql-attribute-store")) + implementation(project(":hypertrace-core-graphql-common-schema")) + implementation(project(":hypertrace-core-graphql-metadata-schema")) + implementation(project(":hypertrace-core-graphql-span-schema")) + implementation(project(":hypertrace-core-graphql-trace-schema")) + implementation(project(":hypertrace-core-graphql-attribute-scope")) + + implementation("org.slf4j:slf4j-api:1.7.3") + implementation("com.google.inject:guice:4.2.3") + implementation("io.grpc:grpc-netty:1.30.2") + + testImplementation("org.junit.jupiter:junit-jupiter:5.5.1") + testImplementation("org.mockito:mockito-core:3.2.4") + testImplementation("org.mockito:mockito-junit-jupiter:3.2.4") +} + +tasks.test { + useJUnitPlatform() +} diff --git a/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlFactory.java b/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlFactory.java new file mode 100644 index 00000000..56d1287e --- /dev/null +++ b/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlFactory.java @@ -0,0 +1,21 @@ +package org.hypertrace.core.graphql.impl; + +import com.google.inject.Guice; +import com.google.inject.Injector; +import graphql.kickstart.servlet.GraphQLConfiguration; +import graphql.schema.GraphQLSchema; +import org.hypertrace.core.graphql.context.GraphQlRequestContextBuilder; +import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; +import org.hypertrace.core.graphql.spi.lifecycle.GraphQlServiceLifecycle; + +public class GraphQlFactory { + public static GraphQLConfiguration build( + GraphQlServiceConfig config, GraphQlServiceLifecycle lifecycle) { + final Injector injector = Guice.createInjector(new GraphQlModule(config, lifecycle)); + + return GraphQLConfiguration.with(injector.getInstance(GraphQLSchema.class)) + .with(config.isAsyncServlet()) + .with(injector.getInstance(GraphQlRequestContextBuilder.class)) + .build(); + } +} diff --git a/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlModule.java b/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlModule.java new file mode 100644 index 00000000..56b040ba --- /dev/null +++ b/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlModule.java @@ -0,0 +1,48 @@ +package org.hypertrace.core.graphql.impl; + +import com.google.inject.AbstractModule; +import org.hypertrace.core.graphql.attributes.AttributeStoreModule; +import org.hypertrace.core.graphql.atttributes.scopes.HypertraceCoreAttributeScopeModule; +import org.hypertrace.core.graphql.common.schema.CommonSchemaModule; +import org.hypertrace.core.graphql.common.utils.attributes.AttributeUtilsModule; +import org.hypertrace.core.graphql.context.GraphQlRequestContextModule; +import org.hypertrace.core.graphql.deserialization.GraphQlDeserializationRegistryModule; +import org.hypertrace.core.graphql.metadata.MetadataSchemaModule; +import org.hypertrace.core.graphql.schema.registry.GraphQlSchemaRegistryModule; +import org.hypertrace.core.graphql.span.SpanSchemaModule; +import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; +import org.hypertrace.core.graphql.spi.lifecycle.GraphQlServiceLifecycle; +import org.hypertrace.core.graphql.trace.TraceSchemaModule; +import org.hypertrace.core.graphql.utils.gateway.GatewayUtilsModule; +import org.hypertrace.core.graphql.utils.grpc.GraphQlGrpcModule; +import org.hypertrace.core.graphql.utils.schema.SchemaUtilsModule; + +class GraphQlModule extends AbstractModule { + + private final GraphQlServiceConfig config; + private final GraphQlServiceLifecycle lifecycle; + + public GraphQlModule(final GraphQlServiceConfig config, final GraphQlServiceLifecycle lifecycle) { + this.config = config; + this.lifecycle = lifecycle; + } + + @Override + protected void configure() { + bind(GraphQlServiceConfig.class).toInstance(this.config); + bind(GraphQlServiceLifecycle.class).toInstance(this.lifecycle); + install(new GraphQlRequestContextModule()); + install(new GraphQlGrpcModule()); + install(new GraphQlSchemaRegistryModule()); + install(new GraphQlDeserializationRegistryModule()); + install(new CommonSchemaModule()); + install(new GatewayUtilsModule()); + install(new SchemaUtilsModule()); + install(new AttributeStoreModule()); + install(new AttributeUtilsModule()); + install(new HypertraceCoreAttributeScopeModule()); + install(new MetadataSchemaModule()); + install(new SpanSchemaModule()); + install(new TraceSchemaModule()); + } +} diff --git a/hypertrace-core-graphql-impl/src/test/java/org/hypertrace/core/graphql/impl/GraphQlModuleTest.java b/hypertrace-core-graphql-impl/src/test/java/org/hypertrace/core/graphql/impl/GraphQlModuleTest.java new file mode 100644 index 00000000..ecfc3a55 --- /dev/null +++ b/hypertrace-core-graphql-impl/src/test/java/org/hypertrace/core/graphql/impl/GraphQlModuleTest.java @@ -0,0 +1,22 @@ +package org.hypertrace.core.graphql.impl; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.mockito.Mockito.mock; + +import com.google.inject.Guice; +import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; +import org.hypertrace.core.graphql.spi.lifecycle.GraphQlServiceLifecycle; +import org.junit.jupiter.api.Test; + +public class GraphQlModuleTest { + + @Test + public void testResolveBindings() { + assertDoesNotThrow( + () -> + Guice.createInjector( + new GraphQlModule( + mock(GraphQlServiceConfig.class), mock(GraphQlServiceLifecycle.class))) + .getAllBindings()); + } +} diff --git a/hypertrace-core-graphql-metadata-schema/build.gradle.kts b/hypertrace-core-graphql-metadata-schema/build.gradle.kts new file mode 100644 index 00000000..5d84eec3 --- /dev/null +++ b/hypertrace-core-graphql-metadata-schema/build.gradle.kts @@ -0,0 +1,33 @@ +plugins { + `java-library` + jacoco + id("org.hypertrace.jacoco-report-plugin") +} + +java { + sourceCompatibility = JavaVersion.VERSION_11 +} + +dependencies { + api("com.google.inject:guice:4.2.3") + api("com.graphql-java:graphql-java:14.0") + api(project(":hypertrace-core-graphql-spi")) + api("io.github.graphql-java:graphql-java-annotations:8.0") + + annotationProcessor("org.projectlombok:lombok:1.18.12") + compileOnly("org.projectlombok:lombok:1.18.12") + + implementation("org.slf4j:slf4j-api:1.7.3") + implementation("io.reactivex.rxjava3:rxjava:3.0.2") + implementation(project(":hypertrace-core-graphql-context")) + implementation(project(":hypertrace-core-graphql-common-schema")) + implementation(project(":hypertrace-core-graphql-attribute-store")) + + testImplementation("org.junit.jupiter:junit-jupiter:5.5.1") + testImplementation("org.mockito:mockito-core:3.2.4") + testImplementation("org.mockito:mockito-junit-jupiter:3.2.4") +} + +tasks.test { + useJUnitPlatform() +} diff --git a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/MetadataSchemaFragment.java b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/MetadataSchemaFragment.java new file mode 100644 index 00000000..5be4c86c --- /dev/null +++ b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/MetadataSchemaFragment.java @@ -0,0 +1,35 @@ +package org.hypertrace.core.graphql.metadata; + +import graphql.annotations.processor.typeFunctions.TypeFunction; +import java.util.List; +import javax.annotation.Nonnull; +import javax.inject.Inject; +import org.hypertrace.core.graphql.common.schema.typefunctions.AttributeScopeDynamicEnum; +import org.hypertrace.core.graphql.metadata.schema.MetadataSchema; +import org.hypertrace.core.graphql.spi.schema.GraphQlSchemaFragment; + +public class MetadataSchemaFragment implements GraphQlSchemaFragment { + + private final TypeFunction attributeScopeDynamicEnum; + + @Inject + MetadataSchemaFragment(AttributeScopeDynamicEnum attributeScopeDynamicEnum) { + this.attributeScopeDynamicEnum = attributeScopeDynamicEnum; + } + + @Override + public String fragmentName() { + return "Metadata schema"; + } + + @Override + public Class annotatedQueryClass() { + return MetadataSchema.class; + } + + @Nonnull + @Override + public List typeFunctions() { + return List.of(this.attributeScopeDynamicEnum); + } +} diff --git a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/MetadataSchemaModule.java b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/MetadataSchemaModule.java new file mode 100644 index 00000000..a532b04b --- /dev/null +++ b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/MetadataSchemaModule.java @@ -0,0 +1,34 @@ +package org.hypertrace.core.graphql.metadata; + +import com.google.inject.AbstractModule; +import com.google.inject.Key; +import com.google.inject.TypeLiteral; +import com.google.inject.multibindings.Multibinder; +import org.hypertrace.core.graphql.attributes.AttributeModelMetricAggregationType; +import org.hypertrace.core.graphql.attributes.AttributeModelScope; +import org.hypertrace.core.graphql.attributes.AttributeModelType; +import org.hypertrace.core.graphql.attributes.AttributeStore; +import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; +import org.hypertrace.core.graphql.common.schema.attributes.AttributeType; +import org.hypertrace.core.graphql.common.schema.attributes.MetricAggregationType; +import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.core.graphql.spi.schema.GraphQlSchemaFragment; + +public class MetadataSchemaModule extends AbstractModule { + + @Override + protected void configure() { + Multibinder.newSetBinder(binder(), GraphQlSchemaFragment.class) + .addBinding() + .to(MetadataSchemaFragment.class); + + requireBinding(AttributeStore.class); + + requireBinding(Key.get(new TypeLiteral>() {})); + requireBinding(Key.get(new TypeLiteral>() {})); + requireBinding( + Key.get( + new TypeLiteral< + Converter>() {})); + } +} diff --git a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/fetcher/MetadataFetcher.java b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/fetcher/MetadataFetcher.java new file mode 100644 index 00000000..5783dd51 --- /dev/null +++ b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/fetcher/MetadataFetcher.java @@ -0,0 +1,39 @@ +package org.hypertrace.core.graphql.metadata.fetcher; + +import graphql.schema.DataFetcher; +import graphql.schema.DataFetchingEnvironment; +import java.util.List; +import java.util.concurrent.CompletableFuture; +import javax.inject.Inject; +import org.hypertrace.core.graphql.attributes.AttributeStore; +import org.hypertrace.core.graphql.common.fetcher.InjectableDataFetcher; +import org.hypertrace.core.graphql.metadata.response.MetadataResponseBuilder; +import org.hypertrace.core.graphql.metadata.schema.AttributeMetadata; + +public class MetadataFetcher extends InjectableDataFetcher> { + + public MetadataFetcher() { + super(MetadataFetcherImpl.class); + } + + static final class MetadataFetcherImpl + implements DataFetcher>> { + private final MetadataResponseBuilder responseBuilder; + private final AttributeStore attributeStore; + + @Inject + MetadataFetcherImpl(MetadataResponseBuilder responseBuilder, AttributeStore attributeStore) { + this.responseBuilder = responseBuilder; + this.attributeStore = attributeStore; + } + + @Override + public CompletableFuture> get(DataFetchingEnvironment environment) { + return this.attributeStore + .getAll(environment.getContext()) + .flatMap(this.responseBuilder::build) + .toCompletionStage() + .toCompletableFuture(); + } + } +} diff --git a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/DefaultAttributeMetadata.java b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/DefaultAttributeMetadata.java new file mode 100644 index 00000000..080b9bba --- /dev/null +++ b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/DefaultAttributeMetadata.java @@ -0,0 +1,23 @@ +package org.hypertrace.core.graphql.metadata.response; + +import java.util.List; +import lombok.Builder; +import lombok.Value; +import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; +import org.hypertrace.core.graphql.common.schema.attributes.AttributeType; +import org.hypertrace.core.graphql.common.schema.attributes.MetricAggregationType; +import org.hypertrace.core.graphql.metadata.schema.AttributeMetadata; + +@Value +@Builder +@Accessors(fluent = true) +class DefaultAttributeMetadata implements AttributeMetadata { + AttributeScope scope; + String name; + String displayName; + AttributeType type; + String units; + boolean onlyAggregationsAllowed; + List supportedAggregations; +} diff --git a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilder.java b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilder.java new file mode 100644 index 00000000..7f4f65ef --- /dev/null +++ b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilder.java @@ -0,0 +1,71 @@ +package org.hypertrace.core.graphql.metadata.response; + +import static io.reactivex.rxjava3.core.Single.zip; + +import io.reactivex.rxjava3.core.Maybe; +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.Single; +import java.util.List; +import java.util.stream.Collectors; +import javax.inject.Inject; +import org.hypertrace.core.graphql.attributes.AttributeModel; +import org.hypertrace.core.graphql.attributes.AttributeModelMetricAggregationType; +import org.hypertrace.core.graphql.attributes.AttributeModelScope; +import org.hypertrace.core.graphql.attributes.AttributeModelType; +import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; +import org.hypertrace.core.graphql.common.schema.attributes.AttributeType; +import org.hypertrace.core.graphql.common.schema.attributes.MetricAggregationType; +import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.core.graphql.metadata.schema.AttributeMetadata; + +public class MetadataResponseBuilder { + + private final Converter scopeConverter; + private final Converter typeConverter; + private final Converter + aggregationTypeConverter; + + @Inject + MetadataResponseBuilder( + Converter scopeConverter, + Converter typeConverter, + Converter + aggregationTypeConverter) { + this.scopeConverter = scopeConverter; + this.typeConverter = typeConverter; + this.aggregationTypeConverter = aggregationTypeConverter; + } + + public Single> build(List modelList) { + return Observable.fromIterable(modelList) + .flatMapMaybe(this::build) + .collect(Collectors.toUnmodifiableList()); + } + + private Maybe build(AttributeModel model) { + return zip( + this.scopeConverter.convert(model.scope()), + this.convertMetricAggregationTypes(model.supportedMetricAggregationTypes()), + this.typeConverter.convert(model.type()), + (scope, aggregations, type) -> + new DefaultAttributeMetadata( + scope, + model.key(), + model.displayName(), + type, + model.units(), + model.requiresAggregation(), + aggregations)) + .cast(AttributeMetadata.class) + .onErrorComplete(); + } + + private Single> convertMetricAggregationTypes( + List aggregationTypes) { + return Observable.fromIterable(aggregationTypes) + .flatMapMaybe( + aggregationType -> + this.aggregationTypeConverter.convert(aggregationType).onErrorComplete()) + .collect(Collectors.toUnmodifiableList()); + } +} diff --git a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/schema/AttributeMetadata.java b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/schema/AttributeMetadata.java new file mode 100644 index 00000000..00262ee3 --- /dev/null +++ b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/schema/AttributeMetadata.java @@ -0,0 +1,56 @@ +package org.hypertrace.core.graphql.metadata.schema; + +import graphql.annotations.annotationTypes.GraphQLField; +import graphql.annotations.annotationTypes.GraphQLName; +import graphql.annotations.annotationTypes.GraphQLNonNull; +import java.util.List; +import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; +import org.hypertrace.core.graphql.common.schema.attributes.AttributeType; +import org.hypertrace.core.graphql.common.schema.attributes.MetricAggregationType; + +@GraphQLName(AttributeMetadata.TYPE_NAME) +public interface AttributeMetadata { + String TYPE_NAME = "AttributeMetadata"; + String ATTRIBUTE_METADATA_SCOPE_NAME = "scope"; + String ATTRIBUTE_METADATA_NAME_NAME = "name"; + String ATTRIBUTE_METADATA_DISPLAY_NAME = "displayName"; + String ATTRIBUTE_METADATA_TYPE_NAME = "type"; + String ATTRIBUTE_METADATA_UNITS_NAME = "units"; + String ATTRIBUTE_METADATA_ONLY_AGGREGATIONS_ALLOWED_NAME = "onlyAggregationsAllowed"; + String ATTRIBUTE_METADATA_SUPPORTED_AGGREGATIONS_NAME = "supportedAggregations"; + + @GraphQLField + @GraphQLNonNull + @GraphQLName(ATTRIBUTE_METADATA_SCOPE_NAME) + AttributeScope scope(); + + @GraphQLField + @GraphQLNonNull + @GraphQLName(ATTRIBUTE_METADATA_NAME_NAME) + String name(); + + @GraphQLField + @GraphQLNonNull + @GraphQLName(ATTRIBUTE_METADATA_DISPLAY_NAME) + String displayName(); + + @GraphQLField + @GraphQLNonNull + @GraphQLName(ATTRIBUTE_METADATA_TYPE_NAME) + AttributeType type(); + + @GraphQLField + @GraphQLNonNull + @GraphQLName(ATTRIBUTE_METADATA_UNITS_NAME) + String units(); + + @GraphQLField + @GraphQLNonNull + @GraphQLName(ATTRIBUTE_METADATA_ONLY_AGGREGATIONS_ALLOWED_NAME) + boolean onlyAggregationsAllowed(); + + @GraphQLField + @GraphQLNonNull + @GraphQLName(ATTRIBUTE_METADATA_SUPPORTED_AGGREGATIONS_NAME) + List supportedAggregations(); +} diff --git a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/schema/MetadataSchema.java b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/schema/MetadataSchema.java new file mode 100644 index 00000000..6c23aff4 --- /dev/null +++ b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/schema/MetadataSchema.java @@ -0,0 +1,18 @@ +package org.hypertrace.core.graphql.metadata.schema; + +import graphql.annotations.annotationTypes.GraphQLDataFetcher; +import graphql.annotations.annotationTypes.GraphQLField; +import graphql.annotations.annotationTypes.GraphQLName; +import graphql.annotations.annotationTypes.GraphQLNonNull; +import java.util.List; +import org.hypertrace.core.graphql.metadata.fetcher.MetadataFetcher; + +public interface MetadataSchema { + String METADATA_SCHEMA_METADATA_NAME = "metadata"; + + @GraphQLField + @GraphQLNonNull + @GraphQLName(METADATA_SCHEMA_METADATA_NAME) + @GraphQLDataFetcher(MetadataFetcher.class) + List metadata(); +} diff --git a/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/fetcher/MetadataFetcherTest.java b/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/fetcher/MetadataFetcherTest.java new file mode 100644 index 00000000..4def8cf7 --- /dev/null +++ b/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/fetcher/MetadataFetcherTest.java @@ -0,0 +1,51 @@ +package org.hypertrace.core.graphql.metadata.fetcher; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.when; + +import graphql.schema.DataFetchingEnvironment; +import io.reactivex.rxjava3.core.Single; +import java.util.List; +import java.util.concurrent.ExecutionException; +import org.hypertrace.core.graphql.attributes.AttributeModel; +import org.hypertrace.core.graphql.attributes.AttributeStore; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.core.graphql.metadata.fetcher.MetadataFetcher.MetadataFetcherImpl; +import org.hypertrace.core.graphql.metadata.response.MetadataResponseBuilder; +import org.hypertrace.core.graphql.metadata.schema.AttributeMetadata; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class MetadataFetcherTest { + + @Mock MetadataResponseBuilder mockResponseBuilder; + @Mock AttributeStore mockAttributeStore; + @Mock DataFetchingEnvironment mockDataFetchingEnvironment; + @Mock AttributeModel mockModel; + @Mock AttributeMetadata mockMetadata; + @Mock GraphQlRequestContext mockContext; + private MetadataFetcherImpl fetcher; + + @BeforeEach + void beforeEach() { + List mockModelResult = List.of(mockModel); + List mockMetadataResult = List.of(mockMetadata); + when(this.mockDataFetchingEnvironment.getContext()).thenReturn(this.mockContext); + when(this.mockAttributeStore.getAll(eq(this.mockContext))) + .thenReturn(Single.just(mockModelResult)); + when(this.mockResponseBuilder.build(eq(mockModelResult))) + .thenReturn(Single.just(mockMetadataResult)); + + this.fetcher = new MetadataFetcherImpl(this.mockResponseBuilder, this.mockAttributeStore); + } + + @Test + void returnsResponseFuture() throws ExecutionException, InterruptedException { + assertEquals(List.of(mockMetadata), this.fetcher.get(this.mockDataFetchingEnvironment).get()); + } +} diff --git a/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilderTest.java b/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilderTest.java new file mode 100644 index 00000000..b30f1613 --- /dev/null +++ b/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilderTest.java @@ -0,0 +1,106 @@ +package org.hypertrace.core.graphql.metadata.response; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.reset; +import static org.mockito.Mockito.when; + +import io.reactivex.rxjava3.core.Single; +import java.util.List; +import org.hypertrace.core.graphql.attributes.AttributeModel; +import org.hypertrace.core.graphql.attributes.AttributeModelMetricAggregationType; +import org.hypertrace.core.graphql.attributes.AttributeModelScope; +import org.hypertrace.core.graphql.attributes.AttributeModelType; +import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; +import org.hypertrace.core.graphql.common.schema.attributes.AttributeType; +import org.hypertrace.core.graphql.common.schema.attributes.MetricAggregationType; +import org.hypertrace.core.graphql.common.utils.Converter; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class MetadataResponseBuilderTest { + + private MetadataResponseBuilder builder; + private List models; + @Mock private Converter mockScopeConverter; + @Mock private Converter mockTypeConverter; + @Mock private AttributeScope mockScope; + + @Mock + private Converter + mockAggregationTypeConverter; + + @BeforeEach + void beforeEach() { + this.builder = + new MetadataResponseBuilder( + this.mockScopeConverter, this.mockTypeConverter, this.mockAggregationTypeConverter); + AttributeModel mockModel = mock(AttributeModel.class); + when(mockModel.scope()).thenReturn(AttributeModelScope.TRACE); + when(mockModel.key()).thenReturn("key"); + when(mockModel.displayName()).thenReturn("display name"); + when(mockModel.type()).thenReturn(AttributeModelType.STRING); + when(mockModel.units()).thenReturn("unit"); + when(mockModel.requiresAggregation()).thenReturn(true); + when(mockModel.supportedMetricAggregationTypes()) + .thenReturn( + List.of( + AttributeModelMetricAggregationType.SUM, AttributeModelMetricAggregationType.AVG)); + when(this.mockScopeConverter.convert(eq(AttributeModelScope.TRACE))) + .thenReturn(Single.just(this.mockScope)); + + when(this.mockTypeConverter.convert(eq(AttributeModelType.STRING))) + .thenReturn(Single.just(AttributeType.STRING)); + when(this.mockAggregationTypeConverter.convert(eq(AttributeModelMetricAggregationType.SUM))) + .thenReturn(Single.just(MetricAggregationType.SUM)); + when(this.mockAggregationTypeConverter.convert(eq(AttributeModelMetricAggregationType.AVG))) + .thenReturn(Single.just(MetricAggregationType.AVG)); + this.models = List.of(mockModel); + } + + @Test + void canBuildResponse() { + assertEquals( + List.of( + DefaultAttributeMetadata.builder() + .scope(this.mockScope) + .name("key") + .displayName("display name") + .type(AttributeType.STRING) + .units("unit") + .onlyAggregationsAllowed(true) + .supportedAggregations( + List.of(MetricAggregationType.SUM, MetricAggregationType.AVG)) + .build()), + this.builder.build(this.models).blockingGet()); + } + + @Test + @SuppressWarnings("unchecked") + void filtersAnyAggregationConversionErrors() { + reset(this.mockAggregationTypeConverter); + when(this.mockAggregationTypeConverter.convert(eq(AttributeModelMetricAggregationType.AVG))) + .thenReturn(Single.just(MetricAggregationType.AVG)); + + when(this.mockAggregationTypeConverter.convert(eq(AttributeModelMetricAggregationType.SUM))) + .thenReturn(Single.error(new RuntimeException())); + + assertEquals( + List.of( + DefaultAttributeMetadata.builder() + .scope(this.mockScope) + .name("key") + .displayName("display name") + .type(AttributeType.STRING) + .units("unit") + .onlyAggregationsAllowed(true) + .supportedAggregations(List.of(MetricAggregationType.AVG)) + .build()), + this.builder.build(this.models).blockingGet()); + } +} diff --git a/hypertrace-core-graphql-schema-registry/build.gradle.kts b/hypertrace-core-graphql-schema-registry/build.gradle.kts new file mode 100644 index 00000000..9bbb91d3 --- /dev/null +++ b/hypertrace-core-graphql-schema-registry/build.gradle.kts @@ -0,0 +1,27 @@ +plugins { + `java-library` + jacoco + id("org.hypertrace.jacoco-report-plugin") +} + +java { + sourceCompatibility = JavaVersion.VERSION_11 +} + +dependencies { + api("com.graphql-java:graphql-java:14.0") + + implementation("org.slf4j:slf4j-api:1.7.3") + implementation("com.google.inject:guice:4.2.3") + + implementation(project(":hypertrace-core-graphql-spi")) + implementation("io.github.graphql-java:graphql-java-annotations:8.0") + + testImplementation("org.junit.jupiter:junit-jupiter:5.5.1") + testImplementation("org.mockito:mockito-core:3.2.4") + testImplementation("org.mockito:mockito-junit-jupiter:3.2.4") +} + +tasks.test { + useJUnitPlatform() +} diff --git a/hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/DefaultGraphQlSchemaRegistry.java b/hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/DefaultGraphQlSchemaRegistry.java new file mode 100644 index 00000000..860bc82d --- /dev/null +++ b/hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/DefaultGraphQlSchemaRegistry.java @@ -0,0 +1,28 @@ +package org.hypertrace.core.graphql.schema.registry; + +import java.util.Set; +import javax.inject.Inject; +import org.hypertrace.core.graphql.spi.schema.GraphQlSchemaFragment; + +class DefaultGraphQlSchemaRegistry implements GraphQlSchemaRegistry { + + private final Set schemaFragments; + private final DefaultSchema defaultSchemaFragment; + + @Inject + DefaultGraphQlSchemaRegistry( + Set schemaFragments, DefaultSchema rootSchemaFragment) { + this.schemaFragments = Set.copyOf(schemaFragments); + this.defaultSchemaFragment = rootSchemaFragment; + } + + @Override + public Set getRegisteredFragments() { + return this.schemaFragments; + } + + @Override + public GraphQlSchemaFragment getRootFragment() { + return this.defaultSchemaFragment; + } +} diff --git a/hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/DefaultSchema.java b/hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/DefaultSchema.java new file mode 100644 index 00000000..89a6af95 --- /dev/null +++ b/hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/DefaultSchema.java @@ -0,0 +1,28 @@ +package org.hypertrace.core.graphql.schema.registry; + +import graphql.annotations.annotationTypes.GraphQLName; +import org.hypertrace.core.graphql.spi.schema.GraphQlSchemaFragment; + +class DefaultSchema implements GraphQlSchemaFragment { + + @Override + public String fragmentName() { + return "Default Schema"; + } + + @Override + public Class annotatedQueryClass() { + return QuerySchema.class; + } + + @Override + public Class annotatedMutationClass() { + return MutationSchema.class; + } + + @GraphQLName("Query") + private interface QuerySchema {} + + @GraphQLName("Mutation") + private interface MutationSchema {} +} diff --git a/hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/GraphQlAnnotatedSchemaMerger.java b/hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/GraphQlAnnotatedSchemaMerger.java new file mode 100644 index 00000000..65778874 --- /dev/null +++ b/hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/GraphQlAnnotatedSchemaMerger.java @@ -0,0 +1,137 @@ +package org.hypertrace.core.graphql.schema.registry; + +import static java.util.Objects.nonNull; + +import graphql.annotations.AnnotationsSchemaCreator; +import graphql.annotations.processor.GraphQLAnnotations; +import graphql.schema.GraphQLCodeRegistry; +import graphql.schema.GraphQLCodeRegistry.Builder; +import graphql.schema.GraphQLObjectType; +import graphql.schema.GraphQLSchema; +import java.util.AbstractMap.SimpleImmutableEntry; +import java.util.Collection; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.stream.Collectors; +import javax.annotation.Nullable; +import javax.inject.Inject; +import javax.inject.Provider; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.hypertrace.core.graphql.spi.schema.GraphQlSchemaFragment; + +class GraphQlAnnotatedSchemaMerger implements Provider { + + private final GraphQlSchemaRegistry registry; + + @Inject + GraphQlAnnotatedSchemaMerger(GraphQlSchemaRegistry registry) { + this.registry = registry; + } + + @Override + public GraphQLSchema get() { + GraphQlSchemaFragment rootFragment = this.registry.getRootFragment(); + Set fragments = this.registry.getRegisteredFragments(); + GraphQLAnnotations annotationProcessor = new GraphQLAnnotations(); + + this.registerAllTypeFunctions(fragments, annotationProcessor); + + return fragments.stream() + .map(fragment -> this.fragmentToSchema(fragment, annotationProcessor)) + .reduce(this.fragmentToSchema(rootFragment, annotationProcessor), this::merge); + } + + private void registerAllTypeFunctions( + Collection fragments, GraphQLAnnotations annotationProcessor) { + fragments.stream() + .map(GraphQlSchemaFragment::typeFunctions) + .flatMap(Collection::stream) + .forEach(annotationProcessor::registerTypeFunction); + } + + private GraphQLSchema fragmentToSchema( + GraphQlSchemaFragment fragment, GraphQLAnnotations annotationProcessor) { + AnnotationsSchemaCreator.Builder builder = + AnnotationsSchemaCreator.newAnnotationsSchema() + .setAnnotationsProcessor(annotationProcessor) + .mutation(fragment.annotatedMutationClass()); + + // Query must be assigned, use our root query object as a placeholder if our fragment defines a + // mutation only + if (nonNull(fragment.annotatedQueryClass())) { + builder.query(fragment.annotatedQueryClass()); + } else { + builder.query(this.registry.getRootFragment().annotatedQueryClass()); + } + + return builder.build(); + } + + private GraphQLSchema merge(GraphQLSchema accumulatedSchema, GraphQLSchema schemaToAdd) { + return GraphQLSchema.newSchema() + .query(this.mergeObjects(accumulatedSchema.getQueryType(), schemaToAdd.getQueryType())) + .mutation( + this.mergeObjects(accumulatedSchema.getMutationType(), schemaToAdd.getMutationType())) + .codeRegistry( + this.mergeCodeRegistries( + this.buildMapWithoutNulls( + Set.of( + new SimpleImmutableEntry<>( + schemaToAdd.getQueryType(), accumulatedSchema.getQueryType()), + new SimpleImmutableEntry<>( + schemaToAdd.getMutationType(), accumulatedSchema.getMutationType()))), + accumulatedSchema.getCodeRegistry(), + schemaToAdd.getCodeRegistry())) + .build(); + } + + @Nullable + private GraphQLObjectType mergeObjects( + @NonNull GraphQLObjectType accumulatedObject, @Nullable GraphQLObjectType objectToAdd) { + + if (objectToAdd == null) { + return accumulatedObject; + } + + return GraphQLObjectType.newObject(accumulatedObject) + .fields(objectToAdd.getFieldDefinitions()) + .build(); + } + + /* + The remapping of objects accounts for the fact that data fetchers are scoped to their parent + object name. When we merge objects, their name can change and we need to put in a new pointer to + the data fetcher for that new name. + */ + private GraphQLCodeRegistry mergeCodeRegistries( + Map remappedObjects, + GraphQLCodeRegistry accumulatingRegistry, + GraphQLCodeRegistry registryToMerge) { + + Builder updatedRegistryBuilder = + GraphQLCodeRegistry.newCodeRegistry(accumulatingRegistry) + .typeResolvers(registryToMerge) + .dataFetchers(registryToMerge); + remappedObjects.forEach( + (objectToMerge, accumulatingObject) -> + objectToMerge + .getFieldDefinitions() + .forEach( + graphQLFieldDefinition -> + updatedRegistryBuilder.dataFetcher( + accumulatingObject, + graphQLFieldDefinition, + registryToMerge.getDataFetcher( + objectToMerge, graphQLFieldDefinition)))); + + return updatedRegistryBuilder.build(); + } + + private Map buildMapWithoutNulls( + Collection> entries) { + return entries.stream() + .filter(entry -> nonNull(entry) && nonNull(entry.getKey()) && nonNull(entry.getValue())) + .collect(Collectors.toUnmodifiableMap(Entry::getKey, Entry::getValue)); + } +} diff --git a/hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/GraphQlSchemaRegistry.java b/hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/GraphQlSchemaRegistry.java new file mode 100644 index 00000000..416bdd76 --- /dev/null +++ b/hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/GraphQlSchemaRegistry.java @@ -0,0 +1,11 @@ +package org.hypertrace.core.graphql.schema.registry; + +import java.util.Set; +import org.hypertrace.core.graphql.spi.schema.GraphQlSchemaFragment; + +public interface GraphQlSchemaRegistry { + + Set getRegisteredFragments(); + + GraphQlSchemaFragment getRootFragment(); +} diff --git a/hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/GraphQlSchemaRegistryModule.java b/hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/GraphQlSchemaRegistryModule.java new file mode 100644 index 00000000..5ed3c707 --- /dev/null +++ b/hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/GraphQlSchemaRegistryModule.java @@ -0,0 +1,13 @@ +package org.hypertrace.core.graphql.schema.registry; + +import com.google.inject.AbstractModule; +import graphql.schema.GraphQLSchema; + +public class GraphQlSchemaRegistryModule extends AbstractModule { + + @Override + protected void configure() { + bind(GraphQlSchemaRegistry.class).to(DefaultGraphQlSchemaRegistry.class); + bind(GraphQLSchema.class).toProvider(GraphQlAnnotatedSchemaMerger.class); + } +} diff --git a/hypertrace-core-graphql-schema-registry/src/test/java/org/hypertrace/core/graphql/schema/registry/GraphQlAnnotatedSchemaMergerTest.java b/hypertrace-core-graphql-schema-registry/src/test/java/org/hypertrace/core/graphql/schema/registry/GraphQlAnnotatedSchemaMergerTest.java new file mode 100644 index 00000000..e082ecf9 --- /dev/null +++ b/hypertrace-core-graphql-schema-registry/src/test/java/org/hypertrace/core/graphql/schema/registry/GraphQlAnnotatedSchemaMergerTest.java @@ -0,0 +1,243 @@ +package org.hypertrace.core.graphql.schema.registry; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.when; + +import graphql.annotations.annotationTypes.GraphQLDataFetcher; +import graphql.annotations.annotationTypes.GraphQLField; +import graphql.annotations.annotationTypes.GraphQLName; +import graphql.annotations.processor.ProcessingElementsContainer; +import graphql.annotations.processor.typeFunctions.TypeFunction; +import graphql.schema.DataFetcher; +import graphql.schema.DataFetchingEnvironment; +import graphql.schema.GraphQLFieldDefinition; +import graphql.schema.GraphQLObjectType; +import graphql.schema.GraphQLSchema; +import graphql.schema.GraphQLType; +import java.lang.reflect.AnnotatedType; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import javax.annotation.Nonnull; +import org.hypertrace.core.graphql.spi.schema.GraphQlSchemaFragment; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +public class GraphQlAnnotatedSchemaMergerTest { + + private static final String ROOT_QUERY_NAME = "root"; + private static final String ROOT_MUTATION_NAME = "rootMutation"; + + @Mock private GraphQlSchemaRegistry mockRegistry; + @Mock private DataFetchingEnvironment mockDataFetchingEnvironment; + + private GraphQlAnnotatedSchemaMerger merger; + + @GraphQLName(ROOT_QUERY_NAME) + interface RootQuerySchema {} + + @GraphQLName(ROOT_MUTATION_NAME) + interface RootMutationSchema {} + + interface FirstQuerySchema { + @GraphQLField + String first(); + + @GraphQLField + SharedType second(); + } + + interface SecondQuerySchema { + @GraphQLField + SharedType third(); + } + + interface ThirdQuerySchema { + @GraphQLDataFetcher(CustomDataFetcher.class) + @GraphQLField + String fourth(); + } + + interface FirstMutationSchema { + @GraphQLField + SharedType mutateOne(String argument); + } + + interface SecondMutationSchema { + @GraphQLField + SharedType mutateTwo(String argument); + } + + public static class CustomDataFetcher implements DataFetcher { + + @Override + public String get(DataFetchingEnvironment environment) { + return "custom"; + } + } + + interface SharedType { + @GraphQLField + @GraphQLDataFetcher(CustomDataFetcher.class) + String sharedValue(); + } + + @BeforeEach + public void beforeEach() { + this.merger = new GraphQlAnnotatedSchemaMerger(mockRegistry); + + when(mockRegistry.getRootFragment()) + .thenReturn(this.createSchemaFragment(RootQuerySchema.class, RootMutationSchema.class)); + } + + @Test + void mergesSingleSchema() throws Exception { + when(mockRegistry.getRegisteredFragments()) + .thenReturn(Set.of(this.createSchemaFragment(FirstQuerySchema.class))); + + GraphQLSchema schema = this.merger.get(); + this.verifySchemaWithQueryFields(schema, Set.of("first", "second")); + this.verifySchemaWithMutationFields(schema, Set.of()); + + GraphQLObjectType sharedType = (GraphQLObjectType) schema.getType("SharedType"); + assertEquals( + "custom", + schema + .getCodeRegistry() + .getDataFetcher(sharedType, sharedType.getFieldDefinition("sharedValue")) + .get(mockDataFetchingEnvironment)); + } + + @Test + void mergesMultipleSchemas() throws Exception { + when(mockRegistry.getRegisteredFragments()) + .thenReturn( + Set.of( + this.createSchemaFragment(FirstQuerySchema.class), + this.createSchemaFragment(SecondQuerySchema.class), + this.createSchemaFragment(ThirdQuerySchema.class))); + + GraphQLSchema schema = this.merger.get(); + this.verifySchemaWithQueryFields(schema, Set.of("first", "second", "third", "fourth")); + + GraphQLFieldDefinition customFetcherField = schema.getQueryType().getFieldDefinition("fourth"); + assertEquals( + "custom", + schema + .getCodeRegistry() + .getDataFetcher(schema.getQueryType(), customFetcherField) + .get(mockDataFetchingEnvironment)); + } + + @Test + void mergesMutationSchemas() { + when(mockRegistry.getRegisteredFragments()) + .thenReturn( + Set.of( + this.createSchemaFragment(FirstQuerySchema.class, FirstMutationSchema.class), + this.createSchemaFragment(SecondQuerySchema.class, SecondMutationSchema.class))); + + this.verifySchemaWithMutationFields(this.merger.get(), Set.of("mutateOne", "mutateTwo")); + } + + @Test + void supportsMutationOnlyFragment() { + when(mockRegistry.getRegisteredFragments()) + .thenReturn(Set.of(this.createSchemaFragment(null, FirstMutationSchema.class))); + + this.verifySchemaWithMutationFields(this.merger.get(), Set.of("mutateOne")); + this.verifySchemaWithQueryFields(this.merger.get(), Set.of()); + } + + @Test + void supportsTypeFunctions() { + TypeFunction typeFunction = + new TypeFunction() { + @Override + public boolean canBuildType(Class aClass, AnnotatedType annotatedType) { + return aClass == SharedType.class; + } + + @Override + public GraphQLType buildType( + boolean input, + Class aClass, + AnnotatedType annotatedType, + ProcessingElementsContainer container) { + return GraphQLObjectType.newObject().name("typeFunctionType").build(); + } + }; + + when(mockRegistry.getRegisteredFragments()) + .thenReturn( + Set.of(this.createSchemaFragment(FirstQuerySchema.class, null, List.of(typeFunction)))); + + GraphQLSchema schema = this.merger.get(); + this.verifySchemaWithQueryFields(schema, Set.of("first", "second")); + assertEquals( + "typeFunctionType", + ((GraphQLObjectType) schema.getQueryType().getFieldDefinition("second").getType()) + .getName()); + } + + private GraphQlSchemaFragment createSchemaFragment(Class queryClass) { + return this.createSchemaFragment(queryClass, null); + } + + private GraphQlSchemaFragment createSchemaFragment(Class queryClass, Class mutationClass) { + return this.createSchemaFragment(queryClass, mutationClass, List.of()); + } + + private GraphQlSchemaFragment createSchemaFragment( + Class queryClass, Class mutationClass, List typeFunctionList) { + return new GraphQlSchemaFragment() { + @Override + public String fragmentName() { + return queryClass.getSimpleName(); + } + + @Override + public Class annotatedQueryClass() { + return queryClass; + } + + @Override + public Class annotatedMutationClass() { + return mutationClass; + } + + @Nonnull + @Override + public List typeFunctions() { + return typeFunctionList; + } + }; + } + + private void verifySchemaWithQueryFields(GraphQLSchema schema, Set fields) { + assertEquals(ROOT_QUERY_NAME, schema.getQueryType().getName()); + List fieldDefinitions = schema.getQueryType().getFieldDefinitions(); + assertEquals(fields.size(), fieldDefinitions.size()); + assertTrue( + fields.containsAll( + fieldDefinitions.stream() + .map(GraphQLFieldDefinition::getName) + .collect(Collectors.toUnmodifiableSet()))); + } + + private void verifySchemaWithMutationFields(GraphQLSchema schema, Set fields) { + assertEquals(ROOT_MUTATION_NAME, schema.getMutationType().getName()); + List fieldDefinitions = schema.getMutationType().getFieldDefinitions(); + assertEquals(fields.size(), fieldDefinitions.size()); + assertTrue( + fields.containsAll( + fieldDefinitions.stream() + .map(GraphQLFieldDefinition::getName) + .collect(Collectors.toUnmodifiableSet()))); + } +} diff --git a/hypertrace-core-graphql-schema-utils/build.gradle.kts b/hypertrace-core-graphql-schema-utils/build.gradle.kts new file mode 100644 index 00000000..fe5ff59d --- /dev/null +++ b/hypertrace-core-graphql-schema-utils/build.gradle.kts @@ -0,0 +1,25 @@ +plugins { + `java-library` + jacoco + id("org.hypertrace.jacoco-report-plugin") +} + +java { + sourceCompatibility = JavaVersion.VERSION_11 +} + +dependencies { + api("com.google.inject:guice:4.2.3") + api("com.graphql-java:graphql-java:14.0") + + annotationProcessor("org.projectlombok:lombok:1.18.12") + compileOnly("org.projectlombok:lombok:1.18.12") + + testImplementation("org.junit.jupiter:junit-jupiter:5.5.1") + testImplementation("org.mockito:mockito-core:3.2.4") + testImplementation("org.mockito:mockito-junit-jupiter:3.2.4") +} + +tasks.test { + useJUnitPlatform() +} diff --git a/hypertrace-core-graphql-schema-utils/src/main/java/org/hypertrace/core/graphql/utils/schema/DefaultGraphQlSelectionFinder.java b/hypertrace-core-graphql-schema-utils/src/main/java/org/hypertrace/core/graphql/utils/schema/DefaultGraphQlSelectionFinder.java new file mode 100644 index 00000000..086dce85 --- /dev/null +++ b/hypertrace-core-graphql-schema-utils/src/main/java/org/hypertrace/core/graphql/utils/schema/DefaultGraphQlSelectionFinder.java @@ -0,0 +1,66 @@ +package org.hypertrace.core.graphql.utils.schema; + +import static java.util.function.Predicate.not; + +import graphql.schema.DataFetchingFieldSelectionSet; +import graphql.schema.SelectedField; +import java.util.List; +import java.util.Optional; +import java.util.function.Predicate; +import java.util.stream.Stream; + +class DefaultGraphQlSelectionFinder implements GraphQlSelectionFinder { + private static final List ANY_DIRECT_DESCENDANT = List.of(SelectionQuery.ANY); + + @Override + public Stream findSelections( + DataFetchingFieldSelectionSet selectionSet, SelectionQuery query) { + + return this.doSelectionSearch(selectionSet, this.applyQueryDefaults(query)); + } + + private Stream doSelectionSearch( + DataFetchingFieldSelectionSet selectionSet, SelectionQuery query) { + if (query.getSelectionPath().isEmpty()) { + return Stream.empty(); + } + + String expectedName = query.getSelectionPath().get(0); + SelectionQuery childQuery = this.buildQueryForChildSelection(query); + Stream descendantFields = + selectionSet.getFields(SelectionQuery.ANY).stream() + .filter( + field -> + expectedName.equals(SelectionQuery.ANY) + || expectedName.equals(field.getName())); + if (childQuery.getSelectionPath().isEmpty()) { + return descendantFields.filter(query.getMatchesPredicate()); + } + + return descendantFields + .map(SelectedField::getSelectionSet) + .flatMap(childSelectionSet -> this.findSelections(childSelectionSet, childQuery)); + } + + private SelectionQuery applyQueryDefaults(SelectionQuery selectionQuery) { + List pathOrDefault = + Optional.ofNullable(selectionQuery.getSelectionPath()) + .filter(not(List::isEmpty)) + .orElse(ANY_DIRECT_DESCENDANT); + Predicate predicateOrDefault = + Optional.ofNullable(selectionQuery.getMatchesPredicate()).orElse(unused -> true); + + return SelectionQuery.builder() + .selectionPath(pathOrDefault) + .matchesPredicate(predicateOrDefault) + .build(); + } + + private SelectionQuery buildQueryForChildSelection(SelectionQuery selectionQuery) { + return selectionQuery + .toBuilder() + .selectionPath( + selectionQuery.getSelectionPath().subList(1, selectionQuery.getSelectionPath().size())) + .build(); + } +} diff --git a/hypertrace-core-graphql-schema-utils/src/main/java/org/hypertrace/core/graphql/utils/schema/GraphQlSelectionFinder.java b/hypertrace-core-graphql-schema-utils/src/main/java/org/hypertrace/core/graphql/utils/schema/GraphQlSelectionFinder.java new file mode 100644 index 00000000..7b415902 --- /dev/null +++ b/hypertrace-core-graphql-schema-utils/src/main/java/org/hypertrace/core/graphql/utils/schema/GraphQlSelectionFinder.java @@ -0,0 +1,11 @@ +package org.hypertrace.core.graphql.utils.schema; + +import graphql.schema.DataFetchingFieldSelectionSet; +import graphql.schema.SelectedField; +import java.util.stream.Stream; + +public interface GraphQlSelectionFinder { + + Stream findSelections( + DataFetchingFieldSelectionSet selectionSet, SelectionQuery query); +} diff --git a/hypertrace-core-graphql-schema-utils/src/main/java/org/hypertrace/core/graphql/utils/schema/SchemaUtilsModule.java b/hypertrace-core-graphql-schema-utils/src/main/java/org/hypertrace/core/graphql/utils/schema/SchemaUtilsModule.java new file mode 100644 index 00000000..a639f2ae --- /dev/null +++ b/hypertrace-core-graphql-schema-utils/src/main/java/org/hypertrace/core/graphql/utils/schema/SchemaUtilsModule.java @@ -0,0 +1,10 @@ +package org.hypertrace.core.graphql.utils.schema; + +import com.google.inject.AbstractModule; + +public class SchemaUtilsModule extends AbstractModule { + @Override + protected void configure() { + bind(GraphQlSelectionFinder.class).to(DefaultGraphQlSelectionFinder.class); + } +} diff --git a/hypertrace-core-graphql-schema-utils/src/main/java/org/hypertrace/core/graphql/utils/schema/SelectionQuery.java b/hypertrace-core-graphql-schema-utils/src/main/java/org/hypertrace/core/graphql/utils/schema/SelectionQuery.java new file mode 100644 index 00000000..e51669eb --- /dev/null +++ b/hypertrace-core-graphql-schema-utils/src/main/java/org/hypertrace/core/graphql/utils/schema/SelectionQuery.java @@ -0,0 +1,21 @@ +package org.hypertrace.core.graphql.utils.schema; + +import graphql.schema.SelectedField; +import java.util.List; +import java.util.function.Predicate; +import lombok.Builder; +import lombok.Value; + +@Value +@Builder(toBuilder = true) +public class SelectionQuery { + + List selectionPath; + Predicate matchesPredicate; + + public static final String ANY = "*"; + + public static SelectionQuery namedChild(String childName) { + return SelectionQuery.builder().selectionPath(List.of(childName)).build(); + } +} diff --git a/hypertrace-core-graphql-schema-utils/src/test/java/org/hypertrace/core/graphql/utils/schema/DefaultGraphQlSelectionFinderTest.java b/hypertrace-core-graphql-schema-utils/src/test/java/org/hypertrace/core/graphql/utils/schema/DefaultGraphQlSelectionFinderTest.java new file mode 100644 index 00000000..96cf7ff6 --- /dev/null +++ b/hypertrace-core-graphql-schema-utils/src/test/java/org/hypertrace/core/graphql/utils/schema/DefaultGraphQlSelectionFinderTest.java @@ -0,0 +1,140 @@ +package org.hypertrace.core.graphql.utils.schema; + +import static org.junit.jupiter.api.Assertions.assertIterableEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.reset; +import static org.mockito.Mockito.when; + +import graphql.schema.DataFetchingFieldSelectionSet; +import graphql.schema.SelectedField; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class DefaultGraphQlSelectionFinderTest { + @Mock DataFetchingFieldSelectionSet mockSelectionSet; + @Mock SelectedField mockSelectionFoo; + @Mock SelectedField mockSelectionBar; + + final DefaultGraphQlSelectionFinder selectionFinder = new DefaultGraphQlSelectionFinder(); + private List topLevelSelectionSet; + + @BeforeEach + void beforeEach() { + this.topLevelSelectionSet = List.of(this.mockSelectionFoo, this.mockSelectionBar); + when(this.mockSelectionFoo.getName()).thenReturn("foo"); + when(this.mockSelectionBar.getName()).thenReturn("bar"); + when(this.mockSelectionSet.getFields(any(String.class))) + .thenAnswer(ignored -> topLevelSelectionSet); + } + + @Test + void returnsEmptyStreamForNoMatchingTopLevelSelections() { + assertIterableEquals( + Collections.emptyList(), + this.selectionFinder + .findSelections( + this.mockSelectionSet, + SelectionQuery.builder().selectionPath(List.of("no-match")).build()) + .collect(Collectors.toUnmodifiableList())); + } + + @Test + void returnsMatchingTopLevelSelections() { + assertIterableEquals( + List.of(this.mockSelectionBar), + this.selectionFinder + .findSelections( + mockSelectionSet, SelectionQuery.builder().selectionPath(List.of("bar")).build()) + .collect(Collectors.toUnmodifiableList())); + } + + @Test + void returnsEmptyForOneLevelMatch() { + DataFetchingFieldSelectionSet fooSelectionSet = mock(DataFetchingFieldSelectionSet.class); + when(fooSelectionSet.getFields(any(String.class))).thenReturn(Collections.emptyList()); + when(this.mockSelectionFoo.getSelectionSet()).thenReturn(fooSelectionSet); + + assertIterableEquals( + Collections.emptyList(), + this.selectionFinder + .findSelections( + mockSelectionSet, + SelectionQuery.builder().selectionPath(List.of("foo", "bar")).build()) + .collect(Collectors.toUnmodifiableList())); + } + + @Test + void returnsMultiLevelMatch() { + DataFetchingFieldSelectionSet fooSelectionSet = mock(DataFetchingFieldSelectionSet.class); + when(fooSelectionSet.getFields(any(String.class))).thenReturn(List.of(this.mockSelectionBar)); + when(this.mockSelectionFoo.getSelectionSet()).thenReturn(fooSelectionSet); + + assertIterableEquals( + List.of(this.mockSelectionBar), + this.selectionFinder + .findSelections( + mockSelectionSet, + SelectionQuery.builder().selectionPath(List.of("foo", "bar")).build()) + .collect(Collectors.toUnmodifiableList())); + } + + @Test + void supportsMultipleMatchFanOut() { + DataFetchingFieldSelectionSet fooSelectionSet = mock(DataFetchingFieldSelectionSet.class); + this.topLevelSelectionSet = List.of(this.mockSelectionFoo, this.mockSelectionFoo); + when(fooSelectionSet.getFields(any(String.class))) + .thenReturn(List.of(this.mockSelectionBar, this.mockSelectionBar)); + when(this.mockSelectionFoo.getSelectionSet()).thenReturn(fooSelectionSet); + + assertIterableEquals( + List.of( + this.mockSelectionBar, + this.mockSelectionBar, + this.mockSelectionBar, + this.mockSelectionBar), + this.selectionFinder + .findSelections( + mockSelectionSet, + SelectionQuery.builder().selectionPath(List.of("foo", "bar")).build()) + .collect(Collectors.toUnmodifiableList())); + } + + @Test + void supportsWildcardPath() { + reset(this.mockSelectionFoo); + reset(this.mockSelectionBar); + assertIterableEquals( + List.of(this.mockSelectionFoo, this.mockSelectionBar), + this.selectionFinder + .findSelections( + mockSelectionSet, SelectionQuery.builder().selectionPath(List.of("*")).build()) + .collect(Collectors.toUnmodifiableList())); + } + + @Test + void supportsLeafPredicates() { + DataFetchingFieldSelectionSet fooSelectionSet = mock(DataFetchingFieldSelectionSet.class); + when(fooSelectionSet.getFields(any(String.class))) + .thenReturn(List.of(this.mockSelectionBar, this.mockSelectionFoo)); + when(this.mockSelectionFoo.getSelectionSet()).thenReturn(fooSelectionSet); + + assertIterableEquals( + List.of(this.mockSelectionBar), + this.selectionFinder + .findSelections( + mockSelectionSet, + SelectionQuery.builder() + .selectionPath(List.of("foo", "*")) + .matchesPredicate(field -> field.getName().equals("bar")) + .build()) + .collect(Collectors.toUnmodifiableList())); + } +} diff --git a/hypertrace-core-graphql-service/build.gradle.kts b/hypertrace-core-graphql-service/build.gradle.kts new file mode 100644 index 00000000..dff26185 --- /dev/null +++ b/hypertrace-core-graphql-service/build.gradle.kts @@ -0,0 +1,33 @@ +plugins { + java + application + id("org.hypertrace.docker-java-application-plugin") + id("org.hypertrace.docker-publish-plugin") +} + +java { + sourceCompatibility = JavaVersion.VERSION_11 +} + +dependencies { + implementation("com.typesafe:config:1.4.0") + implementation("org.hypertrace.core.serviceframework:platform-service-framework:0.1.2") + implementation("org.slf4j:slf4j-api:1.7.30") + + implementation("org.eclipse.jetty:jetty-server:9.4.28.v20200408") + implementation("org.eclipse.jetty:jetty-servlet:9.4.28.v20200408") + implementation("org.eclipse.jetty:jetty-servlets:9.4.28.v20200408") + + implementation("com.graphql-java-kickstart:graphql-java-servlet:9.1.0") + implementation(project(":hypertrace-core-graphql-impl")) + implementation(project(":hypertrace-core-graphql-spi")) + + runtimeOnly("org.apache.logging.log4j:log4j-slf4j-impl:2.13.3") +} + +application { + mainClassName = "org.hypertrace.core.serviceframework.PlatformServiceLauncher" +} +tasks.run { + jvmArgs = listOf("-Dservice.name=${project.name}") +} diff --git a/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java new file mode 100644 index 00000000..d034180a --- /dev/null +++ b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java @@ -0,0 +1,107 @@ +package org.hypertrace.core.graphql.service; + +import com.typesafe.config.Config; +import java.util.Optional; +import java.util.function.Supplier; +import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; + +class DefaultGraphQlServiceConfig implements GraphQlServiceConfig { + + private static final String SERVICE_NAME_CONFIG = "service.name"; + private static final String SERVICE_PORT_CONFIG = "service.port"; + + private static final String GRAPHQL_URL_PATH = "graphql.urlPath"; + private static final String GRAPHQL_ASYNC_SERVLET = "graphql.asyncServlet"; + private static final String GRAPHQL_CORS_ENABLED = "graphql.corsEnabled"; + + private static final String DEFAULT_TENANT_ID = "defaultTenantId"; + + private static final String ATTRIBUTE_SERVICE_HOST_PROPERTY = "attribute.service.host"; + private static final String ATTRIBUTE_SERVICE_PORT_PROPERTY = "attribute.service.port"; + + private static final String GATEWAY_SERVICE_HOST_PROPERTY = "gateway.service.host"; + private static final String GATEWAY_SERVICE_PORT_PROPERTY = "gateway.service.port"; + + private final String serviceName; + private final int servicePort; + private final String graphqlUrlPath; + private final boolean asyncServlet; + private final boolean corsEnabled; + private final Optional defaultTenantId; + private final String attributeServiceHost; + private final int attributeServicePort; + private final String gatewayServiceHost; + private final int gatewayServicePort; + + DefaultGraphQlServiceConfig(Config untypedConfig) { + this.serviceName = untypedConfig.getString(SERVICE_NAME_CONFIG); + this.servicePort = untypedConfig.getInt(SERVICE_PORT_CONFIG); + this.graphqlUrlPath = untypedConfig.getString(GRAPHQL_URL_PATH); + this.asyncServlet = untypedConfig.getBoolean(GRAPHQL_ASYNC_SERVLET); + this.corsEnabled = untypedConfig.getBoolean(GRAPHQL_CORS_ENABLED); + this.defaultTenantId = optionallyGet(() -> untypedConfig.getString(DEFAULT_TENANT_ID)); + + this.attributeServiceHost = untypedConfig.getString(ATTRIBUTE_SERVICE_HOST_PROPERTY); + this.attributeServicePort = untypedConfig.getInt(ATTRIBUTE_SERVICE_PORT_PROPERTY); + this.gatewayServiceHost = untypedConfig.getString(GATEWAY_SERVICE_HOST_PROPERTY); + this.gatewayServicePort = untypedConfig.getInt(GATEWAY_SERVICE_PORT_PROPERTY); + } + + @Override + public int getServicePort() { + return servicePort; + } + + @Override + public String getServiceName() { + return serviceName; + } + + @Override + public String getGraphqlUrlPath() { + return graphqlUrlPath; + } + + @Override + public boolean isAsyncServlet() { + return asyncServlet; + } + + @Override + public boolean isCorsEnabled() { + return corsEnabled; + } + + @Override + public Optional getDefaultTenantId() { + return this.defaultTenantId; + } + + @Override + public String getAttributeServiceHost() { + return this.attributeServiceHost; + } + + @Override + public int getAttributeServicePort() { + return this.attributeServicePort; + } + + @Override + public String getGatewayServiceHost() { + return this.gatewayServiceHost; + } + + @Override + public int getGatewayServicePort() { + return this.gatewayServicePort; + } + + private Optional optionallyGet(Supplier valueSupplier) { + try { + return Optional.ofNullable(valueSupplier.get()); + } catch (Throwable unused) { + return Optional.empty(); + } + } +} diff --git a/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceLifecycle.java b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceLifecycle.java new file mode 100644 index 00000000..92bc976b --- /dev/null +++ b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceLifecycle.java @@ -0,0 +1,18 @@ +package org.hypertrace.core.graphql.service; + +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CompletionStage; +import org.hypertrace.core.graphql.spi.lifecycle.GraphQlServiceLifecycle; + +class DefaultGraphQlServiceLifecycle implements GraphQlServiceLifecycle { + private final CompletableFuture completableFuture = new CompletableFuture<>(); + + @Override + public CompletionStage shutdownCompletion() { + return this.completableFuture.minimalCompletionStage(); + } + + void shutdown() { + this.completableFuture.complete(null); + } +} diff --git a/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/GraphQlService.java b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/GraphQlService.java new file mode 100644 index 00000000..6c335767 --- /dev/null +++ b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/GraphQlService.java @@ -0,0 +1,100 @@ +package org.hypertrace.core.graphql.service; + +import java.util.EnumSet; +import javax.servlet.DispatcherType; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.eclipse.jetty.servlet.ServletHolder; +import org.eclipse.jetty.servlets.CrossOriginFilter; +import org.hypertrace.core.graphql.impl.GraphQlFactory; +import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; +import org.hypertrace.core.serviceframework.PlatformService; +import org.hypertrace.core.serviceframework.config.ConfigClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class GraphQlService extends PlatformService { + + private static final Logger LOG = LoggerFactory.getLogger(GraphQlService.class); + + private GraphQlServiceConfig graphQlServiceConfig; + private DefaultGraphQlServiceLifecycle serviceLifecycle; + private Server server; + + public GraphQlService(ConfigClient configClient) { + super(configClient); + } + + @Override + protected void doInit() { + this.graphQlServiceConfig = new DefaultGraphQlServiceConfig(this.getAppConfig()); + this.serviceLifecycle = new DefaultGraphQlServiceLifecycle(); + this.server = new Server(this.graphQlServiceConfig.getServicePort()); + + ServletContextHandler context = new ServletContextHandler(); + if (this.graphQlServiceConfig.isCorsEnabled()) { + context.addFilter( + CrossOriginFilter.class, + this.graphQlServiceConfig.getGraphqlUrlPath(), + EnumSet.of(DispatcherType.REQUEST)); + } + + context.addServlet( + new ServletHolder( + new GraphQlServiceHttpServlet( + GraphQlFactory.build(this.graphQlServiceConfig, this.serviceLifecycle))), + this.graphQlServiceConfig.getGraphqlUrlPath()); + + this.server.setHandler(context); + this.server.setStopAtShutdown(true); + } + + @Override + protected void doStart() { + LOG.info("Starting service: {}", this.getServiceName()); + + try { + server.start(); + } catch (Exception e) { + LOG.error("Failed to start service: {}", this.getServiceName()); + throw new RuntimeException(e); + } + + try { + server.join(); + } catch (InterruptedException ie) { + Thread.currentThread().interrupt(); + throw new RuntimeException(ie); + } + } + + @Override + protected void doStop() { + LOG.info("Shutting down service: {}", this.getServiceName()); + if (this.serviceLifecycle != null) { + this.serviceLifecycle.shutdown(); + } + while (!server.isStopped()) { + try { + server.stop(); + } catch (Exception e) { + LOG.error("Failed to shutdown service: {}", this.getServiceName()); + throw new RuntimeException(e); + } + } + try { + Thread.sleep(100); + } catch (InterruptedException ignore) { + } + } + + @Override + public boolean healthCheck() { + return true; + } + + @Override + public String getServiceName() { + return this.graphQlServiceConfig.getServiceName(); + } +} diff --git a/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/GraphQlServiceHttpServlet.java b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/GraphQlServiceHttpServlet.java new file mode 100644 index 00000000..67635758 --- /dev/null +++ b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/GraphQlServiceHttpServlet.java @@ -0,0 +1,18 @@ +package org.hypertrace.core.graphql.service; + +import graphql.kickstart.servlet.GraphQLConfiguration; +import graphql.kickstart.servlet.GraphQLHttpServlet; + +class GraphQlServiceHttpServlet extends GraphQLHttpServlet { + + private final GraphQLConfiguration configuration; + + GraphQlServiceHttpServlet(GraphQLConfiguration configuration) { + this.configuration = configuration; + } + + @Override + protected GraphQLConfiguration getConfiguration() { + return configuration; + } +} diff --git a/hypertrace-core-graphql-service/src/main/resources/configs/common/application.conf b/hypertrace-core-graphql-service/src/main/resources/configs/common/application.conf new file mode 100644 index 00000000..01c1a4e2 --- /dev/null +++ b/hypertrace-core-graphql-service/src/main/resources/configs/common/application.conf @@ -0,0 +1,18 @@ +main.class = org.hypertrace.core.graphql.service.GraphQlService +service.name = graphql-service +service.port = 23431 #TODO resolve with existing graphql port when ready for deployment +service.admin.port = 23432 + +graphql.urlPath = /graphql +graphql.asyncServlet = true +graphql.corsEnabled = true + +attribute.service = { + host = localhost + port = 9012 +} + +gateway.service = { + host = localhost + port = 50071 +} \ No newline at end of file diff --git a/hypertrace-core-graphql-service/src/main/resources/log4j2.properties b/hypertrace-core-graphql-service/src/main/resources/log4j2.properties new file mode 100644 index 00000000..62c371c3 --- /dev/null +++ b/hypertrace-core-graphql-service/src/main/resources/log4j2.properties @@ -0,0 +1,8 @@ +status=error +name=PropertiesConfig +appender.console.type=Console +appender.console.name=STDOUT +appender.console.layout.type=PatternLayout +appender.console.layout.pattern=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %c{1.} - %msg%n +rootLogger.level=INFO +rootLogger.appenderRef.stdout.ref=STDOUT diff --git a/hypertrace-core-graphql-span-schema/build.gradle.kts b/hypertrace-core-graphql-span-schema/build.gradle.kts new file mode 100644 index 00000000..4ad46db3 --- /dev/null +++ b/hypertrace-core-graphql-span-schema/build.gradle.kts @@ -0,0 +1,27 @@ +plugins { + `java-library` +} + +java { + sourceCompatibility = JavaVersion.VERSION_11 +} + +dependencies { + api("com.google.inject:guice:4.2.3") + api("com.graphql-java:graphql-java:14.0") + api(project(":hypertrace-core-graphql-spi")) + api("io.github.graphql-java:graphql-java-annotations:8.0") + + annotationProcessor("org.projectlombok:lombok:1.18.12") + compileOnly("org.projectlombok:lombok:1.18.12") + + implementation("org.slf4j:slf4j-api:1.7.3") + implementation("io.reactivex.rxjava3:rxjava:3.0.2") + implementation("org.hypertrace.gateway.service:gateway-service-api:0.1.0") + implementation("com.google.protobuf:protobuf-java-util:3.11.4") + + implementation(project(":hypertrace-core-graphql-context")) + implementation(project(":hypertrace-core-graphql-grpc-utils")) + implementation(project(":hypertrace-core-graphql-common-schema")) + implementation(project(":hypertrace-core-graphql-attribute-store")) +} diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/SpanSchemaFragment.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/SpanSchemaFragment.java new file mode 100644 index 00000000..29a16654 --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/SpanSchemaFragment.java @@ -0,0 +1,17 @@ +package org.hypertrace.core.graphql.span; + +import org.hypertrace.core.graphql.span.schema.SpanSchema; +import org.hypertrace.core.graphql.spi.schema.GraphQlSchemaFragment; + +public class SpanSchemaFragment implements GraphQlSchemaFragment { + + @Override + public String fragmentName() { + return "Span schema"; + } + + @Override + public Class annotatedQueryClass() { + return SpanSchema.class; + } +} diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/SpanSchemaModule.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/SpanSchemaModule.java new file mode 100644 index 00000000..5f69f194 --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/SpanSchemaModule.java @@ -0,0 +1,19 @@ +package org.hypertrace.core.graphql.span; + +import com.google.inject.AbstractModule; +import com.google.inject.multibindings.Multibinder; +import org.hypertrace.core.graphql.common.request.ResultSetRequestBuilder; +import org.hypertrace.core.graphql.span.dao.SpanDaoModule; +import org.hypertrace.core.graphql.spi.schema.GraphQlSchemaFragment; + +public class SpanSchemaModule extends AbstractModule { + @Override + protected void configure() { + Multibinder.newSetBinder(binder(), GraphQlSchemaFragment.class) + .addBinding() + .to(SpanSchemaFragment.class); + + requireBinding(ResultSetRequestBuilder.class); + install(new SpanDaoModule()); + } +} diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanConverter.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanConverter.java new file mode 100644 index 00000000..faa91b9d --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanConverter.java @@ -0,0 +1,68 @@ +package org.hypertrace.core.graphql.span.dao; + +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.Single; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import javax.inject.Inject; +import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.request.ResultSetRequest; +import org.hypertrace.core.graphql.common.utils.BiConverter; +import org.hypertrace.core.graphql.span.schema.Span; +import org.hypertrace.core.graphql.span.schema.SpanResultSet; +import org.hypertrace.gateway.service.v1.common.Value; +import org.hypertrace.gateway.service.v1.span.SpanEvent; +import org.hypertrace.gateway.service.v1.span.SpansResponse; + +class GatewayServiceSpanConverter { + + private final BiConverter, Map, Map> + attributeMapConverter; + + @Inject + GatewayServiceSpanConverter( + BiConverter, Map, Map> + attributeMapConverter) { + this.attributeMapConverter = attributeMapConverter; + } + + public Single convert(ResultSetRequest request, SpansResponse response) { + int total = response.getTotal(); + + return Observable.fromIterable(response.getSpansList()) + .flatMapSingle(spanEvent -> this.convert(request, spanEvent)) + .toList() + .map(spans -> new ConvertedSpanResultSet(spans, total, spans.size())); + } + + private Single convert(ResultSetRequest request, SpanEvent spanEvent) { + return this.attributeMapConverter + .convert(request.attributes(), spanEvent.getAttributesMap()) + .map( + attrMap -> + new ConvertedSpan( + attrMap.get(request.idAttribute().attribute().key()).toString(), attrMap)); + } + + @lombok.Value + @Accessors(fluent = true) + private static class ConvertedSpan implements Span { + String id; + Map attributeValues; + + @Override + public Object attribute(String key) { + return this.attributeValues.get(key); + } + } + + @lombok.Value + @Accessors(fluent = true) + private static class ConvertedSpanResultSet implements SpanResultSet { + List results; + long total; + long count; + } +} diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanDao.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanDao.java new file mode 100644 index 00000000..07a1c8eb --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanDao.java @@ -0,0 +1,66 @@ +package org.hypertrace.core.graphql.span.dao; + +import static java.util.concurrent.TimeUnit.SECONDS; + +import io.grpc.CallCredentials; +import io.reactivex.rxjava3.core.Single; +import javax.inject.Inject; +import javax.inject.Singleton; +import org.hypertrace.core.graphql.common.request.ResultSetRequest; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.core.graphql.span.schema.SpanResultSet; +import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; +import org.hypertrace.core.graphql.utils.grpc.GraphQlGrpcContextBuilder; +import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; +import org.hypertrace.gateway.service.GatewayServiceGrpc; +import org.hypertrace.gateway.service.GatewayServiceGrpc.GatewayServiceFutureStub; +import org.hypertrace.gateway.service.v1.span.SpansRequest; +import org.hypertrace.gateway.service.v1.span.SpansResponse; + +@Singleton +class GatewayServiceSpanDao implements SpanDao { + private static final int DEFAULT_DEADLINE_SEC = 10; + private final GatewayServiceFutureStub gatewayServiceStub; + private final GraphQlGrpcContextBuilder grpcContextBuilder; + private final GatewayServiceSpanRequestBuilder requestBuilder; + private final GatewayServiceSpanConverter spanConverter; + + @Inject + GatewayServiceSpanDao( + GraphQlServiceConfig serviceConfig, + CallCredentials credentials, + GraphQlGrpcContextBuilder grpcContextBuilder, + GrpcChannelRegistry channelRegistry, + GatewayServiceSpanRequestBuilder requestBuilder, + GatewayServiceSpanConverter spanConverter) { + this.grpcContextBuilder = grpcContextBuilder; + this.requestBuilder = requestBuilder; + this.spanConverter = spanConverter; + + this.gatewayServiceStub = + GatewayServiceGrpc.newFutureStub( + channelRegistry.forAddress( + serviceConfig.getGatewayServiceHost(), serviceConfig.getGatewayServicePort())) + .withCallCredentials(credentials); + } + + @Override + public Single getSpans(ResultSetRequest request) { + return this.requestBuilder + .buildRequest(request) + .flatMap(serverRequest -> this.makeRequest(request.context(), serverRequest)) + .flatMap(serverResponse -> this.spanConverter.convert(request, serverResponse)); + } + + private Single makeRequest(GraphQlRequestContext context, SpansRequest request) { + return Single.fromFuture( + this.grpcContextBuilder + .build(context) + .callInContext( + () -> + this.gatewayServiceStub + .withDeadlineAfter(DEFAULT_DEADLINE_SEC, SECONDS) + .getSpans(request))); + } +} diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanRequestBuilder.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanRequestBuilder.java new file mode 100644 index 00000000..dbd593ef --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanRequestBuilder.java @@ -0,0 +1,54 @@ +package org.hypertrace.core.graphql.span.dao; + +import static io.reactivex.rxjava3.core.Single.zip; + +import io.reactivex.rxjava3.core.Single; +import java.util.Collection; +import java.util.List; +import java.util.Set; +import javax.inject.Inject; +import org.hypertrace.core.graphql.common.request.AttributeAssociation; +import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.request.ResultSetRequest; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; +import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.gateway.service.v1.common.Expression; +import org.hypertrace.gateway.service.v1.common.Filter; +import org.hypertrace.gateway.service.v1.common.OrderByExpression; +import org.hypertrace.gateway.service.v1.span.SpansRequest; + +class GatewayServiceSpanRequestBuilder { + + private final Converter>, Filter> filterConverter; + private final Converter>, List> + orderConverter; + private final Converter, Set> attributeConverter; + + @Inject + GatewayServiceSpanRequestBuilder( + Converter>, Filter> filterConverter, + Converter>, List> orderConverter, + Converter, Set> attributeConverter) { + this.filterConverter = filterConverter; + this.orderConverter = orderConverter; + this.attributeConverter = attributeConverter; + } + + Single buildRequest(ResultSetRequest gqlRequest) { + return zip( + this.attributeConverter.convert(gqlRequest.attributes()), + this.orderConverter.convert(gqlRequest.orderArguments()), + this.filterConverter.convert(gqlRequest.filterArguments()), + (selections, orderBys, filters) -> + SpansRequest.newBuilder() + .setStartTimeMillis(gqlRequest.timeRange().startTime().toEpochMilli()) + .setEndTimeMillis(gqlRequest.timeRange().endTime().toEpochMilli()) + .addAllSelection(selections) + .addAllOrderBy(orderBys) + .setLimit(gqlRequest.limit()) + .setOffset(gqlRequest.offset()) + .setFilter(filters) + .build()); + } +} diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanDao.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanDao.java new file mode 100644 index 00000000..7a92783f --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanDao.java @@ -0,0 +1,11 @@ +package org.hypertrace.core.graphql.span.dao; + +import io.reactivex.rxjava3.core.Single; +import org.hypertrace.core.graphql.common.request.ResultSetRequest; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; +import org.hypertrace.core.graphql.span.schema.SpanResultSet; + +public interface SpanDao { + + Single getSpans(ResultSetRequest request); +} diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanDaoModule.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanDaoModule.java new file mode 100644 index 00000000..5e1a8f1d --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanDaoModule.java @@ -0,0 +1,56 @@ +package org.hypertrace.core.graphql.span.dao; + +import com.google.inject.AbstractModule; +import com.google.inject.Key; +import com.google.inject.TypeLiteral; +import io.grpc.CallCredentials; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.hypertrace.core.graphql.common.request.AttributeAssociation; +import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; +import org.hypertrace.core.graphql.common.utils.BiConverter; +import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; +import org.hypertrace.core.graphql.utils.grpc.GraphQlGrpcContextBuilder; +import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; +import org.hypertrace.gateway.service.v1.common.Expression; +import org.hypertrace.gateway.service.v1.common.Filter; +import org.hypertrace.gateway.service.v1.common.OrderByExpression; +import org.hypertrace.gateway.service.v1.common.Value; + +public class SpanDaoModule extends AbstractModule { + + @Override + protected void configure() { + bind(SpanDao.class).to(GatewayServiceSpanDao.class); + + requireBinding(CallCredentials.class); + requireBinding(GraphQlServiceConfig.class); + requireBinding(GraphQlGrpcContextBuilder.class); + requireBinding(GrpcChannelRegistry.class); + + requireBinding( + Key.get(new TypeLiteral, Set>>() {})); + + requireBinding( + Key.get( + new TypeLiteral< + Converter< + List>, List>>() {})); + + requireBinding( + Key.get( + new TypeLiteral< + Converter>, Filter>>() {})); + + requireBinding( + Key.get( + new TypeLiteral< + BiConverter< + Collection, Map, Map>>() {})); + } +} diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/fetcher/SpanFetcher.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/fetcher/SpanFetcher.java new file mode 100644 index 00000000..e774cb28 --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/fetcher/SpanFetcher.java @@ -0,0 +1,42 @@ +package org.hypertrace.core.graphql.span.fetcher; + +import graphql.schema.DataFetcher; +import graphql.schema.DataFetchingEnvironment; +import java.util.concurrent.CompletableFuture; +import javax.inject.Inject; +import org.hypertrace.core.graphql.attributes.AttributeModelScope; +import org.hypertrace.core.graphql.common.fetcher.InjectableDataFetcher; +import org.hypertrace.core.graphql.common.request.ResultSetRequestBuilder; +import org.hypertrace.core.graphql.span.dao.SpanDao; +import org.hypertrace.core.graphql.span.schema.SpanResultSet; + +public class SpanFetcher extends InjectableDataFetcher { + + public SpanFetcher() { + super(SpanFetcherImpl.class); + } + + static final class SpanFetcherImpl implements DataFetcher> { + private final ResultSetRequestBuilder requestBuilder; + private final SpanDao spanDao; + + @Inject + SpanFetcherImpl(ResultSetRequestBuilder requestBuilder, SpanDao spanDao) { + this.requestBuilder = requestBuilder; + this.spanDao = spanDao; + } + + @Override + public CompletableFuture get(DataFetchingEnvironment environment) { + return this.requestBuilder + .build( + environment.getContext(), + AttributeModelScope.SPAN, + environment.getArguments(), + environment.getSelectionSet()) + .flatMap(this.spanDao::getSpans) + .toCompletionStage() + .toCompletableFuture(); + } + } +} diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/schema/Span.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/schema/Span.java new file mode 100644 index 00000000..fe11ac6b --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/schema/Span.java @@ -0,0 +1,10 @@ +package org.hypertrace.core.graphql.span.schema; + +import graphql.annotations.annotationTypes.GraphQLName; +import org.hypertrace.core.graphql.common.schema.attributes.AttributeQueryable; +import org.hypertrace.core.graphql.common.schema.id.Identifiable; + +@GraphQLName(Span.TYPE_NAME) +public interface Span extends AttributeQueryable, Identifiable { + String TYPE_NAME = "Span"; +} diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/schema/SpanResultSet.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/schema/SpanResultSet.java new file mode 100644 index 00000000..abf09e26 --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/schema/SpanResultSet.java @@ -0,0 +1,18 @@ +package org.hypertrace.core.graphql.span.schema; + +import graphql.annotations.annotationTypes.GraphQLField; +import graphql.annotations.annotationTypes.GraphQLName; +import graphql.annotations.annotationTypes.GraphQLNonNull; +import java.util.List; +import org.hypertrace.core.graphql.common.schema.results.ResultSet; + +@GraphQLName(SpanResultSet.TYPE_NAME) +public interface SpanResultSet extends ResultSet { + String TYPE_NAME = "SpanResultSet"; + + @Override + @GraphQLField + @GraphQLNonNull + @GraphQLName(RESULT_SET_RESULTS_NAME) + List results(); +} diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/schema/SpanSchema.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/schema/SpanSchema.java new file mode 100644 index 00000000..22b7ed10 --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/schema/SpanSchema.java @@ -0,0 +1,28 @@ +package org.hypertrace.core.graphql.span.schema; + +import graphql.annotations.annotationTypes.GraphQLDataFetcher; +import graphql.annotations.annotationTypes.GraphQLField; +import graphql.annotations.annotationTypes.GraphQLName; +import graphql.annotations.annotationTypes.GraphQLNonNull; +import java.util.List; +import org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.page.LimitArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.page.OffsetArgument; +import org.hypertrace.core.graphql.span.fetcher.SpanFetcher; + +public interface SpanSchema { + String SPANS_QUERY_NAME = "spans"; + + @GraphQLField + @GraphQLNonNull + @GraphQLName(SPANS_QUERY_NAME) + @GraphQLDataFetcher(SpanFetcher.class) + SpanResultSet spans( + @GraphQLName(TimeRangeArgument.ARGUMENT_NAME) @GraphQLNonNull TimeRangeArgument between, + @GraphQLName(FilterArgument.ARGUMENT_NAME) List filterBy, + @GraphQLName(OrderArgument.ARGUMENT_NAME) List orderBy, + @GraphQLName(LimitArgument.ARGUMENT_NAME) int limit, + @GraphQLName(OffsetArgument.ARGUMENT_NAME) int offset); +} diff --git a/hypertrace-core-graphql-spi/build.gradle.kts b/hypertrace-core-graphql-spi/build.gradle.kts new file mode 100644 index 00000000..73ef9e58 --- /dev/null +++ b/hypertrace-core-graphql-spi/build.gradle.kts @@ -0,0 +1,14 @@ +plugins { + `java-library` +} + +java { + sourceCompatibility = JavaVersion.VERSION_11 +} + +dependencies { + api("com.graphql-java:graphql-java:14.0") + api("com.google.code.findbugs:jsr305:3.0.2") + api("io.github.graphql-java:graphql-java-annotations:8.0") + +} diff --git a/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java b/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java new file mode 100644 index 00000000..a6acd45a --- /dev/null +++ b/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java @@ -0,0 +1,26 @@ +package org.hypertrace.core.graphql.spi.config; + +import java.util.Optional; + +public interface GraphQlServiceConfig { + + int getServicePort(); + + String getServiceName(); + + String getGraphqlUrlPath(); + + boolean isAsyncServlet(); + + boolean isCorsEnabled(); + + Optional getDefaultTenantId(); + + String getAttributeServiceHost(); + + int getAttributeServicePort(); + + String getGatewayServiceHost(); + + int getGatewayServicePort(); +} diff --git a/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/lifecycle/GraphQlServiceLifecycle.java b/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/lifecycle/GraphQlServiceLifecycle.java new file mode 100644 index 00000000..e6963975 --- /dev/null +++ b/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/lifecycle/GraphQlServiceLifecycle.java @@ -0,0 +1,8 @@ +package org.hypertrace.core.graphql.spi.lifecycle; + +import java.util.concurrent.CompletionStage; + +public interface GraphQlServiceLifecycle { + + CompletionStage shutdownCompletion(); +} diff --git a/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/schema/GraphQlSchemaFragment.java b/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/schema/GraphQlSchemaFragment.java new file mode 100644 index 00000000..e8070ba2 --- /dev/null +++ b/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/schema/GraphQlSchemaFragment.java @@ -0,0 +1,26 @@ +package org.hypertrace.core.graphql.spi.schema; + +import graphql.annotations.processor.typeFunctions.TypeFunction; +import java.util.List; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +public interface GraphQlSchemaFragment { + + String fragmentName(); + + @Nullable + default Class annotatedQueryClass() { + return null; + } + + @Nullable + default Class annotatedMutationClass() { + return null; + } + + @Nonnull + default List typeFunctions() { + return List.of(); + } +} diff --git a/hypertrace-core-graphql-trace-schema/build.gradle.kts b/hypertrace-core-graphql-trace-schema/build.gradle.kts new file mode 100644 index 00000000..17843dd0 --- /dev/null +++ b/hypertrace-core-graphql-trace-schema/build.gradle.kts @@ -0,0 +1,29 @@ +plugins { + `java-library` +} + +java { + sourceCompatibility = JavaVersion.VERSION_11 +} + +dependencies { + api("com.google.inject:guice:4.2.3") + api("com.graphql-java:graphql-java:14.0") + api(project(":hypertrace-core-graphql-spi")) + api("io.github.graphql-java:graphql-java-annotations:8.0") + + annotationProcessor("org.projectlombok:lombok:1.18.12") + compileOnly("org.projectlombok:lombok:1.18.12") + + implementation("org.slf4j:slf4j-api:1.7.3") + implementation("io.reactivex.rxjava3:rxjava:3.0.2") + implementation("org.hypertrace.gateway.service:gateway-service-api:0.1.0") + implementation("com.google.protobuf:protobuf-java-util:3.11.4") + + implementation(project(":hypertrace-core-graphql-context")) + implementation(project(":hypertrace-core-graphql-grpc-utils")) + implementation(project(":hypertrace-core-graphql-common-schema")) + implementation(project(":hypertrace-core-graphql-attribute-store")) + implementation(project(":hypertrace-core-graphql-deserialization")) + +} diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/TraceSchemaFragment.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/TraceSchemaFragment.java new file mode 100644 index 00000000..72161b21 --- /dev/null +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/TraceSchemaFragment.java @@ -0,0 +1,17 @@ +package org.hypertrace.core.graphql.trace; + +import org.hypertrace.core.graphql.spi.schema.GraphQlSchemaFragment; +import org.hypertrace.core.graphql.trace.schema.TraceSchema; + +public class TraceSchemaFragment implements GraphQlSchemaFragment { + + @Override + public String fragmentName() { + return "Trace schema"; + } + + @Override + public Class annotatedQueryClass() { + return TraceSchema.class; + } +} diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/TraceSchemaModule.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/TraceSchemaModule.java new file mode 100644 index 00000000..0025503f --- /dev/null +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/TraceSchemaModule.java @@ -0,0 +1,21 @@ +package org.hypertrace.core.graphql.trace; + +import com.google.inject.AbstractModule; +import com.google.inject.multibindings.Multibinder; +import org.hypertrace.core.graphql.spi.schema.GraphQlSchemaFragment; +import org.hypertrace.core.graphql.trace.dao.TraceDaoModule; +import org.hypertrace.core.graphql.trace.deserialization.TraceDeserializationModule; +import org.hypertrace.core.graphql.trace.request.TraceRequestModule; + +public class TraceSchemaModule extends AbstractModule { + @Override + protected void configure() { + Multibinder.newSetBinder(binder(), GraphQlSchemaFragment.class) + .addBinding() + .to(TraceSchemaFragment.class); + + install(new TraceRequestModule()); + install(new TraceDeserializationModule()); + install(new TraceDaoModule()); + } +} diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceConverter.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceConverter.java new file mode 100644 index 00000000..93f469c6 --- /dev/null +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceConverter.java @@ -0,0 +1,67 @@ +package org.hypertrace.core.graphql.trace.dao; + +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.Single; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import javax.inject.Inject; +import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.request.ResultSetRequest; +import org.hypertrace.core.graphql.common.utils.BiConverter; +import org.hypertrace.core.graphql.trace.schema.Trace; +import org.hypertrace.core.graphql.trace.schema.TraceResultSet; +import org.hypertrace.gateway.service.v1.common.Value; +import org.hypertrace.gateway.service.v1.trace.TracesResponse; + +public class GatewayServiceTraceConverter { + private final BiConverter, Map, Map> + attributeMapConverter; + + @Inject + GatewayServiceTraceConverter( + BiConverter, Map, Map> + attributeMapConverter) { + this.attributeMapConverter = attributeMapConverter; + } + + public Single convert(ResultSetRequest request, TracesResponse response) { + int total = response.getTotal(); + + return Observable.fromIterable(response.getTracesList()) + .flatMapSingle(trace -> this.convert(request, trace)) + .toList() + .map(traces -> new ConvertedTraceResultSet(traces, total, traces.size())); + } + + private Single convert( + ResultSetRequest request, org.hypertrace.gateway.service.v1.trace.Trace trace) { + return this.attributeMapConverter + .convert(request.attributes(), trace.getAttributesMap()) + .map( + attrMap -> + new ConvertedTrace( + attrMap.get(request.idAttribute().attribute().key()).toString(), attrMap)); + } + + @lombok.Value + @Accessors(fluent = true) + private static class ConvertedTrace implements Trace { + String id; + Map attributeValues; + + @Override + public Object attribute(String key) { + return this.attributeValues.get(key); + } + } + + @lombok.Value + @Accessors(fluent = true) + private static class ConvertedTraceResultSet implements TraceResultSet { + List results; + long total; + long count; + } +} diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceDao.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceDao.java new file mode 100644 index 00000000..965f484a --- /dev/null +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceDao.java @@ -0,0 +1,67 @@ +package org.hypertrace.core.graphql.trace.dao; + +import static java.util.concurrent.TimeUnit.SECONDS; + +import io.grpc.CallCredentials; +import io.reactivex.rxjava3.core.Single; +import javax.inject.Inject; +import javax.inject.Singleton; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; +import org.hypertrace.core.graphql.trace.request.TraceRequest; +import org.hypertrace.core.graphql.trace.schema.TraceResultSet; +import org.hypertrace.core.graphql.utils.grpc.GraphQlGrpcContextBuilder; +import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; +import org.hypertrace.gateway.service.GatewayServiceGrpc; +import org.hypertrace.gateway.service.GatewayServiceGrpc.GatewayServiceFutureStub; +import org.hypertrace.gateway.service.v1.trace.TracesRequest; +import org.hypertrace.gateway.service.v1.trace.TracesResponse; + +@Singleton +class GatewayServiceTraceDao implements TraceDao { + private static final int DEFAULT_DEADLINE_SEC = 10; + private final GatewayServiceFutureStub gatewayServiceStub; + private final GraphQlGrpcContextBuilder grpcContextBuilder; + private final GatewayServiceTraceRequestBuilder requestBuilder; + private final GatewayServiceTraceConverter traceConverter; + + @Inject + GatewayServiceTraceDao( + GraphQlServiceConfig serviceConfig, + CallCredentials credentials, + GraphQlGrpcContextBuilder grpcContextBuilder, + GrpcChannelRegistry channelRegistry, + GatewayServiceTraceRequestBuilder requestBuilder, + GatewayServiceTraceConverter traceConverter) { + this.grpcContextBuilder = grpcContextBuilder; + this.requestBuilder = requestBuilder; + this.traceConverter = traceConverter; + + this.gatewayServiceStub = + GatewayServiceGrpc.newFutureStub( + channelRegistry.forAddress( + serviceConfig.getGatewayServiceHost(), serviceConfig.getGatewayServicePort())) + .withCallCredentials(credentials); + } + + @Override + public Single getTraces(TraceRequest request) { + return this.requestBuilder + .buildRequest(request) + .flatMap(serverRequest -> this.makeRequest(request.context(), serverRequest)) + .flatMap( + serverResponse -> + this.traceConverter.convert(request.resultSetRequest(), serverResponse)); + } + + private Single makeRequest(GraphQlRequestContext context, TracesRequest request) { + return Single.fromFuture( + this.grpcContextBuilder + .build(context) + .callInContext( + () -> + this.gatewayServiceStub + .withDeadlineAfter(DEFAULT_DEADLINE_SEC, SECONDS) + .getTraces(request))); + } +} diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceRequestBuilder.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceRequestBuilder.java new file mode 100644 index 00000000..62122547 --- /dev/null +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceRequestBuilder.java @@ -0,0 +1,61 @@ +package org.hypertrace.core.graphql.trace.dao; + +import static io.reactivex.rxjava3.core.Single.zip; + +import io.reactivex.rxjava3.core.Single; +import java.util.Collection; +import java.util.List; +import java.util.Set; +import javax.inject.Inject; +import org.hypertrace.core.graphql.common.request.AttributeAssociation; +import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; +import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.core.graphql.trace.request.TraceRequest; +import org.hypertrace.gateway.service.v1.common.Expression; +import org.hypertrace.gateway.service.v1.common.Filter; +import org.hypertrace.gateway.service.v1.common.OrderByExpression; +import org.hypertrace.gateway.service.v1.trace.TracesRequest; + +class GatewayServiceTraceRequestBuilder { + + private final Converter>, Filter> filterConverter; + private final Converter>, List> + orderConverter; + private final Converter, Set> selectionConverter; + private final GatewayServiceTraceTypeConverter traceTypeConverter; + + @Inject + GatewayServiceTraceRequestBuilder( + Converter>, Filter> filterConverter, + Converter>, List> orderConverter, + Converter, Set> selectionConverter, + GatewayServiceTraceTypeConverter traceTypeConverter) { + this.filterConverter = filterConverter; + this.orderConverter = orderConverter; + this.selectionConverter = selectionConverter; + this.traceTypeConverter = traceTypeConverter; + } + + Single buildRequest(TraceRequest request) { + + return zip( + this.traceTypeConverter.convert(request.traceType()), + this.selectionConverter.convert(request.resultSetRequest().attributes()), + this.orderConverter.convert(request.resultSetRequest().orderArguments()), + this.filterConverter.convert(request.resultSetRequest().filterArguments()), + (traceScope, selections, orderBys, filters) -> + TracesRequest.newBuilder() + .setScope(traceScope) + .setStartTimeMillis( + request.resultSetRequest().timeRange().startTime().toEpochMilli()) + .setEndTimeMillis(request.resultSetRequest().timeRange().endTime().toEpochMilli()) + .addAllSelection(selections) + .addAllOrderBy(orderBys) + .setLimit(request.resultSetRequest().limit()) + .setOffset(request.resultSetRequest().offset()) + .setFilter(filters) + .build()); + } +} diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceTypeConverter.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceTypeConverter.java new file mode 100644 index 00000000..15810527 --- /dev/null +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceTypeConverter.java @@ -0,0 +1,30 @@ +package org.hypertrace.core.graphql.trace.dao; + +import io.reactivex.rxjava3.core.Single; +import java.util.UnknownFormatConversionException; +import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.core.graphql.trace.schema.arguments.TraceType; + +class GatewayServiceTraceTypeConverter implements Converter { + + private static final String WELL_KNOWN_PLATFORM_STRING_TRACE = "TRACE"; + private static final String WELL_KNOWN_PLATFORM_STRING_API_TRACE = "API_TRACE"; + private static final String WELL_KNOWN_PLATFORM_STRING_BACKEND_TRACE = "BACKEND_TRACE"; + + @Override + public Single convert(TraceType explorerContext) { + switch (explorerContext) { + case TRACE: + return Single.just(WELL_KNOWN_PLATFORM_STRING_TRACE); + case API_TRACE: + return Single.just(WELL_KNOWN_PLATFORM_STRING_API_TRACE); + case BACKEND_TRACE: + return Single.just(WELL_KNOWN_PLATFORM_STRING_BACKEND_TRACE); + default: + return Single.error( + new UnknownFormatConversionException( + String.format( + "Unable to convert unknown trace type '%s'", explorerContext.name()))); + } + } +} diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/TraceDao.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/TraceDao.java new file mode 100644 index 00000000..6ba80016 --- /dev/null +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/TraceDao.java @@ -0,0 +1,10 @@ +package org.hypertrace.core.graphql.trace.dao; + +import io.reactivex.rxjava3.core.Single; +import org.hypertrace.core.graphql.trace.request.TraceRequest; +import org.hypertrace.core.graphql.trace.schema.TraceResultSet; + +public interface TraceDao { + + Single getTraces(TraceRequest request); +} diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/TraceDaoModule.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/TraceDaoModule.java new file mode 100644 index 00000000..c91afa01 --- /dev/null +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/TraceDaoModule.java @@ -0,0 +1,55 @@ +package org.hypertrace.core.graphql.trace.dao; + +import com.google.inject.AbstractModule; +import com.google.inject.Key; +import com.google.inject.TypeLiteral; +import io.grpc.CallCredentials; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.hypertrace.core.graphql.common.request.AttributeAssociation; +import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; +import org.hypertrace.core.graphql.common.utils.BiConverter; +import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; +import org.hypertrace.core.graphql.utils.grpc.GraphQlGrpcContextBuilder; +import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; +import org.hypertrace.gateway.service.v1.common.Expression; +import org.hypertrace.gateway.service.v1.common.Filter; +import org.hypertrace.gateway.service.v1.common.OrderByExpression; +import org.hypertrace.gateway.service.v1.common.Value; + +public class TraceDaoModule extends AbstractModule { + + @Override + protected void configure() { + bind(TraceDao.class).to(GatewayServiceTraceDao.class); + requireBinding(CallCredentials.class); + requireBinding(GraphQlServiceConfig.class); + requireBinding(GraphQlGrpcContextBuilder.class); + requireBinding(GrpcChannelRegistry.class); + + requireBinding( + Key.get(new TypeLiteral, Set>>() {})); + + requireBinding( + Key.get( + new TypeLiteral< + Converter< + List>, List>>() {})); + + requireBinding( + Key.get( + new TypeLiteral< + Converter>, Filter>>() {})); + + requireBinding( + Key.get( + new TypeLiteral< + BiConverter< + Collection, Map, Map>>() {})); + } +} diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/deserialization/TraceDeserializationModule.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/deserialization/TraceDeserializationModule.java new file mode 100644 index 00000000..0c171423 --- /dev/null +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/deserialization/TraceDeserializationModule.java @@ -0,0 +1,21 @@ +package org.hypertrace.core.graphql.trace.deserialization; + +import com.google.inject.AbstractModule; +import com.google.inject.multibindings.Multibinder; +import org.hypertrace.core.graphql.deserialization.ArgumentDeserializationConfig; +import org.hypertrace.core.graphql.trace.schema.arguments.TraceTypeArgument; + +public class TraceDeserializationModule extends AbstractModule { + @Override + protected void configure() { + + Multibinder deserializationConfigMultibinder = + Multibinder.newSetBinder(binder(), ArgumentDeserializationConfig.class); + + deserializationConfigMultibinder + .addBinding() + .toInstance( + ArgumentDeserializationConfig.forPrimitive( + TraceTypeArgument.ARGUMENT_NAME, TraceTypeArgument.class)); + } +} diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/fetcher/TraceFetcher.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/fetcher/TraceFetcher.java new file mode 100644 index 00000000..c4b0aed7 --- /dev/null +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/fetcher/TraceFetcher.java @@ -0,0 +1,38 @@ +package org.hypertrace.core.graphql.trace.fetcher; + +import graphql.schema.DataFetcher; +import graphql.schema.DataFetchingEnvironment; +import java.util.concurrent.CompletableFuture; +import javax.inject.Inject; +import org.hypertrace.core.graphql.common.fetcher.InjectableDataFetcher; +import org.hypertrace.core.graphql.trace.dao.TraceDao; +import org.hypertrace.core.graphql.trace.request.TraceRequestBuilder; +import org.hypertrace.core.graphql.trace.schema.TraceResultSet; + +public class TraceFetcher extends InjectableDataFetcher { + + public TraceFetcher() { + super(TraceFetcherImpl.class); + } + + static final class TraceFetcherImpl implements DataFetcher> { + private final TraceRequestBuilder requestBuilder; + private final TraceDao traceDao; + + @Inject + TraceFetcherImpl(TraceRequestBuilder requestBuilder, TraceDao traceDao) { + this.requestBuilder = requestBuilder; + this.traceDao = traceDao; + } + + @Override + public CompletableFuture get(DataFetchingEnvironment environment) { + return this.requestBuilder + .build( + environment.getContext(), environment.getArguments(), environment.getSelectionSet()) + .flatMap(this.traceDao::getTraces) + .toCompletionStage() + .toCompletableFuture(); + } + } +} diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/DefaultTraceRequestBuilder.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/DefaultTraceRequestBuilder.java new file mode 100644 index 00000000..4b2d59e7 --- /dev/null +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/DefaultTraceRequestBuilder.java @@ -0,0 +1,69 @@ +package org.hypertrace.core.graphql.trace.request; + +import graphql.schema.DataFetchingFieldSelectionSet; +import io.reactivex.rxjava3.core.Single; +import java.util.Map; +import javax.inject.Inject; +import lombok.Value; +import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.attributes.AttributeModelScope; +import org.hypertrace.core.graphql.common.request.ResultSetRequest; +import org.hypertrace.core.graphql.common.request.ResultSetRequestBuilder; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.core.graphql.deserialization.ArgumentDeserializer; +import org.hypertrace.core.graphql.trace.schema.arguments.TraceType; +import org.hypertrace.core.graphql.trace.schema.arguments.TraceTypeArgument; + +class DefaultTraceRequestBuilder implements TraceRequestBuilder { + + private final ResultSetRequestBuilder resultSetRequestBuilder; + private final ArgumentDeserializer argumentDeserializer; + private final TraceTypeToAttributeModelScopeConverter scopeConverter; + + @Inject + DefaultTraceRequestBuilder( + ResultSetRequestBuilder resultSetRequestBuilder, + ArgumentDeserializer argumentDeserializer, + TraceTypeToAttributeModelScopeConverter scopeConverter) { + this.resultSetRequestBuilder = resultSetRequestBuilder; + this.argumentDeserializer = argumentDeserializer; + this.scopeConverter = scopeConverter; + } + + @Override + public Single build( + GraphQlRequestContext context, + Map arguments, + DataFetchingFieldSelectionSet selectionSet) { + + TraceType traceType = + this.argumentDeserializer + .deserializePrimitive(arguments, TraceTypeArgument.class) + .orElseThrow(); + + return this.scopeConverter + .convert(traceType) + .flatMap(scope -> this.build(context, traceType, scope, arguments, selectionSet)); + } + + private Single build( + GraphQlRequestContext context, + TraceType traceType, + AttributeModelScope scope, + Map arguments, + DataFetchingFieldSelectionSet selectionSet) { + + return this.resultSetRequestBuilder + .build(context, scope, arguments, selectionSet) + .map(resultSetRequest -> new DefaultTraceRequest(context, resultSetRequest, traceType)); + } + + @Value + @Accessors(fluent = true) + private static class DefaultTraceRequest implements TraceRequest { + GraphQlRequestContext context; + ResultSetRequest resultSetRequest; + TraceType traceType; + } +} diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/TraceRequest.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/TraceRequest.java new file mode 100644 index 00000000..304db1b8 --- /dev/null +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/TraceRequest.java @@ -0,0 +1,14 @@ +package org.hypertrace.core.graphql.trace.request; + +import org.hypertrace.core.graphql.common.request.ResultSetRequest; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.core.graphql.trace.schema.arguments.TraceType; + +public interface TraceRequest { + GraphQlRequestContext context(); + + ResultSetRequest resultSetRequest(); + + TraceType traceType(); +} diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/TraceRequestBuilder.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/TraceRequestBuilder.java new file mode 100644 index 00000000..f1779d4d --- /dev/null +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/TraceRequestBuilder.java @@ -0,0 +1,14 @@ +package org.hypertrace.core.graphql.trace.request; + +import graphql.schema.DataFetchingFieldSelectionSet; +import io.reactivex.rxjava3.core.Single; +import java.util.Map; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; + +public interface TraceRequestBuilder { + + Single build( + GraphQlRequestContext context, + Map arguments, + DataFetchingFieldSelectionSet selectionSet); +} diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/TraceRequestModule.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/TraceRequestModule.java new file mode 100644 index 00000000..c959c87e --- /dev/null +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/TraceRequestModule.java @@ -0,0 +1,15 @@ +package org.hypertrace.core.graphql.trace.request; + +import com.google.inject.AbstractModule; +import org.hypertrace.core.graphql.common.request.ResultSetRequestBuilder; +import org.hypertrace.core.graphql.deserialization.ArgumentDeserializer; + +public class TraceRequestModule extends AbstractModule { + @Override + protected void configure() { + bind(TraceRequestBuilder.class).to(DefaultTraceRequestBuilder.class); + + requireBinding(ArgumentDeserializer.class); + requireBinding(ResultSetRequestBuilder.class); + } +} diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/TraceTypeToAttributeModelScopeConverter.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/TraceTypeToAttributeModelScopeConverter.java new file mode 100644 index 00000000..b8ffcc4e --- /dev/null +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/TraceTypeToAttributeModelScopeConverter.java @@ -0,0 +1,26 @@ +package org.hypertrace.core.graphql.trace.request; + +import io.reactivex.rxjava3.core.Single; +import java.util.UnknownFormatConversionException; +import org.hypertrace.core.graphql.attributes.AttributeModelScope; +import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.core.graphql.trace.schema.arguments.TraceType; + +class TraceTypeToAttributeModelScopeConverter implements Converter { + + @Override + public Single convert(TraceType traceType) { + switch (traceType) { + case TRACE: + return Single.just(AttributeModelScope.TRACE); + case API_TRACE: + return Single.just(AttributeModelScope.API_TRACE); + case BACKEND_TRACE: + return Single.just(AttributeModelScope.BACKEND_TRACE); + default: + return Single.error( + new UnknownFormatConversionException( + String.format("Unable to convert unknown trace type '%s'", traceType.name()))); + } + } +} diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/schema/Trace.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/schema/Trace.java new file mode 100644 index 00000000..d82eb5b4 --- /dev/null +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/schema/Trace.java @@ -0,0 +1,10 @@ +package org.hypertrace.core.graphql.trace.schema; + +import graphql.annotations.annotationTypes.GraphQLName; +import org.hypertrace.core.graphql.common.schema.attributes.AttributeQueryable; +import org.hypertrace.core.graphql.common.schema.id.Identifiable; + +@GraphQLName(Trace.TYPE_NAME) +public interface Trace extends AttributeQueryable, Identifiable { + String TYPE_NAME = "Trace"; +} diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/schema/TraceResultSet.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/schema/TraceResultSet.java new file mode 100644 index 00000000..5acba03a --- /dev/null +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/schema/TraceResultSet.java @@ -0,0 +1,18 @@ +package org.hypertrace.core.graphql.trace.schema; + +import graphql.annotations.annotationTypes.GraphQLField; +import graphql.annotations.annotationTypes.GraphQLName; +import graphql.annotations.annotationTypes.GraphQLNonNull; +import java.util.List; +import org.hypertrace.core.graphql.common.schema.results.ResultSet; + +@GraphQLName(TraceResultSet.TYPE_NAME) +public interface TraceResultSet extends ResultSet { + String TYPE_NAME = "TraceResultSet"; + + @Override + @GraphQLField + @GraphQLNonNull + @GraphQLName(RESULT_SET_RESULTS_NAME) + List results(); +} diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/schema/TraceSchema.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/schema/TraceSchema.java new file mode 100644 index 00000000..dfd55a51 --- /dev/null +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/schema/TraceSchema.java @@ -0,0 +1,31 @@ +package org.hypertrace.core.graphql.trace.schema; + +import graphql.annotations.annotationTypes.GraphQLDataFetcher; +import graphql.annotations.annotationTypes.GraphQLField; +import graphql.annotations.annotationTypes.GraphQLName; +import graphql.annotations.annotationTypes.GraphQLNonNull; +import java.util.List; +import org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.page.LimitArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.page.OffsetArgument; +import org.hypertrace.core.graphql.trace.fetcher.TraceFetcher; +import org.hypertrace.core.graphql.trace.schema.arguments.TraceType; +import org.hypertrace.core.graphql.trace.schema.arguments.TraceTypeArgument; + +public interface TraceSchema { + String TRACE_QUERY_NAME = "traces"; + + @GraphQLField + @GraphQLNonNull + @GraphQLName(TRACE_QUERY_NAME) + @GraphQLDataFetcher(TraceFetcher.class) + TraceResultSet traces( + @Deprecated @GraphQLName(TraceTypeArgument.ARGUMENT_NAME) TraceType type, + @GraphQLName(TimeRangeArgument.ARGUMENT_NAME) @GraphQLNonNull TimeRangeArgument between, + @GraphQLName(FilterArgument.ARGUMENT_NAME) List filterBy, + @GraphQLName(OrderArgument.ARGUMENT_NAME) List orderBy, + @GraphQLName(LimitArgument.ARGUMENT_NAME) int limit, + @GraphQLName(OffsetArgument.ARGUMENT_NAME) int offset); +} diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/schema/arguments/TraceType.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/schema/arguments/TraceType.java new file mode 100644 index 00000000..861600e0 --- /dev/null +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/schema/arguments/TraceType.java @@ -0,0 +1,13 @@ +package org.hypertrace.core.graphql.trace.schema.arguments; + +import graphql.annotations.annotationTypes.GraphQLName; + +// TODO temporary for backwards compatibility +@GraphQLName(TraceType.TYPE_NAME) +public enum TraceType { + TRACE, + API_TRACE, + BACKEND_TRACE; + + static final String TYPE_NAME = "TraceType"; +} diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/schema/arguments/TraceTypeArgument.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/schema/arguments/TraceTypeArgument.java new file mode 100644 index 00000000..921e5bbc --- /dev/null +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/schema/arguments/TraceTypeArgument.java @@ -0,0 +1,8 @@ +package org.hypertrace.core.graphql.trace.schema.arguments; + +import org.hypertrace.core.graphql.deserialization.PrimitiveArgument; + +public interface TraceTypeArgument extends PrimitiveArgument { + // TODO figure out how to separate schema definition fo types + String ARGUMENT_NAME = "type"; +} diff --git a/semantic-build-versioning.gradle b/semantic-build-versioning.gradle new file mode 100644 index 00000000..9bc16767 --- /dev/null +++ b/semantic-build-versioning.gradle @@ -0,0 +1,11 @@ +// Follows https://www.conventionalcommits.org/en/v1.0.0/#summary with one change: any commit is treated as a release, +// patch being the default if major or minor is not detected. + +autobump { + // match any message starting with a type/scope suffixed with !, or with a line starting with "BREAKING CHANGE:" + majorPattern = ~/(?m)(\A[^:]+(?<=!): |^BREAKING CHANGE:)/ + // match any commit message starting with "feat: " or "feat(any scope): " + minorPattern = ~/^feat(\([^)]+\))?: / + newPreReleasePattern = null // Not used - no prereleases + promoteToReleasePattern = null // Not used - every merge is a release +} \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 00000000..d41f761f --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,29 @@ +rootProject.name = "hypertrace-core-graphql" + +pluginManagement { + repositories { + mavenLocal() + gradlePluginPortal() + maven("https://dl.bintray.com/hypertrace/maven") + } +} + +plugins { + id("org.hypertrace.version-settings") version "0.1.1" +} + +include(":hypertrace-core-graphql-service") +include(":hypertrace-core-graphql-impl") +include(":hypertrace-core-graphql-spi") +include(":hypertrace-core-graphql-context") +include(":hypertrace-core-graphql-schema-registry") +include(":hypertrace-core-graphql-attribute-store") +include(":hypertrace-core-graphql-deserialization") +include(":hypertrace-core-graphql-grpc-utils") +include(":hypertrace-core-graphql-schema-utils") +include(":hypertrace-core-graphql-gateway-service-utils") +include(":hypertrace-core-graphql-common-schema") +include(":hypertrace-core-graphql-metadata-schema") +include(":hypertrace-core-graphql-span-schema") +include(":hypertrace-core-graphql-trace-schema") +include(":hypertrace-core-graphql-attribute-scope") From 5a192b846fb255b5a6929bbafa66f1fb47516753 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld Date: Fri, 10 Jul 2020 20:28:45 -0400 Subject: [PATCH 002/173] fix: upgrade new jetty vulnerability --- hypertrace-core-graphql-service/build.gradle.kts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hypertrace-core-graphql-service/build.gradle.kts b/hypertrace-core-graphql-service/build.gradle.kts index dff26185..cff6268d 100644 --- a/hypertrace-core-graphql-service/build.gradle.kts +++ b/hypertrace-core-graphql-service/build.gradle.kts @@ -14,9 +14,9 @@ dependencies { implementation("org.hypertrace.core.serviceframework:platform-service-framework:0.1.2") implementation("org.slf4j:slf4j-api:1.7.30") - implementation("org.eclipse.jetty:jetty-server:9.4.28.v20200408") - implementation("org.eclipse.jetty:jetty-servlet:9.4.28.v20200408") - implementation("org.eclipse.jetty:jetty-servlets:9.4.28.v20200408") + implementation("org.eclipse.jetty:jetty-server:9.4.30.v20200611") + implementation("org.eclipse.jetty:jetty-servlet:9.4.30.v20200611") + implementation("org.eclipse.jetty:jetty-servlets:9.4.30.v20200611s") implementation("com.graphql-java-kickstart:graphql-java-servlet:9.1.0") implementation(project(":hypertrace-core-graphql-impl")) From 9d1b296b70213c75fbfe84efd7ff9f65fb168ea7 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld Date: Fri, 10 Jul 2020 20:31:18 -0400 Subject: [PATCH 003/173] fix: clean stray char in version string --- hypertrace-core-graphql-service/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hypertrace-core-graphql-service/build.gradle.kts b/hypertrace-core-graphql-service/build.gradle.kts index cff6268d..9beaeb0d 100644 --- a/hypertrace-core-graphql-service/build.gradle.kts +++ b/hypertrace-core-graphql-service/build.gradle.kts @@ -16,7 +16,7 @@ dependencies { implementation("org.eclipse.jetty:jetty-server:9.4.30.v20200611") implementation("org.eclipse.jetty:jetty-servlet:9.4.30.v20200611") - implementation("org.eclipse.jetty:jetty-servlets:9.4.30.v20200611s") + implementation("org.eclipse.jetty:jetty-servlets:9.4.30.v20200611") implementation("com.graphql-java-kickstart:graphql-java-servlet:9.1.0") implementation(project(":hypertrace-core-graphql-impl")) From e4eba84c978d06fbc8a62f5d97655098a4380a41 Mon Sep 17 00:00:00 2001 From: Tim Mwangi Date: Mon, 13 Jul 2020 07:33:06 -0700 Subject: [PATCH 004/173] chore: update to Apache 2.0 License --- LICENSE.md | 660 ------------------ LICENSE.txt | 202 ++++++ .../build.gradle.kts | 2 +- .../build.gradle.kts | 4 +- .../build.gradle.kts | 2 +- .../build.gradle.kts | 2 +- .../build.gradle.kts | 2 +- 7 files changed, 208 insertions(+), 666 deletions(-) delete mode 100644 LICENSE.md create mode 100644 LICENSE.txt diff --git a/LICENSE.md b/LICENSE.md deleted file mode 100644 index cba6f6a1..00000000 --- a/LICENSE.md +++ /dev/null @@ -1,660 +0,0 @@ -### GNU AFFERO GENERAL PUBLIC LICENSE - -Version 3, 19 November 2007 - -Copyright (C) 2007 Free Software Foundation, Inc. - - -Everyone is permitted to copy and distribute verbatim copies of this -license document, but changing it is not allowed. - -### Preamble - -The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - -The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains -free software for all its users. - -When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - -Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - -A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - -The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - -An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing -under this license. - -The precise terms and conditions for copying, distribution and -modification follow. - -### TERMS AND CONDITIONS - -#### 0. Definitions. - -"This License" refers to version 3 of the GNU Affero General Public -License. - -"Copyright" also means copyright-like laws that apply to other kinds -of works, such as semiconductor masks. - -"The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - -To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of -an exact copy. The resulting work is called a "modified version" of -the earlier work or a work "based on" the earlier work. - -A "covered work" means either the unmodified Program or a work based -on the Program. - -To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - -To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user -through a computer network, with no transfer of a copy, is not -conveying. - -An interactive user interface displays "Appropriate Legal Notices" to -the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - -#### 1. Source Code. - -The "source code" for a work means the preferred form of the work for -making modifications to it. "Object code" means any non-source form of -a work. - -A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - -The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - -The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - -The Corresponding Source need not include anything that users can -regenerate automatically from other parts of the Corresponding Source. - -The Corresponding Source for a work in source code form is that same -work. - -#### 2. Basic Permissions. - -All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - -You may make, run and propagate covered works that you do not convey, -without conditions so long as your license otherwise remains in force. -You may convey covered works to others for the sole purpose of having -them make modifications exclusively for you, or provide you with -facilities for running those works, provided that you comply with the -terms of this License in conveying all material for which you do not -control copyright. Those thus making or running the covered works for -you must do so exclusively on your behalf, under your direction and -control, on terms that prohibit them from making any copies of your -copyrighted material outside their relationship with you. - -Conveying under any other circumstances is permitted solely under the -conditions stated below. Sublicensing is not allowed; section 10 makes -it unnecessary. - -#### 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - -No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - -When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such -circumvention is effected by exercising rights under this License with -respect to the covered work, and you disclaim any intention to limit -operation or modification of the work as a means of enforcing, against -the work's users, your or third parties' legal rights to forbid -circumvention of technological measures. - -#### 4. Conveying Verbatim Copies. - -You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - -You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - -#### 5. Conveying Modified Source Versions. - -You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these -conditions: - -- a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. -- b) The work must carry prominent notices stating that it is - released under this License and any conditions added under - section 7. This requirement modifies the requirement in section 4 - to "keep intact all notices". -- c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. -- d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - -A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - -#### 6. Conveying Non-Source Forms. - -You may convey a covered work in object code form under the terms of -sections 4 and 5, provided that you also convey the machine-readable -Corresponding Source under the terms of this License, in one of these -ways: - -- a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. -- b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the Corresponding - Source from a network server at no charge. -- c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. -- d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. -- e) Convey the object code using peer-to-peer transmission, - provided you inform other peers where the object code and - Corresponding Source of the work are being offered to the general - public at no charge under subsection 6d. - -A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - -A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, -family, or household purposes, or (2) anything designed or sold for -incorporation into a dwelling. In determining whether a product is a -consumer product, doubtful cases shall be resolved in favor of -coverage. For a particular product received by a particular user, -"normally used" refers to a typical or common use of that class of -product, regardless of the status of the particular user or of the way -in which the particular user actually uses, or expects or is expected -to use, the product. A product is a consumer product regardless of -whether the product has substantial commercial, industrial or -non-consumer uses, unless such uses represent the only significant -mode of use of the product. - -"Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to -install and execute modified versions of a covered work in that User -Product from a modified version of its Corresponding Source. The -information must suffice to ensure that the continued functioning of -the modified object code is in no case prevented or interfered with -solely because modification has been made. - -If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - -The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or -updates for a work that has been modified or installed by the -recipient, or for the User Product in which it has been modified or -installed. Access to a network may be denied when the modification -itself materially and adversely affects the operation of the network -or violates the rules and protocols for communication across the -network. - -Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - -#### 7. Additional Terms. - -"Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - -When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - -Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders -of that material) supplement the terms of this License with terms: - -- a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or -- b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or -- c) Prohibiting misrepresentation of the origin of that material, - or requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or -- d) Limiting the use for publicity purposes of names of licensors - or authors of the material; or -- e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or -- f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions - of it) with contractual assumptions of liability to the recipient, - for any liability that these contractual assumptions directly - impose on those licensors and authors. - -All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - -If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - -Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; the -above requirements apply either way. - -#### 8. Termination. - -You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - -However, if you cease all violation of this License, then your license -from a particular copyright holder is reinstated (a) provisionally, -unless and until the copyright holder explicitly and finally -terminates your license, and (b) permanently, if the copyright holder -fails to notify you of the violation by some reasonable means prior to -60 days after the cessation. - -Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - -Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - -#### 9. Acceptance Not Required for Having Copies. - -You are not required to accept this License in order to receive or run -a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - -#### 10. Automatic Licensing of Downstream Recipients. - -Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - -An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - -You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - -#### 11. Patents. - -A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - -A contributor's "essential patent claims" are all patent claims owned -or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - -Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - -In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - -If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - -If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - -A patent license is "discriminatory" if it does not include within the -scope of its coverage, prohibits the exercise of, or is conditioned on -the non-exercise of one or more of the rights that are specifically -granted under this License. You may not convey a covered work if you -are a party to an arrangement with a third party that is in the -business of distributing software, under which you make payment to the -third party based on the extent of your activity of conveying the -work, and under which the third party grants, to any of the parties -who would receive the covered work from you, a discriminatory patent -license (a) in connection with copies of the covered work conveyed by -you (or copies made from those copies), or (b) primarily for and in -connection with specific products or compilations that contain the -covered work, unless you entered into that arrangement, or that patent -license was granted, prior to 28 March 2007. - -Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - -#### 12. No Surrender of Others' Freedom. - -If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under -this License and any other pertinent obligations, then as a -consequence you may not convey it at all. For example, if you agree to -terms that obligate you to collect a royalty for further conveying -from those to whom you convey the Program, the only way you could -satisfy both those terms and this License would be to refrain entirely -from conveying the Program. - -#### 13. Remote Network Interaction; Use with the GNU General Public License. - -Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your -version supports such interaction) an opportunity to receive the -Corresponding Source of your version by providing access to the -Corresponding Source from a network server at no charge, through some -standard or customary means of facilitating copying of software. This -Corresponding Source shall include the Corresponding Source for any -work covered by version 3 of the GNU General Public License that is -incorporated pursuant to the following paragraph. - -Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. - -#### 14. Revised Versions of this License. - -The Free Software Foundation may publish revised and/or new versions -of the GNU Affero General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies that a certain numbered version of the GNU Affero General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever -published by the Free Software Foundation. - -If the Program specifies that a proxy can decide which future versions -of the GNU Affero General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - -Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - -#### 15. Disclaimer of Warranty. - -THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT -WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND -PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE -DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR -CORRECTION. - -#### 16. Limitation of Liability. - -IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR -CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT -NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR -LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM -TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER -PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -#### 17. Interpretation of Sections 15 and 16. - -If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - -END OF TERMS AND CONDITIONS - -### How to Apply These Terms to Your New Programs - -If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these -terms. - -To do so, attach the following notices to the program. It is safest to -attach them to the start of each source file to most effectively state -the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as - published by the Free Software Foundation, either version 3 of the - License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper -mail. - -If your software can interact with users remotely through a computer -network, you should also make sure that it provides a way for users to -get its source. For example, if your program is a web application, its -interface could display a "Source" link that leads users to an archive -of the code. There are many ways you could offer source, and different -solutions will be better for different programs; see section 13 for -the specific requirements. - -You should also get your employer (if you work as a programmer) or -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. For more information on this, and how to apply and follow -the GNU AGPL, see . diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 00000000..3af859d2 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2020 Traceable Inc + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/hypertrace-core-graphql-gateway-service-utils/build.gradle.kts b/hypertrace-core-graphql-gateway-service-utils/build.gradle.kts index 8fd9da48..dbedacbe 100644 --- a/hypertrace-core-graphql-gateway-service-utils/build.gradle.kts +++ b/hypertrace-core-graphql-gateway-service-utils/build.gradle.kts @@ -10,7 +10,7 @@ java { dependencies { api("com.google.inject:guice:4.2.3") - api("org.hypertrace.gateway.service:gateway-service-api:0.1.0") + api("org.hypertrace.gateway.service:gateway-service-api:0.1.1") api(project(":hypertrace-core-graphql-attribute-store")) api("io.reactivex.rxjava3:rxjava:3.0.2") api(project(":hypertrace-core-graphql-common-schema")) diff --git a/hypertrace-core-graphql-grpc-utils/build.gradle.kts b/hypertrace-core-graphql-grpc-utils/build.gradle.kts index 85f0f9d8..c6e858be 100644 --- a/hypertrace-core-graphql-grpc-utils/build.gradle.kts +++ b/hypertrace-core-graphql-grpc-utils/build.gradle.kts @@ -16,8 +16,8 @@ dependencies { api("io.grpc:grpc-stub:1.30.2") api(project(":hypertrace-core-graphql-context")) - implementation("org.hypertrace.core.grpcutils:grpc-context-utils:0.1.0") - implementation("org.hypertrace.core.grpcutils:grpc-client-utils:0.1.0") + implementation("org.hypertrace.core.grpcutils:grpc-context-utils:0.1.1") + implementation("org.hypertrace.core.grpcutils:grpc-client-utils:0.1.1") implementation("io.grpc:grpc-context:1.30.2") implementation("io.reactivex.rxjava3:rxjava:3.0.2") implementation(project(":hypertrace-core-graphql-spi")) diff --git a/hypertrace-core-graphql-service/build.gradle.kts b/hypertrace-core-graphql-service/build.gradle.kts index 9beaeb0d..c1654ae7 100644 --- a/hypertrace-core-graphql-service/build.gradle.kts +++ b/hypertrace-core-graphql-service/build.gradle.kts @@ -11,7 +11,7 @@ java { dependencies { implementation("com.typesafe:config:1.4.0") - implementation("org.hypertrace.core.serviceframework:platform-service-framework:0.1.2") + implementation("org.hypertrace.core.serviceframework:platform-service-framework:0.1.3") implementation("org.slf4j:slf4j-api:1.7.30") implementation("org.eclipse.jetty:jetty-server:9.4.30.v20200611") diff --git a/hypertrace-core-graphql-span-schema/build.gradle.kts b/hypertrace-core-graphql-span-schema/build.gradle.kts index 4ad46db3..3ad2f32b 100644 --- a/hypertrace-core-graphql-span-schema/build.gradle.kts +++ b/hypertrace-core-graphql-span-schema/build.gradle.kts @@ -17,7 +17,7 @@ dependencies { implementation("org.slf4j:slf4j-api:1.7.3") implementation("io.reactivex.rxjava3:rxjava:3.0.2") - implementation("org.hypertrace.gateway.service:gateway-service-api:0.1.0") + implementation("org.hypertrace.gateway.service:gateway-service-api:0.1.1") implementation("com.google.protobuf:protobuf-java-util:3.11.4") implementation(project(":hypertrace-core-graphql-context")) diff --git a/hypertrace-core-graphql-trace-schema/build.gradle.kts b/hypertrace-core-graphql-trace-schema/build.gradle.kts index 17843dd0..27bd07a5 100644 --- a/hypertrace-core-graphql-trace-schema/build.gradle.kts +++ b/hypertrace-core-graphql-trace-schema/build.gradle.kts @@ -17,7 +17,7 @@ dependencies { implementation("org.slf4j:slf4j-api:1.7.3") implementation("io.reactivex.rxjava3:rxjava:3.0.2") - implementation("org.hypertrace.gateway.service:gateway-service-api:0.1.0") + implementation("org.hypertrace.gateway.service:gateway-service-api:0.1.1") implementation("com.google.protobuf:protobuf-java-util:3.11.4") implementation(project(":hypertrace-core-graphql-context")) From 4be3ff018fc79e28308ea7d65faaf6007a24891a Mon Sep 17 00:00:00 2001 From: samarth-gupta-traceable Date: Tue, 28 Jul 2020 11:05:22 +0530 Subject: [PATCH 005/173] Upgrade grpcutils for 0.1.3 to support binary headers --- hypertrace-core-graphql-grpc-utils/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hypertrace-core-graphql-grpc-utils/build.gradle.kts b/hypertrace-core-graphql-grpc-utils/build.gradle.kts index c6e858be..2bad2f6f 100644 --- a/hypertrace-core-graphql-grpc-utils/build.gradle.kts +++ b/hypertrace-core-graphql-grpc-utils/build.gradle.kts @@ -16,8 +16,8 @@ dependencies { api("io.grpc:grpc-stub:1.30.2") api(project(":hypertrace-core-graphql-context")) - implementation("org.hypertrace.core.grpcutils:grpc-context-utils:0.1.1") - implementation("org.hypertrace.core.grpcutils:grpc-client-utils:0.1.1") + implementation("org.hypertrace.core.grpcutils:grpc-context-utils:0.1.3") + implementation("org.hypertrace.core.grpcutils:grpc-client-utils:0.1.3") implementation("io.grpc:grpc-context:1.30.2") implementation("io.reactivex.rxjava3:rxjava:3.0.2") implementation(project(":hypertrace-core-graphql-spi")) From 5cdfa1c529aa83e2d36163aee6d9b9c5da6eaf68 Mon Sep 17 00:00:00 2001 From: samarth-gupta-traceable Date: Tue, 28 Jul 2020 11:26:29 +0530 Subject: [PATCH 006/173] Upgrade grpcutils for 0.1.3 to support binary headers --- .circleci/config.yml | 2 +- .snyk | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 .snyk diff --git a/.circleci/config.yml b/.circleci/config.yml index 90ab79a8..03109ad4 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -75,7 +75,7 @@ jobs: steps: - setup_build_environment - snyk/scan: - additional-arguments: --all-sub-projects + additional-arguments: --all-sub-projects --policy-path=.snyk publish: executor: java diff --git a/.snyk b/.snyk new file mode 100644 index 00000000..72e1f159 --- /dev/null +++ b/.snyk @@ -0,0 +1,10 @@ +# Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities. +version: v1.14.1 +# ignores vulnerabilities until expiry date; change duration by modifying expiry date +ignore: + SNYK-JAVA-IOGRPC-571957: + - '*': + reason: No replacement available + expires: 2020-08-31T00:00:00.000Z +patch: {} + From 2a7ba8ad124fbfb41d31085ece1e199b028286eb Mon Sep 17 00:00:00 2001 From: Laxman Ch Date: Thu, 30 Jul 2020 10:50:06 +0530 Subject: [PATCH 007/173] chore: upgrade docker plugin --- build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index d3184c17..34472749 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,8 +2,8 @@ plugins { id("org.hypertrace.repository-plugin") version "0.2.0" id("org.hypertrace.ci-utils-plugin") version "0.1.1" id("org.hypertrace.jacoco-report-plugin") version "0.1.0" apply false - id("org.hypertrace.docker-java-application-plugin") version "0.2.2" apply false - id("org.hypertrace.docker-publish-plugin") version "0.2.2" apply false + id("org.hypertrace.docker-java-application-plugin") version "0.3.0" apply false + id("org.hypertrace.docker-publish-plugin") version "0.3.0" apply false } subprojects { From d35cae00f7e41eb16938b68794d4a4683ffb5ba3 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld Date: Thu, 30 Jul 2020 16:16:44 -0400 Subject: [PATCH 008/173] ci: update codeowners --- .github/CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index c4b8c174..c2f60c1e 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,4 +1,4 @@ # Each line is a file pattern followed by one or more owners. # global -* @aaron-steinfeld @tim-mwangi +* @hypertrace/graphql From e6c6f39965ec86945278f81b973e86496793b239 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld Date: Fri, 31 Jul 2020 13:53:39 -0400 Subject: [PATCH 009/173] ci: update docker plugin version --- build.gradle.kts | 4 ++-- hypertrace-core-graphql-attribute-scope/build.gradle.kts | 2 +- hypertrace-core-graphql-context/build.gradle.kts | 2 +- hypertrace-core-graphql-deserialization/build.gradle.kts | 2 +- .../build.gradle.kts | 2 +- hypertrace-core-graphql-grpc-utils/build.gradle.kts | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 34472749..8a16f0ad 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,8 +2,8 @@ plugins { id("org.hypertrace.repository-plugin") version "0.2.0" id("org.hypertrace.ci-utils-plugin") version "0.1.1" id("org.hypertrace.jacoco-report-plugin") version "0.1.0" apply false - id("org.hypertrace.docker-java-application-plugin") version "0.3.0" apply false - id("org.hypertrace.docker-publish-plugin") version "0.3.0" apply false + id("org.hypertrace.docker-java-application-plugin") version "0.3.2" apply false + id("org.hypertrace.docker-publish-plugin") version "0.3.2" apply false } subprojects { diff --git a/hypertrace-core-graphql-attribute-scope/build.gradle.kts b/hypertrace-core-graphql-attribute-scope/build.gradle.kts index 53ab2b3e..00189b2a 100644 --- a/hypertrace-core-graphql-attribute-scope/build.gradle.kts +++ b/hypertrace-core-graphql-attribute-scope/build.gradle.kts @@ -11,4 +11,4 @@ dependencies { api("io.reactivex.rxjava3:rxjava:3.0.2") api(project(":hypertrace-core-graphql-attribute-store")) api(project(":hypertrace-core-graphql-common-schema")) -} \ No newline at end of file +} diff --git a/hypertrace-core-graphql-context/build.gradle.kts b/hypertrace-core-graphql-context/build.gradle.kts index 83285052..35567971 100644 --- a/hypertrace-core-graphql-context/build.gradle.kts +++ b/hypertrace-core-graphql-context/build.gradle.kts @@ -22,4 +22,4 @@ dependencies { tasks.test { useJUnitPlatform() -} \ No newline at end of file +} diff --git a/hypertrace-core-graphql-deserialization/build.gradle.kts b/hypertrace-core-graphql-deserialization/build.gradle.kts index d6b4ab84..b512b443 100644 --- a/hypertrace-core-graphql-deserialization/build.gradle.kts +++ b/hypertrace-core-graphql-deserialization/build.gradle.kts @@ -26,4 +26,4 @@ dependencies { tasks.test { useJUnitPlatform() -} \ No newline at end of file +} diff --git a/hypertrace-core-graphql-gateway-service-utils/build.gradle.kts b/hypertrace-core-graphql-gateway-service-utils/build.gradle.kts index dbedacbe..057865a7 100644 --- a/hypertrace-core-graphql-gateway-service-utils/build.gradle.kts +++ b/hypertrace-core-graphql-gateway-service-utils/build.gradle.kts @@ -22,4 +22,4 @@ dependencies { tasks.test { useJUnitPlatform() -} \ No newline at end of file +} diff --git a/hypertrace-core-graphql-grpc-utils/build.gradle.kts b/hypertrace-core-graphql-grpc-utils/build.gradle.kts index 2bad2f6f..8b51c8d3 100644 --- a/hypertrace-core-graphql-grpc-utils/build.gradle.kts +++ b/hypertrace-core-graphql-grpc-utils/build.gradle.kts @@ -31,4 +31,4 @@ dependencies { tasks.test { useJUnitPlatform() -} \ No newline at end of file +} From 734760a409fb670d930e4cb9b5735b4e425f0d0c Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld Date: Fri, 31 Jul 2020 17:58:24 -0400 Subject: [PATCH 010/173] feat: expose groupability metadata on attributes --- hypertrace-core-graphql-attribute-store/build.gradle.kts | 2 +- .../hypertrace/core/graphql/attributes/AttributeModel.java | 2 ++ .../core/graphql/attributes/AttributeModelTranslator.java | 4 ++-- .../core/graphql/attributes/DefaultAttributeModel.java | 1 + .../graphql/attributes/AttributeModelTranslatorTest.java | 2 ++ .../graphql/metadata/response/DefaultAttributeMetadata.java | 1 + .../graphql/metadata/response/MetadataResponseBuilder.java | 3 ++- .../core/graphql/metadata/schema/AttributeMetadata.java | 6 ++++++ .../metadata/response/MetadataResponseBuilderTest.java | 3 +++ 9 files changed, 20 insertions(+), 4 deletions(-) diff --git a/hypertrace-core-graphql-attribute-store/build.gradle.kts b/hypertrace-core-graphql-attribute-store/build.gradle.kts index 38604192..d98f9d6a 100644 --- a/hypertrace-core-graphql-attribute-store/build.gradle.kts +++ b/hypertrace-core-graphql-attribute-store/build.gradle.kts @@ -17,7 +17,7 @@ dependencies { implementation("io.reactivex.rxjava3:rxjava:3.0.2") implementation("com.google.guava:guava:29.0-jre") - implementation("org.hypertrace.core.attribute.service:attribute-service-api:0.1.2") + implementation("org.hypertrace.core.attribute.service:attribute-service-api:0.1.9") implementation(project(":hypertrace-core-graphql-grpc-utils")) annotationProcessor("org.projectlombok:lombok:1.18.12") diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModel.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModel.java index 8e42747e..1b6ea475 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModel.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModel.java @@ -19,4 +19,6 @@ public interface AttributeModel { boolean requiresAggregation(); List supportedMetricAggregationTypes(); + + boolean groupable(); } diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java index 01335ffb..0b4e467c 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java @@ -25,8 +25,8 @@ public Optional translate(AttributeMetadata attributeMetadata) { this.convertType(attributeMetadata.getValueKind()), attributeMetadata.getUnit(), attributeMetadata.getOnlyAggregationsAllowed(), - this.convertMetricAggregationTypes( - attributeMetadata.getSupportedAggregationsList()))); + this.convertMetricAggregationTypes(attributeMetadata.getSupportedAggregationsList()), + attributeMetadata.getGroupable())); } catch (Exception e) { LOGGER.warn("Dropping attribute {} : {}", attributeMetadata.getId(), e.getMessage()); return Optional.empty(); diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/DefaultAttributeModel.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/DefaultAttributeModel.java index dc55e97a..0eefe1b0 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/DefaultAttributeModel.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/DefaultAttributeModel.java @@ -17,4 +17,5 @@ class DefaultAttributeModel implements AttributeModel { String units; boolean requiresAggregation; List supportedMetricAggregationTypes; + boolean groupable; } diff --git a/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslatorTest.java b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslatorTest.java index 7912a8a7..8d97aee1 100644 --- a/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslatorTest.java +++ b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslatorTest.java @@ -30,6 +30,7 @@ void beforeEach() { .setUnit("unit") .setOnlyAggregationsAllowed(true) .addAllSupportedAggregations(List.of(AggregateFunction.SUM, AggregateFunction.AVG)) + .setGroupable(true) .build(); this.expectedModel = @@ -45,6 +46,7 @@ void beforeEach() { List.of( AttributeModelMetricAggregationType.SUM, AttributeModelMetricAggregationType.AVG)) + .groupable(true) .build(); } diff --git a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/DefaultAttributeMetadata.java b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/DefaultAttributeMetadata.java index 080b9bba..de97915c 100644 --- a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/DefaultAttributeMetadata.java +++ b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/DefaultAttributeMetadata.java @@ -20,4 +20,5 @@ class DefaultAttributeMetadata implements AttributeMetadata { String units; boolean onlyAggregationsAllowed; List supportedAggregations; + boolean groupable; } diff --git a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilder.java b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilder.java index 7f4f65ef..daf25bbb 100644 --- a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilder.java +++ b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilder.java @@ -55,7 +55,8 @@ private Maybe build(AttributeModel model) { type, model.units(), model.requiresAggregation(), - aggregations)) + aggregations, + model.groupable())) .cast(AttributeMetadata.class) .onErrorComplete(); } diff --git a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/schema/AttributeMetadata.java b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/schema/AttributeMetadata.java index 00262ee3..9c5e76f1 100644 --- a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/schema/AttributeMetadata.java +++ b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/schema/AttributeMetadata.java @@ -18,6 +18,7 @@ public interface AttributeMetadata { String ATTRIBUTE_METADATA_UNITS_NAME = "units"; String ATTRIBUTE_METADATA_ONLY_AGGREGATIONS_ALLOWED_NAME = "onlyAggregationsAllowed"; String ATTRIBUTE_METADATA_SUPPORTED_AGGREGATIONS_NAME = "supportedAggregations"; + String ATTRIBUTE_METADATA_GROUPABLE_NAME = "groupable"; @GraphQLField @GraphQLNonNull @@ -53,4 +54,9 @@ public interface AttributeMetadata { @GraphQLNonNull @GraphQLName(ATTRIBUTE_METADATA_SUPPORTED_AGGREGATIONS_NAME) List supportedAggregations(); + + @GraphQLField + @GraphQLNonNull + @GraphQLName(ATTRIBUTE_METADATA_GROUPABLE_NAME) + boolean groupable(); } diff --git a/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilderTest.java b/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilderTest.java index b30f1613..3f0b584b 100644 --- a/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilderTest.java +++ b/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilderTest.java @@ -46,6 +46,7 @@ void beforeEach() { when(mockModel.displayName()).thenReturn("display name"); when(mockModel.type()).thenReturn(AttributeModelType.STRING); when(mockModel.units()).thenReturn("unit"); + when(mockModel.groupable()).thenReturn(true); when(mockModel.requiresAggregation()).thenReturn(true); when(mockModel.supportedMetricAggregationTypes()) .thenReturn( @@ -76,6 +77,7 @@ void canBuildResponse() { .onlyAggregationsAllowed(true) .supportedAggregations( List.of(MetricAggregationType.SUM, MetricAggregationType.AVG)) + .groupable(true) .build()), this.builder.build(this.models).blockingGet()); } @@ -100,6 +102,7 @@ void filtersAnyAggregationConversionErrors() { .units("unit") .onlyAggregationsAllowed(true) .supportedAggregations(List.of(MetricAggregationType.AVG)) + .groupable(true) .build()), this.builder.build(this.models).blockingGet()); } From b62ab1d98d8e71f04662b39082a59a0323078a6f Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld Date: Tue, 11 Aug 2020 15:05:48 -0700 Subject: [PATCH 011/173] chore: upgrade docker plugin --- build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 8a16f0ad..2067f09a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,8 +2,8 @@ plugins { id("org.hypertrace.repository-plugin") version "0.2.0" id("org.hypertrace.ci-utils-plugin") version "0.1.1" id("org.hypertrace.jacoco-report-plugin") version "0.1.0" apply false - id("org.hypertrace.docker-java-application-plugin") version "0.3.2" apply false - id("org.hypertrace.docker-publish-plugin") version "0.3.2" apply false + id("org.hypertrace.docker-java-application-plugin") version "0.4.0" apply false + id("org.hypertrace.docker-publish-plugin") version "0.4.0" apply false } subprojects { From 06fddc48dee711da55b1d741f28c4cf119741258 Mon Sep 17 00:00:00 2001 From: Adrian Cole Date: Mon, 17 Aug 2020 15:28:46 +0800 Subject: [PATCH 012/173] Locks Java to 11 --- build.gradle.kts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/build.gradle.kts b/build.gradle.kts index 2067f09a..d400eac7 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,4 +8,11 @@ plugins { subprojects { group = "org.hypertrace.core.graphql" + + pluginManager.withPlugin("java") { + configure { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + } } From 40a4cad0277b6fe5a74cc4b3f3e8425901a0704b Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld Date: Mon, 17 Aug 2020 07:41:14 -0700 Subject: [PATCH 013/173] fix: upgrade to non-vulernable grpc --- .snyk | 6 +----- gradle/wrapper/gradle-wrapper.properties | 2 +- .../build.gradle.kts | 14 +++++++------- hypertrace-core-graphql-impl/build.gradle.kts | 2 +- 4 files changed, 10 insertions(+), 14 deletions(-) diff --git a/.snyk b/.snyk index 72e1f159..74b55a48 100644 --- a/.snyk +++ b/.snyk @@ -1,10 +1,6 @@ # Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities. version: v1.14.1 # ignores vulnerabilities until expiry date; change duration by modifying expiry date -ignore: - SNYK-JAVA-IOGRPC-571957: - - '*': - reason: No replacement available - expires: 2020-08-31T00:00:00.000Z +ignore: {} patch: {} diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ac33e994..bca17f36 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.6-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/hypertrace-core-graphql-grpc-utils/build.gradle.kts b/hypertrace-core-graphql-grpc-utils/build.gradle.kts index 8b51c8d3..371c2d2b 100644 --- a/hypertrace-core-graphql-grpc-utils/build.gradle.kts +++ b/hypertrace-core-graphql-grpc-utils/build.gradle.kts @@ -11,14 +11,14 @@ java { dependencies { api("com.google.inject:guice:4.2.3") api("com.graphql-java:graphql-java:14.0") - api("io.grpc:grpc-api:1.30.2") - api("io.grpc:grpc-core:1.30.2") - api("io.grpc:grpc-stub:1.30.2") + api("io.grpc:grpc-api:1.31.1") + api("io.grpc:grpc-core:1.31.1") + api("io.grpc:grpc-stub:1.31.1") api(project(":hypertrace-core-graphql-context")) - implementation("org.hypertrace.core.grpcutils:grpc-context-utils:0.1.3") - implementation("org.hypertrace.core.grpcutils:grpc-client-utils:0.1.3") - implementation("io.grpc:grpc-context:1.30.2") + implementation("org.hypertrace.core.grpcutils:grpc-context-utils:0.1.4") + implementation("org.hypertrace.core.grpcutils:grpc-client-utils:0.1.4") + implementation("io.grpc:grpc-context:1.31.1") implementation("io.reactivex.rxjava3:rxjava:3.0.2") implementation(project(":hypertrace-core-graphql-spi")) @@ -26,7 +26,7 @@ dependencies { testImplementation("org.mockito:mockito-core:3.2.4") testImplementation("org.mockito:mockito-junit-jupiter:3.2.4") - testRuntimeOnly("io.grpc:grpc-netty:1.30.2") + testRuntimeOnly("io.grpc:grpc-netty:1.31.1") } tasks.test { diff --git a/hypertrace-core-graphql-impl/build.gradle.kts b/hypertrace-core-graphql-impl/build.gradle.kts index 8e6e90e7..eb8bb36f 100644 --- a/hypertrace-core-graphql-impl/build.gradle.kts +++ b/hypertrace-core-graphql-impl/build.gradle.kts @@ -27,7 +27,7 @@ dependencies { implementation("org.slf4j:slf4j-api:1.7.3") implementation("com.google.inject:guice:4.2.3") - implementation("io.grpc:grpc-netty:1.30.2") + implementation("io.grpc:grpc-netty:1.31.1") testImplementation("org.junit.jupiter:junit-jupiter:5.5.1") testImplementation("org.mockito:mockito-core:3.2.4") From d083f326d5bb5e9d6200ae5b4e3d07ef606bf2b9 Mon Sep 17 00:00:00 2001 From: SJ <48863181+skjindal93@users.noreply.github.com> Date: Wed, 19 Aug 2020 10:36:58 +0530 Subject: [PATCH 014/173] added id argument as a primitive string argument (#11) * added id argument as a primitive string argument * added deserialization for id argument --- .../deserialization/CommonDeserializationModule.java | 5 +++++ .../core/graphql/common/schema/id/IdArgument.java | 7 +++++++ 2 files changed, 12 insertions(+) create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/id/IdArgument.java diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/CommonDeserializationModule.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/CommonDeserializationModule.java index 1bffe8f5..b0c86728 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/CommonDeserializationModule.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/CommonDeserializationModule.java @@ -6,6 +6,7 @@ import com.google.inject.multibindings.Multibinder; import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeKeyArgument; +import org.hypertrace.core.graphql.common.schema.id.IdArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.page.LimitArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.page.OffsetArgument; import org.hypertrace.core.graphql.deserialization.ArgumentDeserializationConfig; @@ -18,6 +19,10 @@ protected void configure() { Multibinder.newSetBinder(binder(), ArgumentDeserializationConfig.class); deserializationConfigMultibinder.addBinding().to(TimeRangeArgumentDeserializationConfig.class); + deserializationConfigMultibinder + .addBinding() + .toInstance( + ArgumentDeserializationConfig.forPrimitive(IdArgument.ARGUMENT_NAME, IdArgument.class)); deserializationConfigMultibinder .addBinding() .toInstance( diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/id/IdArgument.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/id/IdArgument.java new file mode 100644 index 00000000..3a46ca2b --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/id/IdArgument.java @@ -0,0 +1,7 @@ +package org.hypertrace.core.graphql.common.schema.id; + +import org.hypertrace.core.graphql.deserialization.PrimitiveArgument; + +public interface IdArgument extends PrimitiveArgument { + String ARGUMENT_NAME = "id"; +} From c06ef820b3b430680fa444918af9e029a0c91144 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld Date: Sun, 23 Aug 2020 15:08:31 -0700 Subject: [PATCH 015/173] chore: switch from master to main --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 03109ad4..41a1deb0 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -132,7 +132,7 @@ workflows: filters: branches: only: - - master + - main - package-charts: context: hypertrace-publishing requires: @@ -140,4 +140,4 @@ workflows: filters: branches: only: - - master \ No newline at end of file + - main \ No newline at end of file From afb72331101deeddfd58563909cadebfc9705373 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Fri, 4 Sep 2020 09:33:36 -0700 Subject: [PATCH 016/173] feat: add bounded io scheduler (#13) --- .../build.gradle.kts | 4 -- .../build.gradle.kts | 4 -- .../build.gradle.kts | 4 -- .../build.gradle.kts | 4 -- .../build.gradle.kts | 4 -- .../build.gradle.kts | 4 -- .../build.gradle.kts | 4 -- hypertrace-core-graphql-impl/build.gradle.kts | 5 +- .../core/graphql/impl/GraphQlModule.java | 2 + .../build.gradle.kts | 4 -- .../build.gradle.kts | 10 ++++ .../core/graphql/rx/BoundedIoScheduler.java | 15 ++++++ .../rx/BoundedIoSchedulerProvider.java | 46 +++++++++++++++++++ .../core/graphql/rx/RxUtilModule.java | 15 ++++++ .../build.gradle.kts | 4 -- .../build.gradle.kts | 4 -- .../build.gradle.kts | 4 -- .../service/DefaultGraphQlServiceConfig.java | 10 ++++ .../resources/configs/common/application.conf | 4 +- .../build.gradle.kts | 4 -- hypertrace-core-graphql-spi/build.gradle.kts | 4 -- .../spi/config/GraphQlServiceConfig.java | 2 + .../build.gradle.kts | 4 -- settings.gradle.kts | 1 + 24 files changed, 105 insertions(+), 61 deletions(-) create mode 100644 hypertrace-core-graphql-rx-utils/build.gradle.kts create mode 100644 hypertrace-core-graphql-rx-utils/src/main/java/org/hypertrace/core/graphql/rx/BoundedIoScheduler.java create mode 100644 hypertrace-core-graphql-rx-utils/src/main/java/org/hypertrace/core/graphql/rx/BoundedIoSchedulerProvider.java create mode 100644 hypertrace-core-graphql-rx-utils/src/main/java/org/hypertrace/core/graphql/rx/RxUtilModule.java diff --git a/hypertrace-core-graphql-attribute-scope/build.gradle.kts b/hypertrace-core-graphql-attribute-scope/build.gradle.kts index 00189b2a..c82710d8 100644 --- a/hypertrace-core-graphql-attribute-scope/build.gradle.kts +++ b/hypertrace-core-graphql-attribute-scope/build.gradle.kts @@ -2,10 +2,6 @@ plugins { `java-library` } -java { - sourceCompatibility = JavaVersion.VERSION_11 -} - dependencies { api("com.google.inject:guice:4.2.3") api("io.reactivex.rxjava3:rxjava:3.0.2") diff --git a/hypertrace-core-graphql-attribute-store/build.gradle.kts b/hypertrace-core-graphql-attribute-store/build.gradle.kts index d98f9d6a..3ee30250 100644 --- a/hypertrace-core-graphql-attribute-store/build.gradle.kts +++ b/hypertrace-core-graphql-attribute-store/build.gradle.kts @@ -4,10 +4,6 @@ plugins { id("org.hypertrace.jacoco-report-plugin") } -java { - sourceCompatibility = JavaVersion.VERSION_11 -} - dependencies { api("com.google.inject:guice:4.2.3") api(project(":hypertrace-core-graphql-spi")) diff --git a/hypertrace-core-graphql-common-schema/build.gradle.kts b/hypertrace-core-graphql-common-schema/build.gradle.kts index 8cad312f..ce74225d 100644 --- a/hypertrace-core-graphql-common-schema/build.gradle.kts +++ b/hypertrace-core-graphql-common-schema/build.gradle.kts @@ -4,10 +4,6 @@ plugins { id("org.hypertrace.jacoco-report-plugin") } -java { - sourceCompatibility = JavaVersion.VERSION_11 -} - dependencies { api("com.google.inject:guice:4.2.3") api("com.graphql-java:graphql-java:14.0") diff --git a/hypertrace-core-graphql-context/build.gradle.kts b/hypertrace-core-graphql-context/build.gradle.kts index 35567971..5dced0bc 100644 --- a/hypertrace-core-graphql-context/build.gradle.kts +++ b/hypertrace-core-graphql-context/build.gradle.kts @@ -4,10 +4,6 @@ plugins { id("org.hypertrace.jacoco-report-plugin") } -java { - sourceCompatibility = JavaVersion.VERSION_11 -} - dependencies { api("com.google.inject:guice:4.2.3") api("com.graphql-java:graphql-java:14.0") diff --git a/hypertrace-core-graphql-deserialization/build.gradle.kts b/hypertrace-core-graphql-deserialization/build.gradle.kts index b512b443..78080393 100644 --- a/hypertrace-core-graphql-deserialization/build.gradle.kts +++ b/hypertrace-core-graphql-deserialization/build.gradle.kts @@ -4,10 +4,6 @@ plugins { id("org.hypertrace.jacoco-report-plugin") } -java { - sourceCompatibility = JavaVersion.VERSION_11 -} - dependencies { api("com.google.inject:guice:4.2.3") api("com.fasterxml.jackson.core:jackson-databind:2.11.0") diff --git a/hypertrace-core-graphql-gateway-service-utils/build.gradle.kts b/hypertrace-core-graphql-gateway-service-utils/build.gradle.kts index 057865a7..476c6546 100644 --- a/hypertrace-core-graphql-gateway-service-utils/build.gradle.kts +++ b/hypertrace-core-graphql-gateway-service-utils/build.gradle.kts @@ -4,10 +4,6 @@ plugins { id("org.hypertrace.jacoco-report-plugin") } -java { - sourceCompatibility = JavaVersion.VERSION_11 -} - dependencies { api("com.google.inject:guice:4.2.3") api("org.hypertrace.gateway.service:gateway-service-api:0.1.1") diff --git a/hypertrace-core-graphql-grpc-utils/build.gradle.kts b/hypertrace-core-graphql-grpc-utils/build.gradle.kts index 371c2d2b..8e4cdc64 100644 --- a/hypertrace-core-graphql-grpc-utils/build.gradle.kts +++ b/hypertrace-core-graphql-grpc-utils/build.gradle.kts @@ -4,10 +4,6 @@ plugins { id("org.hypertrace.jacoco-report-plugin") } -java { - sourceCompatibility = JavaVersion.VERSION_11 -} - dependencies { api("com.google.inject:guice:4.2.3") api("com.graphql-java:graphql-java:14.0") diff --git a/hypertrace-core-graphql-impl/build.gradle.kts b/hypertrace-core-graphql-impl/build.gradle.kts index eb8bb36f..79d39c20 100644 --- a/hypertrace-core-graphql-impl/build.gradle.kts +++ b/hypertrace-core-graphql-impl/build.gradle.kts @@ -4,10 +4,6 @@ plugins { id("org.hypertrace.jacoco-report-plugin") } -java { - sourceCompatibility = JavaVersion.VERSION_11 -} - dependencies { api(project(":hypertrace-core-graphql-spi")) api("com.graphql-java-kickstart:graphql-java-servlet:9.1.0") @@ -24,6 +20,7 @@ dependencies { implementation(project(":hypertrace-core-graphql-span-schema")) implementation(project(":hypertrace-core-graphql-trace-schema")) implementation(project(":hypertrace-core-graphql-attribute-scope")) + implementation(project(":hypertrace-core-graphql-rx-utils")) implementation("org.slf4j:slf4j-api:1.7.3") implementation("com.google.inject:guice:4.2.3") diff --git a/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlModule.java b/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlModule.java index 56b040ba..d33eadd9 100644 --- a/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlModule.java +++ b/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlModule.java @@ -8,6 +8,7 @@ import org.hypertrace.core.graphql.context.GraphQlRequestContextModule; import org.hypertrace.core.graphql.deserialization.GraphQlDeserializationRegistryModule; import org.hypertrace.core.graphql.metadata.MetadataSchemaModule; +import org.hypertrace.core.graphql.rx.RxUtilModule; import org.hypertrace.core.graphql.schema.registry.GraphQlSchemaRegistryModule; import org.hypertrace.core.graphql.span.SpanSchemaModule; import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; @@ -44,5 +45,6 @@ protected void configure() { install(new MetadataSchemaModule()); install(new SpanSchemaModule()); install(new TraceSchemaModule()); + install(new RxUtilModule()); } } diff --git a/hypertrace-core-graphql-metadata-schema/build.gradle.kts b/hypertrace-core-graphql-metadata-schema/build.gradle.kts index 5d84eec3..9c003fb8 100644 --- a/hypertrace-core-graphql-metadata-schema/build.gradle.kts +++ b/hypertrace-core-graphql-metadata-schema/build.gradle.kts @@ -4,10 +4,6 @@ plugins { id("org.hypertrace.jacoco-report-plugin") } -java { - sourceCompatibility = JavaVersion.VERSION_11 -} - dependencies { api("com.google.inject:guice:4.2.3") api("com.graphql-java:graphql-java:14.0") diff --git a/hypertrace-core-graphql-rx-utils/build.gradle.kts b/hypertrace-core-graphql-rx-utils/build.gradle.kts new file mode 100644 index 00000000..0d196aef --- /dev/null +++ b/hypertrace-core-graphql-rx-utils/build.gradle.kts @@ -0,0 +1,10 @@ +plugins { + `java-library` +} + +dependencies { + api("io.reactivex.rxjava3:rxjava:3.0.2") + api("com.google.inject:guice:4.2.3") + implementation(project(":hypertrace-core-graphql-spi")) + implementation("com.google.guava:guava:29.0-jre") +} diff --git a/hypertrace-core-graphql-rx-utils/src/main/java/org/hypertrace/core/graphql/rx/BoundedIoScheduler.java b/hypertrace-core-graphql-rx-utils/src/main/java/org/hypertrace/core/graphql/rx/BoundedIoScheduler.java new file mode 100644 index 00000000..f3cbcaf4 --- /dev/null +++ b/hypertrace-core-graphql-rx-utils/src/main/java/org/hypertrace/core/graphql/rx/BoundedIoScheduler.java @@ -0,0 +1,15 @@ +package org.hypertrace.core.graphql.rx; + +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; +import javax.inject.Qualifier; + +@Qualifier +@Target({FIELD, PARAMETER, METHOD}) +@Retention(RUNTIME) +public @interface BoundedIoScheduler {} diff --git a/hypertrace-core-graphql-rx-utils/src/main/java/org/hypertrace/core/graphql/rx/BoundedIoSchedulerProvider.java b/hypertrace-core-graphql-rx-utils/src/main/java/org/hypertrace/core/graphql/rx/BoundedIoSchedulerProvider.java new file mode 100644 index 00000000..e1f91a72 --- /dev/null +++ b/hypertrace-core-graphql-rx-utils/src/main/java/org/hypertrace/core/graphql/rx/BoundedIoSchedulerProvider.java @@ -0,0 +1,46 @@ +package org.hypertrace.core.graphql.rx; + +import com.google.common.util.concurrent.ThreadFactoryBuilder; +import io.reactivex.rxjava3.core.Scheduler; +import io.reactivex.rxjava3.schedulers.Schedulers; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; +import java.util.concurrent.ThreadFactory; +import javax.inject.Inject; +import javax.inject.Provider; +import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; + +/** + * A scheduler using up to a configuration-based number of threads. + * + *

This differs from the default Scheduler.io implementation which uses an unbounded number of + * threads. + */ +class BoundedIoSchedulerProvider implements Provider { + + private final Scheduler scheduler; + private final GraphQlServiceConfig serviceConfig; + + @Inject + BoundedIoSchedulerProvider(GraphQlServiceConfig serviceConfig) { + this.serviceConfig = serviceConfig; + this.scheduler = Schedulers.from(this.buildExecutor()); + } + + @Override + public Scheduler get() { + return this.scheduler; + } + + private Executor buildExecutor() { + return Executors.newFixedThreadPool( + this.serviceConfig.getMaxIoThreads(), this.buildThreadFactory()); + } + + private ThreadFactory buildThreadFactory() { + return new ThreadFactoryBuilder() + .setDaemon(true) + .setNameFormat("rx-bounded-io-scheduler-%d") + .build(); + } +} diff --git a/hypertrace-core-graphql-rx-utils/src/main/java/org/hypertrace/core/graphql/rx/RxUtilModule.java b/hypertrace-core-graphql-rx-utils/src/main/java/org/hypertrace/core/graphql/rx/RxUtilModule.java new file mode 100644 index 00000000..527443e9 --- /dev/null +++ b/hypertrace-core-graphql-rx-utils/src/main/java/org/hypertrace/core/graphql/rx/RxUtilModule.java @@ -0,0 +1,15 @@ +package org.hypertrace.core.graphql.rx; + +import com.google.inject.AbstractModule; +import io.reactivex.rxjava3.core.Scheduler; +import javax.inject.Singleton; + +public class RxUtilModule extends AbstractModule { + @Override + protected void configure() { + bind(Scheduler.class) + .annotatedWith(BoundedIoScheduler.class) + .toProvider(BoundedIoSchedulerProvider.class) + .in(Singleton.class); + } +} diff --git a/hypertrace-core-graphql-schema-registry/build.gradle.kts b/hypertrace-core-graphql-schema-registry/build.gradle.kts index 9bbb91d3..37629dd2 100644 --- a/hypertrace-core-graphql-schema-registry/build.gradle.kts +++ b/hypertrace-core-graphql-schema-registry/build.gradle.kts @@ -4,10 +4,6 @@ plugins { id("org.hypertrace.jacoco-report-plugin") } -java { - sourceCompatibility = JavaVersion.VERSION_11 -} - dependencies { api("com.graphql-java:graphql-java:14.0") diff --git a/hypertrace-core-graphql-schema-utils/build.gradle.kts b/hypertrace-core-graphql-schema-utils/build.gradle.kts index fe5ff59d..7e3572f4 100644 --- a/hypertrace-core-graphql-schema-utils/build.gradle.kts +++ b/hypertrace-core-graphql-schema-utils/build.gradle.kts @@ -4,10 +4,6 @@ plugins { id("org.hypertrace.jacoco-report-plugin") } -java { - sourceCompatibility = JavaVersion.VERSION_11 -} - dependencies { api("com.google.inject:guice:4.2.3") api("com.graphql-java:graphql-java:14.0") diff --git a/hypertrace-core-graphql-service/build.gradle.kts b/hypertrace-core-graphql-service/build.gradle.kts index c1654ae7..4ca8de5b 100644 --- a/hypertrace-core-graphql-service/build.gradle.kts +++ b/hypertrace-core-graphql-service/build.gradle.kts @@ -5,10 +5,6 @@ plugins { id("org.hypertrace.docker-publish-plugin") } -java { - sourceCompatibility = JavaVersion.VERSION_11 -} - dependencies { implementation("com.typesafe:config:1.4.0") implementation("org.hypertrace.core.serviceframework:platform-service-framework:0.1.3") diff --git a/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java index d034180a..56ed6c7a 100644 --- a/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java +++ b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java @@ -16,18 +16,22 @@ class DefaultGraphQlServiceConfig implements GraphQlServiceConfig { private static final String DEFAULT_TENANT_ID = "defaultTenantId"; + private static final String MAX_IO_THREADS_PROPERTY = "threads.io.max"; + private static final String ATTRIBUTE_SERVICE_HOST_PROPERTY = "attribute.service.host"; private static final String ATTRIBUTE_SERVICE_PORT_PROPERTY = "attribute.service.port"; private static final String GATEWAY_SERVICE_HOST_PROPERTY = "gateway.service.host"; private static final String GATEWAY_SERVICE_PORT_PROPERTY = "gateway.service.port"; + private final String serviceName; private final int servicePort; private final String graphqlUrlPath; private final boolean asyncServlet; private final boolean corsEnabled; private final Optional defaultTenantId; + private final int maxIoThreads; private final String attributeServiceHost; private final int attributeServicePort; private final String gatewayServiceHost; @@ -40,6 +44,7 @@ class DefaultGraphQlServiceConfig implements GraphQlServiceConfig { this.asyncServlet = untypedConfig.getBoolean(GRAPHQL_ASYNC_SERVLET); this.corsEnabled = untypedConfig.getBoolean(GRAPHQL_CORS_ENABLED); this.defaultTenantId = optionallyGet(() -> untypedConfig.getString(DEFAULT_TENANT_ID)); + this.maxIoThreads = untypedConfig.getInt(MAX_IO_THREADS_PROPERTY); this.attributeServiceHost = untypedConfig.getString(ATTRIBUTE_SERVICE_HOST_PROPERTY); this.attributeServicePort = untypedConfig.getInt(ATTRIBUTE_SERVICE_PORT_PROPERTY); @@ -77,6 +82,11 @@ public Optional getDefaultTenantId() { return this.defaultTenantId; } + @Override + public int getMaxIoThreads() { + return maxIoThreads; + } + @Override public String getAttributeServiceHost() { return this.attributeServiceHost; diff --git a/hypertrace-core-graphql-service/src/main/resources/configs/common/application.conf b/hypertrace-core-graphql-service/src/main/resources/configs/common/application.conf index 01c1a4e2..eddee1c9 100644 --- a/hypertrace-core-graphql-service/src/main/resources/configs/common/application.conf +++ b/hypertrace-core-graphql-service/src/main/resources/configs/common/application.conf @@ -7,6 +7,8 @@ graphql.urlPath = /graphql graphql.asyncServlet = true graphql.corsEnabled = true +threads.io.max = 10 + attribute.service = { host = localhost port = 9012 @@ -15,4 +17,4 @@ attribute.service = { gateway.service = { host = localhost port = 50071 -} \ No newline at end of file +} diff --git a/hypertrace-core-graphql-span-schema/build.gradle.kts b/hypertrace-core-graphql-span-schema/build.gradle.kts index 3ad2f32b..6e60242e 100644 --- a/hypertrace-core-graphql-span-schema/build.gradle.kts +++ b/hypertrace-core-graphql-span-schema/build.gradle.kts @@ -2,10 +2,6 @@ plugins { `java-library` } -java { - sourceCompatibility = JavaVersion.VERSION_11 -} - dependencies { api("com.google.inject:guice:4.2.3") api("com.graphql-java:graphql-java:14.0") diff --git a/hypertrace-core-graphql-spi/build.gradle.kts b/hypertrace-core-graphql-spi/build.gradle.kts index 73ef9e58..6890f6bd 100644 --- a/hypertrace-core-graphql-spi/build.gradle.kts +++ b/hypertrace-core-graphql-spi/build.gradle.kts @@ -2,10 +2,6 @@ plugins { `java-library` } -java { - sourceCompatibility = JavaVersion.VERSION_11 -} - dependencies { api("com.graphql-java:graphql-java:14.0") api("com.google.code.findbugs:jsr305:3.0.2") diff --git a/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java b/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java index a6acd45a..fd4f0643 100644 --- a/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java +++ b/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java @@ -16,6 +16,8 @@ public interface GraphQlServiceConfig { Optional getDefaultTenantId(); + int getMaxIoThreads(); + String getAttributeServiceHost(); int getAttributeServicePort(); diff --git a/hypertrace-core-graphql-trace-schema/build.gradle.kts b/hypertrace-core-graphql-trace-schema/build.gradle.kts index 27bd07a5..8cdd01a8 100644 --- a/hypertrace-core-graphql-trace-schema/build.gradle.kts +++ b/hypertrace-core-graphql-trace-schema/build.gradle.kts @@ -2,10 +2,6 @@ plugins { `java-library` } -java { - sourceCompatibility = JavaVersion.VERSION_11 -} - dependencies { api("com.google.inject:guice:4.2.3") api("com.graphql-java:graphql-java:14.0") diff --git a/settings.gradle.kts b/settings.gradle.kts index d41f761f..ec739e9c 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -27,3 +27,4 @@ include(":hypertrace-core-graphql-metadata-schema") include(":hypertrace-core-graphql-span-schema") include(":hypertrace-core-graphql-trace-schema") include(":hypertrace-core-graphql-attribute-scope") +include(":hypertrace-core-graphql-rx-utils") From 4ec17f79245cf8784cdb1d5b08ed52da6e422d7c Mon Sep 17 00:00:00 2001 From: Samarth Gupta <64777291+samarth-gupta-traceable@users.noreply.github.com> Date: Wed, 9 Sep 2020 15:09:59 +0530 Subject: [PATCH 017/173] update serviceframework version (#14) * update servicegramework version * Fix Snyk errors --- hypertrace-core-graphql-service/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hypertrace-core-graphql-service/build.gradle.kts b/hypertrace-core-graphql-service/build.gradle.kts index 4ca8de5b..8c9b3699 100644 --- a/hypertrace-core-graphql-service/build.gradle.kts +++ b/hypertrace-core-graphql-service/build.gradle.kts @@ -7,7 +7,7 @@ plugins { dependencies { implementation("com.typesafe:config:1.4.0") - implementation("org.hypertrace.core.serviceframework:platform-service-framework:0.1.3") + implementation("org.hypertrace.core.serviceframework:platform-service-framework:0.1.13") implementation("org.slf4j:slf4j-api:1.7.30") implementation("org.eclipse.jetty:jetty-server:9.4.30.v20200611") From 2ad528d40f0c395ed1ba3ea21c88c433766b9862 Mon Sep 17 00:00:00 2001 From: Tim Mwangi <44785807+tim-mwangi@users.noreply.github.com> Date: Mon, 28 Sep 2020 07:11:18 -0700 Subject: [PATCH 018/173] fix: add support for string array attribute type (#15) * fix: add support for string array attribute type * add some unit tests * Change the expecteds to the types directly instead of creating Singles Co-authored-by: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> * Need to add these to the batch commit Co-authored-by: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> --- .../attributes/AttributeModelTranslator.java | 3 +- .../attributes/AttributeModelType.java | 3 +- .../AttributeModelTranslatorTest.java | 35 +++++++++++++++++++ .../schema/attributes/AttributeType.java | 3 +- .../attributes/AttributeTypeConverter.java | 2 ++ .../AttributeTypeConverterTest.java | 30 ++++++++++++++++ 6 files changed, 73 insertions(+), 3 deletions(-) create mode 100644 hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeTypeConverterTest.java diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java index 0b4e467c..a8e82047 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java @@ -81,10 +81,11 @@ private AttributeModelType convertType(AttributeKind kind) { return AttributeModelType.TIMESTAMP; case TYPE_STRING_MAP: return AttributeModelType.STRING_MAP; + case TYPE_STRING_ARRAY: + return AttributeModelType.STRING_ARRAY; case KIND_UNDEFINED: case UNRECOGNIZED: case TYPE_BYTES: - case TYPE_STRING_ARRAY: case TYPE_INT64_ARRAY: case TYPE_DOUBLE_ARRAY: case TYPE_BOOL_ARRAY: diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelType.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelType.java index ca699ef4..a51001db 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelType.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelType.java @@ -6,5 +6,6 @@ public enum AttributeModelType { LONG, DOUBLE, TIMESTAMP, - STRING_MAP + STRING_MAP, + STRING_ARRAY } diff --git a/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslatorTest.java b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslatorTest.java index 8d97aee1..f039bb60 100644 --- a/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslatorTest.java +++ b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslatorTest.java @@ -63,4 +63,39 @@ void returnsEmptyIfUnsupportedTranslation() { .build(); assertEquals(Optional.empty(), this.translator.translate(unsupportedMetadata)); } + + @Test + void testStringArrayAttributeKindTranslation() { + this.translator = new AttributeModelTranslator(); + this.metadata = + AttributeMetadata.newBuilder() + .setId("id") + .setScope(AttributeScope.API) + .setKey("key") + .setDisplayName("display name") + .setValueKind(AttributeKind.TYPE_STRING_ARRAY) + .setUnit("unit") + .setOnlyAggregationsAllowed(false) + .addAllSupportedAggregations(List.of(AggregateFunction.DISTINCT_COUNT, AggregateFunction.AVGRATE)) + .setGroupable(false) + .build(); + + this.expectedModel = + DefaultAttributeModel.builder() + .id("id") + .scope(AttributeModelScope.API) + .key("key") + .displayName("display name") + .type(AttributeModelType.STRING_ARRAY) + .units("unit") + .requiresAggregation(false) + .supportedMetricAggregationTypes( + List.of( + AttributeModelMetricAggregationType.DISTINCT_COUNT, + AttributeModelMetricAggregationType.AVGRATE)) + .groupable(false) + .build(); + + assertEquals(Optional.of(this.expectedModel), this.translator.translate(this.metadata)); + } } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeType.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeType.java index cdb6f74e..63cc05b1 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeType.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeType.java @@ -9,7 +9,8 @@ public enum AttributeType { LONG, DOUBLE, TIMESTAMP, - STRING_MAP; + STRING_MAP, + STRING_ARRAY; public static final String TYPE_NAME = "AttributeType"; } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeTypeConverter.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeTypeConverter.java index 9d2f8672..43fe3ad6 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeTypeConverter.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeTypeConverter.java @@ -23,6 +23,8 @@ public Single convert(AttributeModelType type) { return Single.just(AttributeType.TIMESTAMP); case STRING_MAP: return Single.just(AttributeType.STRING_MAP); + case STRING_ARRAY: + return Single.just(AttributeType.STRING_ARRAY); default: return Single.error( new UnknownFormatConversionException( diff --git a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeTypeConverterTest.java b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeTypeConverterTest.java new file mode 100644 index 00000000..eaea834b --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeTypeConverterTest.java @@ -0,0 +1,30 @@ +package org.hypertrace.core.graphql.common.utils.attributes; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import io.reactivex.rxjava3.core.Single; +import org.hypertrace.core.graphql.attributes.AttributeModelType; +import org.hypertrace.core.graphql.common.schema.attributes.AttributeType; +import org.junit.jupiter.api.Test; + +public class AttributeTypeConverterTest { + @Test + void testConvert() { + AttributeTypeConverter attributeTypeConverter = new AttributeTypeConverter(); + + assertEquals(AttributeType.STRING, + attributeTypeConverter.convert(AttributeModelType.STRING).blockingGet()); + assertEquals(AttributeType.BOOLEAN, + attributeTypeConverter.convert(AttributeModelType.BOOLEAN).blockingGet()); + assertEquals(AttributeType.LONG, + attributeTypeConverter.convert(AttributeModelType.LONG).blockingGet()); + assertEquals(AttributeType.DOUBLE, + attributeTypeConverter.convert(AttributeModelType.DOUBLE).blockingGet()); + assertEquals(AttributeType.TIMESTAMP, + attributeTypeConverter.convert(AttributeModelType.TIMESTAMP).blockingGet()); + assertEquals(AttributeType.STRING_MAP, + attributeTypeConverter.convert(AttributeModelType.STRING_MAP).blockingGet()); + assertEquals(AttributeType.STRING_ARRAY, + attributeTypeConverter.convert(AttributeModelType.STRING_ARRAY).blockingGet()); + } +} From c4d4d6b1e72a9c960ad4cf3b8c4997a0d9b6f5bf Mon Sep 17 00:00:00 2001 From: Tim Mwangi <44785807+tim-mwangi@users.noreply.github.com> Date: Tue, 13 Oct 2020 05:58:01 -0700 Subject: [PATCH 019/173] chore: update platform service framework (#17) to fix snyk issue --- hypertrace-core-graphql-service/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hypertrace-core-graphql-service/build.gradle.kts b/hypertrace-core-graphql-service/build.gradle.kts index 8c9b3699..333ce070 100644 --- a/hypertrace-core-graphql-service/build.gradle.kts +++ b/hypertrace-core-graphql-service/build.gradle.kts @@ -7,7 +7,7 @@ plugins { dependencies { implementation("com.typesafe:config:1.4.0") - implementation("org.hypertrace.core.serviceframework:platform-service-framework:0.1.13") + implementation("org.hypertrace.core.serviceframework:platform-service-framework:0.1.15") implementation("org.slf4j:slf4j-api:1.7.30") implementation("org.eclipse.jetty:jetty-server:9.4.30.v20200611") From 1f5700b1b4996994718059d70e5307d33768ab8c Mon Sep 17 00:00:00 2001 From: Tim Mwangi <44785807+tim-mwangi@users.noreply.github.com> Date: Tue, 13 Oct 2020 07:41:13 -0700 Subject: [PATCH 020/173] fix: NPE due to service name getter override (#18) First observed after updating platform service framework dependency --- .../org/hypertrace/core/graphql/service/GraphQlService.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/GraphQlService.java b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/GraphQlService.java index 6c335767..cc8579c5 100644 --- a/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/GraphQlService.java +++ b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/GraphQlService.java @@ -92,9 +92,4 @@ protected void doStop() { public boolean healthCheck() { return true; } - - @Override - public String getServiceName() { - return this.graphQlServiceConfig.getServiceName(); - } } From fb691181be4e35f1fe3e6161965e1a87a52a1ab4 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Wed, 14 Oct 2020 06:41:43 -0700 Subject: [PATCH 021/173] chore: use gradle platforms to share versions (#16) * chore: example using gradle platforms to share versions * chore: move all versions to platform manifests * chore: share platform across all subprojects * chore: explicitly add platform for compileOnly --- build.gradle.kts | 10 ++++++ .../build.gradle.kts | 4 +-- .../build.gradle.kts | 18 +++++----- .../build.gradle.kts | 18 +++++----- .../build.gradle.kts | 12 +++---- .../build.gradle.kts | 20 +++++------ .../build.gradle.kts | 12 +++---- .../build.gradle.kts | 26 +++++++------- hypertrace-core-graphql-impl/build.gradle.kts | 15 ++++---- .../build.gradle.kts | 20 +++++------ .../build.gradle.kts | 34 +++++++++++++++++++ .../build.gradle.kts | 6 ++-- .../build.gradle.kts | 14 ++++---- .../build.gradle.kts | 14 ++++---- .../build.gradle.kts | 10 +++--- .../build.gradle.kts | 18 +++++----- hypertrace-core-graphql-spi/build.gradle.kts | 6 ++-- .../build.gradle.kts | 11 ++++++ .../build.gradle.kts | 18 +++++----- settings.gradle.kts | 2 ++ 20 files changed, 174 insertions(+), 114 deletions(-) create mode 100644 hypertrace-core-graphql-platform/build.gradle.kts create mode 100644 hypertrace-core-graphql-test-platform/build.gradle.kts diff --git a/build.gradle.kts b/build.gradle.kts index d400eac7..017ce639 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -15,4 +15,14 @@ subprojects { targetCompatibility = JavaVersion.VERSION_11 } } + + pluginManager.withPlugin("java-library") { + + dependencies { + "api"(platform(project(":hypertrace-core-graphql-platform"))) + "annotationProcessor"(platform(project(":hypertrace-core-graphql-platform"))) + "testImplementation"(platform(project(":hypertrace-core-graphql-test-platform"))) + "compileOnly"(platform(project(":hypertrace-core-graphql-platform"))) + } + } } diff --git a/hypertrace-core-graphql-attribute-scope/build.gradle.kts b/hypertrace-core-graphql-attribute-scope/build.gradle.kts index c82710d8..e9974d55 100644 --- a/hypertrace-core-graphql-attribute-scope/build.gradle.kts +++ b/hypertrace-core-graphql-attribute-scope/build.gradle.kts @@ -3,8 +3,8 @@ plugins { } dependencies { - api("com.google.inject:guice:4.2.3") - api("io.reactivex.rxjava3:rxjava:3.0.2") + api("com.google.inject:guice") + api("io.reactivex.rxjava3:rxjava") api(project(":hypertrace-core-graphql-attribute-store")) api(project(":hypertrace-core-graphql-common-schema")) } diff --git a/hypertrace-core-graphql-attribute-store/build.gradle.kts b/hypertrace-core-graphql-attribute-store/build.gradle.kts index 3ee30250..46c4fbe1 100644 --- a/hypertrace-core-graphql-attribute-store/build.gradle.kts +++ b/hypertrace-core-graphql-attribute-store/build.gradle.kts @@ -5,23 +5,23 @@ plugins { } dependencies { - api("com.google.inject:guice:4.2.3") + api("com.google.inject:guice") api(project(":hypertrace-core-graphql-spi")) api(project(":hypertrace-core-graphql-context")) - implementation("org.slf4j:slf4j-api:1.7.3") - implementation("io.reactivex.rxjava3:rxjava:3.0.2") + implementation("org.slf4j:slf4j-api") + implementation("io.reactivex.rxjava3:rxjava") implementation("com.google.guava:guava:29.0-jre") - implementation("org.hypertrace.core.attribute.service:attribute-service-api:0.1.9") + implementation("org.hypertrace.core.attribute.service:attribute-service-api") implementation(project(":hypertrace-core-graphql-grpc-utils")) - annotationProcessor("org.projectlombok:lombok:1.18.12") - compileOnly("org.projectlombok:lombok:1.18.12") + annotationProcessor("org.projectlombok:lombok") + compileOnly("org.projectlombok:lombok") - testImplementation("org.junit.jupiter:junit-jupiter:5.5.1") - testImplementation("org.mockito:mockito-core:3.2.4") - testImplementation("org.mockito:mockito-junit-jupiter:3.2.4") + testImplementation("org.junit.jupiter:junit-jupiter") + testImplementation("org.mockito:mockito-core") + testImplementation("org.mockito:mockito-junit-jupiter") } tasks.test { diff --git a/hypertrace-core-graphql-common-schema/build.gradle.kts b/hypertrace-core-graphql-common-schema/build.gradle.kts index ce74225d..6ae5ef20 100644 --- a/hypertrace-core-graphql-common-schema/build.gradle.kts +++ b/hypertrace-core-graphql-common-schema/build.gradle.kts @@ -5,21 +5,21 @@ plugins { } dependencies { - api("com.google.inject:guice:4.2.3") - api("com.graphql-java:graphql-java:14.0") + api("com.google.inject:guice") + api("com.graphql-java:graphql-java") api(project(":hypertrace-core-graphql-attribute-store")) api(project(":hypertrace-core-graphql-context")) - api("io.reactivex.rxjava3:rxjava:3.0.2") - api("io.github.graphql-java:graphql-java-annotations:8.0") + api("io.reactivex.rxjava3:rxjava") + api("io.github.graphql-java:graphql-java-annotations") - annotationProcessor("org.projectlombok:lombok:1.18.12") - compileOnly("org.projectlombok:lombok:1.18.12") + annotationProcessor("org.projectlombok:lombok") + compileOnly("org.projectlombok:lombok") implementation(project(":hypertrace-core-graphql-deserialization")) implementation(project(":hypertrace-core-graphql-schema-utils")) - testImplementation("org.junit.jupiter:junit-jupiter:5.5.1") - testImplementation("org.mockito:mockito-core:3.2.4") - testImplementation("org.mockito:mockito-junit-jupiter:3.2.4") + testImplementation("org.junit.jupiter:junit-jupiter") + testImplementation("org.mockito:mockito-core") + testImplementation("org.mockito:mockito-junit-jupiter") } tasks.test { diff --git a/hypertrace-core-graphql-context/build.gradle.kts b/hypertrace-core-graphql-context/build.gradle.kts index 5dced0bc..06a52237 100644 --- a/hypertrace-core-graphql-context/build.gradle.kts +++ b/hypertrace-core-graphql-context/build.gradle.kts @@ -5,15 +5,15 @@ plugins { } dependencies { - api("com.google.inject:guice:4.2.3") - api("com.graphql-java:graphql-java:14.0") - api("com.graphql-java-kickstart:graphql-java-servlet:9.1.0") + api("com.google.inject:guice") + api("com.graphql-java:graphql-java") + api("com.graphql-java-kickstart:graphql-java-servlet") implementation(project(":hypertrace-core-graphql-spi")) - testImplementation("org.junit.jupiter:junit-jupiter:5.5.1") - testImplementation("org.mockito:mockito-core:3.2.4") - testImplementation("org.mockito:mockito-junit-jupiter:3.2.4") + testImplementation("org.junit.jupiter:junit-jupiter") + testImplementation("org.mockito:mockito-core") + testImplementation("org.mockito:mockito-junit-jupiter") } tasks.test { diff --git a/hypertrace-core-graphql-deserialization/build.gradle.kts b/hypertrace-core-graphql-deserialization/build.gradle.kts index 78080393..2165b50c 100644 --- a/hypertrace-core-graphql-deserialization/build.gradle.kts +++ b/hypertrace-core-graphql-deserialization/build.gradle.kts @@ -5,19 +5,19 @@ plugins { } dependencies { - api("com.google.inject:guice:4.2.3") - api("com.fasterxml.jackson.core:jackson-databind:2.11.0") - api("com.graphql-java:graphql-java:14.0") + api("com.google.inject:guice") + api("com.fasterxml.jackson.core:jackson-databind") + api("com.graphql-java:graphql-java") - annotationProcessor("org.projectlombok:lombok:1.18.12") - compileOnly("org.projectlombok:lombok:1.18.12") + annotationProcessor("org.projectlombok:lombok") + compileOnly("org.projectlombok:lombok") - implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.0") - implementation("org.slf4j:slf4j-api:1.7.3") + implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310") + implementation("org.slf4j:slf4j-api") - testImplementation("org.junit.jupiter:junit-jupiter:5.5.1") - testImplementation("org.mockito:mockito-core:3.2.4") - testImplementation("org.mockito:mockito-junit-jupiter:3.2.4") + testImplementation("org.junit.jupiter:junit-jupiter") + testImplementation("org.mockito:mockito-core") + testImplementation("org.mockito:mockito-junit-jupiter") } tasks.test { diff --git a/hypertrace-core-graphql-gateway-service-utils/build.gradle.kts b/hypertrace-core-graphql-gateway-service-utils/build.gradle.kts index 476c6546..7c93ca31 100644 --- a/hypertrace-core-graphql-gateway-service-utils/build.gradle.kts +++ b/hypertrace-core-graphql-gateway-service-utils/build.gradle.kts @@ -5,15 +5,15 @@ plugins { } dependencies { - api("com.google.inject:guice:4.2.3") - api("org.hypertrace.gateway.service:gateway-service-api:0.1.1") + api("com.google.inject:guice") + api("org.hypertrace.gateway.service:gateway-service-api") api(project(":hypertrace-core-graphql-attribute-store")) - api("io.reactivex.rxjava3:rxjava:3.0.2") + api("io.reactivex.rxjava3:rxjava") api(project(":hypertrace-core-graphql-common-schema")) - testImplementation("org.junit.jupiter:junit-jupiter:5.5.1") - testImplementation("org.mockito:mockito-core:3.2.4") - testImplementation("org.mockito:mockito-junit-jupiter:3.2.4") + testImplementation("org.junit.jupiter:junit-jupiter") + testImplementation("org.mockito:mockito-core") + testImplementation("org.mockito:mockito-junit-jupiter") } tasks.test { diff --git a/hypertrace-core-graphql-grpc-utils/build.gradle.kts b/hypertrace-core-graphql-grpc-utils/build.gradle.kts index 8e4cdc64..2ba7999a 100644 --- a/hypertrace-core-graphql-grpc-utils/build.gradle.kts +++ b/hypertrace-core-graphql-grpc-utils/build.gradle.kts @@ -5,24 +5,24 @@ plugins { } dependencies { - api("com.google.inject:guice:4.2.3") - api("com.graphql-java:graphql-java:14.0") - api("io.grpc:grpc-api:1.31.1") - api("io.grpc:grpc-core:1.31.1") - api("io.grpc:grpc-stub:1.31.1") + api("com.google.inject:guice") + api("com.graphql-java:graphql-java") + api("io.grpc:grpc-api") + api("io.grpc:grpc-core") + api("io.grpc:grpc-stub") api(project(":hypertrace-core-graphql-context")) - implementation("org.hypertrace.core.grpcutils:grpc-context-utils:0.1.4") - implementation("org.hypertrace.core.grpcutils:grpc-client-utils:0.1.4") - implementation("io.grpc:grpc-context:1.31.1") - implementation("io.reactivex.rxjava3:rxjava:3.0.2") + implementation("org.hypertrace.core.grpcutils:grpc-context-utils") + implementation("org.hypertrace.core.grpcutils:grpc-client-utils") + implementation("io.grpc:grpc-context") + implementation("io.reactivex.rxjava3:rxjava") implementation(project(":hypertrace-core-graphql-spi")) - testImplementation("org.junit.jupiter:junit-jupiter:5.5.1") - testImplementation("org.mockito:mockito-core:3.2.4") - testImplementation("org.mockito:mockito-junit-jupiter:3.2.4") + testImplementation("org.junit.jupiter:junit-jupiter") + testImplementation("org.mockito:mockito-core") + testImplementation("org.mockito:mockito-junit-jupiter") - testRuntimeOnly("io.grpc:grpc-netty:1.31.1") + testRuntimeOnly("io.grpc:grpc-netty") } tasks.test { diff --git a/hypertrace-core-graphql-impl/build.gradle.kts b/hypertrace-core-graphql-impl/build.gradle.kts index 79d39c20..33c05e48 100644 --- a/hypertrace-core-graphql-impl/build.gradle.kts +++ b/hypertrace-core-graphql-impl/build.gradle.kts @@ -6,7 +6,7 @@ plugins { dependencies { api(project(":hypertrace-core-graphql-spi")) - api("com.graphql-java-kickstart:graphql-java-servlet:9.1.0") + api("com.graphql-java-kickstart:graphql-java-servlet") implementation(project(":hypertrace-core-graphql-schema-registry")) implementation(project(":hypertrace-core-graphql-context")) @@ -22,13 +22,14 @@ dependencies { implementation(project(":hypertrace-core-graphql-attribute-scope")) implementation(project(":hypertrace-core-graphql-rx-utils")) - implementation("org.slf4j:slf4j-api:1.7.3") - implementation("com.google.inject:guice:4.2.3") - implementation("io.grpc:grpc-netty:1.31.1") + implementation("org.slf4j:slf4j-api") + implementation("com.google.inject:guice") - testImplementation("org.junit.jupiter:junit-jupiter:5.5.1") - testImplementation("org.mockito:mockito-core:3.2.4") - testImplementation("org.mockito:mockito-junit-jupiter:3.2.4") + runtimeOnly("io.grpc:grpc-netty") + + testImplementation("org.junit.jupiter:junit-jupiter") + testImplementation("org.mockito:mockito-core") + testImplementation("org.mockito:mockito-junit-jupiter") } tasks.test { diff --git a/hypertrace-core-graphql-metadata-schema/build.gradle.kts b/hypertrace-core-graphql-metadata-schema/build.gradle.kts index 9c003fb8..970c2f1f 100644 --- a/hypertrace-core-graphql-metadata-schema/build.gradle.kts +++ b/hypertrace-core-graphql-metadata-schema/build.gradle.kts @@ -5,23 +5,23 @@ plugins { } dependencies { - api("com.google.inject:guice:4.2.3") - api("com.graphql-java:graphql-java:14.0") + api("com.google.inject:guice") + api("com.graphql-java:graphql-java") api(project(":hypertrace-core-graphql-spi")) - api("io.github.graphql-java:graphql-java-annotations:8.0") + api("io.github.graphql-java:graphql-java-annotations") - annotationProcessor("org.projectlombok:lombok:1.18.12") - compileOnly("org.projectlombok:lombok:1.18.12") + annotationProcessor("org.projectlombok:lombok") + compileOnly("org.projectlombok:lombok") - implementation("org.slf4j:slf4j-api:1.7.3") - implementation("io.reactivex.rxjava3:rxjava:3.0.2") + implementation("org.slf4j:slf4j-api") + implementation("io.reactivex.rxjava3:rxjava") implementation(project(":hypertrace-core-graphql-context")) implementation(project(":hypertrace-core-graphql-common-schema")) implementation(project(":hypertrace-core-graphql-attribute-store")) - testImplementation("org.junit.jupiter:junit-jupiter:5.5.1") - testImplementation("org.mockito:mockito-core:3.2.4") - testImplementation("org.mockito:mockito-junit-jupiter:3.2.4") + testImplementation("org.junit.jupiter:junit-jupiter") + testImplementation("org.mockito:mockito-core") + testImplementation("org.mockito:mockito-junit-jupiter") } tasks.test { diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts new file mode 100644 index 00000000..f015b347 --- /dev/null +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -0,0 +1,34 @@ +plugins { + `java-platform` +} + +dependencies { + constraints { + + api("org.hypertrace.core.grpcutils:grpc-context-utils:0.3.0") + api("org.hypertrace.core.grpcutils:grpc-client-utils:0.3.0") + api("org.hypertrace.gateway.service:gateway-service-api:0.1.1") + api("org.hypertrace.core.attribute.service:attribute-service-api:0.4.3") + + api("com.google.inject:guice:4.2.3") + api("com.graphql-java:graphql-java:14.0") + api("io.github.graphql-java:graphql-java-annotations:8.0") + api("org.slf4j:slf4j-api:1.7.3") + api("io.reactivex.rxjava3:rxjava:3.0.2") + api("com.google.protobuf:protobuf-java-util:3.11.4") + api("org.projectlombok:lombok:1.18.12") + api("com.google.code.findbugs:jsr305:3.0.2") + api("com.typesafe:config:1.4.0") + api("com.google.guava:guava:29.0-jre") + api("com.graphql-java-kickstart:graphql-java-servlet:9.1.0") + api("io.grpc:grpc-api:1.32.1") + api("io.grpc:grpc-core:1.32.1") + api("io.grpc:grpc-stub:1.32.1") + api("io.grpc:grpc-context:1.32.1") + api("com.fasterxml.jackson.core:jackson-databind:2.11.0") + api("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.0") + + runtime("org.apache.logging.log4j:log4j-slf4j-impl:2.13.3") + runtime("io.grpc:grpc-netty:1.32.1") + } +} \ No newline at end of file diff --git a/hypertrace-core-graphql-rx-utils/build.gradle.kts b/hypertrace-core-graphql-rx-utils/build.gradle.kts index 0d196aef..6c0f13de 100644 --- a/hypertrace-core-graphql-rx-utils/build.gradle.kts +++ b/hypertrace-core-graphql-rx-utils/build.gradle.kts @@ -3,8 +3,8 @@ plugins { } dependencies { - api("io.reactivex.rxjava3:rxjava:3.0.2") - api("com.google.inject:guice:4.2.3") + api("io.reactivex.rxjava3:rxjava") + api("com.google.inject:guice") implementation(project(":hypertrace-core-graphql-spi")) - implementation("com.google.guava:guava:29.0-jre") + implementation("com.google.guava:guava") } diff --git a/hypertrace-core-graphql-schema-registry/build.gradle.kts b/hypertrace-core-graphql-schema-registry/build.gradle.kts index 37629dd2..b34bbc06 100644 --- a/hypertrace-core-graphql-schema-registry/build.gradle.kts +++ b/hypertrace-core-graphql-schema-registry/build.gradle.kts @@ -5,17 +5,17 @@ plugins { } dependencies { - api("com.graphql-java:graphql-java:14.0") + api("com.graphql-java:graphql-java") - implementation("org.slf4j:slf4j-api:1.7.3") - implementation("com.google.inject:guice:4.2.3") + implementation("org.slf4j:slf4j-api") + implementation("com.google.inject:guice") implementation(project(":hypertrace-core-graphql-spi")) - implementation("io.github.graphql-java:graphql-java-annotations:8.0") + implementation("io.github.graphql-java:graphql-java-annotations") - testImplementation("org.junit.jupiter:junit-jupiter:5.5.1") - testImplementation("org.mockito:mockito-core:3.2.4") - testImplementation("org.mockito:mockito-junit-jupiter:3.2.4") + testImplementation("org.junit.jupiter:junit-jupiter") + testImplementation("org.mockito:mockito-core") + testImplementation("org.mockito:mockito-junit-jupiter") } tasks.test { diff --git a/hypertrace-core-graphql-schema-utils/build.gradle.kts b/hypertrace-core-graphql-schema-utils/build.gradle.kts index 7e3572f4..f0987561 100644 --- a/hypertrace-core-graphql-schema-utils/build.gradle.kts +++ b/hypertrace-core-graphql-schema-utils/build.gradle.kts @@ -5,15 +5,15 @@ plugins { } dependencies { - api("com.google.inject:guice:4.2.3") - api("com.graphql-java:graphql-java:14.0") + api("com.google.inject:guice") + api("com.graphql-java:graphql-java") - annotationProcessor("org.projectlombok:lombok:1.18.12") - compileOnly("org.projectlombok:lombok:1.18.12") + annotationProcessor("org.projectlombok:lombok") + compileOnly("org.projectlombok:lombok") - testImplementation("org.junit.jupiter:junit-jupiter:5.5.1") - testImplementation("org.mockito:mockito-core:3.2.4") - testImplementation("org.mockito:mockito-junit-jupiter:3.2.4") + testImplementation("org.junit.jupiter:junit-jupiter") + testImplementation("org.mockito:mockito-core") + testImplementation("org.mockito:mockito-junit-jupiter") } tasks.test { diff --git a/hypertrace-core-graphql-service/build.gradle.kts b/hypertrace-core-graphql-service/build.gradle.kts index 333ce070..bc94135a 100644 --- a/hypertrace-core-graphql-service/build.gradle.kts +++ b/hypertrace-core-graphql-service/build.gradle.kts @@ -6,19 +6,21 @@ plugins { } dependencies { - implementation("com.typesafe:config:1.4.0") + implementation(platform(project(":hypertrace-core-graphql-platform"))) + + implementation("com.typesafe:config") implementation("org.hypertrace.core.serviceframework:platform-service-framework:0.1.15") - implementation("org.slf4j:slf4j-api:1.7.30") + implementation("org.slf4j:slf4j-api") implementation("org.eclipse.jetty:jetty-server:9.4.30.v20200611") implementation("org.eclipse.jetty:jetty-servlet:9.4.30.v20200611") implementation("org.eclipse.jetty:jetty-servlets:9.4.30.v20200611") - implementation("com.graphql-java-kickstart:graphql-java-servlet:9.1.0") + implementation("com.graphql-java-kickstart:graphql-java-servlet") implementation(project(":hypertrace-core-graphql-impl")) implementation(project(":hypertrace-core-graphql-spi")) - runtimeOnly("org.apache.logging.log4j:log4j-slf4j-impl:2.13.3") + runtimeOnly("org.apache.logging.log4j:log4j-slf4j-impl") } application { diff --git a/hypertrace-core-graphql-span-schema/build.gradle.kts b/hypertrace-core-graphql-span-schema/build.gradle.kts index 6e60242e..1c3544c8 100644 --- a/hypertrace-core-graphql-span-schema/build.gradle.kts +++ b/hypertrace-core-graphql-span-schema/build.gradle.kts @@ -3,18 +3,18 @@ plugins { } dependencies { - api("com.google.inject:guice:4.2.3") - api("com.graphql-java:graphql-java:14.0") + api("com.google.inject:guice") + api("com.graphql-java:graphql-java") api(project(":hypertrace-core-graphql-spi")) - api("io.github.graphql-java:graphql-java-annotations:8.0") + api("io.github.graphql-java:graphql-java-annotations") - annotationProcessor("org.projectlombok:lombok:1.18.12") - compileOnly("org.projectlombok:lombok:1.18.12") + annotationProcessor("org.projectlombok:lombok") + compileOnly("org.projectlombok:lombok") - implementation("org.slf4j:slf4j-api:1.7.3") - implementation("io.reactivex.rxjava3:rxjava:3.0.2") - implementation("org.hypertrace.gateway.service:gateway-service-api:0.1.1") - implementation("com.google.protobuf:protobuf-java-util:3.11.4") + implementation("org.slf4j:slf4j-api") + implementation("io.reactivex.rxjava3:rxjava") + implementation("org.hypertrace.gateway.service:gateway-service-api") + implementation("com.google.protobuf:protobuf-java-util") implementation(project(":hypertrace-core-graphql-context")) implementation(project(":hypertrace-core-graphql-grpc-utils")) diff --git a/hypertrace-core-graphql-spi/build.gradle.kts b/hypertrace-core-graphql-spi/build.gradle.kts index 6890f6bd..0734760e 100644 --- a/hypertrace-core-graphql-spi/build.gradle.kts +++ b/hypertrace-core-graphql-spi/build.gradle.kts @@ -3,8 +3,8 @@ plugins { } dependencies { - api("com.graphql-java:graphql-java:14.0") - api("com.google.code.findbugs:jsr305:3.0.2") - api("io.github.graphql-java:graphql-java-annotations:8.0") + api("com.graphql-java:graphql-java") + api("io.github.graphql-java:graphql-java-annotations") + api("com.google.code.findbugs:jsr305") } diff --git a/hypertrace-core-graphql-test-platform/build.gradle.kts b/hypertrace-core-graphql-test-platform/build.gradle.kts new file mode 100644 index 00000000..7fc9cfe8 --- /dev/null +++ b/hypertrace-core-graphql-test-platform/build.gradle.kts @@ -0,0 +1,11 @@ +plugins { + `java-platform` +} + +dependencies { + constraints { + api("org.junit.jupiter:junit-jupiter:5.7.0") + api("org.mockito:mockito-core:3.5.13") + api("org.mockito:mockito-junit-jupiter:3.5.13") + } +} \ No newline at end of file diff --git a/hypertrace-core-graphql-trace-schema/build.gradle.kts b/hypertrace-core-graphql-trace-schema/build.gradle.kts index 8cdd01a8..ee119976 100644 --- a/hypertrace-core-graphql-trace-schema/build.gradle.kts +++ b/hypertrace-core-graphql-trace-schema/build.gradle.kts @@ -3,18 +3,18 @@ plugins { } dependencies { - api("com.google.inject:guice:4.2.3") - api("com.graphql-java:graphql-java:14.0") + api("com.google.inject:guice") + api("com.graphql-java:graphql-java") api(project(":hypertrace-core-graphql-spi")) - api("io.github.graphql-java:graphql-java-annotations:8.0") + api("io.github.graphql-java:graphql-java-annotations") - annotationProcessor("org.projectlombok:lombok:1.18.12") - compileOnly("org.projectlombok:lombok:1.18.12") + annotationProcessor("org.projectlombok:lombok") + compileOnly("org.projectlombok:lombok") - implementation("org.slf4j:slf4j-api:1.7.3") - implementation("io.reactivex.rxjava3:rxjava:3.0.2") - implementation("org.hypertrace.gateway.service:gateway-service-api:0.1.1") - implementation("com.google.protobuf:protobuf-java-util:3.11.4") + implementation("org.slf4j:slf4j-api") + implementation("io.reactivex.rxjava3:rxjava") + implementation("org.hypertrace.gateway.service:gateway-service-api") + implementation("com.google.protobuf:protobuf-java-util") implementation(project(":hypertrace-core-graphql-context")) implementation(project(":hypertrace-core-graphql-grpc-utils")) diff --git a/settings.gradle.kts b/settings.gradle.kts index ec739e9c..8a736a6c 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -28,3 +28,5 @@ include(":hypertrace-core-graphql-span-schema") include(":hypertrace-core-graphql-trace-schema") include(":hypertrace-core-graphql-attribute-scope") include(":hypertrace-core-graphql-rx-utils") +include(":hypertrace-core-graphql-platform") +include(":hypertrace-core-graphql-test-platform") From c0da4f547fbb9e969c90359a7d247a75aa9eb511 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Wed, 14 Oct 2020 06:58:51 -0700 Subject: [PATCH 022/173] fix: propagate tracing context to downstream calls (#19) --- .../build.gradle.kts | 1 + .../DefaultGraphQlRequestContextBuilder.java | 19 +++++++++++ .../context/GraphQlRequestContext.java | 3 ++ ...faultGraphQlRequestContextBuilderTest.java | 32 +++++++++++++++++++ .../DefaultGraphQlGrpcContextBuilder.java | 20 +++++++++--- .../DefaultGraphQlGrpcContextBuilderTest.java | 10 ++++++ 6 files changed, 81 insertions(+), 4 deletions(-) diff --git a/hypertrace-core-graphql-context/build.gradle.kts b/hypertrace-core-graphql-context/build.gradle.kts index 06a52237..416c3ef7 100644 --- a/hypertrace-core-graphql-context/build.gradle.kts +++ b/hypertrace-core-graphql-context/build.gradle.kts @@ -10,6 +10,7 @@ dependencies { api("com.graphql-java-kickstart:graphql-java-servlet") implementation(project(":hypertrace-core-graphql-spi")) + implementation("com.google.guava:guava") testImplementation("org.junit.jupiter:junit-jupiter") testImplementation("org.mockito:mockito-core") diff --git a/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilder.java b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilder.java index 9fe38543..0f8d48e9 100644 --- a/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilder.java +++ b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilder.java @@ -1,12 +1,16 @@ package org.hypertrace.core.graphql.context; +import com.google.common.collect.Streams; import com.google.inject.Injector; import graphql.kickstart.servlet.context.DefaultGraphQLServletContext; import graphql.kickstart.servlet.context.DefaultGraphQLServletContextBuilder; import graphql.kickstart.servlet.context.GraphQLServletContext; import graphql.schema.DataFetcher; import java.util.Arrays; +import java.util.Map; import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; import javax.annotation.Nonnull; import javax.inject.Inject; import javax.security.auth.Subject; @@ -20,6 +24,8 @@ class DefaultGraphQlRequestContextBuilder extends DefaultGraphQLServletContextBu private static final String DEFAULT_CONTEXT_ID = "DEFAULT_CONTEXT_ID"; static final String AUTHORIZATION_HEADER_KEY = "Authorization"; static final String TENANT_ID_HEADER_KEY = "x-tenant-id"; + static final Set TRACING_CONTEXT_HEADER_KEY_PREFIXES = + Set.of("X-B3-", "traceparent", "tracestate"); private final Injector injector; private final GraphQlServiceConfig serviceConfig; @@ -75,6 +81,19 @@ public Optional getTenantId() { .or(DefaultGraphQlRequestContextBuilder.this.serviceConfig::getDefaultTenantId); } + @Override + public Map getTracingContextHeaders() { + return Streams.stream( + this.servletContext.getHttpServletRequest().getHeaderNames().asIterator()) + .filter( + header -> + TRACING_CONTEXT_HEADER_KEY_PREFIXES.stream() + .anyMatch(prefix -> header.toLowerCase().startsWith(prefix.toLowerCase()))) + .collect( + Collectors.toUnmodifiableMap( + String::toLowerCase, this.servletContext.getHttpServletRequest()::getHeader)); + } + @Nonnull @Override public ContextualCachingKey getCachingKey() { diff --git a/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/GraphQlRequestContext.java b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/GraphQlRequestContext.java index a4c5f117..404c141f 100644 --- a/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/GraphQlRequestContext.java +++ b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/GraphQlRequestContext.java @@ -2,6 +2,7 @@ import graphql.kickstart.execution.context.GraphQLContext; import graphql.schema.DataFetcher; +import java.util.Map; import java.util.Optional; import javax.annotation.Nonnull; @@ -17,6 +18,8 @@ public interface GraphQlRequestContext extends GraphQLContext { Optional getTenantId(); + Map getTracingContextHeaders(); + @Nonnull ContextualCachingKey getCachingKey(); } diff --git a/hypertrace-core-graphql-context/src/test/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilderTest.java b/hypertrace-core-graphql-context/src/test/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilderTest.java index 2eca1410..8f0cdd43 100644 --- a/hypertrace-core-graphql-context/src/test/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilderTest.java +++ b/hypertrace-core-graphql-context/src/test/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilderTest.java @@ -1,5 +1,6 @@ package org.hypertrace.core.graphql.context; +import static java.util.Collections.emptyMap; import static org.hypertrace.core.graphql.context.DefaultGraphQlRequestContextBuilder.AUTHORIZATION_HEADER_KEY; import static org.hypertrace.core.graphql.context.DefaultGraphQlRequestContextBuilder.TENANT_ID_HEADER_KEY; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -15,6 +16,9 @@ import com.google.inject.Injector; import graphql.schema.DataFetcher; +import java.util.Collections; +import java.util.List; +import java.util.Map; import java.util.Optional; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -103,4 +107,32 @@ void returnsCachingKeysEqualForSameTenant() { var thirdKey = this.contextBuilder.build(this.mockRequest, this.mockResponse).getCachingKey(); assertNotEquals(firstKey, thirdKey); } + + @Test + void returnsEmptyMapIfNoTracingHeadersPresent() { + when(this.mockRequest.getHeaderNames()).thenReturn(Collections.enumeration(List.of("foo"))); + assertEquals(emptyMap(), this.requestContext.getTracingContextHeaders()); + } + + @Test + void returnsLowerCasedTracingHeadersIfAnyMatches() { + when(this.mockRequest.getHeaderNames()) + .thenReturn( + Collections.enumeration( + List.of( + "traceSTATE", "traceparent", "other", "X-B3-traceid", "x-b3-parent-trace-id"))); + when(this.mockRequest.getHeader(any(String.class))) + .thenAnswer(invocation -> invocation.getArgument(0) + " value"); + assertEquals( + Map.of( + "tracestate", + "traceSTATE value", + "traceparent", + "traceparent value", + "x-b3-traceid", + "X-B3-traceid value", + "x-b3-parent-trace-id", + "x-b3-parent-trace-id value"), + this.requestContext.getTracingContextHeaders()); + } } diff --git a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGraphQlGrpcContextBuilder.java b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGraphQlGrpcContextBuilder.java index a7b8a847..9281763f 100644 --- a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGraphQlGrpcContextBuilder.java +++ b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGraphQlGrpcContextBuilder.java @@ -6,6 +6,8 @@ import io.grpc.Context; import io.grpc.stub.StreamObserver; import io.reactivex.rxjava3.core.Observable; +import java.util.Arrays; +import java.util.Collection; import java.util.Map; import java.util.Map.Entry; import java.util.Optional; @@ -37,10 +39,12 @@ private DefaultGraphQlGrpcContext( GraphQlRequestContext requestContext, PlatformRequestContextBuilder platformRequestContextBuilder) { Map grpcHeaders = - this.flattenOptionalMap( - Map.of( - AUTHORIZATION_HEADER, this.extractAuthorizationHeader(requestContext), - TENANT_ID_HEADER_KEY, this.extractTenantId(requestContext))); + this.mergeMaps( + requestContext.getTracingContextHeaders(), + this.flattenOptionalMap( + Map.of( + AUTHORIZATION_HEADER, this.extractAuthorizationHeader(requestContext), + TENANT_ID_HEADER_KEY, this.extractTenantId(requestContext)))); RequestContext platformContext = platformRequestContextBuilder.build(grpcHeaders); this.grpcContext = this.buildGrpcContext(platformContext); @@ -87,5 +91,13 @@ private Map flattenOptionalMap(Map> opt .flatMap(Optional::stream) .collect(Collectors.toUnmodifiableMap(Entry::getKey, Entry::getValue)); } + + @SafeVarargs + private Map mergeMaps(Map... maps) { + return Arrays.stream(maps) + .map(Map::entrySet) + .flatMap(Collection::stream) + .collect(Collectors.toUnmodifiableMap(Entry::getKey, Entry::getValue)); + } } } diff --git a/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/DefaultGraphQlGrpcContextBuilderTest.java b/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/DefaultGraphQlGrpcContextBuilderTest.java index 18f09c61..0b278d12 100644 --- a/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/DefaultGraphQlGrpcContextBuilderTest.java +++ b/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/DefaultGraphQlGrpcContextBuilderTest.java @@ -140,4 +140,14 @@ void addsTenantIdToContext() { this.builder.build(this.mockRequestContext); verify(this.mockPlatformRequestContextBuilder).build(Map.of(TENANT_ID_HEADER_KEY, "tenant id")); } + + @Test + void addsTracingHeadersToContext() { + when(this.mockRequestContext.getTenantId()).thenReturn(Optional.of("tenant id")); + when(this.mockRequestContext.getTracingContextHeaders()) + .thenReturn(Map.of("traceid", "traceid value")); + this.builder.build(this.mockRequestContext); + verify(this.mockPlatformRequestContextBuilder) + .build(Map.of(TENANT_ID_HEADER_KEY, "tenant id", "traceid", "traceid value")); + } } From 1c00c3f890299ecc07cbf9c975d93f8520549c4d Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Tue, 20 Oct 2020 17:03:31 -0700 Subject: [PATCH 023/173] chore: update gradle (#21) --- gradle/wrapper/gradle-wrapper.jar | Bin 58910 -> 59203 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 2 +- gradlew.bat | 21 +++------------------ 4 files changed, 5 insertions(+), 20 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 62d4c053550b91381bbd28b1afc82d634bf73a8a..e708b1c023ec8b20f512888fe07c5bd3ff77bb8f 100644 GIT binary patch delta 6656 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 Yte!%o?r4GTrVtxD61Ym!|5fq-1K$0e!T1w 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index bca17f36..14e30f74 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.6-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index fbd7c515..4f906e0c 100755 --- a/gradlew +++ b/gradlew @@ -130,7 +130,7 @@ fi if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath diff --git a/gradlew.bat b/gradlew.bat index 5093609d..107acd32 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -40,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -54,7 +54,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -64,21 +64,6 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line @@ -86,7 +71,7 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell From 3bf42afd2154cafd9f438a3216a569830a941e2e Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Wed, 21 Oct 2020 10:43:01 -0700 Subject: [PATCH 024/173] chore: update vulnerable grpc/netty dependency (#22) --- .../build.gradle.kts | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index f015b347..75fb1c74 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -21,14 +21,20 @@ dependencies { api("com.typesafe:config:1.4.0") api("com.google.guava:guava:29.0-jre") api("com.graphql-java-kickstart:graphql-java-servlet:9.1.0") - api("io.grpc:grpc-api:1.32.1") - api("io.grpc:grpc-core:1.32.1") - api("io.grpc:grpc-stub:1.32.1") - api("io.grpc:grpc-context:1.32.1") + api("io.grpc:grpc-api:1.33.0") + api("io.grpc:grpc-core:1.33.0") + api("io.grpc:grpc-stub:1.33.0") + api("io.grpc:grpc-context:1.33.0") api("com.fasterxml.jackson.core:jackson-databind:2.11.0") api("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.0") runtime("org.apache.logging.log4j:log4j-slf4j-impl:2.13.3") - runtime("io.grpc:grpc-netty:1.32.1") + runtime("io.grpc:grpc-netty:1.33.0") + runtime("io.netty:netty-codec-http2:4.1.53.Final") { + because("https://snyk.io/vuln/SNYK-JAVA-IONETTY-1020439") + } + runtime("io.netty:netty-handler-proxy:4.1.53.Final") { + because("https://snyk.io/vuln/SNYK-JAVA-IONETTY-1020439s") + } } } \ No newline at end of file From cdaf471a7d87d270de971f41112b4121e3d6aafd Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Thu, 22 Oct 2020 06:03:29 -0700 Subject: [PATCH 025/173] feat: add support for unknown scopes (#20) * feat: add support for unknown scopes * fix: remove external span string * chore: roll back gradle changes --- ...traceCoreAttributeModelScopeConverter.java | 25 ----------- .../scopes/HypertraceCoreAttributeScope.java | 20 ++++++++- ...HypertraceCoreAttributeScopeConverter.java | 20 ++++----- .../HypertraceCoreAttributeScopeModule.java | 19 ++++++-- .../HypertraceCoreAttributeScopeString.java | 6 +++ .../graphql/attributes/AttributeClient.java | 3 -- .../graphql/attributes/AttributeModel.java | 2 +- .../attributes/AttributeModelScope.java | 17 ------- .../attributes/AttributeModelTranslator.java | 45 +------------------ .../graphql/attributes/AttributeStore.java | 8 ++-- .../attributes/AttributeStoreModule.java | 12 ----- .../attributes/CachingAttributeStore.java | 42 +++++++---------- .../attributes/DefaultAttributeModel.java | 2 +- .../graphql/attributes/DefaultIdMapping.java | 6 +-- .../core/graphql/attributes/IdLookup.java | 6 +-- .../core/graphql/attributes/IdMapping.java | 10 ++--- .../AttributeModelTranslatorTest.java | 12 ++--- .../attributes/CachingAttributeStoreTest.java | 20 ++++----- .../core/graphql/attributes/IdLookupTest.java | 16 +++---- .../request/AttributeRequestBuilder.java | 11 +++-- .../common/request/CommonRequestModule.java | 6 --- .../DefaultAttributeRequestBuilder.java | 11 +++-- .../request/DefaultFilterRequestBuilder.java | 22 ++++----- .../DefaultResultSetRequestBuilder.java | 7 ++- .../common/request/FilterRequestBuilder.java | 3 +- .../request/ResultSetRequestBuilder.java | 7 ++- .../schema/attributes/AttributeScope.java | 6 +++ .../utils/attributes/AttributeAssociator.java | 5 +-- .../DefaultAttributeAssociator.java | 5 +-- ...lterArgumentDeserializationConfigTest.java | 12 ++++- .../DefaultAttributeRequestBuilderTest.java | 5 +-- .../DefaultResultSetRequestBuilderTest.java | 7 ++- .../metadata/MetadataSchemaModule.java | 4 +- .../response/DefaultAttributeMetadata.java | 1 + .../response/MetadataResponseBuilder.java | 11 ++--- .../metadata/schema/AttributeMetadata.java | 10 ++++- .../response/MetadataResponseBuilderTest.java | 12 ++--- .../build.gradle.kts | 2 +- .../build.gradle.kts | 2 + .../graphql/span/fetcher/SpanFetcher.java | 4 +- .../build.gradle.kts | 2 + .../GatewayServiceTraceRequestBuilder.java | 10 ++--- .../dao/GatewayServiceTraceTypeConverter.java | 30 ------------- .../request/DefaultTraceRequestBuilder.java | 14 ++---- ...aceTypeToAttributeModelScopeConverter.java | 26 ----------- .../trace/schema/arguments/TraceType.java | 4 ++ 46 files changed, 198 insertions(+), 332 deletions(-) delete mode 100644 hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeModelScopeConverter.java create mode 100644 hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeString.java delete mode 100644 hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelScope.java delete mode 100644 hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceTypeConverter.java delete mode 100644 hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/TraceTypeToAttributeModelScopeConverter.java diff --git a/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeModelScopeConverter.java b/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeModelScopeConverter.java deleted file mode 100644 index b1929944..00000000 --- a/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeModelScopeConverter.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.hypertrace.core.graphql.atttributes.scopes; - -import io.reactivex.rxjava3.core.Single; -import java.util.UnknownFormatConversionException; -import org.hypertrace.core.graphql.attributes.AttributeModelScope; -import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; -import org.hypertrace.core.graphql.common.utils.Converter; - -class HypertraceCoreAttributeModelScopeConverter - implements Converter { - - @Override - public Single convert(AttributeScope scope) { - switch ((HypertraceCoreAttributeScope) scope) { - case TRACE: - return Single.just(AttributeModelScope.TRACE); - case SPAN: - return Single.just(AttributeModelScope.SPAN); - default: - return Single.error( - new UnknownFormatConversionException( - String.format("Unrecognized attribute scope %s", scope))); - } - } -} diff --git a/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScope.java b/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScope.java index 3d18cc01..26b977ec 100644 --- a/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScope.java +++ b/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScope.java @@ -3,6 +3,22 @@ import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; enum HypertraceCoreAttributeScope implements AttributeScope { - TRACE, - SPAN; + TRACE(HypertraceCoreAttributeScopeString.TRACE), + SPAN(HypertraceCoreAttributeScopeString.SPAN); + + private final String scope; + + HypertraceCoreAttributeScope(String scope) { + this.scope = scope; + } + + @Override + public String getScopeString() { + return this.scope; + } + + @Override + public String getExternalScopeString() { + return this.name(); + } } diff --git a/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeConverter.java b/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeConverter.java index 5fcfdbcb..04f89653 100644 --- a/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeConverter.java +++ b/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeConverter.java @@ -1,25 +1,21 @@ package org.hypertrace.core.graphql.atttributes.scopes; import io.reactivex.rxjava3.core.Single; -import java.util.UnknownFormatConversionException; -import org.hypertrace.core.graphql.attributes.AttributeModelScope; +import java.util.Optional; import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; import org.hypertrace.core.graphql.common.utils.Converter; -class HypertraceCoreAttributeScopeConverter - implements Converter { +class HypertraceCoreAttributeScopeConverter implements Converter> { @Override - public Single convert(AttributeModelScope scope) { + public Single> convert(String scope) { switch (scope) { - case TRACE: - return Single.just(HypertraceCoreAttributeScope.TRACE); - case SPAN: - return Single.just(HypertraceCoreAttributeScope.SPAN); + case HypertraceCoreAttributeScopeString.TRACE: + return Single.just(Optional.of(HypertraceCoreAttributeScope.TRACE)); + case HypertraceCoreAttributeScopeString.SPAN: + return Single.just(Optional.of(HypertraceCoreAttributeScope.SPAN)); default: - return Single.error( - new UnknownFormatConversionException( - String.format("Unrecognized attribute scope %s", scope.name()))); + return Single.just(Optional.empty()); } } } diff --git a/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeModule.java b/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeModule.java index 06f8b080..445c73b5 100644 --- a/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeModule.java +++ b/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeModule.java @@ -1,9 +1,16 @@ package org.hypertrace.core.graphql.atttributes.scopes; +import static org.hypertrace.core.graphql.attributes.IdMapping.forForeignId; +import static org.hypertrace.core.graphql.attributes.IdMapping.forId; +import static org.hypertrace.core.graphql.atttributes.scopes.HypertraceCoreAttributeScopeString.SPAN; +import static org.hypertrace.core.graphql.atttributes.scopes.HypertraceCoreAttributeScopeString.TRACE; + import com.google.inject.AbstractModule; import com.google.inject.Key; import com.google.inject.TypeLiteral; -import org.hypertrace.core.graphql.attributes.AttributeModelScope; +import com.google.inject.multibindings.Multibinder; +import java.util.Optional; +import org.hypertrace.core.graphql.attributes.IdMapping; import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; import org.hypertrace.core.graphql.common.utils.Converter; @@ -13,9 +20,13 @@ public class HypertraceCoreAttributeScopeModule extends AbstractModule { protected void configure() { bind(Key.get(new TypeLiteral>() {})) .toInstance(HypertraceCoreAttributeScope.class); - bind(Key.get(new TypeLiteral>() {})) + bind(Key.get(new TypeLiteral>>() {})) .to(HypertraceCoreAttributeScopeConverter.class); - bind(Key.get(new TypeLiteral>() {})) - .to(HypertraceCoreAttributeModelScopeConverter.class); + + Multibinder idBinder = Multibinder.newSetBinder(binder(), IdMapping.class); + idBinder.addBinding().toInstance(forId(SPAN, "id")); + idBinder.addBinding().toInstance(forForeignId(SPAN, TRACE, "traceId")); + + idBinder.addBinding().toInstance(forId(TRACE, "id")); } } diff --git a/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeString.java b/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeString.java new file mode 100644 index 00000000..4842a6ee --- /dev/null +++ b/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeString.java @@ -0,0 +1,6 @@ +package org.hypertrace.core.graphql.atttributes.scopes; + +public interface HypertraceCoreAttributeScopeString { + String SPAN = "EVENT"; + String TRACE = "TRACE"; +} diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeClient.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeClient.java index 79a2698e..e7f99ef6 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeClient.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeClient.java @@ -14,8 +14,6 @@ import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; import org.hypertrace.core.graphql.utils.grpc.GraphQlGrpcContextBuilder; import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton class AttributeClient { @@ -23,7 +21,6 @@ class AttributeClient { private final AttributeServiceStub attributeServiceClient; private final GraphQlGrpcContextBuilder grpcContextBuilder; private final AttributeModelTranslator translator; - private static final Logger LOG = LoggerFactory.getLogger(AttributeClient.class); @Inject AttributeClient( diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModel.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModel.java index 1b6ea475..b48d23bc 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModel.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModel.java @@ -6,7 +6,7 @@ public interface AttributeModel { String id(); - AttributeModelScope scope(); + String scope(); String key(); diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelScope.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelScope.java deleted file mode 100644 index 5a6a36d1..00000000 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelScope.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.hypertrace.core.graphql.attributes; - -public enum AttributeModelScope { - TRACE, - SPAN, - INTERACTION, - DOMAIN_EVENT, - API, - SERVICE, - DOMAIN, - TRANSACTION, - SESSION, - API_TRACE, - BACKEND, - BACKEND_TRACE, - ACTOR -} diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java index a8e82047..680c0e92 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java @@ -7,7 +7,6 @@ import org.hypertrace.core.attribute.service.v1.AggregateFunction; import org.hypertrace.core.attribute.service.v1.AttributeKind; import org.hypertrace.core.attribute.service.v1.AttributeMetadata; -import org.hypertrace.core.attribute.service.v1.AttributeScope; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -19,7 +18,7 @@ public Optional translate(AttributeMetadata attributeMetadata) { return Optional.of( new DefaultAttributeModel( attributeMetadata.getId(), - this.convertScope(attributeMetadata.getScope()), + attributeMetadata.getScopeString(), attributeMetadata.getKey(), attributeMetadata.getDisplayName(), this.convertType(attributeMetadata.getValueKind()), @@ -94,46 +93,4 @@ private AttributeModelType convertType(AttributeKind kind) { String.format("Unrecognized attribute kind %s", kind.name())); } } - - private AttributeModelScope convertScope(AttributeScope scope) { - switch (scope) { - case TRACE: - return AttributeModelScope.TRACE; - case EVENT: - return AttributeModelScope.SPAN; - case INTERACTION: - return AttributeModelScope.INTERACTION; - case DOMAIN_EVENT: - return AttributeModelScope.DOMAIN_EVENT; - case API: - return AttributeModelScope.API; - case SERVICE: - return AttributeModelScope.SERVICE; - case DOMAIN: - return AttributeModelScope.DOMAIN; - case TRANSACTION: - return AttributeModelScope.TRANSACTION; - case SESSION: - return AttributeModelScope.SESSION; - case API_TRACE: - return AttributeModelScope.API_TRACE; - case BACKEND: - return AttributeModelScope.BACKEND; - case BACKEND_TRACE: - return AttributeModelScope.BACKEND_TRACE; - case ACTOR: - return AttributeModelScope.ACTOR; - case SCOPE_UNDEFINED: - case ENTITY: - case EVENT_EVENT_EDGE: - case ENTITY_EVENT_EDGE: - case ENTITY_ENTITY_EDGE: - case THREAT_ACTOR: - case CLUSTERS_SNAPSHOT: - case UNRECOGNIZED: - default: - throw new UnknownFormatConversionException( - String.format("Unrecognized attribute scope %s", scope.name())); - } - } } diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStore.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStore.java index 74dcd98a..fcfc1f53 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStore.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStore.java @@ -9,13 +9,13 @@ public interface AttributeStore { Single> getAll(GraphQlRequestContext context); - Single get(GraphQlRequestContext context, AttributeModelScope scope, String key); + Single get(GraphQlRequestContext context, String scope, String key); Single> get( - GraphQlRequestContext context, AttributeModelScope scope, Collection keys); + GraphQlRequestContext context, String scope, Collection keys); - Single getIdAttribute(GraphQlRequestContext context, AttributeModelScope scope); + Single getIdAttribute(GraphQlRequestContext context, String scope); Single getForeignIdAttribute( - GraphQlRequestContext context, AttributeModelScope scope, AttributeModelScope foreignScope); + GraphQlRequestContext context, String scope, String foreignScope); } diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStoreModule.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStoreModule.java index b9650221..be84d69d 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStoreModule.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStoreModule.java @@ -1,12 +1,6 @@ package org.hypertrace.core.graphql.attributes; -import static org.hypertrace.core.graphql.attributes.AttributeModelScope.SPAN; -import static org.hypertrace.core.graphql.attributes.AttributeModelScope.TRACE; -import static org.hypertrace.core.graphql.attributes.IdMapping.forForeignId; -import static org.hypertrace.core.graphql.attributes.IdMapping.forId; - import com.google.inject.AbstractModule; -import com.google.inject.multibindings.Multibinder; import io.grpc.CallCredentials; import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; import org.hypertrace.core.graphql.utils.grpc.GraphQlGrpcContextBuilder; @@ -21,11 +15,5 @@ protected void configure() { requireBinding(GraphQlGrpcContextBuilder.class); requireBinding(CallCredentials.class); requireBinding(GrpcChannelRegistry.class); - - Multibinder idBinder = Multibinder.newSetBinder(binder(), IdMapping.class); - idBinder.addBinding().toInstance(forId(SPAN, "id")); - idBinder.addBinding().toInstance(forForeignId(SPAN, TRACE, "traceId")); - - idBinder.addBinding().toInstance(forId(TRACE, "id")); } } diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java index 27788719..03700d51 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java @@ -33,9 +33,7 @@ class CachingAttributeStore implements AttributeStore { this.idLookup = idLookup; } - // Has science gone too far?! - private final LoadingCache< - ContextualCachingKey, Single>> + private final LoadingCache>> cache = CacheBuilder.newBuilder() .maximumSize(1000) @@ -48,8 +46,7 @@ public Single> getAll(GraphQlRequestContext context) { } @Override - public Single get( - GraphQlRequestContext context, AttributeModelScope scope, String key) { + public Single get(GraphQlRequestContext context, String scope, String key) { return this.getOrInvalidate(context) .map(table -> Optional.ofNullable(table.get(scope, key))) .flatMapMaybe(Maybe::fromOptional) @@ -58,25 +55,23 @@ public Single get( @Override public Single> get( - GraphQlRequestContext context, AttributeModelScope scope, Collection keys) { + GraphQlRequestContext context, String scope, Collection keys) { return this.getOrInvalidate(context) .flatMap(table -> this.getValuesOrError(scope, table.row(scope), keys)); } @Override - public Single getIdAttribute( - GraphQlRequestContext context, AttributeModelScope scope) { + public Single getIdAttribute(GraphQlRequestContext context, String scope) { return this.getIdKey(scope).flatMap(key -> this.get(context, scope, key)); } @Override public Single getForeignIdAttribute( - GraphQlRequestContext context, AttributeModelScope scope, AttributeModelScope foreignScope) { + GraphQlRequestContext context, String scope, String foreignScope) { return this.getForeignIdKey(scope, foreignScope).flatMap(key -> this.get(context, scope, key)); } - private Single> loadTable( - ContextualCachingKey cachingKey) { + private Single> loadTable(ContextualCachingKey cachingKey) { return this.attributeClient .queryAll(cachingKey.getContext()) .toList() @@ -84,35 +79,33 @@ private Single> loadTable( .cache(); } - private Table buildTable( - List attributes) { + private Table buildTable(List attributes) { return attributes.stream() .collect( ImmutableTable.toImmutableTable( AttributeModel::scope, AttributeModel::key, Function.identity())); } - private Single> getOrInvalidate( + private Single> getOrInvalidate( GraphQlRequestContext context) { return this.cache .getUnchecked(context.getCachingKey()) .doOnError(x -> this.cache.invalidate(context.getCachingKey())); } - private Single getForeignIdKey( - AttributeModelScope scope, AttributeModelScope foreignScope) { + private Single getForeignIdKey(String scope, String foreignScope) { return Maybe.fromOptional(this.idLookup.foreignIdKey(scope, foreignScope)) .switchIfEmpty( Single.error(this.buildErrorForMissingForeignScopeMapping(scope, foreignScope))); } - private Single getIdKey(AttributeModelScope scope) { + private Single getIdKey(String scope) { return Maybe.fromOptional(this.idLookup.idKey(scope)) .switchIfEmpty(Single.error(this.buildErrorForMissingIdMapping(scope))); } private Single> getValuesOrError( - AttributeModelScope scope, + String scope, Map definedAttributes, Collection requestedAttributeKeys) { return Observable.fromIterable(requestedAttributeKeys) @@ -124,22 +117,21 @@ private Single> getValuesOrError( .collect(Collectors.toUnmodifiableMap(AttributeModel::key, Function.identity())); } - private NoSuchElementException buildErrorForMissingAttribute( - AttributeModelScope scope, String key) { + private NoSuchElementException buildErrorForMissingAttribute(String scope, String key) { return new NoSuchElementException( - String.format("No attribute available for scope '%s' and key '%s'", scope.name(), key)); + String.format("No attribute available for scope '%s' and key '%s'", scope, key)); } private NoSuchElementException buildErrorForMissingForeignScopeMapping( - AttributeModelScope scope, AttributeModelScope foreignScope) { + String scope, String foreignScope) { return new NoSuchElementException( String.format( "No id attribute registered for scope '%s' and foreign scope '%s'", - scope.name(), foreignScope.name())); + scope, foreignScope)); } - private NoSuchElementException buildErrorForMissingIdMapping(AttributeModelScope scope) { + private NoSuchElementException buildErrorForMissingIdMapping(String scope) { return new NoSuchElementException( - String.format("No id attribute registered for scope '%s'", scope.name())); + String.format("No id attribute registered for scope '%s'", scope)); } } diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/DefaultAttributeModel.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/DefaultAttributeModel.java index 0eefe1b0..b6cc6ef6 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/DefaultAttributeModel.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/DefaultAttributeModel.java @@ -10,7 +10,7 @@ @Accessors(fluent = true) class DefaultAttributeModel implements AttributeModel { String id; - AttributeModelScope scope; + String scope; String key; String displayName; AttributeModelType type; diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/DefaultIdMapping.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/DefaultIdMapping.java index a1ba1984..21916d2f 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/DefaultIdMapping.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/DefaultIdMapping.java @@ -9,12 +9,12 @@ @Value @Accessors(fluent = true) class DefaultIdMapping implements IdMapping { - @Nonnull AttributeModelScope containingScope; + @Nonnull String containingScope; @Nonnull String idAttribute; - @Nullable AttributeModelScope foreignScope; + @Nullable String foreignScope; @Override - public AttributeModelScope foreignScope() { + public String foreignScope() { return Optional.ofNullable(this.foreignScope).orElse(containingScope); } } diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdLookup.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdLookup.java index 7886c99a..034dd086 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdLookup.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdLookup.java @@ -9,7 +9,7 @@ @Singleton class IdLookup { - private final ImmutableTable idTable; + private final ImmutableTable idTable; @Inject IdLookup(Set idMappings) { @@ -20,11 +20,11 @@ class IdLookup { IdMapping::containingScope, IdMapping::foreignScope, IdMapping::idAttribute)); } - Optional idKey(AttributeModelScope scope) { + Optional idKey(String scope) { return this.foreignIdKey(scope, scope); } - Optional foreignIdKey(AttributeModelScope scope, AttributeModelScope foreignScope) { + Optional foreignIdKey(String scope, String foreignScope) { return Optional.ofNullable(this.idTable.get(scope, foreignScope)); } } diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdMapping.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdMapping.java index 8808fa70..b77e10ae 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdMapping.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdMapping.java @@ -5,23 +5,23 @@ public interface IdMapping { - AttributeModelScope containingScope(); + String containingScope(); String idAttribute(); - default AttributeModelScope foreignScope() { + default String foreignScope() { return null; } - static IdMapping forId(@Nonnull AttributeModelScope scope, @Nonnull String idAttribute) { + static IdMapping forId(@Nonnull String scope, @Nonnull String idAttribute) { Objects.requireNonNull(scope); Objects.requireNonNull(idAttribute); return new DefaultIdMapping(scope, idAttribute, null); } static IdMapping forForeignId( - @Nonnull AttributeModelScope scope, - @Nonnull AttributeModelScope foreignScope, + @Nonnull String scope, + @Nonnull String foreignScope, @Nonnull String idAttribute) { Objects.requireNonNull(scope); Objects.requireNonNull(foreignScope); diff --git a/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslatorTest.java b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslatorTest.java index f039bb60..8a3ed9e6 100644 --- a/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslatorTest.java +++ b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslatorTest.java @@ -7,7 +7,6 @@ import org.hypertrace.core.attribute.service.v1.AggregateFunction; import org.hypertrace.core.attribute.service.v1.AttributeKind; import org.hypertrace.core.attribute.service.v1.AttributeMetadata; -import org.hypertrace.core.attribute.service.v1.AttributeScope; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -23,7 +22,7 @@ void beforeEach() { this.metadata = AttributeMetadata.newBuilder() .setId("id") - .setScope(AttributeScope.TRACE) + .setScopeString("TRACE") .setKey("key") .setDisplayName("display name") .setValueKind(AttributeKind.TYPE_STRING) @@ -36,7 +35,7 @@ void beforeEach() { this.expectedModel = DefaultAttributeModel.builder() .id("id") - .scope(AttributeModelScope.TRACE) + .scope("TRACE") .key("key") .displayName("display name") .type(AttributeModelType.STRING) @@ -70,20 +69,21 @@ void testStringArrayAttributeKindTranslation() { this.metadata = AttributeMetadata.newBuilder() .setId("id") - .setScope(AttributeScope.API) + .setScopeString("TRACE") .setKey("key") .setDisplayName("display name") .setValueKind(AttributeKind.TYPE_STRING_ARRAY) .setUnit("unit") .setOnlyAggregationsAllowed(false) - .addAllSupportedAggregations(List.of(AggregateFunction.DISTINCT_COUNT, AggregateFunction.AVGRATE)) + .addAllSupportedAggregations( + List.of(AggregateFunction.DISTINCT_COUNT, AggregateFunction.AVGRATE)) .setGroupable(false) .build(); this.expectedModel = DefaultAttributeModel.builder() .id("id") - .scope(AttributeModelScope.API) + .scope("TRACE") .key("key") .displayName("display name") .type(AttributeModelType.STRING_ARRAY) diff --git a/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java index 88ccc1d3..57219074 100644 --- a/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java +++ b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java @@ -1,7 +1,5 @@ package org.hypertrace.core.graphql.attributes; -import static org.hypertrace.core.graphql.attributes.AttributeModelScope.SPAN; -import static org.hypertrace.core.graphql.attributes.AttributeModelScope.TRACE; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -37,9 +35,9 @@ class CachingAttributeStoreTest { @Mock IdLookup mockIdLookup; private final AttributeModel traceAttribute = - DefaultAttributeModel.builder().scope(TRACE).key("traceKey").build(); + DefaultAttributeModel.builder().scope("TRACE").key("traceKey").build(); private final AttributeModel spanAttribute = - DefaultAttributeModel.builder().scope(SPAN).key("spanKey").build(); + DefaultAttributeModel.builder().scope("SPAN").key("spanKey").build(); private AttributeStore attributeStore; @@ -87,7 +85,7 @@ void throwsErrorIfNoKeyMatch() { assertThrows( NoSuchElementException.class, - this.attributeStore.get(context, SPAN, "nonExistentKey")::blockingGet); + this.attributeStore.get(context, "SPAN", "nonExistentKey")::blockingGet); } @Test @@ -172,11 +170,11 @@ void supportsAndCachesMultiValuedGet() { void supportsAndCachesIdLookup() { GraphQlRequestContext context = this.buildNewMockContext(); DefaultAttributeModel spanIdAttribute = - DefaultAttributeModel.builder().scope(SPAN).key("id").build(); + DefaultAttributeModel.builder().scope("SPAN").key("id").build(); when(this.mockAttributeClient.queryAll(eq(context))) .thenReturn(Observable.just(spanIdAttribute)); - when(this.mockIdLookup.idKey(eq(SPAN))).thenReturn(Optional.of("id")); + when(this.mockIdLookup.idKey(eq("SPAN"))).thenReturn(Optional.of("id")); assertEquals( spanIdAttribute, @@ -192,22 +190,22 @@ void supportsAndCachesIdLookup() { @Test void returnsErrorForMissingIdMapping() { assertThrows( - NoSuchElementException.class, this.attributeStore.getIdAttribute(null, SPAN)::blockingGet); + NoSuchElementException.class, this.attributeStore.getIdAttribute(null, "SPAN")::blockingGet); } @Test void supportsForeignIdLookup() { GraphQlRequestContext context = this.buildNewMockContext(); DefaultAttributeModel spanTraceIdAttribute = - DefaultAttributeModel.builder().scope(SPAN).key("traceId").build(); + DefaultAttributeModel.builder().scope("SPAN").key("traceId").build(); - when(this.mockIdLookup.foreignIdKey(eq(SPAN), eq(TRACE))).thenReturn(Optional.of("traceId")); + when(this.mockIdLookup.foreignIdKey(eq("SPAN"), eq("TRACE"))).thenReturn(Optional.of("traceId")); when(this.mockAttributeClient.queryAll(eq(context))) .thenReturn(Observable.just(spanTraceIdAttribute)); assertEquals( spanTraceIdAttribute, - this.attributeStore.getForeignIdAttribute(context, SPAN, TRACE).blockingGet()); + this.attributeStore.getForeignIdAttribute(context, "SPAN", "TRACE").blockingGet()); } @Test diff --git a/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/IdLookupTest.java b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/IdLookupTest.java index 02cddd2c..4ca95b3a 100644 --- a/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/IdLookupTest.java +++ b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/IdLookupTest.java @@ -1,7 +1,5 @@ package org.hypertrace.core.graphql.attributes; -import static org.hypertrace.core.graphql.attributes.AttributeModelScope.SPAN; -import static org.hypertrace.core.graphql.attributes.AttributeModelScope.TRACE; import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.Optional; @@ -15,13 +13,13 @@ void canLookupIds() { IdLookup idLookup = new IdLookup( Set.of( - IdMapping.forId(SPAN, "s-id"), - IdMapping.forId(TRACE, "t-id"), - IdMapping.forForeignId(SPAN, TRACE, "s-t-id"))); + IdMapping.forId("SPAN", "s-id"), + IdMapping.forId("TRACE", "t-id"), + IdMapping.forForeignId("SPAN", "TRACE", "s-t-id"))); - assertEquals(Optional.of("s-id"), idLookup.idKey(SPAN)); - assertEquals(Optional.of("t-id"), idLookup.idKey(TRACE)); - assertEquals(Optional.of("s-t-id"), idLookup.foreignIdKey(SPAN, TRACE)); - assertEquals(Optional.empty(), idLookup.foreignIdKey(TRACE, SPAN)); + assertEquals(Optional.of("s-id"), idLookup.idKey("SPAN")); + assertEquals(Optional.of("t-id"), idLookup.idKey("TRACE")); + assertEquals(Optional.of("s-t-id"), idLookup.foreignIdKey("SPAN", "TRACE")); + assertEquals(Optional.empty(), idLookup.foreignIdKey("TRACE", "SPAN")); } } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/AttributeRequestBuilder.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/AttributeRequestBuilder.java index dc08042f..09fa85cb 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/AttributeRequestBuilder.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/AttributeRequestBuilder.java @@ -6,31 +6,30 @@ import io.reactivex.rxjava3.core.Single; import java.util.stream.Stream; import org.hypertrace.core.graphql.attributes.AttributeModel; -import org.hypertrace.core.graphql.attributes.AttributeModelScope; import org.hypertrace.core.graphql.context.GraphQlRequestContext; public interface AttributeRequestBuilder { Single buildForId( - GraphQlRequestContext context, AttributeModelScope attributeModelScope); + GraphQlRequestContext context, String attributeModelScope); Observable buildForAttributeQueryableSelectionSet( GraphQlRequestContext context, - AttributeModelScope attributeScope, + String attributeScope, DataFetchingFieldSelectionSet attributeQueryableSelectionSet); Observable buildForAttributeQueryableFields( GraphQlRequestContext context, - AttributeModelScope attributeModelScope, + String attributeModelScope, Stream attributeQueryableFields); Observable buildForAttributeQueryableFieldsAndId( GraphQlRequestContext context, - AttributeModelScope attributeScope, + String attributeScope, Stream attributeQueryableFields); Single buildForKey( - GraphQlRequestContext context, AttributeModelScope attributeModelScope, String attributeKey); + GraphQlRequestContext context, String attributeModelScope, String attributeKey); AttributeRequest buildForAttribute(AttributeModel attribute); } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/CommonRequestModule.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/CommonRequestModule.java index 482f9640..76e0052b 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/CommonRequestModule.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/CommonRequestModule.java @@ -1,12 +1,7 @@ package org.hypertrace.core.graphql.common.request; import com.google.inject.AbstractModule; -import com.google.inject.Key; -import com.google.inject.TypeLiteral; -import org.hypertrace.core.graphql.attributes.AttributeModelScope; import org.hypertrace.core.graphql.attributes.AttributeStore; -import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; -import org.hypertrace.core.graphql.common.utils.Converter; import org.hypertrace.core.graphql.common.utils.attributes.AttributeAssociator; import org.hypertrace.core.graphql.deserialization.ArgumentDeserializer; import org.hypertrace.core.graphql.utils.schema.GraphQlSelectionFinder; @@ -22,6 +17,5 @@ protected void configure() { requireBinding(ArgumentDeserializer.class); requireBinding(AttributeAssociator.class); requireBinding(GraphQlSelectionFinder.class); - requireBinding(Key.get(new TypeLiteral>() {})); } } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilder.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilder.java index 16a55572..7b725429 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilder.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilder.java @@ -9,7 +9,6 @@ import lombok.Value; import lombok.experimental.Accessors; import org.hypertrace.core.graphql.attributes.AttributeModel; -import org.hypertrace.core.graphql.attributes.AttributeModelScope; import org.hypertrace.core.graphql.attributes.AttributeStore; import org.hypertrace.core.graphql.common.schema.attributes.AttributeQueryable; import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeKeyArgument; @@ -36,14 +35,14 @@ class DefaultAttributeRequestBuilder implements AttributeRequestBuilder { @Override public Single buildForId( - GraphQlRequestContext context, AttributeModelScope attributeScope) { + GraphQlRequestContext context, String attributeScope) { return this.attributeStore.getIdAttribute(context, attributeScope).map(this::buildForAttribute); } @Override public Observable buildForAttributeQueryableSelectionSet( GraphQlRequestContext context, - AttributeModelScope attributeScope, + String attributeScope, DataFetchingFieldSelectionSet attributeQueryableSelectionSet) { return Observable.fromStream( this.getAttributeKeysForAttributeQueryableSelectionSet(attributeQueryableSelectionSet)) @@ -54,7 +53,7 @@ public Observable buildForAttributeQueryableSelectionSet( @Override public Observable buildForAttributeQueryableFields( GraphQlRequestContext context, - AttributeModelScope attributeScope, + String attributeScope, Stream attributeQueryableFields) { return Observable.fromStream(attributeQueryableFields) .map(SelectedField::getSelectionSet) @@ -67,7 +66,7 @@ public Observable buildForAttributeQueryableFields( @Override public Observable buildForAttributeQueryableFieldsAndId( GraphQlRequestContext context, - AttributeModelScope attributeScope, + String attributeScope, Stream attributeQueryableFields) { return this.buildForAttributeQueryableFields(context, attributeScope, attributeQueryableFields) .mergeWith(this.buildForId(context, attributeScope)) @@ -76,7 +75,7 @@ public Observable buildForAttributeQueryableFieldsAndId( @Override public Single buildForKey( - GraphQlRequestContext context, AttributeModelScope requestScope, String attributeKey) { + GraphQlRequestContext context, String requestScope, String attributeKey) { return this.attributeStore .get(context, requestScope, attributeKey) .map(this::buildForAttribute); diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilder.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilder.java index d68764d7..2cb78eea 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilder.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilder.java @@ -1,20 +1,20 @@ package org.hypertrace.core.graphql.common.request; +import io.reactivex.rxjava3.core.Maybe; import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.Single; import java.util.Collection; import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; import javax.inject.Inject; import lombok.Value; import lombok.experimental.Accessors; -import org.hypertrace.core.graphql.attributes.AttributeModelScope; import org.hypertrace.core.graphql.attributes.AttributeStore; import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterOperatorType; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterType; -import org.hypertrace.core.graphql.common.utils.Converter; import org.hypertrace.core.graphql.common.utils.attributes.AttributeAssociator; import org.hypertrace.core.graphql.context.GraphQlRequestContext; @@ -22,23 +22,19 @@ public class DefaultFilterRequestBuilder implements FilterRequestBuilder { private final AttributeAssociator attributeAssociator; private final AttributeStore attributeStore; - private final Converter scopeConverter; @Inject DefaultFilterRequestBuilder( - AttributeAssociator attributeAssociator, - AttributeStore attributeStore, - Converter scopeConverter) { + AttributeAssociator attributeAssociator, AttributeStore attributeStore) { this.attributeAssociator = attributeAssociator; this.attributeStore = attributeStore; - this.scopeConverter = scopeConverter; } @Override public Single>> build( GraphQlRequestContext requestContext, - AttributeModelScope scope, + String scope, Collection filterArguments) { return Observable.fromIterable(filterArguments) .flatMapSingle(filter -> this.normalize(requestContext, scope, filter)) @@ -46,9 +42,7 @@ public Single>> build( } private Single> normalize( - GraphQlRequestContext requestContext, - AttributeModelScope scope, - FilterArgument filterArgument) { + GraphQlRequestContext requestContext, String scope, FilterArgument filterArgument) { switch (filterArgument.type()) { case STRING: case NUMERIC: @@ -60,8 +54,10 @@ private Single> normalize( filterArgument.key(), filterArgument.operator(), filterArgument.value()), FilterArgument::key); case ID: - return this.scopeConverter - .convert(filterArgument.idScope()) + return Maybe.fromOptional(Optional.ofNullable(filterArgument.idScope())) + .switchIfEmpty( + Single.error(new UnsupportedOperationException("ID filter must specify idScope"))) + .map(AttributeScope::getScopeString) .flatMap( foreignScope -> this.attributeStore.getForeignIdAttribute(requestContext, scope, foreignScope)) diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilder.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilder.java index bb2eb42c..a739cd94 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilder.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilder.java @@ -14,7 +14,6 @@ import javax.inject.Inject; import lombok.Value; import lombok.experimental.Accessors; -import org.hypertrace.core.graphql.attributes.AttributeModelScope; import org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument; import org.hypertrace.core.graphql.common.schema.results.ResultSet; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; @@ -53,7 +52,7 @@ class DefaultResultSetRequestBuilder implements ResultSetRequestBuilder { @Override public Single> build( GraphQlRequestContext context, - AttributeModelScope requestScope, + String requestScope, Map arguments, DataFetchingFieldSelectionSet selectionSet) { return this.build(context, requestScope, arguments, selectionSet, OrderArgument.class); @@ -62,7 +61,7 @@ public Single> build( @Override public Single> build( GraphQlRequestContext context, - AttributeModelScope requestScope, + String requestScope, Map arguments, DataFetchingFieldSelectionSet selectionSet, Class orderArgumentClass) { @@ -112,7 +111,7 @@ public Single> build( @Override public Single> build( GraphQlRequestContext context, - AttributeModelScope requestScope, + String requestScope, int limit, int offset, TimeRangeArgument timeRange, diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/FilterRequestBuilder.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/FilterRequestBuilder.java index e070a93c..6908e587 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/FilterRequestBuilder.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/FilterRequestBuilder.java @@ -3,13 +3,12 @@ import io.reactivex.rxjava3.core.Single; import java.util.Collection; import java.util.List; -import org.hypertrace.core.graphql.attributes.AttributeModelScope; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; import org.hypertrace.core.graphql.context.GraphQlRequestContext; public interface FilterRequestBuilder { Single>> build( GraphQlRequestContext requestContext, - AttributeModelScope scope, + String scope, Collection filterArguments); } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequestBuilder.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequestBuilder.java index 8eb78b50..f4216648 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequestBuilder.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequestBuilder.java @@ -7,7 +7,6 @@ import java.util.List; import java.util.Map; import java.util.stream.Stream; -import org.hypertrace.core.graphql.attributes.AttributeModelScope; import org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; @@ -16,20 +15,20 @@ public interface ResultSetRequestBuilder { Single> build( GraphQlRequestContext context, - AttributeModelScope requestScope, + String requestScope, Map arguments, DataFetchingFieldSelectionSet selectionSet); Single> build( GraphQlRequestContext context, - AttributeModelScope requestScope, + String requestScope, Map arguments, DataFetchingFieldSelectionSet selectionSet, Class orderArgumentClass); Single> build( GraphQlRequestContext context, - AttributeModelScope requestScope, + String requestScope, int limit, int offset, TimeRangeArgument timeRange, diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeScope.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeScope.java index f6874852..ec91c921 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeScope.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeScope.java @@ -6,4 +6,10 @@ public interface AttributeScope { // Should be provided for the specific attributes available String TYPE_NAME = "AttributeScope"; + + // Temporary measure until the scope enum is removed entirely + String getScopeString(); + + // TODO - rename all scopes to match external names and remove this + String getExternalScopeString(); } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeAssociator.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeAssociator.java index fcb5e5cf..b527111e 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeAssociator.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeAssociator.java @@ -4,7 +4,6 @@ import io.reactivex.rxjava3.core.Single; import java.util.Collection; import java.util.function.Function; -import org.hypertrace.core.graphql.attributes.AttributeModelScope; import org.hypertrace.core.graphql.common.request.AttributeAssociation; import org.hypertrace.core.graphql.context.GraphQlRequestContext; @@ -12,13 +11,13 @@ public interface AttributeAssociator { Observable> associateAttributes( GraphQlRequestContext context, - AttributeModelScope requestScope, + String requestScope, Collection inputs, Function attributeKeyMapper); Single> associateAttribute( GraphQlRequestContext context, - AttributeModelScope requestScope, + String requestScope, T input, Function attributeKeyMapper); } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/DefaultAttributeAssociator.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/DefaultAttributeAssociator.java index a2d39518..48827820 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/DefaultAttributeAssociator.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/DefaultAttributeAssociator.java @@ -5,7 +5,6 @@ import java.util.Collection; import java.util.function.Function; import javax.inject.Inject; -import org.hypertrace.core.graphql.attributes.AttributeModelScope; import org.hypertrace.core.graphql.attributes.AttributeStore; import org.hypertrace.core.graphql.common.request.AttributeAssociation; import org.hypertrace.core.graphql.context.GraphQlRequestContext; @@ -22,7 +21,7 @@ class DefaultAttributeAssociator implements AttributeAssociator { @Override public Observable> associateAttributes( GraphQlRequestContext context, - AttributeModelScope requestScope, + String requestScope, Collection inputs, Function attributeKeyMapper) { return Observable.fromIterable(inputs) @@ -33,7 +32,7 @@ public Observable> associateAttributes( @Override public Single> associateAttribute( GraphQlRequestContext context, - AttributeModelScope requestScope, + String requestScope, T input, Function attributeKeyMapper) { return this.attributeStore diff --git a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/deserialization/FilterArgumentDeserializationConfigTest.java b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/deserialization/FilterArgumentDeserializationConfigTest.java index 5a28ef05..3d4fc8e4 100644 --- a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/deserialization/FilterArgumentDeserializationConfigTest.java +++ b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/deserialization/FilterArgumentDeserializationConfigTest.java @@ -26,7 +26,17 @@ class FilterArgumentDeserializationConfigTest { private ArgumentDeserializer argumentDeserializer; private enum TestAttributeScope implements AttributeScope { - SCOPE + SCOPE; + + @Override + public String getScopeString() { + return "SCOPE"; + } + + @Override + public String getExternalScopeString() { + return "SCOPE"; + } } @BeforeEach diff --git a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilderTest.java b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilderTest.java index 3aaf2b94..df540da4 100644 --- a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilderTest.java +++ b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilderTest.java @@ -1,6 +1,5 @@ package org.hypertrace.core.graphql.common.request; -import static org.hypertrace.core.graphql.attributes.AttributeModelScope.SPAN; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; @@ -49,13 +48,13 @@ void canBuildRequestForSelectionSet() { .thenReturn(Stream.of(this.mockSelectedField)); when(this.mockArgumentDeserializer.deserializePrimitive(any(), eq(AttributeKeyArgument.class))) .thenReturn(Optional.of("fooKey")); - when(this.mockAttributeStore.get(eq(this.mockContext), eq(SPAN), eq("fooKey"))) + when(this.mockAttributeStore.get(eq(this.mockContext), eq("SPAN"), eq("fooKey"))) .thenReturn(Single.just(this.mockAttribute)); when(this.mockAttribute.id()).thenReturn("fooId"); List returned = this.requestBuilder - .buildForAttributeQueryableSelectionSet(this.mockContext, SPAN, this.mockSelectionSet) + .buildForAttributeQueryableSelectionSet(this.mockContext, "SPAN", this.mockSelectionSet) .toList() .blockingGet(); diff --git a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilderTest.java b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilderTest.java index 14bd0cac..2adb9844 100644 --- a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilderTest.java +++ b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilderTest.java @@ -15,7 +15,6 @@ import java.util.Set; import java.util.stream.Stream; import org.hypertrace.core.graphql.attributes.AttributeModel; -import org.hypertrace.core.graphql.attributes.AttributeModelScope; import org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; @@ -66,12 +65,12 @@ void beforeEach() { @Test void canBuildRequest() { when(this.mockAttributeAssociator.associateAttributes( - any(), eq(AttributeModelScope.SPAN), eq(List.of(this.mockOrderArgument)), any())) + any(), eq("SPAN"), eq(List.of(this.mockOrderArgument)), any())) .thenReturn( Observable.just( AttributeAssociation.of(this.mockFooAttribute, this.mockOrderArgument))); when(this.mockFilterBuilder.build( - any(), eq(AttributeModelScope.SPAN), eq(List.of(this.mockFilterArgument)))) + any(), eq("SPAN"), eq(List.of(this.mockFilterArgument)))) .thenReturn( Single.just( List.of(AttributeAssociation.of(this.mockFooAttribute, this.mockFilterArgument)))); @@ -97,7 +96,7 @@ void canBuildRequest() { this.requestBuilder .build( this.mockContext, - AttributeModelScope.SPAN, + "SPAN", Collections.emptyMap(), // Arg parser mocked, don't need values this.mockSelectionSet) .blockingGet(); diff --git a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/MetadataSchemaModule.java b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/MetadataSchemaModule.java index a532b04b..4be2d940 100644 --- a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/MetadataSchemaModule.java +++ b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/MetadataSchemaModule.java @@ -4,8 +4,8 @@ import com.google.inject.Key; import com.google.inject.TypeLiteral; import com.google.inject.multibindings.Multibinder; +import java.util.Optional; import org.hypertrace.core.graphql.attributes.AttributeModelMetricAggregationType; -import org.hypertrace.core.graphql.attributes.AttributeModelScope; import org.hypertrace.core.graphql.attributes.AttributeModelType; import org.hypertrace.core.graphql.attributes.AttributeStore; import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; @@ -24,7 +24,7 @@ protected void configure() { requireBinding(AttributeStore.class); - requireBinding(Key.get(new TypeLiteral>() {})); + requireBinding(Key.get(new TypeLiteral>>() {})); requireBinding(Key.get(new TypeLiteral>() {})); requireBinding( Key.get( diff --git a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/DefaultAttributeMetadata.java b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/DefaultAttributeMetadata.java index de97915c..4d27238b 100644 --- a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/DefaultAttributeMetadata.java +++ b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/DefaultAttributeMetadata.java @@ -14,6 +14,7 @@ @Accessors(fluent = true) class DefaultAttributeMetadata implements AttributeMetadata { AttributeScope scope; + String scopeString; String name; String displayName; AttributeType type; diff --git a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilder.java b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilder.java index daf25bbb..fff297d2 100644 --- a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilder.java +++ b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilder.java @@ -6,11 +6,11 @@ import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.Single; import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; import javax.inject.Inject; import org.hypertrace.core.graphql.attributes.AttributeModel; import org.hypertrace.core.graphql.attributes.AttributeModelMetricAggregationType; -import org.hypertrace.core.graphql.attributes.AttributeModelScope; import org.hypertrace.core.graphql.attributes.AttributeModelType; import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; import org.hypertrace.core.graphql.common.schema.attributes.AttributeType; @@ -20,14 +20,14 @@ public class MetadataResponseBuilder { - private final Converter scopeConverter; + private final Converter> scopeConverter; private final Converter typeConverter; private final Converter aggregationTypeConverter; @Inject MetadataResponseBuilder( - Converter scopeConverter, + Converter> scopeConverter, Converter typeConverter, Converter aggregationTypeConverter) { @@ -47,9 +47,10 @@ private Maybe build(AttributeModel model) { this.scopeConverter.convert(model.scope()), this.convertMetricAggregationTypes(model.supportedMetricAggregationTypes()), this.typeConverter.convert(model.type()), - (scope, aggregations, type) -> + (scopeEnum, aggregations, type) -> new DefaultAttributeMetadata( - scope, + scopeEnum.orElse(null), + scopeEnum.map(AttributeScope::getExternalScopeString).orElseGet(model::scope), model.key(), model.displayName(), type, diff --git a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/schema/AttributeMetadata.java b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/schema/AttributeMetadata.java index 9c5e76f1..dca2f811 100644 --- a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/schema/AttributeMetadata.java +++ b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/schema/AttributeMetadata.java @@ -1,5 +1,6 @@ package org.hypertrace.core.graphql.metadata.schema; +import graphql.annotations.annotationTypes.GraphQLDeprecate; import graphql.annotations.annotationTypes.GraphQLField; import graphql.annotations.annotationTypes.GraphQLName; import graphql.annotations.annotationTypes.GraphQLNonNull; @@ -12,6 +13,7 @@ public interface AttributeMetadata { String TYPE_NAME = "AttributeMetadata"; String ATTRIBUTE_METADATA_SCOPE_NAME = "scope"; + String ATTRIBUTE_METADATA_SCOPE_STRING_NAME = "scopeString"; String ATTRIBUTE_METADATA_NAME_NAME = "name"; String ATTRIBUTE_METADATA_DISPLAY_NAME = "displayName"; String ATTRIBUTE_METADATA_TYPE_NAME = "type"; @@ -21,10 +23,16 @@ public interface AttributeMetadata { String ATTRIBUTE_METADATA_GROUPABLE_NAME = "groupable"; @GraphQLField - @GraphQLNonNull @GraphQLName(ATTRIBUTE_METADATA_SCOPE_NAME) + @GraphQLDeprecate + @Deprecated AttributeScope scope(); + @GraphQLField + @GraphQLNonNull + @GraphQLName(ATTRIBUTE_METADATA_SCOPE_STRING_NAME) + String scopeString(); + @GraphQLField @GraphQLNonNull @GraphQLName(ATTRIBUTE_METADATA_NAME_NAME) diff --git a/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilderTest.java b/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilderTest.java index 3f0b584b..4c307e7d 100644 --- a/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilderTest.java +++ b/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilderTest.java @@ -8,9 +8,9 @@ import io.reactivex.rxjava3.core.Single; import java.util.List; +import java.util.Optional; import org.hypertrace.core.graphql.attributes.AttributeModel; import org.hypertrace.core.graphql.attributes.AttributeModelMetricAggregationType; -import org.hypertrace.core.graphql.attributes.AttributeModelScope; import org.hypertrace.core.graphql.attributes.AttributeModelType; import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; import org.hypertrace.core.graphql.common.schema.attributes.AttributeType; @@ -27,7 +27,7 @@ class MetadataResponseBuilderTest { private MetadataResponseBuilder builder; private List models; - @Mock private Converter mockScopeConverter; + @Mock private Converter> mockScopeConverter; @Mock private Converter mockTypeConverter; @Mock private AttributeScope mockScope; @@ -41,7 +41,7 @@ void beforeEach() { new MetadataResponseBuilder( this.mockScopeConverter, this.mockTypeConverter, this.mockAggregationTypeConverter); AttributeModel mockModel = mock(AttributeModel.class); - when(mockModel.scope()).thenReturn(AttributeModelScope.TRACE); + when(mockModel.scope()).thenReturn("TRACE"); when(mockModel.key()).thenReturn("key"); when(mockModel.displayName()).thenReturn("display name"); when(mockModel.type()).thenReturn(AttributeModelType.STRING); @@ -52,8 +52,8 @@ void beforeEach() { .thenReturn( List.of( AttributeModelMetricAggregationType.SUM, AttributeModelMetricAggregationType.AVG)); - when(this.mockScopeConverter.convert(eq(AttributeModelScope.TRACE))) - .thenReturn(Single.just(this.mockScope)); + when(this.mockScopeConverter.convert("TRACE")) + .thenReturn(Single.just(Optional.of(this.mockScope))); when(this.mockTypeConverter.convert(eq(AttributeModelType.STRING))) .thenReturn(Single.just(AttributeType.STRING)); @@ -70,6 +70,7 @@ void canBuildResponse() { List.of( DefaultAttributeMetadata.builder() .scope(this.mockScope) + .scopeString("TRACE") .name("key") .displayName("display name") .type(AttributeType.STRING) @@ -96,6 +97,7 @@ void filtersAnyAggregationConversionErrors() { List.of( DefaultAttributeMetadata.builder() .scope(this.mockScope) + .scopeString("TRACE") .name("key") .displayName("display name") .type(AttributeType.STRING) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 75fb1c74..1f1dbeb7 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -8,7 +8,7 @@ dependencies { api("org.hypertrace.core.grpcutils:grpc-context-utils:0.3.0") api("org.hypertrace.core.grpcutils:grpc-client-utils:0.3.0") api("org.hypertrace.gateway.service:gateway-service-api:0.1.1") - api("org.hypertrace.core.attribute.service:attribute-service-api:0.4.3") + api("org.hypertrace.core.attribute.service:attribute-service-api:0.6.0") api("com.google.inject:guice:4.2.3") api("com.graphql-java:graphql-java:14.0") diff --git a/hypertrace-core-graphql-span-schema/build.gradle.kts b/hypertrace-core-graphql-span-schema/build.gradle.kts index 1c3544c8..9fd1926c 100644 --- a/hypertrace-core-graphql-span-schema/build.gradle.kts +++ b/hypertrace-core-graphql-span-schema/build.gradle.kts @@ -11,6 +11,8 @@ dependencies { annotationProcessor("org.projectlombok:lombok") compileOnly("org.projectlombok:lombok") + compileOnly(project(":hypertrace-core-graphql-attribute-scope")) + implementation("org.slf4j:slf4j-api") implementation("io.reactivex.rxjava3:rxjava") implementation("org.hypertrace.gateway.service:gateway-service-api") diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/fetcher/SpanFetcher.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/fetcher/SpanFetcher.java index e774cb28..7b07805f 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/fetcher/SpanFetcher.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/fetcher/SpanFetcher.java @@ -4,7 +4,7 @@ import graphql.schema.DataFetchingEnvironment; import java.util.concurrent.CompletableFuture; import javax.inject.Inject; -import org.hypertrace.core.graphql.attributes.AttributeModelScope; +import org.hypertrace.core.graphql.atttributes.scopes.HypertraceCoreAttributeScopeString; import org.hypertrace.core.graphql.common.fetcher.InjectableDataFetcher; import org.hypertrace.core.graphql.common.request.ResultSetRequestBuilder; import org.hypertrace.core.graphql.span.dao.SpanDao; @@ -31,7 +31,7 @@ public CompletableFuture get(DataFetchingEnvironment environment) return this.requestBuilder .build( environment.getContext(), - AttributeModelScope.SPAN, + HypertraceCoreAttributeScopeString.SPAN, environment.getArguments(), environment.getSelectionSet()) .flatMap(this.spanDao::getSpans) diff --git a/hypertrace-core-graphql-trace-schema/build.gradle.kts b/hypertrace-core-graphql-trace-schema/build.gradle.kts index ee119976..aaa74639 100644 --- a/hypertrace-core-graphql-trace-schema/build.gradle.kts +++ b/hypertrace-core-graphql-trace-schema/build.gradle.kts @@ -11,6 +11,8 @@ dependencies { annotationProcessor("org.projectlombok:lombok") compileOnly("org.projectlombok:lombok") + compileOnly(project(":hypertrace-core-graphql-attribute-scope")) + implementation("org.slf4j:slf4j-api") implementation("io.reactivex.rxjava3:rxjava") implementation("org.hypertrace.gateway.service:gateway-service-api") diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceRequestBuilder.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceRequestBuilder.java index 62122547..b20580c9 100644 --- a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceRequestBuilder.java +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceRequestBuilder.java @@ -24,30 +24,26 @@ class GatewayServiceTraceRequestBuilder { private final Converter>, List> orderConverter; private final Converter, Set> selectionConverter; - private final GatewayServiceTraceTypeConverter traceTypeConverter; @Inject GatewayServiceTraceRequestBuilder( Converter>, Filter> filterConverter, Converter>, List> orderConverter, - Converter, Set> selectionConverter, - GatewayServiceTraceTypeConverter traceTypeConverter) { + Converter, Set> selectionConverter) { this.filterConverter = filterConverter; this.orderConverter = orderConverter; this.selectionConverter = selectionConverter; - this.traceTypeConverter = traceTypeConverter; } Single buildRequest(TraceRequest request) { return zip( - this.traceTypeConverter.convert(request.traceType()), this.selectionConverter.convert(request.resultSetRequest().attributes()), this.orderConverter.convert(request.resultSetRequest().orderArguments()), this.filterConverter.convert(request.resultSetRequest().filterArguments()), - (traceScope, selections, orderBys, filters) -> + (selections, orderBys, filters) -> TracesRequest.newBuilder() - .setScope(traceScope) + .setScope(request.traceType().getScopeString()) .setStartTimeMillis( request.resultSetRequest().timeRange().startTime().toEpochMilli()) .setEndTimeMillis(request.resultSetRequest().timeRange().endTime().toEpochMilli()) diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceTypeConverter.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceTypeConverter.java deleted file mode 100644 index 15810527..00000000 --- a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceTypeConverter.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.hypertrace.core.graphql.trace.dao; - -import io.reactivex.rxjava3.core.Single; -import java.util.UnknownFormatConversionException; -import org.hypertrace.core.graphql.common.utils.Converter; -import org.hypertrace.core.graphql.trace.schema.arguments.TraceType; - -class GatewayServiceTraceTypeConverter implements Converter { - - private static final String WELL_KNOWN_PLATFORM_STRING_TRACE = "TRACE"; - private static final String WELL_KNOWN_PLATFORM_STRING_API_TRACE = "API_TRACE"; - private static final String WELL_KNOWN_PLATFORM_STRING_BACKEND_TRACE = "BACKEND_TRACE"; - - @Override - public Single convert(TraceType explorerContext) { - switch (explorerContext) { - case TRACE: - return Single.just(WELL_KNOWN_PLATFORM_STRING_TRACE); - case API_TRACE: - return Single.just(WELL_KNOWN_PLATFORM_STRING_API_TRACE); - case BACKEND_TRACE: - return Single.just(WELL_KNOWN_PLATFORM_STRING_BACKEND_TRACE); - default: - return Single.error( - new UnknownFormatConversionException( - String.format( - "Unable to convert unknown trace type '%s'", explorerContext.name()))); - } - } -} diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/DefaultTraceRequestBuilder.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/DefaultTraceRequestBuilder.java index 4b2d59e7..4167e64e 100644 --- a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/DefaultTraceRequestBuilder.java +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/DefaultTraceRequestBuilder.java @@ -6,7 +6,6 @@ import javax.inject.Inject; import lombok.Value; import lombok.experimental.Accessors; -import org.hypertrace.core.graphql.attributes.AttributeModelScope; import org.hypertrace.core.graphql.common.request.ResultSetRequest; import org.hypertrace.core.graphql.common.request.ResultSetRequestBuilder; import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; @@ -19,16 +18,12 @@ class DefaultTraceRequestBuilder implements TraceRequestBuilder { private final ResultSetRequestBuilder resultSetRequestBuilder; private final ArgumentDeserializer argumentDeserializer; - private final TraceTypeToAttributeModelScopeConverter scopeConverter; @Inject DefaultTraceRequestBuilder( - ResultSetRequestBuilder resultSetRequestBuilder, - ArgumentDeserializer argumentDeserializer, - TraceTypeToAttributeModelScopeConverter scopeConverter) { + ResultSetRequestBuilder resultSetRequestBuilder, ArgumentDeserializer argumentDeserializer) { this.resultSetRequestBuilder = resultSetRequestBuilder; this.argumentDeserializer = argumentDeserializer; - this.scopeConverter = scopeConverter; } @Override @@ -42,20 +37,17 @@ public Single build( .deserializePrimitive(arguments, TraceTypeArgument.class) .orElseThrow(); - return this.scopeConverter - .convert(traceType) - .flatMap(scope -> this.build(context, traceType, scope, arguments, selectionSet)); + return this.build(context, traceType, arguments, selectionSet); } private Single build( GraphQlRequestContext context, TraceType traceType, - AttributeModelScope scope, Map arguments, DataFetchingFieldSelectionSet selectionSet) { return this.resultSetRequestBuilder - .build(context, scope, arguments, selectionSet) + .build(context, traceType.getScopeString(), arguments, selectionSet) .map(resultSetRequest -> new DefaultTraceRequest(context, resultSetRequest, traceType)); } diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/TraceTypeToAttributeModelScopeConverter.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/TraceTypeToAttributeModelScopeConverter.java deleted file mode 100644 index b8ffcc4e..00000000 --- a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/TraceTypeToAttributeModelScopeConverter.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.hypertrace.core.graphql.trace.request; - -import io.reactivex.rxjava3.core.Single; -import java.util.UnknownFormatConversionException; -import org.hypertrace.core.graphql.attributes.AttributeModelScope; -import org.hypertrace.core.graphql.common.utils.Converter; -import org.hypertrace.core.graphql.trace.schema.arguments.TraceType; - -class TraceTypeToAttributeModelScopeConverter implements Converter { - - @Override - public Single convert(TraceType traceType) { - switch (traceType) { - case TRACE: - return Single.just(AttributeModelScope.TRACE); - case API_TRACE: - return Single.just(AttributeModelScope.API_TRACE); - case BACKEND_TRACE: - return Single.just(AttributeModelScope.BACKEND_TRACE); - default: - return Single.error( - new UnknownFormatConversionException( - String.format("Unable to convert unknown trace type '%s'", traceType.name()))); - } - } -} diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/schema/arguments/TraceType.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/schema/arguments/TraceType.java index 861600e0..4ac69090 100644 --- a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/schema/arguments/TraceType.java +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/schema/arguments/TraceType.java @@ -10,4 +10,8 @@ public enum TraceType { BACKEND_TRACE; static final String TYPE_NAME = "TraceType"; + + public String getScopeString() { + return name(); + } } From 5d5cf1bd52924464fb5deab60d54afb0d718c8bb Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Thu, 22 Oct 2020 06:24:27 -0700 Subject: [PATCH 026/173] refactor: support string for id based filters (#23) --- .../FilterArgumentDeserializationConfig.java | 5 +- .../request/DefaultFilterRequestBuilder.java | 8 +- .../arguments/filter/FilterArgument.java | 10 +- ...lterArgumentDeserializationConfigTest.java | 4 +- .../DefaultFilterRequestBuilderTest.java | 107 ++++++++++++++++++ 5 files changed, 127 insertions(+), 7 deletions(-) create mode 100644 hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilderTest.java diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/FilterArgumentDeserializationConfig.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/FilterArgumentDeserializationConfig.java index e45425dc..1385d4e0 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/FilterArgumentDeserializationConfig.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/FilterArgumentDeserializationConfig.java @@ -59,6 +59,9 @@ private static class DefaultFilterArgument implements FilterArgument { Object value; @JsonProperty(FILTER_ARGUMENT_ID_TYPE) - AttributeScope idScope; + AttributeScope idType; + + @JsonProperty(FILTER_ARGUMENT_ID_SCOPE) + String idScope; } } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilder.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilder.java index 2cb78eea..4084970a 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilder.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilder.java @@ -54,10 +54,11 @@ private Single> normalize( filterArgument.key(), filterArgument.operator(), filterArgument.value()), FilterArgument::key); case ID: - return Maybe.fromOptional(Optional.ofNullable(filterArgument.idScope())) + return Maybe.fromOptional(Optional.ofNullable(filterArgument.idType())) + .map(AttributeScope::getScopeString) + .switchIfEmpty(Maybe.fromOptional(Optional.ofNullable(filterArgument.idScope()))) .switchIfEmpty( Single.error(new UnsupportedOperationException("ID filter must specify idScope"))) - .map(AttributeScope::getScopeString) .flatMap( foreignScope -> this.attributeStore.getForeignIdAttribute(requestContext, scope, foreignScope)) @@ -83,6 +84,7 @@ private static class NormalizedFilter implements FilterArgument { String key; FilterOperatorType operator; Object value; - AttributeScope idScope = null; + String idScope = null; + AttributeScope idType = null; } } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterArgument.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterArgument.java index 71b8c897..40f8352d 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterArgument.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterArgument.java @@ -1,5 +1,6 @@ package org.hypertrace.core.graphql.common.schema.results.arguments.filter; +import graphql.annotations.annotationTypes.GraphQLDeprecate; import graphql.annotations.annotationTypes.GraphQLField; import graphql.annotations.annotationTypes.GraphQLName; import graphql.annotations.annotationTypes.GraphQLNonNull; @@ -16,6 +17,7 @@ public interface FilterArgument { String FILTER_ARGUMENT_OPERATOR = "operator"; String FILTER_ARGUMENT_VALUE = "value"; String FILTER_ARGUMENT_ID_TYPE = "idType"; // TODO rename + String FILTER_ARGUMENT_ID_SCOPE = "idScope"; @GraphQLField @GraphQLNonNull @@ -40,5 +42,11 @@ public interface FilterArgument { @GraphQLField @GraphQLName(FILTER_ARGUMENT_ID_TYPE) @Nullable - AttributeScope idScope(); + @GraphQLDeprecate + AttributeScope idType(); + + @GraphQLField + @GraphQLName(FILTER_ARGUMENT_ID_SCOPE) + @Nullable + String idScope(); } diff --git a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/deserialization/FilterArgumentDeserializationConfigTest.java b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/deserialization/FilterArgumentDeserializationConfigTest.java index 3d4fc8e4..18d2b1fa 100644 --- a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/deserialization/FilterArgumentDeserializationConfigTest.java +++ b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/deserialization/FilterArgumentDeserializationConfigTest.java @@ -35,7 +35,7 @@ public String getScopeString() { @Override public String getExternalScopeString() { - return "SCOPE"; + return name(); } } @@ -82,6 +82,6 @@ void deserializesValueIfPresent() { assertEquals(FilterOperatorType.EQUALS, result.get(0).operator()); assertEquals(FilterType.ATTRIBUTE, result.get(0).type()); assertEquals("fooValue", result.get(0).value()); - assertEquals(TestAttributeScope.SCOPE, result.get(0).idScope()); + assertEquals(TestAttributeScope.SCOPE, result.get(0).idType()); } } diff --git a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilderTest.java b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilderTest.java new file mode 100644 index 00000000..e2fbcb86 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilderTest.java @@ -0,0 +1,107 @@ +package org.hypertrace.core.graphql.common.request; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import io.reactivex.rxjava3.core.Single; +import java.util.List; +import org.hypertrace.core.graphql.attributes.AttributeModel; +import org.hypertrace.core.graphql.attributes.AttributeStore; +import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterOperatorType; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterType; +import org.hypertrace.core.graphql.common.utils.attributes.AttributeAssociator; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class DefaultFilterRequestBuilderTest { + @Mock AttributeAssociator mockAttributeAssociator; + @Mock AttributeStore mockAttributeStore; + @Mock GraphQlRequestContext mockRequestContext; + + private DefaultFilterRequestBuilder requestBuilder; + + @BeforeEach + void beforeEach() { + this.requestBuilder = + new DefaultFilterRequestBuilder(mockAttributeAssociator, mockAttributeStore); + } + + @Test + void canBuildIdFilterWithEnumScope() { + final FilterOperatorType filterOperatorType = FilterOperatorType.LESS_THAN; + final long filterValue = 42; + final FilterType filterType = FilterType.ID; + final String filterAttributeKey = "filterKey"; + final String idScopeString = "foreign_scope"; + final String currentScope = "primary_scope"; + + final AttributeScope idScope = mock(AttributeScope.class); + when(idScope.getScopeString()).thenReturn(idScopeString); + final FilterArgument filterArgument = mock(FilterArgument.class); + when(filterArgument.type()).thenReturn(filterType); + when(filterArgument.operator()).thenReturn(filterOperatorType); + when(filterArgument.value()).thenReturn(filterValue); + when(filterArgument.idType()).thenReturn(idScope); + + final AttributeModel mockForeignAttribute = mock(AttributeModel.class); + when(mockForeignAttribute.key()).thenReturn(filterAttributeKey); + + when(this.mockAttributeStore.getForeignIdAttribute( + mockRequestContext, currentScope, idScopeString)) + .thenReturn(Single.just(mockForeignAttribute)); + + AttributeAssociation builtFilter = + this.requestBuilder + .build(this.mockRequestContext, currentScope, List.of(filterArgument)) + .blockingGet() + .get(0); + + assertEquals(mockForeignAttribute, builtFilter.attribute()); + assertEquals(filterAttributeKey, builtFilter.value().key()); + assertEquals(filterOperatorType, builtFilter.value().operator()); + assertEquals(filterValue, builtFilter.value().value()); + assertEquals(FilterType.ATTRIBUTE, builtFilter.value().type()); + } + + @Test + void canBuildIdFilterWithStringScope() { + final FilterOperatorType filterOperatorType = FilterOperatorType.LESS_THAN; + final long filterValue = 42; + final FilterType filterType = FilterType.ID; + final String filterAttributeKey = "filterKey"; + final String idScope = "foreign_scope"; + final String currentScope = "primary_scope"; + + final FilterArgument filterArgument = mock(FilterArgument.class); + when(filterArgument.type()).thenReturn(filterType); + when(filterArgument.operator()).thenReturn(filterOperatorType); + when(filterArgument.value()).thenReturn(filterValue); + when(filterArgument.idScope()).thenReturn(idScope); + + final AttributeModel mockForeignAttribute = mock(AttributeModel.class); + when(mockForeignAttribute.key()).thenReturn(filterAttributeKey); + + when(this.mockAttributeStore.getForeignIdAttribute(mockRequestContext, currentScope, idScope)) + .thenReturn(Single.just(mockForeignAttribute)); + + AttributeAssociation builtFilter = + this.requestBuilder + .build(this.mockRequestContext, currentScope, List.of(filterArgument)) + .blockingGet() + .get(0); + + assertEquals(mockForeignAttribute, builtFilter.attribute()); + assertEquals(filterAttributeKey, builtFilter.value().key()); + assertEquals(filterOperatorType, builtFilter.value().operator()); + assertEquals(filterValue, builtFilter.value().value()); + assertEquals(FilterType.ATTRIBUTE, builtFilter.value().type()); + } +} From 1bb94a49b1d4700a3121a5f19fcd2ed92a8149fa Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Thu, 22 Oct 2020 09:55:00 -0700 Subject: [PATCH 027/173] refactor: remove enum on responses in favor of string (#24) * refactor: remove enum on responses in favor of string replacing the enum on response objects with a string version is actually backwards compatible since both strings and enums come through in json as strings. the deprecation of the enum on the responses was an extra step that can be skipped. * refactor: mark scope as non null on metadata --- .../scopes/HypertraceCoreAttributeScope.java | 5 ----- ...HypertraceCoreAttributeScopeConverter.java | 21 ------------------- .../HypertraceCoreAttributeScopeModule.java | 5 ----- .../schema/attributes/AttributeScope.java | 3 --- ...lterArgumentDeserializationConfigTest.java | 5 ----- .../metadata/MetadataSchemaModule.java | 1 - .../response/DefaultAttributeMetadata.java | 3 +-- .../response/MetadataResponseBuilder.java | 11 ++-------- .../metadata/schema/AttributeMetadata.java | 11 ++-------- .../response/MetadataResponseBuilderTest.java | 16 +++----------- 10 files changed, 8 insertions(+), 73 deletions(-) delete mode 100644 hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeConverter.java diff --git a/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScope.java b/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScope.java index 26b977ec..84dd191a 100644 --- a/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScope.java +++ b/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScope.java @@ -16,9 +16,4 @@ enum HypertraceCoreAttributeScope implements AttributeScope { public String getScopeString() { return this.scope; } - - @Override - public String getExternalScopeString() { - return this.name(); - } } diff --git a/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeConverter.java b/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeConverter.java deleted file mode 100644 index 04f89653..00000000 --- a/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeConverter.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.hypertrace.core.graphql.atttributes.scopes; - -import io.reactivex.rxjava3.core.Single; -import java.util.Optional; -import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; -import org.hypertrace.core.graphql.common.utils.Converter; - -class HypertraceCoreAttributeScopeConverter implements Converter> { - - @Override - public Single> convert(String scope) { - switch (scope) { - case HypertraceCoreAttributeScopeString.TRACE: - return Single.just(Optional.of(HypertraceCoreAttributeScope.TRACE)); - case HypertraceCoreAttributeScopeString.SPAN: - return Single.just(Optional.of(HypertraceCoreAttributeScope.SPAN)); - default: - return Single.just(Optional.empty()); - } - } -} diff --git a/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeModule.java b/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeModule.java index 445c73b5..342f29b2 100644 --- a/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeModule.java +++ b/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeModule.java @@ -9,10 +9,8 @@ import com.google.inject.Key; import com.google.inject.TypeLiteral; import com.google.inject.multibindings.Multibinder; -import java.util.Optional; import org.hypertrace.core.graphql.attributes.IdMapping; import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; -import org.hypertrace.core.graphql.common.utils.Converter; public class HypertraceCoreAttributeScopeModule extends AbstractModule { @@ -20,9 +18,6 @@ public class HypertraceCoreAttributeScopeModule extends AbstractModule { protected void configure() { bind(Key.get(new TypeLiteral>() {})) .toInstance(HypertraceCoreAttributeScope.class); - bind(Key.get(new TypeLiteral>>() {})) - .to(HypertraceCoreAttributeScopeConverter.class); - Multibinder idBinder = Multibinder.newSetBinder(binder(), IdMapping.class); idBinder.addBinding().toInstance(forId(SPAN, "id")); idBinder.addBinding().toInstance(forForeignId(SPAN, TRACE, "traceId")); diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeScope.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeScope.java index ec91c921..2b38062c 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeScope.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeScope.java @@ -9,7 +9,4 @@ public interface AttributeScope { // Temporary measure until the scope enum is removed entirely String getScopeString(); - - // TODO - rename all scopes to match external names and remove this - String getExternalScopeString(); } diff --git a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/deserialization/FilterArgumentDeserializationConfigTest.java b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/deserialization/FilterArgumentDeserializationConfigTest.java index 18d2b1fa..f4461393 100644 --- a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/deserialization/FilterArgumentDeserializationConfigTest.java +++ b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/deserialization/FilterArgumentDeserializationConfigTest.java @@ -32,11 +32,6 @@ private enum TestAttributeScope implements AttributeScope { public String getScopeString() { return "SCOPE"; } - - @Override - public String getExternalScopeString() { - return name(); - } } @BeforeEach diff --git a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/MetadataSchemaModule.java b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/MetadataSchemaModule.java index 4be2d940..cf4f1500 100644 --- a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/MetadataSchemaModule.java +++ b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/MetadataSchemaModule.java @@ -24,7 +24,6 @@ protected void configure() { requireBinding(AttributeStore.class); - requireBinding(Key.get(new TypeLiteral>>() {})); requireBinding(Key.get(new TypeLiteral>() {})); requireBinding( Key.get( diff --git a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/DefaultAttributeMetadata.java b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/DefaultAttributeMetadata.java index 4d27238b..15d78298 100644 --- a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/DefaultAttributeMetadata.java +++ b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/DefaultAttributeMetadata.java @@ -13,8 +13,7 @@ @Builder @Accessors(fluent = true) class DefaultAttributeMetadata implements AttributeMetadata { - AttributeScope scope; - String scopeString; + String scope; String name; String displayName; AttributeType type; diff --git a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilder.java b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilder.java index fff297d2..c367c9d7 100644 --- a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilder.java +++ b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilder.java @@ -6,13 +6,11 @@ import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.Single; import java.util.List; -import java.util.Optional; import java.util.stream.Collectors; import javax.inject.Inject; import org.hypertrace.core.graphql.attributes.AttributeModel; import org.hypertrace.core.graphql.attributes.AttributeModelMetricAggregationType; import org.hypertrace.core.graphql.attributes.AttributeModelType; -import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; import org.hypertrace.core.graphql.common.schema.attributes.AttributeType; import org.hypertrace.core.graphql.common.schema.attributes.MetricAggregationType; import org.hypertrace.core.graphql.common.utils.Converter; @@ -20,18 +18,15 @@ public class MetadataResponseBuilder { - private final Converter> scopeConverter; private final Converter typeConverter; private final Converter aggregationTypeConverter; @Inject MetadataResponseBuilder( - Converter> scopeConverter, Converter typeConverter, Converter aggregationTypeConverter) { - this.scopeConverter = scopeConverter; this.typeConverter = typeConverter; this.aggregationTypeConverter = aggregationTypeConverter; } @@ -44,13 +39,11 @@ public Single> build(List modelList) { private Maybe build(AttributeModel model) { return zip( - this.scopeConverter.convert(model.scope()), this.convertMetricAggregationTypes(model.supportedMetricAggregationTypes()), this.typeConverter.convert(model.type()), - (scopeEnum, aggregations, type) -> + (aggregations, type) -> new DefaultAttributeMetadata( - scopeEnum.orElse(null), - scopeEnum.map(AttributeScope::getExternalScopeString).orElseGet(model::scope), + model.scope(), model.key(), model.displayName(), type, diff --git a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/schema/AttributeMetadata.java b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/schema/AttributeMetadata.java index dca2f811..e2c2e6c5 100644 --- a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/schema/AttributeMetadata.java +++ b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/schema/AttributeMetadata.java @@ -13,7 +13,6 @@ public interface AttributeMetadata { String TYPE_NAME = "AttributeMetadata"; String ATTRIBUTE_METADATA_SCOPE_NAME = "scope"; - String ATTRIBUTE_METADATA_SCOPE_STRING_NAME = "scopeString"; String ATTRIBUTE_METADATA_NAME_NAME = "name"; String ATTRIBUTE_METADATA_DISPLAY_NAME = "displayName"; String ATTRIBUTE_METADATA_TYPE_NAME = "type"; @@ -22,16 +21,10 @@ public interface AttributeMetadata { String ATTRIBUTE_METADATA_SUPPORTED_AGGREGATIONS_NAME = "supportedAggregations"; String ATTRIBUTE_METADATA_GROUPABLE_NAME = "groupable"; - @GraphQLField - @GraphQLName(ATTRIBUTE_METADATA_SCOPE_NAME) - @GraphQLDeprecate - @Deprecated - AttributeScope scope(); - @GraphQLField @GraphQLNonNull - @GraphQLName(ATTRIBUTE_METADATA_SCOPE_STRING_NAME) - String scopeString(); + @GraphQLName(ATTRIBUTE_METADATA_SCOPE_NAME) + String scope(); @GraphQLField @GraphQLNonNull diff --git a/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilderTest.java b/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilderTest.java index 4c307e7d..5a98385f 100644 --- a/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilderTest.java +++ b/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilderTest.java @@ -8,11 +8,9 @@ import io.reactivex.rxjava3.core.Single; import java.util.List; -import java.util.Optional; import org.hypertrace.core.graphql.attributes.AttributeModel; import org.hypertrace.core.graphql.attributes.AttributeModelMetricAggregationType; import org.hypertrace.core.graphql.attributes.AttributeModelType; -import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; import org.hypertrace.core.graphql.common.schema.attributes.AttributeType; import org.hypertrace.core.graphql.common.schema.attributes.MetricAggregationType; import org.hypertrace.core.graphql.common.utils.Converter; @@ -27,9 +25,7 @@ class MetadataResponseBuilderTest { private MetadataResponseBuilder builder; private List models; - @Mock private Converter> mockScopeConverter; @Mock private Converter mockTypeConverter; - @Mock private AttributeScope mockScope; @Mock private Converter @@ -38,8 +34,7 @@ class MetadataResponseBuilderTest { @BeforeEach void beforeEach() { this.builder = - new MetadataResponseBuilder( - this.mockScopeConverter, this.mockTypeConverter, this.mockAggregationTypeConverter); + new MetadataResponseBuilder(this.mockTypeConverter, this.mockAggregationTypeConverter); AttributeModel mockModel = mock(AttributeModel.class); when(mockModel.scope()).thenReturn("TRACE"); when(mockModel.key()).thenReturn("key"); @@ -52,9 +47,6 @@ void beforeEach() { .thenReturn( List.of( AttributeModelMetricAggregationType.SUM, AttributeModelMetricAggregationType.AVG)); - when(this.mockScopeConverter.convert("TRACE")) - .thenReturn(Single.just(Optional.of(this.mockScope))); - when(this.mockTypeConverter.convert(eq(AttributeModelType.STRING))) .thenReturn(Single.just(AttributeType.STRING)); when(this.mockAggregationTypeConverter.convert(eq(AttributeModelMetricAggregationType.SUM))) @@ -69,8 +61,7 @@ void canBuildResponse() { assertEquals( List.of( DefaultAttributeMetadata.builder() - .scope(this.mockScope) - .scopeString("TRACE") + .scope("TRACE") .name("key") .displayName("display name") .type(AttributeType.STRING) @@ -96,8 +87,7 @@ void filtersAnyAggregationConversionErrors() { assertEquals( List.of( DefaultAttributeMetadata.builder() - .scope(this.mockScope) - .scopeString("TRACE") + .scope("TRACE") .name("key") .displayName("display name") .type(AttributeType.STRING) From 3b56839ca5ddb7257675bd586892e5b2fbda52a8 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Thu, 22 Oct 2020 14:55:33 -0700 Subject: [PATCH 028/173] fix: add backwards compatibility for existing scope names (#25) --- .../build.gradle.kts | 3 +++ .../HypertraceCoreAttributeScopeString.java | 0 .../build.gradle.kts | 2 ++ .../build.gradle.kts | 3 +++ .../common/request/CommonRequestModule.java | 2 ++ .../request/DefaultFilterRequestBuilder.java | 8 ++++++- .../AttributeScopeStringTranslator.java | 12 ++++++++++ .../attributes/AttributeUtilsModule.java | 1 + ...DefaultAttributeScopeStringTranslator.java | 23 +++++++++++++++++++ .../DefaultFilterRequestBuilderTest.java | 10 ++++++-- .../metadata/MetadataSchemaModule.java | 4 ++-- .../response/MetadataResponseBuilder.java | 8 +++++-- .../response/MetadataResponseBuilderTest.java | 11 ++++++--- .../build.gradle.kts | 2 +- .../build.gradle.kts | 2 +- settings.gradle.kts | 1 + 16 files changed, 80 insertions(+), 12 deletions(-) create mode 100644 hypertrace-core-graphql-attribute-scope-constants/build.gradle.kts rename {hypertrace-core-graphql-attribute-scope => hypertrace-core-graphql-attribute-scope-constants}/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeString.java (100%) create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeScopeStringTranslator.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/DefaultAttributeScopeStringTranslator.java diff --git a/hypertrace-core-graphql-attribute-scope-constants/build.gradle.kts b/hypertrace-core-graphql-attribute-scope-constants/build.gradle.kts new file mode 100644 index 00000000..0f14d1b1 --- /dev/null +++ b/hypertrace-core-graphql-attribute-scope-constants/build.gradle.kts @@ -0,0 +1,3 @@ +plugins { + `java-library` +} diff --git a/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeString.java b/hypertrace-core-graphql-attribute-scope-constants/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeString.java similarity index 100% rename from hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeString.java rename to hypertrace-core-graphql-attribute-scope-constants/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeString.java diff --git a/hypertrace-core-graphql-attribute-scope/build.gradle.kts b/hypertrace-core-graphql-attribute-scope/build.gradle.kts index e9974d55..a02bc157 100644 --- a/hypertrace-core-graphql-attribute-scope/build.gradle.kts +++ b/hypertrace-core-graphql-attribute-scope/build.gradle.kts @@ -7,4 +7,6 @@ dependencies { api("io.reactivex.rxjava3:rxjava") api(project(":hypertrace-core-graphql-attribute-store")) api(project(":hypertrace-core-graphql-common-schema")) + // These are kept in a separate project so they can be referenced by other projects without circular dependencies + compileOnly(project(":hypertrace-core-graphql-attribute-scope-constants")) } diff --git a/hypertrace-core-graphql-common-schema/build.gradle.kts b/hypertrace-core-graphql-common-schema/build.gradle.kts index 6ae5ef20..6189ebc3 100644 --- a/hypertrace-core-graphql-common-schema/build.gradle.kts +++ b/hypertrace-core-graphql-common-schema/build.gradle.kts @@ -15,8 +15,11 @@ dependencies { annotationProcessor("org.projectlombok:lombok") compileOnly("org.projectlombok:lombok") + compileOnly(project(":hypertrace-core-graphql-attribute-scope-constants")) + implementation(project(":hypertrace-core-graphql-deserialization")) implementation(project(":hypertrace-core-graphql-schema-utils")) + testImplementation("org.junit.jupiter:junit-jupiter") testImplementation("org.mockito:mockito-core") testImplementation("org.mockito:mockito-junit-jupiter") diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/CommonRequestModule.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/CommonRequestModule.java index 76e0052b..f4614fa5 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/CommonRequestModule.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/CommonRequestModule.java @@ -3,6 +3,7 @@ import com.google.inject.AbstractModule; import org.hypertrace.core.graphql.attributes.AttributeStore; import org.hypertrace.core.graphql.common.utils.attributes.AttributeAssociator; +import org.hypertrace.core.graphql.common.utils.attributes.AttributeScopeStringTranslator; import org.hypertrace.core.graphql.deserialization.ArgumentDeserializer; import org.hypertrace.core.graphql.utils.schema.GraphQlSelectionFinder; @@ -17,5 +18,6 @@ protected void configure() { requireBinding(ArgumentDeserializer.class); requireBinding(AttributeAssociator.class); requireBinding(GraphQlSelectionFinder.class); + requireBinding(AttributeScopeStringTranslator.class); } } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilder.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilder.java index 4084970a..99442e1a 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilder.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilder.java @@ -16,19 +16,24 @@ import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterOperatorType; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterType; import org.hypertrace.core.graphql.common.utils.attributes.AttributeAssociator; +import org.hypertrace.core.graphql.common.utils.attributes.AttributeScopeStringTranslator; import org.hypertrace.core.graphql.context.GraphQlRequestContext; public class DefaultFilterRequestBuilder implements FilterRequestBuilder { private final AttributeAssociator attributeAssociator; private final AttributeStore attributeStore; + private final AttributeScopeStringTranslator scopeTranslator; @Inject DefaultFilterRequestBuilder( - AttributeAssociator attributeAssociator, AttributeStore attributeStore) { + AttributeAssociator attributeAssociator, + AttributeStore attributeStore, + AttributeScopeStringTranslator scopeTranslator) { this.attributeAssociator = attributeAssociator; this.attributeStore = attributeStore; + this.scopeTranslator = scopeTranslator; } @Override @@ -59,6 +64,7 @@ private Single> normalize( .switchIfEmpty(Maybe.fromOptional(Optional.ofNullable(filterArgument.idScope()))) .switchIfEmpty( Single.error(new UnsupportedOperationException("ID filter must specify idScope"))) + .map(this.scopeTranslator::fromExternal) .flatMap( foreignScope -> this.attributeStore.getForeignIdAttribute(requestContext, scope, foreignScope)) diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeScopeStringTranslator.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeScopeStringTranslator.java new file mode 100644 index 00000000..ff80806d --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeScopeStringTranslator.java @@ -0,0 +1,12 @@ +package org.hypertrace.core.graphql.common.utils.attributes; + +/** + * This serves as a temporary bridge to keep the external names of scopes unchanged until + * the internal names can be changed to align. + */ +public interface AttributeScopeStringTranslator { + + String fromExternal(String external); + + String toExternal(String internal); +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeUtilsModule.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeUtilsModule.java index 63ff188f..1f436fc7 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeUtilsModule.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeUtilsModule.java @@ -26,6 +26,7 @@ protected void configure() { .to(AttributeModelMetricAggregationTypeConverter.class); bind(AttributeAssociator.class).to(DefaultAttributeAssociator.class); + bind(AttributeScopeStringTranslator.class).to(DefaultAttributeScopeStringTranslator.class); requireBinding(AttributeStore.class); } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/DefaultAttributeScopeStringTranslator.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/DefaultAttributeScopeStringTranslator.java new file mode 100644 index 00000000..5f0c2a83 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/DefaultAttributeScopeStringTranslator.java @@ -0,0 +1,23 @@ +package org.hypertrace.core.graphql.common.utils.attributes; + +import org.hypertrace.core.graphql.atttributes.scopes.HypertraceCoreAttributeScopeString; + +class DefaultAttributeScopeStringTranslator implements AttributeScopeStringTranslator { + private static final String SPAN_SCOPE_EXTERNAL_NAME = "SPAN"; + + @Override + public String fromExternal(String external) { + if (SPAN_SCOPE_EXTERNAL_NAME.equals(external)) { + return HypertraceCoreAttributeScopeString.SPAN; + } + return external; + } + + @Override + public String toExternal(String internal) { + if (HypertraceCoreAttributeScopeString.SPAN.equals(internal)) { + return SPAN_SCOPE_EXTERNAL_NAME; + } + return internal; + } +} diff --git a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilderTest.java b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilderTest.java index e2fbcb86..3451b14c 100644 --- a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilderTest.java +++ b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilderTest.java @@ -13,6 +13,7 @@ import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterOperatorType; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterType; import org.hypertrace.core.graphql.common.utils.attributes.AttributeAssociator; +import org.hypertrace.core.graphql.common.utils.attributes.AttributeScopeStringTranslator; import org.hypertrace.core.graphql.context.GraphQlRequestContext; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -25,13 +26,15 @@ class DefaultFilterRequestBuilderTest { @Mock AttributeAssociator mockAttributeAssociator; @Mock AttributeStore mockAttributeStore; @Mock GraphQlRequestContext mockRequestContext; + @Mock AttributeScopeStringTranslator mockScopeStringTranslator; private DefaultFilterRequestBuilder requestBuilder; @BeforeEach void beforeEach() { this.requestBuilder = - new DefaultFilterRequestBuilder(mockAttributeAssociator, mockAttributeStore); + new DefaultFilterRequestBuilder( + mockAttributeAssociator, mockAttributeStore, mockScopeStringTranslator); } @Test @@ -45,6 +48,7 @@ void canBuildIdFilterWithEnumScope() { final AttributeScope idScope = mock(AttributeScope.class); when(idScope.getScopeString()).thenReturn(idScopeString); + when(this.mockScopeStringTranslator.fromExternal(idScopeString)).thenReturn(idScopeString); final FilterArgument filterArgument = mock(FilterArgument.class); when(filterArgument.type()).thenReturn(filterType); when(filterArgument.operator()).thenReturn(filterOperatorType); @@ -78,17 +82,19 @@ void canBuildIdFilterWithStringScope() { final FilterType filterType = FilterType.ID; final String filterAttributeKey = "filterKey"; final String idScope = "foreign_scope"; + final String idScopeExternal = "foreign_scope_external"; final String currentScope = "primary_scope"; final FilterArgument filterArgument = mock(FilterArgument.class); when(filterArgument.type()).thenReturn(filterType); when(filterArgument.operator()).thenReturn(filterOperatorType); when(filterArgument.value()).thenReturn(filterValue); - when(filterArgument.idScope()).thenReturn(idScope); + when(filterArgument.idScope()).thenReturn(idScopeExternal); final AttributeModel mockForeignAttribute = mock(AttributeModel.class); when(mockForeignAttribute.key()).thenReturn(filterAttributeKey); + when(this.mockScopeStringTranslator.fromExternal(idScopeExternal)).thenReturn(idScope); when(this.mockAttributeStore.getForeignIdAttribute(mockRequestContext, currentScope, idScope)) .thenReturn(Single.just(mockForeignAttribute)); diff --git a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/MetadataSchemaModule.java b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/MetadataSchemaModule.java index cf4f1500..49ece31b 100644 --- a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/MetadataSchemaModule.java +++ b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/MetadataSchemaModule.java @@ -4,14 +4,13 @@ import com.google.inject.Key; import com.google.inject.TypeLiteral; import com.google.inject.multibindings.Multibinder; -import java.util.Optional; import org.hypertrace.core.graphql.attributes.AttributeModelMetricAggregationType; import org.hypertrace.core.graphql.attributes.AttributeModelType; import org.hypertrace.core.graphql.attributes.AttributeStore; -import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; import org.hypertrace.core.graphql.common.schema.attributes.AttributeType; import org.hypertrace.core.graphql.common.schema.attributes.MetricAggregationType; import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.core.graphql.common.utils.attributes.AttributeScopeStringTranslator; import org.hypertrace.core.graphql.spi.schema.GraphQlSchemaFragment; public class MetadataSchemaModule extends AbstractModule { @@ -29,5 +28,6 @@ protected void configure() { Key.get( new TypeLiteral< Converter>() {})); + requireBinding(AttributeScopeStringTranslator.class); } } diff --git a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilder.java b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilder.java index c367c9d7..dfc18fa7 100644 --- a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilder.java +++ b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilder.java @@ -14,6 +14,7 @@ import org.hypertrace.core.graphql.common.schema.attributes.AttributeType; import org.hypertrace.core.graphql.common.schema.attributes.MetricAggregationType; import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.core.graphql.common.utils.attributes.AttributeScopeStringTranslator; import org.hypertrace.core.graphql.metadata.schema.AttributeMetadata; public class MetadataResponseBuilder { @@ -21,14 +22,17 @@ public class MetadataResponseBuilder { private final Converter typeConverter; private final Converter aggregationTypeConverter; + private final AttributeScopeStringTranslator scopeStringTranslator; @Inject MetadataResponseBuilder( Converter typeConverter, Converter - aggregationTypeConverter) { + aggregationTypeConverter, + AttributeScopeStringTranslator scopeStringTranslator) { this.typeConverter = typeConverter; this.aggregationTypeConverter = aggregationTypeConverter; + this.scopeStringTranslator = scopeStringTranslator; } public Single> build(List modelList) { @@ -43,7 +47,7 @@ private Maybe build(AttributeModel model) { this.typeConverter.convert(model.type()), (aggregations, type) -> new DefaultAttributeMetadata( - model.scope(), + this.scopeStringTranslator.toExternal(model.scope()), model.key(), model.displayName(), type, diff --git a/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilderTest.java b/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilderTest.java index 5a98385f..d89aaf4f 100644 --- a/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilderTest.java +++ b/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilderTest.java @@ -14,6 +14,7 @@ import org.hypertrace.core.graphql.common.schema.attributes.AttributeType; import org.hypertrace.core.graphql.common.schema.attributes.MetricAggregationType; import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.core.graphql.common.utils.attributes.AttributeScopeStringTranslator; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -31,10 +32,13 @@ class MetadataResponseBuilderTest { private Converter mockAggregationTypeConverter; + @Mock private AttributeScopeStringTranslator mockScopeTranslator; + @BeforeEach void beforeEach() { this.builder = - new MetadataResponseBuilder(this.mockTypeConverter, this.mockAggregationTypeConverter); + new MetadataResponseBuilder( + this.mockTypeConverter, this.mockAggregationTypeConverter, this.mockScopeTranslator); AttributeModel mockModel = mock(AttributeModel.class); when(mockModel.scope()).thenReturn("TRACE"); when(mockModel.key()).thenReturn("key"); @@ -53,6 +57,7 @@ void beforeEach() { .thenReturn(Single.just(MetricAggregationType.SUM)); when(this.mockAggregationTypeConverter.convert(eq(AttributeModelMetricAggregationType.AVG))) .thenReturn(Single.just(MetricAggregationType.AVG)); + when(this.mockScopeTranslator.toExternal("TRACE")).thenReturn("TRACE_EXTERNAL"); this.models = List.of(mockModel); } @@ -61,7 +66,7 @@ void canBuildResponse() { assertEquals( List.of( DefaultAttributeMetadata.builder() - .scope("TRACE") + .scope("TRACE_EXTERNAL") .name("key") .displayName("display name") .type(AttributeType.STRING) @@ -87,7 +92,7 @@ void filtersAnyAggregationConversionErrors() { assertEquals( List.of( DefaultAttributeMetadata.builder() - .scope("TRACE") + .scope("TRACE_EXTERNAL") .name("key") .displayName("display name") .type(AttributeType.STRING) diff --git a/hypertrace-core-graphql-span-schema/build.gradle.kts b/hypertrace-core-graphql-span-schema/build.gradle.kts index 9fd1926c..664c7473 100644 --- a/hypertrace-core-graphql-span-schema/build.gradle.kts +++ b/hypertrace-core-graphql-span-schema/build.gradle.kts @@ -11,7 +11,7 @@ dependencies { annotationProcessor("org.projectlombok:lombok") compileOnly("org.projectlombok:lombok") - compileOnly(project(":hypertrace-core-graphql-attribute-scope")) + compileOnly(project(":hypertrace-core-graphql-attribute-scope-constants")) implementation("org.slf4j:slf4j-api") implementation("io.reactivex.rxjava3:rxjava") diff --git a/hypertrace-core-graphql-trace-schema/build.gradle.kts b/hypertrace-core-graphql-trace-schema/build.gradle.kts index aaa74639..9c44aaa9 100644 --- a/hypertrace-core-graphql-trace-schema/build.gradle.kts +++ b/hypertrace-core-graphql-trace-schema/build.gradle.kts @@ -11,7 +11,7 @@ dependencies { annotationProcessor("org.projectlombok:lombok") compileOnly("org.projectlombok:lombok") - compileOnly(project(":hypertrace-core-graphql-attribute-scope")) + compileOnly(project(":hypertrace-core-graphql-attribute-scope-constants")) implementation("org.slf4j:slf4j-api") implementation("io.reactivex.rxjava3:rxjava") diff --git a/settings.gradle.kts b/settings.gradle.kts index 8a736a6c..8f79eba9 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -27,6 +27,7 @@ include(":hypertrace-core-graphql-metadata-schema") include(":hypertrace-core-graphql-span-schema") include(":hypertrace-core-graphql-trace-schema") include(":hypertrace-core-graphql-attribute-scope") +include(":hypertrace-core-graphql-attribute-scope-constants") include(":hypertrace-core-graphql-rx-utils") include(":hypertrace-core-graphql-platform") include(":hypertrace-core-graphql-test-platform") From 6dda805ba0b2d70796aa05a58ff45c3f782d0fb5 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Tue, 27 Oct 2020 10:11:19 -0700 Subject: [PATCH 029/173] chore: update guava (#27) --- hypertrace-core-graphql-platform/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 1f1dbeb7..ff0f236d 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -19,7 +19,7 @@ dependencies { api("org.projectlombok:lombok:1.18.12") api("com.google.code.findbugs:jsr305:3.0.2") api("com.typesafe:config:1.4.0") - api("com.google.guava:guava:29.0-jre") + api("com.google.guava:guava:30.0-jre") api("com.graphql-java-kickstart:graphql-java-servlet:9.1.0") api("io.grpc:grpc-api:1.33.0") api("io.grpc:grpc-core:1.33.0") From 9bf8020a09ce7f85132e514ba9f267963089992e Mon Sep 17 00:00:00 2001 From: inespo <47333631+inespo@users.noreply.github.com> Date: Wed, 28 Oct 2020 10:59:07 +0700 Subject: [PATCH 030/173] Adds Time Scalar (#26) Supports Time Scalar without Date such as 08:00. This is useful to specify schedule rather than a temporal date time. --- .../common/schema/CommonSchemaFragment.java | 12 ++- .../schema/typefunctions/TimeScalar.java | 81 +++++++++++++++++++ .../common/schema/scalars/TimeScalarTest.java | 58 +++++++++++++ 3 files changed, 149 insertions(+), 2 deletions(-) create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/TimeScalar.java create mode 100644 hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/TimeScalarTest.java diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/CommonSchemaFragment.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/CommonSchemaFragment.java index d0f5c94f..1796aa9e 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/CommonSchemaFragment.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/CommonSchemaFragment.java @@ -6,6 +6,7 @@ import javax.inject.Inject; import org.hypertrace.core.graphql.common.schema.typefunctions.AttributeScopeDynamicEnum; import org.hypertrace.core.graphql.common.schema.typefunctions.DateTimeScalar; +import org.hypertrace.core.graphql.common.schema.typefunctions.TimeScalar; import org.hypertrace.core.graphql.common.schema.typefunctions.UnknownScalar; import org.hypertrace.core.graphql.spi.schema.GraphQlSchemaFragment; @@ -14,15 +15,18 @@ class CommonSchemaFragment implements GraphQlSchemaFragment { private final DateTimeScalar dateTimeScalar; private final UnknownScalar unknownScalar; private final AttributeScopeDynamicEnum attributeScopeDynamicEnum; + private final TimeScalar timeScalar; @Inject CommonSchemaFragment( DateTimeScalar dateTimeScalar, UnknownScalar unknownScalar, - AttributeScopeDynamicEnum attributeScopeDynamicEnum) { + AttributeScopeDynamicEnum attributeScopeDynamicEnum, + TimeScalar timeScalar) { this.dateTimeScalar = dateTimeScalar; this.unknownScalar = unknownScalar; this.attributeScopeDynamicEnum = attributeScopeDynamicEnum; + this.timeScalar = timeScalar; } @Override @@ -33,6 +37,10 @@ public String fragmentName() { @Nonnull @Override public List typeFunctions() { - return List.of(this.unknownScalar, this.dateTimeScalar, this.attributeScopeDynamicEnum); + return List.of( + this.unknownScalar, + this.dateTimeScalar, + this.attributeScopeDynamicEnum, + this.timeScalar); } } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/TimeScalar.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/TimeScalar.java new file mode 100644 index 00000000..5ba5d6d4 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/TimeScalar.java @@ -0,0 +1,81 @@ +package org.hypertrace.core.graphql.common.schema.typefunctions; + +import graphql.GraphqlErrorException; +import graphql.annotations.processor.ProcessingElementsContainer; +import graphql.annotations.processor.typeFunctions.TypeFunction; +import graphql.language.StringValue; +import graphql.schema.Coercing; +import graphql.schema.CoercingParseLiteralException; +import graphql.schema.CoercingParseValueException; +import graphql.schema.CoercingSerializeException; +import graphql.schema.GraphQLScalarType; +import java.lang.reflect.AnnotatedType; +import java.time.DateTimeException; +import java.time.LocalTime; +import java.time.temporal.TemporalAccessor; +import java.util.function.Function; + +/** + * Graphql Scalar for Time without date or timezone + */ +public class TimeScalar implements TypeFunction { + + private static final GraphQLScalarType TIME_SCALAR = + GraphQLScalarType.newScalar() + .name("Time") + .description("An ISO-8601 formatted Time Scalar") + .coercing( + new Coercing() { + @Override + public String serialize(Object fetcherResult) throws CoercingSerializeException { + return toLocalTime(fetcherResult, CoercingSerializeException::new).toString(); + } + + @Override + public LocalTime parseValue(Object input) throws CoercingParseValueException { + return toLocalTime(input, CoercingParseValueException::new); + } + + @Override + public LocalTime parseLiteral(Object input) throws CoercingParseLiteralException { + return toLocalTime(input, CoercingParseLiteralException::new); + } + + private LocalTime toLocalTime( + Object timeInput, Function errorWrapper) throws E { + try { + if (timeInput instanceof TemporalAccessor) { + return LocalTime.from((TemporalAccessor) timeInput); + } + if (timeInput instanceof CharSequence) { + return LocalTime.parse((CharSequence) timeInput); + } + if (timeInput instanceof StringValue) { + return LocalTime.parse(((StringValue) timeInput).getValue()); + } + } catch (DateTimeException exception) { + throw errorWrapper.apply(exception); + } + throw errorWrapper.apply( + new DateTimeException( + String.format( + "Cannot convert provided format '%s' to LocalTime", + timeInput.getClass().getCanonicalName()))); + } + }) + .build(); + + @Override + public boolean canBuildType(Class aClass, AnnotatedType annotatedType) { + return TemporalAccessor.class.isAssignableFrom(aClass); + } + + @Override + public GraphQLScalarType buildType( + boolean input, + Class aClass, + AnnotatedType annotatedType, + ProcessingElementsContainer container) { + return TIME_SCALAR; + } +} diff --git a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/TimeScalarTest.java b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/TimeScalarTest.java new file mode 100644 index 00000000..537d661d --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/TimeScalarTest.java @@ -0,0 +1,58 @@ +package org.hypertrace.core.graphql.common.schema.scalars; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import graphql.language.StringValue; +import graphql.schema.GraphQLScalarType; +import java.time.LocalTime; +import org.hypertrace.core.graphql.common.schema.typefunctions.TimeScalar; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class TimeScalarTest { + + private static final String TIME_STRING = "08:30"; + private static final LocalTime LOCAL_TIME = LocalTime.parse(TIME_STRING); + private TimeScalar timeScalar; + private GraphQLScalarType timeType; + + @BeforeEach + void beforeEach() { + this.timeScalar = new TimeScalar(); + this.timeType = + this.timeScalar.buildType( + false, null, null, null); + } + + @Test + void test_canBuildType_compatibleTypes_shouldReturnTrue() { + assertTrue(this.timeScalar.canBuildType(LocalTime.class, null)); + } + + @Test + void test_canConvertFromLiteral() { + assertEquals( + LOCAL_TIME, timeType.getCoercing().parseLiteral(TIME_STRING)); + } + + @Test + void test_canSerialize() { + assertEquals( + TIME_STRING, timeType.getCoercing().serialize(LOCAL_TIME)); + assertEquals( + TIME_STRING, timeType.getCoercing().serialize(TIME_STRING)); + } + + @Test + void test_canConvertFromValue() { + assertEquals( + LOCAL_TIME, + timeType + .getCoercing() + .parseValue(StringValue.newStringValue().value(TIME_STRING).build())); + } +} From 1ce4b26f2eb4c182471dfa722656ad0835231917 Mon Sep 17 00:00:00 2001 From: ravisingal <62086374+ravisingal@users.noreply.github.com> Date: Thu, 29 Oct 2020 11:44:58 +0530 Subject: [PATCH 031/173] ci: add dockerhub auth (#29) --- .circleci/config.yml | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 41a1deb0..b1dff679 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -8,9 +8,15 @@ executors: java: docker: - image: cimg/openjdk:11.0 + auth: + username: $DOCKERHUB_USERNAME + password: $DOCKERHUB_PASSWORD helm: docker: - image: hypertrace/helm-gcs-packager:0.1.1 + auth: + username: $DOCKERHUB_USERNAME + password: $DOCKERHUB_PASSWORD commands: gradle: description: 'Run the provided gradle command' @@ -55,6 +61,9 @@ jobs: - setup_build_environment - setup_remote_docker - populate_and_save_cache + - run: + name: Dockerhub login + command: echo $DOCKERHUB_PASSWORD | docker login --username $DOCKERHUB_USERNAME --password-stdin - gradle: args: build dockerBuildImages - gradle: @@ -82,6 +91,9 @@ jobs: steps: - setup_build_environment - setup_remote_docker + - run: + name: Dockerhub login + command: echo $DOCKERHUB_PASSWORD | docker login --username $DOCKERHUB_USERNAME --password-stdin - gradle: args: :tag -Prelease - add_ssh_keys: @@ -119,12 +131,20 @@ workflows: version: 2 build-and-publish: jobs: - - build - - validate-charts + - build: + context: + - dockerhub-read + - validate-charts: + context: + - dockerhub-read - snyk-scan: - context: hypertrace-vulnerability-scanning + context: + - hypertrace-vulnerability-scanning + - dockerhub-read - publish: - context: hypertrace-publishing + context: + - hypertrace-publishing + - dockerhub-read requires: - build - snyk-scan @@ -134,10 +154,12 @@ workflows: only: - main - package-charts: - context: hypertrace-publishing + context: + - hypertrace-publishing + - dockerhub-read requires: - publish filters: branches: only: - - main \ No newline at end of file + - main From 50398b904dad026bcda7528783ab81268cc4703b Mon Sep 17 00:00:00 2001 From: inespo <47333631+inespo@users.noreply.github.com> Date: Fri, 30 Oct 2020 12:18:13 +0700 Subject: [PATCH 032/173] Revert "Adds Time Scalar (#26)" (#31) This reverts commit 9bf8020a09ce7f85132e514ba9f267963089992e. --- .../common/schema/CommonSchemaFragment.java | 12 +-- .../schema/typefunctions/TimeScalar.java | 81 ------------------- .../common/schema/scalars/TimeScalarTest.java | 58 ------------- 3 files changed, 2 insertions(+), 149 deletions(-) delete mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/TimeScalar.java delete mode 100644 hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/TimeScalarTest.java diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/CommonSchemaFragment.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/CommonSchemaFragment.java index 1796aa9e..d0f5c94f 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/CommonSchemaFragment.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/CommonSchemaFragment.java @@ -6,7 +6,6 @@ import javax.inject.Inject; import org.hypertrace.core.graphql.common.schema.typefunctions.AttributeScopeDynamicEnum; import org.hypertrace.core.graphql.common.schema.typefunctions.DateTimeScalar; -import org.hypertrace.core.graphql.common.schema.typefunctions.TimeScalar; import org.hypertrace.core.graphql.common.schema.typefunctions.UnknownScalar; import org.hypertrace.core.graphql.spi.schema.GraphQlSchemaFragment; @@ -15,18 +14,15 @@ class CommonSchemaFragment implements GraphQlSchemaFragment { private final DateTimeScalar dateTimeScalar; private final UnknownScalar unknownScalar; private final AttributeScopeDynamicEnum attributeScopeDynamicEnum; - private final TimeScalar timeScalar; @Inject CommonSchemaFragment( DateTimeScalar dateTimeScalar, UnknownScalar unknownScalar, - AttributeScopeDynamicEnum attributeScopeDynamicEnum, - TimeScalar timeScalar) { + AttributeScopeDynamicEnum attributeScopeDynamicEnum) { this.dateTimeScalar = dateTimeScalar; this.unknownScalar = unknownScalar; this.attributeScopeDynamicEnum = attributeScopeDynamicEnum; - this.timeScalar = timeScalar; } @Override @@ -37,10 +33,6 @@ public String fragmentName() { @Nonnull @Override public List typeFunctions() { - return List.of( - this.unknownScalar, - this.dateTimeScalar, - this.attributeScopeDynamicEnum, - this.timeScalar); + return List.of(this.unknownScalar, this.dateTimeScalar, this.attributeScopeDynamicEnum); } } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/TimeScalar.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/TimeScalar.java deleted file mode 100644 index 5ba5d6d4..00000000 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/TimeScalar.java +++ /dev/null @@ -1,81 +0,0 @@ -package org.hypertrace.core.graphql.common.schema.typefunctions; - -import graphql.GraphqlErrorException; -import graphql.annotations.processor.ProcessingElementsContainer; -import graphql.annotations.processor.typeFunctions.TypeFunction; -import graphql.language.StringValue; -import graphql.schema.Coercing; -import graphql.schema.CoercingParseLiteralException; -import graphql.schema.CoercingParseValueException; -import graphql.schema.CoercingSerializeException; -import graphql.schema.GraphQLScalarType; -import java.lang.reflect.AnnotatedType; -import java.time.DateTimeException; -import java.time.LocalTime; -import java.time.temporal.TemporalAccessor; -import java.util.function.Function; - -/** - * Graphql Scalar for Time without date or timezone - */ -public class TimeScalar implements TypeFunction { - - private static final GraphQLScalarType TIME_SCALAR = - GraphQLScalarType.newScalar() - .name("Time") - .description("An ISO-8601 formatted Time Scalar") - .coercing( - new Coercing() { - @Override - public String serialize(Object fetcherResult) throws CoercingSerializeException { - return toLocalTime(fetcherResult, CoercingSerializeException::new).toString(); - } - - @Override - public LocalTime parseValue(Object input) throws CoercingParseValueException { - return toLocalTime(input, CoercingParseValueException::new); - } - - @Override - public LocalTime parseLiteral(Object input) throws CoercingParseLiteralException { - return toLocalTime(input, CoercingParseLiteralException::new); - } - - private LocalTime toLocalTime( - Object timeInput, Function errorWrapper) throws E { - try { - if (timeInput instanceof TemporalAccessor) { - return LocalTime.from((TemporalAccessor) timeInput); - } - if (timeInput instanceof CharSequence) { - return LocalTime.parse((CharSequence) timeInput); - } - if (timeInput instanceof StringValue) { - return LocalTime.parse(((StringValue) timeInput).getValue()); - } - } catch (DateTimeException exception) { - throw errorWrapper.apply(exception); - } - throw errorWrapper.apply( - new DateTimeException( - String.format( - "Cannot convert provided format '%s' to LocalTime", - timeInput.getClass().getCanonicalName()))); - } - }) - .build(); - - @Override - public boolean canBuildType(Class aClass, AnnotatedType annotatedType) { - return TemporalAccessor.class.isAssignableFrom(aClass); - } - - @Override - public GraphQLScalarType buildType( - boolean input, - Class aClass, - AnnotatedType annotatedType, - ProcessingElementsContainer container) { - return TIME_SCALAR; - } -} diff --git a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/TimeScalarTest.java b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/TimeScalarTest.java deleted file mode 100644 index 537d661d..00000000 --- a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/TimeScalarTest.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.hypertrace.core.graphql.common.schema.scalars; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; - -import graphql.language.StringValue; -import graphql.schema.GraphQLScalarType; -import java.time.LocalTime; -import org.hypertrace.core.graphql.common.schema.typefunctions.TimeScalar; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.junit.jupiter.MockitoExtension; - -@ExtendWith(MockitoExtension.class) -class TimeScalarTest { - - private static final String TIME_STRING = "08:30"; - private static final LocalTime LOCAL_TIME = LocalTime.parse(TIME_STRING); - private TimeScalar timeScalar; - private GraphQLScalarType timeType; - - @BeforeEach - void beforeEach() { - this.timeScalar = new TimeScalar(); - this.timeType = - this.timeScalar.buildType( - false, null, null, null); - } - - @Test - void test_canBuildType_compatibleTypes_shouldReturnTrue() { - assertTrue(this.timeScalar.canBuildType(LocalTime.class, null)); - } - - @Test - void test_canConvertFromLiteral() { - assertEquals( - LOCAL_TIME, timeType.getCoercing().parseLiteral(TIME_STRING)); - } - - @Test - void test_canSerialize() { - assertEquals( - TIME_STRING, timeType.getCoercing().serialize(LOCAL_TIME)); - assertEquals( - TIME_STRING, timeType.getCoercing().serialize(TIME_STRING)); - } - - @Test - void test_canConvertFromValue() { - assertEquals( - LOCAL_TIME, - timeType - .getCoercing() - .parseValue(StringValue.newStringValue().value(TIME_STRING).build())); - } -} From 9cffdc51210f1ee92510ab0d208821a484c68548 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Fri, 30 Oct 2020 06:37:37 -0700 Subject: [PATCH 033/173] feat: support dynamic id mappings (#30) this change allows id mappings to be added dynamically without explicitly listing them out in the guice module config. This is meant to unlock support for features like tenant-scoped entities and dynamically created entity types. --- .../build.gradle.kts | 3 +- .../attributes/AttributeStoreModule.java | 7 ++ .../attributes/CachingAttributeStore.java | 19 ++-- .../core/graphql/attributes/IdLookup.java | 67 +++++++++-- .../graphql/attributes/IdMappingLoader.java | 12 ++ .../attributes/CachingAttributeStoreTest.java | 11 +- .../core/graphql/attributes/IdLookupTest.java | 104 ++++++++++++++++-- 7 files changed, 190 insertions(+), 33 deletions(-) create mode 100644 hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdMappingLoader.java diff --git a/hypertrace-core-graphql-attribute-store/build.gradle.kts b/hypertrace-core-graphql-attribute-store/build.gradle.kts index 46c4fbe1..b82c3ee3 100644 --- a/hypertrace-core-graphql-attribute-store/build.gradle.kts +++ b/hypertrace-core-graphql-attribute-store/build.gradle.kts @@ -11,10 +11,11 @@ dependencies { implementation("org.slf4j:slf4j-api") implementation("io.reactivex.rxjava3:rxjava") - implementation("com.google.guava:guava:29.0-jre") + implementation("com.google.guava:guava") implementation("org.hypertrace.core.attribute.service:attribute-service-api") implementation(project(":hypertrace-core-graphql-grpc-utils")) + implementation(project(":hypertrace-core-graphql-rx-utils")) annotationProcessor("org.projectlombok:lombok") compileOnly("org.projectlombok:lombok") diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStoreModule.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStoreModule.java index be84d69d..8bc99885 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStoreModule.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStoreModule.java @@ -1,7 +1,11 @@ package org.hypertrace.core.graphql.attributes; import com.google.inject.AbstractModule; +import com.google.inject.Key; +import com.google.inject.multibindings.Multibinder; import io.grpc.CallCredentials; +import io.reactivex.rxjava3.core.Scheduler; +import org.hypertrace.core.graphql.rx.BoundedIoScheduler; import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; import org.hypertrace.core.graphql.utils.grpc.GraphQlGrpcContextBuilder; import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; @@ -11,9 +15,12 @@ public class AttributeStoreModule extends AbstractModule { @Override protected void configure() { bind(AttributeStore.class).to(CachingAttributeStore.class); + Multibinder.newSetBinder(binder(), IdMapping.class); + Multibinder.newSetBinder(binder(), IdMappingLoader.class); requireBinding(GraphQlServiceConfig.class); requireBinding(GraphQlGrpcContextBuilder.class); requireBinding(CallCredentials.class); requireBinding(GrpcChannelRegistry.class); + requireBinding(Key.get(Scheduler.class, BoundedIoScheduler.class)); } } diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java index 03700d51..b9c26e51 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java @@ -48,8 +48,7 @@ public Single> getAll(GraphQlRequestContext context) { @Override public Single get(GraphQlRequestContext context, String scope, String key) { return this.getOrInvalidate(context) - .map(table -> Optional.ofNullable(table.get(scope, key))) - .flatMapMaybe(Maybe::fromOptional) + .mapOptional(table -> Optional.ofNullable(table.get(scope, key))) .switchIfEmpty(Single.error(this.buildErrorForMissingAttribute(scope, key))); } @@ -62,13 +61,14 @@ public Single> get( @Override public Single getIdAttribute(GraphQlRequestContext context, String scope) { - return this.getIdKey(scope).flatMap(key -> this.get(context, scope, key)); + return this.getIdKey(context, scope).flatMap(key -> this.get(context, scope, key)); } @Override public Single getForeignIdAttribute( GraphQlRequestContext context, String scope, String foreignScope) { - return this.getForeignIdKey(scope, foreignScope).flatMap(key -> this.get(context, scope, key)); + return this.getForeignIdKey(context, scope, foreignScope) + .flatMap(key -> this.get(context, scope, key)); } private Single> loadTable(ContextualCachingKey cachingKey) { @@ -93,14 +93,17 @@ private Single> getOrInvalidate( .doOnError(x -> this.cache.invalidate(context.getCachingKey())); } - private Single getForeignIdKey(String scope, String foreignScope) { - return Maybe.fromOptional(this.idLookup.foreignIdKey(scope, foreignScope)) + private Single getForeignIdKey( + GraphQlRequestContext context, String scope, String foreignScope) { + return this.idLookup + .foreignIdKey(context, scope, foreignScope) .switchIfEmpty( Single.error(this.buildErrorForMissingForeignScopeMapping(scope, foreignScope))); } - private Single getIdKey(String scope) { - return Maybe.fromOptional(this.idLookup.idKey(scope)) + private Single getIdKey(GraphQlRequestContext context, String scope) { + return this.idLookup + .idKey(context, scope) .switchIfEmpty(Single.error(this.buildErrorForMissingIdMapping(scope))); } diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdLookup.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdLookup.java index 034dd086..75860c72 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdLookup.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdLookup.java @@ -1,30 +1,75 @@ package org.hypertrace.core.graphql.attributes; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableTable; +import io.reactivex.rxjava3.core.Maybe; +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.Scheduler; +import io.reactivex.rxjava3.core.Single; import java.util.Optional; import java.util.Set; +import java.util.concurrent.TimeUnit; import javax.inject.Inject; import javax.inject.Singleton; +import org.hypertrace.core.graphql.context.ContextualCachingKey; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.core.graphql.rx.BoundedIoScheduler; @Singleton class IdLookup { - private final ImmutableTable idTable; + private final LoadingCache>> + idMapCache; + private final Set mappingLoaders; + private final Scheduler boundedIoScheduler; @Inject - IdLookup(Set idMappings) { - this.idTable = - idMappings.stream() - .collect( - ImmutableTable.toImmutableTable( - IdMapping::containingScope, IdMapping::foreignScope, IdMapping::idAttribute)); + IdLookup( + Set idMappings, + Set mappingLoaders, + @BoundedIoScheduler Scheduler boundedIoScheduler) { + this.mappingLoaders = + ImmutableSet.builder() + .addAll(mappingLoaders) + .add(requestContext -> Observable.fromIterable(idMappings)) + .build(); + this.boundedIoScheduler = boundedIoScheduler; + this.idMapCache = + CacheBuilder.newBuilder() + .maximumSize(1000) + .expireAfterWrite(15, TimeUnit.MINUTES) + .build(CacheLoader.from(this::loadMappingsForContext)); } - Optional idKey(String scope) { - return this.foreignIdKey(scope, scope); + Maybe idKey(GraphQlRequestContext requestContext, String scope) { + return this.foreignIdKey(requestContext, scope, scope); } - Optional foreignIdKey(String scope, String foreignScope) { - return Optional.ofNullable(this.idTable.get(scope, foreignScope)); + Maybe foreignIdKey( + GraphQlRequestContext requestContext, String scope, String foreignScope) { + return this.getOrInvalidate(requestContext) + .mapOptional(table -> Optional.ofNullable(table.get(scope, foreignScope))); + } + + private Single> loadMappingsForContext( + ContextualCachingKey key) { + return Observable.fromIterable(this.mappingLoaders) + .flatMap( + idMappingLoader -> + idMappingLoader.loadMappings(key.getContext()).subscribeOn(this.boundedIoScheduler)) + .collect( + ImmutableTable.toImmutableTable( + IdMapping::containingScope, IdMapping::foreignScope, IdMapping::idAttribute)) + .cache(); + } + + private Single> getOrInvalidate( + GraphQlRequestContext context) { + return this.idMapCache + .getUnchecked(context.getCachingKey()) + .doOnError(x -> this.idMapCache.invalidate(context.getCachingKey())); } } diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdMappingLoader.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdMappingLoader.java new file mode 100644 index 00000000..57e0399f --- /dev/null +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdMappingLoader.java @@ -0,0 +1,12 @@ +package org.hypertrace.core.graphql.attributes; + +import io.reactivex.rxjava3.core.Observable; +import java.util.Objects; +import javax.annotation.Nonnull; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; + +public interface IdMappingLoader { + Observable loadMappings(GraphQlRequestContext requestContext); + + +} diff --git a/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java index 57219074..65afce86 100644 --- a/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java +++ b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java @@ -11,6 +11,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import io.reactivex.rxjava3.core.Maybe; import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.Single; import java.util.ArrayList; @@ -18,7 +19,6 @@ import java.util.List; import java.util.Map; import java.util.NoSuchElementException; -import java.util.Optional; import org.hypertrace.core.graphql.context.ContextualCachingKey; import org.hypertrace.core.graphql.context.GraphQlRequestContext; import org.junit.jupiter.api.BeforeEach; @@ -174,7 +174,7 @@ void supportsAndCachesIdLookup() { when(this.mockAttributeClient.queryAll(eq(context))) .thenReturn(Observable.just(spanIdAttribute)); - when(this.mockIdLookup.idKey(eq("SPAN"))).thenReturn(Optional.of("id")); + when(this.mockIdLookup.idKey(context, "SPAN")).thenReturn(Maybe.just("id")); assertEquals( spanIdAttribute, @@ -189,8 +189,10 @@ void supportsAndCachesIdLookup() { @Test void returnsErrorForMissingIdMapping() { + when(this.mockIdLookup.idKey(any(), any())).thenReturn(Maybe.empty()); assertThrows( - NoSuchElementException.class, this.attributeStore.getIdAttribute(null, "SPAN")::blockingGet); + NoSuchElementException.class, + this.attributeStore.getIdAttribute(null, "SPAN")::blockingGet); } @Test @@ -199,7 +201,8 @@ void supportsForeignIdLookup() { DefaultAttributeModel spanTraceIdAttribute = DefaultAttributeModel.builder().scope("SPAN").key("traceId").build(); - when(this.mockIdLookup.foreignIdKey(eq("SPAN"), eq("TRACE"))).thenReturn(Optional.of("traceId")); + when(this.mockIdLookup.foreignIdKey(context, "SPAN", "TRACE")) + .thenReturn(Maybe.just("traceId")); when(this.mockAttributeClient.queryAll(eq(context))) .thenReturn(Observable.just(spanTraceIdAttribute)); diff --git a/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/IdLookupTest.java b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/IdLookupTest.java index 4ca95b3a..2b22db24 100644 --- a/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/IdLookupTest.java +++ b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/IdLookupTest.java @@ -1,25 +1,111 @@ package org.hypertrace.core.graphql.attributes; +import static org.hypertrace.core.graphql.attributes.IdMapping.forForeignId; +import static org.hypertrace.core.graphql.attributes.IdMapping.forId; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; -import java.util.Optional; +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.schedulers.Schedulers; +import java.util.Collections; import java.util.Set; +import org.hypertrace.core.graphql.context.ContextualCachingKey; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; import org.junit.jupiter.api.Test; class IdLookupTest { @Test void canLookupIds() { + GraphQlRequestContext mockContext = this.buildNewMockContext(); IdLookup idLookup = new IdLookup( Set.of( - IdMapping.forId("SPAN", "s-id"), - IdMapping.forId("TRACE", "t-id"), - IdMapping.forForeignId("SPAN", "TRACE", "s-t-id"))); - - assertEquals(Optional.of("s-id"), idLookup.idKey("SPAN")); - assertEquals(Optional.of("t-id"), idLookup.idKey("TRACE")); - assertEquals(Optional.of("s-t-id"), idLookup.foreignIdKey("SPAN", "TRACE")); - assertEquals(Optional.empty(), idLookup.foreignIdKey("TRACE", "SPAN")); + forId("SPAN", "s-id"), + forId("TRACE", "t-id"), + forForeignId("SPAN", "TRACE", "s-t-id")), + Collections.emptySet(), + Schedulers.single()); + + assertEquals("s-id", idLookup.idKey(mockContext, "SPAN").blockingGet()); + assertEquals("t-id", idLookup.idKey(mockContext, "TRACE").blockingGet()); + assertEquals("s-t-id", idLookup.foreignIdKey(mockContext, "SPAN", "TRACE").blockingGet()); + assertTrue(idLookup.foreignIdKey(mockContext, "TRACE", "SPAN").isEmpty().blockingGet()); + } + + @Test + void supportsMultipleAsyncLoaders() { + + GraphQlRequestContext mockContext = this.buildNewMockContext(); + + IdLookup idLookup = + new IdLookup( + Set.of(forId("SCOPE_ONE", "1-id")), + Set.of( + unused -> + Observable.just( + forId("SCOPE_TWO", "2-id"), + forForeignId("SCOPE_TWO", "SCOPE_THREE", "3-id")), + unused -> Observable.just(forId("SCOPE_THREE", "3-id"))), + Schedulers.single()); + + assertEquals("1-id", idLookup.idKey(mockContext, "SCOPE_ONE").blockingGet()); + assertEquals("2-id", idLookup.idKey(mockContext, "SCOPE_TWO").blockingGet()); + assertEquals( + "3-id", idLookup.foreignIdKey(mockContext, "SCOPE_TWO", "SCOPE_THREE").blockingGet()); + assertEquals("3-id", idLookup.idKey(mockContext, "SCOPE_THREE").blockingGet()); + assertTrue(idLookup.idKey(mockContext, "SCOPE_FOUR").isEmpty().blockingGet()); + } + + @Test + void cachesLoaderResults() { + GraphQlRequestContext mockContext = this.buildNewMockContext(); + GraphQlRequestContext otherContext = this.buildNewMockContext(); + IdMappingLoader mappingLoader = mock(IdMappingLoader.class); + when(mappingLoader.loadMappings(mockContext)) + .thenReturn(Observable.just(forId("SCOPE_ONE", "1-id"))); + when(mappingLoader.loadMappings(otherContext)) + .thenReturn(Observable.just(forId("SCOPE_ONE", "1-id-other"))); + IdLookup idLookup = + new IdLookup(Collections.emptySet(), Set.of(mappingLoader), Schedulers.single()); + + assertEquals("1-id", idLookup.idKey(mockContext, "SCOPE_ONE").blockingGet()); + assertEquals("1-id-other", idLookup.idKey(otherContext, "SCOPE_ONE").blockingGet()); + assertEquals("1-id", idLookup.idKey(mockContext, "SCOPE_ONE").blockingGet()); + assertEquals("1-id-other", idLookup.idKey(otherContext, "SCOPE_ONE").blockingGet()); + verify(mappingLoader, times(1)).loadMappings(mockContext); + verify(mappingLoader, times(1)).loadMappings(otherContext); + } + + @Test + void retriesOnError() { + GraphQlRequestContext mockContext = this.buildNewMockContext(); + + IdMappingLoader mappingLoader = mock(IdMappingLoader.class); + when(mappingLoader.loadMappings(mockContext)) + .thenReturn(Observable.error(IllegalStateException::new)); + IdLookup idLookup = + new IdLookup(Collections.emptySet(), Set.of(mappingLoader), Schedulers.single()); + + assertThrows( + IllegalStateException.class, idLookup.idKey(mockContext, "SCOPE_ONE")::blockingGet); + + when(mappingLoader.loadMappings(mockContext)) + .thenReturn(Observable.just(forId("SCOPE_ONE", "1-id"))); + + assertEquals("1-id", idLookup.idKey(mockContext, "SCOPE_ONE").blockingGet()); + } + + private GraphQlRequestContext buildNewMockContext() { + ContextualCachingKey mockCachingKey = mock(ContextualCachingKey.class); + GraphQlRequestContext mockContext = mock(GraphQlRequestContext.class); + when(mockCachingKey.getContext()).thenReturn(mockContext); + when(mockContext.getCachingKey()).thenReturn(mockCachingKey); + return mockContext; } } From 2b84ef4d918054bb967c741f7260365d7e30aa5e Mon Sep 17 00:00:00 2001 From: Jayesh Bapu Ahire Date: Thu, 5 Nov 2020 23:12:06 +0530 Subject: [PATCH 034/173] chore: adds PR template (#32) --- .github/PULL_REQUEST_TEMPLATE.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000..a8e827b1 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,25 @@ +## Description +Please include a summary of the change, motivation and context. + + + + +### Testing +Please describe the tests that you ran to verify your changes. Please summarize what did you test and what needs to be tested e.g. deployed and tested helm chart locally. + +### Checklist: +- [ ] My changes generate no new warnings +- [ ] I have added tests that prove my fix is effective or that my feature works +- [ ] Any dependent changes have been merged and published in downstream modules + +### Documentation +Make sure that you have documented corresponding changes in this repository or [hypertrace docs repo](https://github.com/hypertrace/hypertrace-docs-website) if required. + + From 76ddd69cedb9a9b76a899fc1613a5ef35cc62b7e Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Thu, 5 Nov 2020 17:42:34 -0800 Subject: [PATCH 035/173] feat: expoe if an attribute can be aggregated in metadata (#33) --- .../graphql/attributes/AttributeModel.java | 4 +++- .../attributes/AttributeModelTranslator.java | 2 ++ .../attributes/DefaultAttributeModel.java | 5 +++-- .../AttributeModelTranslatorTest.java | 18 +++++++++++++++--- .../response/DefaultAttributeMetadata.java | 8 +++++++- .../response/MetadataResponseBuilder.java | 3 ++- .../metadata/schema/AttributeMetadata.java | 18 ++++++++++++++++++ .../response/MetadataResponseBuilderTest.java | 9 ++++++--- 8 files changed, 56 insertions(+), 11 deletions(-) diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModel.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModel.java index b48d23bc..aae06c4b 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModel.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModel.java @@ -16,7 +16,9 @@ public interface AttributeModel { String units(); - boolean requiresAggregation(); + boolean onlySupportsGrouping(); + + boolean onlySupportsAggregation(); List supportedMetricAggregationTypes(); diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java index 680c0e92..a46c75e8 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java @@ -7,6 +7,7 @@ import org.hypertrace.core.attribute.service.v1.AggregateFunction; import org.hypertrace.core.attribute.service.v1.AttributeKind; import org.hypertrace.core.attribute.service.v1.AttributeMetadata; +import org.hypertrace.core.attribute.service.v1.AttributeType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -24,6 +25,7 @@ public Optional translate(AttributeMetadata attributeMetadata) { this.convertType(attributeMetadata.getValueKind()), attributeMetadata.getUnit(), attributeMetadata.getOnlyAggregationsAllowed(), + attributeMetadata.getType().equals(AttributeType.METRIC), this.convertMetricAggregationTypes(attributeMetadata.getSupportedAggregationsList()), attributeMetadata.getGroupable())); } catch (Exception e) { diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/DefaultAttributeModel.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/DefaultAttributeModel.java index b6cc6ef6..3b6f7579 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/DefaultAttributeModel.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/DefaultAttributeModel.java @@ -6,7 +6,7 @@ import lombok.experimental.Accessors; @Value -@Builder +@Builder(toBuilder = true) @Accessors(fluent = true) class DefaultAttributeModel implements AttributeModel { String id; @@ -15,7 +15,8 @@ class DefaultAttributeModel implements AttributeModel { String displayName; AttributeModelType type; String units; - boolean requiresAggregation; + boolean onlySupportsGrouping; + boolean onlySupportsAggregation; List supportedMetricAggregationTypes; boolean groupable; } diff --git a/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslatorTest.java b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslatorTest.java index 8a3ed9e6..8c238f3a 100644 --- a/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslatorTest.java +++ b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslatorTest.java @@ -7,6 +7,7 @@ import org.hypertrace.core.attribute.service.v1.AggregateFunction; import org.hypertrace.core.attribute.service.v1.AttributeKind; import org.hypertrace.core.attribute.service.v1.AttributeMetadata; +import org.hypertrace.core.attribute.service.v1.AttributeType; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -14,7 +15,7 @@ class AttributeModelTranslatorTest { private AttributeModelTranslator translator; private AttributeMetadata metadata; - private AttributeModel expectedModel; + private DefaultAttributeModel expectedModel; @BeforeEach void beforeEach() { @@ -26,6 +27,7 @@ void beforeEach() { .setKey("key") .setDisplayName("display name") .setValueKind(AttributeKind.TYPE_STRING) + .setType(AttributeType.ATTRIBUTE) .setUnit("unit") .setOnlyAggregationsAllowed(true) .addAllSupportedAggregations(List.of(AggregateFunction.SUM, AggregateFunction.AVG)) @@ -40,7 +42,8 @@ void beforeEach() { .displayName("display name") .type(AttributeModelType.STRING) .units("unit") - .requiresAggregation(true) + .onlySupportsGrouping(true) + .onlySupportsAggregation(false) .supportedMetricAggregationTypes( List.of( AttributeModelMetricAggregationType.SUM, @@ -54,6 +57,15 @@ void canTranslateAttributeModel() { assertEquals(Optional.of(this.expectedModel), this.translator.translate(this.metadata)); } + @Test + void translatesMetricstoOnlySupportAggregation() { + AttributeMetadata metricMetadata = + this.metadata.toBuilder().setType(AttributeType.METRIC).build(); + DefaultAttributeModel expectedMetricModel = + this.expectedModel.toBuilder().onlySupportsAggregation(true).build(); + assertEquals(Optional.of(expectedMetricModel), this.translator.translate(metricMetadata)); + } + @Test void returnsEmptyIfUnsupportedTranslation() { AttributeMetadata unsupportedMetadata = @@ -88,7 +100,7 @@ void testStringArrayAttributeKindTranslation() { .displayName("display name") .type(AttributeModelType.STRING_ARRAY) .units("unit") - .requiresAggregation(false) + .onlySupportsGrouping(false) .supportedMetricAggregationTypes( List.of( AttributeModelMetricAggregationType.DISTINCT_COUNT, diff --git a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/DefaultAttributeMetadata.java b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/DefaultAttributeMetadata.java index 15d78298..89658363 100644 --- a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/DefaultAttributeMetadata.java +++ b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/DefaultAttributeMetadata.java @@ -18,7 +18,13 @@ class DefaultAttributeMetadata implements AttributeMetadata { String displayName; AttributeType type; String units; - boolean onlyAggregationsAllowed; + boolean onlySupportsGrouping; + boolean onlySupportsAggregation; List supportedAggregations; boolean groupable; + + // TODO remove once removed from the api + public boolean onlyAggregationsAllowed() { + return this.onlySupportsGrouping(); + } } diff --git a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilder.java b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilder.java index dfc18fa7..eaf878fe 100644 --- a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilder.java +++ b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilder.java @@ -52,7 +52,8 @@ private Maybe build(AttributeModel model) { model.displayName(), type, model.units(), - model.requiresAggregation(), + model.onlySupportsGrouping(), + model.onlySupportsAggregation(), aggregations, model.groupable())) .cast(AttributeMetadata.class) diff --git a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/schema/AttributeMetadata.java b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/schema/AttributeMetadata.java index e2c2e6c5..afdb213c 100644 --- a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/schema/AttributeMetadata.java +++ b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/schema/AttributeMetadata.java @@ -1,6 +1,7 @@ package org.hypertrace.core.graphql.metadata.schema; import graphql.annotations.annotationTypes.GraphQLDeprecate; +import graphql.annotations.annotationTypes.GraphQLDescription; import graphql.annotations.annotationTypes.GraphQLField; import graphql.annotations.annotationTypes.GraphQLName; import graphql.annotations.annotationTypes.GraphQLNonNull; @@ -18,6 +19,8 @@ public interface AttributeMetadata { String ATTRIBUTE_METADATA_TYPE_NAME = "type"; String ATTRIBUTE_METADATA_UNITS_NAME = "units"; String ATTRIBUTE_METADATA_ONLY_AGGREGATIONS_ALLOWED_NAME = "onlyAggregationsAllowed"; + String ATTRIBUTE_METADATA_ONLY_SUPPORTS_AGGREGATION_NAME = "onlySupportsAggregation"; + String ATTRIBUTE_METADATA_ONLY_SUPPORTS_GROUPING_NAME = "onlySupportsGrouping"; String ATTRIBUTE_METADATA_SUPPORTED_AGGREGATIONS_NAME = "supportedAggregations"; String ATTRIBUTE_METADATA_GROUPABLE_NAME = "groupable"; @@ -46,11 +49,26 @@ public interface AttributeMetadata { @GraphQLName(ATTRIBUTE_METADATA_UNITS_NAME) String units(); + @GraphQLDeprecate + @Deprecated @GraphQLField @GraphQLNonNull + @GraphQLDescription("Deprecated. This has been renamed to " + ATTRIBUTE_METADATA_ONLY_SUPPORTS_GROUPING_NAME) @GraphQLName(ATTRIBUTE_METADATA_ONLY_AGGREGATIONS_ALLOWED_NAME) boolean onlyAggregationsAllowed(); + @GraphQLField + @GraphQLNonNull + @GraphQLName(ATTRIBUTE_METADATA_ONLY_SUPPORTS_GROUPING_NAME) + @GraphQLDescription("Signifies an attribute is only available in a grouped query") + boolean onlySupportsGrouping(); + + @GraphQLField + @GraphQLNonNull + @GraphQLName(ATTRIBUTE_METADATA_ONLY_SUPPORTS_AGGREGATION_NAME) + @GraphQLDescription("Signifies an attribute is only available as an aggregation on all queries") + boolean onlySupportsAggregation(); + @GraphQLField @GraphQLNonNull @GraphQLName(ATTRIBUTE_METADATA_SUPPORTED_AGGREGATIONS_NAME) diff --git a/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilderTest.java b/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilderTest.java index d89aaf4f..aaf73630 100644 --- a/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilderTest.java +++ b/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilderTest.java @@ -46,7 +46,8 @@ void beforeEach() { when(mockModel.type()).thenReturn(AttributeModelType.STRING); when(mockModel.units()).thenReturn("unit"); when(mockModel.groupable()).thenReturn(true); - when(mockModel.requiresAggregation()).thenReturn(true); + when(mockModel.onlySupportsGrouping()).thenReturn(false); + when(mockModel.onlySupportsAggregation()).thenReturn(true); when(mockModel.supportedMetricAggregationTypes()) .thenReturn( List.of( @@ -71,7 +72,8 @@ void canBuildResponse() { .displayName("display name") .type(AttributeType.STRING) .units("unit") - .onlyAggregationsAllowed(true) + .onlySupportsGrouping(false) + .onlySupportsAggregation(true) .supportedAggregations( List.of(MetricAggregationType.SUM, MetricAggregationType.AVG)) .groupable(true) @@ -97,7 +99,8 @@ void filtersAnyAggregationConversionErrors() { .displayName("display name") .type(AttributeType.STRING) .units("unit") - .onlyAggregationsAllowed(true) + .onlySupportsGrouping(false) + .onlySupportsAggregation(true) .supportedAggregations(List.of(MetricAggregationType.AVG)) .groupable(true) .build()), From f62bc0b7def51270f9d7518f6692bfee136868d9 Mon Sep 17 00:00:00 2001 From: Tim Mwangi <44785807+tim-mwangi@users.noreply.github.com> Date: Sun, 22 Nov 2020 13:41:51 -0800 Subject: [PATCH 036/173] fix: snyk ionetty vulberability warning (#34) Ignore it in .snyk file since there is no patch for it --- .snyk | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.snyk b/.snyk index 74b55a48..ad778af1 100644 --- a/.snyk +++ b/.snyk @@ -1,6 +1,10 @@ # Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities. version: v1.14.1 # ignores vulnerabilities until expiry date; change duration by modifying expiry date -ignore: {} +ignore: + SNYK-JAVA-IONETTY-1042268: + - '*': + reason: No replacement available + expires: 2021-01-31T00:00:00.000Z patch: {} From 3fc65784f6a37bcca8c069eb4e88eee9b063c772 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Mon, 30 Nov 2020 07:00:11 -0800 Subject: [PATCH 037/173] chore: update dependencies (#35) --- .../build.gradle.kts | 1 + .../core/graphql/impl/GraphQlFactory.java | 1 + .../build.gradle.kts | 40 +++++++++---------- .../build.gradle.kts | 8 ++-- .../build.gradle.kts | 4 +- 5 files changed, 28 insertions(+), 26 deletions(-) diff --git a/hypertrace-core-graphql-grpc-utils/build.gradle.kts b/hypertrace-core-graphql-grpc-utils/build.gradle.kts index 2ba7999a..caec07e0 100644 --- a/hypertrace-core-graphql-grpc-utils/build.gradle.kts +++ b/hypertrace-core-graphql-grpc-utils/build.gradle.kts @@ -16,6 +16,7 @@ dependencies { implementation("org.hypertrace.core.grpcutils:grpc-client-utils") implementation("io.grpc:grpc-context") implementation("io.reactivex.rxjava3:rxjava") + implementation("org.slf4j:slf4j-api") implementation(project(":hypertrace-core-graphql-spi")) testImplementation("org.junit.jupiter:junit-jupiter") diff --git a/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlFactory.java b/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlFactory.java index 56d1287e..be4bd3de 100644 --- a/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlFactory.java +++ b/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlFactory.java @@ -15,6 +15,7 @@ public static GraphQLConfiguration build( return GraphQLConfiguration.with(injector.getInstance(GraphQLSchema.class)) .with(config.isAsyncServlet()) + .asyncTimeout(30000) // https://github.com/graphql-java-kickstart/graphql-java-servlet/issues/282 .with(injector.getInstance(GraphQlRequestContextBuilder.class)) .build(); } diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index ff0f236d..ae081976 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -5,31 +5,31 @@ plugins { dependencies { constraints { - api("org.hypertrace.core.grpcutils:grpc-context-utils:0.3.0") - api("org.hypertrace.core.grpcutils:grpc-client-utils:0.3.0") - api("org.hypertrace.gateway.service:gateway-service-api:0.1.1") - api("org.hypertrace.core.attribute.service:attribute-service-api:0.6.0") + api("org.hypertrace.core.grpcutils:grpc-context-utils:0.3.2") + api("org.hypertrace.core.grpcutils:grpc-client-utils:0.3.2") + api("org.hypertrace.gateway.service:gateway-service-api:0.1.38") + api("org.hypertrace.core.attribute.service:attribute-service-api:0.8.7") api("com.google.inject:guice:4.2.3") - api("com.graphql-java:graphql-java:14.0") - api("io.github.graphql-java:graphql-java-annotations:8.0") - api("org.slf4j:slf4j-api:1.7.3") - api("io.reactivex.rxjava3:rxjava:3.0.2") - api("com.google.protobuf:protobuf-java-util:3.11.4") - api("org.projectlombok:lombok:1.18.12") + api("com.graphql-java:graphql-java:15.0") + api("io.github.graphql-java:graphql-java-annotations:8.3") + api("org.slf4j:slf4j-api:1.7.30") + api("io.reactivex.rxjava3:rxjava:3.0.7") + api("com.google.protobuf:protobuf-java-util:3.14.0") + api("org.projectlombok:lombok:1.18.16") api("com.google.code.findbugs:jsr305:3.0.2") - api("com.typesafe:config:1.4.0") + api("com.typesafe:config:1.4.1") api("com.google.guava:guava:30.0-jre") - api("com.graphql-java-kickstart:graphql-java-servlet:9.1.0") - api("io.grpc:grpc-api:1.33.0") - api("io.grpc:grpc-core:1.33.0") - api("io.grpc:grpc-stub:1.33.0") - api("io.grpc:grpc-context:1.33.0") - api("com.fasterxml.jackson.core:jackson-databind:2.11.0") - api("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.0") + api("com.graphql-java-kickstart:graphql-java-servlet:10.0.0") + api("io.grpc:grpc-api:1.33.1") + api("io.grpc:grpc-core:1.33.1") + api("io.grpc:grpc-stub:1.33.1") + api("io.grpc:grpc-context:1.33.1") + api("com.fasterxml.jackson.core:jackson-databind:2.12.0") + api("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.0") - runtime("org.apache.logging.log4j:log4j-slf4j-impl:2.13.3") - runtime("io.grpc:grpc-netty:1.33.0") + runtime("org.apache.logging.log4j:log4j-slf4j-impl:2.14.0") + runtime("io.grpc:grpc-netty:1.33.1") runtime("io.netty:netty-codec-http2:4.1.53.Final") { because("https://snyk.io/vuln/SNYK-JAVA-IONETTY-1020439") } diff --git a/hypertrace-core-graphql-service/build.gradle.kts b/hypertrace-core-graphql-service/build.gradle.kts index bc94135a..8adb28b7 100644 --- a/hypertrace-core-graphql-service/build.gradle.kts +++ b/hypertrace-core-graphql-service/build.gradle.kts @@ -9,12 +9,12 @@ dependencies { implementation(platform(project(":hypertrace-core-graphql-platform"))) implementation("com.typesafe:config") - implementation("org.hypertrace.core.serviceframework:platform-service-framework:0.1.15") + implementation("org.hypertrace.core.serviceframework:platform-service-framework:0.1.18") implementation("org.slf4j:slf4j-api") - implementation("org.eclipse.jetty:jetty-server:9.4.30.v20200611") - implementation("org.eclipse.jetty:jetty-servlet:9.4.30.v20200611") - implementation("org.eclipse.jetty:jetty-servlets:9.4.30.v20200611") + implementation("org.eclipse.jetty:jetty-server:9.4.35.v20201120") + implementation("org.eclipse.jetty:jetty-servlet:9.4.35.v20201120") + implementation("org.eclipse.jetty:jetty-servlets:9.4.35.v20201120") implementation("com.graphql-java-kickstart:graphql-java-servlet") implementation(project(":hypertrace-core-graphql-impl")) diff --git a/hypertrace-core-graphql-test-platform/build.gradle.kts b/hypertrace-core-graphql-test-platform/build.gradle.kts index 7fc9cfe8..83bee8ad 100644 --- a/hypertrace-core-graphql-test-platform/build.gradle.kts +++ b/hypertrace-core-graphql-test-platform/build.gradle.kts @@ -5,7 +5,7 @@ plugins { dependencies { constraints { api("org.junit.jupiter:junit-jupiter:5.7.0") - api("org.mockito:mockito-core:3.5.13") - api("org.mockito:mockito-junit-jupiter:3.5.13") + api("org.mockito:mockito-core:3.6.28") + api("org.mockito:mockito-junit-jupiter:3.6.28") } } \ No newline at end of file From f4360730e33aca3c76c7d8a9cccc437b57b94519 Mon Sep 17 00:00:00 2001 From: SJ <48863181+skjindal93@users.noreply.github.com> Date: Thu, 17 Dec 2020 22:00:37 +0530 Subject: [PATCH 038/173] chore: upgrade gateway service api (#36) --- hypertrace-core-graphql-platform/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index ae081976..0ba2109e 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -7,7 +7,7 @@ dependencies { api("org.hypertrace.core.grpcutils:grpc-context-utils:0.3.2") api("org.hypertrace.core.grpcutils:grpc-client-utils:0.3.2") - api("org.hypertrace.gateway.service:gateway-service-api:0.1.38") + api("org.hypertrace.gateway.service:gateway-service-api:0.1.40") api("org.hypertrace.core.attribute.service:attribute-service-api:0.8.7") api("com.google.inject:guice:4.2.3") @@ -37,4 +37,4 @@ dependencies { because("https://snyk.io/vuln/SNYK-JAVA-IONETTY-1020439s") } } -} \ No newline at end of file +} From b10a84f93cc28377524020bdc13843d0dd12b481 Mon Sep 17 00:00:00 2001 From: SJ <48863181+skjindal93@users.noreply.github.com> Date: Fri, 18 Dec 2020 19:38:34 +0530 Subject: [PATCH 039/173] fix(attribute-map): default attribute value treated as null (#37) * fix(attribute-map): default attribute value treated as empty object * ignore default value UNSET from attribute map --- .../core/graphql/utils/gateway/AttributeMapConverter.java | 1 + 1 file changed, 1 insertion(+) diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/AttributeMapConverter.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/AttributeMapConverter.java index 63234f62..28c74848 100644 --- a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/AttributeMapConverter.java +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/AttributeMapConverter.java @@ -27,6 +27,7 @@ class AttributeMapConverter public Single> convert( Collection attributes, Map response) { return Observable.fromIterable(attributes) + .filter(attribute -> !Value.getDefaultInstance().equals(response.get(attribute.alias()))) .flatMapSingle(attribute -> this.buildAttributeMapEntry(attribute, response)) .distinct() .collect(CollectorUtils.immutableMapEntryCollector()); From 2b1c58fd2da843c619d4a5fef9f7707e0b39ef9a Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Sun, 27 Dec 2020 11:51:29 -0800 Subject: [PATCH 040/173] feat: add support for spaces (#38) --- .../CommonDeserializationModule.java | 7 +++++++ .../request/DefaultResultSetRequestBuilder.java | 16 +++++++++++++--- .../graphql/common/request/ResultSetRequest.java | 3 +++ .../common/request/ResultSetRequestBuilder.java | 4 +++- .../results/arguments/space/SpaceArgument.java | 7 +++++++ .../DefaultResultSetRequestBuilderTest.java | 5 +++++ .../build.gradle.kts | 2 +- .../dao/GatewayServiceSpanRequestBuilder.java | 1 + .../core/graphql/span/schema/SpanSchema.java | 4 +++- .../dao/GatewayServiceTraceRequestBuilder.java | 2 ++ .../core/graphql/trace/schema/TraceSchema.java | 4 +++- 11 files changed, 48 insertions(+), 7 deletions(-) create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/space/SpaceArgument.java diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/CommonDeserializationModule.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/CommonDeserializationModule.java index b0c86728..9aecb920 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/CommonDeserializationModule.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/CommonDeserializationModule.java @@ -9,6 +9,7 @@ import org.hypertrace.core.graphql.common.schema.id.IdArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.page.LimitArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.page.OffsetArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.space.SpaceArgument; import org.hypertrace.core.graphql.deserialization.ArgumentDeserializationConfig; public class CommonDeserializationModule extends AbstractModule { @@ -42,6 +43,12 @@ protected void configure() { ArgumentDeserializationConfig.forPrimitive( AttributeKeyArgument.ARGUMENT_NAME, AttributeKeyArgument.class)); + deserializationConfigMultibinder + .addBinding() + .toInstance( + ArgumentDeserializationConfig.forPrimitive( + SpaceArgument.ARGUMENT_NAME, SpaceArgument.class)); + requireBinding(Key.get(new TypeLiteral>() {})); } } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilder.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilder.java index a739cd94..3e3042da 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilder.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilder.java @@ -9,6 +9,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.stream.Collectors; import java.util.stream.Stream; import javax.inject.Inject; @@ -20,6 +21,7 @@ import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.page.LimitArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.page.OffsetArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.space.SpaceArgument; import org.hypertrace.core.graphql.common.utils.attributes.AttributeAssociator; import org.hypertrace.core.graphql.context.GraphQlRequestContext; import org.hypertrace.core.graphql.deserialization.ArgumentDeserializer; @@ -90,6 +92,10 @@ public Single> build( .deserializeObjectList(arguments, FilterArgument.class) .orElse(Collections.emptyList()); + Optional spaceId = + this.argumentDeserializer + .deserializePrimitive(arguments, SpaceArgument.class); + return zip( this.attributeAssociator .associateAttributes(context, requestScope, requestedOrders, OrderArgument::key) @@ -104,7 +110,8 @@ public Single> build( timeRange, orders, filters, - this.getAttributeQueryableFields(selectionSet))) + this.getAttributeQueryableFields(selectionSet), + spaceId)) .flatMap(single -> single); } @@ -117,7 +124,8 @@ public Single> build( TimeRangeArgument timeRange, List> orderArguments, Collection> filterArguments, - Stream attributeQueryableFields) { + Stream attributeQueryableFields, + Optional spaceId) { return zip( this.attributeRequestBuilder .buildForAttributeQueryableFieldsAndId(context, requestScope, attributeQueryableFields) @@ -132,7 +140,8 @@ public Single> build( limit, offset, orderArguments, - filterArguments)); + filterArguments, + spaceId)); } private Stream getAttributeQueryableFields( @@ -153,5 +162,6 @@ private static class DefaultResultSetRequest int offset; List> orderArguments; Collection> filterArguments; + Optional spaceId; } } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequest.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequest.java index b109c264..1130b076 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequest.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequest.java @@ -2,6 +2,7 @@ import java.util.Collection; import java.util.List; +import java.util.Optional; import org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; @@ -24,4 +25,6 @@ public interface ResultSetRequest { List> orderArguments(); Collection> filterArguments(); + + Optional spaceId(); } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequestBuilder.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequestBuilder.java index f4216648..a2c9a88c 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequestBuilder.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequestBuilder.java @@ -6,6 +6,7 @@ import java.util.Collection; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.stream.Stream; import org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; @@ -34,5 +35,6 @@ Single> build( TimeRangeArgument timeRange, List> orderArguments, Collection> filterArguments, - Stream attributeQueryableFields); + Stream attributeQueryableFields, + Optional spaceId); } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/space/SpaceArgument.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/space/SpaceArgument.java new file mode 100644 index 00000000..4337ad3c --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/space/SpaceArgument.java @@ -0,0 +1,7 @@ +package org.hypertrace.core.graphql.common.schema.results.arguments.space; + +import org.hypertrace.core.graphql.deserialization.PrimitiveArgument; + +public interface SpaceArgument extends PrimitiveArgument { + String ARGUMENT_NAME = "space"; +} diff --git a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilderTest.java b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilderTest.java index 2adb9844..a5b02ad4 100644 --- a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilderTest.java +++ b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilderTest.java @@ -20,6 +20,7 @@ import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.page.LimitArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.page.OffsetArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.space.SpaceArgument; import org.hypertrace.core.graphql.common.utils.attributes.AttributeAssociator; import org.hypertrace.core.graphql.context.GraphQlRequestContext; import org.hypertrace.core.graphql.deserialization.ArgumentDeserializer; @@ -44,6 +45,7 @@ class DefaultResultSetRequestBuilderTest { @Mock AttributeModel mockFooAttribute; int mockLimit = 3; int mockOffset = 4; + String mockSpace = "mock-space"; @Mock DataFetchingFieldSelectionSet mockSelectionSet; @Mock Stream mockAttributeQueryableStream; @Mock AttributeRequest mockFooAttributeRequest; @@ -91,6 +93,8 @@ void canBuildRequest() { .thenReturn(Optional.of(List.of(this.mockOrderArgument))); when(this.mockArgumentDeserializer.deserializeObjectList(any(), eq(FilterArgument.class))) .thenReturn(Optional.of(List.of(this.mockFilterArgument))); + when(this.mockArgumentDeserializer.deserializePrimitive(any(), eq(SpaceArgument.class))) + .thenReturn(Optional.of(this.mockSpace)); ResultSetRequest request = this.requestBuilder @@ -112,5 +116,6 @@ void canBuildRequest() { assertEquals( List.of(AttributeAssociation.of(this.mockFooAttribute, this.mockFilterArgument)), request.filterArguments()); + assertEquals(Optional.of(mockSpace), request.spaceId()); } } diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 0ba2109e..c7fb9981 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -7,7 +7,7 @@ dependencies { api("org.hypertrace.core.grpcutils:grpc-context-utils:0.3.2") api("org.hypertrace.core.grpcutils:grpc-client-utils:0.3.2") - api("org.hypertrace.gateway.service:gateway-service-api:0.1.40") + api("org.hypertrace.gateway.service:gateway-service-api:0.1.42") api("org.hypertrace.core.attribute.service:attribute-service-api:0.8.7") api("com.google.inject:guice:4.2.3") diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanRequestBuilder.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanRequestBuilder.java index dbd593ef..a38de1df 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanRequestBuilder.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanRequestBuilder.java @@ -49,6 +49,7 @@ Single buildRequest(ResultSetRequest gqlRequest) { .setLimit(gqlRequest.limit()) .setOffset(gqlRequest.offset()) .setFilter(filters) + .setSpaceId(gqlRequest.spaceId().orElse("")) // String proto default value .build()); } } diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/schema/SpanSchema.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/schema/SpanSchema.java index 22b7ed10..e7441355 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/schema/SpanSchema.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/schema/SpanSchema.java @@ -10,6 +10,7 @@ import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.page.LimitArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.page.OffsetArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.space.SpaceArgument; import org.hypertrace.core.graphql.span.fetcher.SpanFetcher; public interface SpanSchema { @@ -24,5 +25,6 @@ SpanResultSet spans( @GraphQLName(FilterArgument.ARGUMENT_NAME) List filterBy, @GraphQLName(OrderArgument.ARGUMENT_NAME) List orderBy, @GraphQLName(LimitArgument.ARGUMENT_NAME) int limit, - @GraphQLName(OffsetArgument.ARGUMENT_NAME) int offset); + @GraphQLName(OffsetArgument.ARGUMENT_NAME) int offset, + @GraphQLName(SpaceArgument.ARGUMENT_NAME) String space); } diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceRequestBuilder.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceRequestBuilder.java index b20580c9..ffa630c6 100644 --- a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceRequestBuilder.java +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceRequestBuilder.java @@ -52,6 +52,8 @@ Single buildRequest(TraceRequest request) { .setLimit(request.resultSetRequest().limit()) .setOffset(request.resultSetRequest().offset()) .setFilter(filters) + .setSpaceId( + request.resultSetRequest().spaceId().orElse("")) // String proto default value .build()); } } diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/schema/TraceSchema.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/schema/TraceSchema.java index dfd55a51..f4fda8dd 100644 --- a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/schema/TraceSchema.java +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/schema/TraceSchema.java @@ -10,6 +10,7 @@ import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.page.LimitArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.page.OffsetArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.space.SpaceArgument; import org.hypertrace.core.graphql.trace.fetcher.TraceFetcher; import org.hypertrace.core.graphql.trace.schema.arguments.TraceType; import org.hypertrace.core.graphql.trace.schema.arguments.TraceTypeArgument; @@ -27,5 +28,6 @@ TraceResultSet traces( @GraphQLName(FilterArgument.ARGUMENT_NAME) List filterBy, @GraphQLName(OrderArgument.ARGUMENT_NAME) List orderBy, @GraphQLName(LimitArgument.ARGUMENT_NAME) int limit, - @GraphQLName(OffsetArgument.ARGUMENT_NAME) int offset); + @GraphQLName(OffsetArgument.ARGUMENT_NAME) int offset, + @GraphQLName(SpaceArgument.ARGUMENT_NAME) String space); } From ce6a5750d8ba75a6bda56b8ecc76b87ba05edbc5 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Wed, 30 Dec 2020 05:33:49 -0800 Subject: [PATCH 041/173] fix: support a different arg name for plural args (#39) --- .../ArgumentDeserializationConfig.java | 11 ++++++- .../DefaultArgumentDeserializer.java | 28 ++++++++++------ .../SimpleArgumentDeserializationConfig.java | 1 + .../DefaultArgumentDeserializerTest.java | 32 +++++++++---------- 4 files changed, 44 insertions(+), 28 deletions(-) diff --git a/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/ArgumentDeserializationConfig.java b/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/ArgumentDeserializationConfig.java index be53e8da..8a62aaae 100644 --- a/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/ArgumentDeserializationConfig.java +++ b/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/ArgumentDeserializationConfig.java @@ -8,6 +8,10 @@ public interface ArgumentDeserializationConfig { String getArgumentKey(); + default String getListArgumentKey() { + return getArgumentKey(); + } + Class getArgumentSchema(); default List jacksonModules() { @@ -15,6 +19,11 @@ default List jacksonModules() { } static ArgumentDeserializationConfig forPrimitive(String argKey, Class argSchema) { - return new SimpleArgumentDeserializationConfig(argKey, argSchema); + return forPrimitive(argKey, argKey, argSchema); + } + + static ArgumentDeserializationConfig forPrimitive( + String argKey, String listArgKey, Class argSchema) { + return new SimpleArgumentDeserializationConfig(argKey, listArgKey, argSchema); } } diff --git a/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/DefaultArgumentDeserializer.java b/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/DefaultArgumentDeserializer.java index 3d0ae56b..9b1e95c0 100644 --- a/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/DefaultArgumentDeserializer.java +++ b/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/DefaultArgumentDeserializer.java @@ -10,6 +10,7 @@ import java.util.Objects; import java.util.Optional; import java.util.Set; +import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; import javax.annotation.Nullable; @@ -23,7 +24,7 @@ class DefaultArgumentDeserializer implements ArgumentDeserializer { private static final Logger LOG = LoggerFactory.getLogger(DefaultArgumentDeserializer.class); private final ObjectMapper objectMapper; - private final Map, String> argKeyBySchema; + private final Map, ArgumentDeserializationConfig> configBySchema; @Inject DefaultArgumentDeserializer(Set argumentDeserializationConfigs) { @@ -35,39 +36,38 @@ class DefaultArgumentDeserializer implements ArgumentDeserializer { .flatMap(Collection::stream)) .collect(Collectors.toUnmodifiableSet()); - this.argKeyBySchema = + this.configBySchema = argumentDeserializationConfigs.stream() .collect( Collectors.toUnmodifiableMap( - ArgumentDeserializationConfig::getArgumentSchema, - ArgumentDeserializationConfig::getArgumentKey)); + ArgumentDeserializationConfig::getArgumentSchema, Function.identity())); this.objectMapper = JsonMapper.builder().addModules(jacksonModules).build(); } @Override public Optional deserializeObject(Map arguments, Class argSchema) { - return this.argumentKeyForSchema(argSchema) + return this.argumentKey(argSchema) .flatMap(key -> this.deserializeValue(arguments.get(key), argSchema)); } @Override public Optional> deserializeObjectList( Map arguments, Class argSchema) { - return this.argumentKeyForSchema(argSchema) + return this.listArgumentKey(argSchema) .flatMap(key -> this.deserializeValueList(arguments.get(key), argSchema)); } @Override public Optional deserializePrimitive( Map arguments, Class> argSchema) { - return this.argumentKeyForSchema(argSchema).map(key -> this.uncheckedCast(arguments.get(key))); + return this.argumentKey(argSchema).map(key -> this.uncheckedCast(arguments.get(key))); } @Override public Optional> deserializePrimitiveList( Map arguments, Class> argSchema) { - return this.argumentKeyForSchema(argSchema) + return this.listArgumentKey(argSchema) .flatMap(key -> this.logIfNotList(arguments.get(key))); } @@ -81,8 +81,16 @@ private Optional deserializeValue(@Nullable Object rawValue, Class arg } } - private Optional argumentKeyForSchema(Class argSchema) { - return Optional.ofNullable(this.argKeyBySchema.get(argSchema)) + private Optional argumentKey(Class argSchema) { + return configForSchema(argSchema).map(ArgumentDeserializationConfig::getArgumentKey); + } + + private Optional listArgumentKey(Class argSchema) { + return configForSchema(argSchema).map(ArgumentDeserializationConfig::getListArgumentKey); + } + + private Optional configForSchema(Class argSchema) { + return Optional.ofNullable(this.configBySchema.get(argSchema)) .or( () -> { LOG.warn( diff --git a/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/SimpleArgumentDeserializationConfig.java b/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/SimpleArgumentDeserializationConfig.java index 5e6c8263..06cd34a7 100644 --- a/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/SimpleArgumentDeserializationConfig.java +++ b/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/SimpleArgumentDeserializationConfig.java @@ -5,5 +5,6 @@ @Value class SimpleArgumentDeserializationConfig implements ArgumentDeserializationConfig { String argumentKey; + String listArgumentKey; Class argumentSchema; } diff --git a/hypertrace-core-graphql-deserialization/src/test/java/org/hypertrace/core/graphql/deserialization/DefaultArgumentDeserializerTest.java b/hypertrace-core-graphql-deserialization/src/test/java/org/hypertrace/core/graphql/deserialization/DefaultArgumentDeserializerTest.java index b0b6ead1..86539b60 100644 --- a/hypertrace-core-graphql-deserialization/src/test/java/org/hypertrace/core/graphql/deserialization/DefaultArgumentDeserializerTest.java +++ b/hypertrace-core-graphql-deserialization/src/test/java/org/hypertrace/core/graphql/deserialization/DefaultArgumentDeserializerTest.java @@ -12,16 +12,14 @@ import java.util.Set; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.junit.jupiter.MockitoExtension; -@ExtendWith(MockitoExtension.class) class DefaultArgumentDeserializerTest { private DefaultArgumentDeserializer argumentDeserializer; private interface TestPrimitiveArgument extends PrimitiveArgument { String ARG_NAME = "primitiveArg"; + String LIST_ARG_NAME = "primitiveArgs"; } private interface TestObjectArgument { @@ -46,17 +44,10 @@ void beforeEach() { this.argumentDeserializer = new DefaultArgumentDeserializer( Set.of( - new ArgumentDeserializationConfig() { - @Override - public String getArgumentKey() { - return TestPrimitiveArgument.ARG_NAME; - } - - @Override - public Class getArgumentSchema() { - return TestPrimitiveArgument.class; - } - }, + ArgumentDeserializationConfig.forPrimitive( + TestPrimitiveArgument.ARG_NAME, + TestPrimitiveArgument.LIST_ARG_NAME, + TestPrimitiveArgument.class), new ArgumentDeserializationConfig() { @Override public String getArgumentKey() { @@ -166,22 +157,29 @@ void deserializePrimitive() { void emptyIfNoPrimitivePresent() { assertEquals( Optional.empty(), - this.argumentDeserializer.deserializeObject( + this.argumentDeserializer.deserializePrimitive( Collections.emptyMap(), TestPrimitiveArgument.class)); } @Test void deserializePrimitiveList() { Map argMap = - Map.of(TestPrimitiveArgument.ARG_NAME, List.of("foo", "bar", "baz")); + Map.of(TestPrimitiveArgument.LIST_ARG_NAME, List.of("foo", "bar", "baz")); assertEquals( Optional.of(List.of("foo", "bar", "baz")), this.argumentDeserializer.deserializePrimitiveList(argMap, TestPrimitiveArgument.class)); + + // Make sure only the list arg name works + argMap = + Map.of(TestPrimitiveArgument.ARG_NAME, List.of("foo", "bar", "baz")); + assertEquals( + Optional.empty(), + this.argumentDeserializer.deserializePrimitiveList(argMap, TestPrimitiveArgument.class)); } @Test void emptyListForEmptyPrimitiveList() { - Map argMap = Map.of(TestPrimitiveArgument.ARG_NAME, List.of()); + Map argMap = Map.of(TestPrimitiveArgument.LIST_ARG_NAME, List.of()); assertEquals( Optional.of(List.of()), this.argumentDeserializer.deserializePrimitiveList(argMap, TestPrimitiveArgument.class)); From d251177a6f183beee92003a24fed5c5264f70b66 Mon Sep 17 00:00:00 2001 From: Jayesh Bapu Ahire Date: Thu, 7 Jan 2021 07:55:51 +0530 Subject: [PATCH 042/173] ci: migrating to GitHub actions (#40) * migrating to GHA and removes CCI * removes CCI * addressed Aaron's comments --- .circleci/config.yml | 165 ---------------------------- .github/CODEOWNERS | 3 + .github/workflows/merge-publish.yml | 42 +++++++ .github/workflows/pr-build.yml | 73 ++++++++++++ .github/workflows/pr-test.yml | 48 ++++++++ .github/workflows/publish.yml | 60 ++++++++++ build.gradle.kts | 4 +- codecov.yml | 2 + 8 files changed, 230 insertions(+), 167 deletions(-) delete mode 100644 .circleci/config.yml create mode 100644 .github/workflows/merge-publish.yml create mode 100644 .github/workflows/pr-build.yml create mode 100644 .github/workflows/pr-test.yml create mode 100644 .github/workflows/publish.yml create mode 100644 codecov.yml diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index b1dff679..00000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,165 +0,0 @@ -version: 2.1 - -orbs: - codecov: codecov/codecov@1 - snyk: snyk/snyk@0.0.10 - -executors: - java: - docker: - - image: cimg/openjdk:11.0 - auth: - username: $DOCKERHUB_USERNAME - password: $DOCKERHUB_PASSWORD - helm: - docker: - - image: hypertrace/helm-gcs-packager:0.1.1 - auth: - username: $DOCKERHUB_USERNAME - password: $DOCKERHUB_PASSWORD -commands: - gradle: - description: 'Run the provided gradle command' - parameters: - args: - type: string - when: - default: "on_success" - type: enum - enum: ["on_fail", "on_success", "always"] - steps: - - run: - name: << parameters.args >> - command: ./gradlew << parameters.args >> --info --max-workers=2 -Dorg.gradle.jvmargs=-Xmx2g -Dorg.gradle.console=plain --continue - when: << parameters.when >> - setup_build_environment: - description: 'Generates cache key from a hash of all gradle files' - steps: - - checkout - - run: - name: Generate cache key - command: find . -type f -name "*.gradle*" -exec shasum {} + | sort > /tmp/checksum.txt && cat /tmp/checksum.txt - - restore_cache: - keys: - - v1-dependencies-{{ checksum "/tmp/checksum.txt" }} - # fallback to using the latest cache if no exact match is found - - v1-dependencies- - populate_and_save_cache: - description: 'Downloads all gradle dependencies and uploads cache for later use' - steps: - - gradle: - args: downloadDependencies - - save_cache: - paths: - - ~/.gradle - key: v1-dependencies-{{ checksum "/tmp/checksum.txt" }} - -jobs: - build: - executor: java - steps: - - setup_build_environment - - setup_remote_docker - - populate_and_save_cache - - run: - name: Dockerhub login - command: echo $DOCKERHUB_PASSWORD | docker login --username $DOCKERHUB_USERNAME --password-stdin - - gradle: - args: build dockerBuildImages - - gradle: - args: jacocoTestReport - - gradle: - args: copyAllReports --output-dir=/tmp/test-reports - when: always - - codecov/upload - - store_test_results: - path: /tmp/test-reports - - store_artifacts: - path: /tmp/test-reports - destination: reports - snyk-scan: - executor: java - environment: - GRADLE_OPTS: -Dorg.gradle.workers.max=1 # Snyk doesn't handle parallelism well - steps: - - setup_build_environment - - snyk/scan: - additional-arguments: --all-sub-projects --policy-path=.snyk - - publish: - executor: java - steps: - - setup_build_environment - - setup_remote_docker - - run: - name: Dockerhub login - command: echo $DOCKERHUB_PASSWORD | docker login --username $DOCKERHUB_USERNAME --password-stdin - - gradle: - args: :tag -Prelease - - add_ssh_keys: - fingerprints: - - 'b9:bd:a2:02:5b:02:ec:2e:53:b4:de:f1:57:45:0a:e6' - - run: git push origin $(./gradlew -q :printVersion) - - gradle: - args: dockerPushImages - validate-charts: - executor: helm - steps: - - checkout - - run: - name: Helm Charts Lint and Template Render - command: | - helm lint --strict ./helm/ - helm template ./helm/ - package-charts: - executor: helm - steps: - - checkout - - run: - name: Package and Publish Helm Charts - command: | - CHART_VERSION=$(git describe --abbrev=0) - CHART_NAME=$(awk '/^name:/ {print $2}' ./helm/Chart.yaml) - export GOOGLE_APPLICATION_CREDENTIALS=${HOME}/helm-gcs-key.json - echo ${HELM_GCS_CREDENTIALS} > ${GOOGLE_APPLICATION_CREDENTIALS} - helm dependency update ./helm/ - helm repo add helm-gcs ${HELM_GCS_REPOSITORY} - helm package --version ${CHART_VERSION} --app-version ${CHART_VERSION} ./helm/ - helm gcs push ${CHART_NAME}-${CHART_VERSION}.tgz helm-gcs --public --retry - -workflows: - version: 2 - build-and-publish: - jobs: - - build: - context: - - dockerhub-read - - validate-charts: - context: - - dockerhub-read - - snyk-scan: - context: - - hypertrace-vulnerability-scanning - - dockerhub-read - - publish: - context: - - hypertrace-publishing - - dockerhub-read - requires: - - build - - snyk-scan - - validate-charts - filters: - branches: - only: - - main - - package-charts: - context: - - hypertrace-publishing - - dockerhub-read - requires: - - publish - filters: - branches: - only: - - main diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index c2f60c1e..868a94e1 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -2,3 +2,6 @@ # global * @hypertrace/graphql + +# GH action +.github/ @aaron-steinfeld @jbahire @kotharironak @buchi-busireddy \ No newline at end of file diff --git a/.github/workflows/merge-publish.yml b/.github/workflows/merge-publish.yml new file mode 100644 index 00000000..fc007f47 --- /dev/null +++ b/.github/workflows/merge-publish.yml @@ -0,0 +1,42 @@ +name: merge-publish +on: + push: + branches: + - main + workflow_dispatch: + +jobs: + merge-publish: + runs-on: ubuntu-20.04 + steps: + # Set fetch-depth: 0 to fetch commit history and tags for use in version calculation + - name: Check out code + uses: actions/checkout@v2.3.4 + with: + fetch-depth: 0 + + - name: create checksum file + uses: hypertrace/actions/checksum@main + + - name: Cache packages + uses: actions/cache@v2 + with: + path: ~/.gradle + key: gradle-packages-${{ runner.os }}-${{ github.job }}-${{ hashFiles('**/checksum.txt') }} + restore-keys: | + gradle-packages-${{ runner.os }}-${{ github.job }} + gradle-packages-${{ runner.os }} + + - name: Login to Docker Hub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_READ_USER }} + password: ${{ secrets.DOCKERHUB_READ_TOKEN }} + + - name: push docker image + uses: hypertrace/github-actions/gradle@main + with: + args: dockerPushImages + env: + DOCKER_USERNAME: ${{ secrets.DOCKERHUB_PUBLISH_USER }} + DOCKER_PASSWORD: ${{ secrets.DOCKERHUB_PUBLISH_TOKEN }} diff --git a/.github/workflows/pr-build.yml b/.github/workflows/pr-build.yml new file mode 100644 index 00000000..b831c010 --- /dev/null +++ b/.github/workflows/pr-build.yml @@ -0,0 +1,73 @@ +name: build and validate +on: + push: + branches: + - main + pull_request_target: + branches: + - main + +jobs: + build: + runs-on: ubuntu-20.04 + steps: + # Set fetch-depth: 0 to fetch commit history and tags for use in version calculation + - name: Check out code + uses: actions/checkout@v2.3.4 + with: + ref: ${{github.event.pull_request.head.ref}} + repository: ${{github.event.pull_request.head.repo.full_name}} + fetch-depth: 0 + + - name: create checksum file + uses: hypertrace/github-actions/checksum@main + + - name: Cache packages + uses: actions/cache@v2 + with: + path: ~/.gradle + key: gradle-packages-${{ runner.os }}-${{ github.job }}-${{ hashFiles('**/checksum.txt') }} + restore-keys: | + gradle-packages-${{ runner.os }}-${{ github.job }} + gradle-packages-${{ runner.os }} + + - name: Login to Docker Hub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_READ_USER }} + password: ${{ secrets.DOCKERHUB_READ_TOKEN }} + + - name: Build with Gradle + uses: hypertrace/github-actions/gradle@main + with: + args: build dockerBuildImages + + validate-helm-charts: + runs-on: ubuntu-20.04 + steps: + - name: Check out code + uses: actions/checkout@v2.3.4 + with: + ref: ${{github.event.pull_request.head.ref}} + repository: ${{github.event.pull_request.head.repo.full_name}} + fetch-depth: 0 + + - name: validate charts + uses: hypertrace/github-actions/validate-charts@main + + snyk-scan: + runs-on: ubuntu-20.04 + steps: + # Set fetch-depth: 0 to fetch commit history and tags for use in version calculation + - name: Check out code + uses: actions/checkout@v2.3.4 + with: + ref: ${{github.event.pull_request.head.ref}} + repository: ${{github.event.pull_request.head.repo.full_name}} + fetch-depth: 0 + - name: Setup snyk + uses: snyk/actions/setup@0.3.0 + - name: Snyk test + run: snyk test --all-sub-projects --org=hypertrace --severity-threshold=low --policy-path=.snyk --configuration-matching='^runtimeClasspath$' + env: + SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} diff --git a/.github/workflows/pr-test.yml b/.github/workflows/pr-test.yml new file mode 100644 index 00000000..7c29cd8c --- /dev/null +++ b/.github/workflows/pr-test.yml @@ -0,0 +1,48 @@ +name: test +on: + push: + branches: + - main + pull_request: + +jobs: + test: + runs-on: ubuntu-20.04 + steps: + # Set fetch-depth: 0 to fetch commit history and tags for use in version calculation + - name: Check out code + uses: actions/checkout@v2.3.4 + with: + fetch-depth: 0 + + - name: create checksum file + uses: hypertrace/github-actions/checksum@main + + - name: Cache packages + id: cache-packages + uses: actions/cache@v2 + with: + path: ~/.gradle + key: gradle-packages-${{ runner.os }}-${{ github.job }}-${{ hashFiles('**/checksum.txt') }} + restore-keys: | + gradle-packages-${{ runner.os }}-${{ github.job }} + gradle-packages-${{ runner.os }} + + - name: Unit test + uses: hypertrace/github-actions/gradle@main + with: + args: jacocoTestReport + + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v1 + with: + name: unit test reports + fail_ci_if_error: true + flags: unit + + - name: Publish Unit Test Results + uses: docker://ghcr.io/enricomi/publish-unit-test-result-action:v1.6 + if: always() + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + files: ./**/build/test-results/**/*.xml \ No newline at end of file diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 00000000..d70698e0 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,60 @@ +name: Publish artifacts +on: +# Will only run when release is published. + release: + types: + - created + workflow_dispatch: + +jobs: + publish-artifacts: + runs-on: ubuntu-20.04 + steps: + # Set fetch-depth: 0 to fetch commit history and tags for use in version calculation + - name: Check out code + uses: actions/checkout@v2.3.4 + with: + fetch-depth: 0 + + - name: create checksum file + uses: hypertrace/github-actions/checksum@main + + - name: Cache packages + uses: actions/cache@v2 + with: + path: ~/.gradle + key: gradle-packages-${{ runner.os }}-${{ github.job }}-${{ hashFiles('**/checksum.txt') }} + restore-keys: | + gradle-packages-${{ runner.os }}-${{ github.job }} + gradle-packages-${{ runner.os }} + + - name: Login to Docker Hub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_READ_USER }} + password: ${{ secrets.DOCKERHUB_READ_TOKEN }} + + - name: publish docker image + uses: hypertrace/github-actions/gradle@main + with: + args: publish dockerPushImages + env: + DOCKER_USERNAME: ${{ secrets.DOCKERHUB_PUBLISH_USER }} + DOCKER_PASSWORD: ${{ secrets.DOCKERHUB_PUBLISH_TOKEN }} + + publish-helm-charts: + needs: publish-artifacts + runs-on: ubuntu-20.04 + steps: + # Set fetch-depth: 0 to fetch commit history and tags for use in version calculation + - name: Checkout Repository + uses: actions/checkout@v2.3.4 + with: + fetch-depth: 0 + + - name: package and release charts + uses: hypertrace/github-actions/helm-gcs-publish@main + with: + helm-gcs-credentials: ${{ secrets.HELM_GCS_CREDENTIALS }} + helm-gcs-repository: ${{ secrets.HELM_GCS_REPOSITORY }} + diff --git a/build.gradle.kts b/build.gradle.kts index 017ce639..243f8be1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,8 +2,8 @@ plugins { id("org.hypertrace.repository-plugin") version "0.2.0" id("org.hypertrace.ci-utils-plugin") version "0.1.1" id("org.hypertrace.jacoco-report-plugin") version "0.1.0" apply false - id("org.hypertrace.docker-java-application-plugin") version "0.4.0" apply false - id("org.hypertrace.docker-publish-plugin") version "0.4.0" apply false + id("org.hypertrace.docker-java-application-plugin") version "0.8.1" apply false + id("org.hypertrace.docker-publish-plugin") version "0.8.1" apply false } subprojects { diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 00000000..8a333e58 --- /dev/null +++ b/codecov.yml @@ -0,0 +1,2 @@ +codecov: + max_report_age: off From 095b4663887a5b7d67637a9954837d778afcaa28 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Wed, 6 Jan 2021 19:13:39 -0800 Subject: [PATCH 043/173] ci: fix snyk args to match all configs (#41) --- .github/workflows/pr-build.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/pr-build.yml b/.github/workflows/pr-build.yml index b831c010..4521bb9b 100644 --- a/.github/workflows/pr-build.yml +++ b/.github/workflows/pr-build.yml @@ -4,21 +4,21 @@ on: branches: - main pull_request_target: - branches: + branches: - main jobs: build: runs-on: ubuntu-20.04 steps: - # Set fetch-depth: 0 to fetch commit history and tags for use in version calculation + # Set fetch-depth: 0 to fetch commit history and tags for use in version calculation - name: Check out code uses: actions/checkout@v2.3.4 with: ref: ${{github.event.pull_request.head.ref}} repository: ${{github.event.pull_request.head.repo.full_name}} fetch-depth: 0 - + - name: create checksum file uses: hypertrace/github-actions/checksum@main @@ -36,10 +36,10 @@ jobs: with: username: ${{ secrets.DOCKERHUB_READ_USER }} password: ${{ secrets.DOCKERHUB_READ_TOKEN }} - + - name: Build with Gradle uses: hypertrace/github-actions/gradle@main - with: + with: args: build dockerBuildImages validate-helm-charts: @@ -58,7 +58,7 @@ jobs: snyk-scan: runs-on: ubuntu-20.04 steps: - # Set fetch-depth: 0 to fetch commit history and tags for use in version calculation + # Set fetch-depth: 0 to fetch commit history and tags for use in version calculation - name: Check out code uses: actions/checkout@v2.3.4 with: @@ -68,6 +68,6 @@ jobs: - name: Setup snyk uses: snyk/actions/setup@0.3.0 - name: Snyk test - run: snyk test --all-sub-projects --org=hypertrace --severity-threshold=low --policy-path=.snyk --configuration-matching='^runtimeClasspath$' + run: snyk test --all-sub-projects --org=hypertrace --severity-threshold=low --policy-path=.snyk env: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} From 2e6c0b8726e814e4797ab7a257460c61d00a32ca Mon Sep 17 00:00:00 2001 From: Jayesh Bapu Ahire Date: Thu, 7 Jan 2021 09:22:38 +0530 Subject: [PATCH 044/173] fix: publish for docker images (#42) --- .github/workflows/publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index d70698e0..4941d128 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -37,7 +37,7 @@ jobs: - name: publish docker image uses: hypertrace/github-actions/gradle@main with: - args: publish dockerPushImages + args: dockerPushImages env: DOCKER_USERNAME: ${{ secrets.DOCKERHUB_PUBLISH_USER }} DOCKER_PASSWORD: ${{ secrets.DOCKERHUB_PUBLISH_TOKEN }} From 3c9f41452d69ae55e191e486d151a9d8cc447641 Mon Sep 17 00:00:00 2001 From: pavan-traceable <73101820+pavan-traceable@users.noreply.github.com> Date: Fri, 8 Jan 2021 18:52:08 +0530 Subject: [PATCH 045/173] Updated gateway version (#43) Updated gateway version to use Metric baseline --- .../hypertrace/core/graphql/common/utils/TriConverter.java | 7 +++++++ hypertrace-core-graphql-platform/build.gradle.kts | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/TriConverter.java diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/TriConverter.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/TriConverter.java new file mode 100644 index 00000000..b9ca4a91 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/TriConverter.java @@ -0,0 +1,7 @@ +package org.hypertrace.core.graphql.common.utils; + +import io.reactivex.rxjava3.core.Single; + +public interface TriConverter { + Single convert(F1 f1, F2 f2, F3 f3); +} diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index c7fb9981..4f19a104 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -7,7 +7,7 @@ dependencies { api("org.hypertrace.core.grpcutils:grpc-context-utils:0.3.2") api("org.hypertrace.core.grpcutils:grpc-client-utils:0.3.2") - api("org.hypertrace.gateway.service:gateway-service-api:0.1.42") + api("org.hypertrace.gateway.service:gateway-service-api:0.1.44") api("org.hypertrace.core.attribute.service:attribute-service-api:0.8.7") api("com.google.inject:guice:4.2.3") From 8ddc5ef59014ece33c21f17fb2086862ced554e4 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Tue, 12 Jan 2021 08:46:17 -0800 Subject: [PATCH 046/173] feat: add duration scalar support (#44) --- .../common/schema/CommonSchemaFragment.java | 8 +- .../schema/typefunctions/DurationScalar.java | 77 +++++++++++++++++++ .../schema/scalars/DurationScalarTest.java | 66 ++++++++++++++++ 3 files changed, 149 insertions(+), 2 deletions(-) create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/DurationScalar.java create mode 100644 hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/DurationScalarTest.java diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/CommonSchemaFragment.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/CommonSchemaFragment.java index d0f5c94f..8579de2e 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/CommonSchemaFragment.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/CommonSchemaFragment.java @@ -6,6 +6,7 @@ import javax.inject.Inject; import org.hypertrace.core.graphql.common.schema.typefunctions.AttributeScopeDynamicEnum; import org.hypertrace.core.graphql.common.schema.typefunctions.DateTimeScalar; +import org.hypertrace.core.graphql.common.schema.typefunctions.DurationScalar; import org.hypertrace.core.graphql.common.schema.typefunctions.UnknownScalar; import org.hypertrace.core.graphql.spi.schema.GraphQlSchemaFragment; @@ -14,15 +15,18 @@ class CommonSchemaFragment implements GraphQlSchemaFragment { private final DateTimeScalar dateTimeScalar; private final UnknownScalar unknownScalar; private final AttributeScopeDynamicEnum attributeScopeDynamicEnum; + private final DurationScalar durationScalar; @Inject CommonSchemaFragment( DateTimeScalar dateTimeScalar, UnknownScalar unknownScalar, - AttributeScopeDynamicEnum attributeScopeDynamicEnum) { + AttributeScopeDynamicEnum attributeScopeDynamicEnum, + DurationScalar durationScalar) { this.dateTimeScalar = dateTimeScalar; this.unknownScalar = unknownScalar; this.attributeScopeDynamicEnum = attributeScopeDynamicEnum; + this.durationScalar = durationScalar; } @Override @@ -33,6 +37,6 @@ public String fragmentName() { @Nonnull @Override public List typeFunctions() { - return List.of(this.unknownScalar, this.dateTimeScalar, this.attributeScopeDynamicEnum); + return List.of(this.unknownScalar, this.dateTimeScalar, this.attributeScopeDynamicEnum, this.durationScalar); } } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/DurationScalar.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/DurationScalar.java new file mode 100644 index 00000000..add1b037 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/DurationScalar.java @@ -0,0 +1,77 @@ +package org.hypertrace.core.graphql.common.schema.typefunctions; + +import graphql.GraphqlErrorException; +import graphql.annotations.processor.ProcessingElementsContainer; +import graphql.annotations.processor.typeFunctions.TypeFunction; +import graphql.language.StringValue; +import graphql.schema.Coercing; +import graphql.schema.CoercingParseLiteralException; +import graphql.schema.CoercingParseValueException; +import graphql.schema.CoercingSerializeException; +import graphql.schema.GraphQLScalarType; +import java.lang.reflect.AnnotatedType; +import java.time.DateTimeException; +import java.time.Duration; +import java.util.function.Function; + +public class DurationScalar implements TypeFunction { + + private static final GraphQLScalarType DURATION_SCALAR = + GraphQLScalarType.newScalar() + .name("Duration") + .description("An ISO-8601 formatted Duration Scalar") + .coercing( + new Coercing() { + @Override + public String serialize(Object fetcherResult) throws CoercingSerializeException { + return toDuration(fetcherResult, CoercingSerializeException::new).toString(); + } + + @Override + public Duration parseValue(Object input) throws CoercingParseValueException { + return toDuration(input, CoercingParseValueException::new); + } + + @Override + public Duration parseLiteral(Object input) throws CoercingParseLiteralException { + return toDuration(input, CoercingParseLiteralException::new); + } + + private Duration toDuration( + Object durationInput, Function errorWrapper) throws E { + try { + if (durationInput instanceof Duration) { + return Duration.from((Duration) durationInput); + } + if (durationInput instanceof CharSequence) { + return Duration.parse((CharSequence) durationInput); + } + if (durationInput instanceof StringValue) { + return Duration.parse(((StringValue) durationInput).getValue()); + } + } catch (Exception exception) { + throw errorWrapper.apply(exception); + } + throw errorWrapper.apply( + new DateTimeException( + String.format( + "Cannot convert provided format '%s' to Duration", + durationInput.getClass().getCanonicalName()))); + } + }) + .build(); + + @Override + public boolean canBuildType(Class aClass, AnnotatedType annotatedType) { + return Duration.class.isAssignableFrom(aClass); + } + + @Override + public GraphQLScalarType buildType( + boolean input, + Class aClass, + AnnotatedType annotatedType, + ProcessingElementsContainer container) { + return DURATION_SCALAR; + } +} diff --git a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/DurationScalarTest.java b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/DurationScalarTest.java new file mode 100644 index 00000000..f5165290 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/DurationScalarTest.java @@ -0,0 +1,66 @@ +package org.hypertrace.core.graphql.common.schema.scalars; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import graphql.annotations.processor.ProcessingElementsContainer; +import graphql.language.StringValue; +import graphql.schema.GraphQLScalarType; +import java.lang.reflect.AnnotatedType; +import java.time.Duration; +import java.time.Instant; +import org.hypertrace.core.graphql.common.schema.typefunctions.DurationScalar; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class DurationScalarTest { + + private static final String TEST_DURATION_STRING = "PT2H30M"; + private static final Duration TEST_DURATION = Duration.parse(TEST_DURATION_STRING); + private DurationScalar durationScalar; + private GraphQLScalarType durationType; + @Mock AnnotatedType mockAnnotatedType; + // Can't actually mock class, but it's not used so to convey intent using the Mock class. + private final Class mockAnnotatedClass = Mock.class; + @Mock ProcessingElementsContainer mockProcessingElementsContainer; + + @BeforeEach + void beforeEach() { + this.durationScalar = new DurationScalar(); + // Can't actually mock class, but it's not used so to convey intent using + this.durationType = + this.durationScalar.buildType( + false, mockAnnotatedClass, mockAnnotatedType, mockProcessingElementsContainer); + } + + @Test + void canDetermineIfConvertible() { + assertTrue(this.durationScalar.canBuildType(Duration.class, this.mockAnnotatedType)); + assertFalse(this.durationScalar.canBuildType(Instant.class, this.mockAnnotatedType)); + } + + @Test + void canConvertFromLiteral() { + assertEquals(TEST_DURATION, durationType.getCoercing().parseLiteral(TEST_DURATION_STRING)); + } + + @Test + void canSerialize() { + assertEquals(TEST_DURATION_STRING, durationType.getCoercing().serialize(TEST_DURATION)); + assertEquals(TEST_DURATION_STRING, durationType.getCoercing().serialize(TEST_DURATION_STRING)); + } + + @Test + void canConvertFromValue() { + assertEquals( + TEST_DURATION, + durationType + .getCoercing() + .parseValue(StringValue.newStringValue().value(TEST_DURATION_STRING).build())); + } +} From 7ac4df38b93f8ccb0261b6be73c16a50a82fb7b9 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Sun, 17 Jan 2021 13:40:26 -0800 Subject: [PATCH 047/173] chore: remove unused deprecated code, deprecate more (#45) --- .../common/request/DefaultFilterRequestBuilder.java | 2 -- .../results/arguments/filter/FilterArgument.java | 5 ++--- .../schema/results/arguments/filter/FilterType.java | 4 ---- .../metadata/response/DefaultAttributeMetadata.java | 5 ----- .../graphql/metadata/schema/AttributeMetadata.java | 11 ----------- 5 files changed, 2 insertions(+), 25 deletions(-) diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilder.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilder.java index 99442e1a..7f1af6b4 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilder.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilder.java @@ -49,8 +49,6 @@ public Single>> build( private Single> normalize( GraphQlRequestContext requestContext, String scope, FilterArgument filterArgument) { switch (filterArgument.type()) { - case STRING: - case NUMERIC: case ATTRIBUTE: return this.attributeAssociator.associateAttribute( requestContext, diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterArgument.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterArgument.java index 40f8352d..2d5be8f7 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterArgument.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterArgument.java @@ -7,16 +7,15 @@ import javax.annotation.Nullable; import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; -// TODO revisit union types @GraphQLName(FilterArgument.TYPE_NAME) public interface FilterArgument { String TYPE_NAME = "Filter"; - String ARGUMENT_NAME = "filterBy"; // TODO rename to filter + String ARGUMENT_NAME = "filterBy"; String FILTER_ARGUMENT_TYPE = "type"; String FILTER_ARGUMENT_KEY = "key"; String FILTER_ARGUMENT_OPERATOR = "operator"; String FILTER_ARGUMENT_VALUE = "value"; - String FILTER_ARGUMENT_ID_TYPE = "idType"; // TODO rename + @Deprecated String FILTER_ARGUMENT_ID_TYPE = "idType"; String FILTER_ARGUMENT_ID_SCOPE = "idScope"; @GraphQLField diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterType.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterType.java index b90e7a63..f16c227d 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterType.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterType.java @@ -4,10 +4,6 @@ @GraphQLName(FilterType.TYPE_NAME) public enum FilterType { - @Deprecated - STRING, - @Deprecated - NUMERIC, ATTRIBUTE, ID; diff --git a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/DefaultAttributeMetadata.java b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/DefaultAttributeMetadata.java index 89658363..ffec2687 100644 --- a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/DefaultAttributeMetadata.java +++ b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/DefaultAttributeMetadata.java @@ -22,9 +22,4 @@ class DefaultAttributeMetadata implements AttributeMetadata { boolean onlySupportsAggregation; List supportedAggregations; boolean groupable; - - // TODO remove once removed from the api - public boolean onlyAggregationsAllowed() { - return this.onlySupportsGrouping(); - } } diff --git a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/schema/AttributeMetadata.java b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/schema/AttributeMetadata.java index afdb213c..4dd83b64 100644 --- a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/schema/AttributeMetadata.java +++ b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/schema/AttributeMetadata.java @@ -1,12 +1,10 @@ package org.hypertrace.core.graphql.metadata.schema; -import graphql.annotations.annotationTypes.GraphQLDeprecate; import graphql.annotations.annotationTypes.GraphQLDescription; import graphql.annotations.annotationTypes.GraphQLField; import graphql.annotations.annotationTypes.GraphQLName; import graphql.annotations.annotationTypes.GraphQLNonNull; import java.util.List; -import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; import org.hypertrace.core.graphql.common.schema.attributes.AttributeType; import org.hypertrace.core.graphql.common.schema.attributes.MetricAggregationType; @@ -18,7 +16,6 @@ public interface AttributeMetadata { String ATTRIBUTE_METADATA_DISPLAY_NAME = "displayName"; String ATTRIBUTE_METADATA_TYPE_NAME = "type"; String ATTRIBUTE_METADATA_UNITS_NAME = "units"; - String ATTRIBUTE_METADATA_ONLY_AGGREGATIONS_ALLOWED_NAME = "onlyAggregationsAllowed"; String ATTRIBUTE_METADATA_ONLY_SUPPORTS_AGGREGATION_NAME = "onlySupportsAggregation"; String ATTRIBUTE_METADATA_ONLY_SUPPORTS_GROUPING_NAME = "onlySupportsGrouping"; String ATTRIBUTE_METADATA_SUPPORTED_AGGREGATIONS_NAME = "supportedAggregations"; @@ -49,14 +46,6 @@ public interface AttributeMetadata { @GraphQLName(ATTRIBUTE_METADATA_UNITS_NAME) String units(); - @GraphQLDeprecate - @Deprecated - @GraphQLField - @GraphQLNonNull - @GraphQLDescription("Deprecated. This has been renamed to " + ATTRIBUTE_METADATA_ONLY_SUPPORTS_GROUPING_NAME) - @GraphQLName(ATTRIBUTE_METADATA_ONLY_AGGREGATIONS_ALLOWED_NAME) - boolean onlyAggregationsAllowed(); - @GraphQLField @GraphQLNonNull @GraphQLName(ATTRIBUTE_METADATA_ONLY_SUPPORTS_GROUPING_NAME) From a02351be617bd5c7e3b7f3d9ad078549addbc3e6 Mon Sep 17 00:00:00 2001 From: SJ <48863181+skjindal93@users.noreply.github.com> Date: Fri, 22 Jan 2021 19:31:11 +0530 Subject: [PATCH 048/173] chore: upgraded gateway service api (#46) --- hypertrace-core-graphql-platform/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 4f19a104..4a4c2c6e 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -7,7 +7,7 @@ dependencies { api("org.hypertrace.core.grpcutils:grpc-context-utils:0.3.2") api("org.hypertrace.core.grpcutils:grpc-client-utils:0.3.2") - api("org.hypertrace.gateway.service:gateway-service-api:0.1.44") + api("org.hypertrace.gateway.service:gateway-service-api:0.1.53") api("org.hypertrace.core.attribute.service:attribute-service-api:0.8.7") api("com.google.inject:guice:4.2.3") From bfdbfe28b69074091e06ecdd5bd32c742034aeed Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Mon, 1 Feb 2021 16:36:07 -0800 Subject: [PATCH 049/173] chore: update versions (#47) * chore: update versions * chore: update snyk expiration --- .snyk | 2 +- build.gradle.kts | 6 ++-- gradle/wrapper/gradle-wrapper.properties | 2 +- .../core/graphql/impl/GraphQlFactory.java | 2 -- .../build.gradle.kts | 30 +++++++++---------- .../build.gradle.kts | 8 ++--- .../service/DefaultGraphQlServiceConfig.java | 8 ----- .../resources/configs/common/application.conf | 1 - .../spi/config/GraphQlServiceConfig.java | 2 -- .../build.gradle.kts | 4 +-- settings.gradle.kts | 2 +- 11 files changed, 27 insertions(+), 40 deletions(-) diff --git a/.snyk b/.snyk index ad778af1..ba23795c 100644 --- a/.snyk +++ b/.snyk @@ -5,6 +5,6 @@ ignore: SNYK-JAVA-IONETTY-1042268: - '*': reason: No replacement available - expires: 2021-01-31T00:00:00.000Z + expires: 2021-04-31T00:00:00.000Z patch: {} diff --git a/build.gradle.kts b/build.gradle.kts index 243f8be1..93535b7f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,7 +1,7 @@ plugins { - id("org.hypertrace.repository-plugin") version "0.2.0" - id("org.hypertrace.ci-utils-plugin") version "0.1.1" - id("org.hypertrace.jacoco-report-plugin") version "0.1.0" apply false + id("org.hypertrace.repository-plugin") version "0.2.3" + id("org.hypertrace.ci-utils-plugin") version "0.2.0" + id("org.hypertrace.jacoco-report-plugin") version "0.1.3" apply false id("org.hypertrace.docker-java-application-plugin") version "0.8.1" apply false id("org.hypertrace.docker-publish-plugin") version "0.8.1" apply false } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 14e30f74..1c4bcc29 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.1-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlFactory.java b/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlFactory.java index be4bd3de..db6f42a4 100644 --- a/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlFactory.java +++ b/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlFactory.java @@ -14,8 +14,6 @@ public static GraphQLConfiguration build( final Injector injector = Guice.createInjector(new GraphQlModule(config, lifecycle)); return GraphQLConfiguration.with(injector.getInstance(GraphQLSchema.class)) - .with(config.isAsyncServlet()) - .asyncTimeout(30000) // https://github.com/graphql-java-kickstart/graphql-java-servlet/issues/282 .with(injector.getInstance(GraphQlRequestContextBuilder.class)) .build(); } diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 4a4c2c6e..07234b64 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -5,31 +5,31 @@ plugins { dependencies { constraints { - api("org.hypertrace.core.grpcutils:grpc-context-utils:0.3.2") - api("org.hypertrace.core.grpcutils:grpc-client-utils:0.3.2") - api("org.hypertrace.gateway.service:gateway-service-api:0.1.53") - api("org.hypertrace.core.attribute.service:attribute-service-api:0.8.7") + api("org.hypertrace.core.grpcutils:grpc-context-utils:0.3.3") + api("org.hypertrace.core.grpcutils:grpc-client-utils:0.3.3") + api("org.hypertrace.gateway.service:gateway-service-api:0.1.54") + api("org.hypertrace.core.attribute.service:attribute-service-api:0.9.3") api("com.google.inject:guice:4.2.3") api("com.graphql-java:graphql-java:15.0") api("io.github.graphql-java:graphql-java-annotations:8.3") api("org.slf4j:slf4j-api:1.7.30") - api("io.reactivex.rxjava3:rxjava:3.0.7") + api("io.reactivex.rxjava3:rxjava:3.0.9") api("com.google.protobuf:protobuf-java-util:3.14.0") - api("org.projectlombok:lombok:1.18.16") + api("org.projectlombok:lombok:1.18.18") api("com.google.code.findbugs:jsr305:3.0.2") api("com.typesafe:config:1.4.1") - api("com.google.guava:guava:30.0-jre") - api("com.graphql-java-kickstart:graphql-java-servlet:10.0.0") - api("io.grpc:grpc-api:1.33.1") - api("io.grpc:grpc-core:1.33.1") - api("io.grpc:grpc-stub:1.33.1") - api("io.grpc:grpc-context:1.33.1") - api("com.fasterxml.jackson.core:jackson-databind:2.12.0") - api("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.0") + api("com.google.guava:guava:30.1-jre") + api("com.graphql-java-kickstart:graphql-java-servlet:10.1.0") + api("io.grpc:grpc-api:1.35.0") + api("io.grpc:grpc-core:1.35.0") + api("io.grpc:grpc-stub:1.35.0") + api("io.grpc:grpc-context:1.35.0") + api("com.fasterxml.jackson.core:jackson-databind:2.12.1") + api("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.1") runtime("org.apache.logging.log4j:log4j-slf4j-impl:2.14.0") - runtime("io.grpc:grpc-netty:1.33.1") + runtime("io.grpc:grpc-netty:1.35.0") runtime("io.netty:netty-codec-http2:4.1.53.Final") { because("https://snyk.io/vuln/SNYK-JAVA-IONETTY-1020439") } diff --git a/hypertrace-core-graphql-service/build.gradle.kts b/hypertrace-core-graphql-service/build.gradle.kts index 8adb28b7..31d29ea5 100644 --- a/hypertrace-core-graphql-service/build.gradle.kts +++ b/hypertrace-core-graphql-service/build.gradle.kts @@ -9,12 +9,12 @@ dependencies { implementation(platform(project(":hypertrace-core-graphql-platform"))) implementation("com.typesafe:config") - implementation("org.hypertrace.core.serviceframework:platform-service-framework:0.1.18") + implementation("org.hypertrace.core.serviceframework:platform-service-framework:0.1.20") implementation("org.slf4j:slf4j-api") - implementation("org.eclipse.jetty:jetty-server:9.4.35.v20201120") - implementation("org.eclipse.jetty:jetty-servlet:9.4.35.v20201120") - implementation("org.eclipse.jetty:jetty-servlets:9.4.35.v20201120") + implementation("org.eclipse.jetty:jetty-server:9.4.36.v20210114") + implementation("org.eclipse.jetty:jetty-servlet:9.4.36.v20210114") + implementation("org.eclipse.jetty:jetty-servlets:9.4.36.v20210114") implementation("com.graphql-java-kickstart:graphql-java-servlet") implementation(project(":hypertrace-core-graphql-impl")) diff --git a/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java index 56ed6c7a..203b17dd 100644 --- a/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java +++ b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java @@ -11,7 +11,6 @@ class DefaultGraphQlServiceConfig implements GraphQlServiceConfig { private static final String SERVICE_PORT_CONFIG = "service.port"; private static final String GRAPHQL_URL_PATH = "graphql.urlPath"; - private static final String GRAPHQL_ASYNC_SERVLET = "graphql.asyncServlet"; private static final String GRAPHQL_CORS_ENABLED = "graphql.corsEnabled"; private static final String DEFAULT_TENANT_ID = "defaultTenantId"; @@ -28,7 +27,6 @@ class DefaultGraphQlServiceConfig implements GraphQlServiceConfig { private final String serviceName; private final int servicePort; private final String graphqlUrlPath; - private final boolean asyncServlet; private final boolean corsEnabled; private final Optional defaultTenantId; private final int maxIoThreads; @@ -41,7 +39,6 @@ class DefaultGraphQlServiceConfig implements GraphQlServiceConfig { this.serviceName = untypedConfig.getString(SERVICE_NAME_CONFIG); this.servicePort = untypedConfig.getInt(SERVICE_PORT_CONFIG); this.graphqlUrlPath = untypedConfig.getString(GRAPHQL_URL_PATH); - this.asyncServlet = untypedConfig.getBoolean(GRAPHQL_ASYNC_SERVLET); this.corsEnabled = untypedConfig.getBoolean(GRAPHQL_CORS_ENABLED); this.defaultTenantId = optionallyGet(() -> untypedConfig.getString(DEFAULT_TENANT_ID)); this.maxIoThreads = untypedConfig.getInt(MAX_IO_THREADS_PROPERTY); @@ -67,11 +64,6 @@ public String getGraphqlUrlPath() { return graphqlUrlPath; } - @Override - public boolean isAsyncServlet() { - return asyncServlet; - } - @Override public boolean isCorsEnabled() { return corsEnabled; diff --git a/hypertrace-core-graphql-service/src/main/resources/configs/common/application.conf b/hypertrace-core-graphql-service/src/main/resources/configs/common/application.conf index eddee1c9..108cdf6d 100644 --- a/hypertrace-core-graphql-service/src/main/resources/configs/common/application.conf +++ b/hypertrace-core-graphql-service/src/main/resources/configs/common/application.conf @@ -4,7 +4,6 @@ service.port = 23431 #TODO resolve with existing graphql port when ready for dep service.admin.port = 23432 graphql.urlPath = /graphql -graphql.asyncServlet = true graphql.corsEnabled = true threads.io.max = 10 diff --git a/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java b/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java index fd4f0643..26bace29 100644 --- a/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java +++ b/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java @@ -10,8 +10,6 @@ public interface GraphQlServiceConfig { String getGraphqlUrlPath(); - boolean isAsyncServlet(); - boolean isCorsEnabled(); Optional getDefaultTenantId(); diff --git a/hypertrace-core-graphql-test-platform/build.gradle.kts b/hypertrace-core-graphql-test-platform/build.gradle.kts index 83bee8ad..b4c45fad 100644 --- a/hypertrace-core-graphql-test-platform/build.gradle.kts +++ b/hypertrace-core-graphql-test-platform/build.gradle.kts @@ -5,7 +5,7 @@ plugins { dependencies { constraints { api("org.junit.jupiter:junit-jupiter:5.7.0") - api("org.mockito:mockito-core:3.6.28") - api("org.mockito:mockito-junit-jupiter:3.6.28") + api("org.mockito:mockito-core:3.7.7") + api("org.mockito:mockito-junit-jupiter:3.7.7") } } \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 8f79eba9..308bb163 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -9,7 +9,7 @@ pluginManagement { } plugins { - id("org.hypertrace.version-settings") version "0.1.1" + id("org.hypertrace.version-settings") version "0.1.6" } include(":hypertrace-core-graphql-service") From 78a76fa09ae17e3be748f82b3f5df8d973e1d933 Mon Sep 17 00:00:00 2001 From: Jayesh Bapu Ahire Date: Tue, 9 Feb 2021 14:08:55 +0530 Subject: [PATCH 050/173] fix: uses checksum action from github-actions repository (#48) --- .github/workflows/merge-publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/merge-publish.yml b/.github/workflows/merge-publish.yml index fc007f47..f4b5e83a 100644 --- a/.github/workflows/merge-publish.yml +++ b/.github/workflows/merge-publish.yml @@ -16,7 +16,7 @@ jobs: fetch-depth: 0 - name: create checksum file - uses: hypertrace/actions/checksum@main + uses: hypertrace/github-actions/checksum@main - name: Cache packages uses: actions/cache@v2 From 39ab48666372c11ed53252d7aa24b27b5ec66cc0 Mon Sep 17 00:00:00 2001 From: SJ <48863181+skjindal93@users.noreply.github.com> Date: Fri, 12 Feb 2021 23:26:06 +0530 Subject: [PATCH 051/173] added support for not in operator (#49) * added support for not in operator * fix snyk * remove constraints block * update snyk id --- .../results/arguments/filter/FilterOperatorType.java | 1 + .../core/graphql/utils/gateway/OperatorConverter.java | 2 ++ hypertrace-core-graphql-platform/build.gradle.kts | 8 ++++---- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterOperatorType.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterOperatorType.java index 087e668c..24b172f0 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterOperatorType.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterOperatorType.java @@ -12,6 +12,7 @@ public enum FilterOperatorType { GREATER_THAN_OR_EQUAL_TO, LIKE, IN, + NOT_IN, CONTAINS_KEY, CONTAINS_KEY_VALUE; diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/OperatorConverter.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/OperatorConverter.java index cd97aab9..f9935887 100644 --- a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/OperatorConverter.java +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/OperatorConverter.java @@ -25,6 +25,8 @@ public Single convert(FilterOperatorType filterOperatorType) { return Single.just(Operator.NEQ); case IN: return Single.just(Operator.IN); + case NOT_IN: + return Single.just(Operator.NOT_IN); case LIKE: return Single.just(Operator.LIKE); case CONTAINS_KEY: diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 07234b64..149e0e11 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -30,11 +30,11 @@ dependencies { runtime("org.apache.logging.log4j:log4j-slf4j-impl:2.14.0") runtime("io.grpc:grpc-netty:1.35.0") - runtime("io.netty:netty-codec-http2:4.1.53.Final") { - because("https://snyk.io/vuln/SNYK-JAVA-IONETTY-1020439") + runtime("io.netty:netty-codec-http2:4.1.59.Final") { + because("https://snyk.io/vuln/SNYK-JAVA-IONETTY-1070799") } - runtime("io.netty:netty-handler-proxy:4.1.53.Final") { - because("https://snyk.io/vuln/SNYK-JAVA-IONETTY-1020439s") + runtime("io.netty:netty-handler-proxy:4.1.59.Final") { + because("https://snyk.io/vuln/SNYK-JAVA-IONETTY-1070799") } } } From 8a03e41ad9c09983267507faccf5cdbbcad431f1 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Mon, 15 Mar 2021 06:33:51 -0700 Subject: [PATCH 052/173] Enforce style update vulns (#51) * style: add formatter and apply * chore: update dependencies to clean up vulns * refactor: move style plugin to apply to all java projects --- build.gradle.kts | 4 ++-- .../attributes/CachingAttributeStore.java | 1 - .../core/graphql/attributes/IdMapping.java | 4 +--- .../graphql/attributes/IdMappingLoader.java | 4 ---- .../request/AttributeRequestBuilder.java | 3 +-- .../DefaultAttributeRequestBuilder.java | 6 ++--- .../DefaultResultSetRequestBuilder.java | 3 +-- .../common/schema/CommonSchemaFragment.java | 6 ++++- .../graphql/common/utils/TriConverter.java | 2 +- .../AttributeScopeStringTranslator.java | 4 ++-- .../DefaultResultSetRequestBuilderTest.java | 3 +-- .../AttributeTypeConverterTest.java | 23 +++++++++++-------- .../DefaultArgumentDeserializer.java | 3 +-- .../DefaultArgumentDeserializerTest.java | 3 +-- .../response/DefaultAttributeMetadata.java | 1 - .../build.gradle.kts | 22 +++++++++--------- .../schema/DefaultGraphQlSelectionFinder.java | 3 +-- .../build.gradle.kts | 10 ++++---- .../service/DefaultGraphQlServiceConfig.java | 1 - hypertrace-core-graphql-spi/build.gradle.kts | 1 - .../build.gradle.kts | 2 +- .../build.gradle.kts | 1 - 22 files changed, 51 insertions(+), 59 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 93535b7f..15e2d57c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,12 +4,13 @@ plugins { id("org.hypertrace.jacoco-report-plugin") version "0.1.3" apply false id("org.hypertrace.docker-java-application-plugin") version "0.8.1" apply false id("org.hypertrace.docker-publish-plugin") version "0.8.1" apply false + id("org.hypertrace.code-style-plugin") version "1.0.2" apply false } subprojects { group = "org.hypertrace.core.graphql" - pluginManager.withPlugin("java") { + apply(plugin = "org.hypertrace.code-style-plugin") configure { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 @@ -17,7 +18,6 @@ subprojects { } pluginManager.withPlugin("java-library") { - dependencies { "api"(platform(project(":hypertrace-core-graphql-platform"))) "annotationProcessor"(platform(project(":hypertrace-core-graphql-platform"))) diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java index b9c26e51..825b0f8c 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java @@ -5,7 +5,6 @@ import com.google.common.cache.LoadingCache; import com.google.common.collect.ImmutableTable; import com.google.common.collect.Table; -import io.reactivex.rxjava3.core.Maybe; import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.Single; import java.util.Collection; diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdMapping.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdMapping.java index b77e10ae..9e2191ac 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdMapping.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdMapping.java @@ -20,9 +20,7 @@ static IdMapping forId(@Nonnull String scope, @Nonnull String idAttribute) { } static IdMapping forForeignId( - @Nonnull String scope, - @Nonnull String foreignScope, - @Nonnull String idAttribute) { + @Nonnull String scope, @Nonnull String foreignScope, @Nonnull String idAttribute) { Objects.requireNonNull(scope); Objects.requireNonNull(foreignScope); Objects.requireNonNull(idAttribute); diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdMappingLoader.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdMappingLoader.java index 57e0399f..4e5962cc 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdMappingLoader.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdMappingLoader.java @@ -1,12 +1,8 @@ package org.hypertrace.core.graphql.attributes; import io.reactivex.rxjava3.core.Observable; -import java.util.Objects; -import javax.annotation.Nonnull; import org.hypertrace.core.graphql.context.GraphQlRequestContext; public interface IdMappingLoader { Observable loadMappings(GraphQlRequestContext requestContext); - - } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/AttributeRequestBuilder.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/AttributeRequestBuilder.java index 09fa85cb..c36ff9de 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/AttributeRequestBuilder.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/AttributeRequestBuilder.java @@ -10,8 +10,7 @@ public interface AttributeRequestBuilder { - Single buildForId( - GraphQlRequestContext context, String attributeModelScope); + Single buildForId(GraphQlRequestContext context, String attributeModelScope); Observable buildForAttributeQueryableSelectionSet( GraphQlRequestContext context, diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilder.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilder.java index 7b725429..5f6a807f 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilder.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilder.java @@ -34,8 +34,7 @@ class DefaultAttributeRequestBuilder implements AttributeRequestBuilder { } @Override - public Single buildForId( - GraphQlRequestContext context, String attributeScope) { + public Single buildForId(GraphQlRequestContext context, String attributeScope) { return this.attributeStore.getIdAttribute(context, attributeScope).map(this::buildForAttribute); } @@ -96,7 +95,8 @@ private Stream getAttributeKeysForAttributeQueryableSelectionSet( private Stream getArgument(SelectedField attributeField) { return this.argumentDeserializer - .deserializePrimitive(attributeField.getArguments(), AttributeKeyArgument.class).stream(); + .deserializePrimitive(attributeField.getArguments(), AttributeKeyArgument.class) + .stream(); } @Value diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilder.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilder.java index 3e3042da..aba13b2e 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilder.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilder.java @@ -93,8 +93,7 @@ public Single> build( .orElse(Collections.emptyList()); Optional spaceId = - this.argumentDeserializer - .deserializePrimitive(arguments, SpaceArgument.class); + this.argumentDeserializer.deserializePrimitive(arguments, SpaceArgument.class); return zip( this.attributeAssociator diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/CommonSchemaFragment.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/CommonSchemaFragment.java index 8579de2e..cca0b551 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/CommonSchemaFragment.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/CommonSchemaFragment.java @@ -37,6 +37,10 @@ public String fragmentName() { @Nonnull @Override public List typeFunctions() { - return List.of(this.unknownScalar, this.dateTimeScalar, this.attributeScopeDynamicEnum, this.durationScalar); + return List.of( + this.unknownScalar, + this.dateTimeScalar, + this.attributeScopeDynamicEnum, + this.durationScalar); } } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/TriConverter.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/TriConverter.java index b9ca4a91..678f4693 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/TriConverter.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/TriConverter.java @@ -3,5 +3,5 @@ import io.reactivex.rxjava3.core.Single; public interface TriConverter { - Single convert(F1 f1, F2 f2, F3 f3); + Single convert(F1 f1, F2 f2, F3 f3); } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeScopeStringTranslator.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeScopeStringTranslator.java index ff80806d..5a582965 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeScopeStringTranslator.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeScopeStringTranslator.java @@ -1,8 +1,8 @@ package org.hypertrace.core.graphql.common.utils.attributes; /** - * This serves as a temporary bridge to keep the external names of scopes unchanged until - * the internal names can be changed to align. + * This serves as a temporary bridge to keep the external names of scopes unchanged until the + * internal names can be changed to align. */ public interface AttributeScopeStringTranslator { diff --git a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilderTest.java b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilderTest.java index a5b02ad4..84828b34 100644 --- a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilderTest.java +++ b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilderTest.java @@ -71,8 +71,7 @@ void canBuildRequest() { .thenReturn( Observable.just( AttributeAssociation.of(this.mockFooAttribute, this.mockOrderArgument))); - when(this.mockFilterBuilder.build( - any(), eq("SPAN"), eq(List.of(this.mockFilterArgument)))) + when(this.mockFilterBuilder.build(any(), eq("SPAN"), eq(List.of(this.mockFilterArgument)))) .thenReturn( Single.just( List.of(AttributeAssociation.of(this.mockFooAttribute, this.mockFilterArgument)))); diff --git a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeTypeConverterTest.java b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeTypeConverterTest.java index eaea834b..d81a3579 100644 --- a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeTypeConverterTest.java +++ b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeTypeConverterTest.java @@ -2,7 +2,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals; -import io.reactivex.rxjava3.core.Single; import org.hypertrace.core.graphql.attributes.AttributeModelType; import org.hypertrace.core.graphql.common.schema.attributes.AttributeType; import org.junit.jupiter.api.Test; @@ -12,19 +11,25 @@ public class AttributeTypeConverterTest { void testConvert() { AttributeTypeConverter attributeTypeConverter = new AttributeTypeConverter(); - assertEquals(AttributeType.STRING, + assertEquals( + AttributeType.STRING, attributeTypeConverter.convert(AttributeModelType.STRING).blockingGet()); - assertEquals(AttributeType.BOOLEAN, + assertEquals( + AttributeType.BOOLEAN, attributeTypeConverter.convert(AttributeModelType.BOOLEAN).blockingGet()); - assertEquals(AttributeType.LONG, - attributeTypeConverter.convert(AttributeModelType.LONG).blockingGet()); - assertEquals(AttributeType.DOUBLE, + assertEquals( + AttributeType.LONG, attributeTypeConverter.convert(AttributeModelType.LONG).blockingGet()); + assertEquals( + AttributeType.DOUBLE, attributeTypeConverter.convert(AttributeModelType.DOUBLE).blockingGet()); - assertEquals(AttributeType.TIMESTAMP, + assertEquals( + AttributeType.TIMESTAMP, attributeTypeConverter.convert(AttributeModelType.TIMESTAMP).blockingGet()); - assertEquals(AttributeType.STRING_MAP, + assertEquals( + AttributeType.STRING_MAP, attributeTypeConverter.convert(AttributeModelType.STRING_MAP).blockingGet()); - assertEquals(AttributeType.STRING_ARRAY, + assertEquals( + AttributeType.STRING_ARRAY, attributeTypeConverter.convert(AttributeModelType.STRING_ARRAY).blockingGet()); } } diff --git a/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/DefaultArgumentDeserializer.java b/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/DefaultArgumentDeserializer.java index 9b1e95c0..611b38d1 100644 --- a/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/DefaultArgumentDeserializer.java +++ b/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/DefaultArgumentDeserializer.java @@ -67,8 +67,7 @@ public Optional deserializePrimitive( @Override public Optional> deserializePrimitiveList( Map arguments, Class> argSchema) { - return this.listArgumentKey(argSchema) - .flatMap(key -> this.logIfNotList(arguments.get(key))); + return this.listArgumentKey(argSchema).flatMap(key -> this.logIfNotList(arguments.get(key))); } private Optional deserializeValue(@Nullable Object rawValue, Class argSchema) { diff --git a/hypertrace-core-graphql-deserialization/src/test/java/org/hypertrace/core/graphql/deserialization/DefaultArgumentDeserializerTest.java b/hypertrace-core-graphql-deserialization/src/test/java/org/hypertrace/core/graphql/deserialization/DefaultArgumentDeserializerTest.java index 86539b60..de92c858 100644 --- a/hypertrace-core-graphql-deserialization/src/test/java/org/hypertrace/core/graphql/deserialization/DefaultArgumentDeserializerTest.java +++ b/hypertrace-core-graphql-deserialization/src/test/java/org/hypertrace/core/graphql/deserialization/DefaultArgumentDeserializerTest.java @@ -170,8 +170,7 @@ void deserializePrimitiveList() { this.argumentDeserializer.deserializePrimitiveList(argMap, TestPrimitiveArgument.class)); // Make sure only the list arg name works - argMap = - Map.of(TestPrimitiveArgument.ARG_NAME, List.of("foo", "bar", "baz")); + argMap = Map.of(TestPrimitiveArgument.ARG_NAME, List.of("foo", "bar", "baz")); assertEquals( Optional.empty(), this.argumentDeserializer.deserializePrimitiveList(argMap, TestPrimitiveArgument.class)); diff --git a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/DefaultAttributeMetadata.java b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/DefaultAttributeMetadata.java index ffec2687..3335249f 100644 --- a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/DefaultAttributeMetadata.java +++ b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/DefaultAttributeMetadata.java @@ -4,7 +4,6 @@ import lombok.Builder; import lombok.Value; import lombok.experimental.Accessors; -import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; import org.hypertrace.core.graphql.common.schema.attributes.AttributeType; import org.hypertrace.core.graphql.common.schema.attributes.MetricAggregationType; import org.hypertrace.core.graphql.metadata.schema.AttributeMetadata; diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 149e0e11..efcddaec 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -5,8 +5,8 @@ plugins { dependencies { constraints { - api("org.hypertrace.core.grpcutils:grpc-context-utils:0.3.3") - api("org.hypertrace.core.grpcutils:grpc-client-utils:0.3.3") + api("org.hypertrace.core.grpcutils:grpc-context-utils:0.3.4") + api("org.hypertrace.core.grpcutils:grpc-client-utils:0.3.4") api("org.hypertrace.gateway.service:gateway-service-api:0.1.54") api("org.hypertrace.core.attribute.service:attribute-service-api:0.9.3") @@ -21,20 +21,20 @@ dependencies { api("com.typesafe:config:1.4.1") api("com.google.guava:guava:30.1-jre") api("com.graphql-java-kickstart:graphql-java-servlet:10.1.0") - api("io.grpc:grpc-api:1.35.0") - api("io.grpc:grpc-core:1.35.0") - api("io.grpc:grpc-stub:1.35.0") - api("io.grpc:grpc-context:1.35.0") + api("io.grpc:grpc-api:1.36.0") + api("io.grpc:grpc-core:1.36.0") + api("io.grpc:grpc-stub:1.36.0") + api("io.grpc:grpc-context:1.36.0") api("com.fasterxml.jackson.core:jackson-databind:2.12.1") api("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.1") runtime("org.apache.logging.log4j:log4j-slf4j-impl:2.14.0") - runtime("io.grpc:grpc-netty:1.35.0") - runtime("io.netty:netty-codec-http2:4.1.59.Final") { - because("https://snyk.io/vuln/SNYK-JAVA-IONETTY-1070799") + runtime("io.grpc:grpc-netty:1.36.0") + runtime("io.netty:netty-codec-http2:4.1.60.Final") { + because("https://snyk.io/vuln/SNYK-JAVA-IONETTY-1083991") } - runtime("io.netty:netty-handler-proxy:4.1.59.Final") { - because("https://snyk.io/vuln/SNYK-JAVA-IONETTY-1070799") + runtime("io.netty:netty-handler-proxy:4.1.60.Final") { + because("https://snyk.io/vuln/SNYK-JAVA-IONETTY-1083991") } } } diff --git a/hypertrace-core-graphql-schema-utils/src/main/java/org/hypertrace/core/graphql/utils/schema/DefaultGraphQlSelectionFinder.java b/hypertrace-core-graphql-schema-utils/src/main/java/org/hypertrace/core/graphql/utils/schema/DefaultGraphQlSelectionFinder.java index 086dce85..c89b9a3a 100644 --- a/hypertrace-core-graphql-schema-utils/src/main/java/org/hypertrace/core/graphql/utils/schema/DefaultGraphQlSelectionFinder.java +++ b/hypertrace-core-graphql-schema-utils/src/main/java/org/hypertrace/core/graphql/utils/schema/DefaultGraphQlSelectionFinder.java @@ -57,8 +57,7 @@ private SelectionQuery applyQueryDefaults(SelectionQuery selectionQuery) { } private SelectionQuery buildQueryForChildSelection(SelectionQuery selectionQuery) { - return selectionQuery - .toBuilder() + return selectionQuery.toBuilder() .selectionPath( selectionQuery.getSelectionPath().subList(1, selectionQuery.getSelectionPath().size())) .build(); diff --git a/hypertrace-core-graphql-service/build.gradle.kts b/hypertrace-core-graphql-service/build.gradle.kts index 31d29ea5..8fcbe556 100644 --- a/hypertrace-core-graphql-service/build.gradle.kts +++ b/hypertrace-core-graphql-service/build.gradle.kts @@ -9,12 +9,12 @@ dependencies { implementation(platform(project(":hypertrace-core-graphql-platform"))) implementation("com.typesafe:config") - implementation("org.hypertrace.core.serviceframework:platform-service-framework:0.1.20") + implementation("org.hypertrace.core.serviceframework:platform-service-framework:0.1.21") implementation("org.slf4j:slf4j-api") - implementation("org.eclipse.jetty:jetty-server:9.4.36.v20210114") - implementation("org.eclipse.jetty:jetty-servlet:9.4.36.v20210114") - implementation("org.eclipse.jetty:jetty-servlets:9.4.36.v20210114") + implementation("org.eclipse.jetty:jetty-server:9.4.38.v20210224") + implementation("org.eclipse.jetty:jetty-servlet:9.4.38.v20210224") + implementation("org.eclipse.jetty:jetty-servlets:9.4.38.v20210224") implementation("com.graphql-java-kickstart:graphql-java-servlet") implementation(project(":hypertrace-core-graphql-impl")) @@ -24,7 +24,7 @@ dependencies { } application { - mainClassName = "org.hypertrace.core.serviceframework.PlatformServiceLauncher" + mainClass.set("org.hypertrace.core.serviceframework.PlatformServiceLauncher") } tasks.run { jvmArgs = listOf("-Dservice.name=${project.name}") diff --git a/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java index 203b17dd..dcdbc398 100644 --- a/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java +++ b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java @@ -23,7 +23,6 @@ class DefaultGraphQlServiceConfig implements GraphQlServiceConfig { private static final String GATEWAY_SERVICE_HOST_PROPERTY = "gateway.service.host"; private static final String GATEWAY_SERVICE_PORT_PROPERTY = "gateway.service.port"; - private final String serviceName; private final int servicePort; private final String graphqlUrlPath; diff --git a/hypertrace-core-graphql-spi/build.gradle.kts b/hypertrace-core-graphql-spi/build.gradle.kts index 0734760e..3de1e282 100644 --- a/hypertrace-core-graphql-spi/build.gradle.kts +++ b/hypertrace-core-graphql-spi/build.gradle.kts @@ -6,5 +6,4 @@ dependencies { api("com.graphql-java:graphql-java") api("io.github.graphql-java:graphql-java-annotations") api("com.google.code.findbugs:jsr305") - } diff --git a/hypertrace-core-graphql-test-platform/build.gradle.kts b/hypertrace-core-graphql-test-platform/build.gradle.kts index b4c45fad..3def9244 100644 --- a/hypertrace-core-graphql-test-platform/build.gradle.kts +++ b/hypertrace-core-graphql-test-platform/build.gradle.kts @@ -8,4 +8,4 @@ dependencies { api("org.mockito:mockito-core:3.7.7") api("org.mockito:mockito-junit-jupiter:3.7.7") } -} \ No newline at end of file +} diff --git a/hypertrace-core-graphql-trace-schema/build.gradle.kts b/hypertrace-core-graphql-trace-schema/build.gradle.kts index 9c44aaa9..69d7cc12 100644 --- a/hypertrace-core-graphql-trace-schema/build.gradle.kts +++ b/hypertrace-core-graphql-trace-schema/build.gradle.kts @@ -23,5 +23,4 @@ dependencies { implementation(project(":hypertrace-core-graphql-common-schema")) implementation(project(":hypertrace-core-graphql-attribute-store")) implementation(project(":hypertrace-core-graphql-deserialization")) - } From 3cc26e6dce1b2cacf8923d09ab345773c29acb2c Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Tue, 16 Mar 2021 05:32:14 -0700 Subject: [PATCH 053/173] chore: update gateway service api (#52) --- hypertrace-core-graphql-platform/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index efcddaec..cb76be72 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -7,7 +7,7 @@ dependencies { api("org.hypertrace.core.grpcutils:grpc-context-utils:0.3.4") api("org.hypertrace.core.grpcutils:grpc-client-utils:0.3.4") - api("org.hypertrace.gateway.service:gateway-service-api:0.1.54") + api("org.hypertrace.gateway.service:gateway-service-api:0.1.57") api("org.hypertrace.core.attribute.service:attribute-service-api:0.9.3") api("com.google.inject:guice:4.2.3") From 7df21a96bf0712e239ced1117c49889870cf7b3e Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Thu, 18 Mar 2021 07:05:22 -0700 Subject: [PATCH 054/173] fix: attempting to fix race for channels on startup (#53) --- .../graphql/utils/grpc/DefaultGrpcChannelRegistry.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGrpcChannelRegistry.java b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGrpcChannelRegistry.java index 3305a76e..7e9437ad 100644 --- a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGrpcChannelRegistry.java +++ b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGrpcChannelRegistry.java @@ -2,8 +2,8 @@ import io.grpc.ManagedChannel; import io.grpc.ManagedChannelBuilder; -import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import javax.inject.Inject; import javax.inject.Singleton; import org.hypertrace.core.graphql.spi.lifecycle.GraphQlServiceLifecycle; @@ -13,7 +13,7 @@ @Singleton class DefaultGrpcChannelRegistry implements GrpcChannelRegistry { private static final Logger LOG = LoggerFactory.getLogger(DefaultGrpcChannelRegistry.class); - private final Map channelMap = new HashMap<>(); + private final Map channelMap = new ConcurrentHashMap<>(); private volatile boolean isShutdown = false; @Inject @@ -25,10 +25,7 @@ class DefaultGrpcChannelRegistry implements GrpcChannelRegistry { public ManagedChannel forAddress(String host, int port) { assert !this.isShutdown; String channelId = this.getChannelId(host, port); - if (!this.channelMap.containsKey(channelId)) { - this.channelMap.put(channelId, this.buildNewChannel(host, port)); - } - return this.channelMap.get(channelId); + return this.channelMap.computeIfAbsent(channelId, unused -> this.buildNewChannel(host, port)); } private ManagedChannel buildNewChannel(String host, int port) { From 5ce7ad33b126fdc4e185ead7d82e31f97e6d87d9 Mon Sep 17 00:00:00 2001 From: ravisingal <62086374+ravisingal@users.noreply.github.com> Date: Fri, 9 Apr 2021 16:39:12 +0530 Subject: [PATCH 055/173] publish artifacts to hypertrace artifactory (#54) * publish artifacts to hypertrace artifactory * fix snyk failure * fix snyk failure --- build.gradle.kts | 12 ++++++------ hypertrace-core-graphql-platform/build.gradle.kts | 6 +++--- hypertrace-core-graphql-service/build.gradle.kts | 8 ++++---- settings.gradle.kts | 4 ++-- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 15e2d57c..730f1d76 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,10 +1,10 @@ plugins { - id("org.hypertrace.repository-plugin") version "0.2.3" - id("org.hypertrace.ci-utils-plugin") version "0.2.0" - id("org.hypertrace.jacoco-report-plugin") version "0.1.3" apply false - id("org.hypertrace.docker-java-application-plugin") version "0.8.1" apply false - id("org.hypertrace.docker-publish-plugin") version "0.8.1" apply false - id("org.hypertrace.code-style-plugin") version "1.0.2" apply false + id("org.hypertrace.repository-plugin") version "0.4.0" + id("org.hypertrace.ci-utils-plugin") version "0.3.0" + id("org.hypertrace.jacoco-report-plugin") version "0.2.0" apply false + id("org.hypertrace.docker-java-application-plugin") version "0.9.0" apply false + id("org.hypertrace.docker-publish-plugin") version "0.9.0" apply false + id("org.hypertrace.code-style-plugin") version "1.1.0" apply false } subprojects { diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index cb76be72..a6146ed6 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -29,11 +29,11 @@ dependencies { api("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.1") runtime("org.apache.logging.log4j:log4j-slf4j-impl:2.14.0") - runtime("io.grpc:grpc-netty:1.36.0") - runtime("io.netty:netty-codec-http2:4.1.60.Final") { + runtime("io.grpc:grpc-netty:1.37.0") + runtime("io.netty:netty-codec-http2:4.1.61.Final") { because("https://snyk.io/vuln/SNYK-JAVA-IONETTY-1083991") } - runtime("io.netty:netty-handler-proxy:4.1.60.Final") { + runtime("io.netty:netty-handler-proxy:4.1.61.Final") { because("https://snyk.io/vuln/SNYK-JAVA-IONETTY-1083991") } } diff --git a/hypertrace-core-graphql-service/build.gradle.kts b/hypertrace-core-graphql-service/build.gradle.kts index 8fcbe556..2f18eea4 100644 --- a/hypertrace-core-graphql-service/build.gradle.kts +++ b/hypertrace-core-graphql-service/build.gradle.kts @@ -9,12 +9,12 @@ dependencies { implementation(platform(project(":hypertrace-core-graphql-platform"))) implementation("com.typesafe:config") - implementation("org.hypertrace.core.serviceframework:platform-service-framework:0.1.21") + implementation("org.hypertrace.core.serviceframework:platform-service-framework:0.1.23") implementation("org.slf4j:slf4j-api") - implementation("org.eclipse.jetty:jetty-server:9.4.38.v20210224") - implementation("org.eclipse.jetty:jetty-servlet:9.4.38.v20210224") - implementation("org.eclipse.jetty:jetty-servlets:9.4.38.v20210224") + implementation("org.eclipse.jetty:jetty-server:9.4.39.v20210325") + implementation("org.eclipse.jetty:jetty-servlet:9.4.39.v20210325") + implementation("org.eclipse.jetty:jetty-servlets:9.4.39.v20210325") implementation("com.graphql-java-kickstart:graphql-java-servlet") implementation(project(":hypertrace-core-graphql-impl")) diff --git a/settings.gradle.kts b/settings.gradle.kts index 308bb163..719865d1 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -4,12 +4,12 @@ pluginManagement { repositories { mavenLocal() gradlePluginPortal() - maven("https://dl.bintray.com/hypertrace/maven") + maven("https://hypertrace.jfrog.io/artifactory/maven") } } plugins { - id("org.hypertrace.version-settings") version "0.1.6" + id("org.hypertrace.version-settings") version "0.2.0" } include(":hypertrace-core-graphql-service") From f627973e79b2c7affb28386564182ea81d7ae153 Mon Sep 17 00:00:00 2001 From: Rishabh Date: Tue, 20 Apr 2021 01:35:14 +0530 Subject: [PATCH 056/173] feat: Mock Api for log event (#55) --- hypertrace-core-graphql-impl/build.gradle.kts | 1 + .../core/graphql/impl/GraphQlModule.java | 2 + .../build.gradle.kts | 26 +++++++ .../log/event/LogEventSchemaFragment.java | 17 ++++ .../log/event/LogEventSchemaModule.java | 21 +++++ .../graphql/log/event/dao/LogEventDao.java | 10 +++ .../log/event/dao/LogEventDaoModule.java | 11 +++ .../log/event/dao/MockLogEventDao.java | 77 +++++++++++++++++++ .../log/event/fetcher/LogEventFetcher.java | 38 +++++++++ .../DefaultLogEventRequestBuilder.java | 22 ++++++ .../log/event/request/LogEventRequest.java | 7 ++ .../event/request/LogEventRequestBuilder.java | 9 +++ .../event/request/LogEventRequestModule.java | 12 +++ .../graphql/log/event/schema/LogEvent.java | 9 +++ .../log/event/schema/LogEventResultSet.java | 18 +++++ .../log/event/schema/LogEventSchema.java | 28 +++++++ settings.gradle.kts | 1 + 17 files changed, 309 insertions(+) create mode 100644 hypertrace-core-graphql-log-event-schema/build.gradle.kts create mode 100644 hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/LogEventSchemaFragment.java create mode 100644 hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/LogEventSchemaModule.java create mode 100644 hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/LogEventDao.java create mode 100644 hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/LogEventDaoModule.java create mode 100644 hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/MockLogEventDao.java create mode 100644 hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/fetcher/LogEventFetcher.java create mode 100644 hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/DefaultLogEventRequestBuilder.java create mode 100644 hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/LogEventRequest.java create mode 100644 hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/LogEventRequestBuilder.java create mode 100644 hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/LogEventRequestModule.java create mode 100644 hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/schema/LogEvent.java create mode 100644 hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/schema/LogEventResultSet.java create mode 100644 hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/schema/LogEventSchema.java diff --git a/hypertrace-core-graphql-impl/build.gradle.kts b/hypertrace-core-graphql-impl/build.gradle.kts index 33c05e48..8b80e855 100644 --- a/hypertrace-core-graphql-impl/build.gradle.kts +++ b/hypertrace-core-graphql-impl/build.gradle.kts @@ -21,6 +21,7 @@ dependencies { implementation(project(":hypertrace-core-graphql-trace-schema")) implementation(project(":hypertrace-core-graphql-attribute-scope")) implementation(project(":hypertrace-core-graphql-rx-utils")) + implementation(project(":hypertrace-core-graphql-log-event-schema")) implementation("org.slf4j:slf4j-api") implementation("com.google.inject:guice") diff --git a/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlModule.java b/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlModule.java index d33eadd9..32c0a13f 100644 --- a/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlModule.java +++ b/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlModule.java @@ -7,6 +7,7 @@ import org.hypertrace.core.graphql.common.utils.attributes.AttributeUtilsModule; import org.hypertrace.core.graphql.context.GraphQlRequestContextModule; import org.hypertrace.core.graphql.deserialization.GraphQlDeserializationRegistryModule; +import org.hypertrace.core.graphql.log.event.LogEventSchemaModule; import org.hypertrace.core.graphql.metadata.MetadataSchemaModule; import org.hypertrace.core.graphql.rx.RxUtilModule; import org.hypertrace.core.graphql.schema.registry.GraphQlSchemaRegistryModule; @@ -46,5 +47,6 @@ protected void configure() { install(new SpanSchemaModule()); install(new TraceSchemaModule()); install(new RxUtilModule()); + install(new LogEventSchemaModule()); } } diff --git a/hypertrace-core-graphql-log-event-schema/build.gradle.kts b/hypertrace-core-graphql-log-event-schema/build.gradle.kts new file mode 100644 index 00000000..c4fbdbd4 --- /dev/null +++ b/hypertrace-core-graphql-log-event-schema/build.gradle.kts @@ -0,0 +1,26 @@ +plugins { + `java-library` +} + +dependencies { + api("com.google.inject:guice") + api("com.graphql-java:graphql-java") + api(project(":hypertrace-core-graphql-spi")) + api("io.github.graphql-java:graphql-java-annotations") + + annotationProcessor("org.projectlombok:lombok") + compileOnly("org.projectlombok:lombok") + + compileOnly(project(":hypertrace-core-graphql-attribute-scope-constants")) + + implementation("org.slf4j:slf4j-api") + implementation("io.reactivex.rxjava3:rxjava") + implementation("org.hypertrace.gateway.service:gateway-service-api") + implementation("com.google.protobuf:protobuf-java-util") + + implementation(project(":hypertrace-core-graphql-context")) + implementation(project(":hypertrace-core-graphql-grpc-utils")) + implementation(project(":hypertrace-core-graphql-common-schema")) + implementation(project(":hypertrace-core-graphql-attribute-store")) + implementation(project(":hypertrace-core-graphql-deserialization")) +} diff --git a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/LogEventSchemaFragment.java b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/LogEventSchemaFragment.java new file mode 100644 index 00000000..3c9bbfe5 --- /dev/null +++ b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/LogEventSchemaFragment.java @@ -0,0 +1,17 @@ +package org.hypertrace.core.graphql.log.event; + +import org.hypertrace.core.graphql.log.event.schema.LogEventSchema; +import org.hypertrace.core.graphql.spi.schema.GraphQlSchemaFragment; + +public class LogEventSchemaFragment implements GraphQlSchemaFragment { + + @Override + public String fragmentName() { + return "LogEvent schema"; + } + + @Override + public Class annotatedQueryClass() { + return LogEventSchema.class; + } +} diff --git a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/LogEventSchemaModule.java b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/LogEventSchemaModule.java new file mode 100644 index 00000000..f6187ed5 --- /dev/null +++ b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/LogEventSchemaModule.java @@ -0,0 +1,21 @@ +package org.hypertrace.core.graphql.log.event; + +import com.google.inject.AbstractModule; +import com.google.inject.multibindings.Multibinder; +import org.hypertrace.core.graphql.common.request.ResultSetRequestBuilder; +import org.hypertrace.core.graphql.log.event.dao.LogEventDaoModule; +import org.hypertrace.core.graphql.log.event.request.LogEventRequestModule; +import org.hypertrace.core.graphql.spi.schema.GraphQlSchemaFragment; + +public class LogEventSchemaModule extends AbstractModule { + @Override + protected void configure() { + Multibinder.newSetBinder(binder(), GraphQlSchemaFragment.class) + .addBinding() + .to(LogEventSchemaFragment.class); + + requireBinding(ResultSetRequestBuilder.class); + install(new LogEventDaoModule()); + install(new LogEventRequestModule()); + } +} diff --git a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/LogEventDao.java b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/LogEventDao.java new file mode 100644 index 00000000..de877729 --- /dev/null +++ b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/LogEventDao.java @@ -0,0 +1,10 @@ +package org.hypertrace.core.graphql.log.event.dao; + +import io.reactivex.rxjava3.core.Single; +import org.hypertrace.core.graphql.log.event.request.LogEventRequest; +import org.hypertrace.core.graphql.log.event.schema.LogEventResultSet; + +public interface LogEventDao { + + Single getLogEvents(LogEventRequest request); +} diff --git a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/LogEventDaoModule.java b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/LogEventDaoModule.java new file mode 100644 index 00000000..e06568b3 --- /dev/null +++ b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/LogEventDaoModule.java @@ -0,0 +1,11 @@ +package org.hypertrace.core.graphql.log.event.dao; + +import com.google.inject.AbstractModule; + +public class LogEventDaoModule extends AbstractModule { + + @Override + protected void configure() { + bind(LogEventDao.class).to(MockLogEventDao.class); + } +} diff --git a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/MockLogEventDao.java b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/MockLogEventDao.java new file mode 100644 index 00000000..df9cad5f --- /dev/null +++ b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/MockLogEventDao.java @@ -0,0 +1,77 @@ +package org.hypertrace.core.graphql.log.event.dao; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.reactivex.rxjava3.core.Single; +import java.util.List; +import java.util.Map; +import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.log.event.request.LogEventRequest; +import org.hypertrace.core.graphql.log.event.schema.LogEvent; +import org.hypertrace.core.graphql.log.event.schema.LogEventResultSet; + +public class MockLogEventDao implements LogEventDao { + + @Override + public Single getLogEvents(LogEventRequest request) { + ObjectMapper objectMapper = new ObjectMapper(); + Map attributes = + Map.of( + "event", "Acquired lock with 0 transaction waiting", + "network", "tcp", + "message", "Slow transaction"); + String attributeString; + try { + attributeString = objectMapper.writeValueAsString(attributes); + } catch (JsonProcessingException e) { + attributeString = ""; + } + + LogEvent logEvent1 = + new MockLogEvent( + Map.of( + "spanId", + "span-1", + "traceId", + "trace-1", + "timestamp", + System.nanoTime(), + "attributes", + attributeString)); + + LogEvent logEvent2 = + new MockLogEvent( + Map.of( + "spanId", + "span-2", + "traceId", + "trace-1", + "timestamp", + System.nanoTime(), + "attributes", + attributeString)); + LogEventResultSet logEventResultSet = + new MockLogEventResultSet(List.of(logEvent1, logEvent2), 2, 2); + + return Single.just(logEventResultSet); + } + + @lombok.Value + @Accessors(fluent = true) + private static class MockLogEvent implements LogEvent { + Map attributeValues; + + @Override + public Object attribute(String key) { + return this.attributeValues.get(key); + } + } + + @lombok.Value + @Accessors(fluent = true) + private static class MockLogEventResultSet implements LogEventResultSet { + List results; + long total; + long count; + } +} diff --git a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/fetcher/LogEventFetcher.java b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/fetcher/LogEventFetcher.java new file mode 100644 index 00000000..15b0f064 --- /dev/null +++ b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/fetcher/LogEventFetcher.java @@ -0,0 +1,38 @@ +package org.hypertrace.core.graphql.log.event.fetcher; + +import graphql.schema.DataFetcher; +import graphql.schema.DataFetchingEnvironment; +import java.util.concurrent.CompletableFuture; +import javax.inject.Inject; +import org.hypertrace.core.graphql.common.fetcher.InjectableDataFetcher; +import org.hypertrace.core.graphql.log.event.dao.LogEventDao; +import org.hypertrace.core.graphql.log.event.request.LogEventRequestBuilder; +import org.hypertrace.core.graphql.log.event.schema.LogEventResultSet; + +public class LogEventFetcher extends InjectableDataFetcher { + + public LogEventFetcher() { + super(LogEventFetcherImpl.class); + } + + static final class LogEventFetcherImpl + implements DataFetcher> { + private final LogEventRequestBuilder requestBuilder; + private final LogEventDao logEventDao; + + @Inject + LogEventFetcherImpl(LogEventRequestBuilder requestBuilder, LogEventDao logEventDao) { + this.requestBuilder = requestBuilder; + this.logEventDao = logEventDao; + } + + @Override + public CompletableFuture get(DataFetchingEnvironment environment) { + return this.requestBuilder + .build(environment.getContext(), environment.getArguments()) + .flatMap(this.logEventDao::getLogEvents) + .toCompletionStage() + .toCompletableFuture(); + } + } +} diff --git a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/DefaultLogEventRequestBuilder.java b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/DefaultLogEventRequestBuilder.java new file mode 100644 index 00000000..1d984094 --- /dev/null +++ b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/DefaultLogEventRequestBuilder.java @@ -0,0 +1,22 @@ +package org.hypertrace.core.graphql.log.event.request; + +import io.reactivex.rxjava3.core.Single; +import java.util.Map; +import lombok.Value; +import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; + +public class DefaultLogEventRequestBuilder implements LogEventRequestBuilder { + + @Override + public Single build( + GraphQlRequestContext context, Map arguments) { + return Single.just(new DefaultLogEventRequest(context)); + } + + @Value + @Accessors(fluent = true) + private static class DefaultLogEventRequest implements LogEventRequest { + GraphQlRequestContext requestContext; + } +} diff --git a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/LogEventRequest.java b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/LogEventRequest.java new file mode 100644 index 00000000..76c4109b --- /dev/null +++ b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/LogEventRequest.java @@ -0,0 +1,7 @@ +package org.hypertrace.core.graphql.log.event.request; + +import org.hypertrace.core.graphql.context.GraphQlRequestContext; + +public interface LogEventRequest { + GraphQlRequestContext requestContext(); +} diff --git a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/LogEventRequestBuilder.java b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/LogEventRequestBuilder.java new file mode 100644 index 00000000..7b765bd1 --- /dev/null +++ b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/LogEventRequestBuilder.java @@ -0,0 +1,9 @@ +package org.hypertrace.core.graphql.log.event.request; + +import io.reactivex.rxjava3.core.Single; +import java.util.Map; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; + +public interface LogEventRequestBuilder { + Single build(GraphQlRequestContext context, Map arguments); +} diff --git a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/LogEventRequestModule.java b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/LogEventRequestModule.java new file mode 100644 index 00000000..bef287f7 --- /dev/null +++ b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/LogEventRequestModule.java @@ -0,0 +1,12 @@ +package org.hypertrace.core.graphql.log.event.request; + +import com.google.inject.AbstractModule; +import org.hypertrace.core.graphql.deserialization.ArgumentDeserializer; + +public class LogEventRequestModule extends AbstractModule { + @Override + protected void configure() { + bind(LogEventRequestBuilder.class).to(DefaultLogEventRequestBuilder.class); + requireBinding(ArgumentDeserializer.class); + } +} diff --git a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/schema/LogEvent.java b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/schema/LogEvent.java new file mode 100644 index 00000000..75c51b7d --- /dev/null +++ b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/schema/LogEvent.java @@ -0,0 +1,9 @@ +package org.hypertrace.core.graphql.log.event.schema; + +import graphql.annotations.annotationTypes.GraphQLName; +import org.hypertrace.core.graphql.common.schema.attributes.AttributeQueryable; + +@GraphQLName(LogEvent.TYPE_NAME) +public interface LogEvent extends AttributeQueryable { + String TYPE_NAME = "LogEvent"; +} diff --git a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/schema/LogEventResultSet.java b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/schema/LogEventResultSet.java new file mode 100644 index 00000000..79bddbe0 --- /dev/null +++ b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/schema/LogEventResultSet.java @@ -0,0 +1,18 @@ +package org.hypertrace.core.graphql.log.event.schema; + +import graphql.annotations.annotationTypes.GraphQLField; +import graphql.annotations.annotationTypes.GraphQLName; +import graphql.annotations.annotationTypes.GraphQLNonNull; +import java.util.List; +import org.hypertrace.core.graphql.common.schema.results.ResultSet; + +@GraphQLName(LogEventResultSet.TYPE_NAME) +public interface LogEventResultSet extends ResultSet { + String TYPE_NAME = "LogEventResultSet"; + + @Override + @GraphQLField + @GraphQLNonNull + @GraphQLName(RESULT_SET_RESULTS_NAME) + List results(); +} diff --git a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/schema/LogEventSchema.java b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/schema/LogEventSchema.java new file mode 100644 index 00000000..6a844def --- /dev/null +++ b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/schema/LogEventSchema.java @@ -0,0 +1,28 @@ +package org.hypertrace.core.graphql.log.event.schema; + +import graphql.annotations.annotationTypes.GraphQLDataFetcher; +import graphql.annotations.annotationTypes.GraphQLField; +import graphql.annotations.annotationTypes.GraphQLName; +import graphql.annotations.annotationTypes.GraphQLNonNull; +import java.util.List; +import org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.page.LimitArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.page.OffsetArgument; +import org.hypertrace.core.graphql.log.event.fetcher.LogEventFetcher; + +public interface LogEventSchema { + String LOG_EVENTS_QUERY_NAME = "logEvents"; + + @GraphQLField + @GraphQLNonNull + @GraphQLName(LOG_EVENTS_QUERY_NAME) + @GraphQLDataFetcher(LogEventFetcher.class) + LogEventResultSet logEvents( + @GraphQLName(TimeRangeArgument.ARGUMENT_NAME) @GraphQLNonNull TimeRangeArgument between, + @GraphQLName(FilterArgument.ARGUMENT_NAME) List filterBy, + @GraphQLName(OrderArgument.ARGUMENT_NAME) List orderBy, + @GraphQLName(LimitArgument.ARGUMENT_NAME) int limit, + @GraphQLName(OffsetArgument.ARGUMENT_NAME) int offset); +} diff --git a/settings.gradle.kts b/settings.gradle.kts index 719865d1..d4ccf486 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -31,3 +31,4 @@ include(":hypertrace-core-graphql-attribute-scope-constants") include(":hypertrace-core-graphql-rx-utils") include(":hypertrace-core-graphql-platform") include(":hypertrace-core-graphql-test-platform") +include(":hypertrace-core-graphql-log-event-schema") \ No newline at end of file From 03df4ec34c9f781993a64dde6e1384104491866c Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Wed, 21 Apr 2021 18:05:07 -0700 Subject: [PATCH 057/173] ci: fix codeowners, forked tests (#58) --- .github/CODEOWNERS | 2 +- .github/workflows/pr-test.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 868a94e1..77da5d32 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -4,4 +4,4 @@ * @hypertrace/graphql # GH action -.github/ @aaron-steinfeld @jbahire @kotharironak @buchi-busireddy \ No newline at end of file +.github/ @hypertrace/ci-owners \ No newline at end of file diff --git a/.github/workflows/pr-test.yml b/.github/workflows/pr-test.yml index 7c29cd8c..80d8ff33 100644 --- a/.github/workflows/pr-test.yml +++ b/.github/workflows/pr-test.yml @@ -42,7 +42,7 @@ jobs: - name: Publish Unit Test Results uses: docker://ghcr.io/enricomi/publish-unit-test-result-action:v1.6 - if: always() + if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository with: github_token: ${{ secrets.GITHUB_TOKEN }} files: ./**/build/test-results/**/*.xml \ No newline at end of file From 1e1c09ec363797704802504934b1e0e7c7268fa7 Mon Sep 17 00:00:00 2001 From: Rishabh Date: Fri, 23 Apr 2021 21:12:39 +0530 Subject: [PATCH 058/173] feat: Integrate with Gateway log api (#56) --- build.gradle.kts | 1 + .../HypertraceCoreAttributeScopeString.java | 1 + .../schema/typefunctions/UnknownScalar.java | 5 + .../utils/gateway/AttributeMapConverter.java | 8 +- .../utils/gateway/GatewayUtilsModule.java | 2 + .../gateway/LiteralConstantConverter.java | 1 + .../gateway/UnwrappedValueConverter.java | 26 +++- .../gateway/UnwrappedValueConverterTest.java | 35 +++++ .../build.gradle.kts | 11 ++ .../log/event/LogEventSchemaModule.java | 4 +- .../event/dao/GatewayServiceLogEventDao.java | 66 ++++++++++ ...GatewayServiceLogEventsRequestBuilder.java | 54 ++++++++ ...ewayServiceLogEventsResponseConverter.java | 65 ++++++++++ .../log/event/dao/LogEventDaoModule.java | 47 ++++++- .../log/event/dao/MockLogEventDao.java | 77 ----------- .../log/event/fetcher/LogEventFetcher.java | 3 +- .../DefaultLogEventRequestBuilder.java | 120 +++++++++++++++++- .../log/event/request/LogEventRequest.java | 22 +++- .../event/request/LogEventRequestBuilder.java | 6 +- .../event/request/LogEventRequestModule.java | 13 ++ .../graphql/log/event/dao/BaseDaoTest.java | 73 +++++++++++ ...wayServiceLogEventsRequestBuilderTest.java | 104 +++++++++++++++ ...ServiceLogEventsResponseConverterTest.java | 110 ++++++++++++++++ .../build.gradle.kts | 2 +- 24 files changed, 763 insertions(+), 93 deletions(-) create mode 100644 hypertrace-core-graphql-gateway-service-utils/src/test/java/org/hypertrace/core/graphql/utils/gateway/UnwrappedValueConverterTest.java create mode 100644 hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventDao.java create mode 100644 hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsRequestBuilder.java create mode 100644 hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsResponseConverter.java delete mode 100644 hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/MockLogEventDao.java create mode 100644 hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/BaseDaoTest.java create mode 100644 hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsRequestBuilderTest.java create mode 100644 hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsResponseConverterTest.java diff --git a/build.gradle.kts b/build.gradle.kts index 730f1d76..aa461206 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -21,6 +21,7 @@ subprojects { dependencies { "api"(platform(project(":hypertrace-core-graphql-platform"))) "annotationProcessor"(platform(project(":hypertrace-core-graphql-platform"))) + "testAnnotationProcessor"(platform(project(":hypertrace-core-graphql-platform"))) "testImplementation"(platform(project(":hypertrace-core-graphql-test-platform"))) "compileOnly"(platform(project(":hypertrace-core-graphql-platform"))) } diff --git a/hypertrace-core-graphql-attribute-scope-constants/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeString.java b/hypertrace-core-graphql-attribute-scope-constants/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeString.java index 4842a6ee..75ca4773 100644 --- a/hypertrace-core-graphql-attribute-scope-constants/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeString.java +++ b/hypertrace-core-graphql-attribute-scope-constants/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeString.java @@ -3,4 +3,5 @@ public interface HypertraceCoreAttributeScopeString { String SPAN = "EVENT"; String TRACE = "TRACE"; + String LOG_EVENT = "LOG_EVENT"; } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/UnknownScalar.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/UnknownScalar.java index a6a23770..8a56fb7e 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/UnknownScalar.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/UnknownScalar.java @@ -15,6 +15,7 @@ import graphql.schema.CoercingSerializeException; import graphql.schema.GraphQLScalarType; import java.lang.reflect.AnnotatedType; +import java.time.Instant; import java.util.function.Function; import java.util.stream.Collectors; @@ -28,6 +29,10 @@ public class UnknownScalar implements TypeFunction { new Coercing<>() { @Override public Object serialize(Object fetcherResult) throws CoercingSerializeException { + if (fetcherResult instanceof Instant) { + // todo handle for other direction as well + return fetcherResult.toString(); + } // Use default serializer return fetcherResult; } diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/AttributeMapConverter.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/AttributeMapConverter.java index 28c74848..6ff799ea 100644 --- a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/AttributeMapConverter.java +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/AttributeMapConverter.java @@ -7,19 +7,19 @@ import java.util.Map; import java.util.Map.Entry; import javax.inject.Inject; +import org.hypertrace.core.graphql.attributes.AttributeModel; import org.hypertrace.core.graphql.common.request.AttributeRequest; import org.hypertrace.core.graphql.common.utils.BiConverter; import org.hypertrace.core.graphql.common.utils.CollectorUtils; -import org.hypertrace.core.graphql.common.utils.Converter; import org.hypertrace.gateway.service.v1.common.Value; class AttributeMapConverter implements BiConverter, Map, Map> { - private final Converter valueConverter; + private final BiConverter valueConverter; @Inject - AttributeMapConverter(Converter valueConverter) { + AttributeMapConverter(BiConverter valueConverter) { this.valueConverter = valueConverter; } @@ -37,7 +37,7 @@ private Single> buildAttributeMapEntry( AttributeRequest attributeRequest, Map response) { // Uses SimpleImmutableEntry to support null values return this.valueConverter - .convert(response.get(attributeRequest.alias())) + .convert(response.get(attributeRequest.alias()), attributeRequest.attribute()) .map(value -> new SimpleImmutableEntry<>(attributeRequest.attribute().key(), value)); } } diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayUtilsModule.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayUtilsModule.java index 3dfb7fa8..3bbfcc31 100644 --- a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayUtilsModule.java +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayUtilsModule.java @@ -34,6 +34,8 @@ protected void configure() { .to(AttributeMapConverter.class); bind(Key.get(new TypeLiteral>() {})).to(UnwrappedValueConverter.class); + bind(Key.get(new TypeLiteral>() {})) + .to(UnwrappedValueConverter.class); bind(Key.get(new TypeLiteral, Set>>() {})) .to(SelectionExpressionSetConverter.class); diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/LiteralConstantConverter.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/LiteralConstantConverter.java index f828ab77..d117aef7 100644 --- a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/LiteralConstantConverter.java +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/LiteralConstantConverter.java @@ -46,6 +46,7 @@ private Value convertValue(Optional optionalObject) { if (this.assignableToAnyOfClasses(object.getClass(), Boolean.class)) { return Value.newBuilder().setValueType(ValueType.BOOL).setBoolean((Boolean) object).build(); } + // todo handle Instant type object if (this.assignableToAnyOfClasses(object.getClass(), TemporalAccessor.class)) { return Value.newBuilder() .setValueType(ValueType.TIMESTAMP) diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/UnwrappedValueConverter.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/UnwrappedValueConverter.java index 859a2f8c..ebc99fa6 100644 --- a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/UnwrappedValueConverter.java +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/UnwrappedValueConverter.java @@ -3,10 +3,14 @@ import io.reactivex.rxjava3.core.Single; import java.time.Instant; import java.util.Optional; +import org.hypertrace.core.graphql.attributes.AttributeModel; +import org.hypertrace.core.graphql.common.utils.BiConverter; import org.hypertrace.core.graphql.common.utils.Converter; import org.hypertrace.gateway.service.v1.common.Value; +import org.hypertrace.gateway.service.v1.common.ValueType; -class UnwrappedValueConverter implements Converter { +class UnwrappedValueConverter + implements Converter, BiConverter { @Override public Single convert(Value from) { @@ -43,4 +47,24 @@ public Single convert(Value from) { value.getValueType().name()))); } } + + @Override + public Single convert(Value from, AttributeModel attributeModel) { + Value value = Optional.ofNullable(from).orElse(Value.getDefaultInstance()); + if (ValueType.TIMESTAMP.equals(value.getValueType())) { + return handleTimestamp(value, attributeModel); + } + return convert(from); + } + + private Single handleTimestamp(Value value, AttributeModel attributeModel) { + try { + if ("ns".equals(attributeModel.units())) { + return Single.just(Instant.ofEpochSecond(0, value.getTimestamp())); + } + return Single.just((Instant.ofEpochMilli(value.getTimestamp()))); + } catch (Throwable t) { + return Single.error(t); + } + } } diff --git a/hypertrace-core-graphql-gateway-service-utils/src/test/java/org/hypertrace/core/graphql/utils/gateway/UnwrappedValueConverterTest.java b/hypertrace-core-graphql-gateway-service-utils/src/test/java/org/hypertrace/core/graphql/utils/gateway/UnwrappedValueConverterTest.java new file mode 100644 index 00000000..f013ae1a --- /dev/null +++ b/hypertrace-core-graphql-gateway-service-utils/src/test/java/org/hypertrace/core/graphql/utils/gateway/UnwrappedValueConverterTest.java @@ -0,0 +1,35 @@ +package org.hypertrace.core.graphql.utils.gateway; + +import java.time.Duration; +import java.time.Instant; +import org.hypertrace.core.graphql.attributes.AttributeModel; +import org.hypertrace.gateway.service.v1.common.Value; +import org.hypertrace.gateway.service.v1.common.ValueType; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class UnwrappedValueConverterTest { + + @Mock AttributeModel attributeModel; + + @Test + void testTimestampConversion() { + UnwrappedValueConverter unwrappedValueConverter = new UnwrappedValueConverter(); + long millis = System.currentTimeMillis(); + Value value = + Value.newBuilder() + .setValueType(ValueType.TIMESTAMP) + .setTimestamp(Duration.ofMillis(millis).toNanos()) + .build(); + Mockito.when(attributeModel.units()).thenReturn("ns"); + + Instant instant = + (Instant) unwrappedValueConverter.convert(value, attributeModel).blockingGet(); + Assertions.assertEquals(Instant.ofEpochMilli(millis), instant); + } +} diff --git a/hypertrace-core-graphql-log-event-schema/build.gradle.kts b/hypertrace-core-graphql-log-event-schema/build.gradle.kts index c4fbdbd4..5323b844 100644 --- a/hypertrace-core-graphql-log-event-schema/build.gradle.kts +++ b/hypertrace-core-graphql-log-event-schema/build.gradle.kts @@ -23,4 +23,15 @@ dependencies { implementation(project(":hypertrace-core-graphql-common-schema")) implementation(project(":hypertrace-core-graphql-attribute-store")) implementation(project(":hypertrace-core-graphql-deserialization")) + implementation(project(":hypertrace-core-graphql-schema-utils")) + + testImplementation("org.junit.jupiter:junit-jupiter") + testImplementation("com.fasterxml.jackson.core:jackson-databind") + testImplementation(project(":hypertrace-core-graphql-gateway-service-utils")) + testAnnotationProcessor("org.projectlombok:lombok") + testCompileOnly("org.projectlombok:lombok") +} + +tasks.test { + useJUnitPlatform() } diff --git a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/LogEventSchemaModule.java b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/LogEventSchemaModule.java index f6187ed5..25cff0ec 100644 --- a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/LogEventSchemaModule.java +++ b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/LogEventSchemaModule.java @@ -2,7 +2,6 @@ import com.google.inject.AbstractModule; import com.google.inject.multibindings.Multibinder; -import org.hypertrace.core.graphql.common.request.ResultSetRequestBuilder; import org.hypertrace.core.graphql.log.event.dao.LogEventDaoModule; import org.hypertrace.core.graphql.log.event.request.LogEventRequestModule; import org.hypertrace.core.graphql.spi.schema.GraphQlSchemaFragment; @@ -14,8 +13,7 @@ protected void configure() { .addBinding() .to(LogEventSchemaFragment.class); - requireBinding(ResultSetRequestBuilder.class); - install(new LogEventDaoModule()); install(new LogEventRequestModule()); + install(new LogEventDaoModule()); } } diff --git a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventDao.java b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventDao.java new file mode 100644 index 00000000..bd5539c5 --- /dev/null +++ b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventDao.java @@ -0,0 +1,66 @@ +package org.hypertrace.core.graphql.log.event.dao; + +import static java.util.concurrent.TimeUnit.SECONDS; + +import io.grpc.CallCredentials; +import io.reactivex.rxjava3.core.Single; +import javax.inject.Inject; +import javax.inject.Singleton; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.core.graphql.log.event.request.LogEventRequest; +import org.hypertrace.core.graphql.log.event.schema.LogEventResultSet; +import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; +import org.hypertrace.core.graphql.utils.grpc.GraphQlGrpcContextBuilder; +import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; +import org.hypertrace.gateway.service.GatewayServiceGrpc; +import org.hypertrace.gateway.service.GatewayServiceGrpc.GatewayServiceFutureStub; +import org.hypertrace.gateway.service.v1.log.events.LogEventsRequest; +import org.hypertrace.gateway.service.v1.log.events.LogEventsResponse; + +@Singleton +class GatewayServiceLogEventDao implements LogEventDao { + private static final int DEFAULT_DEADLINE_SEC = 10; + private final GatewayServiceFutureStub gatewayServiceStub; + private final GraphQlGrpcContextBuilder grpcContextBuilder; + private final GatewayServiceLogEventsRequestBuilder requestBuilder; + private final GatewayServiceLogEventsResponseConverter logEventConverter; + + @Inject + GatewayServiceLogEventDao( + GraphQlServiceConfig serviceConfig, + CallCredentials credentials, + GraphQlGrpcContextBuilder grpcContextBuilder, + GrpcChannelRegistry channelRegistry, + GatewayServiceLogEventsRequestBuilder requestBuilder, + GatewayServiceLogEventsResponseConverter logEventConverter) { + this.grpcContextBuilder = grpcContextBuilder; + this.requestBuilder = requestBuilder; + this.logEventConverter = logEventConverter; + + this.gatewayServiceStub = + GatewayServiceGrpc.newFutureStub( + channelRegistry.forAddress( + serviceConfig.getGatewayServiceHost(), serviceConfig.getGatewayServicePort())) + .withCallCredentials(credentials); + } + + @Override + public Single getLogEvents(LogEventRequest request) { + return this.requestBuilder + .buildRequest(request) + .flatMap(serverRequest -> this.makeRequest(request.context(), serverRequest)) + .flatMap(serverResponse -> this.logEventConverter.convert(request, serverResponse)); + } + + private Single makeRequest( + GraphQlRequestContext context, LogEventsRequest request) { + return Single.fromFuture( + this.grpcContextBuilder + .build(context) + .callInContext( + () -> + this.gatewayServiceStub + .withDeadlineAfter(DEFAULT_DEADLINE_SEC, SECONDS) + .getLogEvents(request))); + } +} diff --git a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsRequestBuilder.java b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsRequestBuilder.java new file mode 100644 index 00000000..2c051529 --- /dev/null +++ b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsRequestBuilder.java @@ -0,0 +1,54 @@ +package org.hypertrace.core.graphql.log.event.dao; + +import static io.reactivex.rxjava3.core.Single.zip; + +import io.reactivex.rxjava3.core.Single; +import java.util.Collection; +import java.util.List; +import java.util.Set; +import javax.inject.Inject; +import org.hypertrace.core.graphql.common.request.AttributeAssociation; +import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; +import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.core.graphql.log.event.request.LogEventRequest; +import org.hypertrace.gateway.service.v1.common.Expression; +import org.hypertrace.gateway.service.v1.common.Filter; +import org.hypertrace.gateway.service.v1.common.OrderByExpression; +import org.hypertrace.gateway.service.v1.log.events.LogEventsRequest; + +class GatewayServiceLogEventsRequestBuilder { + + private final Converter>, Filter> filterConverter; + private final Converter>, List> + orderConverter; + private final Converter, Set> attributeConverter; + + @Inject + GatewayServiceLogEventsRequestBuilder( + Converter>, Filter> filterConverter, + Converter>, List> orderConverter, + Converter, Set> attributeConverter) { + this.filterConverter = filterConverter; + this.orderConverter = orderConverter; + this.attributeConverter = attributeConverter; + } + + Single buildRequest(LogEventRequest gqlRequest) { + return zip( + this.attributeConverter.convert(gqlRequest.attributes()), + this.orderConverter.convert(gqlRequest.orderArguments()), + this.filterConverter.convert(gqlRequest.filterArguments()), + (selections, orderBys, filters) -> + LogEventsRequest.newBuilder() + .setStartTimeMillis(gqlRequest.timeRange().startTime().toEpochMilli()) + .setEndTimeMillis(gqlRequest.timeRange().endTime().toEpochMilli()) + .addAllSelection(selections) + .addAllOrderBy(orderBys) + .setLimit(gqlRequest.limit()) + .setOffset(gqlRequest.offset()) + .setFilter(filters) + .build()); + } +} diff --git a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsResponseConverter.java b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsResponseConverter.java new file mode 100644 index 00000000..4c98fe09 --- /dev/null +++ b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsResponseConverter.java @@ -0,0 +1,65 @@ +package org.hypertrace.core.graphql.log.event.dao; + +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.Single; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import javax.inject.Inject; +import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.utils.BiConverter; +import org.hypertrace.core.graphql.log.event.request.LogEventRequest; +import org.hypertrace.core.graphql.log.event.schema.LogEvent; +import org.hypertrace.core.graphql.log.event.schema.LogEventResultSet; +import org.hypertrace.gateway.service.v1.common.Value; +import org.hypertrace.gateway.service.v1.log.events.LogEventsResponse; + +class GatewayServiceLogEventsResponseConverter { + + private final BiConverter, Map, Map> + attributeMapConverter; + + @Inject + GatewayServiceLogEventsResponseConverter( + BiConverter, Map, Map> + attributeMapConverter) { + this.attributeMapConverter = attributeMapConverter; + } + + public Single convert(LogEventRequest request, LogEventsResponse response) { + // todo populate total correctly + return Observable.fromIterable(response.getLogEventsList()) + .concatMapSingle(logEvent -> this.convert(request, logEvent)) + .toList() + .map( + logEvents -> + new ConvertedLogEventResultSet(logEvents, logEvents.size(), logEvents.size())); + } + + private Single convert( + LogEventRequest request, org.hypertrace.gateway.service.v1.log.events.LogEvent logEvent) { + return this.attributeMapConverter + .convert(request.attributes(), logEvent.getAttributesMap()) + .map(ConvertedLogEvent::new); + } + + @lombok.Value + @Accessors(fluent = true) + private static class ConvertedLogEvent implements LogEvent { + Map attributeValues; + + @Override + public Object attribute(String key) { + return this.attributeValues.get(key); + } + } + + @lombok.Value + @Accessors(fluent = true) + private static class ConvertedLogEventResultSet implements LogEventResultSet { + List results; + long total; + long count; + } +} diff --git a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/LogEventDaoModule.java b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/LogEventDaoModule.java index e06568b3..a9c7192a 100644 --- a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/LogEventDaoModule.java +++ b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/LogEventDaoModule.java @@ -1,11 +1,56 @@ package org.hypertrace.core.graphql.log.event.dao; import com.google.inject.AbstractModule; +import com.google.inject.Key; +import com.google.inject.TypeLiteral; +import io.grpc.CallCredentials; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.hypertrace.core.graphql.common.request.AttributeAssociation; +import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; +import org.hypertrace.core.graphql.common.utils.BiConverter; +import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; +import org.hypertrace.core.graphql.utils.grpc.GraphQlGrpcContextBuilder; +import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; +import org.hypertrace.gateway.service.v1.common.Expression; +import org.hypertrace.gateway.service.v1.common.Filter; +import org.hypertrace.gateway.service.v1.common.OrderByExpression; +import org.hypertrace.gateway.service.v1.common.Value; public class LogEventDaoModule extends AbstractModule { @Override protected void configure() { - bind(LogEventDao.class).to(MockLogEventDao.class); + bind(LogEventDao.class).to(GatewayServiceLogEventDao.class); + + requireBinding(CallCredentials.class); + requireBinding(GraphQlServiceConfig.class); + requireBinding(GraphQlGrpcContextBuilder.class); + requireBinding(GrpcChannelRegistry.class); + + requireBinding( + Key.get(new TypeLiteral, Set>>() {})); + + requireBinding( + Key.get( + new TypeLiteral< + Converter< + List>, List>>() {})); + + requireBinding( + Key.get( + new TypeLiteral< + Converter>, Filter>>() {})); + + requireBinding( + Key.get( + new TypeLiteral< + BiConverter< + Collection, Map, Map>>() {})); } } diff --git a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/MockLogEventDao.java b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/MockLogEventDao.java deleted file mode 100644 index df9cad5f..00000000 --- a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/MockLogEventDao.java +++ /dev/null @@ -1,77 +0,0 @@ -package org.hypertrace.core.graphql.log.event.dao; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import io.reactivex.rxjava3.core.Single; -import java.util.List; -import java.util.Map; -import lombok.experimental.Accessors; -import org.hypertrace.core.graphql.log.event.request.LogEventRequest; -import org.hypertrace.core.graphql.log.event.schema.LogEvent; -import org.hypertrace.core.graphql.log.event.schema.LogEventResultSet; - -public class MockLogEventDao implements LogEventDao { - - @Override - public Single getLogEvents(LogEventRequest request) { - ObjectMapper objectMapper = new ObjectMapper(); - Map attributes = - Map.of( - "event", "Acquired lock with 0 transaction waiting", - "network", "tcp", - "message", "Slow transaction"); - String attributeString; - try { - attributeString = objectMapper.writeValueAsString(attributes); - } catch (JsonProcessingException e) { - attributeString = ""; - } - - LogEvent logEvent1 = - new MockLogEvent( - Map.of( - "spanId", - "span-1", - "traceId", - "trace-1", - "timestamp", - System.nanoTime(), - "attributes", - attributeString)); - - LogEvent logEvent2 = - new MockLogEvent( - Map.of( - "spanId", - "span-2", - "traceId", - "trace-1", - "timestamp", - System.nanoTime(), - "attributes", - attributeString)); - LogEventResultSet logEventResultSet = - new MockLogEventResultSet(List.of(logEvent1, logEvent2), 2, 2); - - return Single.just(logEventResultSet); - } - - @lombok.Value - @Accessors(fluent = true) - private static class MockLogEvent implements LogEvent { - Map attributeValues; - - @Override - public Object attribute(String key) { - return this.attributeValues.get(key); - } - } - - @lombok.Value - @Accessors(fluent = true) - private static class MockLogEventResultSet implements LogEventResultSet { - List results; - long total; - long count; - } -} diff --git a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/fetcher/LogEventFetcher.java b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/fetcher/LogEventFetcher.java index 15b0f064..51701bfd 100644 --- a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/fetcher/LogEventFetcher.java +++ b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/fetcher/LogEventFetcher.java @@ -29,7 +29,8 @@ static final class LogEventFetcherImpl @Override public CompletableFuture get(DataFetchingEnvironment environment) { return this.requestBuilder - .build(environment.getContext(), environment.getArguments()) + .build( + environment.getContext(), environment.getArguments(), environment.getSelectionSet()) .flatMap(this.logEventDao::getLogEvents) .toCompletionStage() .toCompletableFuture(); diff --git a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/DefaultLogEventRequestBuilder.java b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/DefaultLogEventRequestBuilder.java index 1d984094..68d87883 100644 --- a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/DefaultLogEventRequestBuilder.java +++ b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/DefaultLogEventRequestBuilder.java @@ -1,22 +1,136 @@ package org.hypertrace.core.graphql.log.event.request; +import static io.reactivex.rxjava3.core.Single.zip; + +import graphql.schema.DataFetchingFieldSelectionSet; +import graphql.schema.SelectedField; import io.reactivex.rxjava3.core.Single; +import java.util.Collection; +import java.util.Collections; +import java.util.List; import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import javax.inject.Inject; import lombok.Value; import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.atttributes.scopes.HypertraceCoreAttributeScopeString; +import org.hypertrace.core.graphql.common.request.AttributeAssociation; +import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.request.AttributeRequestBuilder; +import org.hypertrace.core.graphql.common.request.FilterRequestBuilder; +import org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument; +import org.hypertrace.core.graphql.common.schema.results.ResultSet; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.page.LimitArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.page.OffsetArgument; +import org.hypertrace.core.graphql.common.utils.attributes.AttributeAssociator; import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.core.graphql.deserialization.ArgumentDeserializer; +import org.hypertrace.core.graphql.utils.schema.GraphQlSelectionFinder; +import org.hypertrace.core.graphql.utils.schema.SelectionQuery; public class DefaultLogEventRequestBuilder implements LogEventRequestBuilder { + private final ArgumentDeserializer argumentDeserializer; + private final GraphQlSelectionFinder selectionFinder; + private final AttributeRequestBuilder attributeRequestBuilder; + private final AttributeAssociator attributeAssociator; + private final FilterRequestBuilder filterRequestBuilder; + private static final int DEFAULT_LIMIT = 100; + private static final int DEFAULT_OFFSET = 0; + + @Inject + DefaultLogEventRequestBuilder( + ArgumentDeserializer argumentDeserializer, + GraphQlSelectionFinder selectionFinder, + AttributeRequestBuilder attributeRequestBuilder, + AttributeAssociator attributeAssociator, + FilterRequestBuilder filterRequestBuilder) { + this.argumentDeserializer = argumentDeserializer; + this.selectionFinder = selectionFinder; + this.attributeRequestBuilder = attributeRequestBuilder; + this.attributeAssociator = attributeAssociator; + this.filterRequestBuilder = filterRequestBuilder; + } + @Override public Single build( - GraphQlRequestContext context, Map arguments) { - return Single.just(new DefaultLogEventRequest(context)); + GraphQlRequestContext context, + Map arguments, + DataFetchingFieldSelectionSet selectionSet) { + return this.build( + context, + HypertraceCoreAttributeScopeString.LOG_EVENT, + arguments, + selectionSet, + OrderArgument.class); + } + + Single build( + GraphQlRequestContext context, + String requestScope, + Map arguments, + DataFetchingFieldSelectionSet selectionSet, + Class orderArgumentClass) { + int limit = + this.argumentDeserializer + .deserializePrimitive(arguments, LimitArgument.class) + .orElse(DEFAULT_LIMIT); + + int offset = + this.argumentDeserializer + .deserializePrimitive(arguments, OffsetArgument.class) + .orElse(DEFAULT_OFFSET); + + TimeRangeArgument timeRange = + this.argumentDeserializer + .deserializeObject(arguments, TimeRangeArgument.class) + .orElseThrow(); + + List requestedOrders = + this.argumentDeserializer + .deserializeObjectList(arguments, orderArgumentClass) + .orElse(Collections.emptyList()); + + List requestedFilters = + this.argumentDeserializer + .deserializeObjectList(arguments, FilterArgument.class) + .orElse(Collections.emptyList()); + + return zip( + this.attributeRequestBuilder + .buildForAttributeQueryableFields( + context, requestScope, getAttributeQueryableFields(selectionSet)) + .collect(Collectors.toUnmodifiableSet()), + this.attributeAssociator + .associateAttributes(context, requestScope, requestedOrders, OrderArgument::key) + .collect(Collectors.toUnmodifiableList()), + this.filterRequestBuilder.build(context, requestScope, requestedFilters), + (attributeRequests, orders, filters) -> + Single.just( + new DefaultLogEventRequest( + context, attributeRequests, timeRange, limit, offset, orders, filters))) + .flatMap(single -> single); + } + + private Stream getAttributeQueryableFields( + DataFetchingFieldSelectionSet selectionSet) { + return this.selectionFinder.findSelections( + selectionSet, SelectionQuery.namedChild(ResultSet.RESULT_SET_RESULTS_NAME)); } @Value @Accessors(fluent = true) private static class DefaultLogEventRequest implements LogEventRequest { - GraphQlRequestContext requestContext; + + GraphQlRequestContext context; + Collection attributes; + TimeRangeArgument timeRange; + int limit; + int offset; + List> orderArguments; + Collection> filterArguments; } } diff --git a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/LogEventRequest.java b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/LogEventRequest.java index 76c4109b..e812cf68 100644 --- a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/LogEventRequest.java +++ b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/LogEventRequest.java @@ -1,7 +1,27 @@ package org.hypertrace.core.graphql.log.event.request; +import java.util.Collection; +import java.util.List; +import org.hypertrace.core.graphql.common.request.AttributeAssociation; +import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; import org.hypertrace.core.graphql.context.GraphQlRequestContext; public interface LogEventRequest { - GraphQlRequestContext requestContext(); + GraphQlRequestContext context(); + + // All attributes to fetch + Collection attributes(); + + TimeRangeArgument timeRange(); + + int limit(); + + int offset(); + + List> orderArguments(); + + Collection> filterArguments(); } diff --git a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/LogEventRequestBuilder.java b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/LogEventRequestBuilder.java index 7b765bd1..93ab55d8 100644 --- a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/LogEventRequestBuilder.java +++ b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/LogEventRequestBuilder.java @@ -1,9 +1,13 @@ package org.hypertrace.core.graphql.log.event.request; +import graphql.schema.DataFetchingFieldSelectionSet; import io.reactivex.rxjava3.core.Single; import java.util.Map; import org.hypertrace.core.graphql.context.GraphQlRequestContext; public interface LogEventRequestBuilder { - Single build(GraphQlRequestContext context, Map arguments); + Single build( + GraphQlRequestContext context, + Map arguments, + DataFetchingFieldSelectionSet selectionSet); } diff --git a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/LogEventRequestModule.java b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/LogEventRequestModule.java index bef287f7..bf8a2b7f 100644 --- a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/LogEventRequestModule.java +++ b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/LogEventRequestModule.java @@ -1,12 +1,25 @@ package org.hypertrace.core.graphql.log.event.request; import com.google.inject.AbstractModule; +import org.hypertrace.core.graphql.attributes.AttributeStore; +import org.hypertrace.core.graphql.common.request.AttributeRequestBuilder; +import org.hypertrace.core.graphql.common.request.FilterRequestBuilder; +import org.hypertrace.core.graphql.common.utils.attributes.AttributeAssociator; +import org.hypertrace.core.graphql.common.utils.attributes.AttributeScopeStringTranslator; import org.hypertrace.core.graphql.deserialization.ArgumentDeserializer; +import org.hypertrace.core.graphql.utils.schema.GraphQlSelectionFinder; public class LogEventRequestModule extends AbstractModule { + @Override protected void configure() { bind(LogEventRequestBuilder.class).to(DefaultLogEventRequestBuilder.class); requireBinding(ArgumentDeserializer.class); + requireBinding(AttributeRequestBuilder.class); + requireBinding(FilterRequestBuilder.class); + requireBinding(AttributeStore.class); + requireBinding(AttributeAssociator.class); + requireBinding(GraphQlSelectionFinder.class); + requireBinding(AttributeScopeStringTranslator.class); } } diff --git a/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/BaseDaoTest.java b/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/BaseDaoTest.java new file mode 100644 index 00000000..6493d6d5 --- /dev/null +++ b/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/BaseDaoTest.java @@ -0,0 +1,73 @@ +package org.hypertrace.core.graphql.log.event.dao; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.time.Instant; +import java.util.Collection; +import java.util.List; +import lombok.Value; +import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.attributes.AttributeModel; +import org.hypertrace.core.graphql.attributes.AttributeModelMetricAggregationType; +import org.hypertrace.core.graphql.attributes.AttributeModelType; +import org.hypertrace.core.graphql.common.request.AttributeAssociation; +import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.core.graphql.log.event.request.LogEventRequest; + +class BaseDaoTest { + + @Value + @Accessors(fluent = true) + static class DefaultLogEventRequest implements LogEventRequest { + + GraphQlRequestContext context; + Collection attributes; + TimeRangeArgument timeRange; + int limit; + int offset; + List> orderArguments; + Collection> filterArguments; + } + + @Value + @Accessors(fluent = true) + static class DefaultAttributeRequest implements AttributeRequest { + + AttributeModel attribute; + + @Override + public String alias() { + return attribute.id(); + } + } + + @Value + @Accessors(fluent = true) + class DefaultAttributeModel implements AttributeModel { + + String id; + String scope; + String key; + String displayName; + AttributeModelType type; + String units; + boolean onlySupportsGrouping; + boolean onlySupportsAggregation; + List supportedMetricAggregationTypes; + boolean groupable; + } + + @Value + @Accessors(fluent = true) + class DefaultTimeRange implements TimeRangeArgument { + + @JsonProperty(TIME_RANGE_ARGUMENT_START_TIME) + Instant startTime; + + @JsonProperty(TIME_RANGE_ARGUMENT_END_TIME) + Instant endTime; + } +} diff --git a/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsRequestBuilderTest.java b/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsRequestBuilderTest.java new file mode 100644 index 00000000..ba021f17 --- /dev/null +++ b/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsRequestBuilderTest.java @@ -0,0 +1,104 @@ +package org.hypertrace.core.graphql.log.event.dao; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import com.google.inject.Guice; +import com.google.inject.Injector; +import com.google.inject.Key; +import com.google.inject.TypeLiteral; +import java.time.Duration; +import java.time.Instant; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Set; +import org.hypertrace.core.graphql.attributes.AttributeModelType; +import org.hypertrace.core.graphql.common.request.AttributeAssociation; +import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; +import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.core.graphql.utils.gateway.GatewayUtilsModule; +import org.hypertrace.gateway.service.v1.common.Expression; +import org.hypertrace.gateway.service.v1.common.Filter; +import org.hypertrace.gateway.service.v1.common.OrderByExpression; +import org.hypertrace.gateway.service.v1.log.events.LogEventsRequest; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +class GatewayServiceLogEventsRequestBuilderTest extends BaseDaoTest { + + private GatewayServiceLogEventsRequestBuilder requestBuilder; + + @BeforeEach + void setup() { + Injector injector = Guice.createInjector(new GatewayUtilsModule()); + + Converter>, Filter> filterConverter = + injector.getInstance( + Key.get( + new TypeLiteral< + Converter>, Filter>>() {})); + Converter>, List> orderConverter = + injector.getInstance( + Key.get( + new TypeLiteral< + Converter< + List>, List>>() {})); + Converter, Set> attributeConverter = + injector.getInstance( + Key.get( + new TypeLiteral, Set>>() {})); + + requestBuilder = + new GatewayServiceLogEventsRequestBuilder( + filterConverter, orderConverter, attributeConverter); + } + + @Test + void testBuildRequest() { + long startTime = System.currentTimeMillis(); + long endTime = System.currentTimeMillis() + Duration.ofHours(1).toMillis(); + Collection attributeRequests = + List.of( + new DefaultAttributeRequest( + new DefaultAttributeModel( + "traceId", + "LOG_EVENT", + "traceId", + "Trace Id", + AttributeModelType.STRING, + "", + false, + false, + Collections.emptyList(), + false)), + new DefaultAttributeRequest( + new DefaultAttributeModel( + "timestamp", + "LOG_EVENT", + "timestamp", + "Timestamp", + AttributeModelType.TIMESTAMP, + "", + false, + false, + Collections.emptyList(), + false))); + DefaultLogEventRequest defaultLogEventRequest = + new DefaultLogEventRequest( + null, + attributeRequests, + new DefaultTimeRange(Instant.ofEpochMilli(startTime), Instant.ofEpochMilli(endTime)), + 0, + 0, + List.of(), + Collections.emptyList()); + LogEventsRequest logEventRequest = + requestBuilder.buildRequest(defaultLogEventRequest).blockingGet(); + + assertEquals(endTime, logEventRequest.getEndTimeMillis()); + assertEquals(startTime, logEventRequest.getStartTimeMillis()); + assertEquals(2, logEventRequest.getSelectionCount()); + } +} diff --git a/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsResponseConverterTest.java b/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsResponseConverterTest.java new file mode 100644 index 00000000..cbf93a9a --- /dev/null +++ b/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsResponseConverterTest.java @@ -0,0 +1,110 @@ +package org.hypertrace.core.graphql.log.event.dao; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import com.google.inject.Guice; +import com.google.inject.Injector; +import com.google.inject.Key; +import com.google.inject.TypeLiteral; +import java.time.Duration; +import java.time.Instant; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import org.hypertrace.core.graphql.attributes.AttributeModelType; +import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.utils.BiConverter; +import org.hypertrace.core.graphql.log.event.schema.LogEventResultSet; +import org.hypertrace.core.graphql.utils.gateway.GatewayUtilsModule; +import org.hypertrace.gateway.service.v1.common.Value; +import org.hypertrace.gateway.service.v1.common.ValueType; +import org.hypertrace.gateway.service.v1.log.events.LogEvent; +import org.hypertrace.gateway.service.v1.log.events.LogEventsResponse; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +class GatewayServiceLogEventsResponseConverterTest extends BaseDaoTest { + + private GatewayServiceLogEventsResponseConverter responseConverter; + + @BeforeEach + void setup() { + Injector injector = Guice.createInjector(new GatewayUtilsModule()); + BiConverter, Map, Map> + attributeMapConverter = + injector.getInstance( + Key.get( + new TypeLiteral< + BiConverter< + Collection, + Map, + Map>>() {})); + responseConverter = new GatewayServiceLogEventsResponseConverter(attributeMapConverter); + } + + @Test + void testConvert() { + long startTime = System.currentTimeMillis(); + long endTime = System.currentTimeMillis() + Duration.ofHours(1).toMillis(); + LogEventsResponse logEventsResponse = + LogEventsResponse.newBuilder() + .addLogEvents( + LogEvent.newBuilder() + .putAllAttributes( + Map.of( + "traceId", + Value.newBuilder() + .setString("trace1") + .setValueType(ValueType.STRING) + .build(), + "timestamp", + Value.newBuilder() + .setValueType(ValueType.TIMESTAMP) + .setTimestamp(Duration.ofMillis(startTime).toNanos()) + .build()))) + .build(); + Collection attributeRequests = + List.of( + new DefaultAttributeRequest( + new DefaultAttributeModel( + "traceId", + "LOG_EVENT", + "traceId", + "Trace Id", + AttributeModelType.STRING, + "", + false, + false, + Collections.emptyList(), + false)), + new DefaultAttributeRequest( + new DefaultAttributeModel( + "timestamp", + "LOG_EVENT", + "timestamp", + "Timestamp", + AttributeModelType.TIMESTAMP, + "ns", + false, + false, + Collections.emptyList(), + false))); + DefaultLogEventRequest defaultLogEventRequest = + new DefaultLogEventRequest( + null, + attributeRequests, + new DefaultTimeRange(Instant.ofEpochMilli(startTime), Instant.ofEpochMilli(endTime)), + 0, + 0, + List.of(), + Collections.emptyList()); + LogEventResultSet logEventResultSet = + responseConverter.convert(defaultLogEventRequest, logEventsResponse).blockingGet(); + assertEquals(1, logEventResultSet.results().size()); + assertEquals("trace1", logEventResultSet.results().get(0).attribute("traceId")); + assertEquals( + Instant.ofEpochSecond(0, Duration.ofMillis(startTime).toNanos()), + logEventResultSet.results().get(0).attribute("timestamp")); + } +} diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index a6146ed6..3b6c4923 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -7,7 +7,7 @@ dependencies { api("org.hypertrace.core.grpcutils:grpc-context-utils:0.3.4") api("org.hypertrace.core.grpcutils:grpc-client-utils:0.3.4") - api("org.hypertrace.gateway.service:gateway-service-api:0.1.57") + api("org.hypertrace.gateway.service:gateway-service-api:0.1.59") api("org.hypertrace.core.attribute.service:attribute-service-api:0.9.3") api("com.google.inject:guice:4.2.3") From 287f57e25a01f980fb0c639416ed61dbe8baf08c Mon Sep 17 00:00:00 2001 From: Rishabh Date: Wed, 28 Apr 2021 20:31:26 +0530 Subject: [PATCH 059/173] feat: Capability to fetch logs along with span (#59) --- .../HypertraceCoreAttributeScopeModule.java | 3 +- .../schema/attributes/AttributeQueryable.java | 1 + .../build.gradle.kts | 1 + .../GatewayServiceFutureStubProvider.java | 34 +++ .../utils/gateway/GatewayUtilsModule.java | 6 + .../build.gradle.kts | 3 + ...wayServiceLogEventsRequestBuilderTest.java | 17 +- ...ServiceLogEventsResponseConverterTest.java | 17 +- .../build.gradle.kts | 17 ++ .../core/graphql/span/SpanSchemaModule.java | 2 + .../span/dao/GatewayServiceSpanConverter.java | 40 +++- .../span/dao/GatewayServiceSpanDao.java | 32 ++- .../dao/GatewayServiceSpanRequestBuilder.java | 26 ++- .../core/graphql/span/dao/SpanDao.java | 5 +- .../core/graphql/span/dao/SpanDaoModule.java | 9 +- .../graphql/span/dao/SpanLogEventDao.java | 79 +++++++ .../span/dao/SpanLogEventRequestBuilder.java | 88 +++++++ .../dao/SpanLogEventResponseConverter.java | 83 +++++++ .../span/dao/SpanLogEventsResponse.java | 15 ++ .../graphql/span/fetcher/SpanFetcher.java | 6 +- .../request/DefaultSpanRequestBuilder.java | 52 +++++ .../LogEventAttributeRequestBuilder.java | 51 ++++ .../graphql/span/request/SpanRequest.java | 12 + .../span/request/SpanRequestBuilder.java | 15 ++ .../span/request/SpanRequestModule.java | 26 +++ .../core/graphql/span/schema/Span.java | 9 + .../core/graphql/span/dao/DaoTestUtil.java | 220 ++++++++++++++++++ .../dao/SpanLogEventRequestBuilderTest.java | 155 ++++++++++++ .../SpanLogEventResponseConverterTest.java | 78 +++++++ .../LogEventAttributeRequestBuilderTest.java | 59 +++++ 30 files changed, 1113 insertions(+), 48 deletions(-) create mode 100644 hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayServiceFutureStubProvider.java create mode 100644 hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventDao.java create mode 100644 hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilder.java create mode 100644 hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventResponseConverter.java create mode 100644 hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventsResponse.java create mode 100644 hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/DefaultSpanRequestBuilder.java create mode 100644 hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/LogEventAttributeRequestBuilder.java create mode 100644 hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/SpanRequest.java create mode 100644 hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/SpanRequestBuilder.java create mode 100644 hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/SpanRequestModule.java create mode 100644 hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/DaoTestUtil.java create mode 100644 hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilderTest.java create mode 100644 hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventResponseConverterTest.java create mode 100644 hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/request/LogEventAttributeRequestBuilderTest.java diff --git a/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeModule.java b/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeModule.java index 342f29b2..30e6478d 100644 --- a/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeModule.java +++ b/hypertrace-core-graphql-attribute-scope/src/main/java/org/hypertrace/core/graphql/atttributes/scopes/HypertraceCoreAttributeScopeModule.java @@ -2,6 +2,7 @@ import static org.hypertrace.core.graphql.attributes.IdMapping.forForeignId; import static org.hypertrace.core.graphql.attributes.IdMapping.forId; +import static org.hypertrace.core.graphql.atttributes.scopes.HypertraceCoreAttributeScopeString.LOG_EVENT; import static org.hypertrace.core.graphql.atttributes.scopes.HypertraceCoreAttributeScopeString.SPAN; import static org.hypertrace.core.graphql.atttributes.scopes.HypertraceCoreAttributeScopeString.TRACE; @@ -21,7 +22,7 @@ protected void configure() { Multibinder idBinder = Multibinder.newSetBinder(binder(), IdMapping.class); idBinder.addBinding().toInstance(forId(SPAN, "id")); idBinder.addBinding().toInstance(forForeignId(SPAN, TRACE, "traceId")); - + idBinder.addBinding().toInstance(forForeignId(LOG_EVENT, SPAN, "spanId")); idBinder.addBinding().toInstance(forId(TRACE, "id")); } } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeQueryable.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeQueryable.java index 6557abe6..c52da8df 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeQueryable.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeQueryable.java @@ -6,6 +6,7 @@ import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeKeyArgument; public interface AttributeQueryable { + String ATTRIBUTE_FIELD_NAME = "attribute"; @GraphQLField diff --git a/hypertrace-core-graphql-gateway-service-utils/build.gradle.kts b/hypertrace-core-graphql-gateway-service-utils/build.gradle.kts index 7c93ca31..ad696b43 100644 --- a/hypertrace-core-graphql-gateway-service-utils/build.gradle.kts +++ b/hypertrace-core-graphql-gateway-service-utils/build.gradle.kts @@ -10,6 +10,7 @@ dependencies { api(project(":hypertrace-core-graphql-attribute-store")) api("io.reactivex.rxjava3:rxjava") api(project(":hypertrace-core-graphql-common-schema")) + implementation(project(":hypertrace-core-graphql-grpc-utils")) testImplementation("org.junit.jupiter:junit-jupiter") testImplementation("org.mockito:mockito-core") diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayServiceFutureStubProvider.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayServiceFutureStubProvider.java new file mode 100644 index 00000000..55363260 --- /dev/null +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayServiceFutureStubProvider.java @@ -0,0 +1,34 @@ +package org.hypertrace.core.graphql.utils.gateway; + +import io.grpc.CallCredentials; +import javax.inject.Inject; +import javax.inject.Provider; +import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; +import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; +import org.hypertrace.gateway.service.GatewayServiceGrpc; +import org.hypertrace.gateway.service.GatewayServiceGrpc.GatewayServiceFutureStub; + +class GatewayServiceFutureStubProvider implements Provider { + + private final GraphQlServiceConfig serviceConfig; + private final CallCredentials credentials; + private final GrpcChannelRegistry channelRegistry; + + @Inject + GatewayServiceFutureStubProvider( + GraphQlServiceConfig serviceConfig, + CallCredentials credentials, + GrpcChannelRegistry channelRegistry) { + this.serviceConfig = serviceConfig; + this.credentials = credentials; + this.channelRegistry = channelRegistry; + } + + @Override + public GatewayServiceFutureStub get() { + return GatewayServiceGrpc.newFutureStub( + channelRegistry.forAddress( + serviceConfig.getGatewayServiceHost(), serviceConfig.getGatewayServicePort())) + .withCallCredentials(credentials); + } +} diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayUtilsModule.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayUtilsModule.java index 3bbfcc31..bc57c149 100644 --- a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayUtilsModule.java +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayUtilsModule.java @@ -2,6 +2,7 @@ import com.google.inject.AbstractModule; import com.google.inject.Key; +import com.google.inject.Singleton; import com.google.inject.TypeLiteral; import java.util.Collection; import java.util.List; @@ -15,6 +16,7 @@ import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderDirection; import org.hypertrace.core.graphql.common.utils.BiConverter; import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.gateway.service.GatewayServiceGrpc.GatewayServiceFutureStub; import org.hypertrace.gateway.service.v1.common.ColumnIdentifier; import org.hypertrace.gateway.service.v1.common.Expression; import org.hypertrace.gateway.service.v1.common.Filter; @@ -62,5 +64,9 @@ protected void configure() { bind(Key.get(new TypeLiteral>() {})) .to(SortOrderConverter.class); + + bind(GatewayServiceFutureStub.class) + .toProvider(GatewayServiceFutureStubProvider.class) + .in(Singleton.class); } } diff --git a/hypertrace-core-graphql-log-event-schema/build.gradle.kts b/hypertrace-core-graphql-log-event-schema/build.gradle.kts index 5323b844..9b844437 100644 --- a/hypertrace-core-graphql-log-event-schema/build.gradle.kts +++ b/hypertrace-core-graphql-log-event-schema/build.gradle.kts @@ -28,6 +28,9 @@ dependencies { testImplementation("org.junit.jupiter:junit-jupiter") testImplementation("com.fasterxml.jackson.core:jackson-databind") testImplementation(project(":hypertrace-core-graphql-gateway-service-utils")) + testImplementation("org.mockito:mockito-core") + testImplementation("org.mockito:mockito-junit-jupiter") + testAnnotationProcessor("org.projectlombok:lombok") testCompileOnly("org.projectlombok:lombok") } diff --git a/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsRequestBuilderTest.java b/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsRequestBuilderTest.java index ba021f17..53aa4bff 100644 --- a/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsRequestBuilderTest.java +++ b/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsRequestBuilderTest.java @@ -1,11 +1,14 @@ package org.hypertrace.core.graphql.log.event.dao; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.mock; +import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.Injector; import com.google.inject.Key; import com.google.inject.TypeLiteral; +import io.grpc.CallCredentials; import java.time.Duration; import java.time.Instant; import java.util.Collection; @@ -18,7 +21,9 @@ import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; import org.hypertrace.core.graphql.utils.gateway.GatewayUtilsModule; +import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; import org.hypertrace.gateway.service.v1.common.Expression; import org.hypertrace.gateway.service.v1.common.Filter; import org.hypertrace.gateway.service.v1.common.OrderByExpression; @@ -32,7 +37,17 @@ class GatewayServiceLogEventsRequestBuilderTest extends BaseDaoTest { @BeforeEach void setup() { - Injector injector = Guice.createInjector(new GatewayUtilsModule()); + Injector injector = + Guice.createInjector( + new GatewayUtilsModule(), + new AbstractModule() { + @Override + protected void configure() { + bind(CallCredentials.class).toInstance(mock(CallCredentials.class)); + bind(GraphQlServiceConfig.class).toInstance(mock(GraphQlServiceConfig.class)); + bind(GrpcChannelRegistry.class).toInstance(mock(GrpcChannelRegistry.class)); + } + }); Converter>, Filter> filterConverter = injector.getInstance( diff --git a/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsResponseConverterTest.java b/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsResponseConverterTest.java index cbf93a9a..f8255252 100644 --- a/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsResponseConverterTest.java +++ b/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsResponseConverterTest.java @@ -1,11 +1,14 @@ package org.hypertrace.core.graphql.log.event.dao; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.mock; +import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.Injector; import com.google.inject.Key; import com.google.inject.TypeLiteral; +import io.grpc.CallCredentials; import java.time.Duration; import java.time.Instant; import java.util.Collection; @@ -16,7 +19,9 @@ import org.hypertrace.core.graphql.common.request.AttributeRequest; import org.hypertrace.core.graphql.common.utils.BiConverter; import org.hypertrace.core.graphql.log.event.schema.LogEventResultSet; +import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; import org.hypertrace.core.graphql.utils.gateway.GatewayUtilsModule; +import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; import org.hypertrace.gateway.service.v1.common.Value; import org.hypertrace.gateway.service.v1.common.ValueType; import org.hypertrace.gateway.service.v1.log.events.LogEvent; @@ -30,7 +35,17 @@ class GatewayServiceLogEventsResponseConverterTest extends BaseDaoTest { @BeforeEach void setup() { - Injector injector = Guice.createInjector(new GatewayUtilsModule()); + Injector injector = + Guice.createInjector( + new GatewayUtilsModule(), + new AbstractModule() { + @Override + protected void configure() { + bind(CallCredentials.class).toInstance(mock(CallCredentials.class)); + bind(GraphQlServiceConfig.class).toInstance(mock(GraphQlServiceConfig.class)); + bind(GrpcChannelRegistry.class).toInstance(mock(GrpcChannelRegistry.class)); + } + }); BiConverter, Map, Map> attributeMapConverter = injector.getInstance( diff --git a/hypertrace-core-graphql-span-schema/build.gradle.kts b/hypertrace-core-graphql-span-schema/build.gradle.kts index 664c7473..ab5ed343 100644 --- a/hypertrace-core-graphql-span-schema/build.gradle.kts +++ b/hypertrace-core-graphql-span-schema/build.gradle.kts @@ -22,4 +22,21 @@ dependencies { implementation(project(":hypertrace-core-graphql-grpc-utils")) implementation(project(":hypertrace-core-graphql-common-schema")) implementation(project(":hypertrace-core-graphql-attribute-store")) + implementation(project(":hypertrace-core-graphql-log-event-schema")) + implementation(project(":hypertrace-core-graphql-deserialization")) + implementation(project(":hypertrace-core-graphql-schema-utils")) + implementation(project(":hypertrace-core-graphql-attribute-scope-constants")) + + testImplementation("org.junit.jupiter:junit-jupiter") + testImplementation("com.fasterxml.jackson.core:jackson-databind") + testImplementation(project(":hypertrace-core-graphql-gateway-service-utils")) + testImplementation("org.mockito:mockito-core") + testImplementation("org.mockito:mockito-junit-jupiter") + + testAnnotationProcessor("org.projectlombok:lombok") + testCompileOnly("org.projectlombok:lombok") +} + +tasks.test { + useJUnitPlatform() } diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/SpanSchemaModule.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/SpanSchemaModule.java index 5f69f194..bbc21668 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/SpanSchemaModule.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/SpanSchemaModule.java @@ -4,6 +4,7 @@ import com.google.inject.multibindings.Multibinder; import org.hypertrace.core.graphql.common.request.ResultSetRequestBuilder; import org.hypertrace.core.graphql.span.dao.SpanDaoModule; +import org.hypertrace.core.graphql.span.request.SpanRequestModule; import org.hypertrace.core.graphql.spi.schema.GraphQlSchemaFragment; public class SpanSchemaModule extends AbstractModule { @@ -15,5 +16,6 @@ protected void configure() { requireBinding(ResultSetRequestBuilder.class); install(new SpanDaoModule()); + install(new SpanRequestModule()); } } diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanConverter.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanConverter.java index faa91b9d..25f43029 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanConverter.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanConverter.java @@ -3,18 +3,20 @@ import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.Single; import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.Map; import javax.inject.Inject; import lombok.experimental.Accessors; import org.hypertrace.core.graphql.common.request.AttributeRequest; -import org.hypertrace.core.graphql.common.request.ResultSetRequest; import org.hypertrace.core.graphql.common.utils.BiConverter; +import org.hypertrace.core.graphql.log.event.schema.LogEvent; +import org.hypertrace.core.graphql.log.event.schema.LogEventResultSet; +import org.hypertrace.core.graphql.span.request.SpanRequest; import org.hypertrace.core.graphql.span.schema.Span; import org.hypertrace.core.graphql.span.schema.SpanResultSet; import org.hypertrace.gateway.service.v1.common.Value; import org.hypertrace.gateway.service.v1.span.SpanEvent; -import org.hypertrace.gateway.service.v1.span.SpansResponse; class GatewayServiceSpanConverter { @@ -28,22 +30,27 @@ class GatewayServiceSpanConverter { this.attributeMapConverter = attributeMapConverter; } - public Single convert(ResultSetRequest request, SpansResponse response) { - int total = response.getTotal(); + public Single convert(SpanRequest request, SpanLogEventsResponse response) { + int total = response.spansResponse().getTotal(); - return Observable.fromIterable(response.getSpansList()) - .flatMapSingle(spanEvent -> this.convert(request, spanEvent)) + return Observable.fromIterable(response.spansResponse().getSpansList()) + .flatMapSingle(spanEvent -> this.convert(request, spanEvent, response.spanIdToLogEvents())) .toList() .map(spans -> new ConvertedSpanResultSet(spans, total, spans.size())); } - private Single convert(ResultSetRequest request, SpanEvent spanEvent) { + private Single convert( + SpanRequest request, SpanEvent spanEvent, Map> spanIdToLogEvents) { return this.attributeMapConverter - .convert(request.attributes(), spanEvent.getAttributesMap()) + .convert(request.spanEventsRequest().attributes(), spanEvent.getAttributesMap()) .map( attrMap -> new ConvertedSpan( - attrMap.get(request.idAttribute().attribute().key()).toString(), attrMap)); + attrMap + .get(request.spanEventsRequest().idAttribute().attribute().key()) + .toString(), + attrMap, + spanIdToLogEvents)); } @lombok.Value @@ -51,11 +58,18 @@ private Single convert(ResultSetRequest request, SpanEvent spanEvent) { private static class ConvertedSpan implements Span { String id; Map attributeValues; + Map> spanIdToLogEvents; @Override public Object attribute(String key) { return this.attributeValues.get(key); } + + @Override + public LogEventResultSet logEvents() { + List list = spanIdToLogEvents.getOrDefault(id, Collections.emptyList()); + return new ConvertedLogEventResultSet(list, list.size(), list.size()); + } } @lombok.Value @@ -65,4 +79,12 @@ private static class ConvertedSpanResultSet implements SpanResultSet { long total; long count; } + + @lombok.Value + @Accessors(fluent = true) + private static class ConvertedLogEventResultSet implements LogEventResultSet { + List results; + long total; + long count; + } } diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanDao.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanDao.java index 07a1c8eb..f6d93a1a 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanDao.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanDao.java @@ -2,18 +2,13 @@ import static java.util.concurrent.TimeUnit.SECONDS; -import io.grpc.CallCredentials; import io.reactivex.rxjava3.core.Single; import javax.inject.Inject; import javax.inject.Singleton; -import org.hypertrace.core.graphql.common.request.ResultSetRequest; -import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.core.graphql.span.request.SpanRequest; import org.hypertrace.core.graphql.span.schema.SpanResultSet; -import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; import org.hypertrace.core.graphql.utils.grpc.GraphQlGrpcContextBuilder; -import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; -import org.hypertrace.gateway.service.GatewayServiceGrpc; import org.hypertrace.gateway.service.GatewayServiceGrpc.GatewayServiceFutureStub; import org.hypertrace.gateway.service.v1.span.SpansRequest; import org.hypertrace.gateway.service.v1.span.SpansResponse; @@ -25,32 +20,31 @@ class GatewayServiceSpanDao implements SpanDao { private final GraphQlGrpcContextBuilder grpcContextBuilder; private final GatewayServiceSpanRequestBuilder requestBuilder; private final GatewayServiceSpanConverter spanConverter; + private final SpanLogEventDao spanLogEventDao; @Inject GatewayServiceSpanDao( - GraphQlServiceConfig serviceConfig, - CallCredentials credentials, + GatewayServiceFutureStub gatewayServiceFutureStub, GraphQlGrpcContextBuilder grpcContextBuilder, - GrpcChannelRegistry channelRegistry, GatewayServiceSpanRequestBuilder requestBuilder, - GatewayServiceSpanConverter spanConverter) { + GatewayServiceSpanConverter spanConverter, + SpanLogEventDao spanLogEventDao) { this.grpcContextBuilder = grpcContextBuilder; this.requestBuilder = requestBuilder; this.spanConverter = spanConverter; - - this.gatewayServiceStub = - GatewayServiceGrpc.newFutureStub( - channelRegistry.forAddress( - serviceConfig.getGatewayServiceHost(), serviceConfig.getGatewayServicePort())) - .withCallCredentials(credentials); + this.spanLogEventDao = spanLogEventDao; + this.gatewayServiceStub = gatewayServiceFutureStub; } @Override - public Single getSpans(ResultSetRequest request) { + public Single getSpans(SpanRequest request) { return this.requestBuilder .buildRequest(request) - .flatMap(serverRequest -> this.makeRequest(request.context(), serverRequest)) - .flatMap(serverResponse -> this.spanConverter.convert(request, serverResponse)); + .flatMap( + serverRequest -> this.makeRequest(request.spanEventsRequest().context(), serverRequest)) + .flatMap(serverResponse -> spanLogEventDao.fetchLogEvents(request, serverResponse)) + .flatMap( + spanLogEventsResponse -> this.spanConverter.convert(request, spanLogEventsResponse)); } private Single makeRequest(GraphQlRequestContext context, SpansRequest request) { diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanRequestBuilder.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanRequestBuilder.java index a38de1df..48798841 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanRequestBuilder.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanRequestBuilder.java @@ -9,10 +9,10 @@ import javax.inject.Inject; import org.hypertrace.core.graphql.common.request.AttributeAssociation; import org.hypertrace.core.graphql.common.request.AttributeRequest; -import org.hypertrace.core.graphql.common.request.ResultSetRequest; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.core.graphql.span.request.SpanRequest; import org.hypertrace.gateway.service.v1.common.Expression; import org.hypertrace.gateway.service.v1.common.Filter; import org.hypertrace.gateway.service.v1.common.OrderByExpression; @@ -35,21 +35,27 @@ class GatewayServiceSpanRequestBuilder { this.attributeConverter = attributeConverter; } - Single buildRequest(ResultSetRequest gqlRequest) { + Single buildRequest(SpanRequest gqlRequest) { return zip( - this.attributeConverter.convert(gqlRequest.attributes()), - this.orderConverter.convert(gqlRequest.orderArguments()), - this.filterConverter.convert(gqlRequest.filterArguments()), + this.attributeConverter.convert(gqlRequest.spanEventsRequest().attributes()), + this.orderConverter.convert(gqlRequest.spanEventsRequest().orderArguments()), + this.filterConverter.convert(gqlRequest.spanEventsRequest().filterArguments()), (selections, orderBys, filters) -> SpansRequest.newBuilder() - .setStartTimeMillis(gqlRequest.timeRange().startTime().toEpochMilli()) - .setEndTimeMillis(gqlRequest.timeRange().endTime().toEpochMilli()) + .setStartTimeMillis( + gqlRequest.spanEventsRequest().timeRange().startTime().toEpochMilli()) + .setEndTimeMillis( + gqlRequest.spanEventsRequest().timeRange().endTime().toEpochMilli()) .addAllSelection(selections) .addAllOrderBy(orderBys) - .setLimit(gqlRequest.limit()) - .setOffset(gqlRequest.offset()) + .setLimit(gqlRequest.spanEventsRequest().limit()) + .setOffset(gqlRequest.spanEventsRequest().offset()) .setFilter(filters) - .setSpaceId(gqlRequest.spaceId().orElse("")) // String proto default value + .setSpaceId( + gqlRequest + .spanEventsRequest() + .spaceId() + .orElse("")) // String proto default value .build()); } } diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanDao.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanDao.java index 7a92783f..7e55f74b 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanDao.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanDao.java @@ -1,11 +1,10 @@ package org.hypertrace.core.graphql.span.dao; import io.reactivex.rxjava3.core.Single; -import org.hypertrace.core.graphql.common.request.ResultSetRequest; -import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; +import org.hypertrace.core.graphql.span.request.SpanRequest; import org.hypertrace.core.graphql.span.schema.SpanResultSet; public interface SpanDao { - Single getSpans(ResultSetRequest request); + Single getSpans(SpanRequest request); } diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanDaoModule.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanDaoModule.java index 5e1a8f1d..64eaa410 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanDaoModule.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanDaoModule.java @@ -8,15 +8,19 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.hypertrace.core.graphql.attributes.AttributeStore; import org.hypertrace.core.graphql.common.request.AttributeAssociation; import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.request.FilterRequestBuilder; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; import org.hypertrace.core.graphql.common.utils.BiConverter; import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.core.graphql.deserialization.ArgumentDeserializer; import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; import org.hypertrace.core.graphql.utils.grpc.GraphQlGrpcContextBuilder; import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; +import org.hypertrace.gateway.service.GatewayServiceGrpc.GatewayServiceFutureStub; import org.hypertrace.gateway.service.v1.common.Expression; import org.hypertrace.gateway.service.v1.common.Filter; import org.hypertrace.gateway.service.v1.common.OrderByExpression; @@ -27,11 +31,14 @@ public class SpanDaoModule extends AbstractModule { @Override protected void configure() { bind(SpanDao.class).to(GatewayServiceSpanDao.class); - + requireBinding(GatewayServiceFutureStub.class); requireBinding(CallCredentials.class); requireBinding(GraphQlServiceConfig.class); requireBinding(GraphQlGrpcContextBuilder.class); requireBinding(GrpcChannelRegistry.class); + requireBinding(FilterRequestBuilder.class); + requireBinding(ArgumentDeserializer.class); + requireBinding(AttributeStore.class); requireBinding( Key.get(new TypeLiteral, Set>>() {})); diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventDao.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventDao.java new file mode 100644 index 00000000..ff9b168d --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventDao.java @@ -0,0 +1,79 @@ +package org.hypertrace.core.graphql.span.dao; + +import static java.util.concurrent.TimeUnit.SECONDS; + +import io.reactivex.rxjava3.core.Single; +import java.util.Map; +import javax.inject.Inject; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.core.graphql.span.request.SpanRequest; +import org.hypertrace.core.graphql.utils.grpc.GraphQlGrpcContextBuilder; +import org.hypertrace.gateway.service.GatewayServiceGrpc.GatewayServiceFutureStub; +import org.hypertrace.gateway.service.v1.log.events.LogEventsRequest; +import org.hypertrace.gateway.service.v1.log.events.LogEventsResponse; +import org.hypertrace.gateway.service.v1.span.SpansResponse; + +class SpanLogEventDao { + + private static final int DEFAULT_DEADLINE_SEC = 10; + + private final GatewayServiceFutureStub gatewayServiceStub; + private final GraphQlGrpcContextBuilder grpcContextBuilder; + private final SpanLogEventRequestBuilder spanLogEventRequestBuilder; + private final SpanLogEventResponseConverter spanLogEventResponseConverter; + + @Inject + SpanLogEventDao( + GatewayServiceFutureStub gatewayServiceFutureStub, + GraphQlGrpcContextBuilder grpcContextBuilder, + SpanLogEventRequestBuilder spanLogEventRequestBuilder, + SpanLogEventResponseConverter spanLogEventResponseConverter) { + this.gatewayServiceStub = gatewayServiceFutureStub; + this.grpcContextBuilder = grpcContextBuilder; + this.spanLogEventRequestBuilder = spanLogEventRequestBuilder; + this.spanLogEventResponseConverter = spanLogEventResponseConverter; + } + + /** + * + * + *
    + *
  • 1. Fetch log event attributes from {@code gqlRequest} + *
  • 2. Build log event request using attribute and spanIds as filter + *
  • 3. Query log events + *
  • 4. Processed log events response to build mapping from spanId to logEvent + *
+ */ + Single fetchLogEvents( + SpanRequest gqlRequest, SpansResponse spansResponse) { + if (null == gqlRequest.spanEventsRequest().idAttribute() + || null == gqlRequest.logEventAttributes() + || gqlRequest.logEventAttributes().isEmpty()) { + return Single.just(new SpanLogEventsResponse(spansResponse, Map.of())); + } + return spanLogEventRequestBuilder + .buildLogEventsRequest(gqlRequest, spansResponse) + .flatMap( + logEventsRequest -> + makeRequest(gqlRequest.spanEventsRequest().context(), logEventsRequest)) + .flatMap( + logEventsResponse -> + spanLogEventResponseConverter.buildResponse( + gqlRequest.spanEventsRequest().context(), + gqlRequest.logEventAttributes(), + spansResponse, + logEventsResponse)); + } + + private Single makeRequest( + GraphQlRequestContext context, LogEventsRequest request) { + return Single.fromFuture( + this.grpcContextBuilder + .build(context) + .callInContext( + () -> + this.gatewayServiceStub + .withDeadlineAfter(DEFAULT_DEADLINE_SEC, SECONDS) + .getLogEvents(request))); + } +} diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilder.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilder.java new file mode 100644 index 00000000..46d1d4f1 --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilder.java @@ -0,0 +1,88 @@ +package org.hypertrace.core.graphql.span.dao; + +import static io.reactivex.rxjava3.core.Single.zip; + +import io.reactivex.rxjava3.core.Single; +import java.util.Collection; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import javax.inject.Inject; +import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.atttributes.scopes.HypertraceCoreAttributeScopeString; +import org.hypertrace.core.graphql.common.request.AttributeAssociation; +import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.request.FilterRequestBuilder; +import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterOperatorType; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterType; +import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.core.graphql.span.request.SpanRequest; +import org.hypertrace.gateway.service.v1.common.Expression; +import org.hypertrace.gateway.service.v1.common.Filter; +import org.hypertrace.gateway.service.v1.log.events.LogEventsRequest; +import org.hypertrace.gateway.service.v1.span.SpansResponse; + +class SpanLogEventRequestBuilder { + + private final Converter, Set> attributeConverter; + private final Converter>, Filter> filterConverter; + private final FilterRequestBuilder filterRequestBuilder; + + @Inject + SpanLogEventRequestBuilder( + Converter, Set> attributeConverter, + Converter>, Filter> filterConverter, + FilterRequestBuilder filterRequestBuilder) { + this.attributeConverter = attributeConverter; + this.filterConverter = filterConverter; + this.filterRequestBuilder = filterRequestBuilder; + } + + Single buildLogEventsRequest( + SpanRequest gqlRequest, SpansResponse spansResponse) { + return zip( + this.attributeConverter.convert(gqlRequest.logEventAttributes()), + buildLogEventsQueryFilter(gqlRequest, spansResponse).flatMap(filterConverter::convert), + (selections, filter) -> + LogEventsRequest.newBuilder() + .setStartTimeMillis( + gqlRequest.spanEventsRequest().timeRange().startTime().toEpochMilli()) + .setEndTimeMillis( + gqlRequest.spanEventsRequest().timeRange().endTime().toEpochMilli()) + .addAllSelection(selections) + .setFilter(filter) + .build()); + } + + private Single>> buildLogEventsQueryFilter( + SpanRequest gqlRequest, SpansResponse spansResponse) { + List spanIds = + spansResponse.getSpansList().stream() + .map( + spanEvent -> + spanEvent + .getAttributesMap() + .get(gqlRequest.spanEventsRequest().idAttribute().attribute().id()) + .getString()) + .collect(Collectors.toList()); + + return filterRequestBuilder.build( + gqlRequest.spanEventsRequest().context(), + HypertraceCoreAttributeScopeString.LOG_EVENT, + Set.of(new LogEventFilter(spanIds))); + } + + @lombok.Value + @Accessors(fluent = true) + private static class LogEventFilter implements FilterArgument { + + FilterType type = FilterType.ID; + String key = null; + FilterOperatorType operator = FilterOperatorType.IN; + Collection value; + AttributeScope idType = null; + String idScope = HypertraceCoreAttributeScopeString.SPAN; + } +} diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventResponseConverter.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventResponseConverter.java new file mode 100644 index 00000000..5b9a59ce --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventResponseConverter.java @@ -0,0 +1,83 @@ +package org.hypertrace.core.graphql.span.dao; + +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.Single; +import java.util.Collection; +import java.util.Map; +import java.util.stream.Collectors; +import javax.inject.Inject; +import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.attributes.AttributeStore; +import org.hypertrace.core.graphql.atttributes.scopes.HypertraceCoreAttributeScopeString; +import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.utils.BiConverter; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.core.graphql.log.event.schema.LogEvent; +import org.hypertrace.gateway.service.v1.common.Value; +import org.hypertrace.gateway.service.v1.log.events.LogEventsResponse; +import org.hypertrace.gateway.service.v1.span.SpansResponse; + +class SpanLogEventResponseConverter { + + private final BiConverter, Map, Map> + attributeMapConverter; + private final AttributeStore attributeStore; + + @Inject + SpanLogEventResponseConverter( + BiConverter, Map, Map> + attributeMapConverter, + AttributeStore attributeStore) { + this.attributeMapConverter = attributeMapConverter; + this.attributeStore = attributeStore; + } + + Single buildResponse( + GraphQlRequestContext graphQlRequestContext, + Collection attributeRequests, + SpansResponse spansResponse, + LogEventsResponse logEventsResponse) { + return this.attributeStore + .getForeignIdAttribute( + graphQlRequestContext, + HypertraceCoreAttributeScopeString.LOG_EVENT, + HypertraceCoreAttributeScopeString.SPAN) + .flatMap( + spanId -> + buildResponse(spanId.key(), attributeRequests, spansResponse, logEventsResponse)); + } + + private Single buildResponse( + String foreignIdAttribute, + Collection attributeRequests, + SpansResponse spansResponse, + LogEventsResponse logEventsResponse) { + return Observable.fromIterable(logEventsResponse.getLogEventsList()) + .concatMapSingle( + logEventsResponseVar -> this.convert(attributeRequests, logEventsResponseVar)) + .collect(Collectors.groupingBy(logEvent -> (String) logEvent.attribute(foreignIdAttribute))) + .map( + spanIdVsLogEventsMap -> new SpanLogEventsResponse(spansResponse, spanIdVsLogEventsMap)); + } + + private Single convert( + Collection request, + org.hypertrace.gateway.service.v1.log.events.LogEvent logEvent) { + return this.attributeMapConverter + .convert(request, logEvent.getAttributesMap()) + .map(ConvertedLogEvent::new); + } + + @lombok.Value + @Accessors(fluent = true) + private static class ConvertedLogEvent + implements org.hypertrace.core.graphql.log.event.schema.LogEvent { + + Map attributeValues; + + @Override + public Object attribute(String key) { + return this.attributeValues.get(key); + } + } +} diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventsResponse.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventsResponse.java new file mode 100644 index 00000000..947b1fa9 --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventsResponse.java @@ -0,0 +1,15 @@ +package org.hypertrace.core.graphql.span.dao; + +import java.util.List; +import java.util.Map; +import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.log.event.schema.LogEvent; +import org.hypertrace.gateway.service.v1.span.SpansResponse; + +@lombok.Value +@Accessors(fluent = true) +class SpanLogEventsResponse { + + SpansResponse spansResponse; + Map> spanIdToLogEvents; +} diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/fetcher/SpanFetcher.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/fetcher/SpanFetcher.java index 7b07805f..f7b9cd2b 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/fetcher/SpanFetcher.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/fetcher/SpanFetcher.java @@ -6,8 +6,8 @@ import javax.inject.Inject; import org.hypertrace.core.graphql.atttributes.scopes.HypertraceCoreAttributeScopeString; import org.hypertrace.core.graphql.common.fetcher.InjectableDataFetcher; -import org.hypertrace.core.graphql.common.request.ResultSetRequestBuilder; import org.hypertrace.core.graphql.span.dao.SpanDao; +import org.hypertrace.core.graphql.span.request.SpanRequestBuilder; import org.hypertrace.core.graphql.span.schema.SpanResultSet; public class SpanFetcher extends InjectableDataFetcher { @@ -17,11 +17,11 @@ public SpanFetcher() { } static final class SpanFetcherImpl implements DataFetcher> { - private final ResultSetRequestBuilder requestBuilder; + private final SpanRequestBuilder requestBuilder; private final SpanDao spanDao; @Inject - SpanFetcherImpl(ResultSetRequestBuilder requestBuilder, SpanDao spanDao) { + SpanFetcherImpl(SpanRequestBuilder requestBuilder, SpanDao spanDao) { this.requestBuilder = requestBuilder; this.spanDao = spanDao; } diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/DefaultSpanRequestBuilder.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/DefaultSpanRequestBuilder.java new file mode 100644 index 00000000..06869569 --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/DefaultSpanRequestBuilder.java @@ -0,0 +1,52 @@ +package org.hypertrace.core.graphql.span.request; + +import static io.reactivex.rxjava3.core.Single.zip; + +import graphql.schema.DataFetchingFieldSelectionSet; +import io.reactivex.rxjava3.core.Single; +import java.util.Collection; +import java.util.Map; +import javax.inject.Inject; +import lombok.Value; +import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.request.ResultSetRequest; +import org.hypertrace.core.graphql.common.request.ResultSetRequestBuilder; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; + +class DefaultSpanRequestBuilder implements SpanRequestBuilder { + + private final ResultSetRequestBuilder resultSetRequestBuilder; + private final LogEventAttributeRequestBuilder logEventAttributeRequestBuilder; + + @Inject + public DefaultSpanRequestBuilder( + ResultSetRequestBuilder resultSetRequestBuilder, + LogEventAttributeRequestBuilder logEventAttributeRequestBuilder) { + this.resultSetRequestBuilder = resultSetRequestBuilder; + this.logEventAttributeRequestBuilder = logEventAttributeRequestBuilder; + } + + @Override + public Single build( + GraphQlRequestContext context, + String requestScope, + Map arguments, + DataFetchingFieldSelectionSet selectionSet) { + return zip( + resultSetRequestBuilder.build( + context, requestScope, arguments, selectionSet, OrderArgument.class), + logEventAttributeRequestBuilder.buildAttributeRequest(context, selectionSet), + (resultSetRequest, logEventAttributeRequest) -> + Single.just(new DefaultSpanRequest(resultSetRequest, logEventAttributeRequest))) + .flatMap(single -> single); + } + + @Value + @Accessors(fluent = true) + private static class DefaultSpanRequest implements SpanRequest { + ResultSetRequest spanEventsRequest; + Collection logEventAttributes; + } +} diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/LogEventAttributeRequestBuilder.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/LogEventAttributeRequestBuilder.java new file mode 100644 index 00000000..3e311fc3 --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/LogEventAttributeRequestBuilder.java @@ -0,0 +1,51 @@ +package org.hypertrace.core.graphql.span.request; + +import static org.hypertrace.core.graphql.common.schema.results.ResultSet.RESULT_SET_RESULTS_NAME; +import static org.hypertrace.core.graphql.span.schema.Span.LOG_EVENT_KEY; + +import graphql.schema.DataFetchingFieldSelectionSet; +import graphql.schema.SelectedField; +import io.reactivex.rxjava3.core.Single; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import javax.inject.Inject; +import org.hypertrace.core.graphql.atttributes.scopes.HypertraceCoreAttributeScopeString; +import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.request.AttributeRequestBuilder; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.core.graphql.utils.schema.GraphQlSelectionFinder; +import org.hypertrace.core.graphql.utils.schema.SelectionQuery; + +class LogEventAttributeRequestBuilder { + + private final GraphQlSelectionFinder selectionFinder; + private final AttributeRequestBuilder attributeRequestBuilder; + + @Inject + LogEventAttributeRequestBuilder( + GraphQlSelectionFinder selectionFinder, AttributeRequestBuilder attributeRequestBuilder) { + this.selectionFinder = selectionFinder; + this.attributeRequestBuilder = attributeRequestBuilder; + } + + Single> buildAttributeRequest( + GraphQlRequestContext context, DataFetchingFieldSelectionSet selectionSet) { + return attributeRequestBuilder + .buildForAttributeQueryableFields( + context, + HypertraceCoreAttributeScopeString.LOG_EVENT, + getLogEventSelectionFields(selectionSet)) + .collect(Collectors.toUnmodifiableSet()); + } + + private Stream getLogEventSelectionFields( + DataFetchingFieldSelectionSet selectionSet) { + return this.selectionFinder.findSelections( + selectionSet, + SelectionQuery.builder() + .selectionPath(List.of(RESULT_SET_RESULTS_NAME, LOG_EVENT_KEY, RESULT_SET_RESULTS_NAME)) + .build()); + } +} diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/SpanRequest.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/SpanRequest.java new file mode 100644 index 00000000..73312ca9 --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/SpanRequest.java @@ -0,0 +1,12 @@ +package org.hypertrace.core.graphql.span.request; + +import java.util.Collection; +import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.request.ResultSetRequest; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; + +public interface SpanRequest { + ResultSetRequest spanEventsRequest(); + + Collection logEventAttributes(); +} diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/SpanRequestBuilder.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/SpanRequestBuilder.java new file mode 100644 index 00000000..c3e62eac --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/SpanRequestBuilder.java @@ -0,0 +1,15 @@ +package org.hypertrace.core.graphql.span.request; + +import graphql.schema.DataFetchingFieldSelectionSet; +import io.reactivex.rxjava3.core.Single; +import java.util.Map; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; + +public interface SpanRequestBuilder { + + Single build( + GraphQlRequestContext context, + String requestScope, + Map arguments, + DataFetchingFieldSelectionSet selectionSet); +} diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/SpanRequestModule.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/SpanRequestModule.java new file mode 100644 index 00000000..a1d5a39d --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/SpanRequestModule.java @@ -0,0 +1,26 @@ +package org.hypertrace.core.graphql.span.request; + +import com.google.inject.AbstractModule; +import org.hypertrace.core.graphql.attributes.AttributeStore; +import org.hypertrace.core.graphql.common.request.AttributeRequestBuilder; +import org.hypertrace.core.graphql.common.request.FilterRequestBuilder; +import org.hypertrace.core.graphql.common.utils.attributes.AttributeAssociator; +import org.hypertrace.core.graphql.common.utils.attributes.AttributeScopeStringTranslator; +import org.hypertrace.core.graphql.deserialization.ArgumentDeserializer; +import org.hypertrace.core.graphql.utils.schema.GraphQlSelectionFinder; + +public class SpanRequestModule extends AbstractModule { + + @Override + protected void configure() { + bind(SpanRequestBuilder.class).to(DefaultSpanRequestBuilder.class); + requireBinding(ArgumentDeserializer.class); + requireBinding(AttributeRequestBuilder.class); + requireBinding(FilterRequestBuilder.class); + requireBinding(AttributeStore.class); + requireBinding(AttributeAssociator.class); + requireBinding(GraphQlSelectionFinder.class); + requireBinding(AttributeScopeStringTranslator.class); + requireBinding(AttributeRequestBuilder.class); + } +} diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/schema/Span.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/schema/Span.java index fe11ac6b..c591e167 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/schema/Span.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/schema/Span.java @@ -1,10 +1,19 @@ package org.hypertrace.core.graphql.span.schema; +import graphql.annotations.annotationTypes.GraphQLField; import graphql.annotations.annotationTypes.GraphQLName; +import graphql.annotations.annotationTypes.GraphQLNonNull; import org.hypertrace.core.graphql.common.schema.attributes.AttributeQueryable; import org.hypertrace.core.graphql.common.schema.id.Identifiable; +import org.hypertrace.core.graphql.log.event.schema.LogEventResultSet; @GraphQLName(Span.TYPE_NAME) public interface Span extends AttributeQueryable, Identifiable { String TYPE_NAME = "Span"; + String LOG_EVENT_KEY = "logEvents"; + + @GraphQLField + @GraphQLNonNull + @GraphQLName(LOG_EVENT_KEY) + LogEventResultSet logEvents(); } diff --git a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/DaoTestUtil.java b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/DaoTestUtil.java new file mode 100644 index 00000000..cb626826 --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/DaoTestUtil.java @@ -0,0 +1,220 @@ +package org.hypertrace.core.graphql.span.dao; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.time.Instant; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import lombok.Value; +import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.attributes.AttributeModel; +import org.hypertrace.core.graphql.attributes.AttributeModelMetricAggregationType; +import org.hypertrace.core.graphql.attributes.AttributeModelType; +import org.hypertrace.core.graphql.common.request.AttributeAssociation; +import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.request.ResultSetRequest; +import org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument; +import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterOperatorType; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterType; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.core.graphql.span.request.SpanRequest; +import org.hypertrace.gateway.service.v1.common.ValueType; +import org.hypertrace.gateway.service.v1.log.events.LogEvent; +import org.hypertrace.gateway.service.v1.log.events.LogEventsResponse; +import org.hypertrace.gateway.service.v1.span.SpanEvent; +import org.hypertrace.gateway.service.v1.span.SpansResponse; + +class DaoTestUtil { + + @Value + @Accessors(fluent = true) + static class DefaultAttributeRequest implements AttributeRequest { + + AttributeModel attribute; + + @Override + public String alias() { + return attribute.id(); + } + } + + @Value + @Accessors(fluent = true) + static class DefaultAttributeModel implements AttributeModel { + + String id; + String scope; + String key; + String displayName; + AttributeModelType type; + String units; + boolean onlySupportsGrouping; + boolean onlySupportsAggregation; + List supportedMetricAggregationTypes; + boolean groupable; + } + + @Value + @Accessors(fluent = true) + static class NormalizedFilter implements FilterArgument { + + FilterType type = FilterType.ATTRIBUTE; + String key; + FilterOperatorType operator; + Object value; + String idScope = null; + AttributeScope idType = null; + } + + @Value + @Accessors(fluent = true) + static class DefaultSpanRequest implements SpanRequest { + + ResultSetRequest spanEventsRequest; + Collection logEventAttributes; + } + + @Value + @Accessors(fluent = true) + static class DefaultResultSetRequest implements ResultSetRequest { + + GraphQlRequestContext context; + Collection attributes; + TimeRangeArgument timeRange; + AttributeRequest idAttribute; + int limit; + int offset; + List orderArguments; + Collection> filterArguments; + Optional spaceId; + } + + @Value + @Accessors(fluent = true) + static class DefaultTimeRange implements TimeRangeArgument { + + @JsonProperty(TIME_RANGE_ARGUMENT_START_TIME) + Instant startTime; + + @JsonProperty(TIME_RANGE_ARGUMENT_END_TIME) + Instant endTime; + } + + static AttributeRequest traceIdAttribute = + new DefaultAttributeRequest( + new DefaultAttributeModel( + "traceId", + "LOG_EVENT", + "traceId", + "Trace Id", + AttributeModelType.STRING, + "", + false, + false, + Collections.emptyList(), + false)); + + static AttributeRequest spanIdAttribute = + new DefaultAttributeRequest( + new DefaultAttributeModel( + "spanId", + "LOG_EVENT", + "spanId", + "Span Id", + AttributeModelType.STRING, + "", + false, + false, + Collections.emptyList(), + false)); + + static AttributeRequest attributesAttribute = + new DefaultAttributeRequest( + new DefaultAttributeModel( + "attributes", + "LOG_EVENT", + "attributes", + "Attributes", + AttributeModelType.STRING, + "", + false, + false, + Collections.emptyList(), + false)); + + static AttributeRequest eventIdAttribute = + new DefaultAttributeRequest( + new DefaultAttributeModel( + "id", + "EVENT", + "id", + "Id", + AttributeModelType.STRING, + "", + false, + false, + Collections.emptyList(), + false)); + + static SpansResponse spansResponse = + SpansResponse.newBuilder() + .addSpans( + SpanEvent.newBuilder() + .putAllAttributes(Map.of("id", getValue("span1"), "traceId", getValue("trace1"))) + .build()) + .addSpans( + SpanEvent.newBuilder() + .putAllAttributes(Map.of("id", getValue("span2"), "traceId", getValue("trace1"))) + .build()) + .addSpans( + SpanEvent.newBuilder() + .putAllAttributes(Map.of("id", getValue("span3"), "traceId", getValue("trace1"))) + .build()) + .build(); + + static LogEventsResponse logEventsResponse = + LogEventsResponse.newBuilder() + .addLogEvents( + LogEvent.newBuilder() + .putAllAttributes( + Map.of( + "traceId", + getValue("trace1"), + "attributes", + getValue("event: error"), + "spanId", + getValue("span1")))) + .addLogEvents( + LogEvent.newBuilder() + .putAllAttributes( + Map.of( + "traceId", + getValue("trace1"), + "attributes", + getValue("event: error"), + "spanId", + getValue("span1")))) + .addLogEvents( + LogEvent.newBuilder() + .putAllAttributes( + Map.of( + "traceId", + getValue("trace1"), + "attributes", + getValue("event: error"), + "spanId", + getValue("span2")))) + .build(); + + static org.hypertrace.gateway.service.v1.common.Value getValue(String value) { + return org.hypertrace.gateway.service.v1.common.Value.newBuilder() + .setValueType(ValueType.STRING) + .setString(value) + .build(); + } +} diff --git a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilderTest.java b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilderTest.java new file mode 100644 index 00000000..3e1db88a --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilderTest.java @@ -0,0 +1,155 @@ +package org.hypertrace.core.graphql.span.dao; + +import static org.hypertrace.core.graphql.span.dao.DaoTestUtil.attributesAttribute; +import static org.hypertrace.core.graphql.span.dao.DaoTestUtil.spanIdAttribute; +import static org.hypertrace.core.graphql.span.dao.DaoTestUtil.spansResponse; +import static org.hypertrace.core.graphql.span.dao.DaoTestUtil.traceIdAttribute; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyCollection; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.mock; + +import com.google.inject.AbstractModule; +import com.google.inject.Guice; +import com.google.inject.Injector; +import com.google.inject.Key; +import com.google.inject.TypeLiteral; +import io.grpc.CallCredentials; +import io.reactivex.rxjava3.core.Single; +import java.time.Duration; +import java.time.Instant; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; +import org.hypertrace.core.graphql.common.request.AttributeAssociation; +import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.request.FilterRequestBuilder; +import org.hypertrace.core.graphql.common.request.ResultSetRequest; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; +import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.core.graphql.span.dao.DaoTestUtil.DefaultResultSetRequest; +import org.hypertrace.core.graphql.span.dao.DaoTestUtil.DefaultSpanRequest; +import org.hypertrace.core.graphql.span.dao.DaoTestUtil.DefaultTimeRange; +import org.hypertrace.core.graphql.span.dao.DaoTestUtil.NormalizedFilter; +import org.hypertrace.core.graphql.span.request.SpanRequest; +import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; +import org.hypertrace.core.graphql.utils.gateway.GatewayUtilsModule; +import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; +import org.hypertrace.gateway.service.v1.common.Expression; +import org.hypertrace.gateway.service.v1.common.Filter; +import org.hypertrace.gateway.service.v1.common.Operator; +import org.hypertrace.gateway.service.v1.log.events.LogEventsRequest; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class SpanLogEventRequestBuilderTest { + + @Mock private FilterRequestBuilder filterRequestBuilder; + + private SpanLogEventRequestBuilder spanLogEventRequestBuilder; + + @BeforeEach + void beforeEach() { + Injector injector = + Guice.createInjector( + new GatewayUtilsModule(), + new AbstractModule() { + @Override + protected void configure() { + bind(CallCredentials.class).toInstance(mock(CallCredentials.class)); + bind(GraphQlServiceConfig.class).toInstance(mock(GraphQlServiceConfig.class)); + bind(GrpcChannelRegistry.class).toInstance(mock(GrpcChannelRegistry.class)); + } + }); + + Converter>, Filter> filterConverter = + injector.getInstance( + Key.get( + new TypeLiteral< + Converter>, Filter>>() {})); + + Converter, Set> attributeConverter = + injector.getInstance( + Key.get( + new TypeLiteral, Set>>() {})); + + spanLogEventRequestBuilder = + new SpanLogEventRequestBuilder(attributeConverter, filterConverter, filterRequestBuilder); + } + + @Test + void testBuildRequest() { + doAnswer( + invocation -> { + Set filterArguments = invocation.getArgument(2, Set.class); + FilterArgument filterArgument = filterArguments.iterator().next(); + return Single.just( + List.of( + AttributeAssociation.of( + spanIdAttribute.attribute(), + new NormalizedFilter( + spanIdAttribute.attribute().key(), + filterArgument.operator(), + filterArgument.value())))); + }) + .when(filterRequestBuilder) + .build(any(), any(), anyCollection()); + + long startTime = System.currentTimeMillis(); + long endTime = System.currentTimeMillis() + Duration.ofHours(1).toMillis(); + + Collection logAttributeRequests = + List.of(spanIdAttribute, traceIdAttribute, attributesAttribute); + ResultSetRequest resultSetRequest = + new DefaultResultSetRequest( + null, + List.of(DaoTestUtil.eventIdAttribute), + new DefaultTimeRange(Instant.ofEpochMilli(startTime), Instant.ofEpochMilli(endTime)), + DaoTestUtil.eventIdAttribute, + 0, + 0, + List.of(), + Collections.emptyList(), + Optional.empty()); + SpanRequest spanRequest = new DefaultSpanRequest(resultSetRequest, logAttributeRequests); + + LogEventsRequest logEventsRequest = + spanLogEventRequestBuilder.buildLogEventsRequest(spanRequest, spansResponse).blockingGet(); + + assertEquals(Operator.IN, logEventsRequest.getFilter().getChildFilter(0).getOperator()); + assertEquals( + spanIdAttribute.attribute().id(), + logEventsRequest + .getFilter() + .getChildFilter(0) + .getLhs() + .getColumnIdentifier() + .getColumnName()); + assertEquals( + List.of("span1", "span2", "span3"), + logEventsRequest + .getFilter() + .getChildFilter(0) + .getRhs() + .getLiteral() + .getValue() + .getStringArrayList() + .stream() + .collect(Collectors.toList())); + assertEquals(startTime, logEventsRequest.getStartTimeMillis()); + assertEquals(endTime, logEventsRequest.getEndTimeMillis()); + assertEquals( + Set.of("attributes", "traceId", "spanId"), + logEventsRequest.getSelectionList().stream() + .map(v -> v.getColumnIdentifier().getColumnName()) + .collect(Collectors.toSet())); + } +} diff --git a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventResponseConverterTest.java b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventResponseConverterTest.java new file mode 100644 index 00000000..c980e441 --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventResponseConverterTest.java @@ -0,0 +1,78 @@ +package org.hypertrace.core.graphql.span.dao; + +import static org.hypertrace.core.graphql.span.dao.DaoTestUtil.attributesAttribute; +import static org.hypertrace.core.graphql.span.dao.DaoTestUtil.logEventsResponse; +import static org.hypertrace.core.graphql.span.dao.DaoTestUtil.spanIdAttribute; +import static org.hypertrace.core.graphql.span.dao.DaoTestUtil.spansResponse; +import static org.hypertrace.core.graphql.span.dao.DaoTestUtil.traceIdAttribute; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyCollection; +import static org.mockito.ArgumentMatchers.anyMap; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.when; + +import io.reactivex.rxjava3.core.Single; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.stream.Collectors; +import org.hypertrace.core.graphql.attributes.AttributeStore; +import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.utils.BiConverter; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.gateway.service.v1.common.Value; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class SpanLogEventResponseConverterTest { + + @Mock + BiConverter, Map, Map> + attributeMapConverter; + + @Mock AttributeStore attributeStore; + @Mock GraphQlRequestContext requestContext; + + private SpanLogEventResponseConverter spanLogEventResponseConverter; + + @BeforeEach + void beforeEach() { + spanLogEventResponseConverter = + new SpanLogEventResponseConverter(attributeMapConverter, attributeStore); + } + + @Test + void testBuildResponse() { + Collection attributeRequests = + List.of(spanIdAttribute, traceIdAttribute, attributesAttribute); + + when(attributeStore.getForeignIdAttribute(any(), anyString(), anyString())) + .thenReturn(Single.just(spanIdAttribute.attribute())); + + doAnswer( + invocation -> { + Map map = invocation.getArgument(1, Map.class); + return Single.just( + map.entrySet().stream() + .collect(Collectors.toMap(Entry::getKey, v -> v.getValue().getString()))); + }) + .when(attributeMapConverter) + .convert(anyCollection(), anyMap()); + + SpanLogEventsResponse response = + spanLogEventResponseConverter + .buildResponse(requestContext, attributeRequests, spansResponse, logEventsResponse) + .blockingGet(); + + assertEquals(spansResponse, response.spansResponse()); + assertEquals(Set.of("span1", "span2"), response.spanIdToLogEvents().keySet()); + } +} diff --git a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/request/LogEventAttributeRequestBuilderTest.java b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/request/LogEventAttributeRequestBuilderTest.java new file mode 100644 index 00000000..d5efcca0 --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/request/LogEventAttributeRequestBuilderTest.java @@ -0,0 +1,59 @@ +package org.hypertrace.core.graphql.span.request; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.when; + +import graphql.schema.DataFetchingFieldSelectionSet; +import graphql.schema.SelectedField; +import io.reactivex.rxjava3.core.Observable; +import java.util.Set; +import java.util.stream.Stream; +import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.request.AttributeRequestBuilder; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.core.graphql.utils.schema.GraphQlSelectionFinder; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class LogEventAttributeRequestBuilderTest { + + @Mock GraphQlRequestContext mockContext; + @Mock GraphQlSelectionFinder mockSelectionFinder; + @Mock AttributeRequestBuilder mockAttributeRequestBuilder; + @Mock DataFetchingFieldSelectionSet mockSelectionSet; + @Mock Stream mockAttributeQueryableStream; + @Mock AttributeRequest mockFooAttributeRequest; + @Mock AttributeRequest mockBarAttributeRequest; + + private LogEventAttributeRequestBuilder requestBuilder; + + @BeforeEach + void beforeEach() { + this.requestBuilder = + new LogEventAttributeRequestBuilder( + this.mockSelectionFinder, this.mockAttributeRequestBuilder); + } + + @Test + void canBuildRequest() { + when(this.mockSelectionFinder.findSelections(eq(this.mockSelectionSet), any())) + .thenReturn(mockAttributeQueryableStream); + when(this.mockAttributeRequestBuilder.buildForAttributeQueryableFields( + any(), any(), eq(this.mockAttributeQueryableStream))) + .thenReturn(Observable.just(this.mockFooAttributeRequest, this.mockBarAttributeRequest)); + + Set request = + this.requestBuilder + .buildAttributeRequest(this.mockContext, this.mockSelectionSet) + .blockingGet(); + + Assertions.assertEquals( + Set.of(this.mockBarAttributeRequest, this.mockFooAttributeRequest), request); + } +} From e6a3738f459a45bd45eb73ebd8f326de23dac2d0 Mon Sep 17 00:00:00 2001 From: Rishabh Date: Thu, 29 Apr 2021 18:44:09 +0530 Subject: [PATCH 060/173] feat: Add spanId attribute for span-log join query (#60) --- .../span/dao/SpanLogEventRequestBuilder.java | 29 +++++- .../dao/SpanLogEventResponseConverter.java | 30 +++++-- .../dao/SpanLogEventRequestBuilderTest.java | 88 +++++++++++++++++-- .../SpanLogEventResponseConverterTest.java | 32 ++++++- 4 files changed, 164 insertions(+), 15 deletions(-) diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilder.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilder.java index 46d1d4f1..1e021e53 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilder.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilder.java @@ -2,6 +2,7 @@ import static io.reactivex.rxjava3.core.Single.zip; +import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.Single; import java.util.Collection; import java.util.List; @@ -9,15 +10,18 @@ import java.util.stream.Collectors; import javax.inject.Inject; import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.attributes.AttributeStore; import org.hypertrace.core.graphql.atttributes.scopes.HypertraceCoreAttributeScopeString; import org.hypertrace.core.graphql.common.request.AttributeAssociation; import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.request.AttributeRequestBuilder; import org.hypertrace.core.graphql.common.request.FilterRequestBuilder; import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterOperatorType; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterType; import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; import org.hypertrace.core.graphql.span.request.SpanRequest; import org.hypertrace.gateway.service.v1.common.Expression; import org.hypertrace.gateway.service.v1.common.Filter; @@ -29,21 +33,28 @@ class SpanLogEventRequestBuilder { private final Converter, Set> attributeConverter; private final Converter>, Filter> filterConverter; private final FilterRequestBuilder filterRequestBuilder; + private final AttributeStore attributeStore; + private final AttributeRequestBuilder attributeRequestBuilder; @Inject SpanLogEventRequestBuilder( Converter, Set> attributeConverter, Converter>, Filter> filterConverter, - FilterRequestBuilder filterRequestBuilder) { + FilterRequestBuilder filterRequestBuilder, + AttributeStore attributeStore, + AttributeRequestBuilder attributeRequestBuilder) { this.attributeConverter = attributeConverter; this.filterConverter = filterConverter; this.filterRequestBuilder = filterRequestBuilder; + this.attributeStore = attributeStore; + this.attributeRequestBuilder = attributeRequestBuilder; } Single buildLogEventsRequest( SpanRequest gqlRequest, SpansResponse spansResponse) { return zip( - this.attributeConverter.convert(gqlRequest.logEventAttributes()), + getRequestAttributes( + gqlRequest.spanEventsRequest().context(), gqlRequest.logEventAttributes()), buildLogEventsQueryFilter(gqlRequest, spansResponse).flatMap(filterConverter::convert), (selections, filter) -> LogEventsRequest.newBuilder() @@ -56,6 +67,20 @@ Single buildLogEventsRequest( .build()); } + private Single> getRequestAttributes( + GraphQlRequestContext requestContext, Collection logEventAttributes) { + return this.attributeStore + .getForeignIdAttribute( + requestContext, + HypertraceCoreAttributeScopeString.LOG_EVENT, + HypertraceCoreAttributeScopeString.SPAN) + .map(attributeRequestBuilder::buildForAttribute) + .toObservable() + .mergeWith(Observable.fromIterable(logEventAttributes)) + .collect(Collectors.toSet()) + .flatMap(attributeConverter::convert); + } + private Single>> buildLogEventsQueryFilter( SpanRequest gqlRequest, SpansResponse spansResponse) { List spanIds = diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventResponseConverter.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventResponseConverter.java index 5b9a59ce..938c84df 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventResponseConverter.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventResponseConverter.java @@ -7,6 +7,7 @@ import java.util.stream.Collectors; import javax.inject.Inject; import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.attributes.AttributeModel; import org.hypertrace.core.graphql.attributes.AttributeStore; import org.hypertrace.core.graphql.atttributes.scopes.HypertraceCoreAttributeScopeString; import org.hypertrace.core.graphql.common.request.AttributeRequest; @@ -43,29 +44,44 @@ Single buildResponse( HypertraceCoreAttributeScopeString.LOG_EVENT, HypertraceCoreAttributeScopeString.SPAN) .flatMap( - spanId -> - buildResponse(spanId.key(), attributeRequests, spansResponse, logEventsResponse)); + spanId -> buildResponse(spanId, attributeRequests, spansResponse, logEventsResponse)); } private Single buildResponse( - String foreignIdAttribute, + AttributeModel foreignIdAttribute, Collection attributeRequests, SpansResponse spansResponse, LogEventsResponse logEventsResponse) { return Observable.fromIterable(logEventsResponse.getLogEventsList()) .concatMapSingle( - logEventsResponseVar -> this.convert(attributeRequests, logEventsResponseVar)) - .collect(Collectors.groupingBy(logEvent -> (String) logEvent.attribute(foreignIdAttribute))) + logEventsResponseVar -> + this.convert(foreignIdAttribute, attributeRequests, logEventsResponseVar)) + .collect( + Collectors.groupingBy( + SpanLogEventPair::spanId, + Collectors.mapping(SpanLogEventPair::logEvent, Collectors.toList()))) .map( spanIdVsLogEventsMap -> new SpanLogEventsResponse(spansResponse, spanIdVsLogEventsMap)); } - private Single convert( + private Single convert( + AttributeModel foreignIdAttribute, Collection request, org.hypertrace.gateway.service.v1.log.events.LogEvent logEvent) { return this.attributeMapConverter .convert(request, logEvent.getAttributesMap()) - .map(ConvertedLogEvent::new); + .map( + attributeMap -> + new SpanLogEventPair( + logEvent.getAttributesMap().get(foreignIdAttribute.id()).getString(), + new ConvertedLogEvent(attributeMap))); + } + + @lombok.Value + @Accessors(fluent = true) + private static class SpanLogEventPair { + String spanId; + LogEvent logEvent; } @lombok.Value diff --git a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilderTest.java b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilderTest.java index 3e1db88a..105b7298 100644 --- a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilderTest.java +++ b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilderTest.java @@ -7,8 +7,10 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyCollection; +import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; import com.google.inject.AbstractModule; import com.google.inject.Guice; @@ -25,12 +27,16 @@ import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; +import org.hypertrace.core.graphql.attributes.AttributeModel; +import org.hypertrace.core.graphql.attributes.AttributeStore; import org.hypertrace.core.graphql.common.request.AttributeAssociation; import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.request.AttributeRequestBuilder; import org.hypertrace.core.graphql.common.request.FilterRequestBuilder; import org.hypertrace.core.graphql.common.request.ResultSetRequest; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.core.graphql.span.dao.DaoTestUtil.DefaultAttributeRequest; import org.hypertrace.core.graphql.span.dao.DaoTestUtil.DefaultResultSetRequest; import org.hypertrace.core.graphql.span.dao.DaoTestUtil.DefaultSpanRequest; import org.hypertrace.core.graphql.span.dao.DaoTestUtil.DefaultTimeRange; @@ -54,6 +60,10 @@ class SpanLogEventRequestBuilderTest { @Mock private FilterRequestBuilder filterRequestBuilder; + @Mock private AttributeStore attributeStore; + + @Mock private AttributeRequestBuilder attributeRequestBuilder; + private SpanLogEventRequestBuilder spanLogEventRequestBuilder; @BeforeEach @@ -82,11 +92,13 @@ protected void configure() { new TypeLiteral, Set>>() {})); spanLogEventRequestBuilder = - new SpanLogEventRequestBuilder(attributeConverter, filterConverter, filterRequestBuilder); - } + new SpanLogEventRequestBuilder( + attributeConverter, + filterConverter, + filterRequestBuilder, + attributeStore, + attributeRequestBuilder); - @Test - void testBuildRequest() { doAnswer( invocation -> { Set filterArguments = invocation.getArgument(2, Set.class); @@ -103,6 +115,21 @@ void testBuildRequest() { .when(filterRequestBuilder) .build(any(), any(), anyCollection()); + when(attributeStore.getForeignIdAttribute(any(), anyString(), anyString())) + .thenReturn(Single.just(spanIdAttribute.attribute())); + + doAnswer( + invocation -> { + AttributeModel attributeModel = invocation.getArgument(0, AttributeModel.class); + return new DefaultAttributeRequest(attributeModel); + }) + .when(attributeRequestBuilder) + .buildForAttribute(any()); + } + + @Test + void testBuildRequest() { + long startTime = System.currentTimeMillis(); long endTime = System.currentTimeMillis() + Duration.ofHours(1).toMillis(); @@ -149,7 +176,58 @@ void testBuildRequest() { assertEquals( Set.of("attributes", "traceId", "spanId"), logEventsRequest.getSelectionList().stream() - .map(v -> v.getColumnIdentifier().getColumnName()) + .map(expression -> expression.getColumnIdentifier().getColumnName()) + .collect(Collectors.toSet())); + } + + @Test + void testBuildRequest_addSpanId() { + long startTime = System.currentTimeMillis(); + long endTime = System.currentTimeMillis() + Duration.ofHours(1).toMillis(); + + Collection logAttributeRequests = List.of(traceIdAttribute); + ResultSetRequest resultSetRequest = + new DefaultResultSetRequest( + null, + List.of(DaoTestUtil.eventIdAttribute), + new DefaultTimeRange(Instant.ofEpochMilli(startTime), Instant.ofEpochMilli(endTime)), + DaoTestUtil.eventIdAttribute, + 0, + 0, + List.of(), + Collections.emptyList(), + Optional.empty()); + SpanRequest spanRequest = new DefaultSpanRequest(resultSetRequest, logAttributeRequests); + + LogEventsRequest logEventsRequest = + spanLogEventRequestBuilder.buildLogEventsRequest(spanRequest, spansResponse).blockingGet(); + + assertEquals(Operator.IN, logEventsRequest.getFilter().getChildFilter(0).getOperator()); + assertEquals( + spanIdAttribute.attribute().id(), + logEventsRequest + .getFilter() + .getChildFilter(0) + .getLhs() + .getColumnIdentifier() + .getColumnName()); + assertEquals( + List.of("span1", "span2", "span3"), + logEventsRequest + .getFilter() + .getChildFilter(0) + .getRhs() + .getLiteral() + .getValue() + .getStringArrayList() + .stream() + .collect(Collectors.toList())); + assertEquals(startTime, logEventsRequest.getStartTimeMillis()); + assertEquals(endTime, logEventsRequest.getEndTimeMillis()); + assertEquals( + Set.of("traceId", "spanId"), + logEventsRequest.getSelectionList().stream() + .map(expression -> expression.getColumnIdentifier().getColumnName()) .collect(Collectors.toSet())); } } diff --git a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventResponseConverterTest.java b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventResponseConverterTest.java index c980e441..26de96d1 100644 --- a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventResponseConverterTest.java +++ b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventResponseConverterTest.java @@ -62,7 +62,37 @@ void testBuildResponse() { Map map = invocation.getArgument(1, Map.class); return Single.just( map.entrySet().stream() - .collect(Collectors.toMap(Entry::getKey, v -> v.getValue().getString()))); + .collect( + Collectors.toMap( + Entry::getKey, valueEntry -> valueEntry.getValue().getString()))); + }) + .when(attributeMapConverter) + .convert(anyCollection(), anyMap()); + + SpanLogEventsResponse response = + spanLogEventResponseConverter + .buildResponse(requestContext, attributeRequests, spansResponse, logEventsResponse) + .blockingGet(); + + assertEquals(spansResponse, response.spansResponse()); + assertEquals(Set.of("span1", "span2"), response.spanIdToLogEvents().keySet()); + } + + @Test + void testBuildResponse_spanIdNotRequested() { + Collection attributeRequests = List.of(traceIdAttribute, attributesAttribute); + + when(attributeStore.getForeignIdAttribute(any(), anyString(), anyString())) + .thenReturn(Single.just(spanIdAttribute.attribute())); + + doAnswer( + invocation -> { + Map map = invocation.getArgument(1, Map.class); + return Single.just( + map.entrySet().stream() + .collect( + Collectors.toMap( + Entry::getKey, valueEntry -> valueEntry.getValue().getString()))); }) .when(attributeMapConverter) .convert(anyCollection(), anyMap()); From ad3beb68a535c370c26f6ff710e5836b68d479a1 Mon Sep 17 00:00:00 2001 From: GurtejSohi Date: Tue, 4 May 2021 11:49:30 +0530 Subject: [PATCH 061/173] feat: add support for enum in UnknownScalar (#61) --- .../graphql/common/schema/typefunctions/UnknownScalar.java | 7 ++++++- .../graphql/common/schema/scalars/UnknownScalarTest.java | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/UnknownScalar.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/UnknownScalar.java index 8a56fb7e..1fd22aed 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/UnknownScalar.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/UnknownScalar.java @@ -4,6 +4,7 @@ import graphql.annotations.processor.typeFunctions.TypeFunction; import graphql.language.ArrayValue; import graphql.language.BooleanValue; +import graphql.language.EnumValue; import graphql.language.FloatValue; import graphql.language.IntValue; import graphql.language.ObjectField; @@ -24,7 +25,8 @@ public class UnknownScalar implements TypeFunction { private static final GraphQLScalarType ATTRIBUTE_VALUE_SCALAR = GraphQLScalarType.newScalar() .name("Unknown") - .description("A value of unknown type: A string, int, float, boolean, array or object") + .description( + "A value of unknown type: A string, int, float, boolean, array, enum or object") .coercing( new Coercing<>() { @Override @@ -67,6 +69,9 @@ private Object parseFromAst(Object input, Function errorWrappe return ((ArrayValue) input) .getValues().stream().map(recurse).collect(Collectors.toUnmodifiableList()); } + if (input instanceof EnumValue) { + return ((EnumValue) input).getName(); + } if (input instanceof ObjectValue) { return ((ObjectValue) input) .getObjectFields().stream() diff --git a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/UnknownScalarTest.java b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/UnknownScalarTest.java index 2b21299d..588b6861 100644 --- a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/UnknownScalarTest.java +++ b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/UnknownScalarTest.java @@ -54,6 +54,7 @@ void canDetermineIfConvertible() { assertFalse(this.unknownScalarFunction.canBuildType(Double.class, this.mockAnnotatedType)); assertFalse(this.unknownScalarFunction.canBuildType(Boolean.class, this.mockAnnotatedType)); assertFalse(this.unknownScalarFunction.canBuildType(List.class, this.mockAnnotatedType)); + assertFalse(this.unknownScalarFunction.canBuildType(Enum.class, this.mockAnnotatedType)); } @Test From 79c9a04afc1de40996cf1ca0b6b47a3ec7c844fa Mon Sep 17 00:00:00 2001 From: kotharironak <53209990+kotharironak@users.noreply.github.com> Date: Thu, 13 May 2021 10:33:21 +0530 Subject: [PATCH 062/173] feat: adds support for exporting spans in otlp format (#62) * feat: adds support for exporting spans in otlp format * refactor: addressed review comments and refactor a bit * feat: removed un-used protobuf plugin * chore: addressed missed review comments * refactor: removed the request scope argument from span request builder * fix: extending expiry date for IONETTY-1042268 * test: adds the unit test for export span conversion * refactor the tags based method * chore: address few comments --- .snyk | 2 +- .../DefaultResultSetRequestBuilder.java | 48 +++++ .../request/ResultSetRequestBuilder.java | 6 + .../build.gradle.kts | 3 + .../build.gradle.kts | 2 + .../core/graphql/span/dao/ExportSpanDao.java | 41 ++++ .../core/graphql/span/export/ExportSpan.java | 148 +++++++++++++ .../span/export/ExportSpanConstants.java | 43 ++++ .../span/export/ExportSpanConverter.java | 49 +++++ .../span/fetcher/ExportSpanFetcher.java | 46 ++++ .../graphql/span/fetcher/SpanFetcher.java | 6 +- .../request/DefaultSpanRequestBuilder.java | 32 ++- .../LogEventAttributeRequestBuilder.java | 12 ++ .../span/request/SpanRequestBuilder.java | 8 +- .../graphql/span/schema/ExportSpanResult.java | 16 ++ .../core/graphql/span/schema/SpanSchema.java | 11 + .../graphql/span/export/ExportSpanTest.java | 198 ++++++++++++++++++ 17 files changed, 657 insertions(+), 14 deletions(-) create mode 100644 hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/ExportSpanDao.java create mode 100644 hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/export/ExportSpan.java create mode 100644 hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/export/ExportSpanConstants.java create mode 100644 hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/export/ExportSpanConverter.java create mode 100644 hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/fetcher/ExportSpanFetcher.java create mode 100644 hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/schema/ExportSpanResult.java create mode 100644 hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/export/ExportSpanTest.java diff --git a/.snyk b/.snyk index ba23795c..fbd83903 100644 --- a/.snyk +++ b/.snyk @@ -5,6 +5,6 @@ ignore: SNYK-JAVA-IONETTY-1042268: - '*': reason: No replacement available - expires: 2021-04-31T00:00:00.000Z + expires: 2021-06-30T00:00:00.000Z patch: {} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilder.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilder.java index aba13b2e..ec0d83e2 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilder.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilder.java @@ -4,6 +4,7 @@ import graphql.schema.DataFetchingFieldSelectionSet; import graphql.schema.SelectedField; +import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.Single; import java.util.Collection; import java.util.Collections; @@ -143,6 +144,53 @@ public Single> build( spaceId)); } + @Override + public Single> build( + GraphQlRequestContext context, + String requestScope, + Map arguments, + List attributes) { + int limit = + this.argumentDeserializer + .deserializePrimitive(arguments, LimitArgument.class) + .orElse(DEFAULT_LIMIT); + + TimeRangeArgument timeRange = + this.argumentDeserializer + .deserializeObject(arguments, TimeRangeArgument.class) + .orElseThrow(); + + List requestedFilters = + this.argumentDeserializer + .deserializeObjectList(arguments, FilterArgument.class) + .orElse(Collections.emptyList()); + + return zip( + this.getAttributeRequests(context, requestScope, attributes).collect(Collectors.toList()), + this.attributeRequestBuilder.buildForId(context, requestScope), + this.filterRequestBuilder.build(context, requestScope, requestedFilters), + (attributeRequests, idAttribute, filters) -> + new DefaultResultSetRequest<>( + context, + attributeRequests, + idAttribute, + timeRange, + limit, + 0, + List.of(), + filters, + Optional.empty())); + } + + private Observable getAttributeRequests( + GraphQlRequestContext context, String requestScope, List attributes) { + return Observable.fromIterable(attributes) + .distinct() + .flatMapSingle( + attributeKey -> + this.attributeRequestBuilder.buildForKey(context, requestScope, attributeKey)); + } + private Stream getAttributeQueryableFields( DataFetchingFieldSelectionSet selectionSet) { return this.selectionFinder.findSelections( diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequestBuilder.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequestBuilder.java index a2c9a88c..ce22126f 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequestBuilder.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequestBuilder.java @@ -37,4 +37,10 @@ Single> build( Collection> filterArguments, Stream attributeQueryableFields, Optional spaceId); + + Single> build( + GraphQlRequestContext context, + String requestScope, + Map arguments, + List attributes); } diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 3b6c4923..600cf953 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -16,6 +16,7 @@ dependencies { api("org.slf4j:slf4j-api:1.7.30") api("io.reactivex.rxjava3:rxjava:3.0.9") api("com.google.protobuf:protobuf-java-util:3.14.0") + api("org.projectlombok:lombok:1.18.18") api("com.google.code.findbugs:jsr305:3.0.2") api("com.typesafe:config:1.4.1") @@ -27,6 +28,8 @@ dependencies { api("io.grpc:grpc-context:1.36.0") api("com.fasterxml.jackson.core:jackson-databind:2.12.1") api("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.1") + api("org.apache.commons:commons-text:1.9") + api("io.opentelemetry:opentelemetry-proto:1.1.0-alpha") runtime("org.apache.logging.log4j:log4j-slf4j-impl:2.14.0") runtime("io.grpc:grpc-netty:1.37.0") diff --git a/hypertrace-core-graphql-span-schema/build.gradle.kts b/hypertrace-core-graphql-span-schema/build.gradle.kts index ab5ed343..6fca5dcc 100644 --- a/hypertrace-core-graphql-span-schema/build.gradle.kts +++ b/hypertrace-core-graphql-span-schema/build.gradle.kts @@ -17,6 +17,8 @@ dependencies { implementation("io.reactivex.rxjava3:rxjava") implementation("org.hypertrace.gateway.service:gateway-service-api") implementation("com.google.protobuf:protobuf-java-util") + implementation("io.opentelemetry:opentelemetry-proto") + implementation("org.apache.commons:commons-text") implementation(project(":hypertrace-core-graphql-context")) implementation(project(":hypertrace-core-graphql-grpc-utils")) diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/ExportSpanDao.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/ExportSpanDao.java new file mode 100644 index 00000000..fe60f414 --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/ExportSpanDao.java @@ -0,0 +1,41 @@ +package org.hypertrace.core.graphql.span.dao; + +import io.reactivex.rxjava3.core.Single; +import java.util.List; +import java.util.stream.Collectors; +import javax.inject.Inject; +import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.span.export.ExportSpan; +import org.hypertrace.core.graphql.span.export.ExportSpanConverter; +import org.hypertrace.core.graphql.span.request.SpanRequest; +import org.hypertrace.core.graphql.span.schema.ExportSpanResult; +import org.hypertrace.core.graphql.span.schema.SpanResultSet; + +public class ExportSpanDao { + private final SpanDao spanDao; + + @Inject + ExportSpanDao(SpanDao spanDao) { + this.spanDao = spanDao; + } + + public Single getSpans(SpanRequest request) { + return this.spanDao + .getSpans(request) + .flatMap(spanResultSet -> this.buildResponse(spanResultSet)); + } + + private Single buildResponse(SpanResultSet result) throws Exception { + List exportSpans = + result.results().stream() + .map(span -> new ExportSpan.Builder(span).build()) + .collect(Collectors.toList()); + return Single.just(new ExportSpanResultImpl(ExportSpanConverter.toJson(exportSpans))); + } + + @lombok.Value + @Accessors(fluent = true) + private static class ExportSpanResultImpl implements ExportSpanResult { + String result; + } +} diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/export/ExportSpan.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/export/ExportSpan.java new file mode 100644 index 00000000..6d7bb97a --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/export/ExportSpan.java @@ -0,0 +1,148 @@ +package org.hypertrace.core.graphql.span.export; + +import static org.hypertrace.core.graphql.span.export.ExportSpanConstants.SpanTagsKey.SERVICE_NAME_KEY; +import static org.hypertrace.core.graphql.span.export.ExportSpanConstants.SpanTagsKey.SPAN_KIND; + +import com.google.common.io.BaseEncoding; +import com.google.protobuf.ByteString; +import io.opentelemetry.proto.common.v1.AnyValue; +import io.opentelemetry.proto.common.v1.KeyValue; +import io.opentelemetry.proto.resource.v1.Resource; +import io.opentelemetry.proto.trace.v1.InstrumentationLibrarySpans; +import io.opentelemetry.proto.trace.v1.ResourceSpans; +import io.opentelemetry.proto.trace.v1.Span; +import io.opentelemetry.proto.trace.v1.Span.SpanKind; +import io.opentelemetry.proto.trace.v1.Status; +import io.opentelemetry.proto.trace.v1.Status.StatusCode; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; +import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.span.export.ExportSpanConstants.SpanAttributes; +import org.hypertrace.core.graphql.span.export.ExportSpanConstants.SpanTagsKey; + +@lombok.Value +@Accessors(fluent = true) +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) +public class ExportSpan { + + private final ResourceSpans resourceSpans; + + public static class Builder { + + private final org.hypertrace.core.graphql.span.schema.Span span; + + public Builder(org.hypertrace.core.graphql.span.schema.Span span) { + this.span = span; + } + + private void setResourceServiceName(Resource.Builder resourceBuilder) { + if (span.attribute(SpanAttributes.SERVICE_NAME) != null) { + String serviceName = span.attribute(SpanAttributes.SERVICE_NAME).toString(); + KeyValue keyValue = + KeyValue.newBuilder() + .setKey(SERVICE_NAME_KEY) + .setValue(AnyValue.newBuilder().setStringValue(serviceName).build()) + .build(); + resourceBuilder.addAttributes(keyValue); + } + } + + private void setBytesFields(Span.Builder spanBuilder) { + byte[] spanIdBytes = BaseEncoding.base64().decode(span.id()); + spanBuilder.setSpanId(ByteString.copyFrom(spanIdBytes)); + + String traceId = span.attribute(SpanAttributes.TRACE_ID).toString(); + byte[] traceIdBytes = BaseEncoding.base64().decode(traceId); + spanBuilder.setTraceId(ByteString.copyFrom(traceIdBytes)); + + byte[] parentSpanIdBytes = BaseEncoding.base64().decode(""); + if (span.attribute(SpanAttributes.PARENT_SPAN_ID) != null) { + parentSpanIdBytes = + BaseEncoding.base64().decode(span.attribute(SpanAttributes.PARENT_SPAN_ID).toString()); + } + spanBuilder.setParentSpanId(ByteString.copyFrom(parentSpanIdBytes)); + } + + private void setTimeFields(Span.Builder spanBuilder) { + long startTime = Long.parseLong(span.attribute(SpanAttributes.START_TIME).toString()); + spanBuilder.setStartTimeUnixNano( + TimeUnit.NANOSECONDS.convert(startTime, TimeUnit.MILLISECONDS)); + + long endTime = Long.parseLong(span.attribute(SpanAttributes.END_TIME).toString()); + spanBuilder.setEndTimeUnixNano(TimeUnit.NANOSECONDS.convert(endTime, TimeUnit.MILLISECONDS)); + } + + private void setName(Span.Builder spanBuilder) { + if (span.attribute(SpanAttributes.NAME) != null) { + spanBuilder.setName(span.attribute(SpanAttributes.NAME).toString()); + } + } + + private static void setAttributes(Span.Builder spanBuilder, Map tags) { + List attributes = + tags.entrySet().stream() + .filter(e -> !SpanTagsKey.getExcludeKeys().contains(e.getKey())) + .map( + e -> + KeyValue.newBuilder() + .setKey(e.getKey()) + .setValue(AnyValue.newBuilder().setStringValue(e.getValue()).build()) + .build()) + .collect(Collectors.toList()); + spanBuilder.addAllAttributes(attributes); + } + + private static void setStatusCode(Span.Builder spanBuilder, Map tags) { + int statusCode = + SpanTagsKey.getStatusCodeKeys().stream() + .filter(e -> tags.containsKey(e)) + .map(e -> Integer.parseInt(tags.get(e))) + .findFirst() + .orElse(0); + spanBuilder.setStatus(Status.newBuilder().setCode(StatusCode.forNumber(statusCode)).build()); + } + + private static void setSpanKind(Span.Builder spanBuilder, Map tags) { + String spanKind = tags.get(SPAN_KIND); + if (spanKind != null) { + spanBuilder.setKind( + SpanKind.valueOf(String.join("_", "SPAN_KIND", spanKind.toUpperCase()))); + } else { + spanBuilder.setKind(SpanKind.SPAN_KIND_UNSPECIFIED); + } + } + + public ExportSpan build() { + + ResourceSpans.Builder resourceSpansBuilder = ResourceSpans.newBuilder(); + Resource.Builder resourceBuilder = Resource.newBuilder(); + InstrumentationLibrarySpans.Builder instrumentationLibrarySpansBuilder = + InstrumentationLibrarySpans.newBuilder(); + Span.Builder spanBuilder = Span.newBuilder(); + + setResourceServiceName(resourceBuilder); + setBytesFields(spanBuilder); + setTimeFields(spanBuilder); + setName(spanBuilder); + + Map tags = + span.attribute(SpanAttributes.TAGS) != null + ? (Map) span.attribute(SpanAttributes.TAGS) + : Map.of(); + setStatusCode(spanBuilder, tags); + setSpanKind(spanBuilder, tags); + setAttributes(spanBuilder, tags); + + resourceSpansBuilder.setResource(resourceBuilder.build()); + instrumentationLibrarySpansBuilder.addSpans(spanBuilder.build()); + resourceSpansBuilder.addInstrumentationLibrarySpans( + instrumentationLibrarySpansBuilder.build()); + + return new ExportSpan(resourceSpansBuilder.build()); + } + } +} diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/export/ExportSpanConstants.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/export/ExportSpanConstants.java new file mode 100644 index 00000000..c26fae85 --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/export/ExportSpanConstants.java @@ -0,0 +1,43 @@ +package org.hypertrace.core.graphql.span.export; + +import java.util.List; + +public interface ExportSpanConstants { + interface SpanAttributes { + String ID = "id"; + String SERVICE_NAME = "serviceName"; + String TRACE_ID = "traceId"; + String PARENT_SPAN_ID = "parentSpanId"; + String START_TIME = "startTime"; + String END_TIME = "endTime"; + String NAME = "displaySpanName"; + String TAGS = "spanTags"; + + static List getSpanAttributes() { + return List.of( + SpanAttributes.ID, + SpanAttributes.SERVICE_NAME, + SpanAttributes.TRACE_ID, + SpanAttributes.PARENT_SPAN_ID, + SpanAttributes.START_TIME, + SpanAttributes.END_TIME, + SpanAttributes.NAME, + SpanAttributes.TAGS); + } + } + + interface SpanTagsKey { + String SERVICE_NAME_KEY = "service.name"; + String SPAN_KIND = "span.kind"; + String STATUS_CODE = "status.code"; + String ERROR = "error"; + + static List getExcludeKeys() { + return List.of(SPAN_KIND, STATUS_CODE, ERROR); + } + + static List getStatusCodeKeys() { + return List.of(STATUS_CODE, ERROR); + } + } +} diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/export/ExportSpanConverter.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/export/ExportSpanConverter.java new file mode 100644 index 00000000..9e6f73e7 --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/export/ExportSpanConverter.java @@ -0,0 +1,49 @@ +package org.hypertrace.core.graphql.span.export; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.google.protobuf.Message; +import com.google.protobuf.util.JsonFormat; +import io.opentelemetry.proto.trace.v1.ResourceSpans; +import java.io.IOException; +import java.util.List; +import java.util.stream.Collectors; +import lombok.experimental.Accessors; +import org.apache.commons.text.StringEscapeUtils; + +@lombok.Value +@Accessors(fluent = true) +public class ExportSpanConverter { + + private static final ObjectMapper OBJECT_MAPPER = + new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + + private static class MessageSerializer extends JsonSerializer { + private static final JsonFormat.Printer PRINTER = + JsonFormat.printer().omittingInsignificantWhitespace(); + + @Override + public void serialize(Message message, JsonGenerator generator, SerializerProvider serializers) + throws IOException { + generator.writeRawValue(PRINTER.print(message)); + } + } + + @JsonSerialize(contentUsing = MessageSerializer.class) + List resourceSpans; + + private String toJson() throws JsonProcessingException { + return StringEscapeUtils.unescapeJson(OBJECT_MAPPER.writeValueAsString(this)); + } + + public static String toJson(List exportSpans) throws JsonProcessingException { + List spans = + exportSpans.stream().map(s -> s.resourceSpans()).collect(Collectors.toList()); + return new ExportSpanConverter(spans).toJson(); + } +} diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/fetcher/ExportSpanFetcher.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/fetcher/ExportSpanFetcher.java new file mode 100644 index 00000000..c95c018e --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/fetcher/ExportSpanFetcher.java @@ -0,0 +1,46 @@ +package org.hypertrace.core.graphql.span.fetcher; + +import graphql.schema.DataFetcher; +import graphql.schema.DataFetchingEnvironment; +import io.reactivex.rxjava3.core.Single; +import java.util.List; +import java.util.concurrent.CompletableFuture; +import javax.inject.Inject; +import org.hypertrace.core.graphql.common.fetcher.InjectableDataFetcher; +import org.hypertrace.core.graphql.span.dao.ExportSpanDao; +import org.hypertrace.core.graphql.span.export.ExportSpanConstants.SpanAttributes; +import org.hypertrace.core.graphql.span.request.SpanRequest; +import org.hypertrace.core.graphql.span.request.SpanRequestBuilder; +import org.hypertrace.core.graphql.span.schema.ExportSpanResult; + +public class ExportSpanFetcher extends InjectableDataFetcher { + + public ExportSpanFetcher() { + super(ExportSpanFetcherImpl.class); + } + + static final class ExportSpanFetcherImpl + implements DataFetcher> { + private final SpanRequestBuilder requestBuilder; + private final ExportSpanDao exportSpanDao; + + @Inject + ExportSpanFetcherImpl(SpanRequestBuilder requestBuilder, ExportSpanDao exportSpanDao) { + this.requestBuilder = requestBuilder; + this.exportSpanDao = exportSpanDao; + } + + @Override + public CompletableFuture get(DataFetchingEnvironment environment) { + Single spanRequest = + this.requestBuilder.build( + environment.getContext(), environment.getArguments(), + SpanAttributes.getSpanAttributes(), List.of()); + + return spanRequest + .flatMap(this.exportSpanDao::getSpans) + .toCompletionStage() + .toCompletableFuture(); + } + } +} diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/fetcher/SpanFetcher.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/fetcher/SpanFetcher.java index f7b9cd2b..6bfbf4f8 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/fetcher/SpanFetcher.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/fetcher/SpanFetcher.java @@ -4,7 +4,6 @@ import graphql.schema.DataFetchingEnvironment; import java.util.concurrent.CompletableFuture; import javax.inject.Inject; -import org.hypertrace.core.graphql.atttributes.scopes.HypertraceCoreAttributeScopeString; import org.hypertrace.core.graphql.common.fetcher.InjectableDataFetcher; import org.hypertrace.core.graphql.span.dao.SpanDao; import org.hypertrace.core.graphql.span.request.SpanRequestBuilder; @@ -30,10 +29,7 @@ static final class SpanFetcherImpl implements DataFetcher get(DataFetchingEnvironment environment) { return this.requestBuilder .build( - environment.getContext(), - HypertraceCoreAttributeScopeString.SPAN, - environment.getArguments(), - environment.getSelectionSet()) + environment.getContext(), environment.getArguments(), environment.getSelectionSet()) .flatMap(this.spanDao::getSpans) .toCompletionStage() .toCompletableFuture(); diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/DefaultSpanRequestBuilder.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/DefaultSpanRequestBuilder.java index 06869569..1f1b8fc2 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/DefaultSpanRequestBuilder.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/DefaultSpanRequestBuilder.java @@ -5,10 +5,12 @@ import graphql.schema.DataFetchingFieldSelectionSet; import io.reactivex.rxjava3.core.Single; import java.util.Collection; +import java.util.List; import java.util.Map; import javax.inject.Inject; import lombok.Value; import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.atttributes.scopes.HypertraceCoreAttributeScopeString; import org.hypertrace.core.graphql.common.request.AttributeRequest; import org.hypertrace.core.graphql.common.request.ResultSetRequest; import org.hypertrace.core.graphql.common.request.ResultSetRequestBuilder; @@ -31,16 +33,32 @@ public DefaultSpanRequestBuilder( @Override public Single build( GraphQlRequestContext context, - String requestScope, Map arguments, DataFetchingFieldSelectionSet selectionSet) { return zip( - resultSetRequestBuilder.build( - context, requestScope, arguments, selectionSet, OrderArgument.class), - logEventAttributeRequestBuilder.buildAttributeRequest(context, selectionSet), - (resultSetRequest, logEventAttributeRequest) -> - Single.just(new DefaultSpanRequest(resultSetRequest, logEventAttributeRequest))) - .flatMap(single -> single); + resultSetRequestBuilder.build( + context, + HypertraceCoreAttributeScopeString.SPAN, + arguments, + selectionSet, + OrderArgument.class), + logEventAttributeRequestBuilder.buildAttributeRequest(context, selectionSet), + (resultSetRequest, logEventAttributeRequest) -> + new DefaultSpanRequest(resultSetRequest, logEventAttributeRequest)); + } + + @Override + public Single build( + GraphQlRequestContext context, + Map arguments, + List spanAttributes, + List logAttributes) { + return zip( + resultSetRequestBuilder.build( + context, HypertraceCoreAttributeScopeString.SPAN, arguments, spanAttributes), + logEventAttributeRequestBuilder.buildAttributeRequest(context, logAttributes), + (resultSetRequest, logEventAttributeRequest) -> + new DefaultSpanRequest(resultSetRequest, logEventAttributeRequest)); } @Value diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/LogEventAttributeRequestBuilder.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/LogEventAttributeRequestBuilder.java index 3e311fc3..d43a5ad5 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/LogEventAttributeRequestBuilder.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/LogEventAttributeRequestBuilder.java @@ -5,6 +5,7 @@ import graphql.schema.DataFetchingFieldSelectionSet; import graphql.schema.SelectedField; +import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.Single; import java.util.List; import java.util.Set; @@ -40,6 +41,17 @@ Single> buildAttributeRequest( .collect(Collectors.toUnmodifiableSet()); } + Single> buildAttributeRequest( + GraphQlRequestContext context, List attributes) { + return Observable.fromIterable(attributes) + .distinct() + .flatMapSingle( + attributeKey -> + this.attributeRequestBuilder.buildForKey( + context, HypertraceCoreAttributeScopeString.LOG_EVENT, attributeKey)) + .collect(Collectors.toUnmodifiableSet()); + } + private Stream getLogEventSelectionFields( DataFetchingFieldSelectionSet selectionSet) { return this.selectionFinder.findSelections( diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/SpanRequestBuilder.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/SpanRequestBuilder.java index c3e62eac..64cf189b 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/SpanRequestBuilder.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/SpanRequestBuilder.java @@ -2,6 +2,7 @@ import graphql.schema.DataFetchingFieldSelectionSet; import io.reactivex.rxjava3.core.Single; +import java.util.List; import java.util.Map; import org.hypertrace.core.graphql.context.GraphQlRequestContext; @@ -9,7 +10,12 @@ public interface SpanRequestBuilder { Single build( GraphQlRequestContext context, - String requestScope, Map arguments, DataFetchingFieldSelectionSet selectionSet); + + Single build( + GraphQlRequestContext context, + Map arguments, + List spanAttributes, + List logAttributes); } diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/schema/ExportSpanResult.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/schema/ExportSpanResult.java new file mode 100644 index 00000000..1d17d272 --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/schema/ExportSpanResult.java @@ -0,0 +1,16 @@ +package org.hypertrace.core.graphql.span.schema; + +import graphql.annotations.annotationTypes.GraphQLField; +import graphql.annotations.annotationTypes.GraphQLName; +import graphql.annotations.annotationTypes.GraphQLNonNull; + +@GraphQLName(ExportSpanResult.TYPE_NAME) +public interface ExportSpanResult { + String TYPE_NAME = "ExportSpanResult"; + String RESULTS_NAME = "result"; + + @GraphQLField + @GraphQLNonNull + @GraphQLName(RESULTS_NAME) + String result(); +} diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/schema/SpanSchema.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/schema/SpanSchema.java index e7441355..49693ea6 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/schema/SpanSchema.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/schema/SpanSchema.java @@ -11,10 +11,12 @@ import org.hypertrace.core.graphql.common.schema.results.arguments.page.LimitArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.page.OffsetArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.space.SpaceArgument; +import org.hypertrace.core.graphql.span.fetcher.ExportSpanFetcher; import org.hypertrace.core.graphql.span.fetcher.SpanFetcher; public interface SpanSchema { String SPANS_QUERY_NAME = "spans"; + String EXPORT_SPANS_QUERY_NAME = "exportSpans"; @GraphQLField @GraphQLNonNull @@ -27,4 +29,13 @@ SpanResultSet spans( @GraphQLName(LimitArgument.ARGUMENT_NAME) int limit, @GraphQLName(OffsetArgument.ARGUMENT_NAME) int offset, @GraphQLName(SpaceArgument.ARGUMENT_NAME) String space); + + @GraphQLField + @GraphQLNonNull + @GraphQLName(EXPORT_SPANS_QUERY_NAME) + @GraphQLDataFetcher(ExportSpanFetcher.class) + ExportSpanResult exportSpans( + @GraphQLName(TimeRangeArgument.ARGUMENT_NAME) @GraphQLNonNull TimeRangeArgument between, + @GraphQLName(FilterArgument.ARGUMENT_NAME) List filterBy, + @GraphQLName(LimitArgument.ARGUMENT_NAME) int limit); } diff --git a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/export/ExportSpanTest.java b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/export/ExportSpanTest.java new file mode 100644 index 00000000..2f247309 --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/export/ExportSpanTest.java @@ -0,0 +1,198 @@ +package org.hypertrace.core.graphql.span.export; + +import com.google.common.io.BaseEncoding; +import com.google.protobuf.ByteString; +import io.opentelemetry.proto.trace.v1.Span.SpanKind; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.log.event.schema.LogEvent; +import org.hypertrace.core.graphql.log.event.schema.LogEventResultSet; +import org.hypertrace.core.graphql.span.export.ExportSpan.Builder; +import org.hypertrace.core.graphql.span.export.ExportSpanConstants.SpanAttributes; +import org.hypertrace.core.graphql.span.schema.Span; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class ExportSpanTest { + + @lombok.Value + @Accessors(fluent = true) + static class ConvertedSpan implements Span { + String id; + Map attributeValues; + Map> spanIdToLogEvents; + + @Override + public Object attribute(String key) { + return this.attributeValues.get(key); + } + + @Override + public LogEventResultSet logEvents() { + List list = spanIdToLogEvents.getOrDefault(id, Collections.emptyList()); + return new ConvertedLogEventResultSet(list, list.size(), list.size()); + } + } + + @lombok.Value + @Accessors(fluent = true) + static class ConvertedLogEventResultSet implements LogEventResultSet { + List results; + long total; + long count; + } + + @Test + public void testIncludeAllFields() { + Span span = + new ConvertedSpan( + "40c4edcea5a17fea", + Map.of( + SpanAttributes.ID, "40c4edcea5a17fea", + SpanAttributes.PARENT_SPAN_ID, "4dfeb104f6ed73bf", + SpanAttributes.TRACE_ID, "00000000000000004dfeb104f6ed73bf", + SpanAttributes.SERVICE_NAME, "frontend", + SpanAttributes.NAME, "HTTP GET: /customer", + SpanAttributes.START_TIME, 1620743557759L, + SpanAttributes.END_TIME, 1620743558040L, + SpanAttributes.TAGS, + Map.of( + "http.status_code", "200", + "component", "net/http", + "span.kind", "server", + "sampler.type", "const", + "sampler.param", "true", + "http.url", "/dispatch?customer=123&nonse=0.04728538603377741", + "servicename", "frontend", + "http.method", "GET", + "status.code", "0")), + Map.of()); + + ExportSpan exportSpan = new Builder(span).build(); + + // check resource + Assertions.assertEquals(1, exportSpan.resourceSpans().getResource().getAttributesCount()); + + Assertions.assertEquals( + "service.name", exportSpan.resourceSpans().getResource().getAttributes(0).getKey()); + Assertions.assertEquals( + "frontend", + exportSpan.resourceSpans().getResource().getAttributes(0).getValue().getStringValue()); + + // check for span count, start time, end time + Assertions.assertEquals(1, exportSpan.resourceSpans().getInstrumentationLibrarySpansCount()); + + Assertions.assertEquals( + 1620743557759L * 1_000_000L, + exportSpan + .resourceSpans() + .getInstrumentationLibrarySpans(0) + .getSpans(0) + .getStartTimeUnixNano()); + + Assertions.assertEquals( + 1620743558040L * 1_000_000L, + exportSpan + .resourceSpans() + .getInstrumentationLibrarySpans(0) + .getSpans(0) + .getEndTimeUnixNano()); + + // two attributes are excluded + Assertions.assertEquals( + 7, + exportSpan + .resourceSpans() + .getInstrumentationLibrarySpans(0) + .getSpans(0) + .getAttributesCount()); + + // test for span.kind + Assertions.assertEquals( + SpanKind.SPAN_KIND_SERVER, + exportSpan.resourceSpans().getInstrumentationLibrarySpans(0).getSpans(0).getKind()); + + // test IDs + Assertions.assertEquals( + ByteString.copyFrom(BaseEncoding.base64().decode("40c4edcea5a17fea")), + exportSpan.resourceSpans().getInstrumentationLibrarySpans(0).getSpans(0).getSpanId()); + + Assertions.assertEquals( + ByteString.copyFrom(BaseEncoding.base64().decode("4dfeb104f6ed73bf")), + exportSpan.resourceSpans().getInstrumentationLibrarySpans(0).getSpans(0).getParentSpanId()); + + Assertions.assertEquals( + ByteString.copyFrom(BaseEncoding.base64().decode("00000000000000004dfeb104f6ed73bf")), + exportSpan.resourceSpans().getInstrumentationLibrarySpans(0).getSpans(0).getTraceId()); + } + + @Test + public void testWithMissingFields() { + Span span = + new ConvertedSpan( + "40c4edcea5a17fea", + Map.of( + SpanAttributes.ID, + "40c4edcea5a17fea", + SpanAttributes.TRACE_ID, + "00000000000000004dfeb104f6ed73bf", + SpanAttributes.START_TIME, + 1620743557759L, + SpanAttributes.END_TIME, + 1620743558040L), + Map.of()); + + ExportSpan exportSpan = new Builder(span).build(); + + // check resource + Assertions.assertEquals(0, exportSpan.resourceSpans().getResource().getAttributesCount()); + + // check for span count, start time, end time + Assertions.assertEquals(1, exportSpan.resourceSpans().getInstrumentationLibrarySpansCount()); + + Assertions.assertEquals( + 1620743557759L * 1_000_000L, + exportSpan + .resourceSpans() + .getInstrumentationLibrarySpans(0) + .getSpans(0) + .getStartTimeUnixNano()); + + Assertions.assertEquals( + 1620743558040L * 1_000_000L, + exportSpan + .resourceSpans() + .getInstrumentationLibrarySpans(0) + .getSpans(0) + .getEndTimeUnixNano()); + + // two attributes are excluded + Assertions.assertEquals( + 0, + exportSpan + .resourceSpans() + .getInstrumentationLibrarySpans(0) + .getSpans(0) + .getAttributesCount()); + + // test for span.kind + Assertions.assertEquals( + SpanKind.SPAN_KIND_UNSPECIFIED, + exportSpan.resourceSpans().getInstrumentationLibrarySpans(0).getSpans(0).getKind()); + + // test IDs + Assertions.assertEquals( + ByteString.copyFrom(BaseEncoding.base64().decode("40c4edcea5a17fea")), + exportSpan.resourceSpans().getInstrumentationLibrarySpans(0).getSpans(0).getSpanId()); + + Assertions.assertEquals( + ByteString.copyFrom(BaseEncoding.base64().decode("")), + exportSpan.resourceSpans().getInstrumentationLibrarySpans(0).getSpans(0).getParentSpanId()); + + Assertions.assertEquals( + ByteString.copyFrom(BaseEncoding.base64().decode("00000000000000004dfeb104f6ed73bf")), + exportSpan.resourceSpans().getInstrumentationLibrarySpans(0).getSpans(0).getTraceId()); + } +} From ed010c8a2dc8322f791e2075a94ef3ceb57d0030 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Mon, 17 May 2021 10:08:20 -0700 Subject: [PATCH 063/173] refactor: add a simple context request to simplify queries (#63) --- .../common/request/CommonRequestModule.java | 1 + .../common/request/ContextualRequest.java | 7 +++++++ .../request/ContextualRequestBuilder.java | 7 +++++++ .../common/request/ResultSetRequest.java | 4 +--- .../SimpleContextualRequestBuilder.java | 19 +++++++++++++++++++ .../log/event/request/LogEventRequest.java | 6 ++---- .../graphql/trace/request/TraceRequest.java | 6 ++---- 7 files changed, 39 insertions(+), 11 deletions(-) create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ContextualRequest.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ContextualRequestBuilder.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/SimpleContextualRequestBuilder.java diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/CommonRequestModule.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/CommonRequestModule.java index f4614fa5..6093584e 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/CommonRequestModule.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/CommonRequestModule.java @@ -14,6 +14,7 @@ protected void configure() { bind(ResultSetRequestBuilder.class).to(DefaultResultSetRequestBuilder.class); bind(AttributeRequestBuilder.class).to(DefaultAttributeRequestBuilder.class); bind(FilterRequestBuilder.class).to(DefaultFilterRequestBuilder.class); + bind(ContextualRequestBuilder.class).to(SimpleContextualRequestBuilder.class); requireBinding(AttributeStore.class); requireBinding(ArgumentDeserializer.class); requireBinding(AttributeAssociator.class); diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ContextualRequest.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ContextualRequest.java new file mode 100644 index 00000000..d3c0eec4 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ContextualRequest.java @@ -0,0 +1,7 @@ +package org.hypertrace.core.graphql.common.request; + +import org.hypertrace.core.graphql.context.GraphQlRequestContext; + +public interface ContextualRequest { + GraphQlRequestContext context(); +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ContextualRequestBuilder.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ContextualRequestBuilder.java new file mode 100644 index 00000000..3ac131bf --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ContextualRequestBuilder.java @@ -0,0 +1,7 @@ +package org.hypertrace.core.graphql.common.request; + +import org.hypertrace.core.graphql.context.GraphQlRequestContext; + +public interface ContextualRequestBuilder { + ContextualRequest build(GraphQlRequestContext context); +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequest.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequest.java index 1130b076..46418045 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequest.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequest.java @@ -6,10 +6,8 @@ import org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; -import org.hypertrace.core.graphql.context.GraphQlRequestContext; -public interface ResultSetRequest { - GraphQlRequestContext context(); +public interface ResultSetRequest extends ContextualRequest { // All attributes to fetch, including ID Collection attributes(); diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/SimpleContextualRequestBuilder.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/SimpleContextualRequestBuilder.java new file mode 100644 index 00000000..8fc488b1 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/SimpleContextualRequestBuilder.java @@ -0,0 +1,19 @@ +package org.hypertrace.core.graphql.common.request; + +import lombok.Value; +import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; + +class SimpleContextualRequestBuilder implements ContextualRequestBuilder { + + @Override + public ContextualRequest build(GraphQlRequestContext context) { + return new SimpleContextualRequest(context); + } + + @Value + @Accessors(fluent = true) + private static class SimpleContextualRequest implements ContextualRequest { + GraphQlRequestContext context; + } +} diff --git a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/LogEventRequest.java b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/LogEventRequest.java index e812cf68..23147542 100644 --- a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/LogEventRequest.java +++ b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/LogEventRequest.java @@ -4,14 +4,12 @@ import java.util.List; import org.hypertrace.core.graphql.common.request.AttributeAssociation; import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.request.ContextualRequest; import org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; -import org.hypertrace.core.graphql.context.GraphQlRequestContext; - -public interface LogEventRequest { - GraphQlRequestContext context(); +public interface LogEventRequest extends ContextualRequest { // All attributes to fetch Collection attributes(); diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/TraceRequest.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/TraceRequest.java index 304db1b8..05c169bb 100644 --- a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/TraceRequest.java +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/TraceRequest.java @@ -1,13 +1,11 @@ package org.hypertrace.core.graphql.trace.request; +import org.hypertrace.core.graphql.common.request.ContextualRequest; import org.hypertrace.core.graphql.common.request.ResultSetRequest; import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; -import org.hypertrace.core.graphql.context.GraphQlRequestContext; import org.hypertrace.core.graphql.trace.schema.arguments.TraceType; -public interface TraceRequest { - GraphQlRequestContext context(); - +public interface TraceRequest extends ContextualRequest { ResultSetRequest resultSetRequest(); TraceType traceType(); From 87e678e63c2116d79e79ece5771ebf1a8acd9e8c Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Tue, 25 May 2021 11:41:23 -0700 Subject: [PATCH 064/173] feat: add support for optional tyoe usage in schema (#65) --- hypertrace-core-graphql-deserialization/build.gradle.kts | 1 + .../graphql/deserialization/DefaultArgumentDeserializer.java | 4 +++- hypertrace-core-graphql-platform/build.gradle.kts | 5 +++-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/hypertrace-core-graphql-deserialization/build.gradle.kts b/hypertrace-core-graphql-deserialization/build.gradle.kts index 2165b50c..07490a4b 100644 --- a/hypertrace-core-graphql-deserialization/build.gradle.kts +++ b/hypertrace-core-graphql-deserialization/build.gradle.kts @@ -13,6 +13,7 @@ dependencies { compileOnly("org.projectlombok:lombok") implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310") + implementation("com.fasterxml.jackson.datatype:jackson-datatype-jdk8") implementation("org.slf4j:slf4j-api") testImplementation("org.junit.jupiter:junit-jupiter") diff --git a/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/DefaultArgumentDeserializer.java b/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/DefaultArgumentDeserializer.java index 611b38d1..4377a76c 100644 --- a/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/DefaultArgumentDeserializer.java +++ b/hypertrace-core-graphql-deserialization/src/main/java/org/hypertrace/core/graphql/deserialization/DefaultArgumentDeserializer.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.databind.Module; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.json.JsonMapper; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import java.util.Collection; import java.util.List; @@ -20,7 +21,8 @@ class DefaultArgumentDeserializer implements ArgumentDeserializer { - private static final List defaultModules = List.of(new JavaTimeModule()); + private static final List defaultModules = + List.of(new JavaTimeModule(), new Jdk8Module()); private static final Logger LOG = LoggerFactory.getLogger(DefaultArgumentDeserializer.class); private final ObjectMapper objectMapper; diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 600cf953..deb69c0e 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -26,8 +26,9 @@ dependencies { api("io.grpc:grpc-core:1.36.0") api("io.grpc:grpc-stub:1.36.0") api("io.grpc:grpc-context:1.36.0") - api("com.fasterxml.jackson.core:jackson-databind:2.12.1") - api("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.1") + api("com.fasterxml.jackson.core:jackson-databind:2.12.3") + api("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.3") + api("com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.12.3") api("org.apache.commons:commons-text:1.9") api("io.opentelemetry:opentelemetry-proto:1.1.0-alpha") From fdd2e96a775df387d34b5d9a2f9db50b1d44efac Mon Sep 17 00:00:00 2001 From: kotharironak <53209990+kotharironak@users.noreply.github.com> Date: Wed, 26 May 2021 18:40:59 +0530 Subject: [PATCH 065/173] feat: enhance export api with log event data (#64) * feat: enhance export api with log event data * chore: address spotless issue --- .../core/graphql/span/export/ExportSpan.java | 43 ++++++++- .../span/export/ExportSpanConstants.java | 36 ++++---- .../span/fetcher/ExportSpanFetcher.java | 8 +- .../graphql/span/export/ExportSpanTest.java | 90 +++++++++++++++++++ 4 files changed, 155 insertions(+), 22 deletions(-) diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/export/ExportSpan.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/export/ExportSpan.java index 6d7bb97a..5d83537e 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/export/ExportSpan.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/export/ExportSpan.java @@ -11,9 +11,12 @@ import io.opentelemetry.proto.trace.v1.InstrumentationLibrarySpans; import io.opentelemetry.proto.trace.v1.ResourceSpans; import io.opentelemetry.proto.trace.v1.Span; +import io.opentelemetry.proto.trace.v1.Span.Event; import io.opentelemetry.proto.trace.v1.Span.SpanKind; import io.opentelemetry.proto.trace.v1.Status; import io.opentelemetry.proto.trace.v1.Status.StatusCode; +import java.time.Duration; +import java.time.Instant; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -21,6 +24,8 @@ import lombok.AccessLevel; import lombok.RequiredArgsConstructor; import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.log.event.schema.LogEvent; +import org.hypertrace.core.graphql.span.export.ExportSpanConstants.LogEventAttributes; import org.hypertrace.core.graphql.span.export.ExportSpanConstants.SpanAttributes; import org.hypertrace.core.graphql.span.export.ExportSpanConstants.SpanTagsKey; @@ -85,7 +90,7 @@ private void setName(Span.Builder spanBuilder) { private static void setAttributes(Span.Builder spanBuilder, Map tags) { List attributes = tags.entrySet().stream() - .filter(e -> !SpanTagsKey.getExcludeKeys().contains(e.getKey())) + .filter(e -> !SpanTagsKey.EXCLUDE_KEYS.contains(e.getKey())) .map( e -> KeyValue.newBuilder() @@ -98,7 +103,7 @@ private static void setAttributes(Span.Builder spanBuilder, Map private static void setStatusCode(Span.Builder spanBuilder, Map tags) { int statusCode = - SpanTagsKey.getStatusCodeKeys().stream() + SpanTagsKey.STATUS_CODE_KEYS.stream() .filter(e -> tags.containsKey(e)) .map(e -> Integer.parseInt(tags.get(e))) .findFirst() @@ -116,6 +121,38 @@ private static void setSpanKind(Span.Builder spanBuilder, Map ta } } + private static void setLogEvent(Span.Builder spanBuilder, List logEvents) { + logEvents.stream() + .forEach( + logEvent -> { + Span.Event.Builder eventBuilder = Event.newBuilder(); + long timeNanos = + Duration.between( + Instant.EPOCH, + Instant.parse( + logEvent.attribute(LogEventAttributes.TIMESTAMP).toString())) + .toNanos(); + eventBuilder.setTimeUnixNano(timeNanos); + + Map logEventAttributes = + logEvent.attribute(LogEventAttributes.ATTRIBUTES) != null + ? (Map) logEvent.attribute(LogEventAttributes.ATTRIBUTES) + : Map.of(); + List attributes = + logEventAttributes.entrySet().stream() + .map( + e -> + KeyValue.newBuilder() + .setKey(e.getKey()) + .setValue( + AnyValue.newBuilder().setStringValue(e.getValue()).build()) + .build()) + .collect(Collectors.toList()); + eventBuilder.addAllAttributes(attributes); + spanBuilder.addEvents(eventBuilder.build()); + }); + } + public ExportSpan build() { ResourceSpans.Builder resourceSpansBuilder = ResourceSpans.newBuilder(); @@ -137,6 +174,8 @@ public ExportSpan build() { setSpanKind(spanBuilder, tags); setAttributes(spanBuilder, tags); + setLogEvent(spanBuilder, span.logEvents().results()); + resourceSpansBuilder.setResource(resourceBuilder.build()); instrumentationLibrarySpansBuilder.addSpans(spanBuilder.build()); resourceSpansBuilder.addInstrumentationLibrarySpans( diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/export/ExportSpanConstants.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/export/ExportSpanConstants.java index c26fae85..36c8658d 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/export/ExportSpanConstants.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/export/ExportSpanConstants.java @@ -13,17 +13,16 @@ interface SpanAttributes { String NAME = "displaySpanName"; String TAGS = "spanTags"; - static List getSpanAttributes() { - return List.of( - SpanAttributes.ID, - SpanAttributes.SERVICE_NAME, - SpanAttributes.TRACE_ID, - SpanAttributes.PARENT_SPAN_ID, - SpanAttributes.START_TIME, - SpanAttributes.END_TIME, - SpanAttributes.NAME, - SpanAttributes.TAGS); - } + List SPAN_ATTRIBUTES = + List.of( + SpanAttributes.ID, + SpanAttributes.SERVICE_NAME, + SpanAttributes.TRACE_ID, + SpanAttributes.PARENT_SPAN_ID, + SpanAttributes.START_TIME, + SpanAttributes.END_TIME, + SpanAttributes.NAME, + SpanAttributes.TAGS); } interface SpanTagsKey { @@ -32,12 +31,15 @@ interface SpanTagsKey { String STATUS_CODE = "status.code"; String ERROR = "error"; - static List getExcludeKeys() { - return List.of(SPAN_KIND, STATUS_CODE, ERROR); - } + List EXCLUDE_KEYS = List.of(SPAN_KIND, STATUS_CODE, ERROR); + List STATUS_CODE_KEYS = List.of(STATUS_CODE, ERROR); + } + + interface LogEventAttributes { + String TIMESTAMP = "timestamp"; + String ATTRIBUTES = "attributes"; - static List getStatusCodeKeys() { - return List.of(STATUS_CODE, ERROR); - } + List LOG_EVENT_ATTRIBUTES = + List.of(LogEventAttributes.TIMESTAMP, LogEventAttributes.ATTRIBUTES); } } diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/fetcher/ExportSpanFetcher.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/fetcher/ExportSpanFetcher.java index c95c018e..96249b8e 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/fetcher/ExportSpanFetcher.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/fetcher/ExportSpanFetcher.java @@ -3,11 +3,11 @@ import graphql.schema.DataFetcher; import graphql.schema.DataFetchingEnvironment; import io.reactivex.rxjava3.core.Single; -import java.util.List; import java.util.concurrent.CompletableFuture; import javax.inject.Inject; import org.hypertrace.core.graphql.common.fetcher.InjectableDataFetcher; import org.hypertrace.core.graphql.span.dao.ExportSpanDao; +import org.hypertrace.core.graphql.span.export.ExportSpanConstants.LogEventAttributes; import org.hypertrace.core.graphql.span.export.ExportSpanConstants.SpanAttributes; import org.hypertrace.core.graphql.span.request.SpanRequest; import org.hypertrace.core.graphql.span.request.SpanRequestBuilder; @@ -34,8 +34,10 @@ static final class ExportSpanFetcherImpl public CompletableFuture get(DataFetchingEnvironment environment) { Single spanRequest = this.requestBuilder.build( - environment.getContext(), environment.getArguments(), - SpanAttributes.getSpanAttributes(), List.of()); + environment.getContext(), + environment.getArguments(), + SpanAttributes.SPAN_ATTRIBUTES, + LogEventAttributes.LOG_EVENT_ATTRIBUTES); return spanRequest .flatMap(this.exportSpanDao::getSpans) diff --git a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/export/ExportSpanTest.java b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/export/ExportSpanTest.java index 2f247309..981acdcc 100644 --- a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/export/ExportSpanTest.java +++ b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/export/ExportSpanTest.java @@ -10,6 +10,7 @@ import org.hypertrace.core.graphql.log.event.schema.LogEvent; import org.hypertrace.core.graphql.log.event.schema.LogEventResultSet; import org.hypertrace.core.graphql.span.export.ExportSpan.Builder; +import org.hypertrace.core.graphql.span.export.ExportSpanConstants.LogEventAttributes; import org.hypertrace.core.graphql.span.export.ExportSpanConstants.SpanAttributes; import org.hypertrace.core.graphql.span.schema.Span; import org.junit.jupiter.api.Assertions; @@ -44,6 +45,18 @@ static class ConvertedLogEventResultSet implements LogEventResultSet { long count; } + @lombok.Value + @Accessors(fluent = true) + static class ConvertedLogEvent implements org.hypertrace.core.graphql.log.event.schema.LogEvent { + + Map attributeValues; + + @Override + public Object attribute(String key) { + return this.attributeValues.get(key); + } + } + @Test public void testIncludeAllFields() { Span span = @@ -195,4 +208,81 @@ public void testWithMissingFields() { ByteString.copyFrom(BaseEncoding.base64().decode("00000000000000004dfeb104f6ed73bf")), exportSpan.resourceSpans().getInstrumentationLibrarySpans(0).getSpans(0).getTraceId()); } + + @Test + public void testForLogEventsFields() { + List logEventsUnderTestSpanId = + List.of( + new ConvertedLogEvent( + Map.of( + LogEventAttributes.TIMESTAMP, + "2021-05-25T16:26:00.310958Z", + LogEventAttributes.ATTRIBUTES, + Map.of("level", "warn", "message", "redis timeout")))); + + List logEvents = + List.of( + new ConvertedLogEvent( + Map.of( + LogEventAttributes.TIMESTAMP, + "2021-05-25T14:57:57.187Z", + LogEventAttributes.ATTRIBUTES, + Map.of("level", "info", "message", "request successful")))); + + Span span = + new ConvertedSpan( + "40c4edcea5a17fea", + Map.of( + SpanAttributes.ID, + "40c4edcea5a17fea", + SpanAttributes.PARENT_SPAN_ID, + "4dfeb104f6ed73bf", + SpanAttributes.TRACE_ID, + "00000000000000004dfeb104f6ed73bf", + SpanAttributes.START_TIME, + 1620743557759L, + SpanAttributes.END_TIME, + 1620743558040L), + Map.of( + "40c4edcea5a17fea", logEventsUnderTestSpanId, + "40c4edcea5a17feb", logEvents)); + + ExportSpan exportSpan = new Builder(span).build(); + + // check for logs + Assertions.assertEquals( + 1, + exportSpan.resourceSpans().getInstrumentationLibrarySpans(0).getSpans(0).getEventsCount()); + + Assertions.assertEquals( + 1621959960310958000L, + exportSpan + .resourceSpans() + .getInstrumentationLibrarySpans(0) + .getSpans(0) + .getEvents(0) + .getTimeUnixNano()); + + Assertions.assertEquals( + 2, + exportSpan + .resourceSpans() + .getInstrumentationLibrarySpans(0) + .getSpans(0) + .getEvents(0) + .getAttributesCount()); + + Assertions.assertTrue( + exportSpan + .resourceSpans() + .getInstrumentationLibrarySpans(0) + .getSpans(0) + .getEvents(0) + .getAttributesList() + .stream() + .anyMatch( + attribute -> + attribute.getKey().equals("level") + && attribute.getValue().getStringValue().equals("warn"))); + } } From ae052241a8d6f03ce615e89214fdd7a306a1bc55 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Tue, 15 Jun 2021 13:41:13 -0700 Subject: [PATCH 066/173] fix: apply limit on span log fetch (#66) * fix: apply limit on span log fetch * chore: upgrade jetty --- .../SelectionExpressionSetConverter.java | 5 +- .../build.gradle.kts | 6 +- .../span/dao/SpanLogEventRequestBuilder.java | 7 +- .../core/graphql/span/dao/DaoTestUtil.java | 4 +- .../dao/SpanLogEventRequestBuilderTest.java | 131 +++++++++--------- 5 files changed, 81 insertions(+), 72 deletions(-) diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/SelectionExpressionSetConverter.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/SelectionExpressionSetConverter.java index 45a8b61f..a85645f2 100644 --- a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/SelectionExpressionSetConverter.java +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/SelectionExpressionSetConverter.java @@ -1,10 +1,10 @@ package org.hypertrace.core.graphql.utils.gateway; +import com.google.common.collect.ImmutableSet; import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.Single; import java.util.Collection; import java.util.Set; -import java.util.stream.Collectors; import javax.inject.Inject; import org.hypertrace.core.graphql.common.request.AttributeRequest; import org.hypertrace.core.graphql.common.utils.Converter; @@ -25,7 +25,8 @@ class SelectionExpressionSetConverter public Single> convert(Collection attributeRequests) { return Observable.fromIterable(attributeRequests) .flatMapSingle(this::buildAliasedSelectionExpression) - .collect(Collectors.toUnmodifiableSet()); + .collectInto(ImmutableSet.builder(), ImmutableSet.Builder::add) + .map(ImmutableSet.Builder::build); } private Single buildAliasedSelectionExpression(AttributeRequest attributeRequest) { diff --git a/hypertrace-core-graphql-service/build.gradle.kts b/hypertrace-core-graphql-service/build.gradle.kts index 2f18eea4..cb223db8 100644 --- a/hypertrace-core-graphql-service/build.gradle.kts +++ b/hypertrace-core-graphql-service/build.gradle.kts @@ -12,9 +12,9 @@ dependencies { implementation("org.hypertrace.core.serviceframework:platform-service-framework:0.1.23") implementation("org.slf4j:slf4j-api") - implementation("org.eclipse.jetty:jetty-server:9.4.39.v20210325") - implementation("org.eclipse.jetty:jetty-servlet:9.4.39.v20210325") - implementation("org.eclipse.jetty:jetty-servlets:9.4.39.v20210325") + implementation("org.eclipse.jetty:jetty-server:9.4.42.v20210604") + implementation("org.eclipse.jetty:jetty-servlet:9.4.42.v20210604") + implementation("org.eclipse.jetty:jetty-servlets:9.4.42.v20210604") implementation("com.graphql-java-kickstart:graphql-java-servlet") implementation(project(":hypertrace-core-graphql-impl")) diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilder.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilder.java index 1e021e53..6f51c80e 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilder.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilder.java @@ -2,6 +2,7 @@ import static io.reactivex.rxjava3.core.Single.zip; +import com.google.common.collect.ImmutableSet; import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.Single; import java.util.Collection; @@ -29,6 +30,7 @@ import org.hypertrace.gateway.service.v1.span.SpansResponse; class SpanLogEventRequestBuilder { + private static final int LOG_EVENT_TOTAL_LIMIT = 1000; private final Converter, Set> attributeConverter; private final Converter>, Filter> filterConverter; @@ -63,6 +65,7 @@ Single buildLogEventsRequest( .setEndTimeMillis( gqlRequest.spanEventsRequest().timeRange().endTime().toEpochMilli()) .addAllSelection(selections) + .setLimit(LOG_EVENT_TOTAL_LIMIT) .setFilter(filter) .build()); } @@ -76,8 +79,8 @@ private Single> getRequestAttributes( HypertraceCoreAttributeScopeString.SPAN) .map(attributeRequestBuilder::buildForAttribute) .toObservable() - .mergeWith(Observable.fromIterable(logEventAttributes)) - .collect(Collectors.toSet()) + .concatWith(Observable.fromIterable(logEventAttributes)) + .collect(ImmutableSet.toImmutableSet()) .flatMap(attributeConverter::convert); } diff --git a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/DaoTestUtil.java b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/DaoTestUtil.java index cb626826..8503231f 100644 --- a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/DaoTestUtil.java +++ b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/DaoTestUtil.java @@ -81,7 +81,7 @@ static class DefaultSpanRequest implements SpanRequest { @Value @Accessors(fluent = true) - static class DefaultResultSetRequest implements ResultSetRequest { + static class DefaultResultSetRequest implements ResultSetRequest { GraphQlRequestContext context; Collection attributes; @@ -89,7 +89,7 @@ static class DefaultResultSetRequest implements ResultSetRequest { AttributeRequest idAttribute; int limit; int offset; - List orderArguments; + List> orderArguments; Collection> filterArguments; Optional spaceId; } diff --git a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilderTest.java b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilderTest.java index 105b7298..ed4e71b8 100644 --- a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilderTest.java +++ b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilderTest.java @@ -4,6 +4,8 @@ import static org.hypertrace.core.graphql.span.dao.DaoTestUtil.spanIdAttribute; import static org.hypertrace.core.graphql.span.dao.DaoTestUtil.spansResponse; import static org.hypertrace.core.graphql.span.dao.DaoTestUtil.traceIdAttribute; +import static org.hypertrace.gateway.service.v1.common.Operator.AND; +import static org.hypertrace.gateway.service.v1.common.Operator.IN; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyCollection; @@ -26,14 +28,12 @@ import java.util.List; import java.util.Optional; import java.util.Set; -import java.util.stream.Collectors; import org.hypertrace.core.graphql.attributes.AttributeModel; import org.hypertrace.core.graphql.attributes.AttributeStore; import org.hypertrace.core.graphql.common.request.AttributeAssociation; import org.hypertrace.core.graphql.common.request.AttributeRequest; import org.hypertrace.core.graphql.common.request.AttributeRequestBuilder; import org.hypertrace.core.graphql.common.request.FilterRequestBuilder; -import org.hypertrace.core.graphql.common.request.ResultSetRequest; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; import org.hypertrace.core.graphql.common.utils.Converter; import org.hypertrace.core.graphql.span.dao.DaoTestUtil.DefaultAttributeRequest; @@ -45,9 +45,12 @@ import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; import org.hypertrace.core.graphql.utils.gateway.GatewayUtilsModule; import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; +import org.hypertrace.gateway.service.v1.common.ColumnIdentifier; import org.hypertrace.gateway.service.v1.common.Expression; import org.hypertrace.gateway.service.v1.common.Filter; -import org.hypertrace.gateway.service.v1.common.Operator; +import org.hypertrace.gateway.service.v1.common.LiteralConstant; +import org.hypertrace.gateway.service.v1.common.Value; +import org.hypertrace.gateway.service.v1.common.ValueType; import org.hypertrace.gateway.service.v1.log.events.LogEventsRequest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -135,7 +138,7 @@ void testBuildRequest() { Collection logAttributeRequests = List.of(spanIdAttribute, traceIdAttribute, attributesAttribute); - ResultSetRequest resultSetRequest = + DefaultResultSetRequest resultSetRequest = new DefaultResultSetRequest( null, List.of(DaoTestUtil.eventIdAttribute), @@ -148,36 +151,26 @@ void testBuildRequest() { Optional.empty()); SpanRequest spanRequest = new DefaultSpanRequest(resultSetRequest, logAttributeRequests); - LogEventsRequest logEventsRequest = - spanLogEventRequestBuilder.buildLogEventsRequest(spanRequest, spansResponse).blockingGet(); - - assertEquals(Operator.IN, logEventsRequest.getFilter().getChildFilter(0).getOperator()); - assertEquals( - spanIdAttribute.attribute().id(), - logEventsRequest - .getFilter() - .getChildFilter(0) - .getLhs() - .getColumnIdentifier() - .getColumnName()); - assertEquals( - List.of("span1", "span2", "span3"), - logEventsRequest - .getFilter() - .getChildFilter(0) - .getRhs() - .getLiteral() - .getValue() - .getStringArrayList() - .stream() - .collect(Collectors.toList())); - assertEquals(startTime, logEventsRequest.getStartTimeMillis()); - assertEquals(endTime, logEventsRequest.getEndTimeMillis()); + LogEventsRequest expectedLogEventsRequest = + LogEventsRequest.newBuilder() + .setStartTimeMillis(startTime) + .setEndTimeMillis(endTime) + .setLimit(1000) + .addSelection(buildAliasedSelection("spanId")) + .addSelection(buildAliasedSelection("traceId")) + .addSelection(buildAliasedSelection("attributes")) + .setFilter( + Filter.newBuilder() + .setOperator(AND) + .addChildFilter( + Filter.newBuilder() + .setLhs(buildUnaliasedSelection("spanId")) + .setOperator(IN) + .setRhs(buildStringList("span1", "span2", "span3")))) + .build(); assertEquals( - Set.of("attributes", "traceId", "spanId"), - logEventsRequest.getSelectionList().stream() - .map(expression -> expression.getColumnIdentifier().getColumnName()) - .collect(Collectors.toSet())); + expectedLogEventsRequest, + spanLogEventRequestBuilder.buildLogEventsRequest(spanRequest, spansResponse).blockingGet()); } @Test @@ -186,7 +179,7 @@ void testBuildRequest_addSpanId() { long endTime = System.currentTimeMillis() + Duration.ofHours(1).toMillis(); Collection logAttributeRequests = List.of(traceIdAttribute); - ResultSetRequest resultSetRequest = + DefaultResultSetRequest resultSetRequest = new DefaultResultSetRequest( null, List.of(DaoTestUtil.eventIdAttribute), @@ -199,35 +192,47 @@ void testBuildRequest_addSpanId() { Optional.empty()); SpanRequest spanRequest = new DefaultSpanRequest(resultSetRequest, logAttributeRequests); - LogEventsRequest logEventsRequest = - spanLogEventRequestBuilder.buildLogEventsRequest(spanRequest, spansResponse).blockingGet(); - - assertEquals(Operator.IN, logEventsRequest.getFilter().getChildFilter(0).getOperator()); - assertEquals( - spanIdAttribute.attribute().id(), - logEventsRequest - .getFilter() - .getChildFilter(0) - .getLhs() - .getColumnIdentifier() - .getColumnName()); - assertEquals( - List.of("span1", "span2", "span3"), - logEventsRequest - .getFilter() - .getChildFilter(0) - .getRhs() - .getLiteral() - .getValue() - .getStringArrayList() - .stream() - .collect(Collectors.toList())); - assertEquals(startTime, logEventsRequest.getStartTimeMillis()); - assertEquals(endTime, logEventsRequest.getEndTimeMillis()); + LogEventsRequest expectedLogEventsRequest = + LogEventsRequest.newBuilder() + .setStartTimeMillis(startTime) + .setEndTimeMillis(endTime) + .setLimit(1000) + .addSelection(buildAliasedSelection("spanId")) + .addSelection(buildAliasedSelection("traceId")) + .setFilter( + Filter.newBuilder() + .setOperator(AND) + .addChildFilter( + Filter.newBuilder() + .setLhs(buildUnaliasedSelection("spanId")) + .setOperator(IN) + .setRhs(buildStringList("span1", "span2", "span3")))) + .build(); assertEquals( - Set.of("traceId", "spanId"), - logEventsRequest.getSelectionList().stream() - .map(expression -> expression.getColumnIdentifier().getColumnName()) - .collect(Collectors.toSet())); + expectedLogEventsRequest, + spanLogEventRequestBuilder.buildLogEventsRequest(spanRequest, spansResponse).blockingGet()); + } + + Expression buildAliasedSelection(String name) { + return Expression.newBuilder() + .setColumnIdentifier(ColumnIdentifier.newBuilder().setColumnName(name).setAlias(name)) + .build(); + } + + Expression buildUnaliasedSelection(String name) { + return Expression.newBuilder() + .setColumnIdentifier(ColumnIdentifier.newBuilder().setColumnName(name)) + .build(); + } + + Expression buildStringList(String... values) { + return Expression.newBuilder() + .setLiteral( + LiteralConstant.newBuilder() + .setValue( + Value.newBuilder() + .setValueType(ValueType.STRING_ARRAY) + .addAllStringArray(List.of(values)))) + .build(); } } From 5d48c7b2b1330bf140112095d6fa6157d494e265 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Wed, 16 Jun 2021 22:52:35 -0700 Subject: [PATCH 067/173] refactor: deprecate graphql request context (#68) * refactor: deprecate graphql request context * refactor: migrated all usages in core --- .../build.gradle.kts | 1 + .../graphql/attributes/AttributeClient.java | 12 +- .../attributes/AttributeStoreModule.java | 4 +- .../build.gradle.kts | 2 +- .../DefaultGraphQlGrpcContextBuilder.java | 67 ++--------- .../utils/grpc/GraphQlGrpcContext.java | 1 + .../utils/grpc/GraphQlGrpcContextBuilder.java | 2 + .../graphql/utils/grpc/GraphQlGrpcModule.java | 1 + .../utils/grpc/GrpcContextBuilder.java | 8 ++ .../grpc/PlatformGrpcContextBuilder.java | 59 +++++++++ .../grpc/PlatformRequestContextBuilder.java | 14 --- .../DefaultGraphQlGrpcContextBuilderTest.java | 113 ++---------------- .../grpc/PlatformGrpcContextBuilderTest.java | 50 ++++++++ .../PlatformRequestContextBuilderTest.java | 17 --- .../event/dao/GatewayServiceLogEventDao.java | 8 +- .../log/event/dao/LogEventDaoModule.java | 4 +- .../build.gradle.kts | 5 +- .../span/dao/GatewayServiceSpanDao.java | 8 +- .../core/graphql/span/dao/SpanDaoModule.java | 4 +- .../graphql/span/dao/SpanLogEventDao.java | 8 +- .../trace/dao/GatewayServiceTraceDao.java | 8 +- .../graphql/trace/dao/TraceDaoModule.java | 4 +- 22 files changed, 174 insertions(+), 226 deletions(-) create mode 100644 hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GrpcContextBuilder.java create mode 100644 hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/PlatformGrpcContextBuilder.java delete mode 100644 hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/PlatformRequestContextBuilder.java create mode 100644 hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/PlatformGrpcContextBuilderTest.java delete mode 100644 hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/PlatformRequestContextBuilderTest.java diff --git a/hypertrace-core-graphql-attribute-store/build.gradle.kts b/hypertrace-core-graphql-attribute-store/build.gradle.kts index b82c3ee3..585b9e42 100644 --- a/hypertrace-core-graphql-attribute-store/build.gradle.kts +++ b/hypertrace-core-graphql-attribute-store/build.gradle.kts @@ -14,6 +14,7 @@ dependencies { implementation("com.google.guava:guava") implementation("org.hypertrace.core.attribute.service:attribute-service-api") + implementation("org.hypertrace.core.grpcutils:grpc-client-rx-utils") implementation(project(":hypertrace-core-graphql-grpc-utils")) implementation(project(":hypertrace-core-graphql-rx-utils")) diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeClient.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeClient.java index e7f99ef6..80e53a8f 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeClient.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeClient.java @@ -12,20 +12,21 @@ import org.hypertrace.core.attribute.service.v1.Empty; import org.hypertrace.core.graphql.context.GraphQlRequestContext; import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; -import org.hypertrace.core.graphql.utils.grpc.GraphQlGrpcContextBuilder; import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; +import org.hypertrace.core.graphql.utils.grpc.GrpcContextBuilder; +import org.hypertrace.core.grpcutils.client.rx.GrpcRxExecutionContext; @Singleton class AttributeClient { private static final int DEFAULT_DEADLINE_SEC = 10; private final AttributeServiceStub attributeServiceClient; - private final GraphQlGrpcContextBuilder grpcContextBuilder; + private final GrpcContextBuilder grpcContextBuilder; private final AttributeModelTranslator translator; @Inject AttributeClient( GraphQlServiceConfig serviceConfig, - GraphQlGrpcContextBuilder grpcContextBuilder, + GrpcContextBuilder grpcContextBuilder, GrpcChannelRegistry grpcChannelRegistry, CallCredentials credentials, AttributeModelTranslator translator) { @@ -41,9 +42,8 @@ class AttributeClient { } public Observable queryAll(GraphQlRequestContext requestContext) { - return this.grpcContextBuilder - .build(requestContext) - .streamInContext( + return GrpcRxExecutionContext.forContext(this.grpcContextBuilder.build(requestContext)) + .stream( streamObserver -> this.attributeServiceClient .withDeadlineAfter(DEFAULT_DEADLINE_SEC, TimeUnit.SECONDS) diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStoreModule.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStoreModule.java index 8bc99885..a53ab476 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStoreModule.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStoreModule.java @@ -7,8 +7,8 @@ import io.reactivex.rxjava3.core.Scheduler; import org.hypertrace.core.graphql.rx.BoundedIoScheduler; import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; -import org.hypertrace.core.graphql.utils.grpc.GraphQlGrpcContextBuilder; import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; +import org.hypertrace.core.graphql.utils.grpc.GrpcContextBuilder; public class AttributeStoreModule extends AbstractModule { @@ -18,7 +18,7 @@ protected void configure() { Multibinder.newSetBinder(binder(), IdMapping.class); Multibinder.newSetBinder(binder(), IdMappingLoader.class); requireBinding(GraphQlServiceConfig.class); - requireBinding(GraphQlGrpcContextBuilder.class); + requireBinding(GrpcContextBuilder.class); requireBinding(CallCredentials.class); requireBinding(GrpcChannelRegistry.class); requireBinding(Key.get(Scheduler.class, BoundedIoScheduler.class)); diff --git a/hypertrace-core-graphql-grpc-utils/build.gradle.kts b/hypertrace-core-graphql-grpc-utils/build.gradle.kts index caec07e0..b13e51f0 100644 --- a/hypertrace-core-graphql-grpc-utils/build.gradle.kts +++ b/hypertrace-core-graphql-grpc-utils/build.gradle.kts @@ -11,8 +11,8 @@ dependencies { api("io.grpc:grpc-core") api("io.grpc:grpc-stub") api(project(":hypertrace-core-graphql-context")) + api("org.hypertrace.core.grpcutils:grpc-context-utils") - implementation("org.hypertrace.core.grpcutils:grpc-context-utils") implementation("org.hypertrace.core.grpcutils:grpc-client-utils") implementation("io.grpc:grpc-context") implementation("io.reactivex.rxjava3:rxjava") diff --git a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGraphQlGrpcContextBuilder.java b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGraphQlGrpcContextBuilder.java index 9281763f..29f1b6dc 100644 --- a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGraphQlGrpcContextBuilder.java +++ b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGraphQlGrpcContextBuilder.java @@ -1,70 +1,40 @@ package org.hypertrace.core.graphql.utils.grpc; -import static org.hypertrace.core.grpcutils.context.RequestContextConstants.AUTHORIZATION_HEADER; -import static org.hypertrace.core.grpcutils.context.RequestContextConstants.TENANT_ID_HEADER_KEY; - -import io.grpc.Context; import io.grpc.stub.StreamObserver; import io.reactivex.rxjava3.core.Observable; -import java.util.Arrays; -import java.util.Collection; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Optional; import java.util.concurrent.Callable; import java.util.function.Consumer; -import java.util.stream.Collectors; import javax.inject.Inject; import org.hypertrace.core.graphql.context.GraphQlRequestContext; import org.hypertrace.core.grpcutils.context.RequestContext; class DefaultGraphQlGrpcContextBuilder implements GraphQlGrpcContextBuilder { - private final PlatformRequestContextBuilder platformRequestContextBuilder; + private final PlatformGrpcContextBuilder platformGrpcContextBuilder; @Inject - DefaultGraphQlGrpcContextBuilder(PlatformRequestContextBuilder platformRequestContextBuilder) { - this.platformRequestContextBuilder = platformRequestContextBuilder; + DefaultGraphQlGrpcContextBuilder(PlatformGrpcContextBuilder platformGrpcContextBuilder) { + this.platformGrpcContextBuilder = platformGrpcContextBuilder; } @Override public GraphQlGrpcContext build(GraphQlRequestContext requestContext) { - return new DefaultGraphQlGrpcContext(requestContext, this.platformRequestContextBuilder); + return new DefaultGraphQlGrpcContext(requestContext, this.platformGrpcContextBuilder); } private static final class DefaultGraphQlGrpcContext implements GraphQlGrpcContext { - private final Context grpcContext; + + private final RequestContext grpcContext; private DefaultGraphQlGrpcContext( GraphQlRequestContext requestContext, - PlatformRequestContextBuilder platformRequestContextBuilder) { - Map grpcHeaders = - this.mergeMaps( - requestContext.getTracingContextHeaders(), - this.flattenOptionalMap( - Map.of( - AUTHORIZATION_HEADER, this.extractAuthorizationHeader(requestContext), - TENANT_ID_HEADER_KEY, this.extractTenantId(requestContext)))); - - RequestContext platformContext = platformRequestContextBuilder.build(grpcHeaders); - this.grpcContext = this.buildGrpcContext(platformContext); - } - - private Optional extractAuthorizationHeader(GraphQlRequestContext requestContext) { - return requestContext.getAuthorizationHeader().filter(header -> header.length() > 0); - } - - private Optional extractTenantId(GraphQlRequestContext requestContext) { - return requestContext.getTenantId(); + PlatformGrpcContextBuilder platformGrpcContextBuilder) { + this.grpcContext = platformGrpcContextBuilder.build(requestContext); } @Override public TResp callInContext(Callable callable) { - try { - return this.grpcContext.call(callable); - } catch (Exception e) { - throw new RuntimeException(e); - } + return this.grpcContext.call(callable); } @Override @@ -80,24 +50,5 @@ public Observable streamInContext( this.runInContext( () -> requestExecutor.accept(new StreamingClientResponseObserver<>(emitter)))); } - - private Context buildGrpcContext(RequestContext platformContext) { - return Context.current().withValue(RequestContext.CURRENT, platformContext); - } - - private Map flattenOptionalMap(Map> optionalMap) { - return optionalMap.entrySet().stream() - .map(entry -> entry.getValue().map(value -> Map.entry(entry.getKey(), value))) - .flatMap(Optional::stream) - .collect(Collectors.toUnmodifiableMap(Entry::getKey, Entry::getValue)); - } - - @SafeVarargs - private Map mergeMaps(Map... maps) { - return Arrays.stream(maps) - .map(Map::entrySet) - .flatMap(Collection::stream) - .collect(Collectors.toUnmodifiableMap(Entry::getKey, Entry::getValue)); - } } } diff --git a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcContext.java b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcContext.java index 107f7676..337d1e3b 100644 --- a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcContext.java +++ b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcContext.java @@ -5,6 +5,7 @@ import java.util.concurrent.Callable; import java.util.function.Consumer; +@Deprecated public interface GraphQlGrpcContext { TResp callInContext(Callable callable); diff --git a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcContextBuilder.java b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcContextBuilder.java index de4c4503..3018f36b 100644 --- a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcContextBuilder.java +++ b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcContextBuilder.java @@ -2,6 +2,8 @@ import org.hypertrace.core.graphql.context.GraphQlRequestContext; +/** @deprecated Use {@link GrpcContextBuilder#build(GraphQlRequestContext)} instead */ +@Deprecated public interface GraphQlGrpcContextBuilder { GraphQlGrpcContext build(GraphQlRequestContext requestContext); } diff --git a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcModule.java b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcModule.java index f06b7db2..1e32e347 100644 --- a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcModule.java +++ b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcModule.java @@ -12,5 +12,6 @@ protected void configure() { bind(CallCredentials.class).toInstance(getClientCallCredsProvider().get()); bind(GraphQlGrpcContextBuilder.class).to(DefaultGraphQlGrpcContextBuilder.class); bind(GrpcChannelRegistry.class).to(DefaultGrpcChannelRegistry.class); + bind(GrpcContextBuilder.class).to(PlatformGrpcContextBuilder.class); } } diff --git a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GrpcContextBuilder.java b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GrpcContextBuilder.java new file mode 100644 index 00000000..48c7b332 --- /dev/null +++ b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GrpcContextBuilder.java @@ -0,0 +1,8 @@ +package org.hypertrace.core.graphql.utils.grpc; + +import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.core.grpcutils.context.RequestContext; + +public interface GrpcContextBuilder { + RequestContext build(GraphQlRequestContext requestContext); +} diff --git a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/PlatformGrpcContextBuilder.java b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/PlatformGrpcContextBuilder.java new file mode 100644 index 00000000..e6548e43 --- /dev/null +++ b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/PlatformGrpcContextBuilder.java @@ -0,0 +1,59 @@ +package org.hypertrace.core.graphql.utils.grpc; + +import static org.hypertrace.core.grpcutils.context.RequestContextConstants.AUTHORIZATION_HEADER; +import static org.hypertrace.core.grpcutils.context.RequestContextConstants.TENANT_ID_HEADER_KEY; + +import java.util.Arrays; +import java.util.Collection; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Optional; +import java.util.stream.Collectors; +import javax.annotation.Nonnull; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.core.grpcutils.context.RequestContext; + +class PlatformGrpcContextBuilder implements GrpcContextBuilder { + + @Override + public RequestContext build(GraphQlRequestContext requestContext) { + Map grpcHeaders = + this.mergeMaps( + requestContext.getTracingContextHeaders(), + this.flattenOptionalMap( + Map.of( + AUTHORIZATION_HEADER, this.extractAuthorizationHeader(requestContext), + TENANT_ID_HEADER_KEY, this.extractTenantId(requestContext)))); + + return this.build(grpcHeaders); + } + + private RequestContext build(@Nonnull Map headers) { + RequestContext platformContext = new RequestContext(); + headers.forEach(platformContext::add); + return platformContext; + } + + private Optional extractAuthorizationHeader(GraphQlRequestContext requestContext) { + return requestContext.getAuthorizationHeader().filter(header -> header.length() > 0); + } + + private Optional extractTenantId(GraphQlRequestContext requestContext) { + return requestContext.getTenantId(); + } + + private Map flattenOptionalMap(Map> optionalMap) { + return optionalMap.entrySet().stream() + .map(entry -> entry.getValue().map(value -> Map.entry(entry.getKey(), value))) + .flatMap(Optional::stream) + .collect(Collectors.toUnmodifiableMap(Entry::getKey, Entry::getValue)); + } + + @SafeVarargs + private Map mergeMaps(Map... maps) { + return Arrays.stream(maps) + .map(Map::entrySet) + .flatMap(Collection::stream) + .collect(Collectors.toUnmodifiableMap(Entry::getKey, Entry::getValue)); + } +} diff --git a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/PlatformRequestContextBuilder.java b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/PlatformRequestContextBuilder.java deleted file mode 100644 index 1568ab11..00000000 --- a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/PlatformRequestContextBuilder.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.hypertrace.core.graphql.utils.grpc; - -import java.util.Map; -import javax.annotation.Nonnull; -import org.hypertrace.core.grpcutils.context.RequestContext; - -class PlatformRequestContextBuilder { - - RequestContext build(@Nonnull Map headers) { - RequestContext platformContext = new RequestContext(); - headers.forEach(platformContext::add); - return platformContext; - } -} diff --git a/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/DefaultGraphQlGrpcContextBuilderTest.java b/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/DefaultGraphQlGrpcContextBuilderTest.java index 0b278d12..fb57840e 100644 --- a/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/DefaultGraphQlGrpcContextBuilderTest.java +++ b/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/DefaultGraphQlGrpcContextBuilderTest.java @@ -1,102 +1,47 @@ package org.hypertrace.core.graphql.utils.grpc; -import static org.hypertrace.core.grpcutils.context.RequestContextConstants.TENANT_ID_HEADER_KEY; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.ArgumentMatchers.anyMap; -import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import io.reactivex.rxjava3.observers.TestObserver; -import java.util.Collections; -import java.util.Map; -import java.util.Optional; import org.hypertrace.core.graphql.context.GraphQlRequestContext; import org.hypertrace.core.grpcutils.context.RequestContext; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Answers; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; @ExtendWith(MockitoExtension.class) class DefaultGraphQlGrpcContextBuilderTest { - - private static final Optional TEST_TENANT_ID_OPTIONAL = Optional.of("testTenant"); - @Mock PlatformRequestContextBuilder mockPlatformRequestContextBuilder; + @Mock PlatformGrpcContextBuilder mockPlatformGrpcContextBuilder; @Mock GraphQlRequestContext mockRequestContext; - @Mock RequestContext mockPlatformContext; + + @Mock(answer = Answers.CALLS_REAL_METHODS) + RequestContext mockPlatformContext; private GraphQlGrpcContextBuilder builder; @BeforeEach void beforeEach() { - this.builder = new DefaultGraphQlGrpcContextBuilder(this.mockPlatformRequestContextBuilder); - when(this.mockPlatformRequestContextBuilder.build(anyMap())) + this.builder = new DefaultGraphQlGrpcContextBuilder(this.mockPlatformGrpcContextBuilder); + when(this.mockPlatformGrpcContextBuilder.build(this.mockRequestContext)) .thenReturn(this.mockPlatformContext); - when(this.mockRequestContext.getAuthorizationHeader()).thenReturn(Optional.empty()); - } - - @Test - void passesAuthHeaderToPlatformContext() { - this.builder.build(this.mockRequestContext); - verify(this.mockPlatformRequestContextBuilder).build(Collections.emptyMap()); - when(this.mockRequestContext.getAuthorizationHeader()).thenReturn(Optional.of("auth header")); - this.builder.build(this.mockRequestContext); - verify(this.mockPlatformRequestContextBuilder).build(Map.of("authorization", "auth header")); - } - - @Test - void addsGrpcContextToRunnable() { - when(this.mockPlatformContext.getTenantId()).thenReturn(TEST_TENANT_ID_OPTIONAL); - var context = this.builder.build(this.mockRequestContext); - var mockRunnable = mock(Runnable.class); - - doAnswer( - invocation -> { - assertEquals(TEST_TENANT_ID_OPTIONAL, RequestContext.CURRENT.get().getTenantId()); - return null; - }) - .when(mockRunnable) - .run(); - - assertNull(RequestContext.CURRENT.get()); - context.runInContext(mockRunnable); - - verify(mockRunnable, times(1)).run(); - } - - @Test - void propagatesRunnableError() { - var context = this.builder.build(this.mockRequestContext); - assertNull(RequestContext.CURRENT.get()); - assertThrows( - RuntimeException.class, - () -> - context.callInContext( - () -> { - throw new RuntimeException("test"); - })); } @Test void addsGrpcContextToStreamedRequest() { - when(this.mockPlatformContext.getTenantId()).thenReturn(TEST_TENANT_ID_OPTIONAL); var context = this.builder.build(this.mockRequestContext); var testObserver = new TestObserver<>(); context .streamInContext( streamObserver -> { - streamObserver.onNext(RequestContext.CURRENT.get().getTenantId()); + streamObserver.onNext(RequestContext.CURRENT.get()); streamObserver.onCompleted(); }) .subscribe(testObserver); - testObserver.assertValue(TEST_TENANT_ID_OPTIONAL); + testObserver.assertValue(this.mockPlatformContext); testObserver.assertComplete(); } @@ -110,44 +55,4 @@ void propagatesErrorsFromStreamedRequest() { testObserver.assertError(IllegalStateException.class); } - - @Test - void addsGrpcContextToCallable() { - when(this.mockPlatformContext.getTenantId()).thenReturn(TEST_TENANT_ID_OPTIONAL); - var context = this.builder.build(this.mockRequestContext); - assertNull(RequestContext.CURRENT.get()); - assertEquals( - TEST_TENANT_ID_OPTIONAL, - context.callInContext(() -> RequestContext.CURRENT.get().getTenantId())); - } - - @Test - void propagatesCallableError() { - var context = this.builder.build(this.mockRequestContext); - assertNull(RequestContext.CURRENT.get()); - assertThrows( - RuntimeException.class, - () -> - context.callInContext( - () -> { - throw new RuntimeException("test"); - })); - } - - @Test - void addsTenantIdToContext() { - when(this.mockRequestContext.getTenantId()).thenReturn(Optional.of("tenant id")); - this.builder.build(this.mockRequestContext); - verify(this.mockPlatformRequestContextBuilder).build(Map.of(TENANT_ID_HEADER_KEY, "tenant id")); - } - - @Test - void addsTracingHeadersToContext() { - when(this.mockRequestContext.getTenantId()).thenReturn(Optional.of("tenant id")); - when(this.mockRequestContext.getTracingContextHeaders()) - .thenReturn(Map.of("traceid", "traceid value")); - this.builder.build(this.mockRequestContext); - verify(this.mockPlatformRequestContextBuilder) - .build(Map.of(TENANT_ID_HEADER_KEY, "tenant id", "traceid", "traceid value")); - } } diff --git a/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/PlatformGrpcContextBuilderTest.java b/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/PlatformGrpcContextBuilderTest.java new file mode 100644 index 00000000..4dc41889 --- /dev/null +++ b/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/PlatformGrpcContextBuilderTest.java @@ -0,0 +1,50 @@ +package org.hypertrace.core.graphql.utils.grpc; + +import static java.util.Collections.emptyMap; +import static org.hypertrace.core.grpcutils.context.RequestContextConstants.TENANT_ID_HEADER_KEY; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.when; + +import java.util.Map; +import java.util.Optional; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class PlatformGrpcContextBuilderTest { + + @Mock GraphQlRequestContext mockRequestContext; + + private final PlatformGrpcContextBuilder builder = new PlatformGrpcContextBuilder(); + + @Test + void addsTenantIdToContext() { + when(this.mockRequestContext.getTenantId()).thenReturn(Optional.of("tenant id")); + assertEquals( + Optional.of("tenant id"), this.builder.build(this.mockRequestContext).getTenantId()); + } + + @Test + void addsTracingHeadersToContext() { + when(this.mockRequestContext.getTenantId()).thenReturn(Optional.of("tenant id")); + when(this.mockRequestContext.getTracingContextHeaders()) + .thenReturn(Map.of("traceid", "traceid value")); + this.builder.build(this.mockRequestContext); + assertEquals( + Map.of(TENANT_ID_HEADER_KEY, "tenant id", "traceid", "traceid value"), + this.builder.build(this.mockRequestContext).getRequestHeaders()); + } + + @Test + void passesAuthHeaderToPlatformContextIfPresent() { + assertEquals(emptyMap(), this.builder.build(this.mockRequestContext).getRequestHeaders()); + + when(this.mockRequestContext.getAuthorizationHeader()).thenReturn(Optional.of("auth header")); + assertEquals( + Map.of("authorization", "auth header"), + this.builder.build(this.mockRequestContext).getRequestHeaders()); + } +} diff --git a/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/PlatformRequestContextBuilderTest.java b/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/PlatformRequestContextBuilderTest.java deleted file mode 100644 index ab759a02..00000000 --- a/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/PlatformRequestContextBuilderTest.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.hypertrace.core.graphql.utils.grpc; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import java.util.Map; -import org.junit.jupiter.api.Test; - -class PlatformRequestContextBuilderTest { - - @Test - void addsEachHeaderToRequestContext() { - var provided = Map.of("k1", "v1", "k2", "v2"); - var context = new PlatformRequestContextBuilder().build(provided); - assertEquals(provided, context.getAll()); - assertEquals(provided, context.getRequestHeaders()); - } -} diff --git a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventDao.java b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventDao.java index bd5539c5..6d43f005 100644 --- a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventDao.java +++ b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventDao.java @@ -10,8 +10,8 @@ import org.hypertrace.core.graphql.log.event.request.LogEventRequest; import org.hypertrace.core.graphql.log.event.schema.LogEventResultSet; import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; -import org.hypertrace.core.graphql.utils.grpc.GraphQlGrpcContextBuilder; import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; +import org.hypertrace.core.graphql.utils.grpc.GrpcContextBuilder; import org.hypertrace.gateway.service.GatewayServiceGrpc; import org.hypertrace.gateway.service.GatewayServiceGrpc.GatewayServiceFutureStub; import org.hypertrace.gateway.service.v1.log.events.LogEventsRequest; @@ -21,7 +21,7 @@ class GatewayServiceLogEventDao implements LogEventDao { private static final int DEFAULT_DEADLINE_SEC = 10; private final GatewayServiceFutureStub gatewayServiceStub; - private final GraphQlGrpcContextBuilder grpcContextBuilder; + private final GrpcContextBuilder grpcContextBuilder; private final GatewayServiceLogEventsRequestBuilder requestBuilder; private final GatewayServiceLogEventsResponseConverter logEventConverter; @@ -29,7 +29,7 @@ class GatewayServiceLogEventDao implements LogEventDao { GatewayServiceLogEventDao( GraphQlServiceConfig serviceConfig, CallCredentials credentials, - GraphQlGrpcContextBuilder grpcContextBuilder, + GrpcContextBuilder grpcContextBuilder, GrpcChannelRegistry channelRegistry, GatewayServiceLogEventsRequestBuilder requestBuilder, GatewayServiceLogEventsResponseConverter logEventConverter) { @@ -57,7 +57,7 @@ private Single makeRequest( return Single.fromFuture( this.grpcContextBuilder .build(context) - .callInContext( + .call( () -> this.gatewayServiceStub .withDeadlineAfter(DEFAULT_DEADLINE_SEC, SECONDS) diff --git a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/LogEventDaoModule.java b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/LogEventDaoModule.java index a9c7192a..e71ecb86 100644 --- a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/LogEventDaoModule.java +++ b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/LogEventDaoModule.java @@ -15,8 +15,8 @@ import org.hypertrace.core.graphql.common.utils.BiConverter; import org.hypertrace.core.graphql.common.utils.Converter; import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; -import org.hypertrace.core.graphql.utils.grpc.GraphQlGrpcContextBuilder; import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; +import org.hypertrace.core.graphql.utils.grpc.GrpcContextBuilder; import org.hypertrace.gateway.service.v1.common.Expression; import org.hypertrace.gateway.service.v1.common.Filter; import org.hypertrace.gateway.service.v1.common.OrderByExpression; @@ -30,7 +30,7 @@ protected void configure() { requireBinding(CallCredentials.class); requireBinding(GraphQlServiceConfig.class); - requireBinding(GraphQlGrpcContextBuilder.class); + requireBinding(GrpcContextBuilder.class); requireBinding(GrpcChannelRegistry.class); requireBinding( diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index deb69c0e..9e2210dd 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -5,8 +5,9 @@ plugins { dependencies { constraints { - api("org.hypertrace.core.grpcutils:grpc-context-utils:0.3.4") - api("org.hypertrace.core.grpcutils:grpc-client-utils:0.3.4") + api("org.hypertrace.core.grpcutils:grpc-context-utils:0.5.1") + api("org.hypertrace.core.grpcutils:grpc-client-utils:0.5.1") + api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.5.1") api("org.hypertrace.gateway.service:gateway-service-api:0.1.59") api("org.hypertrace.core.attribute.service:attribute-service-api:0.9.3") diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanDao.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanDao.java index f6d93a1a..ca9d4444 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanDao.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanDao.java @@ -8,7 +8,7 @@ import org.hypertrace.core.graphql.context.GraphQlRequestContext; import org.hypertrace.core.graphql.span.request.SpanRequest; import org.hypertrace.core.graphql.span.schema.SpanResultSet; -import org.hypertrace.core.graphql.utils.grpc.GraphQlGrpcContextBuilder; +import org.hypertrace.core.graphql.utils.grpc.GrpcContextBuilder; import org.hypertrace.gateway.service.GatewayServiceGrpc.GatewayServiceFutureStub; import org.hypertrace.gateway.service.v1.span.SpansRequest; import org.hypertrace.gateway.service.v1.span.SpansResponse; @@ -17,7 +17,7 @@ class GatewayServiceSpanDao implements SpanDao { private static final int DEFAULT_DEADLINE_SEC = 10; private final GatewayServiceFutureStub gatewayServiceStub; - private final GraphQlGrpcContextBuilder grpcContextBuilder; + private final GrpcContextBuilder grpcContextBuilder; private final GatewayServiceSpanRequestBuilder requestBuilder; private final GatewayServiceSpanConverter spanConverter; private final SpanLogEventDao spanLogEventDao; @@ -25,7 +25,7 @@ class GatewayServiceSpanDao implements SpanDao { @Inject GatewayServiceSpanDao( GatewayServiceFutureStub gatewayServiceFutureStub, - GraphQlGrpcContextBuilder grpcContextBuilder, + GrpcContextBuilder grpcContextBuilder, GatewayServiceSpanRequestBuilder requestBuilder, GatewayServiceSpanConverter spanConverter, SpanLogEventDao spanLogEventDao) { @@ -51,7 +51,7 @@ private Single makeRequest(GraphQlRequestContext context, SpansRe return Single.fromFuture( this.grpcContextBuilder .build(context) - .callInContext( + .call( () -> this.gatewayServiceStub .withDeadlineAfter(DEFAULT_DEADLINE_SEC, SECONDS) diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanDaoModule.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanDaoModule.java index 64eaa410..77b03d12 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanDaoModule.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanDaoModule.java @@ -18,8 +18,8 @@ import org.hypertrace.core.graphql.common.utils.Converter; import org.hypertrace.core.graphql.deserialization.ArgumentDeserializer; import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; -import org.hypertrace.core.graphql.utils.grpc.GraphQlGrpcContextBuilder; import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; +import org.hypertrace.core.graphql.utils.grpc.GrpcContextBuilder; import org.hypertrace.gateway.service.GatewayServiceGrpc.GatewayServiceFutureStub; import org.hypertrace.gateway.service.v1.common.Expression; import org.hypertrace.gateway.service.v1.common.Filter; @@ -34,7 +34,7 @@ protected void configure() { requireBinding(GatewayServiceFutureStub.class); requireBinding(CallCredentials.class); requireBinding(GraphQlServiceConfig.class); - requireBinding(GraphQlGrpcContextBuilder.class); + requireBinding(GrpcContextBuilder.class); requireBinding(GrpcChannelRegistry.class); requireBinding(FilterRequestBuilder.class); requireBinding(ArgumentDeserializer.class); diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventDao.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventDao.java index ff9b168d..88ecac95 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventDao.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventDao.java @@ -7,7 +7,7 @@ import javax.inject.Inject; import org.hypertrace.core.graphql.context.GraphQlRequestContext; import org.hypertrace.core.graphql.span.request.SpanRequest; -import org.hypertrace.core.graphql.utils.grpc.GraphQlGrpcContextBuilder; +import org.hypertrace.core.graphql.utils.grpc.GrpcContextBuilder; import org.hypertrace.gateway.service.GatewayServiceGrpc.GatewayServiceFutureStub; import org.hypertrace.gateway.service.v1.log.events.LogEventsRequest; import org.hypertrace.gateway.service.v1.log.events.LogEventsResponse; @@ -18,14 +18,14 @@ class SpanLogEventDao { private static final int DEFAULT_DEADLINE_SEC = 10; private final GatewayServiceFutureStub gatewayServiceStub; - private final GraphQlGrpcContextBuilder grpcContextBuilder; + private final GrpcContextBuilder grpcContextBuilder; private final SpanLogEventRequestBuilder spanLogEventRequestBuilder; private final SpanLogEventResponseConverter spanLogEventResponseConverter; @Inject SpanLogEventDao( GatewayServiceFutureStub gatewayServiceFutureStub, - GraphQlGrpcContextBuilder grpcContextBuilder, + GrpcContextBuilder grpcContextBuilder, SpanLogEventRequestBuilder spanLogEventRequestBuilder, SpanLogEventResponseConverter spanLogEventResponseConverter) { this.gatewayServiceStub = gatewayServiceFutureStub; @@ -70,7 +70,7 @@ private Single makeRequest( return Single.fromFuture( this.grpcContextBuilder .build(context) - .callInContext( + .call( () -> this.gatewayServiceStub .withDeadlineAfter(DEFAULT_DEADLINE_SEC, SECONDS) diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceDao.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceDao.java index 965f484a..e28031e5 100644 --- a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceDao.java +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceDao.java @@ -10,8 +10,8 @@ import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; import org.hypertrace.core.graphql.trace.request.TraceRequest; import org.hypertrace.core.graphql.trace.schema.TraceResultSet; -import org.hypertrace.core.graphql.utils.grpc.GraphQlGrpcContextBuilder; import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; +import org.hypertrace.core.graphql.utils.grpc.GrpcContextBuilder; import org.hypertrace.gateway.service.GatewayServiceGrpc; import org.hypertrace.gateway.service.GatewayServiceGrpc.GatewayServiceFutureStub; import org.hypertrace.gateway.service.v1.trace.TracesRequest; @@ -21,7 +21,7 @@ class GatewayServiceTraceDao implements TraceDao { private static final int DEFAULT_DEADLINE_SEC = 10; private final GatewayServiceFutureStub gatewayServiceStub; - private final GraphQlGrpcContextBuilder grpcContextBuilder; + private final GrpcContextBuilder grpcContextBuilder; private final GatewayServiceTraceRequestBuilder requestBuilder; private final GatewayServiceTraceConverter traceConverter; @@ -29,7 +29,7 @@ class GatewayServiceTraceDao implements TraceDao { GatewayServiceTraceDao( GraphQlServiceConfig serviceConfig, CallCredentials credentials, - GraphQlGrpcContextBuilder grpcContextBuilder, + GrpcContextBuilder grpcContextBuilder, GrpcChannelRegistry channelRegistry, GatewayServiceTraceRequestBuilder requestBuilder, GatewayServiceTraceConverter traceConverter) { @@ -58,7 +58,7 @@ private Single makeRequest(GraphQlRequestContext context, Traces return Single.fromFuture( this.grpcContextBuilder .build(context) - .callInContext( + .call( () -> this.gatewayServiceStub .withDeadlineAfter(DEFAULT_DEADLINE_SEC, SECONDS) diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/TraceDaoModule.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/TraceDaoModule.java index c91afa01..20775531 100644 --- a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/TraceDaoModule.java +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/TraceDaoModule.java @@ -15,8 +15,8 @@ import org.hypertrace.core.graphql.common.utils.BiConverter; import org.hypertrace.core.graphql.common.utils.Converter; import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; -import org.hypertrace.core.graphql.utils.grpc.GraphQlGrpcContextBuilder; import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; +import org.hypertrace.core.graphql.utils.grpc.GrpcContextBuilder; import org.hypertrace.gateway.service.v1.common.Expression; import org.hypertrace.gateway.service.v1.common.Filter; import org.hypertrace.gateway.service.v1.common.OrderByExpression; @@ -29,7 +29,7 @@ protected void configure() { bind(TraceDao.class).to(GatewayServiceTraceDao.class); requireBinding(CallCredentials.class); requireBinding(GraphQlServiceConfig.class); - requireBinding(GraphQlGrpcContextBuilder.class); + requireBinding(GrpcContextBuilder.class); requireBinding(GrpcChannelRegistry.class); requireBinding( From 2b889a0071a28c481386eac7d6f506464c3bd2c4 Mon Sep 17 00:00:00 2001 From: suddendust <84911643+suddendust@users.noreply.github.com> Date: Sat, 10 Jul 2021 00:44:37 +0530 Subject: [PATCH 068/173] Gateway-Service Client Timeout Config (#70) * Added config for gateway gRPC client deadline * Spotless apply * Changed gateway-service client timeout unit to java.time.Duration and added fallback configuration --- .../log/event/dao/GatewayServiceLogEventDao.java | 8 +++++--- .../service/DefaultGraphQlServiceConfig.java | 13 +++++++++++++ .../graphql/span/dao/GatewayServiceSpanDao.java | 11 ++++++++--- .../core/graphql/span/dao/SpanDaoModule.java | 1 + .../core/graphql/span/dao/SpanLogEventDao.java | 11 +++++++---- .../graphql/spi/config/GraphQlServiceConfig.java | 3 +++ .../graphql/trace/dao/GatewayServiceTraceDao.java | 9 ++++++--- 7 files changed, 43 insertions(+), 13 deletions(-) diff --git a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventDao.java b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventDao.java index 6d43f005..68bd5642 100644 --- a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventDao.java +++ b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventDao.java @@ -1,6 +1,6 @@ package org.hypertrace.core.graphql.log.event.dao; -import static java.util.concurrent.TimeUnit.SECONDS; +import static java.util.concurrent.TimeUnit.MILLISECONDS; import io.grpc.CallCredentials; import io.reactivex.rxjava3.core.Single; @@ -19,11 +19,11 @@ @Singleton class GatewayServiceLogEventDao implements LogEventDao { - private static final int DEFAULT_DEADLINE_SEC = 10; private final GatewayServiceFutureStub gatewayServiceStub; private final GrpcContextBuilder grpcContextBuilder; private final GatewayServiceLogEventsRequestBuilder requestBuilder; private final GatewayServiceLogEventsResponseConverter logEventConverter; + private final GraphQlServiceConfig serviceConfig; @Inject GatewayServiceLogEventDao( @@ -36,6 +36,7 @@ class GatewayServiceLogEventDao implements LogEventDao { this.grpcContextBuilder = grpcContextBuilder; this.requestBuilder = requestBuilder; this.logEventConverter = logEventConverter; + this.serviceConfig = serviceConfig; this.gatewayServiceStub = GatewayServiceGrpc.newFutureStub( @@ -60,7 +61,8 @@ private Single makeRequest( .call( () -> this.gatewayServiceStub - .withDeadlineAfter(DEFAULT_DEADLINE_SEC, SECONDS) + .withDeadlineAfter( + serviceConfig.getGatewayServiceTimeout().toMillis(), MILLISECONDS) .getLogEvents(request))); } } diff --git a/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java index dcdbc398..e3171a03 100644 --- a/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java +++ b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java @@ -1,6 +1,7 @@ package org.hypertrace.core.graphql.service; import com.typesafe.config.Config; +import java.time.Duration; import java.util.Optional; import java.util.function.Supplier; import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; @@ -22,6 +23,7 @@ class DefaultGraphQlServiceConfig implements GraphQlServiceConfig { private static final String GATEWAY_SERVICE_HOST_PROPERTY = "gateway.service.host"; private static final String GATEWAY_SERVICE_PORT_PROPERTY = "gateway.service.port"; + private static final String GATEWAY_SERVICE_CLIENT_TIMEOUT = "gateway.service.timeout"; private final String serviceName; private final int servicePort; @@ -33,6 +35,7 @@ class DefaultGraphQlServiceConfig implements GraphQlServiceConfig { private final int attributeServicePort; private final String gatewayServiceHost; private final int gatewayServicePort; + private final Duration gatewayServiceTimeout; DefaultGraphQlServiceConfig(Config untypedConfig) { this.serviceName = untypedConfig.getString(SERVICE_NAME_CONFIG); @@ -46,6 +49,11 @@ class DefaultGraphQlServiceConfig implements GraphQlServiceConfig { this.attributeServicePort = untypedConfig.getInt(ATTRIBUTE_SERVICE_PORT_PROPERTY); this.gatewayServiceHost = untypedConfig.getString(GATEWAY_SERVICE_HOST_PROPERTY); this.gatewayServicePort = untypedConfig.getInt(GATEWAY_SERVICE_PORT_PROPERTY); + // fallback timeout: 10s + this.gatewayServiceTimeout = + untypedConfig.hasPath(GATEWAY_SERVICE_CLIENT_TIMEOUT) + ? untypedConfig.getDuration(GATEWAY_SERVICE_CLIENT_TIMEOUT) + : Duration.ofSeconds(10); } @Override @@ -98,6 +106,11 @@ public int getGatewayServicePort() { return this.gatewayServicePort; } + @Override + public Duration getGatewayServiceTimeout() { + return gatewayServiceTimeout; + } + private Optional optionallyGet(Supplier valueSupplier) { try { return Optional.ofNullable(valueSupplier.get()); diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanDao.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanDao.java index ca9d4444..67a5f9d9 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanDao.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanDao.java @@ -1,6 +1,6 @@ package org.hypertrace.core.graphql.span.dao; -import static java.util.concurrent.TimeUnit.SECONDS; +import static java.util.concurrent.TimeUnit.MILLISECONDS; import io.reactivex.rxjava3.core.Single; import javax.inject.Inject; @@ -8,6 +8,7 @@ import org.hypertrace.core.graphql.context.GraphQlRequestContext; import org.hypertrace.core.graphql.span.request.SpanRequest; import org.hypertrace.core.graphql.span.schema.SpanResultSet; +import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; import org.hypertrace.core.graphql.utils.grpc.GrpcContextBuilder; import org.hypertrace.gateway.service.GatewayServiceGrpc.GatewayServiceFutureStub; import org.hypertrace.gateway.service.v1.span.SpansRequest; @@ -15,15 +16,17 @@ @Singleton class GatewayServiceSpanDao implements SpanDao { - private static final int DEFAULT_DEADLINE_SEC = 10; + private final GatewayServiceFutureStub gatewayServiceStub; private final GrpcContextBuilder grpcContextBuilder; private final GatewayServiceSpanRequestBuilder requestBuilder; private final GatewayServiceSpanConverter spanConverter; private final SpanLogEventDao spanLogEventDao; + private final GraphQlServiceConfig serviceConfig; @Inject GatewayServiceSpanDao( + GraphQlServiceConfig serviceConfig, GatewayServiceFutureStub gatewayServiceFutureStub, GrpcContextBuilder grpcContextBuilder, GatewayServiceSpanRequestBuilder requestBuilder, @@ -34,6 +37,7 @@ class GatewayServiceSpanDao implements SpanDao { this.spanConverter = spanConverter; this.spanLogEventDao = spanLogEventDao; this.gatewayServiceStub = gatewayServiceFutureStub; + this.serviceConfig = serviceConfig; } @Override @@ -54,7 +58,8 @@ private Single makeRequest(GraphQlRequestContext context, SpansRe .call( () -> this.gatewayServiceStub - .withDeadlineAfter(DEFAULT_DEADLINE_SEC, SECONDS) + .withDeadlineAfter( + serviceConfig.getGatewayServiceTimeout().toMillis(), MILLISECONDS) .getSpans(request))); } } diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanDaoModule.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanDaoModule.java index 77b03d12..36aff948 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanDaoModule.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanDaoModule.java @@ -32,6 +32,7 @@ public class SpanDaoModule extends AbstractModule { protected void configure() { bind(SpanDao.class).to(GatewayServiceSpanDao.class); requireBinding(GatewayServiceFutureStub.class); + requireBinding(GraphQlServiceConfig.class); requireBinding(CallCredentials.class); requireBinding(GraphQlServiceConfig.class); requireBinding(GrpcContextBuilder.class); diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventDao.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventDao.java index 88ecac95..f714ddec 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventDao.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventDao.java @@ -1,12 +1,13 @@ package org.hypertrace.core.graphql.span.dao; -import static java.util.concurrent.TimeUnit.SECONDS; +import static java.util.concurrent.TimeUnit.MILLISECONDS; import io.reactivex.rxjava3.core.Single; import java.util.Map; import javax.inject.Inject; import org.hypertrace.core.graphql.context.GraphQlRequestContext; import org.hypertrace.core.graphql.span.request.SpanRequest; +import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; import org.hypertrace.core.graphql.utils.grpc.GrpcContextBuilder; import org.hypertrace.gateway.service.GatewayServiceGrpc.GatewayServiceFutureStub; import org.hypertrace.gateway.service.v1.log.events.LogEventsRequest; @@ -15,15 +16,15 @@ class SpanLogEventDao { - private static final int DEFAULT_DEADLINE_SEC = 10; - private final GatewayServiceFutureStub gatewayServiceStub; private final GrpcContextBuilder grpcContextBuilder; private final SpanLogEventRequestBuilder spanLogEventRequestBuilder; private final SpanLogEventResponseConverter spanLogEventResponseConverter; + private final GraphQlServiceConfig serviceConfig; @Inject SpanLogEventDao( + GraphQlServiceConfig serviceConfig, GatewayServiceFutureStub gatewayServiceFutureStub, GrpcContextBuilder grpcContextBuilder, SpanLogEventRequestBuilder spanLogEventRequestBuilder, @@ -32,6 +33,7 @@ class SpanLogEventDao { this.grpcContextBuilder = grpcContextBuilder; this.spanLogEventRequestBuilder = spanLogEventRequestBuilder; this.spanLogEventResponseConverter = spanLogEventResponseConverter; + this.serviceConfig = serviceConfig; } /** @@ -73,7 +75,8 @@ private Single makeRequest( .call( () -> this.gatewayServiceStub - .withDeadlineAfter(DEFAULT_DEADLINE_SEC, SECONDS) + .withDeadlineAfter( + serviceConfig.getGatewayServiceTimeout().toMillis(), MILLISECONDS) .getLogEvents(request))); } } diff --git a/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java b/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java index 26bace29..310666f7 100644 --- a/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java +++ b/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java @@ -1,5 +1,6 @@ package org.hypertrace.core.graphql.spi.config; +import java.time.Duration; import java.util.Optional; public interface GraphQlServiceConfig { @@ -23,4 +24,6 @@ public interface GraphQlServiceConfig { String getGatewayServiceHost(); int getGatewayServicePort(); + + Duration getGatewayServiceTimeout(); } diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceDao.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceDao.java index e28031e5..e1f55c62 100644 --- a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceDao.java +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceDao.java @@ -1,6 +1,6 @@ package org.hypertrace.core.graphql.trace.dao; -import static java.util.concurrent.TimeUnit.SECONDS; +import static java.util.concurrent.TimeUnit.MILLISECONDS; import io.grpc.CallCredentials; import io.reactivex.rxjava3.core.Single; @@ -19,11 +19,12 @@ @Singleton class GatewayServiceTraceDao implements TraceDao { - private static final int DEFAULT_DEADLINE_SEC = 10; + private final GatewayServiceFutureStub gatewayServiceStub; private final GrpcContextBuilder grpcContextBuilder; private final GatewayServiceTraceRequestBuilder requestBuilder; private final GatewayServiceTraceConverter traceConverter; + private final GraphQlServiceConfig serviceConfig; @Inject GatewayServiceTraceDao( @@ -36,6 +37,7 @@ class GatewayServiceTraceDao implements TraceDao { this.grpcContextBuilder = grpcContextBuilder; this.requestBuilder = requestBuilder; this.traceConverter = traceConverter; + this.serviceConfig = serviceConfig; this.gatewayServiceStub = GatewayServiceGrpc.newFutureStub( @@ -61,7 +63,8 @@ private Single makeRequest(GraphQlRequestContext context, Traces .call( () -> this.gatewayServiceStub - .withDeadlineAfter(DEFAULT_DEADLINE_SEC, SECONDS) + .withDeadlineAfter( + serviceConfig.getGatewayServiceTimeout().toMillis(), MILLISECONDS) .getTraces(request))); } } From 189b44f21c042203cd41cfc4e3b3c850057d0918 Mon Sep 17 00:00:00 2001 From: suddendust <84911643+suddendust@users.noreply.github.com> Date: Mon, 12 Jul 2021 19:10:11 +0530 Subject: [PATCH 069/173] Attribute Service Client Configurable Timeout (#71) * Configurable timeouts for attribute and config service * Spotless apply * Refactored logic around default client timeout in case of missing config * .synk update expiry date * Reuse optionallyGet in the implementation of getTimeoutOrFallback --- .snyk | 2 +- .../graphql/attributes/AttributeClient.java | 8 +++++-- .../service/DefaultGraphQlServiceConfig.java | 22 +++++++++++++++---- .../spi/config/GraphQlServiceConfig.java | 2 ++ 4 files changed, 27 insertions(+), 7 deletions(-) diff --git a/.snyk b/.snyk index fbd83903..1ca9ad72 100644 --- a/.snyk +++ b/.snyk @@ -5,6 +5,6 @@ ignore: SNYK-JAVA-IONETTY-1042268: - '*': reason: No replacement available - expires: 2021-06-30T00:00:00.000Z + expires: 2021-09-01T00:00:00.000Z patch: {} diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeClient.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeClient.java index 80e53a8f..38eb061a 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeClient.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeClient.java @@ -18,10 +18,11 @@ @Singleton class AttributeClient { - private static final int DEFAULT_DEADLINE_SEC = 10; + private final AttributeServiceStub attributeServiceClient; private final GrpcContextBuilder grpcContextBuilder; private final AttributeModelTranslator translator; + private final GraphQlServiceConfig serviceConfig; @Inject AttributeClient( @@ -32,6 +33,7 @@ class AttributeClient { AttributeModelTranslator translator) { this.grpcContextBuilder = grpcContextBuilder; this.translator = translator; + this.serviceConfig = serviceConfig; this.attributeServiceClient = newStub( @@ -46,7 +48,9 @@ public Observable queryAll(GraphQlRequestContext requestContext) .stream( streamObserver -> this.attributeServiceClient - .withDeadlineAfter(DEFAULT_DEADLINE_SEC, TimeUnit.SECONDS) + .withDeadlineAfter( + serviceConfig.getAttributeServiceTimeout().toMillis(), + TimeUnit.MILLISECONDS) .findAll(Empty.getDefaultInstance(), streamObserver)) .mapOptional(this.translator::translate); } diff --git a/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java index e3171a03..538bd4f5 100644 --- a/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java +++ b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java @@ -8,6 +8,8 @@ class DefaultGraphQlServiceConfig implements GraphQlServiceConfig { + private static final Long DEFAULT_CLIENT_TIMEOUT_SECONDS = 10L; + private static final String SERVICE_NAME_CONFIG = "service.name"; private static final String SERVICE_PORT_CONFIG = "service.port"; @@ -20,6 +22,7 @@ class DefaultGraphQlServiceConfig implements GraphQlServiceConfig { private static final String ATTRIBUTE_SERVICE_HOST_PROPERTY = "attribute.service.host"; private static final String ATTRIBUTE_SERVICE_PORT_PROPERTY = "attribute.service.port"; + private static final String ATTRIBUTE_SERVICE_CLIENT_TIMEOUT = "attribute.service.timeout"; private static final String GATEWAY_SERVICE_HOST_PROPERTY = "gateway.service.host"; private static final String GATEWAY_SERVICE_PORT_PROPERTY = "gateway.service.port"; @@ -33,6 +36,7 @@ class DefaultGraphQlServiceConfig implements GraphQlServiceConfig { private final int maxIoThreads; private final String attributeServiceHost; private final int attributeServicePort; + private final Duration attributeServiceTimeout; private final String gatewayServiceHost; private final int gatewayServicePort; private final Duration gatewayServiceTimeout; @@ -47,13 +51,13 @@ class DefaultGraphQlServiceConfig implements GraphQlServiceConfig { this.attributeServiceHost = untypedConfig.getString(ATTRIBUTE_SERVICE_HOST_PROPERTY); this.attributeServicePort = untypedConfig.getInt(ATTRIBUTE_SERVICE_PORT_PROPERTY); + this.attributeServiceTimeout = + getTimeoutOrFallback(() -> untypedConfig.getDuration(ATTRIBUTE_SERVICE_CLIENT_TIMEOUT)); + this.gatewayServiceHost = untypedConfig.getString(GATEWAY_SERVICE_HOST_PROPERTY); this.gatewayServicePort = untypedConfig.getInt(GATEWAY_SERVICE_PORT_PROPERTY); - // fallback timeout: 10s this.gatewayServiceTimeout = - untypedConfig.hasPath(GATEWAY_SERVICE_CLIENT_TIMEOUT) - ? untypedConfig.getDuration(GATEWAY_SERVICE_CLIENT_TIMEOUT) - : Duration.ofSeconds(10); + getTimeoutOrFallback(() -> untypedConfig.getDuration(GATEWAY_SERVICE_CLIENT_TIMEOUT)); } @Override @@ -96,6 +100,11 @@ public int getAttributeServicePort() { return this.attributeServicePort; } + @Override + public Duration getAttributeServiceTimeout() { + return attributeServiceTimeout; + } + @Override public String getGatewayServiceHost() { return this.gatewayServiceHost; @@ -111,6 +120,11 @@ public Duration getGatewayServiceTimeout() { return gatewayServiceTimeout; } + private Duration getTimeoutOrFallback(Supplier durationSupplier) { + return optionallyGet(durationSupplier) + .orElse(Duration.ofSeconds(DEFAULT_CLIENT_TIMEOUT_SECONDS)); + } + private Optional optionallyGet(Supplier valueSupplier) { try { return Optional.ofNullable(valueSupplier.get()); diff --git a/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java b/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java index 310666f7..f38a7aa3 100644 --- a/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java +++ b/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java @@ -21,6 +21,8 @@ public interface GraphQlServiceConfig { int getAttributeServicePort(); + Duration getAttributeServiceTimeout(); + String getGatewayServiceHost(); int getGatewayServicePort(); From 3673d477c69e9bcfa298871e43d345b8806595a9 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Fri, 23 Jul 2021 06:08:39 -0700 Subject: [PATCH 070/173] feat: add support for request transformers (#72) --- hypertrace-core-graphql-impl/build.gradle.kts | 1 + .../core/graphql/impl/GraphQlModule.java | 2 + .../build.gradle.kts | 19 +++++ .../transformation/RequestTransformation.java | 20 +++++ .../RequestTransformationModule.java | 13 +++ .../transformation/RequestTransformer.java | 12 +++ .../RequestTransformerImpl.java | 27 ++++++ .../RequestTransformerImplTest.java | 85 +++++++++++++++++++ .../build.gradle.kts | 1 + .../span/dao/GatewayServiceSpanDao.java | 11 ++- .../core/graphql/span/dao/SpanDaoModule.java | 2 + .../request/DefaultSpanRequestBuilder.java | 5 +- .../graphql/span/request/SpanRequest.java | 3 +- .../core/graphql/span/dao/DaoTestUtil.java | 2 +- .../dao/SpanLogEventRequestBuilderTest.java | 4 +- .../build.gradle.kts | 1 + .../trace/dao/GatewayServiceTraceDao.java | 11 ++- .../graphql/trace/dao/TraceDaoModule.java | 2 + settings.gradle.kts | 3 +- 19 files changed, 211 insertions(+), 13 deletions(-) create mode 100644 hypertrace-core-graphql-request-transformation/build.gradle.kts create mode 100644 hypertrace-core-graphql-request-transformation/src/main/java/org/hypertrace/core/graphql/request/transformation/RequestTransformation.java create mode 100644 hypertrace-core-graphql-request-transformation/src/main/java/org/hypertrace/core/graphql/request/transformation/RequestTransformationModule.java create mode 100644 hypertrace-core-graphql-request-transformation/src/main/java/org/hypertrace/core/graphql/request/transformation/RequestTransformer.java create mode 100644 hypertrace-core-graphql-request-transformation/src/main/java/org/hypertrace/core/graphql/request/transformation/RequestTransformerImpl.java create mode 100644 hypertrace-core-graphql-request-transformation/src/test/java/org/hypertrace/core/graphql/request/transformation/RequestTransformerImplTest.java diff --git a/hypertrace-core-graphql-impl/build.gradle.kts b/hypertrace-core-graphql-impl/build.gradle.kts index 8b80e855..e93911a2 100644 --- a/hypertrace-core-graphql-impl/build.gradle.kts +++ b/hypertrace-core-graphql-impl/build.gradle.kts @@ -22,6 +22,7 @@ dependencies { implementation(project(":hypertrace-core-graphql-attribute-scope")) implementation(project(":hypertrace-core-graphql-rx-utils")) implementation(project(":hypertrace-core-graphql-log-event-schema")) + implementation(project(":hypertrace-core-graphql-request-transformation")) implementation("org.slf4j:slf4j-api") implementation("com.google.inject:guice") diff --git a/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlModule.java b/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlModule.java index 32c0a13f..68f973ba 100644 --- a/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlModule.java +++ b/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlModule.java @@ -9,6 +9,7 @@ import org.hypertrace.core.graphql.deserialization.GraphQlDeserializationRegistryModule; import org.hypertrace.core.graphql.log.event.LogEventSchemaModule; import org.hypertrace.core.graphql.metadata.MetadataSchemaModule; +import org.hypertrace.core.graphql.request.transformation.RequestTransformationModule; import org.hypertrace.core.graphql.rx.RxUtilModule; import org.hypertrace.core.graphql.schema.registry.GraphQlSchemaRegistryModule; import org.hypertrace.core.graphql.span.SpanSchemaModule; @@ -48,5 +49,6 @@ protected void configure() { install(new TraceSchemaModule()); install(new RxUtilModule()); install(new LogEventSchemaModule()); + install(new RequestTransformationModule()); } } diff --git a/hypertrace-core-graphql-request-transformation/build.gradle.kts b/hypertrace-core-graphql-request-transformation/build.gradle.kts new file mode 100644 index 00000000..7318704c --- /dev/null +++ b/hypertrace-core-graphql-request-transformation/build.gradle.kts @@ -0,0 +1,19 @@ +plugins { + `java-library` + jacoco + id("org.hypertrace.jacoco-report-plugin") +} + +dependencies { + api("com.google.inject:guice") + api(project(":hypertrace-core-graphql-common-schema")) + + testAnnotationProcessor("org.projectlombok:lombok") + testCompileOnly("org.projectlombok:lombok") + testImplementation("org.junit.jupiter:junit-jupiter") + testImplementation("org.mockito:mockito-core") +} + +tasks.test { + useJUnitPlatform() +} diff --git a/hypertrace-core-graphql-request-transformation/src/main/java/org/hypertrace/core/graphql/request/transformation/RequestTransformation.java b/hypertrace-core-graphql-request-transformation/src/main/java/org/hypertrace/core/graphql/request/transformation/RequestTransformation.java new file mode 100644 index 00000000..dd8ae665 --- /dev/null +++ b/hypertrace-core-graphql-request-transformation/src/main/java/org/hypertrace/core/graphql/request/transformation/RequestTransformation.java @@ -0,0 +1,20 @@ +package org.hypertrace.core.graphql.request.transformation; + +import io.reactivex.rxjava3.core.Single; +import org.hypertrace.core.graphql.common.request.ContextualRequest; + +public interface RequestTransformation { + + /** + * Any request may be provided to this method, which should return true if this transformation + * supports the request and false otherwise. + */ + boolean supportsRequest(ContextualRequest request); + + /** + * Applies a transformation to the request. This will only receive requests that have previously + * returned true from {@link #supportsRequest(ContextualRequest)}, and must always return a + * request, potentially the same request passed in if no transformation is necessary. + */ + Single transform(T request); +} diff --git a/hypertrace-core-graphql-request-transformation/src/main/java/org/hypertrace/core/graphql/request/transformation/RequestTransformationModule.java b/hypertrace-core-graphql-request-transformation/src/main/java/org/hypertrace/core/graphql/request/transformation/RequestTransformationModule.java new file mode 100644 index 00000000..30b5ea88 --- /dev/null +++ b/hypertrace-core-graphql-request-transformation/src/main/java/org/hypertrace/core/graphql/request/transformation/RequestTransformationModule.java @@ -0,0 +1,13 @@ +package org.hypertrace.core.graphql.request.transformation; + +import com.google.inject.AbstractModule; +import com.google.inject.multibindings.Multibinder; + +public class RequestTransformationModule extends AbstractModule { + + @Override + protected void configure() { + bind(RequestTransformer.class).to(RequestTransformerImpl.class); + Multibinder.newSetBinder(binder(), RequestTransformation.class); + } +} diff --git a/hypertrace-core-graphql-request-transformation/src/main/java/org/hypertrace/core/graphql/request/transformation/RequestTransformer.java b/hypertrace-core-graphql-request-transformation/src/main/java/org/hypertrace/core/graphql/request/transformation/RequestTransformer.java new file mode 100644 index 00000000..63ca96b2 --- /dev/null +++ b/hypertrace-core-graphql-request-transformation/src/main/java/org/hypertrace/core/graphql/request/transformation/RequestTransformer.java @@ -0,0 +1,12 @@ +package org.hypertrace.core.graphql.request.transformation; + +import io.reactivex.rxjava3.core.Single; +import org.hypertrace.core.graphql.common.request.ContextualRequest; + +/** + * A request transformer that can receive any request and will apply all applicable transformations + * that have been registered (currently, the order is undefined), returning the result. + */ +public interface RequestTransformer { + Single transform(T request); +} diff --git a/hypertrace-core-graphql-request-transformation/src/main/java/org/hypertrace/core/graphql/request/transformation/RequestTransformerImpl.java b/hypertrace-core-graphql-request-transformation/src/main/java/org/hypertrace/core/graphql/request/transformation/RequestTransformerImpl.java new file mode 100644 index 00000000..d3fba531 --- /dev/null +++ b/hypertrace-core-graphql-request-transformation/src/main/java/org/hypertrace/core/graphql/request/transformation/RequestTransformerImpl.java @@ -0,0 +1,27 @@ +package org.hypertrace.core.graphql.request.transformation; + +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.Single; +import java.util.Set; +import javax.inject.Inject; +import org.hypertrace.core.graphql.common.request.ContextualRequest; + +class RequestTransformerImpl implements RequestTransformer { + private final Set requestTransformations; + + @Inject + RequestTransformerImpl(Set requestTransformations) { + this.requestTransformations = requestTransformations; + } + + @Override + public Single transform(T request) { + return Observable.fromIterable(requestTransformations) + .filter(requestTransformation -> requestTransformation.supportsRequest(request)) + .reduce( + Single.just(request), // Work in singles since there's no flat reduce, then unwrap later + (currentRequestSingle, requestTransformation) -> + currentRequestSingle.flatMap(requestTransformation::transform)) + .flatMap(wrapped -> wrapped); + } +} diff --git a/hypertrace-core-graphql-request-transformation/src/test/java/org/hypertrace/core/graphql/request/transformation/RequestTransformerImplTest.java b/hypertrace-core-graphql-request-transformation/src/test/java/org/hypertrace/core/graphql/request/transformation/RequestTransformerImplTest.java new file mode 100644 index 00000000..62ddd09b --- /dev/null +++ b/hypertrace-core-graphql-request-transformation/src/test/java/org/hypertrace/core/graphql/request/transformation/RequestTransformerImplTest.java @@ -0,0 +1,85 @@ +package org.hypertrace.core.graphql.request.transformation; + +import static org.mockito.Mockito.mock; + +import io.reactivex.rxjava3.core.Single; +import io.reactivex.rxjava3.observers.TestObserver; +import java.util.Set; +import lombok.Value; +import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.common.request.ContextualRequest; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.junit.jupiter.api.Test; + +class RequestTransformerImplTest { + + @Test + void noApplicableTransformerReturnsInput() { + RequestTransformer transformer = new RequestTransformerImpl(Set.of()); + + ContextualRequest request = mock(ContextualRequest.class); + + TestObserver testObserver = new TestObserver<>(); + transformer.transform(request).subscribe(testObserver); + + testObserver.assertResult(request); + } + + @Test + void skipsUnsupportedTransformers() { + GraphQlRequestContext context = mock(GraphQlRequestContext.class); + RequestTransformer transformer = + new RequestTransformerImpl( + Set.of( + new TestTransformation(true, "prefix-", ""), + new TestTransformation(false, "", "-suffix"))); + + TestObserver testObserver = new TestObserver<>(); + transformer.transform(new TestContextualRequest(context, "original")).subscribe(testObserver); + + testObserver.assertResult(new TestContextualRequest(context, "prefix-original")); + } + + @Test + void appliesAllTransformers() { + GraphQlRequestContext context = mock(GraphQlRequestContext.class); + RequestTransformer transformer = + new RequestTransformerImpl( + Set.of( + new TestTransformation(true, "prefix-", ""), + new TestTransformation(true, "", "-suffix"))); + + TestObserver testObserver = new TestObserver<>(); + transformer.transform(new TestContextualRequest(context, "original")).subscribe(testObserver); + + testObserver.assertResult(new TestContextualRequest(context, "prefix-original-suffix")); + } + + @Value + private static class TestTransformation implements RequestTransformation { + boolean supported; + String prefixToAdd; + String suffixToAdd; + + @Override + public boolean supportsRequest(ContextualRequest request) { + return supported; + } + + @Override + @SuppressWarnings("unchecked") + public Single transform(T request) { + String previousValue = ((TestContextualRequest) request).value(); + TestContextualRequest newRequest = + new TestContextualRequest(request.context(), prefixToAdd + previousValue + suffixToAdd); + return Single.just((T) newRequest); + } + } + + @Value + @Accessors(fluent = true) + private static class TestContextualRequest implements ContextualRequest { + GraphQlRequestContext context; + String value; + } +} diff --git a/hypertrace-core-graphql-span-schema/build.gradle.kts b/hypertrace-core-graphql-span-schema/build.gradle.kts index 6fca5dcc..1123df2b 100644 --- a/hypertrace-core-graphql-span-schema/build.gradle.kts +++ b/hypertrace-core-graphql-span-schema/build.gradle.kts @@ -28,6 +28,7 @@ dependencies { implementation(project(":hypertrace-core-graphql-deserialization")) implementation(project(":hypertrace-core-graphql-schema-utils")) implementation(project(":hypertrace-core-graphql-attribute-scope-constants")) + implementation(project(":hypertrace-core-graphql-request-transformation")) testImplementation("org.junit.jupiter:junit-jupiter") testImplementation("com.fasterxml.jackson.core:jackson-databind") diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanDao.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanDao.java index 67a5f9d9..7fc406d9 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanDao.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanDao.java @@ -6,6 +6,7 @@ import javax.inject.Inject; import javax.inject.Singleton; import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.core.graphql.request.transformation.RequestTransformer; import org.hypertrace.core.graphql.span.request.SpanRequest; import org.hypertrace.core.graphql.span.schema.SpanResultSet; import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; @@ -23,6 +24,7 @@ class GatewayServiceSpanDao implements SpanDao { private final GatewayServiceSpanConverter spanConverter; private final SpanLogEventDao spanLogEventDao; private final GraphQlServiceConfig serviceConfig; + private final RequestTransformer requestTransformer; @Inject GatewayServiceSpanDao( @@ -31,19 +33,22 @@ class GatewayServiceSpanDao implements SpanDao { GrpcContextBuilder grpcContextBuilder, GatewayServiceSpanRequestBuilder requestBuilder, GatewayServiceSpanConverter spanConverter, - SpanLogEventDao spanLogEventDao) { + SpanLogEventDao spanLogEventDao, + RequestTransformer requestTransformer) { this.grpcContextBuilder = grpcContextBuilder; this.requestBuilder = requestBuilder; this.spanConverter = spanConverter; this.spanLogEventDao = spanLogEventDao; this.gatewayServiceStub = gatewayServiceFutureStub; this.serviceConfig = serviceConfig; + this.requestTransformer = requestTransformer; } @Override public Single getSpans(SpanRequest request) { - return this.requestBuilder - .buildRequest(request) + return this.requestTransformer + .transform(request) + .flatMap(this.requestBuilder::buildRequest) .flatMap( serverRequest -> this.makeRequest(request.spanEventsRequest().context(), serverRequest)) .flatMap(serverResponse -> spanLogEventDao.fetchLogEvents(request, serverResponse)) diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanDaoModule.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanDaoModule.java index 36aff948..b3048f2a 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanDaoModule.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanDaoModule.java @@ -17,6 +17,7 @@ import org.hypertrace.core.graphql.common.utils.BiConverter; import org.hypertrace.core.graphql.common.utils.Converter; import org.hypertrace.core.graphql.deserialization.ArgumentDeserializer; +import org.hypertrace.core.graphql.request.transformation.RequestTransformer; import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; import org.hypertrace.core.graphql.utils.grpc.GrpcContextBuilder; @@ -40,6 +41,7 @@ protected void configure() { requireBinding(FilterRequestBuilder.class); requireBinding(ArgumentDeserializer.class); requireBinding(AttributeStore.class); + requireBinding(RequestTransformer.class); requireBinding( Key.get(new TypeLiteral, Set>>() {})); diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/DefaultSpanRequestBuilder.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/DefaultSpanRequestBuilder.java index 1f1b8fc2..812a9a38 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/DefaultSpanRequestBuilder.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/DefaultSpanRequestBuilder.java @@ -44,7 +44,7 @@ public Single build( OrderArgument.class), logEventAttributeRequestBuilder.buildAttributeRequest(context, selectionSet), (resultSetRequest, logEventAttributeRequest) -> - new DefaultSpanRequest(resultSetRequest, logEventAttributeRequest)); + new DefaultSpanRequest(context, resultSetRequest, logEventAttributeRequest)); } @Override @@ -58,12 +58,13 @@ public Single build( context, HypertraceCoreAttributeScopeString.SPAN, arguments, spanAttributes), logEventAttributeRequestBuilder.buildAttributeRequest(context, logAttributes), (resultSetRequest, logEventAttributeRequest) -> - new DefaultSpanRequest(resultSetRequest, logEventAttributeRequest)); + new DefaultSpanRequest(context, resultSetRequest, logEventAttributeRequest)); } @Value @Accessors(fluent = true) private static class DefaultSpanRequest implements SpanRequest { + GraphQlRequestContext context; ResultSetRequest spanEventsRequest; Collection logEventAttributes; } diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/SpanRequest.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/SpanRequest.java index 73312ca9..471debb3 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/SpanRequest.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/SpanRequest.java @@ -2,10 +2,11 @@ import java.util.Collection; import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.request.ContextualRequest; import org.hypertrace.core.graphql.common.request.ResultSetRequest; import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; -public interface SpanRequest { +public interface SpanRequest extends ContextualRequest { ResultSetRequest spanEventsRequest(); Collection logEventAttributes(); diff --git a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/DaoTestUtil.java b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/DaoTestUtil.java index 8503231f..d733c1e2 100644 --- a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/DaoTestUtil.java +++ b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/DaoTestUtil.java @@ -74,7 +74,7 @@ static class NormalizedFilter implements FilterArgument { @Value @Accessors(fluent = true) static class DefaultSpanRequest implements SpanRequest { - + GraphQlRequestContext context; ResultSetRequest spanEventsRequest; Collection logEventAttributes; } diff --git a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilderTest.java b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilderTest.java index ed4e71b8..c525371b 100644 --- a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilderTest.java +++ b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilderTest.java @@ -149,7 +149,7 @@ void testBuildRequest() { List.of(), Collections.emptyList(), Optional.empty()); - SpanRequest spanRequest = new DefaultSpanRequest(resultSetRequest, logAttributeRequests); + SpanRequest spanRequest = new DefaultSpanRequest(null, resultSetRequest, logAttributeRequests); LogEventsRequest expectedLogEventsRequest = LogEventsRequest.newBuilder() @@ -190,7 +190,7 @@ void testBuildRequest_addSpanId() { List.of(), Collections.emptyList(), Optional.empty()); - SpanRequest spanRequest = new DefaultSpanRequest(resultSetRequest, logAttributeRequests); + SpanRequest spanRequest = new DefaultSpanRequest(null, resultSetRequest, logAttributeRequests); LogEventsRequest expectedLogEventsRequest = LogEventsRequest.newBuilder() diff --git a/hypertrace-core-graphql-trace-schema/build.gradle.kts b/hypertrace-core-graphql-trace-schema/build.gradle.kts index 69d7cc12..ffeb5590 100644 --- a/hypertrace-core-graphql-trace-schema/build.gradle.kts +++ b/hypertrace-core-graphql-trace-schema/build.gradle.kts @@ -23,4 +23,5 @@ dependencies { implementation(project(":hypertrace-core-graphql-common-schema")) implementation(project(":hypertrace-core-graphql-attribute-store")) implementation(project(":hypertrace-core-graphql-deserialization")) + implementation(project(":hypertrace-core-graphql-request-transformation")) } diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceDao.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceDao.java index e1f55c62..e75c472b 100644 --- a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceDao.java +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceDao.java @@ -7,6 +7,7 @@ import javax.inject.Inject; import javax.inject.Singleton; import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.core.graphql.request.transformation.RequestTransformer; import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; import org.hypertrace.core.graphql.trace.request.TraceRequest; import org.hypertrace.core.graphql.trace.schema.TraceResultSet; @@ -25,6 +26,7 @@ class GatewayServiceTraceDao implements TraceDao { private final GatewayServiceTraceRequestBuilder requestBuilder; private final GatewayServiceTraceConverter traceConverter; private final GraphQlServiceConfig serviceConfig; + private final RequestTransformer requestTransformer; @Inject GatewayServiceTraceDao( @@ -33,11 +35,13 @@ class GatewayServiceTraceDao implements TraceDao { GrpcContextBuilder grpcContextBuilder, GrpcChannelRegistry channelRegistry, GatewayServiceTraceRequestBuilder requestBuilder, - GatewayServiceTraceConverter traceConverter) { + GatewayServiceTraceConverter traceConverter, + RequestTransformer requestTransformer) { this.grpcContextBuilder = grpcContextBuilder; this.requestBuilder = requestBuilder; this.traceConverter = traceConverter; this.serviceConfig = serviceConfig; + this.requestTransformer = requestTransformer; this.gatewayServiceStub = GatewayServiceGrpc.newFutureStub( @@ -48,8 +52,9 @@ class GatewayServiceTraceDao implements TraceDao { @Override public Single getTraces(TraceRequest request) { - return this.requestBuilder - .buildRequest(request) + return this.requestTransformer + .transform(request) + .flatMap(this.requestBuilder::buildRequest) .flatMap(serverRequest -> this.makeRequest(request.context(), serverRequest)) .flatMap( serverResponse -> diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/TraceDaoModule.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/TraceDaoModule.java index 20775531..711dddd7 100644 --- a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/TraceDaoModule.java +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/TraceDaoModule.java @@ -14,6 +14,7 @@ import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; import org.hypertrace.core.graphql.common.utils.BiConverter; import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.core.graphql.request.transformation.RequestTransformer; import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; import org.hypertrace.core.graphql.utils.grpc.GrpcContextBuilder; @@ -31,6 +32,7 @@ protected void configure() { requireBinding(GraphQlServiceConfig.class); requireBinding(GrpcContextBuilder.class); requireBinding(GrpcChannelRegistry.class); + requireBinding(RequestTransformer.class); requireBinding( Key.get(new TypeLiteral, Set>>() {})); diff --git a/settings.gradle.kts b/settings.gradle.kts index d4ccf486..16950153 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -31,4 +31,5 @@ include(":hypertrace-core-graphql-attribute-scope-constants") include(":hypertrace-core-graphql-rx-utils") include(":hypertrace-core-graphql-platform") include(":hypertrace-core-graphql-test-platform") -include(":hypertrace-core-graphql-log-event-schema") \ No newline at end of file +include(":hypertrace-core-graphql-log-event-schema") +include(":hypertrace-core-graphql-request-transformation") \ No newline at end of file From 7171477fddfe62903233bd9a77810e8623163e00 Mon Sep 17 00:00:00 2001 From: Kshitiz Saxena <84707889+saxenakshitiz@users.noreply.github.com> Date: Fri, 27 Aug 2021 15:11:03 +0530 Subject: [PATCH 071/173] Add labels config service as a dependency (#73) Co-authored-by: saxenakshitiz --- hypertrace-core-graphql-platform/build.gradle.kts | 1 + 1 file changed, 1 insertion(+) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 9e2210dd..319f9af6 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -10,6 +10,7 @@ dependencies { api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.5.1") api("org.hypertrace.gateway.service:gateway-service-api:0.1.59") api("org.hypertrace.core.attribute.service:attribute-service-api:0.9.3") + api("org.hypertrace.config.service:labels-config-service-api:0.1.8") api("com.google.inject:guice:4.2.3") api("com.graphql-java:graphql-java:15.0") From 0a1d5ff113a6766399e76852e52f7d4a7d441217 Mon Sep 17 00:00:00 2001 From: Kshitiz Saxena <84707889+saxenakshitiz@users.noreply.github.com> Date: Fri, 27 Aug 2021 15:29:48 +0530 Subject: [PATCH 072/173] Revert "Add labels config service as a dependency (#73)" (#75) This reverts commit 7171477fddfe62903233bd9a77810e8623163e00. --- hypertrace-core-graphql-platform/build.gradle.kts | 1 - 1 file changed, 1 deletion(-) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 319f9af6..9e2210dd 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -10,7 +10,6 @@ dependencies { api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.5.1") api("org.hypertrace.gateway.service:gateway-service-api:0.1.59") api("org.hypertrace.core.attribute.service:attribute-service-api:0.9.3") - api("org.hypertrace.config.service:labels-config-service-api:0.1.8") api("com.google.inject:guice:4.2.3") api("com.graphql-java:graphql-java:15.0") From 2edb2710fd8645b6a1fe3369a3308707dd435926 Mon Sep 17 00:00:00 2001 From: Rishabh Singh Date: Fri, 27 Aug 2021 15:32:14 +0530 Subject: [PATCH 073/173] Upgrade gradle version (#74) --- gradle/wrapper/gradle-wrapper.properties | 2 +- settings.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 1c4bcc29..af7be50b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/settings.gradle.kts b/settings.gradle.kts index 16950153..c8213583 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,4 +1,4 @@ -rootProject.name = "hypertrace-core-graphql" +rootProject.name = "hypertrace-core-graphql-root" pluginManagement { repositories { From d9415208bc5abc5270d54757e0c283e3035fe2da Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Wed, 1 Sep 2021 15:50:22 -0700 Subject: [PATCH 074/173] refactor: use caching attribute client (#76) * refactor: use caching attribute client * chore: update snyk expiration * style: spotless --- .snyk | 2 +- .../build.gradle.kts | 2 +- .../graphql/attributes/AttributeClient.java | 57 ----- .../graphql/attributes/AttributeStore.java | 5 - .../attributes/AttributeStoreModule.java | 2 - .../attributes/CachingAttributeStore.java | 118 ++++------ .../attributes/CachingAttributeStoreTest.java | 222 ++++-------------- .../build.gradle.kts | 18 +- 8 files changed, 104 insertions(+), 322 deletions(-) delete mode 100644 hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeClient.java diff --git a/.snyk b/.snyk index 1ca9ad72..1e9092fa 100644 --- a/.snyk +++ b/.snyk @@ -5,6 +5,6 @@ ignore: SNYK-JAVA-IONETTY-1042268: - '*': reason: No replacement available - expires: 2021-09-01T00:00:00.000Z + expires: 2021-12-31T00:00:00.000Z patch: {} diff --git a/hypertrace-core-graphql-attribute-store/build.gradle.kts b/hypertrace-core-graphql-attribute-store/build.gradle.kts index 585b9e42..c974bffb 100644 --- a/hypertrace-core-graphql-attribute-store/build.gradle.kts +++ b/hypertrace-core-graphql-attribute-store/build.gradle.kts @@ -13,7 +13,7 @@ dependencies { implementation("io.reactivex.rxjava3:rxjava") implementation("com.google.guava:guava") - implementation("org.hypertrace.core.attribute.service:attribute-service-api") + implementation("org.hypertrace.core.attribute.service:caching-attribute-service-client") implementation("org.hypertrace.core.grpcutils:grpc-client-rx-utils") implementation(project(":hypertrace-core-graphql-grpc-utils")) implementation(project(":hypertrace-core-graphql-rx-utils")) diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeClient.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeClient.java deleted file mode 100644 index 38eb061a..00000000 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeClient.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.hypertrace.core.graphql.attributes; - -import static org.hypertrace.core.attribute.service.v1.AttributeServiceGrpc.AttributeServiceStub; -import static org.hypertrace.core.attribute.service.v1.AttributeServiceGrpc.newStub; - -import io.grpc.CallCredentials; -import io.reactivex.rxjava3.core.Observable; -import java.util.concurrent.TimeUnit; -import javax.inject.Inject; -import javax.inject.Singleton; -import org.hypertrace.core.attribute.service.v1.AttributeMetadata; -import org.hypertrace.core.attribute.service.v1.Empty; -import org.hypertrace.core.graphql.context.GraphQlRequestContext; -import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; -import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; -import org.hypertrace.core.graphql.utils.grpc.GrpcContextBuilder; -import org.hypertrace.core.grpcutils.client.rx.GrpcRxExecutionContext; - -@Singleton -class AttributeClient { - - private final AttributeServiceStub attributeServiceClient; - private final GrpcContextBuilder grpcContextBuilder; - private final AttributeModelTranslator translator; - private final GraphQlServiceConfig serviceConfig; - - @Inject - AttributeClient( - GraphQlServiceConfig serviceConfig, - GrpcContextBuilder grpcContextBuilder, - GrpcChannelRegistry grpcChannelRegistry, - CallCredentials credentials, - AttributeModelTranslator translator) { - this.grpcContextBuilder = grpcContextBuilder; - this.translator = translator; - this.serviceConfig = serviceConfig; - - this.attributeServiceClient = - newStub( - grpcChannelRegistry.forAddress( - serviceConfig.getAttributeServiceHost(), - serviceConfig.getAttributeServicePort())) - .withCallCredentials(credentials); - } - - public Observable queryAll(GraphQlRequestContext requestContext) { - return GrpcRxExecutionContext.forContext(this.grpcContextBuilder.build(requestContext)) - .stream( - streamObserver -> - this.attributeServiceClient - .withDeadlineAfter( - serviceConfig.getAttributeServiceTimeout().toMillis(), - TimeUnit.MILLISECONDS) - .findAll(Empty.getDefaultInstance(), streamObserver)) - .mapOptional(this.translator::translate); - } -} diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStore.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStore.java index fcfc1f53..6d3d7029 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStore.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStore.java @@ -1,9 +1,7 @@ package org.hypertrace.core.graphql.attributes; import io.reactivex.rxjava3.core.Single; -import java.util.Collection; import java.util.List; -import java.util.Map; import org.hypertrace.core.graphql.context.GraphQlRequestContext; public interface AttributeStore { @@ -11,9 +9,6 @@ public interface AttributeStore { Single get(GraphQlRequestContext context, String scope, String key); - Single> get( - GraphQlRequestContext context, String scope, Collection keys); - Single getIdAttribute(GraphQlRequestContext context, String scope); Single getForeignIdAttribute( diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStoreModule.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStoreModule.java index a53ab476..bdd80140 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStoreModule.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStoreModule.java @@ -3,7 +3,6 @@ import com.google.inject.AbstractModule; import com.google.inject.Key; import com.google.inject.multibindings.Multibinder; -import io.grpc.CallCredentials; import io.reactivex.rxjava3.core.Scheduler; import org.hypertrace.core.graphql.rx.BoundedIoScheduler; import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; @@ -19,7 +18,6 @@ protected void configure() { Multibinder.newSetBinder(binder(), IdMappingLoader.class); requireBinding(GraphQlServiceConfig.class); requireBinding(GrpcContextBuilder.class); - requireBinding(CallCredentials.class); requireBinding(GrpcChannelRegistry.class); requireBinding(Key.get(Scheduler.class, BoundedIoScheduler.class)); } diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java index 825b0f8c..55cd2cc4 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java @@ -1,61 +1,74 @@ package org.hypertrace.core.graphql.attributes; -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.CacheLoader; -import com.google.common.cache.LoadingCache; -import com.google.common.collect.ImmutableTable; -import com.google.common.collect.Table; -import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.Single; -import java.util.Collection; +import java.time.Duration; import java.util.List; -import java.util.Map; import java.util.NoSuchElementException; -import java.util.Optional; -import java.util.concurrent.TimeUnit; -import java.util.function.Function; -import java.util.stream.Collectors; import javax.inject.Inject; import javax.inject.Singleton; -import org.hypertrace.core.graphql.context.ContextualCachingKey; +import org.hypertrace.core.attribute.service.cachingclient.CachingAttributeClient; import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; +import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; +import org.hypertrace.core.graphql.utils.grpc.GrpcContextBuilder; +import org.hypertrace.core.grpcutils.client.rx.GrpcRxExecutionContext; @Singleton class CachingAttributeStore implements AttributeStore { - private final AttributeClient attributeClient; + private final CachingAttributeClient cachingAttributeClient; private final IdLookup idLookup; + private final GrpcContextBuilder grpcContextBuilder; + private final AttributeModelTranslator translator; @Inject - CachingAttributeStore(AttributeClient attributeClient, IdLookup idLookup) { - this.attributeClient = attributeClient; - this.idLookup = idLookup; + CachingAttributeStore( + IdLookup idLookup, + GrpcContextBuilder grpcContextBuilder, + AttributeModelTranslator translator, + GrpcChannelRegistry channelRegistry, + GraphQlServiceConfig serviceConfig) { + this( + idLookup, + grpcContextBuilder, + translator, + CachingAttributeClient.builder( + channelRegistry.forAddress( + serviceConfig.getAttributeServiceHost(), + serviceConfig.getAttributeServicePort())) + .withCacheExpiration(Duration.ofMinutes(5)) + .withMaximumCacheContexts(1000) + .build()); } - private final LoadingCache>> - cache = - CacheBuilder.newBuilder() - .maximumSize(1000) - .expireAfterWrite(15, TimeUnit.MINUTES) - .build(CacheLoader.from(this::loadTable)); - - @Override - public Single> getAll(GraphQlRequestContext context) { - return this.getOrInvalidate(context).map(table -> List.copyOf(table.values())); + CachingAttributeStore( + IdLookup idLookup, + GrpcContextBuilder grpcContextBuilder, + AttributeModelTranslator translator, + CachingAttributeClient cachingAttributeClient) { + this.idLookup = idLookup; + this.grpcContextBuilder = grpcContextBuilder; + this.translator = translator; + this.cachingAttributeClient = cachingAttributeClient; } @Override - public Single get(GraphQlRequestContext context, String scope, String key) { - return this.getOrInvalidate(context) - .mapOptional(table -> Optional.ofNullable(table.get(scope, key))) - .switchIfEmpty(Single.error(this.buildErrorForMissingAttribute(scope, key))); + public Single> getAll(GraphQlRequestContext requestContext) { + return GrpcRxExecutionContext.forContext(this.grpcContextBuilder.build(requestContext)) + .wrapSingle(this.cachingAttributeClient::getAll) + .flattenAsObservable(list -> list) + .mapOptional(this.translator::translate) + .toList(); } @Override - public Single> get( - GraphQlRequestContext context, String scope, Collection keys) { - return this.getOrInvalidate(context) - .flatMap(table -> this.getValuesOrError(scope, table.row(scope), keys)); + public Single get( + GraphQlRequestContext requestContext, String scope, String key) { + return GrpcRxExecutionContext.forContext(this.grpcContextBuilder.build(requestContext)) + .wrapSingle(() -> this.cachingAttributeClient.get(scope, key)) + .toMaybe() + .mapOptional(this.translator::translate) + .switchIfEmpty(Single.error(this.buildErrorForMissingAttribute(scope, key))); } @Override @@ -70,28 +83,6 @@ public Single getForeignIdAttribute( .flatMap(key -> this.get(context, scope, key)); } - private Single> loadTable(ContextualCachingKey cachingKey) { - return this.attributeClient - .queryAll(cachingKey.getContext()) - .toList() - .map(this::buildTable) - .cache(); - } - - private Table buildTable(List attributes) { - return attributes.stream() - .collect( - ImmutableTable.toImmutableTable( - AttributeModel::scope, AttributeModel::key, Function.identity())); - } - - private Single> getOrInvalidate( - GraphQlRequestContext context) { - return this.cache - .getUnchecked(context.getCachingKey()) - .doOnError(x -> this.cache.invalidate(context.getCachingKey())); - } - private Single getForeignIdKey( GraphQlRequestContext context, String scope, String foreignScope) { return this.idLookup @@ -106,19 +97,6 @@ private Single getIdKey(GraphQlRequestContext context, String scope) { .switchIfEmpty(Single.error(this.buildErrorForMissingIdMapping(scope))); } - private Single> getValuesOrError( - String scope, - Map definedAttributes, - Collection requestedAttributeKeys) { - return Observable.fromIterable(requestedAttributeKeys) - .flatMap( - key -> - definedAttributes.containsKey(key) - ? Observable.just(definedAttributes.get(key)) - : Observable.error(this.buildErrorForMissingAttribute(scope, key))) - .collect(Collectors.toUnmodifiableMap(AttributeModel::key, Function.identity())); - } - private NoSuchElementException buildErrorForMissingAttribute(String scope, String key) { return new NoSuchElementException( String.format("No attribute available for scope '%s' and key '%s'", scope, key)); diff --git a/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java index 65afce86..f5122ae0 100644 --- a/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java +++ b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java @@ -1,29 +1,23 @@ package org.hypertrace.core.graphql.attributes; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import io.reactivex.rxjava3.core.Maybe; -import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.Single; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; -import java.util.Map; import java.util.NoSuchElementException; -import org.hypertrace.core.graphql.context.ContextualCachingKey; +import java.util.Optional; +import org.hypertrace.core.attribute.service.cachingclient.CachingAttributeClient; +import org.hypertrace.core.attribute.service.v1.AttributeMetadata; import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.core.graphql.utils.grpc.GrpcContextBuilder; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Answers; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.mockito.junit.jupiter.MockitoSettings; @@ -31,164 +25,59 @@ @ExtendWith(MockitoExtension.class) @MockitoSettings class CachingAttributeStoreTest { - @Mock AttributeClient mockAttributeClient; + @Mock CachingAttributeClient mockAttributeClient; + + @Mock(answer = Answers.CALLS_REAL_METHODS) + GrpcContextBuilder mockGrpcContextBuilder; + + @Mock AttributeModelTranslator mockAttributeModeTranslator; + @Mock IdLookup mockIdLookup; - private final AttributeModel traceAttribute = - DefaultAttributeModel.builder().scope("TRACE").key("traceKey").build(); - private final AttributeModel spanAttribute = - DefaultAttributeModel.builder().scope("SPAN").key("spanKey").build(); + @Mock GraphQlRequestContext mockContext; private AttributeStore attributeStore; @BeforeEach void beforeEach() { - this.attributeStore = new CachingAttributeStore(this.mockAttributeClient, this.mockIdLookup); - } - - @Test - void cachesConsecutiveGetAllCallsWithSameCacheKey() { - List expected = List.of(spanAttribute, traceAttribute); - GraphQlRequestContext context = this.buildNewMockContext(); - when(this.mockAttributeClient.queryAll(eq(context))) - .thenReturn(Observable.fromIterable(expected)); - assertEquals(expected, this.attributeStore.getAll(context).blockingGet()); - assertEquals(expected, this.attributeStore.getAll(context).blockingGet()); - - verify(this.mockAttributeClient, times(1)).queryAll(any()); - } - - @Test - void cachesConsecutiveGetCallsWithSameCacheKey() { - GraphQlRequestContext context = this.buildNewMockContext(); - when(this.mockAttributeClient.queryAll(eq(context))) - .thenReturn(Observable.just(spanAttribute, traceAttribute)); - AttributeModel spanResult = - this.attributeStore - .get(context, this.spanAttribute.scope(), this.spanAttribute.key()) - .blockingGet(); - assertEquals(this.spanAttribute, spanResult); - - AttributeModel traceResult = - this.attributeStore - .get(context, this.traceAttribute.scope(), this.traceAttribute.key()) - .blockingGet(); - assertEquals(this.traceAttribute, traceResult); - - verify(this.mockAttributeClient, times(1)).queryAll(any()); - } - - @Test - void throwsErrorIfNoKeyMatch() { - GraphQlRequestContext context = this.buildNewMockContext(); - when(this.mockAttributeClient.queryAll(eq(context))).thenReturn(Observable.empty()); - - assertThrows( - NoSuchElementException.class, - this.attributeStore.get(context, "SPAN", "nonExistentKey")::blockingGet); - } - - @Test - void lazilyFetchesAndCachesResultsOnSubscribe() { - GraphQlRequestContext context = this.buildNewMockContext(); - // Mutable, so we can clear it after getting a Single - List attributesList = new ArrayList<>(List.of(this.spanAttribute)); - - when(this.mockAttributeClient.queryAll(eq(context))) - .thenReturn(Observable.defer(() -> Observable.fromIterable(attributesList))); - - Single> resultSingle = this.attributeStore.getAll(context); - attributesList.clear(); - assertEquals(Collections.emptyList(), resultSingle.blockingGet()); - - attributesList.add(this.spanAttribute); - assertEquals(Collections.emptyList(), resultSingle.blockingGet()); - - // Now, make a new request - assertEquals(Collections.emptyList(), this.attributeStore.getAll(context).blockingGet()); + this.attributeStore = + new CachingAttributeStore( + this.mockIdLookup, + this.mockGrpcContextBuilder, + this.mockAttributeModeTranslator, + this.mockAttributeClient); } @Test - void supportsMultipleConcurrentCacheKeys() { - GraphQlRequestContext firstContext = this.buildNewMockContext(); - GraphQlRequestContext secondContext = this.buildNewMockContext(); - AttributeModel alternateSpanAttribute = - DefaultAttributeModel.builder() - .scope(this.spanAttribute.scope()) - .key(this.spanAttribute.key()) - .displayName("some new display name") - .build(); - - when(this.mockAttributeClient.queryAll(eq(firstContext))) - .thenReturn(Observable.just(spanAttribute)); - when(this.mockAttributeClient.queryAll(eq(secondContext))) - .thenReturn(Observable.just(alternateSpanAttribute)); - - AttributeModel firstSpanResult = - this.attributeStore - .get(firstContext, this.spanAttribute.scope(), this.spanAttribute.key()) - .blockingGet(); - assertEquals(this.spanAttribute, firstSpanResult); - // Fetch it a second time to make sure it's not just the first call - assertEquals( - firstSpanResult, - this.attributeStore - .get(firstContext, this.spanAttribute.scope(), this.spanAttribute.key()) - .blockingGet()); + void supportsBasicRead() { + AttributeModel spanIdAttribute = + DefaultAttributeModel.builder().scope("SPAN").key("id").build(); + AttributeMetadata spanIdResponse = + AttributeMetadata.newBuilder().setScopeString("SPAN").setKey("id").build(); - AttributeModel secondSpanResult = - this.attributeStore - .get(secondContext, this.spanAttribute.scope(), this.spanAttribute.key()) - .blockingGet(); + when(this.mockAttributeClient.get("SPAN", "id")).thenReturn(Single.just(spanIdResponse)); + when(this.mockAttributeModeTranslator.translate(spanIdResponse)) + .thenReturn(Optional.of(spanIdAttribute)); - assertEquals(alternateSpanAttribute, secondSpanResult); - assertNotEquals(firstSpanResult, secondSpanResult); + assertEquals(spanIdAttribute, this.attributeStore.get(mockContext, "SPAN", "id").blockingGet()); - verify(this.mockAttributeClient, times(1)).queryAll(eq(firstContext)); - verify(this.mockAttributeClient, times(1)).queryAll(eq(secondContext)); - } + when(this.mockAttributeClient.getAll()).thenReturn(Single.just(List.of(spanIdResponse))); - @Test - void supportsAndCachesMultiValuedGet() { - GraphQlRequestContext context = this.buildNewMockContext(); - when(this.mockAttributeClient.queryAll(eq(context))).thenReturn(Observable.just(spanAttribute)); - this.attributeStore - .get(context, this.spanAttribute.scope(), this.spanAttribute.key()) - .blockingSubscribe(); - - Map mapResult = - this.attributeStore - .get(context, this.spanAttribute.scope(), List.of(this.spanAttribute.key())) - .blockingGet(); - assertEquals(1, mapResult.size()); - assertTrue(mapResult.containsKey(this.spanAttribute.key())); - assertEquals(this.spanAttribute, mapResult.get(this.spanAttribute.key())); - verify(this.mockAttributeClient, times(1)).queryAll(eq(context)); + assertEquals(List.of(spanIdAttribute), this.attributeStore.getAll(mockContext).blockingGet()); } @Test - void supportsAndCachesIdLookup() { - GraphQlRequestContext context = this.buildNewMockContext(); - DefaultAttributeModel spanIdAttribute = - DefaultAttributeModel.builder().scope("SPAN").key("id").build(); - - when(this.mockAttributeClient.queryAll(eq(context))) - .thenReturn(Observable.just(spanIdAttribute)); - when(this.mockIdLookup.idKey(context, "SPAN")).thenReturn(Maybe.just("id")); - - assertEquals( - spanIdAttribute, - this.attributeStore.getIdAttribute(context, spanIdAttribute.scope()).blockingGet()); - - assertEquals( - spanIdAttribute, - this.attributeStore.getIdAttribute(context, spanIdAttribute.scope()).blockingGet()); + void throwsErrorIfNoKeyMatch() { + when(this.mockAttributeClient.get(any(), any())) + .thenReturn(Single.error(new NoSuchElementException())); - verify(this.mockAttributeClient, times(1)).queryAll(eq(context)); + assertThrows( + NoSuchElementException.class, + this.attributeStore.get(mockContext, "SPAN", "nonExistentKey")::blockingGet); } @Test - void returnsErrorForMissingIdMapping() { + void throwsErrorForMissingIdMapping() { when(this.mockIdLookup.idKey(any(), any())).thenReturn(Maybe.empty()); assertThrows( NoSuchElementException.class, @@ -197,41 +86,20 @@ void returnsErrorForMissingIdMapping() { @Test void supportsForeignIdLookup() { - GraphQlRequestContext context = this.buildNewMockContext(); DefaultAttributeModel spanTraceIdAttribute = DefaultAttributeModel.builder().scope("SPAN").key("traceId").build(); + AttributeMetadata spanTraceIdResponse = + AttributeMetadata.newBuilder().setScopeString("SPAN").setKey("traceID").build(); - when(this.mockIdLookup.foreignIdKey(context, "SPAN", "TRACE")) + when(this.mockIdLookup.foreignIdKey(mockContext, "SPAN", "TRACE")) .thenReturn(Maybe.just("traceId")); - when(this.mockAttributeClient.queryAll(eq(context))) - .thenReturn(Observable.just(spanTraceIdAttribute)); + when(this.mockAttributeClient.get("SPAN", "traceId")) + .thenReturn(Single.just(spanTraceIdResponse)); + when(this.mockAttributeModeTranslator.translate(spanTraceIdResponse)) + .thenReturn(Optional.of(spanTraceIdAttribute)); assertEquals( spanTraceIdAttribute, - this.attributeStore.getForeignIdAttribute(context, "SPAN", "TRACE").blockingGet()); - } - - @Test - void retriesOnError() { - GraphQlRequestContext context = this.buildNewMockContext(); - when(this.mockAttributeClient.queryAll(eq(context))) - .thenReturn(Observable.error(IllegalStateException::new)); - - assertThrows(IllegalStateException.class, this.attributeStore.getAll(context)::blockingGet); - - when(this.mockAttributeClient.queryAll(eq(context))) - .thenReturn(Observable.just(this.spanAttribute)); - - assertEquals(List.of(this.spanAttribute), this.attributeStore.getAll(context).blockingGet()); - - verify(this.mockAttributeClient, times(2)).queryAll(any()); - } - - private GraphQlRequestContext buildNewMockContext() { - ContextualCachingKey mockCachingKey = mock(ContextualCachingKey.class); - GraphQlRequestContext mockContext = mock(GraphQlRequestContext.class); - when(mockCachingKey.getContext()).thenReturn(mockContext); - when(mockContext.getCachingKey()).thenReturn(mockCachingKey); - return mockContext; + this.attributeStore.getForeignIdAttribute(mockContext, "SPAN", "TRACE").blockingGet()); } } diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 9e2210dd..f39d324d 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -5,11 +5,11 @@ plugins { dependencies { constraints { - api("org.hypertrace.core.grpcutils:grpc-context-utils:0.5.1") - api("org.hypertrace.core.grpcutils:grpc-client-utils:0.5.1") - api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.5.1") + api("org.hypertrace.core.grpcutils:grpc-context-utils:0.6.1") + api("org.hypertrace.core.grpcutils:grpc-client-utils:0.6.1") + api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.6.1") api("org.hypertrace.gateway.service:gateway-service-api:0.1.59") - api("org.hypertrace.core.attribute.service:attribute-service-api:0.9.3") + api("org.hypertrace.core.attribute.service:caching-attribute-service-client:0.13.3") api("com.google.inject:guice:4.2.3") api("com.graphql-java:graphql-java:15.0") @@ -23,10 +23,10 @@ dependencies { api("com.typesafe:config:1.4.1") api("com.google.guava:guava:30.1-jre") api("com.graphql-java-kickstart:graphql-java-servlet:10.1.0") - api("io.grpc:grpc-api:1.36.0") - api("io.grpc:grpc-core:1.36.0") - api("io.grpc:grpc-stub:1.36.0") - api("io.grpc:grpc-context:1.36.0") + api("io.grpc:grpc-api:1.40.0") + api("io.grpc:grpc-core:1.40.0") + api("io.grpc:grpc-stub:1.40.0") + api("io.grpc:grpc-context:1.40.0") api("com.fasterxml.jackson.core:jackson-databind:2.12.3") api("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.3") api("com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.12.3") @@ -34,7 +34,7 @@ dependencies { api("io.opentelemetry:opentelemetry-proto:1.1.0-alpha") runtime("org.apache.logging.log4j:log4j-slf4j-impl:2.14.0") - runtime("io.grpc:grpc-netty:1.37.0") + runtime("io.grpc:grpc-netty:1.40.0") runtime("io.netty:netty-codec-http2:4.1.61.Final") { because("https://snyk.io/vuln/SNYK-JAVA-IONETTY-1083991") } From 461fe9557600b7568b8daf0a07fef2e5afc90f33 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Fri, 3 Sep 2021 08:18:47 -0700 Subject: [PATCH 075/173] refactor: use common channel registry (#77) --- .../grpc/DefaultGrpcChannelRegistry.java | 31 +++---------------- 1 file changed, 5 insertions(+), 26 deletions(-) diff --git a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGrpcChannelRegistry.java b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGrpcChannelRegistry.java index 7e9437ad..2bf161c5 100644 --- a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGrpcChannelRegistry.java +++ b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGrpcChannelRegistry.java @@ -1,44 +1,23 @@ package org.hypertrace.core.graphql.utils.grpc; import io.grpc.ManagedChannel; -import io.grpc.ManagedChannelBuilder; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; import javax.inject.Inject; import javax.inject.Singleton; import org.hypertrace.core.graphql.spi.lifecycle.GraphQlServiceLifecycle; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; @Singleton class DefaultGrpcChannelRegistry implements GrpcChannelRegistry { - private static final Logger LOG = LoggerFactory.getLogger(DefaultGrpcChannelRegistry.class); - private final Map channelMap = new ConcurrentHashMap<>(); - private volatile boolean isShutdown = false; + + private final org.hypertrace.core.grpcutils.client.GrpcChannelRegistry delegate = + new org.hypertrace.core.grpcutils.client.GrpcChannelRegistry(); @Inject DefaultGrpcChannelRegistry(GraphQlServiceLifecycle serviceLifecycle) { - serviceLifecycle.shutdownCompletion().thenRun(this::shutdown); + serviceLifecycle.shutdownCompletion().thenRun(this.delegate::shutdown); } @Override public ManagedChannel forAddress(String host, int port) { - assert !this.isShutdown; - String channelId = this.getChannelId(host, port); - return this.channelMap.computeIfAbsent(channelId, unused -> this.buildNewChannel(host, port)); - } - - private ManagedChannel buildNewChannel(String host, int port) { - LOG.info("Creating new channel for {}:{}", host, port); - return ManagedChannelBuilder.forAddress(host, port).usePlaintext().build(); - } - - private String getChannelId(String host, int port) { - return host + ":" + port; - } - - private void shutdown() { - channelMap.values().forEach(ManagedChannel::shutdown); - this.isShutdown = true; + return this.delegate.forPlaintextAddress(host, port); } } From f060ccc5e6790280ed4a8bf4a7850c1309fae4bb Mon Sep 17 00:00:00 2001 From: ankitchoudhary111 <35135474+ankitchoudhary111@users.noreply.github.com> Date: Fri, 24 Sep 2021 11:36:47 +0530 Subject: [PATCH 076/173] Filter out internal attributes using the internal flag (#78) * filtered out attributes using the internal flag in the getAll method * corrected mistake in if condition * filtering out internal attributes * snyk-scan fix * same version for netty libs Co-authored-by: Ankit Choudhary --- .../core/graphql/attributes/CachingAttributeStore.java | 2 ++ .../core/graphql/attributes/CachingAttributeStoreTest.java | 6 +++++- hypertrace-core-graphql-platform/build.gradle.kts | 6 +++--- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java index 55cd2cc4..2e141fee 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java @@ -7,6 +7,7 @@ import javax.inject.Inject; import javax.inject.Singleton; import org.hypertrace.core.attribute.service.cachingclient.CachingAttributeClient; +import org.hypertrace.core.attribute.service.v1.AttributeMetadataFilter; import org.hypertrace.core.graphql.context.GraphQlRequestContext; import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; @@ -36,6 +37,7 @@ class CachingAttributeStore implements AttributeStore { channelRegistry.forAddress( serviceConfig.getAttributeServiceHost(), serviceConfig.getAttributeServicePort())) + .withAttributeFilter(AttributeMetadataFilter.newBuilder().setInternal(false).build()) .withCacheExpiration(Duration.ofMinutes(5)) .withMaximumCacheContexts(1000) .build()); diff --git a/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java index f5122ae0..f507b159 100644 --- a/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java +++ b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java @@ -53,7 +53,11 @@ void supportsBasicRead() { AttributeModel spanIdAttribute = DefaultAttributeModel.builder().scope("SPAN").key("id").build(); AttributeMetadata spanIdResponse = - AttributeMetadata.newBuilder().setScopeString("SPAN").setKey("id").build(); + AttributeMetadata.newBuilder() + .setScopeString("SPAN") + .setKey("id") + .setInternal(false) + .build(); when(this.mockAttributeClient.get("SPAN", "id")).thenReturn(Single.just(spanIdResponse)); when(this.mockAttributeModeTranslator.translate(spanIdResponse)) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index f39d324d..d6dd05e9 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -9,7 +9,7 @@ dependencies { api("org.hypertrace.core.grpcutils:grpc-client-utils:0.6.1") api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.6.1") api("org.hypertrace.gateway.service:gateway-service-api:0.1.59") - api("org.hypertrace.core.attribute.service:caching-attribute-service-client:0.13.3") + api("org.hypertrace.core.attribute.service:caching-attribute-service-client:0.13.5") api("com.google.inject:guice:4.2.3") api("com.graphql-java:graphql-java:15.0") @@ -35,10 +35,10 @@ dependencies { runtime("org.apache.logging.log4j:log4j-slf4j-impl:2.14.0") runtime("io.grpc:grpc-netty:1.40.0") - runtime("io.netty:netty-codec-http2:4.1.61.Final") { + runtime("io.netty:netty-codec-http2:4.1.68.Final") { because("https://snyk.io/vuln/SNYK-JAVA-IONETTY-1083991") } - runtime("io.netty:netty-handler-proxy:4.1.61.Final") { + runtime("io.netty:netty-handler-proxy:4.1.68.Final") { because("https://snyk.io/vuln/SNYK-JAVA-IONETTY-1083991") } } From c1bb40753b58afa8046dfdddab32250057f7fd2c Mon Sep 17 00:00:00 2001 From: SJ <48863181+skjindal93@users.noreply.github.com> Date: Mon, 27 Sep 2021 12:50:57 +0530 Subject: [PATCH 077/173] Revert "Filter out internal attributes using the internal flag (#78)" (#79) This reverts commit f060ccc5e6790280ed4a8bf4a7850c1309fae4bb. --- .../core/graphql/attributes/CachingAttributeStore.java | 2 -- .../core/graphql/attributes/CachingAttributeStoreTest.java | 6 +----- hypertrace-core-graphql-platform/build.gradle.kts | 6 +++--- 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java index 2e141fee..55cd2cc4 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java @@ -7,7 +7,6 @@ import javax.inject.Inject; import javax.inject.Singleton; import org.hypertrace.core.attribute.service.cachingclient.CachingAttributeClient; -import org.hypertrace.core.attribute.service.v1.AttributeMetadataFilter; import org.hypertrace.core.graphql.context.GraphQlRequestContext; import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; @@ -37,7 +36,6 @@ class CachingAttributeStore implements AttributeStore { channelRegistry.forAddress( serviceConfig.getAttributeServiceHost(), serviceConfig.getAttributeServicePort())) - .withAttributeFilter(AttributeMetadataFilter.newBuilder().setInternal(false).build()) .withCacheExpiration(Duration.ofMinutes(5)) .withMaximumCacheContexts(1000) .build()); diff --git a/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java index f507b159..f5122ae0 100644 --- a/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java +++ b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java @@ -53,11 +53,7 @@ void supportsBasicRead() { AttributeModel spanIdAttribute = DefaultAttributeModel.builder().scope("SPAN").key("id").build(); AttributeMetadata spanIdResponse = - AttributeMetadata.newBuilder() - .setScopeString("SPAN") - .setKey("id") - .setInternal(false) - .build(); + AttributeMetadata.newBuilder().setScopeString("SPAN").setKey("id").build(); when(this.mockAttributeClient.get("SPAN", "id")).thenReturn(Single.just(spanIdResponse)); when(this.mockAttributeModeTranslator.translate(spanIdResponse)) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index d6dd05e9..f39d324d 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -9,7 +9,7 @@ dependencies { api("org.hypertrace.core.grpcutils:grpc-client-utils:0.6.1") api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.6.1") api("org.hypertrace.gateway.service:gateway-service-api:0.1.59") - api("org.hypertrace.core.attribute.service:caching-attribute-service-client:0.13.5") + api("org.hypertrace.core.attribute.service:caching-attribute-service-client:0.13.3") api("com.google.inject:guice:4.2.3") api("com.graphql-java:graphql-java:15.0") @@ -35,10 +35,10 @@ dependencies { runtime("org.apache.logging.log4j:log4j-slf4j-impl:2.14.0") runtime("io.grpc:grpc-netty:1.40.0") - runtime("io.netty:netty-codec-http2:4.1.68.Final") { + runtime("io.netty:netty-codec-http2:4.1.61.Final") { because("https://snyk.io/vuln/SNYK-JAVA-IONETTY-1083991") } - runtime("io.netty:netty-handler-proxy:4.1.68.Final") { + runtime("io.netty:netty-handler-proxy:4.1.61.Final") { because("https://snyk.io/vuln/SNYK-JAVA-IONETTY-1083991") } } From 2360aefb1aac6e35dec0d88c2419b1c614eee41a Mon Sep 17 00:00:00 2001 From: SJ <48863181+skjindal93@users.noreply.github.com> Date: Tue, 28 Sep 2021 13:31:04 +0530 Subject: [PATCH 078/173] Revert "Revert "Filter out internal attributes using the internal flag"" (#80) * Revert "Revert "Filter out internal attributes using the internal flag (#78)" (#79)" This reverts commit c1bb40753b58afa8046dfdddab32250057f7fd2c. * upgrade attribute service --- .../core/graphql/attributes/CachingAttributeStore.java | 2 ++ .../core/graphql/attributes/CachingAttributeStoreTest.java | 6 +++++- hypertrace-core-graphql-platform/build.gradle.kts | 6 +++--- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java index 55cd2cc4..2e141fee 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java @@ -7,6 +7,7 @@ import javax.inject.Inject; import javax.inject.Singleton; import org.hypertrace.core.attribute.service.cachingclient.CachingAttributeClient; +import org.hypertrace.core.attribute.service.v1.AttributeMetadataFilter; import org.hypertrace.core.graphql.context.GraphQlRequestContext; import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; @@ -36,6 +37,7 @@ class CachingAttributeStore implements AttributeStore { channelRegistry.forAddress( serviceConfig.getAttributeServiceHost(), serviceConfig.getAttributeServicePort())) + .withAttributeFilter(AttributeMetadataFilter.newBuilder().setInternal(false).build()) .withCacheExpiration(Duration.ofMinutes(5)) .withMaximumCacheContexts(1000) .build()); diff --git a/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java index f5122ae0..f507b159 100644 --- a/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java +++ b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java @@ -53,7 +53,11 @@ void supportsBasicRead() { AttributeModel spanIdAttribute = DefaultAttributeModel.builder().scope("SPAN").key("id").build(); AttributeMetadata spanIdResponse = - AttributeMetadata.newBuilder().setScopeString("SPAN").setKey("id").build(); + AttributeMetadata.newBuilder() + .setScopeString("SPAN") + .setKey("id") + .setInternal(false) + .build(); when(this.mockAttributeClient.get("SPAN", "id")).thenReturn(Single.just(spanIdResponse)); when(this.mockAttributeModeTranslator.translate(spanIdResponse)) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index f39d324d..1f073dee 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -9,7 +9,7 @@ dependencies { api("org.hypertrace.core.grpcutils:grpc-client-utils:0.6.1") api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.6.1") api("org.hypertrace.gateway.service:gateway-service-api:0.1.59") - api("org.hypertrace.core.attribute.service:caching-attribute-service-client:0.13.3") + api("org.hypertrace.core.attribute.service:caching-attribute-service-client:0.13.6") api("com.google.inject:guice:4.2.3") api("com.graphql-java:graphql-java:15.0") @@ -35,10 +35,10 @@ dependencies { runtime("org.apache.logging.log4j:log4j-slf4j-impl:2.14.0") runtime("io.grpc:grpc-netty:1.40.0") - runtime("io.netty:netty-codec-http2:4.1.61.Final") { + runtime("io.netty:netty-codec-http2:4.1.68.Final") { because("https://snyk.io/vuln/SNYK-JAVA-IONETTY-1083991") } - runtime("io.netty:netty-handler-proxy:4.1.61.Final") { + runtime("io.netty:netty-handler-proxy:4.1.68.Final") { because("https://snyk.io/vuln/SNYK-JAVA-IONETTY-1083991") } } From 29f5405da5082cc9490562ce3fbffc0210f4d8ab Mon Sep 17 00:00:00 2001 From: Kshitiz Saxena <84707889+saxenakshitiz@users.noreply.github.com> Date: Thu, 28 Oct 2021 11:22:43 +0530 Subject: [PATCH 079/173] Update gateway service api version (#82) --- hypertrace-core-graphql-platform/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 1f073dee..9e434ae0 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -8,7 +8,7 @@ dependencies { api("org.hypertrace.core.grpcutils:grpc-context-utils:0.6.1") api("org.hypertrace.core.grpcutils:grpc-client-utils:0.6.1") api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.6.1") - api("org.hypertrace.gateway.service:gateway-service-api:0.1.59") + api("org.hypertrace.gateway.service:gateway-service-api:0.1.170") api("org.hypertrace.core.attribute.service:caching-attribute-service-client:0.13.6") api("com.google.inject:guice:4.2.3") From f50dca87ddc6f4340436c2156ccbe08231274b47 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Thu, 28 Oct 2021 08:32:25 -0400 Subject: [PATCH 080/173] feat: support internal attributes inside graphql (#81) * feat: support internal attributes inside graphql * ci: fix snyk and codecov --- .github/workflows/pr-build.yml | 2 +- .github/workflows/pr-test.yml | 3 +-- .../core/graphql/attributes/AttributeStore.java | 2 +- .../graphql/attributes/CachingAttributeStore.java | 5 ++--- .../attributes/CachingAttributeStoreTest.java | 13 +++++++++++-- .../graphql/metadata/fetcher/MetadataFetcher.java | 2 +- .../metadata/fetcher/MetadataFetcherTest.java | 2 +- 7 files changed, 18 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pr-build.yml b/.github/workflows/pr-build.yml index 4521bb9b..465fc887 100644 --- a/.github/workflows/pr-build.yml +++ b/.github/workflows/pr-build.yml @@ -68,6 +68,6 @@ jobs: - name: Setup snyk uses: snyk/actions/setup@0.3.0 - name: Snyk test - run: snyk test --all-sub-projects --org=hypertrace --severity-threshold=low --policy-path=.snyk + run: snyk test --all-sub-projects --org=hypertrace --severity-threshold=low --policy-path=.snyk --remote-repo-url='${{ github.server_url }}/${{ github.repository }}.git' env: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} diff --git a/.github/workflows/pr-test.yml b/.github/workflows/pr-test.yml index 80d8ff33..b9dfe86d 100644 --- a/.github/workflows/pr-test.yml +++ b/.github/workflows/pr-test.yml @@ -34,10 +34,9 @@ jobs: args: jacocoTestReport - name: Upload coverage to Codecov - uses: codecov/codecov-action@v1 + uses: codecov/codecov-action@v2 with: name: unit test reports - fail_ci_if_error: true flags: unit - name: Publish Unit Test Results diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStore.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStore.java index 6d3d7029..0f018f83 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStore.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStore.java @@ -5,7 +5,7 @@ import org.hypertrace.core.graphql.context.GraphQlRequestContext; public interface AttributeStore { - Single> getAll(GraphQlRequestContext context); + Single> getAllExternal(GraphQlRequestContext context); Single get(GraphQlRequestContext context, String scope, String key); diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java index 2e141fee..9fe0a9a1 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java @@ -7,7 +7,6 @@ import javax.inject.Inject; import javax.inject.Singleton; import org.hypertrace.core.attribute.service.cachingclient.CachingAttributeClient; -import org.hypertrace.core.attribute.service.v1.AttributeMetadataFilter; import org.hypertrace.core.graphql.context.GraphQlRequestContext; import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; @@ -37,7 +36,6 @@ class CachingAttributeStore implements AttributeStore { channelRegistry.forAddress( serviceConfig.getAttributeServiceHost(), serviceConfig.getAttributeServicePort())) - .withAttributeFilter(AttributeMetadataFilter.newBuilder().setInternal(false).build()) .withCacheExpiration(Duration.ofMinutes(5)) .withMaximumCacheContexts(1000) .build()); @@ -55,10 +53,11 @@ class CachingAttributeStore implements AttributeStore { } @Override - public Single> getAll(GraphQlRequestContext requestContext) { + public Single> getAllExternal(GraphQlRequestContext requestContext) { return GrpcRxExecutionContext.forContext(this.grpcContextBuilder.build(requestContext)) .wrapSingle(this.cachingAttributeClient::getAll) .flattenAsObservable(list -> list) + .filter(attribute -> !attribute.getInternal()) .mapOptional(this.translator::translate) .toList(); } diff --git a/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java index f507b159..f0dcc3c8 100644 --- a/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java +++ b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java @@ -59,15 +59,24 @@ void supportsBasicRead() { .setInternal(false) .build(); + AttributeMetadata internalAttrResponse = + AttributeMetadata.newBuilder() + .setScopeString("SPAN") + .setKey("other") + .setInternal(true) + .build(); + when(this.mockAttributeClient.get("SPAN", "id")).thenReturn(Single.just(spanIdResponse)); when(this.mockAttributeModeTranslator.translate(spanIdResponse)) .thenReturn(Optional.of(spanIdAttribute)); assertEquals(spanIdAttribute, this.attributeStore.get(mockContext, "SPAN", "id").blockingGet()); - when(this.mockAttributeClient.getAll()).thenReturn(Single.just(List.of(spanIdResponse))); + when(this.mockAttributeClient.getAll()) + .thenReturn(Single.just(List.of(spanIdResponse, internalAttrResponse))); - assertEquals(List.of(spanIdAttribute), this.attributeStore.getAll(mockContext).blockingGet()); + assertEquals( + List.of(spanIdAttribute), this.attributeStore.getAllExternal(mockContext).blockingGet()); } @Test diff --git a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/fetcher/MetadataFetcher.java b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/fetcher/MetadataFetcher.java index 5783dd51..5ad55b33 100644 --- a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/fetcher/MetadataFetcher.java +++ b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/fetcher/MetadataFetcher.java @@ -30,7 +30,7 @@ static final class MetadataFetcherImpl @Override public CompletableFuture> get(DataFetchingEnvironment environment) { return this.attributeStore - .getAll(environment.getContext()) + .getAllExternal(environment.getContext()) .flatMap(this.responseBuilder::build) .toCompletionStage() .toCompletableFuture(); diff --git a/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/fetcher/MetadataFetcherTest.java b/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/fetcher/MetadataFetcherTest.java index 4def8cf7..3a677c79 100644 --- a/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/fetcher/MetadataFetcherTest.java +++ b/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/fetcher/MetadataFetcherTest.java @@ -36,7 +36,7 @@ void beforeEach() { List mockModelResult = List.of(mockModel); List mockMetadataResult = List.of(mockMetadata); when(this.mockDataFetchingEnvironment.getContext()).thenReturn(this.mockContext); - when(this.mockAttributeStore.getAll(eq(this.mockContext))) + when(this.mockAttributeStore.getAllExternal(eq(this.mockContext))) .thenReturn(Single.just(mockModelResult)); when(this.mockResponseBuilder.build(eq(mockModelResult))) .thenReturn(Single.just(mockMetadataResult)); From e7d83ae01f46a09da26160b895a4178bab259f58 Mon Sep 17 00:00:00 2001 From: Kshitiz Saxena <84707889+saxenakshitiz@users.noreply.github.com> Date: Thu, 11 Nov 2021 23:30:09 +0530 Subject: [PATCH 081/173] Upgrade grpc and grpc-utils version (#83) --- .../build.gradle.kts | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 9e434ae0..0c02870f 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -5,9 +5,9 @@ plugins { dependencies { constraints { - api("org.hypertrace.core.grpcutils:grpc-context-utils:0.6.1") - api("org.hypertrace.core.grpcutils:grpc-client-utils:0.6.1") - api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.6.1") + api("org.hypertrace.core.grpcutils:grpc-context-utils:0.6.2") + api("org.hypertrace.core.grpcutils:grpc-client-utils:0.6.2") + api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.6.2") api("org.hypertrace.gateway.service:gateway-service-api:0.1.170") api("org.hypertrace.core.attribute.service:caching-attribute-service-client:0.13.6") @@ -23,18 +23,21 @@ dependencies { api("com.typesafe:config:1.4.1") api("com.google.guava:guava:30.1-jre") api("com.graphql-java-kickstart:graphql-java-servlet:10.1.0") - api("io.grpc:grpc-api:1.40.0") - api("io.grpc:grpc-core:1.40.0") - api("io.grpc:grpc-stub:1.40.0") - api("io.grpc:grpc-context:1.40.0") + api("io.grpc:grpc-api:1.42.0") + api("io.grpc:grpc-core:1.42.0") + api("io.grpc:grpc-stub:1.42.0") + api("io.grpc:grpc-context:1.42.0") api("com.fasterxml.jackson.core:jackson-databind:2.12.3") api("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.3") api("com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.12.3") api("org.apache.commons:commons-text:1.9") api("io.opentelemetry:opentelemetry-proto:1.1.0-alpha") + api("com.google.code.gson:gson:2.8.9") { + because("https://snyk.io/vuln/SNYK-JAVA-COMGOOGLECODEGSON-1730327") + } runtime("org.apache.logging.log4j:log4j-slf4j-impl:2.14.0") - runtime("io.grpc:grpc-netty:1.40.0") + runtime("io.grpc:grpc-netty:1.42.0") runtime("io.netty:netty-codec-http2:4.1.68.Final") { because("https://snyk.io/vuln/SNYK-JAVA-IONETTY-1083991") } From e91dff62b0b515ad1c8977a1d70c4ed83bbda76d Mon Sep 17 00:00:00 2001 From: pavan-traceable <73101820+pavan-traceable@users.noreply.github.com> Date: Wed, 1 Dec 2021 19:37:48 +0530 Subject: [PATCH 082/173] Add offsetTime Scalar to Typefunction (#84) Add offsetTime Scalar to Typefunction --- .../common/schema/CommonSchemaFragment.java | 9 ++- .../schema/typefunctions/DateTimeScalar.java | 2 +- .../typefunctions/OffsetTimeScalar.java | 78 +++++++++++++++++++ .../schema/scalars/DateTimeScalarTest.java | 9 --- .../schema/scalars/OffsetTimeScalarTest.java | 72 +++++++++++++++++ 5 files changed, 158 insertions(+), 12 deletions(-) create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/OffsetTimeScalar.java create mode 100644 hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/OffsetTimeScalarTest.java diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/CommonSchemaFragment.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/CommonSchemaFragment.java index cca0b551..82b2dc31 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/CommonSchemaFragment.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/CommonSchemaFragment.java @@ -7,6 +7,7 @@ import org.hypertrace.core.graphql.common.schema.typefunctions.AttributeScopeDynamicEnum; import org.hypertrace.core.graphql.common.schema.typefunctions.DateTimeScalar; import org.hypertrace.core.graphql.common.schema.typefunctions.DurationScalar; +import org.hypertrace.core.graphql.common.schema.typefunctions.OffsetTimeScalar; import org.hypertrace.core.graphql.common.schema.typefunctions.UnknownScalar; import org.hypertrace.core.graphql.spi.schema.GraphQlSchemaFragment; @@ -16,17 +17,20 @@ class CommonSchemaFragment implements GraphQlSchemaFragment { private final UnknownScalar unknownScalar; private final AttributeScopeDynamicEnum attributeScopeDynamicEnum; private final DurationScalar durationScalar; + private final OffsetTimeScalar offsetTimeScalar; @Inject CommonSchemaFragment( DateTimeScalar dateTimeScalar, UnknownScalar unknownScalar, AttributeScopeDynamicEnum attributeScopeDynamicEnum, - DurationScalar durationScalar) { + DurationScalar durationScalar, + OffsetTimeScalar offsetTimeScalar) { this.dateTimeScalar = dateTimeScalar; this.unknownScalar = unknownScalar; this.attributeScopeDynamicEnum = attributeScopeDynamicEnum; this.durationScalar = durationScalar; + this.offsetTimeScalar = offsetTimeScalar; } @Override @@ -41,6 +45,7 @@ public List typeFunctions() { this.unknownScalar, this.dateTimeScalar, this.attributeScopeDynamicEnum, - this.durationScalar); + this.durationScalar, + this.offsetTimeScalar); } } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/DateTimeScalar.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/DateTimeScalar.java index b14b72c5..c3429f8d 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/DateTimeScalar.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/DateTimeScalar.java @@ -64,7 +64,7 @@ private Instant toInstant( @Override public boolean canBuildType(Class aClass, AnnotatedType annotatedType) { - return TemporalAccessor.class.isAssignableFrom(aClass); + return Instant.class.isAssignableFrom(aClass); } @Override diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/OffsetTimeScalar.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/OffsetTimeScalar.java new file mode 100644 index 00000000..cd035920 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/OffsetTimeScalar.java @@ -0,0 +1,78 @@ +package org.hypertrace.core.graphql.common.schema.typefunctions; + +import graphql.GraphqlErrorException; +import graphql.annotations.processor.ProcessingElementsContainer; +import graphql.annotations.processor.typeFunctions.TypeFunction; +import graphql.language.StringValue; +import graphql.schema.Coercing; +import graphql.schema.CoercingParseLiteralException; +import graphql.schema.CoercingParseValueException; +import graphql.schema.CoercingSerializeException; +import graphql.schema.GraphQLScalarType; +import java.lang.reflect.AnnotatedType; +import java.time.DateTimeException; +import java.time.OffsetTime; +import java.time.temporal.TemporalAccessor; +import java.util.function.Function; + +public class OffsetTimeScalar implements TypeFunction { + + private static final GraphQLScalarType OFFSET_TIME_SCALAR = + GraphQLScalarType.newScalar() + .name("OffsetTime") + .description("An ISO-8601 formatted OffsetTime Scalar") + .coercing( + new Coercing() { + @Override + public String serialize(Object fetcherResult) throws CoercingSerializeException { + return toOffsetTime(fetcherResult, CoercingSerializeException::new).toString(); + } + + @Override + public OffsetTime parseValue(Object input) throws CoercingParseValueException { + return toOffsetTime(input, CoercingParseValueException::new); + } + + @Override + public OffsetTime parseLiteral(Object input) throws CoercingParseLiteralException { + return toOffsetTime(input, CoercingParseLiteralException::new); + } + + private OffsetTime toOffsetTime( + Object offsetInput, Function errorWrapper) throws E { + try { + if (offsetInput instanceof TemporalAccessor) { + return OffsetTime.from((TemporalAccessor) offsetInput); + } + if (offsetInput instanceof CharSequence) { + return OffsetTime.parse((CharSequence) offsetInput); + } + if (offsetInput instanceof StringValue) { + return OffsetTime.parse(((StringValue) offsetInput).getValue()); + } + } catch (DateTimeException exception) { + throw errorWrapper.apply(exception); + } + throw errorWrapper.apply( + new DateTimeException( + String.format( + "Cannot convert provided format '%s' to OffsetTime", + offsetInput.getClass().getCanonicalName()))); + } + }) + .build(); + + @Override + public boolean canBuildType(Class aClass, AnnotatedType annotatedType) { + return OffsetTime.class.isAssignableFrom(aClass); + } + + @Override + public GraphQLScalarType buildType( + boolean input, + Class aClass, + AnnotatedType annotatedType, + ProcessingElementsContainer container) { + return OFFSET_TIME_SCALAR; + } +} diff --git a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/DateTimeScalarTest.java b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/DateTimeScalarTest.java index 4a71c9b5..5f5953c5 100644 --- a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/DateTimeScalarTest.java +++ b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/DateTimeScalarTest.java @@ -8,11 +8,7 @@ import graphql.schema.GraphQLScalarType; import java.lang.reflect.AnnotatedType; import java.time.Instant; -import java.time.LocalDateTime; -import java.time.OffsetDateTime; import java.time.ZoneOffset; -import java.time.ZonedDateTime; -import java.time.chrono.ChronoLocalDateTime; import org.hypertrace.core.graphql.common.schema.typefunctions.DateTimeScalar; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -44,11 +40,6 @@ void beforeEach() { @Test void canDetermineIfConvertible() { assertTrue(this.dateTimeFunction.canBuildType(Instant.class, this.mockAnnotatedType)); - assertTrue(this.dateTimeFunction.canBuildType(OffsetDateTime.class, this.mockAnnotatedType)); - assertTrue(this.dateTimeFunction.canBuildType(LocalDateTime.class, this.mockAnnotatedType)); - assertTrue( - this.dateTimeFunction.canBuildType(ChronoLocalDateTime.class, this.mockAnnotatedType)); - assertTrue(this.dateTimeFunction.canBuildType(ZonedDateTime.class, this.mockAnnotatedType)); } @Test diff --git a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/OffsetTimeScalarTest.java b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/OffsetTimeScalarTest.java new file mode 100644 index 00000000..ed8382ae --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/OffsetTimeScalarTest.java @@ -0,0 +1,72 @@ +package org.hypertrace.core.graphql.common.schema.scalars; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import graphql.annotations.processor.ProcessingElementsContainer; +import graphql.language.StringValue; +import graphql.schema.GraphQLScalarType; +import java.lang.reflect.AnnotatedType; +import java.time.OffsetTime; +import java.time.ZoneOffset; +import org.hypertrace.core.graphql.common.schema.typefunctions.OffsetTimeScalar; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class OffsetTimeScalarTest { + + private static final String TEST_SCALAR_TIME_STRING = "21:30:12.748+12:30"; + private static final OffsetTime TEST_OFFSET_TIME = OffsetTime.parse(TEST_SCALAR_TIME_STRING); + private OffsetTimeScalar offsetTimeFunction; + private GraphQLScalarType offsetTimeType; + @Mock AnnotatedType mockAnnotatedType; + // Can't actually mock class, but it's not used so to convey intent using the Mock class. + private final Class mockAnnotatedClass = Mock.class; + @Mock ProcessingElementsContainer mockProcessingElementsContainer; + + @BeforeEach + void beforeEach() { + this.offsetTimeFunction = new OffsetTimeScalar(); + // Can't actually mock class, but it's not used so to convey intent using + this.offsetTimeType = + this.offsetTimeFunction.buildType( + false, mockAnnotatedClass, mockAnnotatedType, mockProcessingElementsContainer); + } + + @Test + void canDetermineIfConvertible() { + assertTrue(this.offsetTimeFunction.canBuildType(OffsetTime.class, this.mockAnnotatedType)); + } + + @Test + void canConvertFromLiteral() { + assertEquals( + TEST_OFFSET_TIME, offsetTimeType.getCoercing().parseLiteral(TEST_SCALAR_TIME_STRING)); + } + + @Test + void canSerialize() { + assertEquals(TEST_SCALAR_TIME_STRING, offsetTimeType.getCoercing().serialize(TEST_OFFSET_TIME)); + assertEquals( + TEST_SCALAR_TIME_STRING, offsetTimeType.getCoercing().serialize(TEST_SCALAR_TIME_STRING)); + + assertEquals( + TEST_SCALAR_TIME_STRING, + offsetTimeType + .getCoercing() + .serialize(TEST_OFFSET_TIME.withOffsetSameLocal(ZoneOffset.ofHoursMinutes(12, 30)))); + } + + @Test + void canConvertFromValue() { + assertEquals( + TEST_OFFSET_TIME, + offsetTimeType + .getCoercing() + .parseValue(StringValue.newStringValue().value(TEST_SCALAR_TIME_STRING).build())); + } +} From 1a2bca43a38fffe5b40d5de3d326a74f42b31426 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Fri, 10 Dec 2021 10:55:41 -0500 Subject: [PATCH 083/173] fix: upgrade vulnerable log4j (#85) --- hypertrace-core-graphql-platform/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 0c02870f..c264bbec 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -36,7 +36,7 @@ dependencies { because("https://snyk.io/vuln/SNYK-JAVA-COMGOOGLECODEGSON-1730327") } - runtime("org.apache.logging.log4j:log4j-slf4j-impl:2.14.0") + runtime("org.apache.logging.log4j:log4j-slf4j-impl:2.15.0") runtime("io.grpc:grpc-netty:1.42.0") runtime("io.netty:netty-codec-http2:4.1.68.Final") { because("https://snyk.io/vuln/SNYK-JAVA-IONETTY-1083991") From fe6868bd3c3410c51ea0fa38eb58874abd5cff0f Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Fri, 17 Dec 2021 20:27:53 -0800 Subject: [PATCH 084/173] chore: upgrade log4j, netty, gradle (#87) --- gradle/wrapper/gradle-wrapper.jar | Bin 59203 -> 59536 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 257 +++++++++++------- .../build.gradle.kts | 10 +- 4 files changed, 157 insertions(+), 112 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e708b1c023ec8b20f512888fe07c5bd3ff77bb8f..7454180f2ae8848c63b8b4dea2cb829da983f2fa 100644 GIT binary patch delta 18435 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 B8dv}T delta 17845 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 X49Luk)baa85H9$5YCsTPT`SVRWMtMW diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index af7be50b..ac0b842f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 4f906e0c..1b6c7873 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,67 +17,101 @@ # ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +APP_BASE_NAME=${0##*/} # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -87,9 +121,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -98,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + JAVACMD=java which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the @@ -106,80 +140,95 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac fi -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. # For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) fi - i=`expr $i + 1` + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index c264bbec..1c52d521 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -36,13 +36,9 @@ dependencies { because("https://snyk.io/vuln/SNYK-JAVA-COMGOOGLECODEGSON-1730327") } - runtime("org.apache.logging.log4j:log4j-slf4j-impl:2.15.0") + runtime("org.apache.logging.log4j:log4j-slf4j-impl:2.16.0") runtime("io.grpc:grpc-netty:1.42.0") - runtime("io.netty:netty-codec-http2:4.1.68.Final") { - because("https://snyk.io/vuln/SNYK-JAVA-IONETTY-1083991") - } - runtime("io.netty:netty-handler-proxy:4.1.68.Final") { - because("https://snyk.io/vuln/SNYK-JAVA-IONETTY-1083991") - } + runtime("io.netty:netty-codec-http2:4.1.71.Final") + runtime("io.netty:netty-handler-proxy:4.1.71.Final") } } From dded099ea2c483f4c3752d7e708e5100b16aae42 Mon Sep 17 00:00:00 2001 From: ravisingal <62086374+ravisingal@users.noreply.github.com> Date: Sat, 18 Dec 2021 20:08:57 +0530 Subject: [PATCH 085/173] upgrade log4j version to 2.17.0 (#88) --- hypertrace-core-graphql-platform/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 1c52d521..a0c7b39e 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -36,7 +36,7 @@ dependencies { because("https://snyk.io/vuln/SNYK-JAVA-COMGOOGLECODEGSON-1730327") } - runtime("org.apache.logging.log4j:log4j-slf4j-impl:2.16.0") + runtime("org.apache.logging.log4j:log4j-slf4j-impl:2.17.0") runtime("io.grpc:grpc-netty:1.42.0") runtime("io.netty:netty-codec-http2:4.1.71.Final") runtime("io.netty:netty-handler-proxy:4.1.71.Final") From 89becdaebb502d1f8c2e5c9f0ea9869cfd9d230f Mon Sep 17 00:00:00 2001 From: Kshitiz Saxena <84707889+saxenakshitiz@users.noreply.github.com> Date: Mon, 27 Dec 2021 10:25:15 +0530 Subject: [PATCH 086/173] Upgrade jackson version from 2.12.3 to 2.12.6 (#89) --- hypertrace-core-graphql-platform/build.gradle.kts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index a0c7b39e..d8b07ae6 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -27,9 +27,9 @@ dependencies { api("io.grpc:grpc-core:1.42.0") api("io.grpc:grpc-stub:1.42.0") api("io.grpc:grpc-context:1.42.0") - api("com.fasterxml.jackson.core:jackson-databind:2.12.3") - api("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.3") - api("com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.12.3") + api("com.fasterxml.jackson.core:jackson-databind:2.12.6") + api("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.6") + api("com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.12.6") api("org.apache.commons:commons-text:1.9") api("io.opentelemetry:opentelemetry-proto:1.1.0-alpha") api("com.google.code.gson:gson:2.8.9") { From a89535a5dc9a9c5a1ffaea2763c437b02a576f87 Mon Sep 17 00:00:00 2001 From: SJ <48863181+skjindal93@users.noreply.github.com> Date: Wed, 29 Dec 2021 16:31:10 +0530 Subject: [PATCH 087/173] chore: upgrade log4j (#90) --- hypertrace-core-graphql-platform/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index d8b07ae6..b1da87bd 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -36,7 +36,7 @@ dependencies { because("https://snyk.io/vuln/SNYK-JAVA-COMGOOGLECODEGSON-1730327") } - runtime("org.apache.logging.log4j:log4j-slf4j-impl:2.17.0") + runtime("org.apache.logging.log4j:log4j-slf4j-impl:2.17.1") runtime("io.grpc:grpc-netty:1.42.0") runtime("io.netty:netty-codec-http2:4.1.71.Final") runtime("io.netty:netty-handler-proxy:4.1.71.Final") From 7be2e988f23284b99fcf9854245402e3b6bff635 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Fri, 7 Jan 2022 05:03:36 -0800 Subject: [PATCH 088/173] Attribute expressions (#91) * feat: add support for attribute expressions * feat: expression support in filter and sorting * refactor: move stuff around * refactor: more refactoring * chore: temp for testing integration * chore: more cleanup * chore: clenaup dependencies, fix tests --- .snyk | 2 +- ...ributeExpressionDeserializationConfig.java | 17 +++ .../CommonDeserializationModule.java | 3 + .../FilterArgumentDeserializationConfig.java | 4 + .../OrderArgumentDeserializationConfig.java | 4 + .../common/request/AttributeRequest.java | 9 +- .../request/AttributeRequestBuilder.java | 7 +- .../DefaultAttributeRequestBuilder.java | 46 +++++--- .../request/DefaultFilterRequestBuilder.java | 17 ++- .../DefaultResultSetRequestBuilder.java | 23 ++-- .../request/ResultSetRequestBuilder.java | 3 +- .../schema/attributes/AttributeQueryable.java | 17 ++- .../arguments/AttributeExpression.java | 56 +++++++++ .../arguments/filter/FilterArgument.java | 9 ++ .../arguments/order/OrderArgument.java | 24 +++- .../utils/attributes/AttributeAssociator.java | 5 +- .../DefaultAttributeAssociator.java | 11 +- ...rderArgumentDeserializationConfigTest.java | 7 +- .../DefaultAttributeRequestBuilderTest.java | 22 +++- .../DefaultFilterRequestBuilderTest.java | 45 ++++++- .../gateway/AttributeExpressionConverter.java | 21 ++++ .../utils/gateway/AttributeMapConverter.java | 18 ++- .../ColumnIdentifierExpressionConverter.java | 26 ---- .../utils/gateway/FilterConverter.java | 9 +- .../utils/gateway/GatewayUtilsModule.java | 10 +- .../OrderByExpressionListConverter.java | 10 +- .../SelectionExpressionSetConverter.java | 12 +- .../gateway/UnwrappedValueConverter.java | 2 +- .../AttributeExpressionConverterTest.java | 59 ++++++++++ ...lumnIdentifierExpressionConverterTest.java | 35 ------ ...ewayServiceLogEventsResponseConverter.java | 13 +- .../log/event/dao/LogEventDaoModule.java | 5 +- .../DefaultLogEventRequestBuilder.java | 6 +- .../graphql/log/event/dao/BaseDaoTest.java | 13 +- ...wayServiceLogEventsRequestBuilderTest.java | 49 ++++---- ...ServiceLogEventsResponseConverterTest.java | 66 +++++++---- .../build.gradle.kts | 20 ++-- .../span/dao/GatewayServiceSpanConverter.java | 16 ++- .../core/graphql/span/dao/SpanDaoModule.java | 7 +- .../graphql/span/dao/SpanLogEventDao.java | 3 +- .../span/dao/SpanLogEventRequestBuilder.java | 8 +- .../dao/SpanLogEventResponseConverter.java | 35 ++++-- .../core/graphql/span/export/ExportSpan.java | 64 +++++----- .../span/export/ExportSpanConstants.java | 25 ++-- .../request/DefaultSpanRequestBuilder.java | 9 +- .../LogEventAttributeRequestBuilder.java | 11 +- .../span/request/SpanRequestBuilder.java | 5 +- .../core/graphql/span/dao/DaoTestUtil.java | 111 +++++++++--------- .../dao/SpanLogEventRequestBuilderTest.java | 28 ++--- .../SpanLogEventResponseConverterTest.java | 27 +++-- .../graphql/span/export/ExportSpanTest.java | 50 ++++++-- .../dao/GatewayServiceTraceConverter.java | 16 ++- .../graphql/trace/dao/TraceDaoModule.java | 5 +- 53 files changed, 737 insertions(+), 388 deletions(-) create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/AttributeExpressionDeserializationConfig.java create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/arguments/AttributeExpression.java create mode 100644 hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/AttributeExpressionConverter.java delete mode 100644 hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/ColumnIdentifierExpressionConverter.java create mode 100644 hypertrace-core-graphql-gateway-service-utils/src/test/java/org/hypertrace/core/graphql/utils/gateway/AttributeExpressionConverterTest.java delete mode 100644 hypertrace-core-graphql-gateway-service-utils/src/test/java/org/hypertrace/core/graphql/utils/gateway/ColumnIdentifierExpressionConverterTest.java diff --git a/.snyk b/.snyk index 1e9092fa..154d7794 100644 --- a/.snyk +++ b/.snyk @@ -5,6 +5,6 @@ ignore: SNYK-JAVA-IONETTY-1042268: - '*': reason: No replacement available - expires: 2021-12-31T00:00:00.000Z + expires: 2022-03-31T00:00:00.000Z patch: {} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/AttributeExpressionDeserializationConfig.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/AttributeExpressionDeserializationConfig.java new file mode 100644 index 00000000..5d6959b8 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/AttributeExpressionDeserializationConfig.java @@ -0,0 +1,17 @@ +package org.hypertrace.core.graphql.common.deserialization; + +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; +import org.hypertrace.core.graphql.deserialization.ArgumentDeserializationConfig; + +class AttributeExpressionDeserializationConfig implements ArgumentDeserializationConfig { + + @Override + public String getArgumentKey() { + return AttributeExpression.ARGUMENT_NAME; + } + + @Override + public Class getArgumentSchema() { + return AttributeExpression.class; + } +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/CommonDeserializationModule.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/CommonDeserializationModule.java index 9aecb920..f53cc00d 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/CommonDeserializationModule.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/CommonDeserializationModule.java @@ -48,6 +48,9 @@ protected void configure() { .toInstance( ArgumentDeserializationConfig.forPrimitive( SpaceArgument.ARGUMENT_NAME, SpaceArgument.class)); + deserializationConfigMultibinder + .addBinding() + .to(AttributeExpressionDeserializationConfig.class); requireBinding(Key.get(new TypeLiteral>() {})); } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/FilterArgumentDeserializationConfig.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/FilterArgumentDeserializationConfig.java index 1385d4e0..87a42d0a 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/FilterArgumentDeserializationConfig.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/FilterArgumentDeserializationConfig.java @@ -9,6 +9,7 @@ import lombok.Value; import lombok.experimental.Accessors; import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterOperatorType; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterType; @@ -52,6 +53,9 @@ private static class DefaultFilterArgument implements FilterArgument { @JsonProperty(FILTER_ARGUMENT_KEY) String key; + @JsonProperty(FILTER_ARGUMENT_KEY_EXPRESSION) + AttributeExpression keyExpression; + @JsonProperty(FILTER_ARGUMENT_OPERATOR) FilterOperatorType operator; diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/OrderArgumentDeserializationConfig.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/OrderArgumentDeserializationConfig.java index 78c22050..5fd92587 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/OrderArgumentDeserializationConfig.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/deserialization/OrderArgumentDeserializationConfig.java @@ -7,6 +7,7 @@ import lombok.NoArgsConstructor; import lombok.Value; import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderDirection; import org.hypertrace.core.graphql.deserialization.ArgumentDeserializationConfig; @@ -38,5 +39,8 @@ private static class DefaultOrderArgument implements OrderArgument { @JsonProperty(ORDER_KEY_NAME) String key; + + @JsonProperty(ORDER_KEY_EXPRESSION_NAME) + AttributeExpression keyExpression; } } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/AttributeRequest.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/AttributeRequest.java index b37a3b52..64458fc9 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/AttributeRequest.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/AttributeRequest.java @@ -1,10 +1,11 @@ package org.hypertrace.core.graphql.common.request; -import org.hypertrace.core.graphql.attributes.AttributeModel; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; public interface AttributeRequest { + AttributeAssociation attributeExpression(); - AttributeModel attribute(); - - String alias(); + default String asMapKey() { + return attributeExpression().value().asAlias(); + } } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/AttributeRequestBuilder.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/AttributeRequestBuilder.java index c36ff9de..37712d0f 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/AttributeRequestBuilder.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/AttributeRequestBuilder.java @@ -6,6 +6,7 @@ import io.reactivex.rxjava3.core.Single; import java.util.stream.Stream; import org.hypertrace.core.graphql.attributes.AttributeModel; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; import org.hypertrace.core.graphql.context.GraphQlRequestContext; public interface AttributeRequestBuilder { @@ -27,8 +28,10 @@ Observable buildForAttributeQueryableFieldsAndId( String attributeScope, Stream attributeQueryableFields); - Single buildForKey( - GraphQlRequestContext context, String attributeModelScope, String attributeKey); + Single buildForAttributeExpression( + GraphQlRequestContext context, + String attributeScope, + AttributeExpression attributeExpression); AttributeRequest buildForAttribute(AttributeModel attribute); } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilder.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilder.java index 5f6a807f..ed27e43b 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilder.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilder.java @@ -11,7 +11,9 @@ import org.hypertrace.core.graphql.attributes.AttributeModel; import org.hypertrace.core.graphql.attributes.AttributeStore; import org.hypertrace.core.graphql.common.schema.attributes.AttributeQueryable; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeKeyArgument; +import org.hypertrace.core.graphql.common.utils.attributes.AttributeAssociator; import org.hypertrace.core.graphql.context.GraphQlRequestContext; import org.hypertrace.core.graphql.deserialization.ArgumentDeserializer; import org.hypertrace.core.graphql.utils.schema.GraphQlSelectionFinder; @@ -20,15 +22,18 @@ class DefaultAttributeRequestBuilder implements AttributeRequestBuilder { private final AttributeStore attributeStore; + private final AttributeAssociator attributeAssociator; private final ArgumentDeserializer argumentDeserializer; private final GraphQlSelectionFinder selectionFinder; @Inject DefaultAttributeRequestBuilder( AttributeStore attributeStore, + AttributeAssociator attributeAssociator, ArgumentDeserializer argumentDeserializer, GraphQlSelectionFinder selectionFinder) { this.attributeStore = attributeStore; + this.attributeAssociator = attributeAssociator; this.argumentDeserializer = argumentDeserializer; this.selectionFinder = selectionFinder; } @@ -44,8 +49,10 @@ public Observable buildForAttributeQueryableSelectionSet( String attributeScope, DataFetchingFieldSelectionSet attributeQueryableSelectionSet) { return Observable.fromStream( - this.getAttributeKeysForAttributeQueryableSelectionSet(attributeQueryableSelectionSet)) - .flatMapSingle(key -> this.buildForKey(context, attributeScope, key)) + this.getAttributeExpressionsForAttributeQueryableSelectionSet( + attributeQueryableSelectionSet)) + .flatMapSingle( + expression -> this.buildForAttributeExpression(context, attributeScope, expression)) .distinct(); } @@ -73,40 +80,43 @@ public Observable buildForAttributeQueryableFieldsAndId( } @Override - public Single buildForKey( - GraphQlRequestContext context, String requestScope, String attributeKey) { - return this.attributeStore - .get(context, requestScope, attributeKey) - .map(this::buildForAttribute); + public Single buildForAttributeExpression( + GraphQlRequestContext context, + String attributeScope, + AttributeExpression attributeExpression) { + return this.attributeAssociator + .associateAttribute(context, attributeScope, attributeExpression, attributeExpression.key()) + .map(DefaultAttributeRequest::new); } @Override public AttributeRequest buildForAttribute(AttributeModel attribute) { - return new DefaultAttributeRequest(attribute); + return new DefaultAttributeRequest( + AttributeAssociation.of(attribute, AttributeExpression.forAttributeKey(attribute.key()))); } - private Stream getAttributeKeysForAttributeQueryableSelectionSet( + private Stream getAttributeExpressionsForAttributeQueryableSelectionSet( DataFetchingFieldSelectionSet selectionSet) { return this.selectionFinder .findSelections( selectionSet, SelectionQuery.namedChild(AttributeQueryable.ATTRIBUTE_FIELD_NAME)) - .flatMap(this::getArgument); + .flatMap(this::resolveAttributeExpression); } - private Stream getArgument(SelectedField attributeField) { + private Stream resolveAttributeExpression(SelectedField attributeField) { return this.argumentDeserializer - .deserializePrimitive(attributeField.getArguments(), AttributeKeyArgument.class) + .deserializeObject(attributeField.getArguments(), AttributeExpression.class) + .or( + () -> + this.argumentDeserializer + .deserializePrimitive(attributeField.getArguments(), AttributeKeyArgument.class) + .map(AttributeExpression::forAttributeKey)) .stream(); } @Value @Accessors(fluent = true) static class DefaultAttributeRequest implements AttributeRequest { - AttributeModel attribute; - - @Override - public String alias() { - return attribute.id(); - } + AttributeAssociation attributeExpression; } } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilder.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilder.java index 7f1af6b4..cc0976e2 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilder.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilder.java @@ -1,5 +1,7 @@ package org.hypertrace.core.graphql.common.request; +import static java.util.Objects.requireNonNull; + import io.reactivex.rxjava3.core.Maybe; import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.Single; @@ -12,6 +14,7 @@ import lombok.experimental.Accessors; import org.hypertrace.core.graphql.attributes.AttributeStore; import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterOperatorType; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterType; @@ -50,12 +53,17 @@ private Single> normalize( GraphQlRequestContext requestContext, String scope, FilterArgument filterArgument) { switch (filterArgument.type()) { case ATTRIBUTE: + AttributeExpression attributeExpression = + Optional.ofNullable(filterArgument.keyExpression()) + .orElseGet( + () -> + AttributeExpression.forAttributeKey(requireNonNull(filterArgument.key()))); return this.attributeAssociator.associateAttribute( requestContext, scope, new NormalizedFilter( - filterArgument.key(), filterArgument.operator(), filterArgument.value()), - FilterArgument::key); + attributeExpression, filterArgument.operator(), filterArgument.value()), + attributeExpression.key()); case ID: return Maybe.fromOptional(Optional.ofNullable(filterArgument.idType())) .map(AttributeScope::getScopeString) @@ -71,7 +79,7 @@ private Single> normalize( AttributeAssociation.of( foreignIdAttribute, new NormalizedFilter( - foreignIdAttribute.key(), + AttributeExpression.forAttributeKey(foreignIdAttribute.key()), filterArgument.operator(), filterArgument.value()))); default: @@ -85,7 +93,8 @@ private Single> normalize( @Accessors(fluent = true) private static class NormalizedFilter implements FilterArgument { FilterType type = FilterType.ATTRIBUTE; - String key; + String key = null; + AttributeExpression keyExpression; FilterOperatorType operator; Object value; String idScope = null; diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilder.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilder.java index ec0d83e2..63bbe7c7 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilder.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilder.java @@ -17,6 +17,7 @@ import lombok.Value; import lombok.experimental.Accessors; import org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; import org.hypertrace.core.graphql.common.schema.results.ResultSet; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; @@ -98,7 +99,11 @@ public Single> build( return zip( this.attributeAssociator - .associateAttributes(context, requestScope, requestedOrders, OrderArgument::key) + .associateAttributes( + context, + requestScope, + requestedOrders, + arg -> arg.resolvedKeyExpression().key()) .collect(Collectors.toUnmodifiableList()), this.filterRequestBuilder.build(context, requestScope, requestedFilters), (orders, filters) -> @@ -149,7 +154,7 @@ public Single> build( GraphQlRequestContext context, String requestScope, Map arguments, - List attributes) { + List attributeExpressions) { int limit = this.argumentDeserializer .deserializePrimitive(arguments, LimitArgument.class) @@ -166,7 +171,8 @@ public Single> build( .orElse(Collections.emptyList()); return zip( - this.getAttributeRequests(context, requestScope, attributes).collect(Collectors.toList()), + this.getAttributeRequests(context, requestScope, attributeExpressions) + .collect(Collectors.toList()), this.attributeRequestBuilder.buildForId(context, requestScope), this.filterRequestBuilder.build(context, requestScope, requestedFilters), (attributeRequests, idAttribute, filters) -> @@ -183,12 +189,15 @@ public Single> build( } private Observable getAttributeRequests( - GraphQlRequestContext context, String requestScope, List attributes) { - return Observable.fromIterable(attributes) + GraphQlRequestContext context, + String requestScope, + List attributeExpressions) { + return Observable.fromIterable(attributeExpressions) .distinct() .flatMapSingle( - attributeKey -> - this.attributeRequestBuilder.buildForKey(context, requestScope, attributeKey)); + attributeExpression -> + this.attributeRequestBuilder.buildForAttributeExpression( + context, requestScope, attributeExpression)); } private Stream getAttributeQueryableFields( diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequestBuilder.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequestBuilder.java index ce22126f..b8005b0d 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequestBuilder.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequestBuilder.java @@ -9,6 +9,7 @@ import java.util.Optional; import java.util.stream.Stream; import org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; import org.hypertrace.core.graphql.context.GraphQlRequestContext; @@ -42,5 +43,5 @@ Single> build( GraphQlRequestContext context, String requestScope, Map arguments, - List attributes); + List attributeExpressions); } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeQueryable.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeQueryable.java index c52da8df..277752e5 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeQueryable.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeQueryable.java @@ -1,8 +1,12 @@ package org.hypertrace.core.graphql.common.schema.attributes; +import static java.util.Objects.requireNonNull; + import graphql.annotations.annotationTypes.GraphQLField; import graphql.annotations.annotationTypes.GraphQLName; -import graphql.annotations.annotationTypes.GraphQLNonNull; +import java.util.Optional; +import javax.annotation.Nullable; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeKeyArgument; public interface AttributeQueryable { @@ -11,5 +15,14 @@ public interface AttributeQueryable { @GraphQLField @GraphQLName(ATTRIBUTE_FIELD_NAME) - Object attribute(@GraphQLName(AttributeKeyArgument.ARGUMENT_NAME) @GraphQLNonNull String key); + default Object attribute( + @Deprecated @GraphQLName(AttributeKeyArgument.ARGUMENT_NAME) @Nullable String key, + @GraphQLName(AttributeExpression.ARGUMENT_NAME) @Nullable AttributeExpression expression) { + return attribute( + Optional.ofNullable(expression) + .orElseGet(() -> AttributeExpression.forAttributeKey(requireNonNull(key)))); + } + + // Once callers are migrated off using the string, we'll remove it and use this api only + Object attribute(@GraphQLName(AttributeExpression.ARGUMENT_NAME) AttributeExpression expression); } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/arguments/AttributeExpression.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/arguments/AttributeExpression.java new file mode 100644 index 00000000..6cae4f39 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/arguments/AttributeExpression.java @@ -0,0 +1,56 @@ +package org.hypertrace.core.graphql.common.schema.attributes.arguments; + +import com.fasterxml.jackson.annotation.JsonProperty; +import graphql.annotations.annotationTypes.GraphQLConstructor; +import graphql.annotations.annotationTypes.GraphQLField; +import graphql.annotations.annotationTypes.GraphQLName; +import graphql.annotations.annotationTypes.GraphQLNonNull; +import java.util.Optional; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import lombok.Value; +import lombok.experimental.Accessors; + +@Value +@Accessors(fluent = true) +@GraphQLName(AttributeExpression.TYPE_NAME) +public class AttributeExpression { + public static final String ARGUMENT_NAME = "expression"; + static final String TYPE_NAME = "AttributeExpression"; + + private static final String ATTRIBUTE_KEY = "key"; + private static final String SUBPATH = "subpath"; + + @GraphQLField + @GraphQLNonNull + @GraphQLName(ATTRIBUTE_KEY) + @JsonProperty(ATTRIBUTE_KEY) + String key; + + @GraphQLField + @GraphQLName(SUBPATH) + @JsonProperty(SUBPATH) + Optional subpath; + + @GraphQLConstructor + public AttributeExpression( + @GraphQLName(ATTRIBUTE_KEY) String key, @GraphQLName(SUBPATH) @Nullable String subpath) { + this.key = key; + this.subpath = Optional.ofNullable(subpath); + } + + private AttributeExpression() { + this.key = null; + this.subpath = Optional.empty(); + } + + public String asAlias() { + return subpath() + .map(subpath -> String.format("%s.%s", this.key(), subpath)) + .orElseGet(this::key); + } + + public static AttributeExpression forAttributeKey(@Nonnull String key) { + return new AttributeExpression(key, null); + } +} diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterArgument.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterArgument.java index 2d5be8f7..fcf1e3c0 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterArgument.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterArgument.java @@ -6,6 +6,7 @@ import graphql.annotations.annotationTypes.GraphQLNonNull; import javax.annotation.Nullable; import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; @GraphQLName(FilterArgument.TYPE_NAME) public interface FilterArgument { @@ -13,6 +14,7 @@ public interface FilterArgument { String ARGUMENT_NAME = "filterBy"; String FILTER_ARGUMENT_TYPE = "type"; String FILTER_ARGUMENT_KEY = "key"; + String FILTER_ARGUMENT_KEY_EXPRESSION = "keyExpression"; String FILTER_ARGUMENT_OPERATOR = "operator"; String FILTER_ARGUMENT_VALUE = "value"; @Deprecated String FILTER_ARGUMENT_ID_TYPE = "idType"; @@ -26,8 +28,15 @@ public interface FilterArgument { @GraphQLField @GraphQLName(FILTER_ARGUMENT_KEY) @Nullable + @GraphQLDeprecate + @Deprecated String key(); + @GraphQLField + @GraphQLName(FILTER_ARGUMENT_KEY_EXPRESSION) + @Nullable + AttributeExpression keyExpression(); + @GraphQLField @GraphQLNonNull @GraphQLName(FILTER_ARGUMENT_OPERATOR) diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/order/OrderArgument.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/order/OrderArgument.java index 61937efe..74dcb951 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/order/OrderArgument.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/order/OrderArgument.java @@ -1,22 +1,42 @@ package org.hypertrace.core.graphql.common.schema.results.arguments.order; +import static java.util.Objects.requireNonNull; +import static org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression.forAttributeKey; + +import graphql.annotations.annotationTypes.GraphQLDeprecate; import graphql.annotations.annotationTypes.GraphQLField; import graphql.annotations.annotationTypes.GraphQLName; -import graphql.annotations.annotationTypes.GraphQLNonNull; +import java.util.Optional; +import javax.annotation.Nullable; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; @GraphQLName(OrderArgument.TYPE_NAME) public interface OrderArgument { String ARGUMENT_NAME = "orderBy"; // TODO rename to order String TYPE_NAME = "Order"; String ORDER_KEY_NAME = "key"; + String ORDER_KEY_EXPRESSION_NAME = "keyExpression"; String ORDER_DIRECTION_NAME = "direction"; @GraphQLField - @GraphQLNonNull + @Nullable @GraphQLName(ORDER_KEY_NAME) + @Deprecated + @GraphQLDeprecate String key(); + @GraphQLField + @GraphQLName(ORDER_KEY_EXPRESSION_NAME) + @Nullable + AttributeExpression keyExpression(); + @GraphQLField @GraphQLName(ORDER_DIRECTION_NAME) OrderDirection direction(); + + // Temporary way of getting the expression from either keyExpression or key field + default AttributeExpression resolvedKeyExpression() { + return Optional.ofNullable(keyExpression()) + .orElseGet(() -> forAttributeKey(requireNonNull(key()))); + } } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeAssociator.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeAssociator.java index b527111e..bcdf3b08 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeAssociator.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeAssociator.java @@ -16,8 +16,5 @@ Observable> associateAttributes( Function attributeKeyMapper); Single> associateAttribute( - GraphQlRequestContext context, - String requestScope, - T input, - Function attributeKeyMapper); + GraphQlRequestContext context, String requestScope, T input, String attributeKey); } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/DefaultAttributeAssociator.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/DefaultAttributeAssociator.java index 48827820..fd2dcd16 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/DefaultAttributeAssociator.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/DefaultAttributeAssociator.java @@ -26,17 +26,16 @@ public Observable> associateAttributes( Function attributeKeyMapper) { return Observable.fromIterable(inputs) .flatMapSingle( - input -> this.associateAttribute(context, requestScope, input, attributeKeyMapper)); + input -> + this.associateAttribute( + context, requestScope, input, attributeKeyMapper.apply(input))); } @Override public Single> associateAttribute( - GraphQlRequestContext context, - String requestScope, - T input, - Function attributeKeyMapper) { + GraphQlRequestContext context, String requestScope, T input, String attributeKey) { return this.attributeStore - .get(context, requestScope, attributeKeyMapper.apply(input)) + .get(context, requestScope, attributeKey) .map(attribute -> AttributeAssociation.of(attribute, input)); } } diff --git a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/deserialization/OrderArgumentDeserializationConfigTest.java b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/deserialization/OrderArgumentDeserializationConfigTest.java index 815b46a8..bf7e3261 100644 --- a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/deserialization/OrderArgumentDeserializationConfigTest.java +++ b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/deserialization/OrderArgumentDeserializationConfigTest.java @@ -7,6 +7,7 @@ import com.google.inject.multibindings.Multibinder; import java.util.List; import java.util.Map; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderDirection; import org.hypertrace.core.graphql.deserialization.ArgumentDeserializationConfig; @@ -54,9 +55,11 @@ void deserializesValueIfPresent() { List result = this.argumentDeserializer.deserializeObjectList(argMap, OrderArgument.class).orElseThrow(); assertEquals(2, result.size()); - assertEquals("fooKey", result.get(0).key()); + assertEquals( + AttributeExpression.forAttributeKey("fooKey"), result.get(0).resolvedKeyExpression()); Assertions.assertEquals(OrderDirection.ASC, result.get(0).direction()); - assertEquals("barKey", result.get(1).key()); + assertEquals( + AttributeExpression.forAttributeKey("barKey"), result.get(1).resolvedKeyExpression()); Assertions.assertEquals(OrderDirection.DESC, result.get(1).direction()); } } diff --git a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilderTest.java b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilderTest.java index df540da4..3026aaf9 100644 --- a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilderTest.java +++ b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilderTest.java @@ -13,7 +13,9 @@ import java.util.stream.Stream; import org.hypertrace.core.graphql.attributes.AttributeModel; import org.hypertrace.core.graphql.attributes.AttributeStore; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeKeyArgument; +import org.hypertrace.core.graphql.common.utils.attributes.AttributeAssociator; import org.hypertrace.core.graphql.context.GraphQlRequestContext; import org.hypertrace.core.graphql.deserialization.ArgumentDeserializer; import org.hypertrace.core.graphql.utils.schema.GraphQlSelectionFinder; @@ -26,6 +28,7 @@ @ExtendWith(MockitoExtension.class) class DefaultAttributeRequestBuilderTest { @Mock AttributeStore mockAttributeStore; + @Mock AttributeAssociator mockAttributeAssociator; @Mock ArgumentDeserializer mockArgumentDeserializer; @Mock GraphQlSelectionFinder mockSelectionFinder; @Mock GraphQlRequestContext mockContext; @@ -39,18 +42,26 @@ class DefaultAttributeRequestBuilderTest { void beforeEach() { this.requestBuilder = new DefaultAttributeRequestBuilder( - mockAttributeStore, mockArgumentDeserializer, mockSelectionFinder); + mockAttributeStore, + mockAttributeAssociator, + mockArgumentDeserializer, + mockSelectionFinder); } @Test void canBuildRequestForSelectionSet() { + AttributeAssociation expectedResultExpression = + AttributeAssociation.of(this.mockAttribute, AttributeExpression.forAttributeKey("fooKey")); when(this.mockSelectionFinder.findSelections(eq(this.mockSelectionSet), any())) .thenReturn(Stream.of(this.mockSelectedField)); when(this.mockArgumentDeserializer.deserializePrimitive(any(), eq(AttributeKeyArgument.class))) .thenReturn(Optional.of("fooKey")); - when(this.mockAttributeStore.get(eq(this.mockContext), eq("SPAN"), eq("fooKey"))) - .thenReturn(Single.just(this.mockAttribute)); - when(this.mockAttribute.id()).thenReturn("fooId"); + when(this.mockAttributeAssociator.associateAttribute( + eq(this.mockContext), + eq("SPAN"), + eq(AttributeExpression.forAttributeKey("fooKey")), + eq("fooKey"))) + .thenReturn(Single.just(expectedResultExpression)); List returned = this.requestBuilder @@ -59,7 +70,6 @@ void canBuildRequestForSelectionSet() { .blockingGet(); assertEquals(1, returned.size()); - assertEquals("fooId", returned.get(0).alias()); - assertEquals(this.mockAttribute, returned.get(0).attribute()); + assertEquals(expectedResultExpression, returned.get(0).attributeExpression()); } } diff --git a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilderTest.java b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilderTest.java index 3451b14c..26eab961 100644 --- a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilderTest.java +++ b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultFilterRequestBuilderTest.java @@ -1,6 +1,9 @@ package org.hypertrace.core.graphql.common.request; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.ArgumentMatchers.same; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -9,6 +12,7 @@ import org.hypertrace.core.graphql.attributes.AttributeModel; import org.hypertrace.core.graphql.attributes.AttributeStore; import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterOperatorType; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterType; @@ -69,7 +73,9 @@ void canBuildIdFilterWithEnumScope() { .get(0); assertEquals(mockForeignAttribute, builtFilter.attribute()); - assertEquals(filterAttributeKey, builtFilter.value().key()); + assertEquals( + AttributeExpression.forAttributeKey(filterAttributeKey), + builtFilter.value().keyExpression()); assertEquals(filterOperatorType, builtFilter.value().operator()); assertEquals(filterValue, builtFilter.value().value()); assertEquals(FilterType.ATTRIBUTE, builtFilter.value().type()); @@ -105,9 +111,44 @@ void canBuildIdFilterWithStringScope() { .get(0); assertEquals(mockForeignAttribute, builtFilter.attribute()); - assertEquals(filterAttributeKey, builtFilter.value().key()); + assertEquals( + AttributeExpression.forAttributeKey(filterAttributeKey), + builtFilter.value().keyExpression()); assertEquals(filterOperatorType, builtFilter.value().operator()); assertEquals(filterValue, builtFilter.value().value()); assertEquals(FilterType.ATTRIBUTE, builtFilter.value().type()); } + + @Test + void canBuildFilterWithAttributeExpression() { + final FilterType filterType = FilterType.ATTRIBUTE; + final String filterAttributeKey = "filterKey"; + final String currentScope = "scope"; + + final FilterArgument filterArgument = mock(FilterArgument.class); + when(filterArgument.type()).thenReturn(filterType); + when(filterArgument.keyExpression()) + .thenReturn(AttributeExpression.forAttributeKey(filterAttributeKey)); + + final AttributeModel mockAttribute = mock(AttributeModel.class); + when(this.mockAttributeAssociator.associateAttribute( + same(mockRequestContext), + eq(currentScope), + any(FilterArgument.class), + eq(filterAttributeKey))) + .thenAnswer( + invocation -> + Single.just(AttributeAssociation.of(mockAttribute, invocation.getArgument(2)))); + + AttributeAssociation builtFilter = + this.requestBuilder + .build(this.mockRequestContext, currentScope, List.of(filterArgument)) + .blockingGet() + .get(0); + + assertEquals(mockAttribute, builtFilter.attribute()); + assertEquals( + AttributeExpression.forAttributeKey(filterAttributeKey), + builtFilter.value().keyExpression()); + } } diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/AttributeExpressionConverter.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/AttributeExpressionConverter.java new file mode 100644 index 00000000..14cff9a1 --- /dev/null +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/AttributeExpressionConverter.java @@ -0,0 +1,21 @@ +package org.hypertrace.core.graphql.utils.gateway; + +import io.reactivex.rxjava3.core.Single; +import org.hypertrace.core.graphql.common.request.AttributeAssociation; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; +import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.gateway.service.v1.common.AttributeExpression.Builder; +import org.hypertrace.gateway.service.v1.common.Expression; + +class AttributeExpressionConverter + implements Converter, Expression> { + + @Override + public Single convert(AttributeAssociation attributeExpression) { + Builder builder = org.hypertrace.gateway.service.v1.common.AttributeExpression.newBuilder(); + builder.setAttributeId(attributeExpression.attribute().id()); + attributeExpression.value().subpath().ifPresent(builder::setSubpath); + builder.setAlias(attributeExpression.value().asAlias()); + return Single.just(Expression.newBuilder().setAttributeExpression(builder).build()); + } +} diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/AttributeMapConverter.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/AttributeMapConverter.java index 6ff799ea..8cd41c2a 100644 --- a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/AttributeMapConverter.java +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/AttributeMapConverter.java @@ -9,12 +9,14 @@ import javax.inject.Inject; import org.hypertrace.core.graphql.attributes.AttributeModel; import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; import org.hypertrace.core.graphql.common.utils.BiConverter; import org.hypertrace.core.graphql.common.utils.CollectorUtils; import org.hypertrace.gateway.service.v1.common.Value; class AttributeMapConverter - implements BiConverter, Map, Map> { + implements BiConverter< + Collection, Map, Map> { private final BiConverter valueConverter; @@ -24,20 +26,24 @@ class AttributeMapConverter } @Override - public Single> convert( + public Single> convert( Collection attributes, Map response) { return Observable.fromIterable(attributes) - .filter(attribute -> !Value.getDefaultInstance().equals(response.get(attribute.alias()))) + .filter(attribute -> !Value.getDefaultInstance().equals(response.get(attribute.asMapKey()))) .flatMapSingle(attribute -> this.buildAttributeMapEntry(attribute, response)) .distinct() .collect(CollectorUtils.immutableMapEntryCollector()); } - private Single> buildAttributeMapEntry( + private Single> buildAttributeMapEntry( AttributeRequest attributeRequest, Map response) { // Uses SimpleImmutableEntry to support null values return this.valueConverter - .convert(response.get(attributeRequest.alias()), attributeRequest.attribute()) - .map(value -> new SimpleImmutableEntry<>(attributeRequest.attribute().key(), value)); + .convert( + response.get(attributeRequest.asMapKey()), + attributeRequest.attributeExpression().attribute()) + .map( + value -> + new SimpleImmutableEntry<>(attributeRequest.attributeExpression().value(), value)); } } diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/ColumnIdentifierExpressionConverter.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/ColumnIdentifierExpressionConverter.java deleted file mode 100644 index 8d3976f5..00000000 --- a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/ColumnIdentifierExpressionConverter.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.hypertrace.core.graphql.utils.gateway; - -import io.reactivex.rxjava3.core.Single; -import javax.inject.Inject; -import org.hypertrace.core.graphql.attributes.AttributeModel; -import org.hypertrace.core.graphql.common.utils.Converter; -import org.hypertrace.gateway.service.v1.common.Expression; -import org.hypertrace.gateway.service.v1.common.Expression.Builder; - -class ColumnIdentifierExpressionConverter implements Converter { - - private final ColumnIdentifierConverter columnIdentifierConverter; - - @Inject - ColumnIdentifierExpressionConverter(ColumnIdentifierConverter columnIdentifierConverter) { - this.columnIdentifierConverter = columnIdentifierConverter; - } - - @Override - public Single convert(AttributeModel attribute) { - return this.columnIdentifierConverter - .convert(attribute) - .map(Expression.newBuilder()::setColumnIdentifier) - .map(Builder::build); - } -} diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/FilterConverter.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/FilterConverter.java index beb62be8..fcc66305 100644 --- a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/FilterConverter.java +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/FilterConverter.java @@ -16,16 +16,16 @@ class FilterConverter implements Converter>, Filter> { - private final ColumnIdentifierExpressionConverter columnIdentifierExpressionConverter; + private final AttributeExpressionConverter attributeExpressionConverter; private final OperatorConverter operatorConverter; private final LiteralConstantExpressionConverter literalConstantExpressionConverter; @Inject FilterConverter( - ColumnIdentifierExpressionConverter columnIdentifierExpressionConverter, + AttributeExpressionConverter attributeExpressionConverter, OperatorConverter operatorConverter, LiteralConstantExpressionConverter literalConstantExpressionConverter) { - this.columnIdentifierExpressionConverter = columnIdentifierExpressionConverter; + this.attributeExpressionConverter = attributeExpressionConverter; this.operatorConverter = operatorConverter; this.literalConstantExpressionConverter = literalConstantExpressionConverter; } @@ -49,7 +49,8 @@ public Single convert(Collection> f private Single buildFilter(AttributeAssociation filter) { return zip( - this.columnIdentifierExpressionConverter.convert(filter.attribute()), + this.attributeExpressionConverter.convert( + AttributeAssociation.of(filter.attribute(), filter.value().keyExpression())), this.operatorConverter.convert(filter.value().operator()), this.literalConstantExpressionConverter.convert(filter.value().value()), (key, operator, value) -> diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayUtilsModule.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayUtilsModule.java index bc57c149..169e8b52 100644 --- a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayUtilsModule.java +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayUtilsModule.java @@ -11,6 +11,7 @@ import org.hypertrace.core.graphql.attributes.AttributeModel; import org.hypertrace.core.graphql.common.request.AttributeAssociation; import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderDirection; @@ -32,7 +33,9 @@ protected void configure() { bind(Key.get( new TypeLiteral< BiConverter< - Collection, Map, Map>>() {})) + Collection, + Map, + Map>>() {})) .to(AttributeMapConverter.class); bind(Key.get(new TypeLiteral>() {})).to(UnwrappedValueConverter.class); @@ -54,8 +57,9 @@ protected void configure() { bind(Key.get(new TypeLiteral>() {})) .to(ColumnIdentifierConverter.class); - bind(Key.get(new TypeLiteral>() {})) - .to(ColumnIdentifierExpressionConverter.class); + bind(Key.get( + new TypeLiteral, Expression>>() {})) + .to(AttributeExpressionConverter.class); bind(Key.get(new TypeLiteral>() {})) .to(LiteralConstantConverter.class); diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/OrderByExpressionListConverter.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/OrderByExpressionListConverter.java index aad30a28..7c637c67 100644 --- a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/OrderByExpressionListConverter.java +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/OrderByExpressionListConverter.java @@ -15,14 +15,14 @@ class OrderByExpressionListConverter implements Converter>, List> { - private final ColumnIdentifierExpressionConverter columnExpressionConverter; + private final AttributeExpressionConverter attributeExpressionConverter; private final SortOrderConverter sortOrderConverter; @Inject OrderByExpressionListConverter( - ColumnIdentifierExpressionConverter columnExpressionConverter, + AttributeExpressionConverter attributeExpressionConverter, SortOrderConverter sortOrderConverter) { - this.columnExpressionConverter = columnExpressionConverter; + this.attributeExpressionConverter = attributeExpressionConverter; this.sortOrderConverter = sortOrderConverter; } @@ -37,7 +37,9 @@ private Single buildOrderByExpression( AttributeAssociation orderArgument) { return zip( this.sortOrderConverter.convert(orderArgument.value().direction()), - this.columnExpressionConverter.convert(orderArgument.attribute()), + this.attributeExpressionConverter.convert( + AttributeAssociation.of( + orderArgument.attribute(), orderArgument.value().resolvedKeyExpression())), (sortOrder, columnExpression) -> OrderByExpression.newBuilder() .setOrder(sortOrder) diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/SelectionExpressionSetConverter.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/SelectionExpressionSetConverter.java index a85645f2..bc9a8644 100644 --- a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/SelectionExpressionSetConverter.java +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/SelectionExpressionSetConverter.java @@ -14,11 +14,11 @@ class SelectionExpressionSetConverter implements Converter, Set> { - private final ColumnIdentifierExpressionConverter columnExpressionConverter; + private final AttributeExpressionConverter attributeExpressionConverter; @Inject - SelectionExpressionSetConverter(ColumnIdentifierExpressionConverter columnExpressionConverter) { - this.columnExpressionConverter = columnExpressionConverter; + SelectionExpressionSetConverter(AttributeExpressionConverter attributeExpressionConverter) { + this.attributeExpressionConverter = attributeExpressionConverter; } @Override @@ -30,11 +30,9 @@ public Single> convert(Collection attributeReq } private Single buildAliasedSelectionExpression(AttributeRequest attributeRequest) { - return this.columnExpressionConverter - .convert(attributeRequest.attribute()) + return this.attributeExpressionConverter + .convert(attributeRequest.attributeExpression()) .map(Expression::toBuilder) - .doOnSuccess( - builder -> builder.getColumnIdentifierBuilder().setAlias(attributeRequest.alias())) .map(Builder::build); } } diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/UnwrappedValueConverter.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/UnwrappedValueConverter.java index ebc99fa6..0f064c52 100644 --- a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/UnwrappedValueConverter.java +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/UnwrappedValueConverter.java @@ -62,7 +62,7 @@ private Single handleTimestamp(Value value, AttributeModel attributeMode if ("ns".equals(attributeModel.units())) { return Single.just(Instant.ofEpochSecond(0, value.getTimestamp())); } - return Single.just((Instant.ofEpochMilli(value.getTimestamp()))); + return Single.just(Instant.ofEpochMilli(value.getTimestamp())); } catch (Throwable t) { return Single.error(t); } diff --git a/hypertrace-core-graphql-gateway-service-utils/src/test/java/org/hypertrace/core/graphql/utils/gateway/AttributeExpressionConverterTest.java b/hypertrace-core-graphql-gateway-service-utils/src/test/java/org/hypertrace/core/graphql/utils/gateway/AttributeExpressionConverterTest.java new file mode 100644 index 00000000..49d63259 --- /dev/null +++ b/hypertrace-core-graphql-gateway-service-utils/src/test/java/org/hypertrace/core/graphql/utils/gateway/AttributeExpressionConverterTest.java @@ -0,0 +1,59 @@ +package org.hypertrace.core.graphql.utils.gateway; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.when; + +import org.hypertrace.core.graphql.attributes.AttributeModel; +import org.hypertrace.core.graphql.common.request.AttributeAssociation; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; +import org.hypertrace.gateway.service.v1.common.Expression; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class AttributeExpressionConverterTest { + @Mock AttributeModel mockAttribute; + + @Test + void convertsAttributeExpressionWithSubpath() { + org.hypertrace.gateway.service.v1.common.AttributeExpression expectedAttributeExpression = + org.hypertrace.gateway.service.v1.common.AttributeExpression.newBuilder() + .setAttributeId("EVENT.tags") + .setAlias("tags.spantag") + .setSubpath("spantag") + .build(); + + when(mockAttribute.id()).thenReturn("EVENT.tags"); + AttributeExpressionConverter attributeExpressionConverter = new AttributeExpressionConverter(); + + assertEquals( + Expression.newBuilder().setAttributeExpression(expectedAttributeExpression).build(), + attributeExpressionConverter + .convert( + AttributeAssociation.of( + this.mockAttribute, new AttributeExpression("tags", "spantag"))) + .blockingGet()); + } + + @Test + void convertsAttributeExpressionWithoutSubpath() { + org.hypertrace.gateway.service.v1.common.AttributeExpression expectedAttributeExpression = + org.hypertrace.gateway.service.v1.common.AttributeExpression.newBuilder() + .setAttributeId("EVENT.tags") + .setAlias("tags") + .build(); + + when(mockAttribute.id()).thenReturn("EVENT.tags"); + AttributeExpressionConverter attributeExpressionConverter = new AttributeExpressionConverter(); + + assertEquals( + Expression.newBuilder().setAttributeExpression(expectedAttributeExpression).build(), + attributeExpressionConverter + .convert( + AttributeAssociation.of( + this.mockAttribute, AttributeExpression.forAttributeKey("tags"))) + .blockingGet()); + } +} diff --git a/hypertrace-core-graphql-gateway-service-utils/src/test/java/org/hypertrace/core/graphql/utils/gateway/ColumnIdentifierExpressionConverterTest.java b/hypertrace-core-graphql-gateway-service-utils/src/test/java/org/hypertrace/core/graphql/utils/gateway/ColumnIdentifierExpressionConverterTest.java deleted file mode 100644 index e0ae38d8..00000000 --- a/hypertrace-core-graphql-gateway-service-utils/src/test/java/org/hypertrace/core/graphql/utils/gateway/ColumnIdentifierExpressionConverterTest.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.hypertrace.core.graphql.utils.gateway; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.when; - -import io.reactivex.rxjava3.core.Single; -import org.hypertrace.core.graphql.attributes.AttributeModel; -import org.hypertrace.gateway.service.v1.common.ColumnIdentifier; -import org.hypertrace.gateway.service.v1.common.Expression; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; - -@ExtendWith(MockitoExtension.class) -class ColumnIdentifierExpressionConverterTest { - @Mock ColumnIdentifierConverter mockColumnIdentifierConverter; - @Mock AttributeModel mockAttribute; - - @Test - void convertsColumnBasedOnAttributeId() { - ColumnIdentifier expectedColumnIdentifier = - ColumnIdentifier.newBuilder().setColumnName("foo").build(); - ColumnIdentifierExpressionConverter columnIdentifierExpressionConverter = - new ColumnIdentifierExpressionConverter(this.mockColumnIdentifierConverter); - - when(this.mockColumnIdentifierConverter.convert(any())) - .thenReturn(Single.just(expectedColumnIdentifier)); - - assertEquals( - Expression.newBuilder().setColumnIdentifier(expectedColumnIdentifier).build(), - columnIdentifierExpressionConverter.convert(this.mockAttribute).blockingGet()); - } -} diff --git a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsResponseConverter.java b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsResponseConverter.java index 4c98fe09..a5aa2981 100644 --- a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsResponseConverter.java +++ b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsResponseConverter.java @@ -8,6 +8,7 @@ import javax.inject.Inject; import lombok.experimental.Accessors; import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; import org.hypertrace.core.graphql.common.utils.BiConverter; import org.hypertrace.core.graphql.log.event.request.LogEventRequest; import org.hypertrace.core.graphql.log.event.schema.LogEvent; @@ -17,12 +18,14 @@ class GatewayServiceLogEventsResponseConverter { - private final BiConverter, Map, Map> + private final BiConverter< + Collection, Map, Map> attributeMapConverter; @Inject GatewayServiceLogEventsResponseConverter( - BiConverter, Map, Map> + BiConverter< + Collection, Map, Map> attributeMapConverter) { this.attributeMapConverter = attributeMapConverter; } @@ -47,11 +50,11 @@ private Single convert( @lombok.Value @Accessors(fluent = true) private static class ConvertedLogEvent implements LogEvent { - Map attributeValues; + Map attributeValues; @Override - public Object attribute(String key) { - return this.attributeValues.get(key); + public Object attribute(AttributeExpression attributeExpression) { + return this.attributeValues.get(attributeExpression); } } diff --git a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/LogEventDaoModule.java b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/LogEventDaoModule.java index e71ecb86..e221a361 100644 --- a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/LogEventDaoModule.java +++ b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/dao/LogEventDaoModule.java @@ -10,6 +10,7 @@ import java.util.Set; import org.hypertrace.core.graphql.common.request.AttributeAssociation; import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; import org.hypertrace.core.graphql.common.utils.BiConverter; @@ -51,6 +52,8 @@ protected void configure() { Key.get( new TypeLiteral< BiConverter< - Collection, Map, Map>>() {})); + Collection, + Map, + Map>>() {})); } } diff --git a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/DefaultLogEventRequestBuilder.java b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/DefaultLogEventRequestBuilder.java index 68d87883..afb74e78 100644 --- a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/DefaultLogEventRequestBuilder.java +++ b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/request/DefaultLogEventRequestBuilder.java @@ -105,7 +105,11 @@ Single build( context, requestScope, getAttributeQueryableFields(selectionSet)) .collect(Collectors.toUnmodifiableSet()), this.attributeAssociator - .associateAttributes(context, requestScope, requestedOrders, OrderArgument::key) + .associateAttributes( + context, + requestScope, + requestedOrders, + arg -> arg.resolvedKeyExpression().key()) .collect(Collectors.toUnmodifiableList()), this.filterRequestBuilder.build(context, requestScope, requestedFilters), (attributeRequests, orders, filters) -> diff --git a/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/BaseDaoTest.java b/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/BaseDaoTest.java index 6493d6d5..04c02b8c 100644 --- a/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/BaseDaoTest.java +++ b/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/BaseDaoTest.java @@ -12,6 +12,7 @@ import org.hypertrace.core.graphql.common.request.AttributeAssociation; import org.hypertrace.core.graphql.common.request.AttributeRequest; import org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; import org.hypertrace.core.graphql.context.GraphQlRequestContext; @@ -35,18 +36,12 @@ static class DefaultLogEventRequest implements LogEventRequest { @Value @Accessors(fluent = true) static class DefaultAttributeRequest implements AttributeRequest { - - AttributeModel attribute; - - @Override - public String alias() { - return attribute.id(); - } + AttributeAssociation attributeExpression; } @Value @Accessors(fluent = true) - class DefaultAttributeModel implements AttributeModel { + static class DefaultAttributeModel implements AttributeModel { String id; String scope; @@ -62,7 +57,7 @@ class DefaultAttributeModel implements AttributeModel { @Value @Accessors(fluent = true) - class DefaultTimeRange implements TimeRangeArgument { + static class DefaultTimeRange implements TimeRangeArgument { @JsonProperty(TIME_RANGE_ARGUMENT_START_TIME) Instant startTime; diff --git a/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsRequestBuilderTest.java b/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsRequestBuilderTest.java index 53aa4bff..3f07d071 100644 --- a/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsRequestBuilderTest.java +++ b/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsRequestBuilderTest.java @@ -18,6 +18,7 @@ import org.hypertrace.core.graphql.attributes.AttributeModelType; import org.hypertrace.core.graphql.common.request.AttributeAssociation; import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; import org.hypertrace.core.graphql.common.utils.Converter; @@ -77,29 +78,33 @@ void testBuildRequest() { Collection attributeRequests = List.of( new DefaultAttributeRequest( - new DefaultAttributeModel( - "traceId", - "LOG_EVENT", - "traceId", - "Trace Id", - AttributeModelType.STRING, - "", - false, - false, - Collections.emptyList(), - false)), + AttributeAssociation.of( + new DefaultAttributeModel( + "traceId", + "LOG_EVENT", + "traceId", + "Trace Id", + AttributeModelType.STRING, + "", + false, + false, + Collections.emptyList(), + false), + AttributeExpression.forAttributeKey("traceId"))), new DefaultAttributeRequest( - new DefaultAttributeModel( - "timestamp", - "LOG_EVENT", - "timestamp", - "Timestamp", - AttributeModelType.TIMESTAMP, - "", - false, - false, - Collections.emptyList(), - false))); + AttributeAssociation.of( + new DefaultAttributeModel( + "timestamp", + "LOG_EVENT", + "timestamp", + "Timestamp", + AttributeModelType.TIMESTAMP, + "", + false, + false, + Collections.emptyList(), + false), + AttributeExpression.forAttributeKey("timestamp")))); DefaultLogEventRequest defaultLogEventRequest = new DefaultLogEventRequest( null, diff --git a/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsResponseConverterTest.java b/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsResponseConverterTest.java index f8255252..a73b9669 100644 --- a/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsResponseConverterTest.java +++ b/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsResponseConverterTest.java @@ -16,7 +16,9 @@ import java.util.List; import java.util.Map; import org.hypertrace.core.graphql.attributes.AttributeModelType; +import org.hypertrace.core.graphql.common.request.AttributeAssociation; import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; import org.hypertrace.core.graphql.common.utils.BiConverter; import org.hypertrace.core.graphql.log.event.schema.LogEventResultSet; import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; @@ -46,7 +48,7 @@ protected void configure() { bind(GrpcChannelRegistry.class).toInstance(mock(GrpcChannelRegistry.class)); } }); - BiConverter, Map, Map> + BiConverter, Map, Map> attributeMapConverter = injector.getInstance( Key.get( @@ -54,7 +56,7 @@ protected void configure() { BiConverter< Collection, Map, - Map>>() {})); + Map>>() {})); responseConverter = new GatewayServiceLogEventsResponseConverter(attributeMapConverter); } @@ -82,29 +84,33 @@ void testConvert() { Collection attributeRequests = List.of( new DefaultAttributeRequest( - new DefaultAttributeModel( - "traceId", - "LOG_EVENT", - "traceId", - "Trace Id", - AttributeModelType.STRING, - "", - false, - false, - Collections.emptyList(), - false)), + AttributeAssociation.of( + new DefaultAttributeModel( + "traceId", + "LOG_EVENT", + "traceId", + "Trace Id", + AttributeModelType.STRING, + "", + false, + false, + Collections.emptyList(), + false), + AttributeExpression.forAttributeKey("traceId"))), new DefaultAttributeRequest( - new DefaultAttributeModel( - "timestamp", - "LOG_EVENT", - "timestamp", - "Timestamp", - AttributeModelType.TIMESTAMP, - "ns", - false, - false, - Collections.emptyList(), - false))); + AttributeAssociation.of( + new DefaultAttributeModel( + "timestamp", + "LOG_EVENT", + "timestamp", + "Timestamp", + AttributeModelType.TIMESTAMP, + "ns", + false, + false, + Collections.emptyList(), + false), + AttributeExpression.forAttributeKey("timestamp")))); DefaultLogEventRequest defaultLogEventRequest = new DefaultLogEventRequest( null, @@ -117,9 +123,17 @@ void testConvert() { LogEventResultSet logEventResultSet = responseConverter.convert(defaultLogEventRequest, logEventsResponse).blockingGet(); assertEquals(1, logEventResultSet.results().size()); - assertEquals("trace1", logEventResultSet.results().get(0).attribute("traceId")); + assertEquals( + "trace1", + logEventResultSet + .results() + .get(0) + .attribute(AttributeExpression.forAttributeKey("traceId"))); assertEquals( Instant.ofEpochSecond(0, Duration.ofMillis(startTime).toNanos()), - logEventResultSet.results().get(0).attribute("timestamp")); + logEventResultSet + .results() + .get(0) + .attribute(AttributeExpression.forAttributeKey("timestamp"))); } } diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index b1da87bd..e53fb0ae 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -5,10 +5,10 @@ plugins { dependencies { constraints { - api("org.hypertrace.core.grpcutils:grpc-context-utils:0.6.2") - api("org.hypertrace.core.grpcutils:grpc-client-utils:0.6.2") - api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.6.2") - api("org.hypertrace.gateway.service:gateway-service-api:0.1.170") + api("org.hypertrace.core.grpcutils:grpc-context-utils:0.7.0") + api("org.hypertrace.core.grpcutils:grpc-client-utils:0.7.0") + api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.7.0") + api("org.hypertrace.gateway.service:gateway-service-api:0.2.0") api("org.hypertrace.core.attribute.service:caching-attribute-service-client:0.13.6") api("com.google.inject:guice:4.2.3") @@ -21,12 +21,12 @@ dependencies { api("org.projectlombok:lombok:1.18.18") api("com.google.code.findbugs:jsr305:3.0.2") api("com.typesafe:config:1.4.1") - api("com.google.guava:guava:30.1-jre") + api("com.google.guava:guava:31.0.1-jre") api("com.graphql-java-kickstart:graphql-java-servlet:10.1.0") - api("io.grpc:grpc-api:1.42.0") - api("io.grpc:grpc-core:1.42.0") - api("io.grpc:grpc-stub:1.42.0") - api("io.grpc:grpc-context:1.42.0") + api("io.grpc:grpc-api:1.43.1") + api("io.grpc:grpc-core:1.43.1") + api("io.grpc:grpc-stub:1.43.1") + api("io.grpc:grpc-context:1.43.1") api("com.fasterxml.jackson.core:jackson-databind:2.12.6") api("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.6") api("com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.12.6") @@ -37,7 +37,7 @@ dependencies { } runtime("org.apache.logging.log4j:log4j-slf4j-impl:2.17.1") - runtime("io.grpc:grpc-netty:1.42.0") + runtime("io.grpc:grpc-netty:1.43.1") runtime("io.netty:netty-codec-http2:4.1.71.Final") runtime("io.netty:netty-handler-proxy:4.1.71.Final") } diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanConverter.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanConverter.java index 25f43029..64587153 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanConverter.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanConverter.java @@ -9,6 +9,7 @@ import javax.inject.Inject; import lombok.experimental.Accessors; import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; import org.hypertrace.core.graphql.common.utils.BiConverter; import org.hypertrace.core.graphql.log.event.schema.LogEvent; import org.hypertrace.core.graphql.log.event.schema.LogEventResultSet; @@ -20,12 +21,14 @@ class GatewayServiceSpanConverter { - private final BiConverter, Map, Map> + private final BiConverter< + Collection, Map, Map> attributeMapConverter; @Inject GatewayServiceSpanConverter( - BiConverter, Map, Map> + BiConverter< + Collection, Map, Map> attributeMapConverter) { this.attributeMapConverter = attributeMapConverter; } @@ -47,7 +50,8 @@ private Single convert( attrMap -> new ConvertedSpan( attrMap - .get(request.spanEventsRequest().idAttribute().attribute().key()) + .get( + request.spanEventsRequest().idAttribute().attributeExpression().value()) .toString(), attrMap, spanIdToLogEvents)); @@ -57,12 +61,12 @@ private Single convert( @Accessors(fluent = true) private static class ConvertedSpan implements Span { String id; - Map attributeValues; + Map attributeValues; Map> spanIdToLogEvents; @Override - public Object attribute(String key) { - return this.attributeValues.get(key); + public Object attribute(AttributeExpression attributeExpression) { + return this.attributeValues.get(attributeExpression); } @Override diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanDaoModule.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanDaoModule.java index b3048f2a..ce172161 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanDaoModule.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanDaoModule.java @@ -11,7 +11,9 @@ import org.hypertrace.core.graphql.attributes.AttributeStore; import org.hypertrace.core.graphql.common.request.AttributeAssociation; import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.request.AttributeRequestBuilder; import org.hypertrace.core.graphql.common.request.FilterRequestBuilder; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; import org.hypertrace.core.graphql.common.utils.BiConverter; @@ -42,6 +44,7 @@ protected void configure() { requireBinding(ArgumentDeserializer.class); requireBinding(AttributeStore.class); requireBinding(RequestTransformer.class); + requireBinding(AttributeRequestBuilder.class); requireBinding( Key.get(new TypeLiteral, Set>>() {})); @@ -61,6 +64,8 @@ protected void configure() { Key.get( new TypeLiteral< BiConverter< - Collection, Map, Map>>() {})); + Collection, + Map, + Map>>() {})); } } diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventDao.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventDao.java index f714ddec..f49d92e0 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventDao.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventDao.java @@ -50,7 +50,8 @@ Single fetchLogEvents( SpanRequest gqlRequest, SpansResponse spansResponse) { if (null == gqlRequest.spanEventsRequest().idAttribute() || null == gqlRequest.logEventAttributes() - || gqlRequest.logEventAttributes().isEmpty()) { + || gqlRequest.logEventAttributes().isEmpty() + || spansResponse.getSpansList().isEmpty()) { return Single.just(new SpanLogEventsResponse(spansResponse, Map.of())); } return spanLogEventRequestBuilder diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilder.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilder.java index 6f51c80e..ddeaaa97 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilder.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilder.java @@ -10,6 +10,7 @@ import java.util.Set; import java.util.stream.Collectors; import javax.inject.Inject; +import lombok.Value; import lombok.experimental.Accessors; import org.hypertrace.core.graphql.attributes.AttributeStore; import org.hypertrace.core.graphql.atttributes.scopes.HypertraceCoreAttributeScopeString; @@ -18,6 +19,7 @@ import org.hypertrace.core.graphql.common.request.AttributeRequestBuilder; import org.hypertrace.core.graphql.common.request.FilterRequestBuilder; import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterOperatorType; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterType; @@ -92,7 +94,7 @@ private Single>> buildLogEventsQueryFi spanEvent -> spanEvent .getAttributesMap() - .get(gqlRequest.spanEventsRequest().idAttribute().attribute().id()) + .get(gqlRequest.spanEventsRequest().idAttribute().asMapKey()) .getString()) .collect(Collectors.toList()); @@ -102,12 +104,12 @@ private Single>> buildLogEventsQueryFi Set.of(new LogEventFilter(spanIds))); } - @lombok.Value + @Value @Accessors(fluent = true) private static class LogEventFilter implements FilterArgument { - FilterType type = FilterType.ID; String key = null; + AttributeExpression keyExpression = null; FilterOperatorType operator = FilterOperatorType.IN; Collection value; AttributeScope idType = null; diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventResponseConverter.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventResponseConverter.java index 938c84df..3da5cc1b 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventResponseConverter.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/SpanLogEventResponseConverter.java @@ -7,10 +7,11 @@ import java.util.stream.Collectors; import javax.inject.Inject; import lombok.experimental.Accessors; -import org.hypertrace.core.graphql.attributes.AttributeModel; import org.hypertrace.core.graphql.attributes.AttributeStore; import org.hypertrace.core.graphql.atttributes.scopes.HypertraceCoreAttributeScopeString; import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.request.AttributeRequestBuilder; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; import org.hypertrace.core.graphql.common.utils.BiConverter; import org.hypertrace.core.graphql.context.GraphQlRequestContext; import org.hypertrace.core.graphql.log.event.schema.LogEvent; @@ -20,17 +21,22 @@ class SpanLogEventResponseConverter { - private final BiConverter, Map, Map> + private final BiConverter< + Collection, Map, Map> attributeMapConverter; private final AttributeStore attributeStore; + private final AttributeRequestBuilder attributeRequestBuilder; @Inject SpanLogEventResponseConverter( - BiConverter, Map, Map> + BiConverter< + Collection, Map, Map> attributeMapConverter, - AttributeStore attributeStore) { + AttributeStore attributeStore, + AttributeRequestBuilder attributeRequestBuilder) { this.attributeMapConverter = attributeMapConverter; this.attributeStore = attributeStore; + this.attributeRequestBuilder = attributeRequestBuilder; } Single buildResponse( @@ -43,19 +49,21 @@ Single buildResponse( graphQlRequestContext, HypertraceCoreAttributeScopeString.LOG_EVENT, HypertraceCoreAttributeScopeString.SPAN) + .map(this.attributeRequestBuilder::buildForAttribute) .flatMap( - spanId -> buildResponse(spanId, attributeRequests, spansResponse, logEventsResponse)); + spanIdRequest -> + buildResponse(spanIdRequest, attributeRequests, spansResponse, logEventsResponse)); } private Single buildResponse( - AttributeModel foreignIdAttribute, + AttributeRequest foreignIdAttributeRequest, Collection attributeRequests, SpansResponse spansResponse, LogEventsResponse logEventsResponse) { return Observable.fromIterable(logEventsResponse.getLogEventsList()) .concatMapSingle( logEventsResponseVar -> - this.convert(foreignIdAttribute, attributeRequests, logEventsResponseVar)) + this.convert(foreignIdAttributeRequest, attributeRequests, logEventsResponseVar)) .collect( Collectors.groupingBy( SpanLogEventPair::spanId, @@ -65,7 +73,7 @@ private Single buildResponse( } private Single convert( - AttributeModel foreignIdAttribute, + AttributeRequest foreignIdAttributeRequest, Collection request, org.hypertrace.gateway.service.v1.log.events.LogEvent logEvent) { return this.attributeMapConverter @@ -73,7 +81,10 @@ private Single convert( .map( attributeMap -> new SpanLogEventPair( - logEvent.getAttributesMap().get(foreignIdAttribute.id()).getString(), + logEvent + .getAttributesMap() + .get(foreignIdAttributeRequest.asMapKey()) + .getString(), new ConvertedLogEvent(attributeMap))); } @@ -89,11 +100,11 @@ private static class SpanLogEventPair { private static class ConvertedLogEvent implements org.hypertrace.core.graphql.log.event.schema.LogEvent { - Map attributeValues; + Map attributeValues; @Override - public Object attribute(String key) { - return this.attributeValues.get(key); + public Object attribute(AttributeExpression attributeExpression) { + return this.attributeValues.get(attributeExpression); } } } diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/export/ExportSpan.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/export/ExportSpan.java index 5d83537e..68ed97dd 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/export/ExportSpan.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/export/ExportSpan.java @@ -1,5 +1,6 @@ package org.hypertrace.core.graphql.span.export; +import static org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression.forAttributeKey; import static org.hypertrace.core.graphql.span.export.ExportSpanConstants.SpanTagsKey.SERVICE_NAME_KEY; import static org.hypertrace.core.graphql.span.export.ExportSpanConstants.SpanTagsKey.SPAN_KIND; @@ -17,24 +18,27 @@ import io.opentelemetry.proto.trace.v1.Status.StatusCode; import java.time.Duration; import java.time.Instant; +import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import lombok.AccessLevel; import lombok.RequiredArgsConstructor; +import lombok.Value; import lombok.experimental.Accessors; import org.hypertrace.core.graphql.log.event.schema.LogEvent; import org.hypertrace.core.graphql.span.export.ExportSpanConstants.LogEventAttributes; import org.hypertrace.core.graphql.span.export.ExportSpanConstants.SpanAttributes; import org.hypertrace.core.graphql.span.export.ExportSpanConstants.SpanTagsKey; -@lombok.Value +@Value @Accessors(fluent = true) @RequiredArgsConstructor(access = AccessLevel.PRIVATE) public class ExportSpan { - private final ResourceSpans resourceSpans; + ResourceSpans resourceSpans; public static class Builder { @@ -45,46 +49,49 @@ public Builder(org.hypertrace.core.graphql.span.schema.Span span) { } private void setResourceServiceName(Resource.Builder resourceBuilder) { - if (span.attribute(SpanAttributes.SERVICE_NAME) != null) { - String serviceName = span.attribute(SpanAttributes.SERVICE_NAME).toString(); - KeyValue keyValue = - KeyValue.newBuilder() - .setKey(SERVICE_NAME_KEY) - .setValue(AnyValue.newBuilder().setStringValue(serviceName).build()) - .build(); - resourceBuilder.addAttributes(keyValue); - } + Optional.ofNullable(span.attribute(forAttributeKey(SpanAttributes.SERVICE_NAME))) + .map(Object::toString) + .map( + serviceName -> + KeyValue.newBuilder() + .setKey(SERVICE_NAME_KEY) + .setValue(AnyValue.newBuilder().setStringValue(serviceName))) + .map(KeyValue.Builder::build) + .ifPresent(resourceBuilder::addAttributes); } private void setBytesFields(Span.Builder spanBuilder) { byte[] spanIdBytes = BaseEncoding.base64().decode(span.id()); spanBuilder.setSpanId(ByteString.copyFrom(spanIdBytes)); - String traceId = span.attribute(SpanAttributes.TRACE_ID).toString(); + String traceId = span.attribute(forAttributeKey(SpanAttributes.TRACE_ID)).toString(); byte[] traceIdBytes = BaseEncoding.base64().decode(traceId); spanBuilder.setTraceId(ByteString.copyFrom(traceIdBytes)); byte[] parentSpanIdBytes = BaseEncoding.base64().decode(""); - if (span.attribute(SpanAttributes.PARENT_SPAN_ID) != null) { + if (span.attribute(forAttributeKey(SpanAttributes.PARENT_SPAN_ID)) != null) { parentSpanIdBytes = - BaseEncoding.base64().decode(span.attribute(SpanAttributes.PARENT_SPAN_ID).toString()); + BaseEncoding.base64() + .decode(span.attribute(forAttributeKey(SpanAttributes.PARENT_SPAN_ID)).toString()); } spanBuilder.setParentSpanId(ByteString.copyFrom(parentSpanIdBytes)); } private void setTimeFields(Span.Builder spanBuilder) { - long startTime = Long.parseLong(span.attribute(SpanAttributes.START_TIME).toString()); + long startTime = + Long.parseLong(span.attribute(forAttributeKey(SpanAttributes.START_TIME)).toString()); spanBuilder.setStartTimeUnixNano( TimeUnit.NANOSECONDS.convert(startTime, TimeUnit.MILLISECONDS)); - long endTime = Long.parseLong(span.attribute(SpanAttributes.END_TIME).toString()); + long endTime = + Long.parseLong(span.attribute(forAttributeKey(SpanAttributes.END_TIME)).toString()); spanBuilder.setEndTimeUnixNano(TimeUnit.NANOSECONDS.convert(endTime, TimeUnit.MILLISECONDS)); } private void setName(Span.Builder spanBuilder) { - if (span.attribute(SpanAttributes.NAME) != null) { - spanBuilder.setName(span.attribute(SpanAttributes.NAME).toString()); - } + Optional.ofNullable(span.attribute(forAttributeKey(SpanAttributes.NAME))) + .map(Object::toString) + .ifPresent(spanBuilder::setName); } private static void setAttributes(Span.Builder spanBuilder, Map tags) { @@ -104,7 +111,7 @@ private static void setAttributes(Span.Builder spanBuilder, Map private static void setStatusCode(Span.Builder spanBuilder, Map tags) { int statusCode = SpanTagsKey.STATUS_CODE_KEYS.stream() - .filter(e -> tags.containsKey(e)) + .filter(tags::containsKey) .map(e -> Integer.parseInt(tags.get(e))) .findFirst() .orElse(0); @@ -130,14 +137,17 @@ private static void setLogEvent(Span.Builder spanBuilder, List logEven Duration.between( Instant.EPOCH, Instant.parse( - logEvent.attribute(LogEventAttributes.TIMESTAMP).toString())) + logEvent + .attribute(forAttributeKey(LogEventAttributes.TIMESTAMP)) + .toString())) .toNanos(); eventBuilder.setTimeUnixNano(timeNanos); Map logEventAttributes = - logEvent.attribute(LogEventAttributes.ATTRIBUTES) != null - ? (Map) logEvent.attribute(LogEventAttributes.ATTRIBUTES) - : Map.of(); + Optional.ofNullable( + logEvent.attribute(forAttributeKey(LogEventAttributes.ATTRIBUTES))) + .map(value -> (Map) value) + .orElseGet(Collections::emptyMap); List attributes = logEventAttributes.entrySet().stream() .map( @@ -167,9 +177,9 @@ public ExportSpan build() { setName(spanBuilder); Map tags = - span.attribute(SpanAttributes.TAGS) != null - ? (Map) span.attribute(SpanAttributes.TAGS) - : Map.of(); + Optional.ofNullable(span.attribute(forAttributeKey(SpanAttributes.TAGS))) + .map(value -> (Map) value) + .orElseGet(Collections::emptyMap); setStatusCode(spanBuilder, tags); setSpanKind(spanBuilder, tags); setAttributes(spanBuilder, tags); diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/export/ExportSpanConstants.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/export/ExportSpanConstants.java index 36c8658d..2db0b47d 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/export/ExportSpanConstants.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/export/ExportSpanConstants.java @@ -1,6 +1,7 @@ package org.hypertrace.core.graphql.span.export; import java.util.List; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; public interface ExportSpanConstants { interface SpanAttributes { @@ -13,16 +14,16 @@ interface SpanAttributes { String NAME = "displaySpanName"; String TAGS = "spanTags"; - List SPAN_ATTRIBUTES = + List SPAN_ATTRIBUTES = List.of( - SpanAttributes.ID, - SpanAttributes.SERVICE_NAME, - SpanAttributes.TRACE_ID, - SpanAttributes.PARENT_SPAN_ID, - SpanAttributes.START_TIME, - SpanAttributes.END_TIME, - SpanAttributes.NAME, - SpanAttributes.TAGS); + AttributeExpression.forAttributeKey(SpanAttributes.ID), + AttributeExpression.forAttributeKey(SpanAttributes.SERVICE_NAME), + AttributeExpression.forAttributeKey(SpanAttributes.TRACE_ID), + AttributeExpression.forAttributeKey(SpanAttributes.PARENT_SPAN_ID), + AttributeExpression.forAttributeKey(SpanAttributes.START_TIME), + AttributeExpression.forAttributeKey(SpanAttributes.END_TIME), + AttributeExpression.forAttributeKey(SpanAttributes.NAME), + AttributeExpression.forAttributeKey(SpanAttributes.TAGS)); } interface SpanTagsKey { @@ -39,7 +40,9 @@ interface LogEventAttributes { String TIMESTAMP = "timestamp"; String ATTRIBUTES = "attributes"; - List LOG_EVENT_ATTRIBUTES = - List.of(LogEventAttributes.TIMESTAMP, LogEventAttributes.ATTRIBUTES); + List LOG_EVENT_ATTRIBUTES = + List.of( + AttributeExpression.forAttributeKey(LogEventAttributes.TIMESTAMP), + AttributeExpression.forAttributeKey(LogEventAttributes.ATTRIBUTES)); } } diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/DefaultSpanRequestBuilder.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/DefaultSpanRequestBuilder.java index 812a9a38..2cae9188 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/DefaultSpanRequestBuilder.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/DefaultSpanRequestBuilder.java @@ -14,6 +14,7 @@ import org.hypertrace.core.graphql.common.request.AttributeRequest; import org.hypertrace.core.graphql.common.request.ResultSetRequest; import org.hypertrace.core.graphql.common.request.ResultSetRequestBuilder; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; import org.hypertrace.core.graphql.context.GraphQlRequestContext; @@ -51,12 +52,12 @@ public Single build( public Single build( GraphQlRequestContext context, Map arguments, - List spanAttributes, - List logAttributes) { + List spanAttributeExpressions, + List logAttributeExpressions) { return zip( resultSetRequestBuilder.build( - context, HypertraceCoreAttributeScopeString.SPAN, arguments, spanAttributes), - logEventAttributeRequestBuilder.buildAttributeRequest(context, logAttributes), + context, HypertraceCoreAttributeScopeString.SPAN, arguments, spanAttributeExpressions), + logEventAttributeRequestBuilder.buildAttributeRequest(context, logAttributeExpressions), (resultSetRequest, logEventAttributeRequest) -> new DefaultSpanRequest(context, resultSetRequest, logEventAttributeRequest)); } diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/LogEventAttributeRequestBuilder.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/LogEventAttributeRequestBuilder.java index d43a5ad5..7956f2ae 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/LogEventAttributeRequestBuilder.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/LogEventAttributeRequestBuilder.java @@ -15,6 +15,7 @@ import org.hypertrace.core.graphql.atttributes.scopes.HypertraceCoreAttributeScopeString; import org.hypertrace.core.graphql.common.request.AttributeRequest; import org.hypertrace.core.graphql.common.request.AttributeRequestBuilder; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; import org.hypertrace.core.graphql.context.GraphQlRequestContext; import org.hypertrace.core.graphql.utils.schema.GraphQlSelectionFinder; import org.hypertrace.core.graphql.utils.schema.SelectionQuery; @@ -42,13 +43,13 @@ Single> buildAttributeRequest( } Single> buildAttributeRequest( - GraphQlRequestContext context, List attributes) { - return Observable.fromIterable(attributes) + GraphQlRequestContext context, List attributeExpressions) { + return Observable.fromIterable(attributeExpressions) .distinct() .flatMapSingle( - attributeKey -> - this.attributeRequestBuilder.buildForKey( - context, HypertraceCoreAttributeScopeString.LOG_EVENT, attributeKey)) + attributeExpression -> + this.attributeRequestBuilder.buildForAttributeExpression( + context, HypertraceCoreAttributeScopeString.LOG_EVENT, attributeExpression)) .collect(Collectors.toUnmodifiableSet()); } diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/SpanRequestBuilder.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/SpanRequestBuilder.java index 64cf189b..86f107f1 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/SpanRequestBuilder.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/SpanRequestBuilder.java @@ -4,6 +4,7 @@ import io.reactivex.rxjava3.core.Single; import java.util.List; import java.util.Map; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; import org.hypertrace.core.graphql.context.GraphQlRequestContext; public interface SpanRequestBuilder { @@ -16,6 +17,6 @@ Single build( Single build( GraphQlRequestContext context, Map arguments, - List spanAttributes, - List logAttributes); + List spanAttributeExpressions, + List logAttributeExpressions); } diff --git a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/DaoTestUtil.java b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/DaoTestUtil.java index d733c1e2..e793d0bd 100644 --- a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/DaoTestUtil.java +++ b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/DaoTestUtil.java @@ -17,6 +17,7 @@ import org.hypertrace.core.graphql.common.request.ResultSetRequest; import org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument; import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterOperatorType; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterType; @@ -34,19 +35,12 @@ class DaoTestUtil { @Value @Accessors(fluent = true) static class DefaultAttributeRequest implements AttributeRequest { - - AttributeModel attribute; - - @Override - public String alias() { - return attribute.id(); - } + AttributeAssociation attributeExpression; } @Value @Accessors(fluent = true) static class DefaultAttributeModel implements AttributeModel { - String id; String scope; String key; @@ -62,9 +56,9 @@ static class DefaultAttributeModel implements AttributeModel { @Value @Accessors(fluent = true) static class NormalizedFilter implements FilterArgument { - FilterType type = FilterType.ATTRIBUTE; - String key; + String key = null; + AttributeExpression keyExpression; FilterOperatorType operator; Object value; String idScope = null; @@ -82,7 +76,6 @@ static class DefaultSpanRequest implements SpanRequest { @Value @Accessors(fluent = true) static class DefaultResultSetRequest implements ResultSetRequest { - GraphQlRequestContext context; Collection attributes; TimeRangeArgument timeRange; @@ -107,59 +100,67 @@ static class DefaultTimeRange implements TimeRangeArgument { static AttributeRequest traceIdAttribute = new DefaultAttributeRequest( - new DefaultAttributeModel( - "traceId", - "LOG_EVENT", - "traceId", - "Trace Id", - AttributeModelType.STRING, - "", - false, - false, - Collections.emptyList(), - false)); + AttributeAssociation.of( + new DefaultAttributeModel( + "traceId", + "LOG_EVENT", + "traceId", + "Trace Id", + AttributeModelType.STRING, + "", + false, + false, + Collections.emptyList(), + false), + AttributeExpression.forAttributeKey("traceId"))); static AttributeRequest spanIdAttribute = new DefaultAttributeRequest( - new DefaultAttributeModel( - "spanId", - "LOG_EVENT", - "spanId", - "Span Id", - AttributeModelType.STRING, - "", - false, - false, - Collections.emptyList(), - false)); + AttributeAssociation.of( + new DefaultAttributeModel( + "spanId", + "LOG_EVENT", + "spanId", + "Span Id", + AttributeModelType.STRING, + "", + false, + false, + Collections.emptyList(), + false), + AttributeExpression.forAttributeKey("spanId"))); static AttributeRequest attributesAttribute = new DefaultAttributeRequest( - new DefaultAttributeModel( - "attributes", - "LOG_EVENT", - "attributes", - "Attributes", - AttributeModelType.STRING, - "", - false, - false, - Collections.emptyList(), - false)); + AttributeAssociation.of( + new DefaultAttributeModel( + "attributes", + "LOG_EVENT", + "attributes", + "Attributes", + AttributeModelType.STRING, + "", + false, + false, + Collections.emptyList(), + false), + AttributeExpression.forAttributeKey("attributes"))); static AttributeRequest eventIdAttribute = new DefaultAttributeRequest( - new DefaultAttributeModel( - "id", - "EVENT", - "id", - "Id", - AttributeModelType.STRING, - "", - false, - false, - Collections.emptyList(), - false)); + AttributeAssociation.of( + new DefaultAttributeModel( + "id", + "EVENT", + "id", + "Id", + AttributeModelType.STRING, + "", + false, + false, + Collections.emptyList(), + false), + AttributeExpression.forAttributeKey("id"))); static SpansResponse spansResponse = SpansResponse.newBuilder() diff --git a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilderTest.java b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilderTest.java index c525371b..a7140512 100644 --- a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilderTest.java +++ b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilderTest.java @@ -34,6 +34,7 @@ import org.hypertrace.core.graphql.common.request.AttributeRequest; import org.hypertrace.core.graphql.common.request.AttributeRequestBuilder; import org.hypertrace.core.graphql.common.request.FilterRequestBuilder; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; import org.hypertrace.core.graphql.common.utils.Converter; import org.hypertrace.core.graphql.span.dao.DaoTestUtil.DefaultAttributeRequest; @@ -45,7 +46,6 @@ import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; import org.hypertrace.core.graphql.utils.gateway.GatewayUtilsModule; import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; -import org.hypertrace.gateway.service.v1.common.ColumnIdentifier; import org.hypertrace.gateway.service.v1.common.Expression; import org.hypertrace.gateway.service.v1.common.Filter; import org.hypertrace.gateway.service.v1.common.LiteralConstant; @@ -109,9 +109,10 @@ protected void configure() { return Single.just( List.of( AttributeAssociation.of( - spanIdAttribute.attribute(), + spanIdAttribute.attributeExpression().attribute(), new NormalizedFilter( - spanIdAttribute.attribute().key(), + AttributeExpression.forAttributeKey( + spanIdAttribute.attributeExpression().value().key()), filterArgument.operator(), filterArgument.value())))); }) @@ -119,12 +120,14 @@ protected void configure() { .build(any(), any(), anyCollection()); when(attributeStore.getForeignIdAttribute(any(), anyString(), anyString())) - .thenReturn(Single.just(spanIdAttribute.attribute())); + .thenReturn(Single.just(spanIdAttribute.attributeExpression().attribute())); doAnswer( invocation -> { AttributeModel attributeModel = invocation.getArgument(0, AttributeModel.class); - return new DefaultAttributeRequest(attributeModel); + return new DefaultAttributeRequest( + AttributeAssociation.of( + attributeModel, AttributeExpression.forAttributeKey(attributeModel.key()))); }) .when(attributeRequestBuilder) .buildForAttribute(any()); @@ -164,7 +167,7 @@ void testBuildRequest() { .setOperator(AND) .addChildFilter( Filter.newBuilder() - .setLhs(buildUnaliasedSelection("spanId")) + .setLhs(buildAliasedSelection("spanId")) .setOperator(IN) .setRhs(buildStringList("span1", "span2", "span3")))) .build(); @@ -204,7 +207,7 @@ void testBuildRequest_addSpanId() { .setOperator(AND) .addChildFilter( Filter.newBuilder() - .setLhs(buildUnaliasedSelection("spanId")) + .setLhs(buildAliasedSelection("spanId")) .setOperator(IN) .setRhs(buildStringList("span1", "span2", "span3")))) .build(); @@ -215,13 +218,10 @@ void testBuildRequest_addSpanId() { Expression buildAliasedSelection(String name) { return Expression.newBuilder() - .setColumnIdentifier(ColumnIdentifier.newBuilder().setColumnName(name).setAlias(name)) - .build(); - } - - Expression buildUnaliasedSelection(String name) { - return Expression.newBuilder() - .setColumnIdentifier(ColumnIdentifier.newBuilder().setColumnName(name)) + .setAttributeExpression( + org.hypertrace.gateway.service.v1.common.AttributeExpression.newBuilder() + .setAttributeId(name) + .setAlias(name)) .build(); } diff --git a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventResponseConverterTest.java b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventResponseConverterTest.java index 26de96d1..d1cf3c62 100644 --- a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventResponseConverterTest.java +++ b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventResponseConverterTest.java @@ -17,11 +17,12 @@ import java.util.Collection; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.Set; import java.util.stream.Collectors; import org.hypertrace.core.graphql.attributes.AttributeStore; import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.request.AttributeRequestBuilder; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; import org.hypertrace.core.graphql.common.utils.BiConverter; import org.hypertrace.core.graphql.context.GraphQlRequestContext; import org.hypertrace.gateway.service.v1.common.Value; @@ -35,18 +36,20 @@ class SpanLogEventResponseConverterTest { @Mock - BiConverter, Map, Map> + BiConverter, Map, Map> attributeMapConverter; @Mock AttributeStore attributeStore; @Mock GraphQlRequestContext requestContext; + @Mock AttributeRequestBuilder attributeRequestBuilder; private SpanLogEventResponseConverter spanLogEventResponseConverter; @BeforeEach void beforeEach() { spanLogEventResponseConverter = - new SpanLogEventResponseConverter(attributeMapConverter, attributeStore); + new SpanLogEventResponseConverter( + attributeMapConverter, attributeStore, attributeRequestBuilder); } @Test @@ -55,7 +58,10 @@ void testBuildResponse() { List.of(spanIdAttribute, traceIdAttribute, attributesAttribute); when(attributeStore.getForeignIdAttribute(any(), anyString(), anyString())) - .thenReturn(Single.just(spanIdAttribute.attribute())); + .thenReturn(Single.just(spanIdAttribute.attributeExpression().attribute())); + when(attributeRequestBuilder.buildForAttribute( + spanIdAttribute.attributeExpression().attribute())) + .thenReturn(spanIdAttribute); doAnswer( invocation -> { @@ -64,7 +70,9 @@ void testBuildResponse() { map.entrySet().stream() .collect( Collectors.toMap( - Entry::getKey, valueEntry -> valueEntry.getValue().getString()))); + valueEntry -> + AttributeExpression.forAttributeKey(valueEntry.getKey()), + valueEntry -> valueEntry.getValue().getString()))); }) .when(attributeMapConverter) .convert(anyCollection(), anyMap()); @@ -83,7 +91,10 @@ void testBuildResponse_spanIdNotRequested() { Collection attributeRequests = List.of(traceIdAttribute, attributesAttribute); when(attributeStore.getForeignIdAttribute(any(), anyString(), anyString())) - .thenReturn(Single.just(spanIdAttribute.attribute())); + .thenReturn(Single.just(spanIdAttribute.attributeExpression().attribute())); + when(attributeRequestBuilder.buildForAttribute( + spanIdAttribute.attributeExpression().attribute())) + .thenReturn(spanIdAttribute); doAnswer( invocation -> { @@ -92,7 +103,9 @@ void testBuildResponse_spanIdNotRequested() { map.entrySet().stream() .collect( Collectors.toMap( - Entry::getKey, valueEntry -> valueEntry.getValue().getString()))); + valueEntry -> + AttributeExpression.forAttributeKey(valueEntry.getKey()), + valueEntry -> valueEntry.getValue().getString()))); }) .when(attributeMapConverter) .convert(anyCollection(), anyMap()); diff --git a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/export/ExportSpanTest.java b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/export/ExportSpanTest.java index 981acdcc..884facdc 100644 --- a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/export/ExportSpanTest.java +++ b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/export/ExportSpanTest.java @@ -6,7 +6,11 @@ import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Map.Entry; +import java.util.stream.Collectors; +import lombok.Value; import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; import org.hypertrace.core.graphql.log.event.schema.LogEvent; import org.hypertrace.core.graphql.log.event.schema.LogEventResultSet; import org.hypertrace.core.graphql.span.export.ExportSpan.Builder; @@ -18,16 +22,30 @@ public class ExportSpanTest { - @lombok.Value + @Value @Accessors(fluent = true) - static class ConvertedSpan implements Span { + private static class ConvertedSpan implements Span { String id; - Map attributeValues; + Map attributeValues; Map> spanIdToLogEvents; + ConvertedSpan( + String id, + Map attributeMap, + Map> spanIdToLogEvents) { + this.id = id; + this.spanIdToLogEvents = spanIdToLogEvents; + this.attributeValues = + attributeMap.entrySet().stream() + .collect( + Collectors.toUnmodifiableMap( + entry -> AttributeExpression.forAttributeKey(entry.getKey()), + Entry::getValue)); + } + @Override - public Object attribute(String key) { - return this.attributeValues.get(key); + public Object attribute(AttributeExpression attributeExpression) { + return this.attributeValues.get(attributeExpression); } @Override @@ -37,23 +55,31 @@ public LogEventResultSet logEvents() { } } - @lombok.Value + @Value @Accessors(fluent = true) - static class ConvertedLogEventResultSet implements LogEventResultSet { + private static class ConvertedLogEventResultSet implements LogEventResultSet { List results; long total; long count; } - @lombok.Value + @Value @Accessors(fluent = true) - static class ConvertedLogEvent implements org.hypertrace.core.graphql.log.event.schema.LogEvent { + private static class ConvertedLogEvent implements LogEvent { + ConvertedLogEvent(Map attributeMap) { + this.attributeValues = + attributeMap.entrySet().stream() + .collect( + Collectors.toUnmodifiableMap( + entry -> AttributeExpression.forAttributeKey(entry.getKey()), + Entry::getValue)); + } - Map attributeValues; + Map attributeValues; @Override - public Object attribute(String key) { - return this.attributeValues.get(key); + public Object attribute(AttributeExpression attributeExpression) { + return this.attributeValues.get(attributeExpression); } } diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceConverter.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceConverter.java index 93f469c6..181f2904 100644 --- a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceConverter.java +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceConverter.java @@ -9,6 +9,7 @@ import lombok.experimental.Accessors; import org.hypertrace.core.graphql.common.request.AttributeRequest; import org.hypertrace.core.graphql.common.request.ResultSetRequest; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; import org.hypertrace.core.graphql.common.utils.BiConverter; import org.hypertrace.core.graphql.trace.schema.Trace; import org.hypertrace.core.graphql.trace.schema.TraceResultSet; @@ -16,12 +17,14 @@ import org.hypertrace.gateway.service.v1.trace.TracesResponse; public class GatewayServiceTraceConverter { - private final BiConverter, Map, Map> + private final BiConverter< + Collection, Map, Map> attributeMapConverter; @Inject GatewayServiceTraceConverter( - BiConverter, Map, Map> + BiConverter< + Collection, Map, Map> attributeMapConverter) { this.attributeMapConverter = attributeMapConverter; } @@ -42,18 +45,19 @@ private Single convert( .map( attrMap -> new ConvertedTrace( - attrMap.get(request.idAttribute().attribute().key()).toString(), attrMap)); + attrMap.get(request.idAttribute().attributeExpression().value()).toString(), + attrMap)); } @lombok.Value @Accessors(fluent = true) private static class ConvertedTrace implements Trace { String id; - Map attributeValues; + Map attributeValues; @Override - public Object attribute(String key) { - return this.attributeValues.get(key); + public Object attribute(AttributeExpression attributeExpression) { + return this.attributeValues.get(attributeExpression); } } diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/TraceDaoModule.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/TraceDaoModule.java index 711dddd7..77ca9524 100644 --- a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/TraceDaoModule.java +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/TraceDaoModule.java @@ -10,6 +10,7 @@ import java.util.Set; import org.hypertrace.core.graphql.common.request.AttributeAssociation; import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; import org.hypertrace.core.graphql.common.utils.BiConverter; @@ -52,6 +53,8 @@ protected void configure() { Key.get( new TypeLiteral< BiConverter< - Collection, Map, Map>>() {})); + Collection, + Map, + Map>>() {})); } } From 43f084b878511945a90c64065ed8024124b62769 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Sun, 9 Jan 2022 07:15:16 -0800 Subject: [PATCH 089/173] refactor: attribute association expression rename (#92) * refactor: attribute association expression rename * fix: vulnerable dependency --- .../core/graphql/common/request/AttributeRequest.java | 4 ++-- .../common/request/DefaultAttributeRequestBuilder.java | 2 +- .../request/DefaultAttributeRequestBuilderTest.java | 2 +- .../utils/gateway/AttributeExpressionConverter.java | 9 +++++---- .../graphql/utils/gateway/AttributeMapConverter.java | 5 +++-- .../utils/gateway/SelectionExpressionSetConverter.java | 2 +- .../core/graphql/log/event/dao/BaseDaoTest.java | 2 +- hypertrace-core-graphql-platform/build.gradle.kts | 5 ++++- .../graphql/span/dao/GatewayServiceSpanConverter.java | 6 +++++- .../hypertrace/core/graphql/span/dao/DaoTestUtil.java | 2 +- .../graphql/span/dao/SpanLogEventRequestBuilderTest.java | 6 +++--- .../span/dao/SpanLogEventResponseConverterTest.java | 8 ++++---- .../graphql/trace/dao/GatewayServiceTraceConverter.java | 4 +++- 13 files changed, 34 insertions(+), 23 deletions(-) diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/AttributeRequest.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/AttributeRequest.java index 64458fc9..0f1c61e1 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/AttributeRequest.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/AttributeRequest.java @@ -3,9 +3,9 @@ import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; public interface AttributeRequest { - AttributeAssociation attributeExpression(); + AttributeAssociation attributeExpressionAssociation(); default String asMapKey() { - return attributeExpression().value().asAlias(); + return attributeExpressionAssociation().value().asAlias(); } } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilder.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilder.java index ed27e43b..f956ec1a 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilder.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilder.java @@ -117,6 +117,6 @@ private Stream resolveAttributeExpression(SelectedField att @Value @Accessors(fluent = true) static class DefaultAttributeRequest implements AttributeRequest { - AttributeAssociation attributeExpression; + AttributeAssociation attributeExpressionAssociation; } } diff --git a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilderTest.java b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilderTest.java index 3026aaf9..034460b9 100644 --- a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilderTest.java +++ b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/request/DefaultAttributeRequestBuilderTest.java @@ -70,6 +70,6 @@ void canBuildRequestForSelectionSet() { .blockingGet(); assertEquals(1, returned.size()); - assertEquals(expectedResultExpression, returned.get(0).attributeExpression()); + assertEquals(expectedResultExpression, returned.get(0).attributeExpressionAssociation()); } } diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/AttributeExpressionConverter.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/AttributeExpressionConverter.java index 14cff9a1..2f26f46e 100644 --- a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/AttributeExpressionConverter.java +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/AttributeExpressionConverter.java @@ -11,11 +11,12 @@ class AttributeExpressionConverter implements Converter, Expression> { @Override - public Single convert(AttributeAssociation attributeExpression) { + public Single convert( + AttributeAssociation attributeExpressionAssociation) { Builder builder = org.hypertrace.gateway.service.v1.common.AttributeExpression.newBuilder(); - builder.setAttributeId(attributeExpression.attribute().id()); - attributeExpression.value().subpath().ifPresent(builder::setSubpath); - builder.setAlias(attributeExpression.value().asAlias()); + builder.setAttributeId(attributeExpressionAssociation.attribute().id()); + attributeExpressionAssociation.value().subpath().ifPresent(builder::setSubpath); + builder.setAlias(attributeExpressionAssociation.value().asAlias()); return Single.just(Expression.newBuilder().setAttributeExpression(builder).build()); } } diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/AttributeMapConverter.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/AttributeMapConverter.java index 8cd41c2a..12167d68 100644 --- a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/AttributeMapConverter.java +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/AttributeMapConverter.java @@ -41,9 +41,10 @@ private Single> buildAttributeMapEntry( return this.valueConverter .convert( response.get(attributeRequest.asMapKey()), - attributeRequest.attributeExpression().attribute()) + attributeRequest.attributeExpressionAssociation().attribute()) .map( value -> - new SimpleImmutableEntry<>(attributeRequest.attributeExpression().value(), value)); + new SimpleImmutableEntry<>( + attributeRequest.attributeExpressionAssociation().value(), value)); } } diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/SelectionExpressionSetConverter.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/SelectionExpressionSetConverter.java index bc9a8644..aadd4f8a 100644 --- a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/SelectionExpressionSetConverter.java +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/SelectionExpressionSetConverter.java @@ -31,7 +31,7 @@ public Single> convert(Collection attributeReq private Single buildAliasedSelectionExpression(AttributeRequest attributeRequest) { return this.attributeExpressionConverter - .convert(attributeRequest.attributeExpression()) + .convert(attributeRequest.attributeExpressionAssociation()) .map(Expression::toBuilder) .map(Builder::build); } diff --git a/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/BaseDaoTest.java b/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/BaseDaoTest.java index 04c02b8c..8160e7eb 100644 --- a/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/BaseDaoTest.java +++ b/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/BaseDaoTest.java @@ -36,7 +36,7 @@ static class DefaultLogEventRequest implements LogEventRequest { @Value @Accessors(fluent = true) static class DefaultAttributeRequest implements AttributeRequest { - AttributeAssociation attributeExpression; + AttributeAssociation attributeExpressionAssociation; } @Value diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index e53fb0ae..0a801738 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -16,7 +16,10 @@ dependencies { api("io.github.graphql-java:graphql-java-annotations:8.3") api("org.slf4j:slf4j-api:1.7.30") api("io.reactivex.rxjava3:rxjava:3.0.9") - api("com.google.protobuf:protobuf-java-util:3.14.0") + api("com.google.protobuf:protobuf-java-util:3.19.2") + api("com.google.protobuf:protobuf-java:3.19.2") { + because("https://snyk.io/vuln/SNYK-JAVA-COMGOOGLEPROTOBUF-2331703") + } api("org.projectlombok:lombok:1.18.18") api("com.google.code.findbugs:jsr305:3.0.2") diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanConverter.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanConverter.java index 64587153..e1d96932 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanConverter.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanConverter.java @@ -51,7 +51,11 @@ private Single convert( new ConvertedSpan( attrMap .get( - request.spanEventsRequest().idAttribute().attributeExpression().value()) + request + .spanEventsRequest() + .idAttribute() + .attributeExpressionAssociation() + .value()) .toString(), attrMap, spanIdToLogEvents)); diff --git a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/DaoTestUtil.java b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/DaoTestUtil.java index e793d0bd..a4f100a0 100644 --- a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/DaoTestUtil.java +++ b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/DaoTestUtil.java @@ -35,7 +35,7 @@ class DaoTestUtil { @Value @Accessors(fluent = true) static class DefaultAttributeRequest implements AttributeRequest { - AttributeAssociation attributeExpression; + AttributeAssociation attributeExpressionAssociation; } @Value diff --git a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilderTest.java b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilderTest.java index a7140512..ffa5fba0 100644 --- a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilderTest.java +++ b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilderTest.java @@ -109,10 +109,10 @@ protected void configure() { return Single.just( List.of( AttributeAssociation.of( - spanIdAttribute.attributeExpression().attribute(), + spanIdAttribute.attributeExpressionAssociation().attribute(), new NormalizedFilter( AttributeExpression.forAttributeKey( - spanIdAttribute.attributeExpression().value().key()), + spanIdAttribute.attributeExpressionAssociation().value().key()), filterArgument.operator(), filterArgument.value())))); }) @@ -120,7 +120,7 @@ protected void configure() { .build(any(), any(), anyCollection()); when(attributeStore.getForeignIdAttribute(any(), anyString(), anyString())) - .thenReturn(Single.just(spanIdAttribute.attributeExpression().attribute())); + .thenReturn(Single.just(spanIdAttribute.attributeExpressionAssociation().attribute())); doAnswer( invocation -> { diff --git a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventResponseConverterTest.java b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventResponseConverterTest.java index d1cf3c62..6d8211bc 100644 --- a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventResponseConverterTest.java +++ b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventResponseConverterTest.java @@ -58,9 +58,9 @@ void testBuildResponse() { List.of(spanIdAttribute, traceIdAttribute, attributesAttribute); when(attributeStore.getForeignIdAttribute(any(), anyString(), anyString())) - .thenReturn(Single.just(spanIdAttribute.attributeExpression().attribute())); + .thenReturn(Single.just(spanIdAttribute.attributeExpressionAssociation().attribute())); when(attributeRequestBuilder.buildForAttribute( - spanIdAttribute.attributeExpression().attribute())) + spanIdAttribute.attributeExpressionAssociation().attribute())) .thenReturn(spanIdAttribute); doAnswer( @@ -91,9 +91,9 @@ void testBuildResponse_spanIdNotRequested() { Collection attributeRequests = List.of(traceIdAttribute, attributesAttribute); when(attributeStore.getForeignIdAttribute(any(), anyString(), anyString())) - .thenReturn(Single.just(spanIdAttribute.attributeExpression().attribute())); + .thenReturn(Single.just(spanIdAttribute.attributeExpressionAssociation().attribute())); when(attributeRequestBuilder.buildForAttribute( - spanIdAttribute.attributeExpression().attribute())) + spanIdAttribute.attributeExpressionAssociation().attribute())) .thenReturn(spanIdAttribute); doAnswer( diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceConverter.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceConverter.java index 181f2904..263e481a 100644 --- a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceConverter.java +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceConverter.java @@ -45,7 +45,9 @@ private Single convert( .map( attrMap -> new ConvertedTrace( - attrMap.get(request.idAttribute().attributeExpression().value()).toString(), + attrMap + .get(request.idAttribute().attributeExpressionAssociation().value()) + .toString(), attrMap)); } From 23cb2239e5db37cafaaa8e7fcfc60bef4c626c47 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Thu, 27 Jan 2022 11:43:38 -0800 Subject: [PATCH 090/173] feat: expose config to change gql query timeout (#93) --- helm/templates/serviceconfig.yaml | 1 + helm/values.yaml | 1 + .../core/graphql/impl/GraphQlFactory.java | 1 + .../service/DefaultGraphQlServiceConfig.java | 16 ++++++++++++---- .../core/graphql/service/GraphQlService.java | 4 ++-- .../resources/configs/common/application.conf | 1 + .../graphql/spi/config/GraphQlServiceConfig.java | 4 +++- 7 files changed, 21 insertions(+), 7 deletions(-) diff --git a/helm/templates/serviceconfig.yaml b/helm/templates/serviceconfig.yaml index 2d336b73..d684efc8 100644 --- a/helm/templates/serviceconfig.yaml +++ b/helm/templates/serviceconfig.yaml @@ -16,6 +16,7 @@ data: graphql.urlPath = {{ .Values.serviceConfig.urlPath }} graphql.corsEnabled = {{ .Values.serviceConfig.corsEnabled }} + graphql.timeout = {{ .Values.serviceConfig.timeoutDuration }} attribute.service = { host = {{ .Values.serviceConfig.attributeService.host }} diff --git a/helm/values.yaml b/helm/values.yaml index 992f79c5..70bb10ba 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -45,6 +45,7 @@ serviceConfig: urlPath: /graphql corsEnabled: true defaultTenantId: "" + timeoutDuration: 30s attributeService: host: attribute-service port: 9012 diff --git a/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlFactory.java b/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlFactory.java index db6f42a4..4b3c9a07 100644 --- a/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlFactory.java +++ b/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlFactory.java @@ -15,6 +15,7 @@ public static GraphQLConfiguration build( return GraphQLConfiguration.with(injector.getInstance(GraphQLSchema.class)) .with(injector.getInstance(GraphQlRequestContextBuilder.class)) + .asyncTimeout(config.getGraphQlTimeout().toMillis()) .build(); } } diff --git a/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java index 538bd4f5..24109512 100644 --- a/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java +++ b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java @@ -15,6 +15,7 @@ class DefaultGraphQlServiceConfig implements GraphQlServiceConfig { private static final String GRAPHQL_URL_PATH = "graphql.urlPath"; private static final String GRAPHQL_CORS_ENABLED = "graphql.corsEnabled"; + private static final String GRAPHQL_TIMEOUT = "graphql.timeout"; private static final String DEFAULT_TENANT_ID = "defaultTenantId"; @@ -30,8 +31,9 @@ class DefaultGraphQlServiceConfig implements GraphQlServiceConfig { private final String serviceName; private final int servicePort; - private final String graphqlUrlPath; + private final String graphQlUrlPath; private final boolean corsEnabled; + private final Duration graphQlTimeout; private final Optional defaultTenantId; private final int maxIoThreads; private final String attributeServiceHost; @@ -44,8 +46,9 @@ class DefaultGraphQlServiceConfig implements GraphQlServiceConfig { DefaultGraphQlServiceConfig(Config untypedConfig) { this.serviceName = untypedConfig.getString(SERVICE_NAME_CONFIG); this.servicePort = untypedConfig.getInt(SERVICE_PORT_CONFIG); - this.graphqlUrlPath = untypedConfig.getString(GRAPHQL_URL_PATH); + this.graphQlUrlPath = untypedConfig.getString(GRAPHQL_URL_PATH); this.corsEnabled = untypedConfig.getBoolean(GRAPHQL_CORS_ENABLED); + this.graphQlTimeout = untypedConfig.getDuration(GRAPHQL_TIMEOUT); this.defaultTenantId = optionallyGet(() -> untypedConfig.getString(DEFAULT_TENANT_ID)); this.maxIoThreads = untypedConfig.getInt(MAX_IO_THREADS_PROPERTY); @@ -71,8 +74,13 @@ public String getServiceName() { } @Override - public String getGraphqlUrlPath() { - return graphqlUrlPath; + public String getGraphQlUrlPath() { + return graphQlUrlPath; + } + + @Override + public Duration getGraphQlTimeout() { + return graphQlTimeout; } @Override diff --git a/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/GraphQlService.java b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/GraphQlService.java index cc8579c5..51c796c3 100644 --- a/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/GraphQlService.java +++ b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/GraphQlService.java @@ -35,7 +35,7 @@ protected void doInit() { if (this.graphQlServiceConfig.isCorsEnabled()) { context.addFilter( CrossOriginFilter.class, - this.graphQlServiceConfig.getGraphqlUrlPath(), + this.graphQlServiceConfig.getGraphQlUrlPath(), EnumSet.of(DispatcherType.REQUEST)); } @@ -43,7 +43,7 @@ protected void doInit() { new ServletHolder( new GraphQlServiceHttpServlet( GraphQlFactory.build(this.graphQlServiceConfig, this.serviceLifecycle))), - this.graphQlServiceConfig.getGraphqlUrlPath()); + this.graphQlServiceConfig.getGraphQlUrlPath()); this.server.setHandler(context); this.server.setStopAtShutdown(true); diff --git a/hypertrace-core-graphql-service/src/main/resources/configs/common/application.conf b/hypertrace-core-graphql-service/src/main/resources/configs/common/application.conf index 108cdf6d..35f764b8 100644 --- a/hypertrace-core-graphql-service/src/main/resources/configs/common/application.conf +++ b/hypertrace-core-graphql-service/src/main/resources/configs/common/application.conf @@ -5,6 +5,7 @@ service.admin.port = 23432 graphql.urlPath = /graphql graphql.corsEnabled = true +graphql.timeout = 30s threads.io.max = 10 diff --git a/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java b/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java index f38a7aa3..ca874f5c 100644 --- a/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java +++ b/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java @@ -9,10 +9,12 @@ public interface GraphQlServiceConfig { String getServiceName(); - String getGraphqlUrlPath(); + String getGraphQlUrlPath(); boolean isCorsEnabled(); + Duration getGraphQlTimeout(); + Optional getDefaultTenantId(); int getMaxIoThreads(); From aafd996648419541e4452697797c5075225480cd Mon Sep 17 00:00:00 2001 From: Prerana Singhal Date: Thu, 10 Feb 2022 23:53:39 +0530 Subject: [PATCH 091/173] Added binding for OperatorConverter class (#94) --- .../core/graphql/utils/gateway/GatewayUtilsModule.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayUtilsModule.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayUtilsModule.java index 169e8b52..64e73659 100644 --- a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayUtilsModule.java +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayUtilsModule.java @@ -13,6 +13,7 @@ import org.hypertrace.core.graphql.common.request.AttributeRequest; import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterOperatorType; import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderDirection; import org.hypertrace.core.graphql.common.utils.BiConverter; @@ -22,6 +23,7 @@ import org.hypertrace.gateway.service.v1.common.Expression; import org.hypertrace.gateway.service.v1.common.Filter; import org.hypertrace.gateway.service.v1.common.LiteralConstant; +import org.hypertrace.gateway.service.v1.common.Operator; import org.hypertrace.gateway.service.v1.common.OrderByExpression; import org.hypertrace.gateway.service.v1.common.SortOrder; import org.hypertrace.gateway.service.v1.common.Value; @@ -50,6 +52,8 @@ protected void configure() { List>, List>>() {})) .to(OrderByExpressionListConverter.class); + bind(Key.get(new TypeLiteral>() {})) + .to(OperatorConverter.class); bind(Key.get( new TypeLiteral< Converter>, Filter>>() {})) From a0d0a33630f537d5fbe82931c5d6f5618655fc2a Mon Sep 17 00:00:00 2001 From: Avinash <52672355+avinashkolluru@users.noreply.github.com> Date: Tue, 5 Apr 2022 15:04:25 +0530 Subject: [PATCH 092/173] Updated grpc version deps (#96) * Updated grpc version deps * updated jackson-databind * updated jackson-databind version * ignored ionetty vulnerability --- .snyk | 2 +- hypertrace-core-graphql-platform/build.gradle.kts | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.snyk b/.snyk index 154d7794..691c39d2 100644 --- a/.snyk +++ b/.snyk @@ -5,6 +5,6 @@ ignore: SNYK-JAVA-IONETTY-1042268: - '*': reason: No replacement available - expires: 2022-03-31T00:00:00.000Z + expires: 2022-07-31T00:00:00.000Z patch: {} diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 0a801738..9b1f1e5a 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -5,9 +5,9 @@ plugins { dependencies { constraints { - api("org.hypertrace.core.grpcutils:grpc-context-utils:0.7.0") - api("org.hypertrace.core.grpcutils:grpc-client-utils:0.7.0") - api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.7.0") + api("org.hypertrace.core.grpcutils:grpc-context-utils:0.7.2") + api("org.hypertrace.core.grpcutils:grpc-client-utils:0.7.2") + api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.7.2") api("org.hypertrace.gateway.service:gateway-service-api:0.2.0") api("org.hypertrace.core.attribute.service:caching-attribute-service-client:0.13.6") @@ -30,7 +30,7 @@ dependencies { api("io.grpc:grpc-core:1.43.1") api("io.grpc:grpc-stub:1.43.1") api("io.grpc:grpc-context:1.43.1") - api("com.fasterxml.jackson.core:jackson-databind:2.12.6") + api("com.fasterxml.jackson.core:jackson-databind:2.13.2.2") api("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.6") api("com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.12.6") api("org.apache.commons:commons-text:1.9") From 35ca73c6a760112f8aae2d650497bbf6ef4aa278 Mon Sep 17 00:00:00 2001 From: Prerana Singhal Date: Mon, 25 Apr 2022 12:05:03 +0530 Subject: [PATCH 093/173] Upgraded grpc and guava versions (#98) --- hypertrace-core-graphql-platform/build.gradle.kts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 9b1f1e5a..6b9b5c03 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -24,12 +24,12 @@ dependencies { api("org.projectlombok:lombok:1.18.18") api("com.google.code.findbugs:jsr305:3.0.2") api("com.typesafe:config:1.4.1") - api("com.google.guava:guava:31.0.1-jre") + api("com.google.guava:guava:31.1-jre") api("com.graphql-java-kickstart:graphql-java-servlet:10.1.0") - api("io.grpc:grpc-api:1.43.1") - api("io.grpc:grpc-core:1.43.1") - api("io.grpc:grpc-stub:1.43.1") - api("io.grpc:grpc-context:1.43.1") + api("io.grpc:grpc-api:1.45.1") + api("io.grpc:grpc-core:1.45.1") + api("io.grpc:grpc-stub:1.45.1") + api("io.grpc:grpc-context:1.45.1") api("com.fasterxml.jackson.core:jackson-databind:2.13.2.2") api("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.6") api("com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.12.6") @@ -40,7 +40,7 @@ dependencies { } runtime("org.apache.logging.log4j:log4j-slf4j-impl:2.17.1") - runtime("io.grpc:grpc-netty:1.43.1") + runtime("io.grpc:grpc-netty:1.45.1") runtime("io.netty:netty-codec-http2:4.1.71.Final") runtime("io.netty:netty-handler-proxy:4.1.71.Final") } From 49982fda2cba9b2028bcacf68dcc01f117ecb31f Mon Sep 17 00:00:00 2001 From: Suresh Prakash <93120060+suresh-prakash@users.noreply.github.com> Date: Fri, 6 May 2022 11:27:45 +0530 Subject: [PATCH 094/173] ENG-17101: Support array types beyond string array in Literal converter (#99) * ENG-17101: Support array types beyond string array in Literal converter --- .../gateway/LiteralConstantConverter.java | 128 ++++++++++++++---- .../gateway/LiteralConstantConverterTest.java | 9 ++ 2 files changed, 107 insertions(+), 30 deletions(-) diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/LiteralConstantConverter.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/LiteralConstantConverter.java index d117aef7..deec8667 100644 --- a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/LiteralConstantConverter.java +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/LiteralConstantConverter.java @@ -1,5 +1,16 @@ package org.hypertrace.core.graphql.utils.gateway; +import static java.util.stream.Collectors.toUnmodifiableList; +import static org.hypertrace.gateway.service.v1.common.ValueType.BOOL; +import static org.hypertrace.gateway.service.v1.common.ValueType.BOOLEAN_ARRAY; +import static org.hypertrace.gateway.service.v1.common.ValueType.DOUBLE; +import static org.hypertrace.gateway.service.v1.common.ValueType.DOUBLE_ARRAY; +import static org.hypertrace.gateway.service.v1.common.ValueType.LONG; +import static org.hypertrace.gateway.service.v1.common.ValueType.LONG_ARRAY; +import static org.hypertrace.gateway.service.v1.common.ValueType.STRING; +import static org.hypertrace.gateway.service.v1.common.ValueType.STRING_ARRAY; +import static org.hypertrace.gateway.service.v1.common.ValueType.TIMESTAMP; + import io.reactivex.rxjava3.core.Single; import java.math.BigInteger; import java.time.Instant; @@ -7,7 +18,6 @@ import java.util.Arrays; import java.util.Collection; import java.util.Optional; -import java.util.stream.Collectors; import org.hypertrace.core.graphql.common.utils.Converter; import org.hypertrace.gateway.service.v1.common.LiteralConstant; import org.hypertrace.gateway.service.v1.common.LiteralConstant.Builder; @@ -15,7 +25,6 @@ import org.hypertrace.gateway.service.v1.common.ValueType; class LiteralConstantConverter implements Converter { - @Override public Single convert(Object from) { return Single.just(Optional.ofNullable(from)) @@ -24,53 +33,112 @@ public Single convert(Object from) { .map(Builder::build); } - private Value convertValue(Optional optionalObject) { + private Value convertValue( + @SuppressWarnings("OptionalUsedAsFieldOrParameterType") Optional optionalObject) { if (optionalObject.isEmpty()) { return Value.getDefaultInstance(); } Object object = optionalObject.get(); + final ValueType valueType = getValueType(object); + final Value.Builder valueBuilder = Value.newBuilder().setValueType(valueType); + + switch (valueType) { + case LONG: + return valueBuilder.setLong(((Number) object).longValue()).build(); + + case DOUBLE: + return valueBuilder.setDouble(((Number) object).doubleValue()).build(); + + case BOOL: + return valueBuilder.setBoolean((Boolean) object).build(); + + case TIMESTAMP: + return valueBuilder + .setTimestamp(Instant.from((TemporalAccessor) object).toEpochMilli()) + .build(); + + case BOOLEAN_ARRAY: + return valueBuilder + .addAllBooleanArray( + ((Collection) object) + .stream().map(obj -> (Boolean) obj).collect(toUnmodifiableList())) + .build(); + + case LONG_ARRAY: + return valueBuilder + .addAllLongArray( + ((Collection) object) + .stream().map(obj -> ((Number) obj).longValue()).collect(toUnmodifiableList())) + .build(); + case DOUBLE_ARRAY: + return valueBuilder + .addAllDoubleArray( + ((Collection) object) + .stream() + .map(obj -> ((Number) obj).doubleValue()) + .collect(toUnmodifiableList())) + .build(); + + case STRING_ARRAY: + return valueBuilder + .addAllStringArray( + ((Collection) object) + .stream().map(String::valueOf).collect(toUnmodifiableList())) + .build(); + } + + return valueBuilder.setString(String.valueOf(object)).build(); + } + + private boolean assignableToAnyOfClasses(Class classToCheck, Class... classesAllowed) { + return Arrays.stream(classesAllowed) + .anyMatch(allowedClass -> allowedClass.isAssignableFrom(classToCheck)); + } + + private ValueType getValueType(final Object object) { if (this.assignableToAnyOfClasses( object.getClass(), Long.class, Integer.class, BigInteger.class)) { - return Value.newBuilder() - .setValueType(ValueType.LONG) - .setLong(((Number) object).longValue()) - .build(); + return LONG; } if (this.assignableToAnyOfClasses(object.getClass(), Number.class)) { - return Value.newBuilder() - .setValueType(ValueType.DOUBLE) - .setDouble(((Number) object).doubleValue()) - .build(); + return DOUBLE; } if (this.assignableToAnyOfClasses(object.getClass(), Boolean.class)) { - return Value.newBuilder().setValueType(ValueType.BOOL).setBoolean((Boolean) object).build(); + return BOOL; } // todo handle Instant type object if (this.assignableToAnyOfClasses(object.getClass(), TemporalAccessor.class)) { - return Value.newBuilder() - .setValueType(ValueType.TIMESTAMP) - .setTimestamp(Instant.from((TemporalAccessor) object).toEpochMilli()) - .build(); + return TIMESTAMP; } + if (this.assignableToAnyOfClasses(object.getClass(), Collection.class)) { - // TODO matches old impl, but probably should be expanded - return Value.newBuilder() - .setValueType(ValueType.STRING_ARRAY) - .addAllStringArray( - ((Collection) object) - .stream().map(String::valueOf).collect(Collectors.toUnmodifiableList())) - .build(); + return getCollectionType(object); } - return Value.newBuilder() - .setValueType(ValueType.STRING) - .setString(String.valueOf(object)) - .build(); + return STRING; } - private boolean assignableToAnyOfClasses(Class classToCheck, Class... classesAllowed) { - return Arrays.stream(classesAllowed) - .anyMatch(allowedClass -> allowedClass.isAssignableFrom(classToCheck)); + private ValueType getCollectionType(final Object object) { + final Collection collection = (Collection) object; + if (collection.isEmpty()) { + return STRING_ARRAY; + } + + final Object first = collection.iterator().next(); + final ValueType baseType = getValueType(first); + + switch (baseType) { + case BOOL: + return BOOLEAN_ARRAY; + + case LONG: + return LONG_ARRAY; + + case DOUBLE: + return DOUBLE_ARRAY; + } + + return STRING_ARRAY; } } diff --git a/hypertrace-core-graphql-gateway-service-utils/src/test/java/org/hypertrace/core/graphql/utils/gateway/LiteralConstantConverterTest.java b/hypertrace-core-graphql-gateway-service-utils/src/test/java/org/hypertrace/core/graphql/utils/gateway/LiteralConstantConverterTest.java index 051bb31c..fe4fadf3 100644 --- a/hypertrace-core-graphql-gateway-service-utils/src/test/java/org/hypertrace/core/graphql/utils/gateway/LiteralConstantConverterTest.java +++ b/hypertrace-core-graphql-gateway-service-utils/src/test/java/org/hypertrace/core/graphql/utils/gateway/LiteralConstantConverterTest.java @@ -32,6 +32,15 @@ void convertsValuesOfVariousTypes() { .build(), converter.convert(List.of("foo", "bar")).blockingGet()); + assertEquals( + LiteralConstant.newBuilder() + .setValue( + Value.newBuilder() + .setValueType(ValueType.BOOLEAN_ARRAY) + .addAllBooleanArray(List.of(true, false))) + .build(), + converter.convert(List.of(true, false)).blockingGet()); + assertEquals( LiteralConstant.newBuilder() .setValue(Value.newBuilder().setValueType(ValueType.LONG).setLong(100)) From 74f3d81d7329bc58e143f2b7d7d99b29250aa2ce Mon Sep 17 00:00:00 2001 From: Suresh Prakash <93120060+suresh-prakash@users.noreply.github.com> Date: Mon, 23 May 2022 15:56:35 +0530 Subject: [PATCH 095/173] Support for GrpcChannelConfig in GrpcChannelRegistry (#100) * Support for GrpcChannelConfig in GrpcChannelRegistry --- .../core/graphql/utils/grpc/DefaultGrpcChannelRegistry.java | 6 ++++++ .../core/graphql/utils/grpc/GrpcChannelRegistry.java | 4 ++++ hypertrace-core-graphql-platform/build.gradle.kts | 6 +++--- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGrpcChannelRegistry.java b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGrpcChannelRegistry.java index 2bf161c5..708d9b91 100644 --- a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGrpcChannelRegistry.java +++ b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGrpcChannelRegistry.java @@ -4,6 +4,7 @@ import javax.inject.Inject; import javax.inject.Singleton; import org.hypertrace.core.graphql.spi.lifecycle.GraphQlServiceLifecycle; +import org.hypertrace.core.grpcutils.client.GrpcChannelConfig; @Singleton class DefaultGrpcChannelRegistry implements GrpcChannelRegistry { @@ -20,4 +21,9 @@ class DefaultGrpcChannelRegistry implements GrpcChannelRegistry { public ManagedChannel forAddress(String host, int port) { return this.delegate.forPlaintextAddress(host, port); } + + @Override + public ManagedChannel forAddress(String host, int port, GrpcChannelConfig channelConfig) { + return this.delegate.forPlaintextAddress(host, port, channelConfig); + } } diff --git a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GrpcChannelRegistry.java b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GrpcChannelRegistry.java index 783b04ad..6ced2495 100644 --- a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GrpcChannelRegistry.java +++ b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GrpcChannelRegistry.java @@ -1,7 +1,11 @@ package org.hypertrace.core.graphql.utils.grpc; import io.grpc.Channel; +import io.grpc.ManagedChannel; +import org.hypertrace.core.grpcutils.client.GrpcChannelConfig; public interface GrpcChannelRegistry { Channel forAddress(String host, int port); + + ManagedChannel forAddress(String host, int port, GrpcChannelConfig channelConfig); } diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 6b9b5c03..c174b13b 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -5,9 +5,9 @@ plugins { dependencies { constraints { - api("org.hypertrace.core.grpcutils:grpc-context-utils:0.7.2") - api("org.hypertrace.core.grpcutils:grpc-client-utils:0.7.2") - api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.7.2") + api("org.hypertrace.core.grpcutils:grpc-context-utils:0.7.3") + api("org.hypertrace.core.grpcutils:grpc-client-utils:0.7.3") + api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.7.3") api("org.hypertrace.gateway.service:gateway-service-api:0.2.0") api("org.hypertrace.core.attribute.service:caching-attribute-service-client:0.13.6") From 3466f5a2d09524e887535bcb556cfc3fd67f4538 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Fri, 10 Jun 2022 15:57:45 +0200 Subject: [PATCH 096/173] refactor: update dependencies (#103) --- .../build.gradle.kts | 42 ++++++++----------- 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index c174b13b..753bc327 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -2,46 +2,40 @@ plugins { `java-platform` } +javaPlatform { + allowDependencies() +} + dependencies { + api(platform("io.grpc:grpc-bom:1.47.0")) constraints { - api("org.hypertrace.core.grpcutils:grpc-context-utils:0.7.3") - api("org.hypertrace.core.grpcutils:grpc-client-utils:0.7.3") - api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.7.3") + api("org.hypertrace.core.grpcutils:grpc-context-utils:0.7.4") + api("org.hypertrace.core.grpcutils:grpc-client-utils:0.7.4") + api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.7.4") + api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.7.4") api("org.hypertrace.gateway.service:gateway-service-api:0.2.0") api("org.hypertrace.core.attribute.service:caching-attribute-service-client:0.13.6") - api("com.google.inject:guice:4.2.3") + api("com.google.inject:guice:5.1.0") api("com.graphql-java:graphql-java:15.0") api("io.github.graphql-java:graphql-java-annotations:8.3") - api("org.slf4j:slf4j-api:1.7.30") - api("io.reactivex.rxjava3:rxjava:3.0.9") - api("com.google.protobuf:protobuf-java-util:3.19.2") - api("com.google.protobuf:protobuf-java:3.19.2") { - because("https://snyk.io/vuln/SNYK-JAVA-COMGOOGLEPROTOBUF-2331703") - } + api("org.slf4j:slf4j-api:1.7.36") + api("io.reactivex.rxjava3:rxjava:3.1.5") + api("com.google.protobuf:protobuf-java-util:3.21.1") - api("org.projectlombok:lombok:1.18.18") + api("org.projectlombok:lombok:1.18.24") api("com.google.code.findbugs:jsr305:3.0.2") - api("com.typesafe:config:1.4.1") + api("com.typesafe:config:1.4.2") api("com.google.guava:guava:31.1-jre") api("com.graphql-java-kickstart:graphql-java-servlet:10.1.0") - api("io.grpc:grpc-api:1.45.1") - api("io.grpc:grpc-core:1.45.1") - api("io.grpc:grpc-stub:1.45.1") - api("io.grpc:grpc-context:1.45.1") - api("com.fasterxml.jackson.core:jackson-databind:2.13.2.2") + + api("com.fasterxml.jackson.core:jackson-databind:2.13.3") api("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.6") api("com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.12.6") api("org.apache.commons:commons-text:1.9") api("io.opentelemetry:opentelemetry-proto:1.1.0-alpha") - api("com.google.code.gson:gson:2.8.9") { - because("https://snyk.io/vuln/SNYK-JAVA-COMGOOGLECODEGSON-1730327") - } - runtime("org.apache.logging.log4j:log4j-slf4j-impl:2.17.1") - runtime("io.grpc:grpc-netty:1.45.1") - runtime("io.netty:netty-codec-http2:4.1.71.Final") - runtime("io.netty:netty-handler-proxy:4.1.71.Final") + runtime("org.apache.logging.log4j:log4j-slf4j-impl:2.17.2") } } From 5b612df8236f1c049ee2c55f9504eac85262a230 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Fri, 10 Jun 2022 15:58:39 +0200 Subject: [PATCH 097/173] feat: parallelize requests by default (#102) --- helm/templates/serviceconfig.yaml | 3 + helm/values.yaml | 3 + .../build.gradle.kts | 3 + .../context/AsyncDataFetcherFactory.java | 63 +++++++++++++++++++ .../DefaultGraphQlRequestContextBuilder.java | 15 +++-- .../context/GraphQlRequestContext.java | 4 +- .../context/AsyncDataFetcherFactoryTest.java | 40 ++++++++++++ ...faultGraphQlRequestContextBuilderTest.java | 15 +++-- .../service/DefaultGraphQlServiceConfig.java | 8 +++ .../resources/configs/common/application.conf | 1 + .../spi/config/GraphQlServiceConfig.java | 2 + 11 files changed, 144 insertions(+), 13 deletions(-) create mode 100644 hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/AsyncDataFetcherFactory.java create mode 100644 hypertrace-core-graphql-context/src/test/java/org/hypertrace/core/graphql/context/AsyncDataFetcherFactoryTest.java diff --git a/helm/templates/serviceconfig.yaml b/helm/templates/serviceconfig.yaml index d684efc8..382369c8 100644 --- a/helm/templates/serviceconfig.yaml +++ b/helm/templates/serviceconfig.yaml @@ -17,6 +17,9 @@ data: graphql.urlPath = {{ .Values.serviceConfig.urlPath }} graphql.corsEnabled = {{ .Values.serviceConfig.corsEnabled }} graphql.timeout = {{ .Values.serviceConfig.timeoutDuration }} + + threads.io.max = {{ .Values.serviceConfig.threads.io }} + threads.request.max = {{ .Values.serviceConfig.threads.request }} attribute.service = { host = {{ .Values.serviceConfig.attributeService.host }} diff --git a/helm/values.yaml b/helm/values.yaml index 70bb10ba..3b7debce 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -46,6 +46,9 @@ serviceConfig: corsEnabled: true defaultTenantId: "" timeoutDuration: 30s + threads: + io: 10 + request: 10 attributeService: host: attribute-service port: 9012 diff --git a/hypertrace-core-graphql-context/build.gradle.kts b/hypertrace-core-graphql-context/build.gradle.kts index 416c3ef7..6dc6379b 100644 --- a/hypertrace-core-graphql-context/build.gradle.kts +++ b/hypertrace-core-graphql-context/build.gradle.kts @@ -12,6 +12,9 @@ dependencies { implementation(project(":hypertrace-core-graphql-spi")) implementation("com.google.guava:guava") + annotationProcessor("org.projectlombok:lombok") + compileOnly("org.projectlombok:lombok") + testImplementation("org.junit.jupiter:junit-jupiter") testImplementation("org.mockito:mockito-core") testImplementation("org.mockito:mockito-junit-jupiter") diff --git a/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/AsyncDataFetcherFactory.java b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/AsyncDataFetcherFactory.java new file mode 100644 index 00000000..4e1d811b --- /dev/null +++ b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/AsyncDataFetcherFactory.java @@ -0,0 +1,63 @@ +package org.hypertrace.core.graphql.context; + +import static java.util.concurrent.TimeUnit.MILLISECONDS; + +import com.google.common.util.concurrent.ThreadFactoryBuilder; +import com.google.inject.Injector; +import graphql.schema.DataFetcher; +import graphql.schema.DataFetchingEnvironment; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import javax.inject.Inject; +import javax.inject.Singleton; +import lombok.AllArgsConstructor; +import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; + +@Singleton +class AsyncDataFetcherFactory { + + private final Injector injector; + private final GraphQlServiceConfig config; + private final ExecutorService requestExecutor; + + @Inject + AsyncDataFetcherFactory(Injector injector, GraphQlServiceConfig config) { + this.injector = injector; + this.config = config; + this.requestExecutor = + Executors.newFixedThreadPool( + config.getMaxRequestThreads(), + new ThreadFactoryBuilder().setDaemon(true).setNameFormat("request-handler-%d").build()); + } + + DataFetcher> buildDataFetcher( + Class>> dataFetcherClass) { + return new AsyncForwardingDataFetcher<>( + this.injector.getInstance(dataFetcherClass), requestExecutor, config); + } + + @AllArgsConstructor + private static class AsyncForwardingDataFetcher implements DataFetcher> { + private final DataFetcher> delegate; + private final ExecutorService executorService; + private final GraphQlServiceConfig config; + + @Override + public CompletableFuture get(DataFetchingEnvironment dataFetchingEnvironment) + throws Exception { + // Really all we're doing here is changing the thread that the future is run on by default + return CompletableFuture.supplyAsync( + () -> { + try { + return delegate + .get(dataFetchingEnvironment) + .get(config.getGraphQlTimeout().toMillis(), MILLISECONDS); + } catch (Exception e) { + throw new RuntimeException(e); + } + }, + executorService); + } + } +} diff --git a/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilder.java b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilder.java index 0f8d48e9..8fc724d1 100644 --- a/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilder.java +++ b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilder.java @@ -1,7 +1,6 @@ package org.hypertrace.core.graphql.context; import com.google.common.collect.Streams; -import com.google.inject.Injector; import graphql.kickstart.servlet.context.DefaultGraphQLServletContext; import graphql.kickstart.servlet.context.DefaultGraphQLServletContextBuilder; import graphql.kickstart.servlet.context.GraphQLServletContext; @@ -10,6 +9,7 @@ import java.util.Map; import java.util.Optional; import java.util.Set; +import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; import javax.annotation.Nonnull; import javax.inject.Inject; @@ -27,12 +27,13 @@ class DefaultGraphQlRequestContextBuilder extends DefaultGraphQLServletContextBu static final Set TRACING_CONTEXT_HEADER_KEY_PREFIXES = Set.of("X-B3-", "traceparent", "tracestate"); - private final Injector injector; private final GraphQlServiceConfig serviceConfig; + private final AsyncDataFetcherFactory dataFetcherFactory; @Inject - DefaultGraphQlRequestContextBuilder(Injector injector, GraphQlServiceConfig serviceConfig) { - this.injector = injector; + DefaultGraphQlRequestContextBuilder( + AsyncDataFetcherFactory dataFetcherFactory, GraphQlServiceConfig serviceConfig) { + this.dataFetcherFactory = dataFetcherFactory; this.serviceConfig = serviceConfig; } @@ -63,8 +64,10 @@ public Optional getDataLoaderRegistry() { } @Override - public > T constructDataFetcher(Class dataFetcherClass) { - return DefaultGraphQlRequestContextBuilder.this.injector.getInstance(dataFetcherClass); + public DataFetcher> constructDataFetcher( + Class>> dataFetcherClass) { + return DefaultGraphQlRequestContextBuilder.this.dataFetcherFactory.buildDataFetcher( + dataFetcherClass); } @Override diff --git a/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/GraphQlRequestContext.java b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/GraphQlRequestContext.java index 404c141f..d362fd9b 100644 --- a/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/GraphQlRequestContext.java +++ b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/GraphQlRequestContext.java @@ -4,6 +4,7 @@ import graphql.schema.DataFetcher; import java.util.Map; import java.util.Optional; +import java.util.concurrent.CompletableFuture; import javax.annotation.Nonnull; public interface GraphQlRequestContext extends GraphQLContext { @@ -12,7 +13,8 @@ public interface GraphQlRequestContext extends GraphQLContext { * A tool to create data fetchers via injection container due to limitations in the framework. For * normal injectable instantiation, do not use this method. */ - > T constructDataFetcher(Class dataFetcherClass); + DataFetcher> constructDataFetcher( + Class>> dataFetcherClass); Optional getAuthorizationHeader(); diff --git a/hypertrace-core-graphql-context/src/test/java/org/hypertrace/core/graphql/context/AsyncDataFetcherFactoryTest.java b/hypertrace-core-graphql-context/src/test/java/org/hypertrace/core/graphql/context/AsyncDataFetcherFactoryTest.java new file mode 100644 index 00000000..682279fe --- /dev/null +++ b/hypertrace-core-graphql-context/src/test/java/org/hypertrace/core/graphql/context/AsyncDataFetcherFactoryTest.java @@ -0,0 +1,40 @@ +package org.hypertrace.core.graphql.context; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.when; + +import com.google.inject.Guice; +import graphql.schema.DataFetcher; +import graphql.schema.DataFetchingEnvironment; +import java.util.concurrent.CompletableFuture; +import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class AsyncDataFetcherFactoryTest { + @Mock GraphQlServiceConfig graphQlServiceConfig; + @Mock DataFetchingEnvironment dataFetchingEnvironment; + + @Test + void canBuildAsyncDataFetcher() throws Exception { + when(graphQlServiceConfig.getMaxRequestThreads()).thenReturn(1); + DataFetcher> fetcher = + new AsyncDataFetcherFactory(Guice.createInjector(), graphQlServiceConfig) + .buildDataFetcher(ThreadEchoingDataFetcher.class); + + Thread fetcherThread = fetcher.get(dataFetchingEnvironment).get(); + + assertNotEquals(Thread.currentThread(), fetcherThread); + assertNotNull(fetcherThread); + } + + private static class ThreadEchoingDataFetcher implements DataFetcher> { + @Override + public CompletableFuture get(DataFetchingEnvironment environment) { + return CompletableFuture.completedFuture(Thread.currentThread()); + } + } +} diff --git a/hypertrace-core-graphql-context/src/test/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilderTest.java b/hypertrace-core-graphql-context/src/test/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilderTest.java index 8f0cdd43..9ef475de 100644 --- a/hypertrace-core-graphql-context/src/test/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilderTest.java +++ b/hypertrace-core-graphql-context/src/test/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilderTest.java @@ -14,12 +14,12 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import com.google.inject.Injector; import graphql.schema.DataFetcher; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.concurrent.CompletableFuture; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; @@ -32,7 +32,7 @@ @ExtendWith(MockitoExtension.class) class DefaultGraphQlRequestContextBuilderTest { - @Mock Injector mockInjector; + @Mock AsyncDataFetcherFactory mockDataFetcherFactory; @Mock HttpServletRequest mockRequest; @Mock HttpServletResponse mockResponse; @Mock GraphQlServiceConfig mockServiceConfig; @@ -43,7 +43,8 @@ class DefaultGraphQlRequestContextBuilderTest { @BeforeEach void beforeEach() { this.contextBuilder = - new DefaultGraphQlRequestContextBuilder(this.mockInjector, this.mockServiceConfig); + new DefaultGraphQlRequestContextBuilder( + this.mockDataFetcherFactory, this.mockServiceConfig); this.requestContext = this.contextBuilder.build(this.mockRequest, this.mockResponse); } @@ -70,9 +71,9 @@ void delegatesDataLoaderRegistry() { } @Test - void canConstructDataFetcher() { - this.requestContext.constructDataFetcher(DataFetcher.class); - verify(this.mockInjector).getInstance(DataFetcher.class); + void canDelegateDataFetcherConstruction() { + this.requestContext.constructDataFetcher(TestDataFetcher.class); + verify(this.mockDataFetcherFactory).buildDataFetcher(TestDataFetcher.class); } @Test @@ -135,4 +136,6 @@ void returnsLowerCasedTracingHeadersIfAnyMatches() { "x-b3-parent-trace-id value"), this.requestContext.getTracingContextHeaders()); } + + private interface TestDataFetcher extends DataFetcher> {} } diff --git a/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java index 24109512..d6c77495 100644 --- a/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java +++ b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java @@ -20,6 +20,7 @@ class DefaultGraphQlServiceConfig implements GraphQlServiceConfig { private static final String DEFAULT_TENANT_ID = "defaultTenantId"; private static final String MAX_IO_THREADS_PROPERTY = "threads.io.max"; + private static final String MAX_REQUEST_THREADS_PROPERTY = "threads.request.max"; private static final String ATTRIBUTE_SERVICE_HOST_PROPERTY = "attribute.service.host"; private static final String ATTRIBUTE_SERVICE_PORT_PROPERTY = "attribute.service.port"; @@ -36,6 +37,7 @@ class DefaultGraphQlServiceConfig implements GraphQlServiceConfig { private final Duration graphQlTimeout; private final Optional defaultTenantId; private final int maxIoThreads; + private final int maxRequestThreads; private final String attributeServiceHost; private final int attributeServicePort; private final Duration attributeServiceTimeout; @@ -51,6 +53,7 @@ class DefaultGraphQlServiceConfig implements GraphQlServiceConfig { this.graphQlTimeout = untypedConfig.getDuration(GRAPHQL_TIMEOUT); this.defaultTenantId = optionallyGet(() -> untypedConfig.getString(DEFAULT_TENANT_ID)); this.maxIoThreads = untypedConfig.getInt(MAX_IO_THREADS_PROPERTY); + this.maxRequestThreads = untypedConfig.getInt(MAX_REQUEST_THREADS_PROPERTY); this.attributeServiceHost = untypedConfig.getString(ATTRIBUTE_SERVICE_HOST_PROPERTY); this.attributeServicePort = untypedConfig.getInt(ATTRIBUTE_SERVICE_PORT_PROPERTY); @@ -98,6 +101,11 @@ public int getMaxIoThreads() { return maxIoThreads; } + @Override + public int getMaxRequestThreads() { + return maxRequestThreads; + } + @Override public String getAttributeServiceHost() { return this.attributeServiceHost; diff --git a/hypertrace-core-graphql-service/src/main/resources/configs/common/application.conf b/hypertrace-core-graphql-service/src/main/resources/configs/common/application.conf index 35f764b8..11216c86 100644 --- a/hypertrace-core-graphql-service/src/main/resources/configs/common/application.conf +++ b/hypertrace-core-graphql-service/src/main/resources/configs/common/application.conf @@ -8,6 +8,7 @@ graphql.corsEnabled = true graphql.timeout = 30s threads.io.max = 10 +threads.request.max = 10 attribute.service = { host = localhost diff --git a/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java b/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java index ca874f5c..1c3c9044 100644 --- a/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java +++ b/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java @@ -17,6 +17,8 @@ public interface GraphQlServiceConfig { Optional getDefaultTenantId(); + int getMaxRequestThreads(); + int getMaxIoThreads(); String getAttributeServiceHost(); From 47b1e94d3aff49e9d44dc9ecb6b1199bcb10f53a Mon Sep 17 00:00:00 2001 From: GurtejSohi Date: Wed, 29 Jun 2022 11:21:25 +0530 Subject: [PATCH 098/173] feat: add CONTAINS_KEY_LIKE operator (#104) --- .../schema/results/arguments/filter/FilterOperatorType.java | 3 ++- .../core/graphql/utils/gateway/OperatorConverter.java | 2 ++ hypertrace-core-graphql-platform/build.gradle.kts | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterOperatorType.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterOperatorType.java index 24b172f0..8a38b453 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterOperatorType.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterOperatorType.java @@ -14,7 +14,8 @@ public enum FilterOperatorType { IN, NOT_IN, CONTAINS_KEY, - CONTAINS_KEY_VALUE; + CONTAINS_KEY_VALUE, + CONTAINS_KEY_LIKE; public static final String TYPE_NAME = "FilterOperatorType"; } diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/OperatorConverter.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/OperatorConverter.java index f9935887..b04efb5b 100644 --- a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/OperatorConverter.java +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/OperatorConverter.java @@ -33,6 +33,8 @@ public Single convert(FilterOperatorType filterOperatorType) { return Single.just(Operator.CONTAINS_KEY); case CONTAINS_KEY_VALUE: return Single.just(Operator.CONTAINS_KEYVALUE); + case CONTAINS_KEY_LIKE: + return Single.just(Operator.CONTAINS_KEY_LIKE); default: return Single.error( new UnknownFormatConversionException( diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 753bc327..a3430fe5 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -14,7 +14,7 @@ dependencies { api("org.hypertrace.core.grpcutils:grpc-client-utils:0.7.4") api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.7.4") api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.7.4") - api("org.hypertrace.gateway.service:gateway-service-api:0.2.0") + api("org.hypertrace.gateway.service:gateway-service-api:0.2.10") api("org.hypertrace.core.attribute.service:caching-attribute-service-client:0.13.6") api("com.google.inject:guice:5.1.0") From 25000d16a4d095a2ada91a6158ee538745449945 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Wed, 27 Jul 2022 07:54:21 -0700 Subject: [PATCH 099/173] refactor: use http service framework (#105) * refactor: use http service framework * chore: update http framework to released version --- hypertrace-core-graphql-impl/build.gradle.kts | 2 - .../build.gradle.kts | 8 +- .../build.gradle.kts | 11 +- .../core/graphql/service/GraphQlService.java | 104 +++++------------- 4 files changed, 34 insertions(+), 91 deletions(-) diff --git a/hypertrace-core-graphql-impl/build.gradle.kts b/hypertrace-core-graphql-impl/build.gradle.kts index e93911a2..0db51f7d 100644 --- a/hypertrace-core-graphql-impl/build.gradle.kts +++ b/hypertrace-core-graphql-impl/build.gradle.kts @@ -27,8 +27,6 @@ dependencies { implementation("org.slf4j:slf4j-api") implementation("com.google.inject:guice") - runtimeOnly("io.grpc:grpc-netty") - testImplementation("org.junit.jupiter:junit-jupiter") testImplementation("org.mockito:mockito-core") testImplementation("org.mockito:mockito-junit-jupiter") diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index a3430fe5..5204a0f5 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -10,10 +10,10 @@ dependencies { api(platform("io.grpc:grpc-bom:1.47.0")) constraints { - api("org.hypertrace.core.grpcutils:grpc-context-utils:0.7.4") - api("org.hypertrace.core.grpcutils:grpc-client-utils:0.7.4") - api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.7.4") - api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.7.4") + api("org.hypertrace.core.grpcutils:grpc-context-utils:0.7.6") + api("org.hypertrace.core.grpcutils:grpc-client-utils:0.7.6") + api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.7.6") + api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.7.6") api("org.hypertrace.gateway.service:gateway-service-api:0.2.10") api("org.hypertrace.core.attribute.service:caching-attribute-service-client:0.13.6") diff --git a/hypertrace-core-graphql-service/build.gradle.kts b/hypertrace-core-graphql-service/build.gradle.kts index cb223db8..1d8cd5df 100644 --- a/hypertrace-core-graphql-service/build.gradle.kts +++ b/hypertrace-core-graphql-service/build.gradle.kts @@ -8,24 +8,17 @@ plugins { dependencies { implementation(platform(project(":hypertrace-core-graphql-platform"))) - implementation("com.typesafe:config") - implementation("org.hypertrace.core.serviceframework:platform-service-framework:0.1.23") + implementation("org.hypertrace.core.serviceframework:platform-http-service-framework:0.1.42") implementation("org.slf4j:slf4j-api") - implementation("org.eclipse.jetty:jetty-server:9.4.42.v20210604") - implementation("org.eclipse.jetty:jetty-servlet:9.4.42.v20210604") - implementation("org.eclipse.jetty:jetty-servlets:9.4.42.v20210604") - implementation("com.graphql-java-kickstart:graphql-java-servlet") implementation(project(":hypertrace-core-graphql-impl")) implementation(project(":hypertrace-core-graphql-spi")) runtimeOnly("org.apache.logging.log4j:log4j-slf4j-impl") + runtimeOnly("io.grpc:grpc-netty") } application { mainClass.set("org.hypertrace.core.serviceframework.PlatformServiceLauncher") } -tasks.run { - jvmArgs = listOf("-Dservice.name=${project.name}") -} diff --git a/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/GraphQlService.java b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/GraphQlService.java index 51c796c3..671989bf 100644 --- a/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/GraphQlService.java +++ b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/GraphQlService.java @@ -1,95 +1,47 @@ package org.hypertrace.core.graphql.service; -import java.util.EnumSet; -import javax.servlet.DispatcherType; -import org.eclipse.jetty.server.Server; -import org.eclipse.jetty.servlet.ServletContextHandler; -import org.eclipse.jetty.servlet.ServletHolder; -import org.eclipse.jetty.servlets.CrossOriginFilter; +import java.util.List; import org.hypertrace.core.graphql.impl.GraphQlFactory; import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; -import org.hypertrace.core.serviceframework.PlatformService; import org.hypertrace.core.serviceframework.config.ConfigClient; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.hypertrace.core.serviceframework.http.HttpContainerEnvironment; +import org.hypertrace.core.serviceframework.http.HttpHandlerDefinition; +import org.hypertrace.core.serviceframework.http.HttpHandlerDefinition.CorsConfig; +import org.hypertrace.core.serviceframework.http.HttpHandlerFactory; +import org.hypertrace.core.serviceframework.http.StandAloneHttpPlatformServiceContainer; -public class GraphQlService extends PlatformService { - - private static final Logger LOG = LoggerFactory.getLogger(GraphQlService.class); - - private GraphQlServiceConfig graphQlServiceConfig; - private DefaultGraphQlServiceLifecycle serviceLifecycle; - private Server server; +public class GraphQlService extends StandAloneHttpPlatformServiceContainer { + private static final String SERVICE_NAME = "hypertrace-core-graphql"; public GraphQlService(ConfigClient configClient) { super(configClient); } @Override - protected void doInit() { - this.graphQlServiceConfig = new DefaultGraphQlServiceConfig(this.getAppConfig()); - this.serviceLifecycle = new DefaultGraphQlServiceLifecycle(); - this.server = new Server(this.graphQlServiceConfig.getServicePort()); - - ServletContextHandler context = new ServletContextHandler(); - if (this.graphQlServiceConfig.isCorsEnabled()) { - context.addFilter( - CrossOriginFilter.class, - this.graphQlServiceConfig.getGraphQlUrlPath(), - EnumSet.of(DispatcherType.REQUEST)); - } - - context.addServlet( - new ServletHolder( - new GraphQlServiceHttpServlet( - GraphQlFactory.build(this.graphQlServiceConfig, this.serviceLifecycle))), - this.graphQlServiceConfig.getGraphQlUrlPath()); - - this.server.setHandler(context); - this.server.setStopAtShutdown(true); + protected List getHandlerFactories() { + return List.of(this::buildHandlerDefinition); } - @Override - protected void doStart() { - LOG.info("Starting service: {}", this.getServiceName()); - - try { - server.start(); - } catch (Exception e) { - LOG.error("Failed to start service: {}", this.getServiceName()); - throw new RuntimeException(e); - } - - try { - server.join(); - } catch (InterruptedException ie) { - Thread.currentThread().interrupt(); - throw new RuntimeException(ie); - } + List buildHandlerDefinition(HttpContainerEnvironment environment) { + GraphQlServiceConfig config = + new DefaultGraphQlServiceConfig(environment.getConfig(SERVICE_NAME)); + DefaultGraphQlServiceLifecycle serviceLifecycle = new DefaultGraphQlServiceLifecycle(); + environment.getLifecycle().shutdownComplete().thenRun(serviceLifecycle::shutdown); + + return List.of( + HttpHandlerDefinition.builder() + .name("graphql") + .port(config.getServicePort()) + .contextPath(config.getGraphQlUrlPath()) + .corsConfig(buildCorsConfig(config)) + .servlet(new GraphQlServiceHttpServlet(GraphQlFactory.build(config, serviceLifecycle))) + .build()); } - @Override - protected void doStop() { - LOG.info("Shutting down service: {}", this.getServiceName()); - if (this.serviceLifecycle != null) { - this.serviceLifecycle.shutdown(); - } - while (!server.isStopped()) { - try { - server.stop(); - } catch (Exception e) { - LOG.error("Failed to shutdown service: {}", this.getServiceName()); - throw new RuntimeException(e); - } + private CorsConfig buildCorsConfig(GraphQlServiceConfig config) { + if (!config.isCorsEnabled()) { + return null; } - try { - Thread.sleep(100); - } catch (InterruptedException ignore) { - } - } - - @Override - public boolean healthCheck() { - return true; + return CorsConfig.builder().allowedHeaders(List.of("*")).build(); } } From b3f39e740c0c51357d3a744dbef5bbb7f4425dd8 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Tue, 2 Aug 2022 13:39:31 -0700 Subject: [PATCH 100/173] refactor: use container-provided channel registry (#106) * refactor: use container-provided channel registry * fix: update snyk ignore * ci: update test publish plugin --- .github/workflows/pr-test.yml | 4 +-- .snyk | 2 +- .../grpc/DefaultGrpcChannelRegistry.java | 12 ++----- .../graphql/utils/grpc/GraphQlGrpcModule.java | 10 +++++- .../grpc/DefaultGrpcChannelRegistryTest.java | 34 ++----------------- hypertrace-core-graphql-impl/build.gradle.kts | 1 + .../core/graphql/impl/GraphQlFactory.java | 8 +++-- .../core/graphql/impl/GraphQlModule.java | 10 ++++-- .../core/graphql/impl/GraphQlModuleTest.java | 5 ++- .../core/graphql/service/GraphQlService.java | 5 ++- 10 files changed, 40 insertions(+), 51 deletions(-) diff --git a/.github/workflows/pr-test.yml b/.github/workflows/pr-test.yml index b9dfe86d..8e5f9300 100644 --- a/.github/workflows/pr-test.yml +++ b/.github/workflows/pr-test.yml @@ -40,8 +40,8 @@ jobs: flags: unit - name: Publish Unit Test Results - uses: docker://ghcr.io/enricomi/publish-unit-test-result-action:v1.6 + uses: docker://ghcr.io/enricomi/publish-unit-test-result-action:v2 if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository with: github_token: ${{ secrets.GITHUB_TOKEN }} - files: ./**/build/test-results/**/*.xml \ No newline at end of file + junit_files: ./**/build/test-results/**/*.xml \ No newline at end of file diff --git a/.snyk b/.snyk index 691c39d2..f67d1c46 100644 --- a/.snyk +++ b/.snyk @@ -5,6 +5,6 @@ ignore: SNYK-JAVA-IONETTY-1042268: - '*': reason: No replacement available - expires: 2022-07-31T00:00:00.000Z + expires: 2022-10-31T00:00:00.000Z patch: {} diff --git a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGrpcChannelRegistry.java b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGrpcChannelRegistry.java index 708d9b91..c29c03c0 100644 --- a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGrpcChannelRegistry.java +++ b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGrpcChannelRegistry.java @@ -1,20 +1,14 @@ package org.hypertrace.core.graphql.utils.grpc; import io.grpc.ManagedChannel; -import javax.inject.Inject; -import javax.inject.Singleton; -import org.hypertrace.core.graphql.spi.lifecycle.GraphQlServiceLifecycle; import org.hypertrace.core.grpcutils.client.GrpcChannelConfig; -@Singleton class DefaultGrpcChannelRegistry implements GrpcChannelRegistry { - private final org.hypertrace.core.grpcutils.client.GrpcChannelRegistry delegate = - new org.hypertrace.core.grpcutils.client.GrpcChannelRegistry(); + private final org.hypertrace.core.grpcutils.client.GrpcChannelRegistry delegate; - @Inject - DefaultGrpcChannelRegistry(GraphQlServiceLifecycle serviceLifecycle) { - serviceLifecycle.shutdownCompletion().thenRun(this.delegate::shutdown); + DefaultGrpcChannelRegistry(org.hypertrace.core.grpcutils.client.GrpcChannelRegistry delegate) { + this.delegate = delegate; } @Override diff --git a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcModule.java b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcModule.java index 1e32e347..f501a04c 100644 --- a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcModule.java +++ b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcModule.java @@ -7,11 +7,19 @@ public class GraphQlGrpcModule extends AbstractModule { + private final org.hypertrace.core.grpcutils.client.GrpcChannelRegistry channelRegistry; + + public GraphQlGrpcModule( + org.hypertrace.core.grpcutils.client.GrpcChannelRegistry channelRegistry) { + this.channelRegistry = channelRegistry; + } + @Override protected void configure() { bind(CallCredentials.class).toInstance(getClientCallCredsProvider().get()); bind(GraphQlGrpcContextBuilder.class).to(DefaultGraphQlGrpcContextBuilder.class); - bind(GrpcChannelRegistry.class).to(DefaultGrpcChannelRegistry.class); + bind(GrpcChannelRegistry.class) + .toInstance(new DefaultGrpcChannelRegistry(this.channelRegistry)); bind(GrpcContextBuilder.class).to(PlatformGrpcContextBuilder.class); } } diff --git a/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/DefaultGrpcChannelRegistryTest.java b/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/DefaultGrpcChannelRegistryTest.java index 270afa51..762f085c 100644 --- a/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/DefaultGrpcChannelRegistryTest.java +++ b/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/DefaultGrpcChannelRegistryTest.java @@ -1,36 +1,23 @@ package org.hypertrace.core.graphql.utils.grpc; -import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNotSame; import static org.junit.jupiter.api.Assertions.assertSame; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.mockito.Mockito.when; import io.grpc.Channel; -import io.grpc.ManagedChannel; -import java.util.concurrent.CompletableFuture; -import org.hypertrace.core.graphql.spi.lifecycle.GraphQlServiceLifecycle; +import org.hypertrace.core.grpcutils.client.GrpcChannelRegistry; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; @ExtendWith(MockitoExtension.class) class DefaultGrpcChannelRegistryTest { - - @Mock GraphQlServiceLifecycle mockLifecycle; - CompletableFuture shutdown; - DefaultGrpcChannelRegistry channelRegistry; @BeforeEach void beforeEach() { - this.shutdown = new CompletableFuture<>(); - when(this.mockLifecycle.shutdownCompletion()).thenReturn(this.shutdown); - this.channelRegistry = new DefaultGrpcChannelRegistry(this.mockLifecycle); + this.channelRegistry = new DefaultGrpcChannelRegistry(new GrpcChannelRegistry()); } @Test @@ -45,21 +32,4 @@ void reusesChannelsForDuplicateRequests() { assertNotSame(firstChannel, this.channelRegistry.forAddress("foo", 1001)); assertNotSame(firstChannel, this.channelRegistry.forAddress("bar", 1000)); } - - @Test - void shutdownAllChannelsOnLifecycleShutdown() { - ManagedChannel firstChannel = this.channelRegistry.forAddress("foo", 1000); - ManagedChannel secondChannel = this.channelRegistry.forAddress("foo", 1002); - assertFalse(firstChannel.isShutdown()); - assertFalse(secondChannel.isShutdown()); - this.shutdown.complete(null); - assertTrue(firstChannel.isShutdown()); - assertTrue(secondChannel.isShutdown()); - } - - @Test - void throwsIfNewChannelRequestedAfterLifecycleShutdown() { - this.shutdown.complete(null); - assertThrows(AssertionError.class, () -> this.channelRegistry.forAddress("foo", 1000)); - } } diff --git a/hypertrace-core-graphql-impl/build.gradle.kts b/hypertrace-core-graphql-impl/build.gradle.kts index 0db51f7d..c8545af6 100644 --- a/hypertrace-core-graphql-impl/build.gradle.kts +++ b/hypertrace-core-graphql-impl/build.gradle.kts @@ -7,6 +7,7 @@ plugins { dependencies { api(project(":hypertrace-core-graphql-spi")) api("com.graphql-java-kickstart:graphql-java-servlet") + api("org.hypertrace.core.grpcutils:grpc-client-utils") implementation(project(":hypertrace-core-graphql-schema-registry")) implementation(project(":hypertrace-core-graphql-context")) diff --git a/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlFactory.java b/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlFactory.java index 4b3c9a07..21dc88da 100644 --- a/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlFactory.java +++ b/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlFactory.java @@ -7,11 +7,15 @@ import org.hypertrace.core.graphql.context.GraphQlRequestContextBuilder; import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; import org.hypertrace.core.graphql.spi.lifecycle.GraphQlServiceLifecycle; +import org.hypertrace.core.grpcutils.client.GrpcChannelRegistry; public class GraphQlFactory { public static GraphQLConfiguration build( - GraphQlServiceConfig config, GraphQlServiceLifecycle lifecycle) { - final Injector injector = Guice.createInjector(new GraphQlModule(config, lifecycle)); + GraphQlServiceConfig config, + GraphQlServiceLifecycle lifecycle, + GrpcChannelRegistry grpcChannelRegistry) { + final Injector injector = + Guice.createInjector(new GraphQlModule(config, lifecycle, grpcChannelRegistry)); return GraphQLConfiguration.with(injector.getInstance(GraphQLSchema.class)) .with(injector.getInstance(GraphQlRequestContextBuilder.class)) diff --git a/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlModule.java b/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlModule.java index 68f973ba..f106f6df 100644 --- a/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlModule.java +++ b/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlModule.java @@ -19,15 +19,21 @@ import org.hypertrace.core.graphql.utils.gateway.GatewayUtilsModule; import org.hypertrace.core.graphql.utils.grpc.GraphQlGrpcModule; import org.hypertrace.core.graphql.utils.schema.SchemaUtilsModule; +import org.hypertrace.core.grpcutils.client.GrpcChannelRegistry; class GraphQlModule extends AbstractModule { private final GraphQlServiceConfig config; private final GraphQlServiceLifecycle lifecycle; + private final org.hypertrace.core.grpcutils.client.GrpcChannelRegistry grpcChannelRegistry; - public GraphQlModule(final GraphQlServiceConfig config, final GraphQlServiceLifecycle lifecycle) { + public GraphQlModule( + final GraphQlServiceConfig config, + final GraphQlServiceLifecycle lifecycle, + final GrpcChannelRegistry grpcChannelRegistry) { this.config = config; this.lifecycle = lifecycle; + this.grpcChannelRegistry = grpcChannelRegistry; } @Override @@ -35,7 +41,7 @@ protected void configure() { bind(GraphQlServiceConfig.class).toInstance(this.config); bind(GraphQlServiceLifecycle.class).toInstance(this.lifecycle); install(new GraphQlRequestContextModule()); - install(new GraphQlGrpcModule()); + install(new GraphQlGrpcModule(this.grpcChannelRegistry)); install(new GraphQlSchemaRegistryModule()); install(new GraphQlDeserializationRegistryModule()); install(new CommonSchemaModule()); diff --git a/hypertrace-core-graphql-impl/src/test/java/org/hypertrace/core/graphql/impl/GraphQlModuleTest.java b/hypertrace-core-graphql-impl/src/test/java/org/hypertrace/core/graphql/impl/GraphQlModuleTest.java index ecfc3a55..1e1d0122 100644 --- a/hypertrace-core-graphql-impl/src/test/java/org/hypertrace/core/graphql/impl/GraphQlModuleTest.java +++ b/hypertrace-core-graphql-impl/src/test/java/org/hypertrace/core/graphql/impl/GraphQlModuleTest.java @@ -6,6 +6,7 @@ import com.google.inject.Guice; import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; import org.hypertrace.core.graphql.spi.lifecycle.GraphQlServiceLifecycle; +import org.hypertrace.core.grpcutils.client.GrpcChannelRegistry; import org.junit.jupiter.api.Test; public class GraphQlModuleTest { @@ -16,7 +17,9 @@ public void testResolveBindings() { () -> Guice.createInjector( new GraphQlModule( - mock(GraphQlServiceConfig.class), mock(GraphQlServiceLifecycle.class))) + mock(GraphQlServiceConfig.class), + mock(GraphQlServiceLifecycle.class), + mock(GrpcChannelRegistry.class))) .getAllBindings()); } } diff --git a/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/GraphQlService.java b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/GraphQlService.java index 671989bf..b46d5383 100644 --- a/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/GraphQlService.java +++ b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/GraphQlService.java @@ -34,7 +34,10 @@ List buildHandlerDefinition(HttpContainerEnvironment envi .port(config.getServicePort()) .contextPath(config.getGraphQlUrlPath()) .corsConfig(buildCorsConfig(config)) - .servlet(new GraphQlServiceHttpServlet(GraphQlFactory.build(config, serviceLifecycle))) + .servlet( + new GraphQlServiceHttpServlet( + GraphQlFactory.build( + config, serviceLifecycle, environment.getChannelRegistry()))) .build()); } From fd5b13d60a63ef6a5bacdfb9ae3fea49ce11f946 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Fri, 9 Sep 2022 13:14:11 -0400 Subject: [PATCH 101/173] refactor: add request id, change how registry is provided (#107) * refactor: add request id, change how registry is provided * test: update tests, style --- build.gradle.kts | 8 +-- .../DefaultGraphQlRequestContextBuilder.java | 9 +++ .../context/GraphQlRequestContext.java | 2 + .../grpc/DefaultGrpcChannelRegistry.java | 5 +- .../utils/grpc/GraphQlGrpcContextBuilder.java | 4 +- .../graphql/utils/grpc/GraphQlGrpcModule.java | 10 +-- .../utils/grpc/GrpcChannelRegistry.java | 3 +- .../grpc/PlatformGrpcContextBuilder.java | 4 +- .../grpc/PlatformGrpcContextBuilderTest.java | 24 +++++-- .../core/graphql/impl/GraphQlModule.java | 5 +- .../core/graphql/impl/GraphQlModuleTest.java | 13 ++++ .../build.gradle.kts | 64 +++++++++---------- .../build.gradle.kts | 8 +-- 13 files changed, 98 insertions(+), 61 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index aa461206..1175a86b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,10 +1,10 @@ plugins { - id("org.hypertrace.repository-plugin") version "0.4.0" + id("org.hypertrace.repository-plugin") version "0.4.1" id("org.hypertrace.ci-utils-plugin") version "0.3.0" id("org.hypertrace.jacoco-report-plugin") version "0.2.0" apply false - id("org.hypertrace.docker-java-application-plugin") version "0.9.0" apply false - id("org.hypertrace.docker-publish-plugin") version "0.9.0" apply false - id("org.hypertrace.code-style-plugin") version "1.1.0" apply false + id("org.hypertrace.docker-java-application-plugin") version "0.9.5" apply false + id("org.hypertrace.docker-publish-plugin") version "0.9.5" apply false + id("org.hypertrace.code-style-plugin") version "1.1.2" apply false } subprojects { diff --git a/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilder.java b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilder.java index 8fc724d1..8bdb718f 100644 --- a/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilder.java +++ b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilder.java @@ -9,6 +9,7 @@ import java.util.Map; import java.util.Optional; import java.util.Set; +import java.util.UUID; import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; import javax.annotation.Nonnull; @@ -46,6 +47,8 @@ private final class DefaultGraphQlRequestContext implements GraphQlRequestContex private final GraphQLServletContext servletContext; private final ContextualCachingKey cachingKey; + private final String requestId = UUID.randomUUID().toString(); + private DefaultGraphQlRequestContext(HttpServletRequest request, HttpServletResponse response) { this.servletContext = DefaultGraphQLServletContext.createServletContext().with(request).with(response).build(); @@ -102,6 +105,12 @@ public Map getTracingContextHeaders() { public ContextualCachingKey getCachingKey() { return this.cachingKey; } + + @Nonnull + @Override + public String getRequestId() { + return this.requestId; + } } private static class DefaultContextualCacheKey implements ContextualCachingKey { diff --git a/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/GraphQlRequestContext.java b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/GraphQlRequestContext.java index d362fd9b..98562f95 100644 --- a/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/GraphQlRequestContext.java +++ b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/GraphQlRequestContext.java @@ -24,4 +24,6 @@ DataFetcher> constructDataFetcher( @Nonnull ContextualCachingKey getCachingKey(); + + String getRequestId(); } diff --git a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGrpcChannelRegistry.java b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGrpcChannelRegistry.java index c29c03c0..fe5acba3 100644 --- a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGrpcChannelRegistry.java +++ b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/DefaultGrpcChannelRegistry.java @@ -1,12 +1,15 @@ package org.hypertrace.core.graphql.utils.grpc; +import io.grpc.Channel; import io.grpc.ManagedChannel; +import javax.inject.Inject; import org.hypertrace.core.grpcutils.client.GrpcChannelConfig; class DefaultGrpcChannelRegistry implements GrpcChannelRegistry { private final org.hypertrace.core.grpcutils.client.GrpcChannelRegistry delegate; + @Inject DefaultGrpcChannelRegistry(org.hypertrace.core.grpcutils.client.GrpcChannelRegistry delegate) { this.delegate = delegate; } @@ -17,7 +20,7 @@ public ManagedChannel forAddress(String host, int port) { } @Override - public ManagedChannel forAddress(String host, int port, GrpcChannelConfig channelConfig) { + public Channel forAddress(String host, int port, GrpcChannelConfig channelConfig) { return this.delegate.forPlaintextAddress(host, port, channelConfig); } } diff --git a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcContextBuilder.java b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcContextBuilder.java index 3018f36b..fcaa7726 100644 --- a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcContextBuilder.java +++ b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcContextBuilder.java @@ -2,7 +2,9 @@ import org.hypertrace.core.graphql.context.GraphQlRequestContext; -/** @deprecated Use {@link GrpcContextBuilder#build(GraphQlRequestContext)} instead */ +/** + * @deprecated Use {@link GrpcContextBuilder#build(GraphQlRequestContext)} instead + */ @Deprecated public interface GraphQlGrpcContextBuilder { GraphQlGrpcContext build(GraphQlRequestContext requestContext); diff --git a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcModule.java b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcModule.java index f501a04c..1e32e347 100644 --- a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcModule.java +++ b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GraphQlGrpcModule.java @@ -7,19 +7,11 @@ public class GraphQlGrpcModule extends AbstractModule { - private final org.hypertrace.core.grpcutils.client.GrpcChannelRegistry channelRegistry; - - public GraphQlGrpcModule( - org.hypertrace.core.grpcutils.client.GrpcChannelRegistry channelRegistry) { - this.channelRegistry = channelRegistry; - } - @Override protected void configure() { bind(CallCredentials.class).toInstance(getClientCallCredsProvider().get()); bind(GraphQlGrpcContextBuilder.class).to(DefaultGraphQlGrpcContextBuilder.class); - bind(GrpcChannelRegistry.class) - .toInstance(new DefaultGrpcChannelRegistry(this.channelRegistry)); + bind(GrpcChannelRegistry.class).to(DefaultGrpcChannelRegistry.class); bind(GrpcContextBuilder.class).to(PlatformGrpcContextBuilder.class); } } diff --git a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GrpcChannelRegistry.java b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GrpcChannelRegistry.java index 6ced2495..2bb22507 100644 --- a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GrpcChannelRegistry.java +++ b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GrpcChannelRegistry.java @@ -1,11 +1,10 @@ package org.hypertrace.core.graphql.utils.grpc; import io.grpc.Channel; -import io.grpc.ManagedChannel; import org.hypertrace.core.grpcutils.client.GrpcChannelConfig; public interface GrpcChannelRegistry { Channel forAddress(String host, int port); - ManagedChannel forAddress(String host, int port, GrpcChannelConfig channelConfig); + Channel forAddress(String host, int port, GrpcChannelConfig channelConfig); } diff --git a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/PlatformGrpcContextBuilder.java b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/PlatformGrpcContextBuilder.java index e6548e43..7c090220 100644 --- a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/PlatformGrpcContextBuilder.java +++ b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/PlatformGrpcContextBuilder.java @@ -1,6 +1,7 @@ package org.hypertrace.core.graphql.utils.grpc; import static org.hypertrace.core.grpcutils.context.RequestContextConstants.AUTHORIZATION_HEADER; +import static org.hypertrace.core.grpcutils.context.RequestContextConstants.REQUEST_ID_HEADER_KEY; import static org.hypertrace.core.grpcutils.context.RequestContextConstants.TENANT_ID_HEADER_KEY; import java.util.Arrays; @@ -23,7 +24,8 @@ public RequestContext build(GraphQlRequestContext requestContext) { this.flattenOptionalMap( Map.of( AUTHORIZATION_HEADER, this.extractAuthorizationHeader(requestContext), - TENANT_ID_HEADER_KEY, this.extractTenantId(requestContext)))); + TENANT_ID_HEADER_KEY, this.extractTenantId(requestContext), + REQUEST_ID_HEADER_KEY, Optional.of(requestContext.getRequestId())))); return this.build(grpcHeaders); } diff --git a/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/PlatformGrpcContextBuilderTest.java b/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/PlatformGrpcContextBuilderTest.java index 4dc41889..7b0efaf1 100644 --- a/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/PlatformGrpcContextBuilderTest.java +++ b/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/PlatformGrpcContextBuilderTest.java @@ -1,8 +1,9 @@ package org.hypertrace.core.graphql.utils.grpc; -import static java.util.Collections.emptyMap; +import static org.hypertrace.core.grpcutils.context.RequestContextConstants.REQUEST_ID_HEADER_KEY; import static org.hypertrace.core.grpcutils.context.RequestContextConstants.TENANT_ID_HEADER_KEY; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.mockito.Mockito.when; import java.util.Map; @@ -23,6 +24,7 @@ class PlatformGrpcContextBuilderTest { @Test void addsTenantIdToContext() { when(this.mockRequestContext.getTenantId()).thenReturn(Optional.of("tenant id")); + when(this.mockRequestContext.getRequestId()).thenReturn("request id"); assertEquals( Optional.of("tenant id"), this.builder.build(this.mockRequestContext).getTenantId()); } @@ -30,21 +32,33 @@ void addsTenantIdToContext() { @Test void addsTracingHeadersToContext() { when(this.mockRequestContext.getTenantId()).thenReturn(Optional.of("tenant id")); + when(this.mockRequestContext.getRequestId()).thenReturn("request id"); when(this.mockRequestContext.getTracingContextHeaders()) .thenReturn(Map.of("traceid", "traceid value")); this.builder.build(this.mockRequestContext); assertEquals( - Map.of(TENANT_ID_HEADER_KEY, "tenant id", "traceid", "traceid value"), + Map.of( + TENANT_ID_HEADER_KEY, + "tenant id", + REQUEST_ID_HEADER_KEY, + "request id", + "traceid", + "traceid value"), this.builder.build(this.mockRequestContext).getRequestHeaders()); } @Test void passesAuthHeaderToPlatformContextIfPresent() { - assertEquals(emptyMap(), this.builder.build(this.mockRequestContext).getRequestHeaders()); + when(this.mockRequestContext.getRequestId()).thenReturn("request id"); + assertFalse( + this.builder + .build(this.mockRequestContext) + .getRequestHeaders() + .containsKey("authorization")); when(this.mockRequestContext.getAuthorizationHeader()).thenReturn(Optional.of("auth header")); assertEquals( - Map.of("authorization", "auth header"), - this.builder.build(this.mockRequestContext).getRequestHeaders()); + "auth header", + this.builder.build(this.mockRequestContext).getRequestHeaders().get("authorization")); } } diff --git a/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlModule.java b/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlModule.java index f106f6df..d3dfc732 100644 --- a/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlModule.java +++ b/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlModule.java @@ -25,7 +25,7 @@ class GraphQlModule extends AbstractModule { private final GraphQlServiceConfig config; private final GraphQlServiceLifecycle lifecycle; - private final org.hypertrace.core.grpcutils.client.GrpcChannelRegistry grpcChannelRegistry; + private final GrpcChannelRegistry grpcChannelRegistry; public GraphQlModule( final GraphQlServiceConfig config, @@ -40,8 +40,9 @@ public GraphQlModule( protected void configure() { bind(GraphQlServiceConfig.class).toInstance(this.config); bind(GraphQlServiceLifecycle.class).toInstance(this.lifecycle); + bind(GrpcChannelRegistry.class).toInstance(this.grpcChannelRegistry); install(new GraphQlRequestContextModule()); - install(new GraphQlGrpcModule(this.grpcChannelRegistry)); + install(new GraphQlGrpcModule()); install(new GraphQlSchemaRegistryModule()); install(new GraphQlDeserializationRegistryModule()); install(new CommonSchemaModule()); diff --git a/hypertrace-core-graphql-impl/src/test/java/org/hypertrace/core/graphql/impl/GraphQlModuleTest.java b/hypertrace-core-graphql-impl/src/test/java/org/hypertrace/core/graphql/impl/GraphQlModuleTest.java index 1e1d0122..b7df02fc 100644 --- a/hypertrace-core-graphql-impl/src/test/java/org/hypertrace/core/graphql/impl/GraphQlModuleTest.java +++ b/hypertrace-core-graphql-impl/src/test/java/org/hypertrace/core/graphql/impl/GraphQlModuleTest.java @@ -4,6 +4,7 @@ import static org.mockito.Mockito.mock; import com.google.inject.Guice; +import graphql.schema.GraphQLSchema; import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; import org.hypertrace.core.graphql.spi.lifecycle.GraphQlServiceLifecycle; import org.hypertrace.core.grpcutils.client.GrpcChannelRegistry; @@ -22,4 +23,16 @@ public void testResolveBindings() { mock(GrpcChannelRegistry.class))) .getAllBindings()); } + + @Test + public void testResolveSchema() { + assertDoesNotThrow( + () -> + Guice.createInjector( + new GraphQlModule( + mock(GraphQlServiceConfig.class), + mock(GraphQlServiceLifecycle.class), + mock(GrpcChannelRegistry.class))) + .getInstance(GraphQLSchema.class)); + } } diff --git a/hypertrace-core-graphql-log-event-schema/build.gradle.kts b/hypertrace-core-graphql-log-event-schema/build.gradle.kts index 9b844437..da31f39f 100644 --- a/hypertrace-core-graphql-log-event-schema/build.gradle.kts +++ b/hypertrace-core-graphql-log-event-schema/build.gradle.kts @@ -1,40 +1,40 @@ plugins { - `java-library` + `java-library` } dependencies { - api("com.google.inject:guice") - api("com.graphql-java:graphql-java") - api(project(":hypertrace-core-graphql-spi")) - api("io.github.graphql-java:graphql-java-annotations") - - annotationProcessor("org.projectlombok:lombok") - compileOnly("org.projectlombok:lombok") - - compileOnly(project(":hypertrace-core-graphql-attribute-scope-constants")) - - implementation("org.slf4j:slf4j-api") - implementation("io.reactivex.rxjava3:rxjava") - implementation("org.hypertrace.gateway.service:gateway-service-api") - implementation("com.google.protobuf:protobuf-java-util") - - implementation(project(":hypertrace-core-graphql-context")) - implementation(project(":hypertrace-core-graphql-grpc-utils")) - implementation(project(":hypertrace-core-graphql-common-schema")) - implementation(project(":hypertrace-core-graphql-attribute-store")) - implementation(project(":hypertrace-core-graphql-deserialization")) - implementation(project(":hypertrace-core-graphql-schema-utils")) - - testImplementation("org.junit.jupiter:junit-jupiter") - testImplementation("com.fasterxml.jackson.core:jackson-databind") - testImplementation(project(":hypertrace-core-graphql-gateway-service-utils")) - testImplementation("org.mockito:mockito-core") - testImplementation("org.mockito:mockito-junit-jupiter") - - testAnnotationProcessor("org.projectlombok:lombok") - testCompileOnly("org.projectlombok:lombok") + api("com.google.inject:guice") + api("com.graphql-java:graphql-java") + api(project(":hypertrace-core-graphql-spi")) + api("io.github.graphql-java:graphql-java-annotations") + + annotationProcessor("org.projectlombok:lombok") + compileOnly("org.projectlombok:lombok") + + compileOnly(project(":hypertrace-core-graphql-attribute-scope-constants")) + + implementation("org.slf4j:slf4j-api") + implementation("io.reactivex.rxjava3:rxjava") + implementation("org.hypertrace.gateway.service:gateway-service-api") + implementation("com.google.protobuf:protobuf-java-util") + + implementation(project(":hypertrace-core-graphql-context")) + implementation(project(":hypertrace-core-graphql-grpc-utils")) + implementation(project(":hypertrace-core-graphql-common-schema")) + implementation(project(":hypertrace-core-graphql-attribute-store")) + implementation(project(":hypertrace-core-graphql-deserialization")) + implementation(project(":hypertrace-core-graphql-schema-utils")) + + testImplementation("org.junit.jupiter:junit-jupiter") + testImplementation("com.fasterxml.jackson.core:jackson-databind") + testImplementation(project(":hypertrace-core-graphql-gateway-service-utils")) + testImplementation("org.mockito:mockito-core") + testImplementation("org.mockito:mockito-junit-jupiter") + + testAnnotationProcessor("org.projectlombok:lombok") + testCompileOnly("org.projectlombok:lombok") } tasks.test { - useJUnitPlatform() + useJUnitPlatform() } diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 5204a0f5..02c7904c 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -10,10 +10,10 @@ dependencies { api(platform("io.grpc:grpc-bom:1.47.0")) constraints { - api("org.hypertrace.core.grpcutils:grpc-context-utils:0.7.6") - api("org.hypertrace.core.grpcutils:grpc-client-utils:0.7.6") - api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.7.6") - api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.7.6") + api("org.hypertrace.core.grpcutils:grpc-context-utils:0.7.7") + api("org.hypertrace.core.grpcutils:grpc-client-utils:0.7.7") + api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.7.7") + api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.7.7") api("org.hypertrace.gateway.service:gateway-service-api:0.2.10") api("org.hypertrace.core.attribute.service:caching-attribute-service-client:0.13.6") From 914fb0d87828af6a69a1d88b30f6b0f7d45c71a7 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Tue, 13 Sep 2022 16:22:20 -0400 Subject: [PATCH 102/173] refactor: update jackson (#108) * refactor: update jackson * fix: data packages require version --- hypertrace-core-graphql-platform/build.gradle.kts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 02c7904c..206386e3 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -30,9 +30,10 @@ dependencies { api("com.google.guava:guava:31.1-jre") api("com.graphql-java-kickstart:graphql-java-servlet:10.1.0") - api("com.fasterxml.jackson.core:jackson-databind:2.13.3") - api("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.6") - api("com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.12.6") + api("com.fasterxml.jackson.core:jackson-databind:2.13.4") + api("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.4") + api("com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.4") + api("com.fasterxml.jackson:jackson-bom:2.13.4") api("org.apache.commons:commons-text:1.9") api("io.opentelemetry:opentelemetry-proto:1.1.0-alpha") From 7b93309dc1b3507b14f0608b1909add2cd571aa5 Mon Sep 17 00:00:00 2001 From: SrikarMannepalli <37926341+SrikarMannepalli@users.noreply.github.com> Date: Fri, 16 Sep 2022 17:18:28 +0530 Subject: [PATCH 103/173] chore: update gateway service version for DISTINCT operator support (#109) --- hypertrace-core-graphql-platform/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 206386e3..04709e62 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -14,7 +14,7 @@ dependencies { api("org.hypertrace.core.grpcutils:grpc-client-utils:0.7.7") api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.7.7") api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.7.7") - api("org.hypertrace.gateway.service:gateway-service-api:0.2.10") + api("org.hypertrace.gateway.service:gateway-service-api:0.2.12") api("org.hypertrace.core.attribute.service:caching-attribute-service-client:0.13.6") api("com.google.inject:guice:5.1.0") From 3584f91aa76d867f3c7ffb98fa74a4ecf0be916c Mon Sep 17 00:00:00 2001 From: SrikarMannepalli <37926341+SrikarMannepalli@users.noreply.github.com> Date: Mon, 19 Sep 2022 21:56:22 +0530 Subject: [PATCH 104/173] feat: Add DISTINCT_ARRAY aggregation type (#110) * feat: add distinct aggregation * add DISTINCT_ARRAY operator * update attribute service --- .../attributes/AttributeModelMetricAggregationType.java | 3 ++- .../core/graphql/attributes/AttributeModelTranslator.java | 2 ++ .../common/schema/attributes/MetricAggregationType.java | 3 ++- .../AttributeModelMetricAggregationTypeConverter.java | 2 ++ .../utils/attributes/MetricAggregationTypeConverter.java | 2 ++ hypertrace-core-graphql-platform/build.gradle.kts | 4 ++-- 6 files changed, 12 insertions(+), 4 deletions(-) diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelMetricAggregationType.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelMetricAggregationType.java index 4154650a..58452285 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelMetricAggregationType.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelMetricAggregationType.java @@ -8,5 +8,6 @@ public enum AttributeModelMetricAggregationType { MAX, AVGRATE, PERCENTILE, - DISTINCT_COUNT + DISTINCT_COUNT, + DISTINCT_ARRAY } diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java index a46c75e8..663d295c 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java @@ -60,6 +60,8 @@ private AttributeModelMetricAggregationType convertMetricAggregationType( return AttributeModelMetricAggregationType.PERCENTILE; case DISTINCT_COUNT: return AttributeModelMetricAggregationType.DISTINCT_COUNT; + case DISTINCT_ARRAY: + return AttributeModelMetricAggregationType.DISTINCT_ARRAY; case AGG_UNDEFINED: case UNRECOGNIZED: default: diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/MetricAggregationType.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/MetricAggregationType.java index f90d9d64..c40aeab0 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/MetricAggregationType.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/MetricAggregationType.java @@ -11,7 +11,8 @@ public enum MetricAggregationType { MAX, AVGRATE, PERCENTILE, - DISTINCTCOUNT; + DISTINCTCOUNT, + DISTINCT_ARRAY; public static final String TYPE_NAME = "MetricAggregationType"; } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeModelMetricAggregationTypeConverter.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeModelMetricAggregationTypeConverter.java index ddcf088b..61190fee 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeModelMetricAggregationTypeConverter.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeModelMetricAggregationTypeConverter.java @@ -29,6 +29,8 @@ public Single convert( return Single.just(AttributeModelMetricAggregationType.PERCENTILE); case DISTINCTCOUNT: return Single.just(AttributeModelMetricAggregationType.DISTINCT_COUNT); + case DISTINCT_ARRAY: + return Single.just(AttributeModelMetricAggregationType.DISTINCT_ARRAY); default: return Single.error( new UnknownFormatConversionException( diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/MetricAggregationTypeConverter.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/MetricAggregationTypeConverter.java index 8a51affc..4112e04a 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/MetricAggregationTypeConverter.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/MetricAggregationTypeConverter.java @@ -29,6 +29,8 @@ public Single convert( return Single.just(MetricAggregationType.PERCENTILE); case DISTINCT_COUNT: return Single.just(MetricAggregationType.DISTINCTCOUNT); + case DISTINCT_ARRAY: + return Single.just(MetricAggregationType.DISTINCT_ARRAY); default: return Single.error( new UnknownFormatConversionException( diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 04709e62..eaa7247c 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -14,8 +14,8 @@ dependencies { api("org.hypertrace.core.grpcutils:grpc-client-utils:0.7.7") api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.7.7") api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.7.7") - api("org.hypertrace.gateway.service:gateway-service-api:0.2.12") - api("org.hypertrace.core.attribute.service:caching-attribute-service-client:0.13.6") + api("org.hypertrace.gateway.service:gateway-service-api:0.2.13") + api("org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.8") api("com.google.inject:guice:5.1.0") api("com.graphql-java:graphql-java:15.0") From 5a3270648d5ba6ccac503f93b9d0ec9ebd3f5f8c Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Fri, 23 Sep 2022 12:36:52 -0400 Subject: [PATCH 105/173] refactor: add ability to restore context (#111) --- .../core/graphql/utils/grpc/GrpcContextBuilder.java | 3 +++ .../utils/grpc/PlatformGrpcContextBuilder.java | 12 ++++++++++++ .../utils/grpc/PlatformGrpcContextBuilderTest.java | 9 +++++++++ 3 files changed, 24 insertions(+) diff --git a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GrpcContextBuilder.java b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GrpcContextBuilder.java index 48c7b332..26373636 100644 --- a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GrpcContextBuilder.java +++ b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/GrpcContextBuilder.java @@ -1,8 +1,11 @@ package org.hypertrace.core.graphql.utils.grpc; +import java.util.Optional; import org.hypertrace.core.graphql.context.GraphQlRequestContext; import org.hypertrace.core.grpcutils.context.RequestContext; public interface GrpcContextBuilder { RequestContext build(GraphQlRequestContext requestContext); + + Optional tryRestore(RequestContext requestContext); } diff --git a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/PlatformGrpcContextBuilder.java b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/PlatformGrpcContextBuilder.java index 7c090220..880ec704 100644 --- a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/PlatformGrpcContextBuilder.java +++ b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/PlatformGrpcContextBuilder.java @@ -4,6 +4,9 @@ import static org.hypertrace.core.grpcutils.context.RequestContextConstants.REQUEST_ID_HEADER_KEY; import static org.hypertrace.core.grpcutils.context.RequestContextConstants.TENANT_ID_HEADER_KEY; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import java.time.Duration; import java.util.Arrays; import java.util.Collection; import java.util.Map; @@ -16,8 +19,12 @@ class PlatformGrpcContextBuilder implements GrpcContextBuilder { + private final Cache contextCache = + CacheBuilder.newBuilder().expireAfterAccess(Duration.ofMinutes(1)).maximumSize(1000).build(); + @Override public RequestContext build(GraphQlRequestContext requestContext) { + this.contextCache.put(requestContext.getRequestId(), requestContext); Map grpcHeaders = this.mergeMaps( requestContext.getTracingContextHeaders(), @@ -30,6 +37,11 @@ public RequestContext build(GraphQlRequestContext requestContext) { return this.build(grpcHeaders); } + @Override + public Optional tryRestore(RequestContext requestContext) { + return requestContext.getRequestId().map(this.contextCache::getIfPresent); + } + private RequestContext build(@Nonnull Map headers) { RequestContext platformContext = new RequestContext(); headers.forEach(platformContext::add); diff --git a/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/PlatformGrpcContextBuilderTest.java b/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/PlatformGrpcContextBuilderTest.java index 7b0efaf1..20ef7a77 100644 --- a/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/PlatformGrpcContextBuilderTest.java +++ b/hypertrace-core-graphql-grpc-utils/src/test/java/org/hypertrace/core/graphql/utils/grpc/PlatformGrpcContextBuilderTest.java @@ -9,6 +9,7 @@ import java.util.Map; import java.util.Optional; import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.core.grpcutils.context.RequestContext; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; @@ -61,4 +62,12 @@ void passesAuthHeaderToPlatformContextIfPresent() { "auth header", this.builder.build(this.mockRequestContext).getRequestHeaders().get("authorization")); } + + @Test + void testRestoreContext() { + when(this.mockRequestContext.getRequestId()).thenReturn("request id"); + RequestContext resultContext = this.builder.build(this.mockRequestContext); + assertEquals(Optional.empty(), this.builder.tryRestore(RequestContext.forTenantId("other"))); + assertEquals(Optional.of(this.mockRequestContext), this.builder.tryRestore(resultContext)); + } } From d4c23db329fecbd24fbf5d9812c76045fd7dcef2 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Wed, 28 Sep 2022 09:23:27 -0400 Subject: [PATCH 106/173] fix: make stateful builder singleton, upgrade context (#112) --- .../graphql/utils/grpc/PlatformGrpcContextBuilder.java | 2 ++ hypertrace-core-graphql-platform/build.gradle.kts | 8 ++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/PlatformGrpcContextBuilder.java b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/PlatformGrpcContextBuilder.java index 880ec704..6b970775 100644 --- a/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/PlatformGrpcContextBuilder.java +++ b/hypertrace-core-graphql-grpc-utils/src/main/java/org/hypertrace/core/graphql/utils/grpc/PlatformGrpcContextBuilder.java @@ -14,9 +14,11 @@ import java.util.Optional; import java.util.stream.Collectors; import javax.annotation.Nonnull; +import javax.inject.Singleton; import org.hypertrace.core.graphql.context.GraphQlRequestContext; import org.hypertrace.core.grpcutils.context.RequestContext; +@Singleton class PlatformGrpcContextBuilder implements GrpcContextBuilder { private final Cache contextCache = diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index eaa7247c..ae23bd0f 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -10,10 +10,10 @@ dependencies { api(platform("io.grpc:grpc-bom:1.47.0")) constraints { - api("org.hypertrace.core.grpcutils:grpc-context-utils:0.7.7") - api("org.hypertrace.core.grpcutils:grpc-client-utils:0.7.7") - api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.7.7") - api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.7.7") + api("org.hypertrace.core.grpcutils:grpc-context-utils:0.8.0") + api("org.hypertrace.core.grpcutils:grpc-client-utils:0.8.0") + api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.8.0") + api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.8.0") api("org.hypertrace.gateway.service:gateway-service-api:0.2.13") api("org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.8") From ad5bb7a961cbf0b6b4116922c563ab3b216b3bce Mon Sep 17 00:00:00 2001 From: aman bansal Date: Mon, 3 Oct 2022 12:40:28 +0200 Subject: [PATCH 107/173] chore | updating gateway service api version (#113) --- hypertrace-core-graphql-platform/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index ae23bd0f..ba6f8d99 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -14,7 +14,7 @@ dependencies { api("org.hypertrace.core.grpcutils:grpc-client-utils:0.8.0") api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.8.0") api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.8.0") - api("org.hypertrace.gateway.service:gateway-service-api:0.2.13") + api("org.hypertrace.gateway.service:gateway-service-api:0.2.15") api("org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.8") api("com.google.inject:guice:5.1.0") From 8fc42ae48d7946d0a2fdc3bc6618fd56f90da0bb Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Thu, 6 Oct 2022 20:02:20 -0400 Subject: [PATCH 108/173] refactor: update core gql libs (#114) --- .../DefaultGraphQlRequestContextBuilder.java | 36 +++--------- .../context/GraphQlRequestContext.java | 4 +- ...faultGraphQlRequestContextBuilderTest.java | 3 +- .../build.gradle.kts | 6 +- .../DefaultGraphQlSchemaRegistry.java | 2 +- .../schema/registry/DefaultSchema.java | 24 ++++++-- .../GraphQlAnnotatedSchemaMerger.java | 36 +++++++++++- .../GraphQlAnnotatedSchemaMergerTest.java | 55 +++++++++++-------- 8 files changed, 102 insertions(+), 64 deletions(-) diff --git a/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilder.java b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilder.java index 8bdb718f..a5f452c9 100644 --- a/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilder.java +++ b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilder.java @@ -1,9 +1,8 @@ package org.hypertrace.core.graphql.context; import com.google.common.collect.Streams; -import graphql.kickstart.servlet.context.DefaultGraphQLServletContext; +import graphql.kickstart.execution.context.DefaultGraphQLContext; import graphql.kickstart.servlet.context.DefaultGraphQLServletContextBuilder; -import graphql.kickstart.servlet.context.GraphQLServletContext; import graphql.schema.DataFetcher; import java.util.Arrays; import java.util.Map; @@ -14,10 +13,8 @@ import java.util.stream.Collectors; import javax.annotation.Nonnull; import javax.inject.Inject; -import javax.security.auth.Subject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.dataloader.DataLoaderRegistry; import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; class DefaultGraphQlRequestContextBuilder extends DefaultGraphQLServletContextBuilder @@ -40,32 +37,22 @@ class DefaultGraphQlRequestContextBuilder extends DefaultGraphQLServletContextBu @Override public GraphQlRequestContext build(HttpServletRequest request, HttpServletResponse response) { - return new DefaultGraphQlRequestContext(request, response); + return new DefaultGraphQlRequestContext(request); } - private final class DefaultGraphQlRequestContext implements GraphQlRequestContext { - private final GraphQLServletContext servletContext; + private final class DefaultGraphQlRequestContext extends DefaultGraphQLContext + implements GraphQlRequestContext { private final ContextualCachingKey cachingKey; private final String requestId = UUID.randomUUID().toString(); + private final HttpServletRequest request; - private DefaultGraphQlRequestContext(HttpServletRequest request, HttpServletResponse response) { - this.servletContext = - DefaultGraphQLServletContext.createServletContext().with(request).with(response).build(); + private DefaultGraphQlRequestContext(HttpServletRequest request) { + this.request = request; this.cachingKey = new DefaultContextualCacheKey(this, this.getTenantId().orElse(DEFAULT_CONTEXT_ID)); } - @Override - public Optional getSubject() { - return this.servletContext.getSubject(); - } - - @Override - public Optional getDataLoaderRegistry() { - return this.servletContext.getDataLoaderRegistry(); - } - @Override public DataFetcher> constructDataFetcher( Class>> dataFetcherClass) { @@ -75,29 +62,24 @@ public DataFetcher> constructDataFetcher( @Override public Optional getAuthorizationHeader() { - HttpServletRequest request = this.servletContext.getHttpServletRequest(); return Optional.ofNullable(request.getHeader(AUTHORIZATION_HEADER_KEY)) .or(() -> Optional.ofNullable(request.getHeader(AUTHORIZATION_HEADER_KEY.toLowerCase()))); } @Override public Optional getTenantId() { - HttpServletRequest request = this.servletContext.getHttpServletRequest(); return Optional.ofNullable(request.getHeader(TENANT_ID_HEADER_KEY)) .or(DefaultGraphQlRequestContextBuilder.this.serviceConfig::getDefaultTenantId); } @Override public Map getTracingContextHeaders() { - return Streams.stream( - this.servletContext.getHttpServletRequest().getHeaderNames().asIterator()) + return Streams.stream(request.getHeaderNames().asIterator()) .filter( header -> TRACING_CONTEXT_HEADER_KEY_PREFIXES.stream() .anyMatch(prefix -> header.toLowerCase().startsWith(prefix.toLowerCase()))) - .collect( - Collectors.toUnmodifiableMap( - String::toLowerCase, this.servletContext.getHttpServletRequest()::getHeader)); + .collect(Collectors.toUnmodifiableMap(String::toLowerCase, request::getHeader)); } @Nonnull diff --git a/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/GraphQlRequestContext.java b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/GraphQlRequestContext.java index 98562f95..86a62cb7 100644 --- a/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/GraphQlRequestContext.java +++ b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/GraphQlRequestContext.java @@ -1,13 +1,13 @@ package org.hypertrace.core.graphql.context; -import graphql.kickstart.execution.context.GraphQLContext; +import graphql.kickstart.execution.context.GraphQLKickstartContext; import graphql.schema.DataFetcher; import java.util.Map; import java.util.Optional; import java.util.concurrent.CompletableFuture; import javax.annotation.Nonnull; -public interface GraphQlRequestContext extends GraphQLContext { +public interface GraphQlRequestContext extends GraphQLKickstartContext { /** * A tool to create data fetchers via injection container due to limitations in the framework. For diff --git a/hypertrace-core-graphql-context/src/test/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilderTest.java b/hypertrace-core-graphql-context/src/test/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilderTest.java index 9ef475de..c3c82e5a 100644 --- a/hypertrace-core-graphql-context/src/test/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilderTest.java +++ b/hypertrace-core-graphql-context/src/test/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilderTest.java @@ -7,7 +7,6 @@ import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNotSame; -import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.reset; @@ -67,7 +66,7 @@ void returnsEmptyOptionalIfNoAuthorizationHeaderPresent() { @Test void delegatesDataLoaderRegistry() { - assertTrue(this.requestContext.getDataLoaderRegistry().isPresent()); + assertNotNull(this.requestContext.getDataLoaderRegistry()); } @Test diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index ba6f8d99..6f1817eb 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -18,8 +18,8 @@ dependencies { api("org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.8") api("com.google.inject:guice:5.1.0") - api("com.graphql-java:graphql-java:15.0") - api("io.github.graphql-java:graphql-java-annotations:8.3") + api("com.graphql-java:graphql-java:19.2") + api("io.github.graphql-java:graphql-java-annotations:9.1") api("org.slf4j:slf4j-api:1.7.36") api("io.reactivex.rxjava3:rxjava:3.1.5") api("com.google.protobuf:protobuf-java-util:3.21.1") @@ -28,7 +28,7 @@ dependencies { api("com.google.code.findbugs:jsr305:3.0.2") api("com.typesafe:config:1.4.2") api("com.google.guava:guava:31.1-jre") - api("com.graphql-java-kickstart:graphql-java-servlet:10.1.0") + api("com.graphql-java-kickstart:graphql-java-servlet:14.0.0") api("com.fasterxml.jackson.core:jackson-databind:2.13.4") api("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.4") diff --git a/hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/DefaultGraphQlSchemaRegistry.java b/hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/DefaultGraphQlSchemaRegistry.java index 860bc82d..0b31cb17 100644 --- a/hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/DefaultGraphQlSchemaRegistry.java +++ b/hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/DefaultGraphQlSchemaRegistry.java @@ -22,7 +22,7 @@ public Set getRegisteredFragments() { } @Override - public GraphQlSchemaFragment getRootFragment() { + public DefaultSchema getRootFragment() { return this.defaultSchemaFragment; } } diff --git a/hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/DefaultSchema.java b/hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/DefaultSchema.java index 89a6af95..4f6ecf4e 100644 --- a/hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/DefaultSchema.java +++ b/hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/DefaultSchema.java @@ -1,9 +1,17 @@ package org.hypertrace.core.graphql.schema.registry; +import graphql.annotations.annotationTypes.GraphQLDescription; +import graphql.annotations.annotationTypes.GraphQLField; import graphql.annotations.annotationTypes.GraphQLName; import org.hypertrace.core.graphql.spi.schema.GraphQlSchemaFragment; class DefaultSchema implements GraphQlSchemaFragment { + // Placeholder description is used to identify and remove placeholder fields before building the + // schema. Placeholders are used while the schema is under construction so it is always valid + // (i.e. has at least one value) + static final String PLACEHOLDER_DESCRIPTION = "::placeholder::"; + static final String ROOT_QUERY_NAME = "Query"; + static final String ROOT_MUTATION_NAME = "Mutation"; @Override public String fragmentName() { @@ -20,9 +28,17 @@ public Class annotatedMutationClass() { return MutationSchema.class; } - @GraphQLName("Query") - private interface QuerySchema {} + @GraphQLName(ROOT_QUERY_NAME) + private interface QuerySchema { + @GraphQLField + @GraphQLDescription(PLACEHOLDER_DESCRIPTION) + String placeholder(); + } - @GraphQLName("Mutation") - private interface MutationSchema {} + @GraphQLName(ROOT_MUTATION_NAME) + private interface MutationSchema { + @GraphQLField + @GraphQLDescription(PLACEHOLDER_DESCRIPTION) + String placeholder(); + } } diff --git a/hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/GraphQlAnnotatedSchemaMerger.java b/hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/GraphQlAnnotatedSchemaMerger.java index 65778874..13df8de9 100644 --- a/hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/GraphQlAnnotatedSchemaMerger.java +++ b/hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/GraphQlAnnotatedSchemaMerger.java @@ -12,6 +12,7 @@ import java.util.Collection; import java.util.Map; import java.util.Map.Entry; +import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; import javax.annotation.Nullable; @@ -39,7 +40,8 @@ public GraphQLSchema get() { return fragments.stream() .map(fragment -> this.fragmentToSchema(fragment, annotationProcessor)) - .reduce(this.fragmentToSchema(rootFragment, annotationProcessor), this::merge); + .reduce(this.fragmentToSchema(rootFragment, annotationProcessor), this::merge) + .transform(this::removeRootPlaceholders); } private void registerAllTypeFunctions( @@ -134,4 +136,36 @@ private Map buildMapWithoutNulls( .filter(entry -> nonNull(entry) && nonNull(entry.getKey()) && nonNull(entry.getValue())) .collect(Collectors.toUnmodifiableMap(Entry::getKey, Entry::getValue)); } + + private void removeRootPlaceholders(GraphQLSchema.Builder mergedSchema) { + GraphQLSchema mergedWithPlaceholders = mergedSchema.build(); + // Queries must be defined, mutation is optional which is represented by a null + mergedSchema.query( + this.rebuildTypeWithoutPlaceholders(mergedWithPlaceholders.getQueryType()).orElseThrow()); + mergedSchema.mutation( + this.rebuildTypeWithoutPlaceholders(mergedWithPlaceholders.getMutationType()).orElse(null)); + } + + private Optional rebuildTypeWithoutPlaceholders(GraphQLObjectType objectType) { + // Schema validation now requires all objects to have at least one field. To merge partial + // fragments, we start with placeholders, identified by a constant, then remove them at the end. + GraphQLObjectType newType = + GraphQLObjectType.newObject(objectType) + .replaceFields( + objectType.getFields().stream() + .filter( + field -> + Optional.ofNullable(field.getDescription()) + .map( + description -> + !description.equals(DefaultSchema.PLACEHOLDER_DESCRIPTION)) + .orElse(true)) + .collect(Collectors.toList())) + .build(); + + if (newType.getFields().isEmpty()) { + return Optional.empty(); + } + return Optional.of(newType); + } } diff --git a/hypertrace-core-graphql-schema-registry/src/test/java/org/hypertrace/core/graphql/schema/registry/GraphQlAnnotatedSchemaMergerTest.java b/hypertrace-core-graphql-schema-registry/src/test/java/org/hypertrace/core/graphql/schema/registry/GraphQlAnnotatedSchemaMergerTest.java index e082ecf9..efc7f588 100644 --- a/hypertrace-core-graphql-schema-registry/src/test/java/org/hypertrace/core/graphql/schema/registry/GraphQlAnnotatedSchemaMergerTest.java +++ b/hypertrace-core-graphql-schema-registry/src/test/java/org/hypertrace/core/graphql/schema/registry/GraphQlAnnotatedSchemaMergerTest.java @@ -1,12 +1,14 @@ package org.hypertrace.core.graphql.schema.registry; +import static org.hypertrace.core.graphql.schema.registry.DefaultSchema.ROOT_MUTATION_NAME; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.when; +import graphql.Scalars; import graphql.annotations.annotationTypes.GraphQLDataFetcher; import graphql.annotations.annotationTypes.GraphQLField; -import graphql.annotations.annotationTypes.GraphQLName; import graphql.annotations.processor.ProcessingElementsContainer; import graphql.annotations.processor.typeFunctions.TypeFunction; import graphql.schema.DataFetcher; @@ -30,20 +32,11 @@ @ExtendWith(MockitoExtension.class) public class GraphQlAnnotatedSchemaMergerTest { - private static final String ROOT_QUERY_NAME = "root"; - private static final String ROOT_MUTATION_NAME = "rootMutation"; - @Mock private GraphQlSchemaRegistry mockRegistry; @Mock private DataFetchingEnvironment mockDataFetchingEnvironment; private GraphQlAnnotatedSchemaMerger merger; - @GraphQLName(ROOT_QUERY_NAME) - interface RootQuerySchema {} - - @GraphQLName(ROOT_MUTATION_NAME) - interface RootMutationSchema {} - interface FirstQuerySchema { @GraphQLField String first(); @@ -91,8 +84,7 @@ interface SharedType { public void beforeEach() { this.merger = new GraphQlAnnotatedSchemaMerger(mockRegistry); - when(mockRegistry.getRootFragment()) - .thenReturn(this.createSchemaFragment(RootQuerySchema.class, RootMutationSchema.class)); + when(mockRegistry.getRootFragment()).thenReturn(new DefaultSchema()); } @Test @@ -148,10 +140,13 @@ void mergesMutationSchemas() { @Test void supportsMutationOnlyFragment() { when(mockRegistry.getRegisteredFragments()) - .thenReturn(Set.of(this.createSchemaFragment(null, FirstMutationSchema.class))); + .thenReturn( + Set.of( + this.createSchemaFragment(FirstQuerySchema.class), + this.createSchemaFragment(null, FirstMutationSchema.class))); this.verifySchemaWithMutationFields(this.merger.get(), Set.of("mutateOne")); - this.verifySchemaWithQueryFields(this.merger.get(), Set.of()); + this.verifySchemaWithQueryFields(this.merger.get(), Set.of("first", "second")); } @Test @@ -169,7 +164,13 @@ public GraphQLType buildType( Class aClass, AnnotatedType annotatedType, ProcessingElementsContainer container) { - return GraphQLObjectType.newObject().name("typeFunctionType").build(); + return GraphQLObjectType.newObject() + .name("typeFunctionType") + .field( + GraphQLFieldDefinition.newFieldDefinition() + .name("typeFunctionTypeField") + .type(Scalars.GraphQLString)) + .build(); } }; @@ -220,7 +221,7 @@ public List typeFunctions() { } private void verifySchemaWithQueryFields(GraphQLSchema schema, Set fields) { - assertEquals(ROOT_QUERY_NAME, schema.getQueryType().getName()); + assertEquals(DefaultSchema.ROOT_QUERY_NAME, schema.getQueryType().getName()); List fieldDefinitions = schema.getQueryType().getFieldDefinitions(); assertEquals(fields.size(), fieldDefinitions.size()); assertTrue( @@ -231,13 +232,19 @@ private void verifySchemaWithQueryFields(GraphQLSchema schema, Set field } private void verifySchemaWithMutationFields(GraphQLSchema schema, Set fields) { - assertEquals(ROOT_MUTATION_NAME, schema.getMutationType().getName()); - List fieldDefinitions = schema.getMutationType().getFieldDefinitions(); - assertEquals(fields.size(), fieldDefinitions.size()); - assertTrue( - fields.containsAll( - fieldDefinitions.stream() - .map(GraphQLFieldDefinition::getName) - .collect(Collectors.toUnmodifiableSet()))); + if (fields.isEmpty()) { + // A type must have fields, so if no fields expected, no type expected + assertNull(schema.getMutationType()); + } else { + assertEquals(ROOT_MUTATION_NAME, schema.getMutationType().getName()); + List fieldDefinitions = + schema.getMutationType().getFieldDefinitions(); + assertEquals(fields.size(), fieldDefinitions.size()); + assertTrue( + fields.containsAll( + fieldDefinitions.stream() + .map(GraphQLFieldDefinition::getName) + .collect(Collectors.toUnmodifiableSet()))); + } } } From 692e47063d84c44ec532341ffe6b06f4fc70585d Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Fri, 7 Oct 2022 18:40:31 -0400 Subject: [PATCH 109/173] refactor: update protobuf version (#115) --- hypertrace-core-graphql-platform/build.gradle.kts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 6f1817eb..be7ef377 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -22,7 +22,8 @@ dependencies { api("io.github.graphql-java:graphql-java-annotations:9.1") api("org.slf4j:slf4j-api:1.7.36") api("io.reactivex.rxjava3:rxjava:3.1.5") - api("com.google.protobuf:protobuf-java-util:3.21.1") + api("com.google.protobuf:protobuf-java-util:3.21.7") + api("com.google.protobuf:protobuf-java:3.21.7") api("org.projectlombok:lombok:1.18.24") api("com.google.code.findbugs:jsr305:3.0.2") From 41cfb349e75c7c5bc06028c21e3b8b95653cdf28 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Mon, 17 Oct 2022 21:25:33 -0400 Subject: [PATCH 110/173] refactor: update grpc utils (#116) * refactor: update grpc utils * refactor: update commons text too --- hypertrace-core-graphql-platform/build.gradle.kts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index be7ef377..26160c7e 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -10,10 +10,10 @@ dependencies { api(platform("io.grpc:grpc-bom:1.47.0")) constraints { - api("org.hypertrace.core.grpcutils:grpc-context-utils:0.8.0") - api("org.hypertrace.core.grpcutils:grpc-client-utils:0.8.0") - api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.8.0") - api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.8.0") + api("org.hypertrace.core.grpcutils:grpc-context-utils:0.8.2") + api("org.hypertrace.core.grpcutils:grpc-client-utils:0.8.2") + api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.8.2") + api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.8.2") api("org.hypertrace.gateway.service:gateway-service-api:0.2.15") api("org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.8") @@ -23,7 +23,6 @@ dependencies { api("org.slf4j:slf4j-api:1.7.36") api("io.reactivex.rxjava3:rxjava:3.1.5") api("com.google.protobuf:protobuf-java-util:3.21.7") - api("com.google.protobuf:protobuf-java:3.21.7") api("org.projectlombok:lombok:1.18.24") api("com.google.code.findbugs:jsr305:3.0.2") @@ -35,7 +34,7 @@ dependencies { api("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.4") api("com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.4") api("com.fasterxml.jackson:jackson-bom:2.13.4") - api("org.apache.commons:commons-text:1.9") + api("org.apache.commons:commons-text:1.10.0") api("io.opentelemetry:opentelemetry-proto:1.1.0-alpha") runtime("org.apache.logging.log4j:log4j-slf4j-impl:2.17.2") From 1f00fb91751e766bbb726b2412bb765bb9802e3b Mon Sep 17 00:00:00 2001 From: GurtejSohi Date: Mon, 31 Oct 2022 11:28:13 +0530 Subject: [PATCH 111/173] feat: add key value pair (#117) --- .../common/schema/pair/KeyValuePair.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/pair/KeyValuePair.java diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/pair/KeyValuePair.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/pair/KeyValuePair.java new file mode 100644 index 00000000..182e52cb --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/pair/KeyValuePair.java @@ -0,0 +1,27 @@ +package org.hypertrace.core.graphql.common.schema.pair; + +import graphql.annotations.annotationTypes.GraphQLDescription; +import graphql.annotations.annotationTypes.GraphQLField; +import graphql.annotations.annotationTypes.GraphQLName; +import graphql.annotations.annotationTypes.GraphQLNonNull; + +@GraphQLName(KeyValuePair.TYPE_NAME) +@GraphQLDescription("A pair of a key and a value") +public interface KeyValuePair { + String TYPE_NAME = "KeyValuePair"; + + String KEY = "key"; + String VALUE = "value"; + + @GraphQLField + @GraphQLName(KEY) + @GraphQLNonNull + @GraphQLDescription("String based key name") + String key(); + + @GraphQLField + @GraphQLName(VALUE) + @GraphQLNonNull + @GraphQLDescription("Value of a generic type") + Object value(); +} From 127c5f5d8335f20dc2001adfc25fbe0fcf862cee Mon Sep 17 00:00:00 2001 From: Suresh Prakash <93120060+suresh-prakash@users.noreply.github.com> Date: Thu, 10 Nov 2022 12:01:00 +0530 Subject: [PATCH 112/173] Enhancements to the metadata schema (#118) --- .../build.gradle.kts | 1 + .../attributes/AttributeModelTranslator.java | 59 +++++++++++-------- .../attributes/AttributeTypeConverter.java | 59 ++++++++++++------- .../response/MetadataResponseBuilder.java | 2 +- .../build.gradle.kts | 5 +- 5 files changed, 77 insertions(+), 49 deletions(-) diff --git a/hypertrace-core-graphql-attribute-store/build.gradle.kts b/hypertrace-core-graphql-attribute-store/build.gradle.kts index c974bffb..1cee004a 100644 --- a/hypertrace-core-graphql-attribute-store/build.gradle.kts +++ b/hypertrace-core-graphql-attribute-store/build.gradle.kts @@ -14,6 +14,7 @@ dependencies { implementation("com.google.guava:guava") implementation("org.hypertrace.core.attribute.service:caching-attribute-service-client") + implementation("org.hypertrace.core.attribute.service:attribute-service-api") implementation("org.hypertrace.core.grpcutils:grpc-client-rx-utils") implementation(project(":hypertrace-core-graphql-grpc-utils")) implementation(project(":hypertrace-core-graphql-rx-utils")) diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java index 663d295c..b56227a4 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java @@ -1,5 +1,14 @@ package org.hypertrace.core.graphql.attributes; +import static org.hypertrace.core.attribute.service.v1.AttributeKind.TYPE_BOOL; +import static org.hypertrace.core.attribute.service.v1.AttributeKind.TYPE_DOUBLE; +import static org.hypertrace.core.attribute.service.v1.AttributeKind.TYPE_INT64; +import static org.hypertrace.core.attribute.service.v1.AttributeKind.TYPE_STRING; +import static org.hypertrace.core.attribute.service.v1.AttributeKind.TYPE_STRING_ARRAY; +import static org.hypertrace.core.attribute.service.v1.AttributeKind.TYPE_STRING_MAP; +import static org.hypertrace.core.attribute.service.v1.AttributeKind.TYPE_TIMESTAMP; + +import com.google.common.collect.ImmutableBiMap; import java.util.List; import java.util.Optional; import java.util.UnknownFormatConversionException; @@ -11,8 +20,18 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -class AttributeModelTranslator { +public class AttributeModelTranslator { private static final Logger LOGGER = LoggerFactory.getLogger(AttributeModelTranslator.class); + private static final ImmutableBiMap TYPE_MAPPING = + ImmutableBiMap.builder() + .put(TYPE_STRING, AttributeModelType.STRING) + .put(TYPE_BOOL, AttributeModelType.BOOLEAN) + .put(TYPE_INT64, AttributeModelType.LONG) + .put(TYPE_DOUBLE, AttributeModelType.DOUBLE) + .put(TYPE_TIMESTAMP, AttributeModelType.TIMESTAMP) + .put(TYPE_STRING_MAP, AttributeModelType.STRING_MAP) + .put(TYPE_STRING_ARRAY, AttributeModelType.STRING_ARRAY) + .build(); public Optional translate(AttributeMetadata attributeMetadata) { try { @@ -34,6 +53,14 @@ public Optional translate(AttributeMetadata attributeMetadata) { } } + public AttributeKind convertType(AttributeModelType type) { + return Optional.ofNullable(TYPE_MAPPING.inverse().get(type)) + .orElseThrow( + () -> + new UnknownFormatConversionException( + String.format("Unrecognized attribute type %s", type.name()))); + } + private List convertMetricAggregationTypes( List aggregationTypes) { return aggregationTypes.stream() @@ -71,30 +98,10 @@ private AttributeModelMetricAggregationType convertMetricAggregationType( } private AttributeModelType convertType(AttributeKind kind) { - switch (kind) { - case TYPE_STRING: - return AttributeModelType.STRING; - case TYPE_BOOL: - return AttributeModelType.BOOLEAN; - case TYPE_INT64: - return AttributeModelType.LONG; - case TYPE_DOUBLE: - return AttributeModelType.DOUBLE; - case TYPE_TIMESTAMP: - return AttributeModelType.TIMESTAMP; - case TYPE_STRING_MAP: - return AttributeModelType.STRING_MAP; - case TYPE_STRING_ARRAY: - return AttributeModelType.STRING_ARRAY; - case KIND_UNDEFINED: - case UNRECOGNIZED: - case TYPE_BYTES: - case TYPE_INT64_ARRAY: - case TYPE_DOUBLE_ARRAY: - case TYPE_BOOL_ARRAY: - default: - throw new UnknownFormatConversionException( - String.format("Unrecognized attribute kind %s", kind.name())); - } + return Optional.ofNullable(TYPE_MAPPING.get(kind)) + .orElseThrow( + () -> + new UnknownFormatConversionException( + String.format("Unrecognized attribute kind %s", kind.name()))); } } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeTypeConverter.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeTypeConverter.java index 43fe3ad6..20acab7a 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeTypeConverter.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeTypeConverter.java @@ -1,34 +1,51 @@ package org.hypertrace.core.graphql.common.utils.attributes; +import static org.hypertrace.core.graphql.attributes.AttributeModelType.BOOLEAN; +import static org.hypertrace.core.graphql.attributes.AttributeModelType.DOUBLE; +import static org.hypertrace.core.graphql.attributes.AttributeModelType.LONG; +import static org.hypertrace.core.graphql.attributes.AttributeModelType.STRING; +import static org.hypertrace.core.graphql.attributes.AttributeModelType.STRING_ARRAY; +import static org.hypertrace.core.graphql.attributes.AttributeModelType.STRING_MAP; +import static org.hypertrace.core.graphql.attributes.AttributeModelType.TIMESTAMP; + +import com.google.common.collect.ImmutableBiMap; import io.reactivex.rxjava3.core.Single; +import java.util.Optional; import java.util.UnknownFormatConversionException; import org.hypertrace.core.graphql.attributes.AttributeModelType; import org.hypertrace.core.graphql.common.schema.attributes.AttributeType; import org.hypertrace.core.graphql.common.utils.Converter; -class AttributeTypeConverter implements Converter { +public class AttributeTypeConverter implements Converter { + private static final ImmutableBiMap TYPE_MAPPING = + ImmutableBiMap.builder() + .put(STRING, AttributeType.STRING) + .put(BOOLEAN, AttributeType.BOOLEAN) + .put(LONG, AttributeType.LONG) + .put(DOUBLE, AttributeType.DOUBLE) + .put(TIMESTAMP, AttributeType.TIMESTAMP) + .put(STRING_MAP, AttributeType.STRING_MAP) + .put(STRING_ARRAY, AttributeType.STRING_ARRAY) + .build(); @Override public Single convert(AttributeModelType type) { - switch (type) { - case STRING: - return Single.just(AttributeType.STRING); - case BOOLEAN: - return Single.just(AttributeType.BOOLEAN); - case LONG: - return Single.just(AttributeType.LONG); - case DOUBLE: - return Single.just(AttributeType.DOUBLE); - case TIMESTAMP: - return Single.just(AttributeType.TIMESTAMP); - case STRING_MAP: - return Single.just(AttributeType.STRING_MAP); - case STRING_ARRAY: - return Single.just(AttributeType.STRING_ARRAY); - default: - return Single.error( - new UnknownFormatConversionException( - String.format("Unrecognized attribute type %s", type.name()))); - } + return Optional.ofNullable(TYPE_MAPPING.get(type)) + .map(Single::just) + .orElseGet( + () -> + Single.error( + new UnknownFormatConversionException( + String.format("Unrecognized attribute type %s", type.name())))); + } + + public Single convert(final AttributeType type) { + return Optional.ofNullable(TYPE_MAPPING.inverse().get(type)) + .map(Single::just) + .orElseGet( + () -> + Single.error( + new UnknownFormatConversionException( + String.format("Unrecognized attribute type %s", type.name())))); } } diff --git a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilder.java b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilder.java index eaf878fe..d5f30d4f 100644 --- a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilder.java +++ b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilder.java @@ -41,7 +41,7 @@ public Single> build(List modelList) { .collect(Collectors.toUnmodifiableList()); } - private Maybe build(AttributeModel model) { + public Maybe build(AttributeModel model) { return zip( this.convertMetricAggregationTypes(model.supportedMetricAggregationTypes()), this.typeConverter.convert(model.type()), diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 26160c7e..03c7d583 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -6,6 +6,8 @@ javaPlatform { allowDependencies() } +val attributeServiceVersion: String = "0.14.11" + dependencies { api(platform("io.grpc:grpc-bom:1.47.0")) constraints { @@ -15,7 +17,8 @@ dependencies { api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.8.2") api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.8.2") api("org.hypertrace.gateway.service:gateway-service-api:0.2.15") - api("org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.8") + api("org.hypertrace.core.attribute.service:caching-attribute-service-client:${attributeServiceVersion}") + api("org.hypertrace.core.attribute.service:attribute-service-api:${attributeServiceVersion}") api("com.google.inject:guice:5.1.0") api("com.graphql-java:graphql-java:19.2") From e3ea1d295ac34c7d0a96694b23e13b3b90b64539 Mon Sep 17 00:00:00 2001 From: Suresh Prakash <93120060+suresh-prakash@users.noreply.github.com> Date: Thu, 24 Nov 2022 13:27:03 +0530 Subject: [PATCH 113/173] Reduce the attribute metadata cache invalidation interval to 3 minutes (#119) --- .../core/graphql/attributes/CachingAttributeStore.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java index 9fe0a9a1..b7fabaee 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java @@ -36,7 +36,7 @@ class CachingAttributeStore implements AttributeStore { channelRegistry.forAddress( serviceConfig.getAttributeServiceHost(), serviceConfig.getAttributeServicePort())) - .withCacheExpiration(Duration.ofMinutes(5)) + .withCacheExpiration(Duration.ofMinutes(3)) .withMaximumCacheContexts(1000) .build()); } From e0b0148870f4d22086c517c4a78aef49eccd28a2 Mon Sep 17 00:00:00 2001 From: Suresh Prakash <93120060+suresh-prakash@users.noreply.github.com> Date: Thu, 24 Nov 2022 18:49:21 +0530 Subject: [PATCH 114/173] Introduce the isCustom field and map it from the gRPC response (#120) --- .../graphql/attributes/AttributeModel.java | 2 ++ .../attributes/AttributeModelTranslator.java | 27 +++++++++++-------- .../attributes/DefaultAttributeModel.java | 5 ++++ .../AttributeModelTranslatorTest.java | 4 +++ .../graphql/log/event/dao/BaseDaoTest.java | 1 + ...wayServiceLogEventsRequestBuilderTest.java | 2 ++ ...ServiceLogEventsResponseConverterTest.java | 2 ++ .../response/DefaultAttributeMetadata.java | 5 ++++ .../response/MetadataResponseBuilder.java | 22 ++++++++------- .../metadata/schema/AttributeMetadata.java | 6 +++++ .../response/MetadataResponseBuilderTest.java | 3 +++ .../build.gradle.kts | 2 +- .../core/graphql/span/dao/DaoTestUtil.java | 5 ++++ 13 files changed, 64 insertions(+), 22 deletions(-) diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModel.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModel.java index aae06c4b..45e8d50a 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModel.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModel.java @@ -23,4 +23,6 @@ public interface AttributeModel { List supportedMetricAggregationTypes(); boolean groupable(); + + boolean isCustom(); } diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java index b56227a4..a5ee49d5 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java @@ -36,23 +36,28 @@ public class AttributeModelTranslator { public Optional translate(AttributeMetadata attributeMetadata) { try { return Optional.of( - new DefaultAttributeModel( - attributeMetadata.getId(), - attributeMetadata.getScopeString(), - attributeMetadata.getKey(), - attributeMetadata.getDisplayName(), - this.convertType(attributeMetadata.getValueKind()), - attributeMetadata.getUnit(), - attributeMetadata.getOnlyAggregationsAllowed(), - attributeMetadata.getType().equals(AttributeType.METRIC), - this.convertMetricAggregationTypes(attributeMetadata.getSupportedAggregationsList()), - attributeMetadata.getGroupable())); + DefaultAttributeModel.builder() + .id(attributeMetadata.getId()) + .scope(attributeMetadata.getScopeString()) + .key(attributeMetadata.getKey()) + .displayName(attributeMetadata.getDisplayName()) + .type(this.convertType(attributeMetadata.getValueKind())) + .units(attributeMetadata.getUnit()) + .onlySupportsGrouping(attributeMetadata.getOnlyAggregationsAllowed()) + .onlySupportsAggregation(attributeMetadata.getType().equals(AttributeType.METRIC)) + .supportedMetricAggregationTypes( + this.convertMetricAggregationTypes( + attributeMetadata.getSupportedAggregationsList())) + .groupable(attributeMetadata.getGroupable()) + .isCustom(attributeMetadata.getCustom()) + .build()); } catch (Exception e) { LOGGER.warn("Dropping attribute {} : {}", attributeMetadata.getId(), e.getMessage()); return Optional.empty(); } } + @SuppressWarnings("unused") public AttributeKind convertType(AttributeModelType type) { return Optional.ofNullable(TYPE_MAPPING.inverse().get(type)) .orElseThrow( diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/DefaultAttributeModel.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/DefaultAttributeModel.java index 3b6f7579..84c82eec 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/DefaultAttributeModel.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/DefaultAttributeModel.java @@ -1,6 +1,9 @@ package org.hypertrace.core.graphql.attributes; +import static lombok.AccessLevel.PRIVATE; + import java.util.List; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Value; import lombok.experimental.Accessors; @@ -8,6 +11,7 @@ @Value @Builder(toBuilder = true) @Accessors(fluent = true) +@AllArgsConstructor(access = PRIVATE) class DefaultAttributeModel implements AttributeModel { String id; String scope; @@ -19,4 +23,5 @@ class DefaultAttributeModel implements AttributeModel { boolean onlySupportsAggregation; List supportedMetricAggregationTypes; boolean groupable; + boolean isCustom; } diff --git a/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslatorTest.java b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslatorTest.java index 8c238f3a..9e066d4c 100644 --- a/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslatorTest.java +++ b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslatorTest.java @@ -32,6 +32,7 @@ void beforeEach() { .setOnlyAggregationsAllowed(true) .addAllSupportedAggregations(List.of(AggregateFunction.SUM, AggregateFunction.AVG)) .setGroupable(true) + .setCustom(true) .build(); this.expectedModel = @@ -49,6 +50,7 @@ void beforeEach() { AttributeModelMetricAggregationType.SUM, AttributeModelMetricAggregationType.AVG)) .groupable(true) + .isCustom(true) .build(); } @@ -90,6 +92,7 @@ void testStringArrayAttributeKindTranslation() { .addAllSupportedAggregations( List.of(AggregateFunction.DISTINCT_COUNT, AggregateFunction.AVGRATE)) .setGroupable(false) + .setCustom(false) .build(); this.expectedModel = @@ -106,6 +109,7 @@ void testStringArrayAttributeKindTranslation() { AttributeModelMetricAggregationType.DISTINCT_COUNT, AttributeModelMetricAggregationType.AVGRATE)) .groupable(false) + .isCustom(false) .build(); assertEquals(Optional.of(this.expectedModel), this.translator.translate(this.metadata)); diff --git a/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/BaseDaoTest.java b/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/BaseDaoTest.java index 8160e7eb..951c0ae4 100644 --- a/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/BaseDaoTest.java +++ b/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/BaseDaoTest.java @@ -53,6 +53,7 @@ static class DefaultAttributeModel implements AttributeModel { boolean onlySupportsAggregation; List supportedMetricAggregationTypes; boolean groupable; + boolean isCustom; } @Value diff --git a/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsRequestBuilderTest.java b/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsRequestBuilderTest.java index 3f07d071..879b57e6 100644 --- a/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsRequestBuilderTest.java +++ b/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsRequestBuilderTest.java @@ -89,6 +89,7 @@ void testBuildRequest() { false, false, Collections.emptyList(), + false, false), AttributeExpression.forAttributeKey("traceId"))), new DefaultAttributeRequest( @@ -103,6 +104,7 @@ void testBuildRequest() { false, false, Collections.emptyList(), + false, false), AttributeExpression.forAttributeKey("timestamp")))); DefaultLogEventRequest defaultLogEventRequest = diff --git a/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsResponseConverterTest.java b/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsResponseConverterTest.java index a73b9669..4d472936 100644 --- a/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsResponseConverterTest.java +++ b/hypertrace-core-graphql-log-event-schema/src/test/java/org/hypertrace/core/graphql/log/event/dao/GatewayServiceLogEventsResponseConverterTest.java @@ -95,6 +95,7 @@ void testConvert() { false, false, Collections.emptyList(), + false, false), AttributeExpression.forAttributeKey("traceId"))), new DefaultAttributeRequest( @@ -109,6 +110,7 @@ void testConvert() { false, false, Collections.emptyList(), + false, false), AttributeExpression.forAttributeKey("timestamp")))); DefaultLogEventRequest defaultLogEventRequest = diff --git a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/DefaultAttributeMetadata.java b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/DefaultAttributeMetadata.java index 3335249f..d0cbb15f 100644 --- a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/DefaultAttributeMetadata.java +++ b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/DefaultAttributeMetadata.java @@ -1,6 +1,9 @@ package org.hypertrace.core.graphql.metadata.response; +import static lombok.AccessLevel.PRIVATE; + import java.util.List; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Value; import lombok.experimental.Accessors; @@ -11,6 +14,7 @@ @Value @Builder @Accessors(fluent = true) +@AllArgsConstructor(access = PRIVATE) class DefaultAttributeMetadata implements AttributeMetadata { String scope; String name; @@ -21,4 +25,5 @@ class DefaultAttributeMetadata implements AttributeMetadata { boolean onlySupportsAggregation; List supportedAggregations; boolean groupable; + boolean isCustom; } diff --git a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilder.java b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilder.java index d5f30d4f..d0a0f151 100644 --- a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilder.java +++ b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilder.java @@ -46,16 +46,18 @@ public Maybe build(AttributeModel model) { this.convertMetricAggregationTypes(model.supportedMetricAggregationTypes()), this.typeConverter.convert(model.type()), (aggregations, type) -> - new DefaultAttributeMetadata( - this.scopeStringTranslator.toExternal(model.scope()), - model.key(), - model.displayName(), - type, - model.units(), - model.onlySupportsGrouping(), - model.onlySupportsAggregation(), - aggregations, - model.groupable())) + DefaultAttributeMetadata.builder() + .scope(this.scopeStringTranslator.toExternal(model.scope())) + .name(model.key()) + .displayName(model.displayName()) + .type(type) + .units(model.units()) + .onlySupportsGrouping(model.onlySupportsGrouping()) + .onlySupportsAggregation(model.onlySupportsAggregation()) + .supportedAggregations(aggregations) + .groupable(model.groupable()) + .isCustom(model.isCustom()) + .build()) .cast(AttributeMetadata.class) .onErrorComplete(); } diff --git a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/schema/AttributeMetadata.java b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/schema/AttributeMetadata.java index 4dd83b64..f3bc97fa 100644 --- a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/schema/AttributeMetadata.java +++ b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/schema/AttributeMetadata.java @@ -20,6 +20,7 @@ public interface AttributeMetadata { String ATTRIBUTE_METADATA_ONLY_SUPPORTS_GROUPING_NAME = "onlySupportsGrouping"; String ATTRIBUTE_METADATA_SUPPORTED_AGGREGATIONS_NAME = "supportedAggregations"; String ATTRIBUTE_METADATA_GROUPABLE_NAME = "groupable"; + String ATTRIBUTE_METADATA_IS_CUSTOM = "isCustom"; @GraphQLField @GraphQLNonNull @@ -67,4 +68,9 @@ public interface AttributeMetadata { @GraphQLNonNull @GraphQLName(ATTRIBUTE_METADATA_GROUPABLE_NAME) boolean groupable(); + + @GraphQLField + @GraphQLNonNull + @GraphQLName(ATTRIBUTE_METADATA_IS_CUSTOM) + boolean isCustom(); } diff --git a/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilderTest.java b/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilderTest.java index aaf73630..b56522d6 100644 --- a/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilderTest.java +++ b/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/response/MetadataResponseBuilderTest.java @@ -46,6 +46,7 @@ void beforeEach() { when(mockModel.type()).thenReturn(AttributeModelType.STRING); when(mockModel.units()).thenReturn("unit"); when(mockModel.groupable()).thenReturn(true); + when(mockModel.isCustom()).thenReturn(true); when(mockModel.onlySupportsGrouping()).thenReturn(false); when(mockModel.onlySupportsAggregation()).thenReturn(true); when(mockModel.supportedMetricAggregationTypes()) @@ -77,6 +78,7 @@ void canBuildResponse() { .supportedAggregations( List.of(MetricAggregationType.SUM, MetricAggregationType.AVG)) .groupable(true) + .isCustom(true) .build()), this.builder.build(this.models).blockingGet()); } @@ -103,6 +105,7 @@ void filtersAnyAggregationConversionErrors() { .onlySupportsAggregation(true) .supportedAggregations(List.of(MetricAggregationType.AVG)) .groupable(true) + .isCustom(true) .build()), this.builder.build(this.models).blockingGet()); } diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 03c7d583..23cb7888 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -6,7 +6,7 @@ javaPlatform { allowDependencies() } -val attributeServiceVersion: String = "0.14.11" +val attributeServiceVersion: String = "0.14.12" dependencies { api(platform("io.grpc:grpc-bom:1.47.0")) diff --git a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/DaoTestUtil.java b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/DaoTestUtil.java index a4f100a0..d6ecc19c 100644 --- a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/DaoTestUtil.java +++ b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/DaoTestUtil.java @@ -51,6 +51,7 @@ static class DefaultAttributeModel implements AttributeModel { boolean onlySupportsAggregation; List supportedMetricAggregationTypes; boolean groupable; + boolean isCustom; } @Value @@ -111,6 +112,7 @@ static class DefaultTimeRange implements TimeRangeArgument { false, false, Collections.emptyList(), + false, false), AttributeExpression.forAttributeKey("traceId"))); @@ -127,6 +129,7 @@ static class DefaultTimeRange implements TimeRangeArgument { false, false, Collections.emptyList(), + false, false), AttributeExpression.forAttributeKey("spanId"))); @@ -143,6 +146,7 @@ static class DefaultTimeRange implements TimeRangeArgument { false, false, Collections.emptyList(), + false, false), AttributeExpression.forAttributeKey("attributes"))); @@ -159,6 +163,7 @@ static class DefaultTimeRange implements TimeRangeArgument { false, false, Collections.emptyList(), + false, false), AttributeExpression.forAttributeKey("id"))); From c3b34735b9d3af2cdf0c327b4a0fd32fc80662e6 Mon Sep 17 00:00:00 2001 From: Suresh Prakash <93120060+suresh-prakash@users.noreply.github.com> Date: Wed, 30 Nov 2022 21:18:12 +0530 Subject: [PATCH 115/173] Introduce cached create method in AttributeStore (#121) --- .../core/graphql/attributes/AttributeStore.java | 4 ++++ .../attributes/CachingAttributeStore.java | 10 ++++++++++ .../attributes/CachingAttributeStoreTest.java | 16 ++++++++++++++++ .../build.gradle.kts | 2 +- 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStore.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStore.java index 0f018f83..ea69f94d 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStore.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStore.java @@ -1,7 +1,9 @@ package org.hypertrace.core.graphql.attributes; +import io.reactivex.rxjava3.core.Completable; import io.reactivex.rxjava3.core.Single; import java.util.List; +import org.hypertrace.core.attribute.service.v1.AttributeMetadata; import org.hypertrace.core.graphql.context.GraphQlRequestContext; public interface AttributeStore { @@ -13,4 +15,6 @@ public interface AttributeStore { Single getForeignIdAttribute( GraphQlRequestContext context, String scope, String foreignScope); + + Completable create(final GraphQlRequestContext context, final List attributes); } diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java index b7fabaee..d983c454 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java @@ -1,5 +1,6 @@ package org.hypertrace.core.graphql.attributes; +import io.reactivex.rxjava3.core.Completable; import io.reactivex.rxjava3.core.Single; import java.time.Duration; import java.util.List; @@ -7,6 +8,7 @@ import javax.inject.Inject; import javax.inject.Singleton; import org.hypertrace.core.attribute.service.cachingclient.CachingAttributeClient; +import org.hypertrace.core.attribute.service.v1.AttributeMetadata; import org.hypertrace.core.graphql.context.GraphQlRequestContext; import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; @@ -84,6 +86,14 @@ public Single getForeignIdAttribute( .flatMap(key -> this.get(context, scope, key)); } + @Override + public Completable create( + final GraphQlRequestContext context, final List attributes) { + return this.grpcContextBuilder + .build(context) + .call(() -> cachingAttributeClient.create(attributes)); + } + private Single getForeignIdKey( GraphQlRequestContext context, String scope, String foreignScope) { return this.idLookup diff --git a/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java index f0dcc3c8..dfd105d7 100644 --- a/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java +++ b/hypertrace-core-graphql-attribute-store/src/test/java/org/hypertrace/core/graphql/attributes/CachingAttributeStoreTest.java @@ -1,10 +1,14 @@ package org.hypertrace.core.graphql.attributes; +import static java.util.Collections.emptyList; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertSame; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import io.reactivex.rxjava3.core.Completable; import io.reactivex.rxjava3.core.Maybe; import io.reactivex.rxjava3.core.Single; import java.util.List; @@ -14,6 +18,7 @@ import org.hypertrace.core.attribute.service.v1.AttributeMetadata; import org.hypertrace.core.graphql.context.GraphQlRequestContext; import org.hypertrace.core.graphql.utils.grpc.GrpcContextBuilder; +import org.hypertrace.core.grpcutils.context.RequestContext; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -115,4 +120,15 @@ void supportsForeignIdLookup() { spanTraceIdAttribute, this.attributeStore.getForeignIdAttribute(mockContext, "SPAN", "TRACE").blockingGet()); } + + @Test + void testCreate() { + final RequestContext requestContext = RequestContext.forTenantId("some-tenant"); + final Completable mockCompletable = mock(Completable.class); + when(mockGrpcContextBuilder.build(mockContext)).thenReturn(requestContext); + when(mockAttributeClient.create(emptyList())).thenReturn(mockCompletable); + + final Completable result = attributeStore.create(mockContext, emptyList()); + assertSame(mockCompletable, result); + } } diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 23cb7888..5f3e6230 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -6,7 +6,7 @@ javaPlatform { allowDependencies() } -val attributeServiceVersion: String = "0.14.12" +val attributeServiceVersion: String = "0.14.13" dependencies { api(platform("io.grpc:grpc-bom:1.47.0")) From bc29e73b55f255937ff4452673adc4155a5e5da5 Mon Sep 17 00:00:00 2001 From: Suresh Prakash <93120060+suresh-prakash@users.noreply.github.com> Date: Fri, 9 Dec 2022 17:37:53 +0530 Subject: [PATCH 116/173] Introduce update and delete methods to the AttributeStore (#122) --- .../attributes/AttributeIdentifier.java | 13 +++++ .../graphql/attributes/AttributeStore.java | 7 +++ .../graphql/attributes/AttributeUpdate.java | 49 +++++++++++++++++++ .../attributes/CachingAttributeStore.java | 34 +++++++++++++ .../ColumnIdentifierExpressionConverter.java | 26 ++++++++++ .../utils/gateway/GatewayUtilsModule.java | 2 + .../build.gradle.kts | 4 +- 7 files changed, 133 insertions(+), 2 deletions(-) create mode 100644 hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeIdentifier.java create mode 100644 hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeUpdate.java create mode 100644 hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/ColumnIdentifierExpressionConverter.java diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeIdentifier.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeIdentifier.java new file mode 100644 index 00000000..f4cfcffd --- /dev/null +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeIdentifier.java @@ -0,0 +1,13 @@ +package org.hypertrace.core.graphql.attributes; + +import lombok.Builder; +import lombok.Value; +import lombok.experimental.Accessors; + +@Value +@Builder +@Accessors(fluent = true) +public class AttributeIdentifier { + String scope; + String key; +} diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStore.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStore.java index ea69f94d..55b0e13e 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStore.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStore.java @@ -17,4 +17,11 @@ Single getForeignIdAttribute( GraphQlRequestContext context, String scope, String foreignScope); Completable create(final GraphQlRequestContext context, final List attributes); + + Completable delete(final GraphQlRequestContext context, final AttributeIdentifier identifier); + + Single update( + final GraphQlRequestContext context, + final AttributeIdentifier identifier, + final AttributeUpdate update); } diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeUpdate.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeUpdate.java new file mode 100644 index 00000000..548ca76d --- /dev/null +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeUpdate.java @@ -0,0 +1,49 @@ +package org.hypertrace.core.graphql.attributes; + +import static java.util.stream.Collectors.toUnmodifiableList; + +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.function.BiFunction; +import java.util.function.Function; +import javax.annotation.Nullable; +import lombok.Builder; +import lombok.Value; +import lombok.experimental.Accessors; +import org.hypertrace.core.attribute.service.v1.Update; + +@Value +@Builder +@Accessors(fluent = true) +public class AttributeUpdate { + private static final List> MAPPER_LIST = + List.of(new UpdateMapper<>(AttributeUpdate::displayName, Update.Builder::setDisplayName)); + + @Nullable String displayName; + + List buildUpdates() { + return MAPPER_LIST.stream() + .map(mapper -> mapper.apply(this)) + .flatMap(Optional::stream) + .collect(toUnmodifiableList()); + } + + @Value + private static class UpdateMapper implements Function> { + Function valueAccessor; + BiFunction valueSetter; + + @Override + public Optional apply(final AttributeUpdate attributeUpdate) { + final T value = valueAccessor.apply(attributeUpdate); + if (Objects.isNull(value)) { + return Optional.empty(); + } + + final Update.Builder builder = Update.newBuilder(); + final Update update = valueSetter.apply(builder, value).build(); + return Optional.of(update); + } + } +} diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java index d983c454..3342ad02 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java @@ -9,6 +9,7 @@ import javax.inject.Singleton; import org.hypertrace.core.attribute.service.cachingclient.CachingAttributeClient; import org.hypertrace.core.attribute.service.v1.AttributeMetadata; +import org.hypertrace.core.attribute.service.v1.AttributeMetadataFilter; import org.hypertrace.core.graphql.context.GraphQlRequestContext; import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; import org.hypertrace.core.graphql.utils.grpc.GrpcChannelRegistry; @@ -94,6 +95,32 @@ public Completable create( .call(() -> cachingAttributeClient.create(attributes)); } + @Override + public Completable delete( + final GraphQlRequestContext context, final AttributeIdentifier identifier) { + return this.grpcContextBuilder + .build(context) + .call(() -> cachingAttributeClient.delete(buildFilter(identifier))); + } + + @Override + public Single update( + final GraphQlRequestContext context, + final AttributeIdentifier identifier, + final AttributeUpdate update) { + final Single metadataSingle = + get(context, identifier.scope(), identifier.key()); + return metadataSingle.flatMap( + metadata -> + this.grpcContextBuilder + .build(context) + .call(() -> cachingAttributeClient.update(metadata.id(), update.buildUpdates())) + .mapOptional(translator::translate) + .switchIfEmpty( + Single.error( + this.buildErrorForMissingAttribute(identifier.scope(), identifier.key())))); + } + private Single getForeignIdKey( GraphQlRequestContext context, String scope, String foreignScope) { return this.idLookup @@ -125,4 +152,11 @@ private NoSuchElementException buildErrorForMissingIdMapping(String scope) { return new NoSuchElementException( String.format("No id attribute registered for scope '%s'", scope)); } + + private AttributeMetadataFilter buildFilter(final AttributeIdentifier filter) { + return AttributeMetadataFilter.newBuilder() + .addKey(filter.key()) + .addScopeString(filter.scope()) + .build(); + } } diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/ColumnIdentifierExpressionConverter.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/ColumnIdentifierExpressionConverter.java new file mode 100644 index 00000000..4d065b8b --- /dev/null +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/ColumnIdentifierExpressionConverter.java @@ -0,0 +1,26 @@ +package org.hypertrace.core.graphql.utils.gateway; + +import io.reactivex.rxjava3.core.Single; +import javax.inject.Inject; +import org.hypertrace.core.graphql.attributes.AttributeModel; +import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.gateway.service.v1.common.Expression; +import org.hypertrace.gateway.service.v1.common.Expression.Builder; + +class ColumnIdentifierExpressionConverter implements Converter { + + private final ColumnIdentifierConverter constantConverter; + + @Inject + public ColumnIdentifierExpressionConverter(final ColumnIdentifierConverter constantConverter) { + this.constantConverter = constantConverter; + } + + @Override + public Single convert(final AttributeModel model) { + return this.constantConverter + .convert(model) + .map(Expression.newBuilder()::setColumnIdentifier) + .map(Builder::build); + } +} diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayUtilsModule.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayUtilsModule.java index 64e73659..78fa0750 100644 --- a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayUtilsModule.java +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayUtilsModule.java @@ -61,6 +61,8 @@ protected void configure() { bind(Key.get(new TypeLiteral>() {})) .to(ColumnIdentifierConverter.class); + bind(Key.get(new TypeLiteral>() {})) + .to(ColumnIdentifierExpressionConverter.class); bind(Key.get( new TypeLiteral, Expression>>() {})) .to(AttributeExpressionConverter.class); diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 5f3e6230..abf84180 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -6,7 +6,7 @@ javaPlatform { allowDependencies() } -val attributeServiceVersion: String = "0.14.13" +val attributeServiceVersion: String = "0.14.14" dependencies { api(platform("io.grpc:grpc-bom:1.47.0")) @@ -16,7 +16,7 @@ dependencies { api("org.hypertrace.core.grpcutils:grpc-client-utils:0.8.2") api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.8.2") api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.8.2") - api("org.hypertrace.gateway.service:gateway-service-api:0.2.15") + api("org.hypertrace.gateway.service:gateway-service-api:0.2.20") api("org.hypertrace.core.attribute.service:caching-attribute-service-client:${attributeServiceVersion}") api("org.hypertrace.core.attribute.service:attribute-service-api:${attributeServiceVersion}") From 683b5a9bd1626b4ce77e62e034541f22bf214ef7 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Wed, 21 Dec 2022 05:58:11 -0800 Subject: [PATCH 117/173] refactor: add a way to rebuild a rs request with new filters (#123) --- .../DefaultResultSetRequestBuilder.java | 34 +++++++++++++++++++ .../request/ResultSetRequestBuilder.java | 3 ++ 2 files changed, 37 insertions(+) diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilder.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilder.java index 63bbe7c7..fc9b3b43 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilder.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/DefaultResultSetRequestBuilder.java @@ -188,6 +188,40 @@ public Single> build( Optional.empty())); } + @Override + public Single> rebuildWithAdditionalFilters( + ResultSetRequest originalRequest, Collection additionalFilters) { + return this.mergeFilterLists( + originalRequest.context(), + originalRequest.idAttribute().attributeExpressionAssociation().attribute().scope(), + originalRequest.filterArguments(), + additionalFilters) + .map( + mergedFilters -> + new DefaultResultSetRequest<>( + originalRequest.context(), + originalRequest.attributes(), + originalRequest.idAttribute(), + originalRequest.timeRange(), + originalRequest.limit(), + originalRequest.offset(), + originalRequest.orderArguments(), + mergedFilters, + originalRequest.spaceId())); + } + + private Single>> mergeFilterLists( + GraphQlRequestContext requestContext, + String scope, + Collection> original, + Collection additional) { + return this.filterRequestBuilder + .build(requestContext, scope, additional) + .flattenAsObservable(list -> list) + .concatWith(Observable.fromIterable(original)) + .toList(); + } + private Observable getAttributeRequests( GraphQlRequestContext context, String requestScope, diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequestBuilder.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequestBuilder.java index b8005b0d..3a6ea9bd 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequestBuilder.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/request/ResultSetRequestBuilder.java @@ -39,6 +39,9 @@ Single> build( Stream attributeQueryableFields, Optional spaceId); + Single> rebuildWithAdditionalFilters( + ResultSetRequest originalRequest, Collection additionalFilters); + Single> build( GraphQlRequestContext context, String requestScope, From 9da2a3f0154bfb33a703019eff6150b3a4f65654 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Wed, 21 Dec 2022 14:06:52 -0800 Subject: [PATCH 118/173] fix: update grpc utils to clean up cves (#124) --- hypertrace-core-graphql-platform/build.gradle.kts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index abf84180..c7fdf6fc 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -12,10 +12,10 @@ dependencies { api(platform("io.grpc:grpc-bom:1.47.0")) constraints { - api("org.hypertrace.core.grpcutils:grpc-context-utils:0.8.2") - api("org.hypertrace.core.grpcutils:grpc-client-utils:0.8.2") - api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.8.2") - api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.8.2") + api("org.hypertrace.core.grpcutils:grpc-context-utils:0.11.2") + api("org.hypertrace.core.grpcutils:grpc-client-utils:0.11.2") + api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.11.2") + api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.11.2") api("org.hypertrace.gateway.service:gateway-service-api:0.2.20") api("org.hypertrace.core.attribute.service:caching-attribute-service-client:${attributeServiceVersion}") api("org.hypertrace.core.attribute.service:attribute-service-api:${attributeServiceVersion}") From 45ae55540dbceed7e16cc08ded5eb7ccc78629e5 Mon Sep 17 00:00:00 2001 From: aman bansal Date: Tue, 27 Dec 2022 00:36:39 +0530 Subject: [PATCH 119/173] fix | have distinct values in the id lookup table (#125) * making the immutable table to have distinct value --- .../core/graphql/attributes/CachingAttributeStore.java | 1 - .../java/org/hypertrace/core/graphql/attributes/IdLookup.java | 3 +++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java index 3342ad02..0fd2aadc 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java @@ -18,7 +18,6 @@ @Singleton class CachingAttributeStore implements AttributeStore { - private final CachingAttributeClient cachingAttributeClient; private final IdLookup idLookup; private final GrpcContextBuilder grpcContextBuilder; diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdLookup.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdLookup.java index 75860c72..00d846eb 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdLookup.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/IdLookup.java @@ -60,6 +60,9 @@ private Single> loadMappingsForContext( .flatMap( idMappingLoader -> idMappingLoader.loadMappings(key.getContext()).subscribeOn(this.boundedIoScheduler)) + // This is added to have distinct values while building the + // immutable table in case of having duplicate id definitions + .distinct() .collect( ImmutableTable.toImmutableTable( IdMapping::containingScope, IdMapping::foreignScope, IdMapping::idAttribute)) From 6da79ef4801d9322a840a81a19eab6c915394fc8 Mon Sep 17 00:00:00 2001 From: Suresh Prakash <93120060+suresh-prakash@users.noreply.github.com> Date: Tue, 3 Jan 2023 11:29:14 +0530 Subject: [PATCH 120/173] Upgrade the gateway service version (#126) --- hypertrace-core-graphql-platform/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index c7fdf6fc..b3d8e2bf 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -16,7 +16,7 @@ dependencies { api("org.hypertrace.core.grpcutils:grpc-client-utils:0.11.2") api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.11.2") api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.11.2") - api("org.hypertrace.gateway.service:gateway-service-api:0.2.20") + api("org.hypertrace.gateway.service:gateway-service-api:0.2.24") api("org.hypertrace.core.attribute.service:caching-attribute-service-client:${attributeServiceVersion}") api("org.hypertrace.core.attribute.service:attribute-service-api:${attributeServiceVersion}") From e46d2db04453bd51b31d026af31af5d30d20d7d4 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Fri, 3 Feb 2023 06:01:38 -0800 Subject: [PATCH 121/173] fix: unknown scalar not handling variable values (#127) --- .../schema/typefunctions/UnknownScalar.java | 10 +++++----- .../schema/scalars/UnknownScalarTest.java | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/UnknownScalar.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/UnknownScalar.java index 1fd22aed..ec331e0b 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/UnknownScalar.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/UnknownScalar.java @@ -12,7 +12,6 @@ import graphql.language.StringValue; import graphql.schema.Coercing; import graphql.schema.CoercingParseLiteralException; -import graphql.schema.CoercingParseValueException; import graphql.schema.CoercingSerializeException; import graphql.schema.GraphQLScalarType; import java.lang.reflect.AnnotatedType; @@ -40,8 +39,8 @@ public Object serialize(Object fetcherResult) throws CoercingSerializeException } @Override - public Object parseValue(Object input) throws CoercingParseValueException { - return this.parseFromAst(input, CoercingParseValueException::new); + public Object parseValue(Object input) { + return input; } @Override @@ -49,7 +48,8 @@ public Object parseLiteral(Object input) throws CoercingParseLiteralException { return this.parseFromAst(input, CoercingParseLiteralException::new); } - private Object parseFromAst(Object input, Function errorWrapper) { + private Object parseFromAst( + Object input, Function errorWrapper) throws E { Function recurse = value -> this.parseFromAst(value, errorWrapper); @@ -81,7 +81,7 @@ private Object parseFromAst(Object input, Function errorWrappe field -> recurse.apply(field.getValue()))); } - return errorWrapper.apply( + throw errorWrapper.apply( new IllegalArgumentException( String.format( "Unsupported input of type %s", diff --git a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/UnknownScalarTest.java b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/UnknownScalarTest.java index 588b6861..e3f33be3 100644 --- a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/UnknownScalarTest.java +++ b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/UnknownScalarTest.java @@ -2,6 +2,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import graphql.annotations.processor.ProcessingElementsContainer; @@ -10,6 +11,7 @@ import graphql.language.FloatValue; import graphql.language.IntValue; import graphql.language.StringValue; +import graphql.schema.CoercingParseLiteralException; import graphql.schema.GraphQLScalarType; import java.lang.reflect.AnnotatedType; import java.math.BigDecimal; @@ -92,5 +94,21 @@ void canConvertFromLiteral() { ArrayValue.newArrayValue() .value(StringValue.newStringValue("five").build()) .build())); + + assertThrows( + CoercingParseLiteralException.class, + () -> unknownScalarType.getCoercing().parseLiteral("bad value")); + } + + @Test + void canConvertFromValue() { + // A dumb bug requires a dumb test + assertEquals(true, unknownScalarType.getCoercing().parseValue(true)); + + assertEquals("value", unknownScalarType.getCoercing().parseValue("value")); + + assertEquals(10, unknownScalarType.getCoercing().parseValue(10)); + + assertEquals(10.5, unknownScalarType.getCoercing().parseValue(10.5)); } } From 73a8e8a5cdd81b6992821a89fb5aae3022b1a138 Mon Sep 17 00:00:00 2001 From: Prerana Singhal Date: Thu, 2 Mar 2023 15:01:31 +0530 Subject: [PATCH 122/173] chore: Upgraded hypertrace framework version (#128) --- hypertrace-core-graphql-service/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hypertrace-core-graphql-service/build.gradle.kts b/hypertrace-core-graphql-service/build.gradle.kts index 1d8cd5df..7e579fdd 100644 --- a/hypertrace-core-graphql-service/build.gradle.kts +++ b/hypertrace-core-graphql-service/build.gradle.kts @@ -8,7 +8,7 @@ plugins { dependencies { implementation(platform(project(":hypertrace-core-graphql-platform"))) - implementation("org.hypertrace.core.serviceframework:platform-http-service-framework:0.1.42") + implementation("org.hypertrace.core.serviceframework:platform-http-service-framework:0.1.49") implementation("org.slf4j:slf4j-api") implementation("com.graphql-java-kickstart:graphql-java-servlet") From 7fd5a3e381fece9af4b29502251687159aaf0d62 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Fri, 3 Mar 2023 10:08:35 -0800 Subject: [PATCH 123/173] refactor: expose not contains key operator (#129) --- .../schema/results/arguments/filter/FilterOperatorType.java | 3 ++- .../core/graphql/utils/gateway/OperatorConverter.java | 2 ++ hypertrace-core-graphql-platform/build.gradle.kts | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterOperatorType.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterOperatorType.java index 8a38b453..ba257cba 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterOperatorType.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/results/arguments/filter/FilterOperatorType.java @@ -15,7 +15,8 @@ public enum FilterOperatorType { NOT_IN, CONTAINS_KEY, CONTAINS_KEY_VALUE, - CONTAINS_KEY_LIKE; + CONTAINS_KEY_LIKE, + NOT_CONTAINS_KEY; public static final String TYPE_NAME = "FilterOperatorType"; } diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/OperatorConverter.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/OperatorConverter.java index b04efb5b..79fbd2f9 100644 --- a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/OperatorConverter.java +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/OperatorConverter.java @@ -31,6 +31,8 @@ public Single convert(FilterOperatorType filterOperatorType) { return Single.just(Operator.LIKE); case CONTAINS_KEY: return Single.just(Operator.CONTAINS_KEY); + case NOT_CONTAINS_KEY: + return Single.just(Operator.NOT_CONTAINS_KEY); case CONTAINS_KEY_VALUE: return Single.just(Operator.CONTAINS_KEYVALUE); case CONTAINS_KEY_LIKE: diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index b3d8e2bf..57c1e307 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -16,7 +16,7 @@ dependencies { api("org.hypertrace.core.grpcutils:grpc-client-utils:0.11.2") api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.11.2") api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.11.2") - api("org.hypertrace.gateway.service:gateway-service-api:0.2.24") + api("org.hypertrace.gateway.service:gateway-service-api:0.2.25") api("org.hypertrace.core.attribute.service:caching-attribute-service-client:${attributeServiceVersion}") api("org.hypertrace.core.attribute.service:attribute-service-api:${attributeServiceVersion}") From 99e6cf0b8355c4572adae7316f6f8bb74f09bda1 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Fri, 3 Mar 2023 12:16:37 -0800 Subject: [PATCH 124/173] ci: update ci workflows (#130) --- .github/workflows/merge-publish.yml | 18 ++------- .github/workflows/pr-build.yml | 40 +++---------------- .github/workflows/pr-test.yml | 32 ++++++--------- .github/workflows/publish.yml | 22 +++------- build.gradle.kts | 8 ++++ .../build.gradle.kts | 2 +- owasp-suppressions.xml | 11 +++++ 7 files changed, 46 insertions(+), 87 deletions(-) create mode 100644 owasp-suppressions.xml diff --git a/.github/workflows/merge-publish.yml b/.github/workflows/merge-publish.yml index f4b5e83a..95e242d7 100644 --- a/.github/workflows/merge-publish.yml +++ b/.github/workflows/merge-publish.yml @@ -7,28 +7,16 @@ on: jobs: merge-publish: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: # Set fetch-depth: 0 to fetch commit history and tags for use in version calculation - name: Check out code - uses: actions/checkout@v2.3.4 + uses: actions/checkout@v3 with: fetch-depth: 0 - - - name: create checksum file - uses: hypertrace/github-actions/checksum@main - - - name: Cache packages - uses: actions/cache@v2 - with: - path: ~/.gradle - key: gradle-packages-${{ runner.os }}-${{ github.job }}-${{ hashFiles('**/checksum.txt') }} - restore-keys: | - gradle-packages-${{ runner.os }}-${{ github.job }} - gradle-packages-${{ runner.os }} - name: Login to Docker Hub - uses: docker/login-action@v1 + uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_READ_USER }} password: ${{ secrets.DOCKERHUB_READ_TOKEN }} diff --git a/.github/workflows/pr-build.yml b/.github/workflows/pr-build.yml index 465fc887..175f4dc7 100644 --- a/.github/workflows/pr-build.yml +++ b/.github/workflows/pr-build.yml @@ -9,30 +9,18 @@ on: jobs: build: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: # Set fetch-depth: 0 to fetch commit history and tags for use in version calculation - name: Check out code - uses: actions/checkout@v2.3.4 + uses: actions/checkout@v3 with: ref: ${{github.event.pull_request.head.ref}} repository: ${{github.event.pull_request.head.repo.full_name}} fetch-depth: 0 - - name: create checksum file - uses: hypertrace/github-actions/checksum@main - - - name: Cache packages - uses: actions/cache@v2 - with: - path: ~/.gradle - key: gradle-packages-${{ runner.os }}-${{ github.job }}-${{ hashFiles('**/checksum.txt') }} - restore-keys: | - gradle-packages-${{ runner.os }}-${{ github.job }} - gradle-packages-${{ runner.os }} - - name: Login to Docker Hub - uses: docker/login-action@v1 + uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_READ_USER }} password: ${{ secrets.DOCKERHUB_READ_TOKEN }} @@ -40,13 +28,13 @@ jobs: - name: Build with Gradle uses: hypertrace/github-actions/gradle@main with: - args: build dockerBuildImages + args: assemble dockerBuildImages validate-helm-charts: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - name: Check out code - uses: actions/checkout@v2.3.4 + uses: actions/checkout@v3 with: ref: ${{github.event.pull_request.head.ref}} repository: ${{github.event.pull_request.head.repo.full_name}} @@ -55,19 +43,3 @@ jobs: - name: validate charts uses: hypertrace/github-actions/validate-charts@main - snyk-scan: - runs-on: ubuntu-20.04 - steps: - # Set fetch-depth: 0 to fetch commit history and tags for use in version calculation - - name: Check out code - uses: actions/checkout@v2.3.4 - with: - ref: ${{github.event.pull_request.head.ref}} - repository: ${{github.event.pull_request.head.repo.full_name}} - fetch-depth: 0 - - name: Setup snyk - uses: snyk/actions/setup@0.3.0 - - name: Snyk test - run: snyk test --all-sub-projects --org=hypertrace --severity-threshold=low --policy-path=.snyk --remote-repo-url='${{ github.server_url }}/${{ github.repository }}.git' - env: - SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} diff --git a/.github/workflows/pr-test.yml b/.github/workflows/pr-test.yml index 8e5f9300..d01a3efc 100644 --- a/.github/workflows/pr-test.yml +++ b/.github/workflows/pr-test.yml @@ -7,41 +7,33 @@ on: jobs: test: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: # Set fetch-depth: 0 to fetch commit history and tags for use in version calculation - name: Check out code - uses: actions/checkout@v2.3.4 + uses: actions/checkout@v3 with: fetch-depth: 0 - - - name: create checksum file - uses: hypertrace/github-actions/checksum@main - - name: Cache packages - id: cache-packages - uses: actions/cache@v2 - with: - path: ~/.gradle - key: gradle-packages-${{ runner.os }}-${{ github.job }}-${{ hashFiles('**/checksum.txt') }} - restore-keys: | - gradle-packages-${{ runner.os }}-${{ github.job }} - gradle-packages-${{ runner.os }} - - - name: Unit test + - name: Unit test and other verification uses: hypertrace/github-actions/gradle@main with: - args: jacocoTestReport + args: check jacocoTestReport - name: Upload coverage to Codecov - uses: codecov/codecov-action@v2 + uses: codecov/codecov-action@v3 with: name: unit test reports flags: unit - name: Publish Unit Test Results - uses: docker://ghcr.io/enricomi/publish-unit-test-result-action:v2 + uses: EnricoMi/publish-unit-test-result-action@v2 if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository with: github_token: ${{ secrets.GITHUB_TOKEN }} - junit_files: ./**/build/test-results/**/*.xml \ No newline at end of file + files: ./**/build/test-results/**/*.xml + dependency-check: + runs-on: ubuntu-22.04 + steps: + - name: Dependency Check + uses: hypertrace/github-actions/dependency-check@main \ No newline at end of file diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 4941d128..d5525ffd 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -8,28 +8,16 @@ on: jobs: publish-artifacts: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: # Set fetch-depth: 0 to fetch commit history and tags for use in version calculation - name: Check out code - uses: actions/checkout@v2.3.4 + uses: actions/checkout@v3 with: fetch-depth: 0 - - - name: create checksum file - uses: hypertrace/github-actions/checksum@main - - - name: Cache packages - uses: actions/cache@v2 - with: - path: ~/.gradle - key: gradle-packages-${{ runner.os }}-${{ github.job }}-${{ hashFiles('**/checksum.txt') }} - restore-keys: | - gradle-packages-${{ runner.os }}-${{ github.job }} - gradle-packages-${{ runner.os }} - name: Login to Docker Hub - uses: docker/login-action@v1 + uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_READ_USER }} password: ${{ secrets.DOCKERHUB_READ_TOKEN }} @@ -44,11 +32,11 @@ jobs: publish-helm-charts: needs: publish-artifacts - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: # Set fetch-depth: 0 to fetch commit history and tags for use in version calculation - name: Checkout Repository - uses: actions/checkout@v2.3.4 + uses: actions/checkout@v3 with: fetch-depth: 0 diff --git a/build.gradle.kts b/build.gradle.kts index 1175a86b..0bde62a7 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,6 +5,7 @@ plugins { id("org.hypertrace.docker-java-application-plugin") version "0.9.5" apply false id("org.hypertrace.docker-publish-plugin") version "0.9.5" apply false id("org.hypertrace.code-style-plugin") version "1.1.2" apply false + id("org.owasp.dependencycheck") version "8.1.2" } subprojects { @@ -27,3 +28,10 @@ subprojects { } } } + +dependencyCheck { + format = org.owasp.dependencycheck.reporting.ReportGenerator.Format.ALL.toString() + suppressionFile = "owasp-suppressions.xml" + scanConfigurations.add("runtimeClasspath") + failBuildOnCVSS = 7.0F +} diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 57c1e307..c20e2045 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -36,7 +36,7 @@ dependencies { api("com.fasterxml.jackson.core:jackson-databind:2.13.4") api("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.4") api("com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.4") - api("com.fasterxml.jackson:jackson-bom:2.13.4") + api("com.fasterxml.jackson:jackson-bom:2.14.2") api("org.apache.commons:commons-text:1.10.0") api("io.opentelemetry:opentelemetry-proto:1.1.0-alpha") diff --git a/owasp-suppressions.xml b/owasp-suppressions.xml new file mode 100644 index 00000000..571f2429 --- /dev/null +++ b/owasp-suppressions.xml @@ -0,0 +1,11 @@ + + + + + ^pkg:maven/org\.hypertrace\..*@.*$ + cpe:/a:grpc:grpc + cpe:/a:utils_project:utils + + \ No newline at end of file From 18218f80d9043112ae765d7a7dd74d38c78af579 Mon Sep 17 00:00:00 2001 From: Prerana Singhal Date: Tue, 7 Mar 2023 23:42:09 +0530 Subject: [PATCH 125/173] chore: update service-framework version (#131) --- hypertrace-core-graphql-service/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hypertrace-core-graphql-service/build.gradle.kts b/hypertrace-core-graphql-service/build.gradle.kts index 7e579fdd..24fb7b59 100644 --- a/hypertrace-core-graphql-service/build.gradle.kts +++ b/hypertrace-core-graphql-service/build.gradle.kts @@ -8,7 +8,7 @@ plugins { dependencies { implementation(platform(project(":hypertrace-core-graphql-platform"))) - implementation("org.hypertrace.core.serviceframework:platform-http-service-framework:0.1.49") + implementation("org.hypertrace.core.serviceframework:platform-http-service-framework:0.1.50") implementation("org.slf4j:slf4j-api") implementation("com.graphql-java-kickstart:graphql-java-servlet") From f0c59ef47dab5003e90eb77677575358de6501ea Mon Sep 17 00:00:00 2001 From: SrikarMannepalli <37926341+SrikarMannepalli@users.noreply.github.com> Date: Tue, 28 Mar 2023 17:05:22 +0530 Subject: [PATCH 126/173] chore: update graphql-java version (#132) --- hypertrace-core-graphql-platform/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index c20e2045..d64321fb 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -21,7 +21,7 @@ dependencies { api("org.hypertrace.core.attribute.service:attribute-service-api:${attributeServiceVersion}") api("com.google.inject:guice:5.1.0") - api("com.graphql-java:graphql-java:19.2") + api("com.graphql-java:graphql-java:20.1") api("io.github.graphql-java:graphql-java-annotations:9.1") api("org.slf4j:slf4j-api:1.7.36") api("io.reactivex.rxjava3:rxjava:3.1.5") From a384ec2d338ef120494e26f6babe88e5a50b8eca Mon Sep 17 00:00:00 2001 From: SrikarMannepalli <37926341+SrikarMannepalli@users.noreply.github.com> Date: Tue, 28 Mar 2023 21:28:14 +0530 Subject: [PATCH 127/173] chore: update graphql-java version (#133) --- hypertrace-core-graphql-platform/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index d64321fb..fcff0820 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -21,7 +21,7 @@ dependencies { api("org.hypertrace.core.attribute.service:attribute-service-api:${attributeServiceVersion}") api("com.google.inject:guice:5.1.0") - api("com.graphql-java:graphql-java:20.1") + api("com.graphql-java:graphql-java:19.4") api("io.github.graphql-java:graphql-java-annotations:9.1") api("org.slf4j:slf4j-api:1.7.36") api("io.reactivex.rxjava3:rxjava:3.1.5") From 9712c62a023f007119fa075723452235e7a9caaa Mon Sep 17 00:00:00 2001 From: SrikarMannepalli <37926341+SrikarMannepalli@users.noreply.github.com> Date: Wed, 12 Apr 2023 13:01:06 +0530 Subject: [PATCH 128/173] chore: add double array attribute type (#134) --- .../core/graphql/attributes/AttributeModelTranslator.java | 2 ++ .../core/graphql/attributes/AttributeModelType.java | 3 ++- .../graphql/common/schema/attributes/AttributeType.java | 3 ++- .../common/utils/attributes/AttributeTypeConverter.java | 2 ++ .../utils/attributes/AttributeTypeConverterTest.java | 3 +++ owasp-suppressions.xml | 7 +++++++ 6 files changed, 18 insertions(+), 2 deletions(-) diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java index a5ee49d5..695a1939 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java @@ -2,6 +2,7 @@ import static org.hypertrace.core.attribute.service.v1.AttributeKind.TYPE_BOOL; import static org.hypertrace.core.attribute.service.v1.AttributeKind.TYPE_DOUBLE; +import static org.hypertrace.core.attribute.service.v1.AttributeKind.TYPE_DOUBLE_ARRAY; import static org.hypertrace.core.attribute.service.v1.AttributeKind.TYPE_INT64; import static org.hypertrace.core.attribute.service.v1.AttributeKind.TYPE_STRING; import static org.hypertrace.core.attribute.service.v1.AttributeKind.TYPE_STRING_ARRAY; @@ -31,6 +32,7 @@ public class AttributeModelTranslator { .put(TYPE_TIMESTAMP, AttributeModelType.TIMESTAMP) .put(TYPE_STRING_MAP, AttributeModelType.STRING_MAP) .put(TYPE_STRING_ARRAY, AttributeModelType.STRING_ARRAY) + .put(TYPE_DOUBLE_ARRAY, AttributeModelType.DOUBLE_ARRAY) .build(); public Optional translate(AttributeMetadata attributeMetadata) { diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelType.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelType.java index a51001db..527a8992 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelType.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelType.java @@ -7,5 +7,6 @@ public enum AttributeModelType { DOUBLE, TIMESTAMP, STRING_MAP, - STRING_ARRAY + STRING_ARRAY, + DOUBLE_ARRAY } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeType.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeType.java index 63cc05b1..6a385efb 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeType.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeType.java @@ -10,7 +10,8 @@ public enum AttributeType { DOUBLE, TIMESTAMP, STRING_MAP, - STRING_ARRAY; + STRING_ARRAY, + DOUBLE_ARRAY; public static final String TYPE_NAME = "AttributeType"; } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeTypeConverter.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeTypeConverter.java index 20acab7a..bf0868d7 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeTypeConverter.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeTypeConverter.java @@ -2,6 +2,7 @@ import static org.hypertrace.core.graphql.attributes.AttributeModelType.BOOLEAN; import static org.hypertrace.core.graphql.attributes.AttributeModelType.DOUBLE; +import static org.hypertrace.core.graphql.attributes.AttributeModelType.DOUBLE_ARRAY; import static org.hypertrace.core.graphql.attributes.AttributeModelType.LONG; import static org.hypertrace.core.graphql.attributes.AttributeModelType.STRING; import static org.hypertrace.core.graphql.attributes.AttributeModelType.STRING_ARRAY; @@ -26,6 +27,7 @@ public class AttributeTypeConverter implements Convertercpe:/a:grpc:grpc cpe:/a:utils_project:utils + + + ^pkg:maven/io\.github\.graphql\-java/graphql\-java\-annotations@.*$ + cpe:/a:graphql-java:graphql-java + \ No newline at end of file From 3e90c7a0f4343c8bbd6d4cf37b6de7719804aca7 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Mon, 17 Apr 2023 01:52:12 -0700 Subject: [PATCH 129/173] refactor: replace deprecated context fetch (#135) --- .../graphql/common/fetcher/InjectableDataFetcher.java | 4 +++- .../context/DefaultGraphQlRequestContextBuilder.java | 1 + .../core/graphql/context/GraphQlRequestContext.java | 5 +++++ .../core/graphql/log/event/fetcher/LogEventFetcher.java | 6 +++++- .../core/graphql/metadata/fetcher/MetadataFetcher.java | 4 +++- .../graphql/metadata/fetcher/MetadataFetcherTest.java | 9 +++++++-- .../core/graphql/span/fetcher/ExportSpanFetcher.java | 4 +++- .../core/graphql/span/fetcher/SpanFetcher.java | 6 +++++- .../core/graphql/trace/fetcher/TraceFetcher.java | 6 +++++- 9 files changed, 37 insertions(+), 8 deletions(-) diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/fetcher/InjectableDataFetcher.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/fetcher/InjectableDataFetcher.java index a910eabd..89561de5 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/fetcher/InjectableDataFetcher.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/fetcher/InjectableDataFetcher.java @@ -1,5 +1,7 @@ package org.hypertrace.core.graphql.common.fetcher; +import static org.hypertrace.core.graphql.context.GraphQlRequestContext.contextFromEnvironment; + import graphql.schema.DataFetcher; import graphql.schema.DataFetchingEnvironment; import java.util.concurrent.CompletableFuture; @@ -18,7 +20,7 @@ protected InjectableDataFetcher( @Override public final CompletableFuture get(DataFetchingEnvironment environment) throws Exception { - return this.getOrCreateImplementation(environment.getContext()).get(environment); + return this.getOrCreateImplementation(contextFromEnvironment(environment)).get(environment); } private DataFetcher> getOrCreateImplementation( diff --git a/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilder.java b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilder.java index a5f452c9..91f9fdc1 100644 --- a/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilder.java +++ b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/DefaultGraphQlRequestContextBuilder.java @@ -51,6 +51,7 @@ private DefaultGraphQlRequestContext(HttpServletRequest request) { this.request = request; this.cachingKey = new DefaultContextualCacheKey(this, this.getTenantId().orElse(DEFAULT_CONTEXT_ID)); + this.put(GraphQlRequestContext.class, this); } @Override diff --git a/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/GraphQlRequestContext.java b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/GraphQlRequestContext.java index 86a62cb7..d943ea0f 100644 --- a/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/GraphQlRequestContext.java +++ b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/GraphQlRequestContext.java @@ -2,6 +2,7 @@ import graphql.kickstart.execution.context.GraphQLKickstartContext; import graphql.schema.DataFetcher; +import graphql.schema.DataFetchingEnvironment; import java.util.Map; import java.util.Optional; import java.util.concurrent.CompletableFuture; @@ -26,4 +27,8 @@ DataFetcher> constructDataFetcher( ContextualCachingKey getCachingKey(); String getRequestId(); + + static GraphQlRequestContext contextFromEnvironment(DataFetchingEnvironment environment) { + return environment.getGraphQlContext().get(GraphQlRequestContext.class); + } } diff --git a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/fetcher/LogEventFetcher.java b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/fetcher/LogEventFetcher.java index 51701bfd..d6b5a3a5 100644 --- a/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/fetcher/LogEventFetcher.java +++ b/hypertrace-core-graphql-log-event-schema/src/main/java/org/hypertrace/core/graphql/log/event/fetcher/LogEventFetcher.java @@ -1,5 +1,7 @@ package org.hypertrace.core.graphql.log.event.fetcher; +import static org.hypertrace.core.graphql.context.GraphQlRequestContext.contextFromEnvironment; + import graphql.schema.DataFetcher; import graphql.schema.DataFetchingEnvironment; import java.util.concurrent.CompletableFuture; @@ -30,7 +32,9 @@ static final class LogEventFetcherImpl public CompletableFuture get(DataFetchingEnvironment environment) { return this.requestBuilder .build( - environment.getContext(), environment.getArguments(), environment.getSelectionSet()) + contextFromEnvironment(environment), + environment.getArguments(), + environment.getSelectionSet()) .flatMap(this.logEventDao::getLogEvents) .toCompletionStage() .toCompletableFuture(); diff --git a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/fetcher/MetadataFetcher.java b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/fetcher/MetadataFetcher.java index 5ad55b33..260f72ab 100644 --- a/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/fetcher/MetadataFetcher.java +++ b/hypertrace-core-graphql-metadata-schema/src/main/java/org/hypertrace/core/graphql/metadata/fetcher/MetadataFetcher.java @@ -1,5 +1,7 @@ package org.hypertrace.core.graphql.metadata.fetcher; +import static org.hypertrace.core.graphql.context.GraphQlRequestContext.contextFromEnvironment; + import graphql.schema.DataFetcher; import graphql.schema.DataFetchingEnvironment; import java.util.List; @@ -30,7 +32,7 @@ static final class MetadataFetcherImpl @Override public CompletableFuture> get(DataFetchingEnvironment environment) { return this.attributeStore - .getAllExternal(environment.getContext()) + .getAllExternal(contextFromEnvironment(environment)) .flatMap(this.responseBuilder::build) .toCompletionStage() .toCompletableFuture(); diff --git a/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/fetcher/MetadataFetcherTest.java b/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/fetcher/MetadataFetcherTest.java index 3a677c79..effe854d 100644 --- a/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/fetcher/MetadataFetcherTest.java +++ b/hypertrace-core-graphql-metadata-schema/src/test/java/org/hypertrace/core/graphql/metadata/fetcher/MetadataFetcherTest.java @@ -17,6 +17,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Answers; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; @@ -25,7 +26,10 @@ class MetadataFetcherTest { @Mock MetadataResponseBuilder mockResponseBuilder; @Mock AttributeStore mockAttributeStore; - @Mock DataFetchingEnvironment mockDataFetchingEnvironment; + + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + DataFetchingEnvironment mockDataFetchingEnvironment; + @Mock AttributeModel mockModel; @Mock AttributeMetadata mockMetadata; @Mock GraphQlRequestContext mockContext; @@ -35,7 +39,8 @@ class MetadataFetcherTest { void beforeEach() { List mockModelResult = List.of(mockModel); List mockMetadataResult = List.of(mockMetadata); - when(this.mockDataFetchingEnvironment.getContext()).thenReturn(this.mockContext); + when(this.mockDataFetchingEnvironment.getGraphQlContext().get(GraphQlRequestContext.class)) + .thenReturn(this.mockContext); when(this.mockAttributeStore.getAllExternal(eq(this.mockContext))) .thenReturn(Single.just(mockModelResult)); when(this.mockResponseBuilder.build(eq(mockModelResult))) diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/fetcher/ExportSpanFetcher.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/fetcher/ExportSpanFetcher.java index 96249b8e..761e217e 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/fetcher/ExportSpanFetcher.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/fetcher/ExportSpanFetcher.java @@ -1,5 +1,7 @@ package org.hypertrace.core.graphql.span.fetcher; +import static org.hypertrace.core.graphql.context.GraphQlRequestContext.contextFromEnvironment; + import graphql.schema.DataFetcher; import graphql.schema.DataFetchingEnvironment; import io.reactivex.rxjava3.core.Single; @@ -34,7 +36,7 @@ static final class ExportSpanFetcherImpl public CompletableFuture get(DataFetchingEnvironment environment) { Single spanRequest = this.requestBuilder.build( - environment.getContext(), + contextFromEnvironment(environment), environment.getArguments(), SpanAttributes.SPAN_ATTRIBUTES, LogEventAttributes.LOG_EVENT_ATTRIBUTES); diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/fetcher/SpanFetcher.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/fetcher/SpanFetcher.java index 6bfbf4f8..9079305f 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/fetcher/SpanFetcher.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/fetcher/SpanFetcher.java @@ -1,5 +1,7 @@ package org.hypertrace.core.graphql.span.fetcher; +import static org.hypertrace.core.graphql.context.GraphQlRequestContext.contextFromEnvironment; + import graphql.schema.DataFetcher; import graphql.schema.DataFetchingEnvironment; import java.util.concurrent.CompletableFuture; @@ -29,7 +31,9 @@ static final class SpanFetcherImpl implements DataFetcher get(DataFetchingEnvironment environment) { return this.requestBuilder .build( - environment.getContext(), environment.getArguments(), environment.getSelectionSet()) + contextFromEnvironment(environment), + environment.getArguments(), + environment.getSelectionSet()) .flatMap(this.spanDao::getSpans) .toCompletionStage() .toCompletableFuture(); diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/fetcher/TraceFetcher.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/fetcher/TraceFetcher.java index c4b0aed7..8f9f3f02 100644 --- a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/fetcher/TraceFetcher.java +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/fetcher/TraceFetcher.java @@ -1,5 +1,7 @@ package org.hypertrace.core.graphql.trace.fetcher; +import static org.hypertrace.core.graphql.context.GraphQlRequestContext.contextFromEnvironment; + import graphql.schema.DataFetcher; import graphql.schema.DataFetchingEnvironment; import java.util.concurrent.CompletableFuture; @@ -29,7 +31,9 @@ static final class TraceFetcherImpl implements DataFetcher get(DataFetchingEnvironment environment) { return this.requestBuilder .build( - environment.getContext(), environment.getArguments(), environment.getSelectionSet()) + contextFromEnvironment(environment), + environment.getArguments(), + environment.getSelectionSet()) .flatMap(this.traceDao::getTraces) .toCompletionStage() .toCompletableFuture(); From eb6dc3ed32c1b1f508a59f3e456a073ad20576ac Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Sun, 18 Jun 2023 22:37:34 -0700 Subject: [PATCH 130/173] refactor: update vulnerabilities (#136) * refactor: update vulnerabilities * fix: move bom declaration --- .snyk | 10 ------- build.gradle.kts | 2 +- .../build.gradle.kts | 26 +++++++++---------- .../build.gradle.kts | 2 +- 4 files changed, 15 insertions(+), 25 deletions(-) delete mode 100644 .snyk diff --git a/.snyk b/.snyk deleted file mode 100644 index f67d1c46..00000000 --- a/.snyk +++ /dev/null @@ -1,10 +0,0 @@ -# Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities. -version: v1.14.1 -# ignores vulnerabilities until expiry date; change duration by modifying expiry date -ignore: - SNYK-JAVA-IONETTY-1042268: - - '*': - reason: No replacement available - expires: 2022-10-31T00:00:00.000Z -patch: {} - diff --git a/build.gradle.kts b/build.gradle.kts index 0bde62a7..aad6b337 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,7 +5,7 @@ plugins { id("org.hypertrace.docker-java-application-plugin") version "0.9.5" apply false id("org.hypertrace.docker-publish-plugin") version "0.9.5" apply false id("org.hypertrace.code-style-plugin") version "1.1.2" apply false - id("org.owasp.dependencycheck") version "8.1.2" + id("org.owasp.dependencycheck") version "8.2.1" } subprojects { diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index fcff0820..76a35891 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -9,37 +9,37 @@ javaPlatform { val attributeServiceVersion: String = "0.14.14" dependencies { - api(platform("io.grpc:grpc-bom:1.47.0")) + api(platform("io.grpc:grpc-bom:1.56.0")) + api(platform("com.fasterxml.jackson:jackson-bom:2.15.2")) constraints { - api("org.hypertrace.core.grpcutils:grpc-context-utils:0.11.2") - api("org.hypertrace.core.grpcutils:grpc-client-utils:0.11.2") - api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.11.2") - api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.11.2") + api("org.hypertrace.core.grpcutils:grpc-context-utils:0.12.0") + api("org.hypertrace.core.grpcutils:grpc-client-utils:0.12.0") + api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.0") + api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.0") api("org.hypertrace.gateway.service:gateway-service-api:0.2.25") api("org.hypertrace.core.attribute.service:caching-attribute-service-client:${attributeServiceVersion}") api("org.hypertrace.core.attribute.service:attribute-service-api:${attributeServiceVersion}") api("com.google.inject:guice:5.1.0") - api("com.graphql-java:graphql-java:19.4") + api("com.graphql-java:graphql-java:20.4") api("io.github.graphql-java:graphql-java-annotations:9.1") api("org.slf4j:slf4j-api:1.7.36") - api("io.reactivex.rxjava3:rxjava:3.1.5") + api("io.reactivex.rxjava3:rxjava:3.1.6") api("com.google.protobuf:protobuf-java-util:3.21.7") api("org.projectlombok:lombok:1.18.24") api("com.google.code.findbugs:jsr305:3.0.2") api("com.typesafe:config:1.4.2") - api("com.google.guava:guava:31.1-jre") + api("com.google.guava:guava:32.0.1-jre") api("com.graphql-java-kickstart:graphql-java-servlet:14.0.0") - api("com.fasterxml.jackson.core:jackson-databind:2.13.4") - api("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.4") - api("com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.4") - api("com.fasterxml.jackson:jackson-bom:2.14.2") + api("com.fasterxml.jackson.core:jackson-databind") + api("com.fasterxml.jackson.datatype:jackson-datatype-jsr310") + api("com.fasterxml.jackson.datatype:jackson-datatype-jdk8") api("org.apache.commons:commons-text:1.10.0") api("io.opentelemetry:opentelemetry-proto:1.1.0-alpha") - runtime("org.apache.logging.log4j:log4j-slf4j-impl:2.17.2") + runtime("org.apache.logging.log4j:log4j-slf4j-impl:2.20.0") } } diff --git a/hypertrace-core-graphql-service/build.gradle.kts b/hypertrace-core-graphql-service/build.gradle.kts index 24fb7b59..43e703ba 100644 --- a/hypertrace-core-graphql-service/build.gradle.kts +++ b/hypertrace-core-graphql-service/build.gradle.kts @@ -8,7 +8,7 @@ plugins { dependencies { implementation(platform(project(":hypertrace-core-graphql-platform"))) - implementation("org.hypertrace.core.serviceframework:platform-http-service-framework:0.1.50") + implementation("org.hypertrace.core.serviceframework:platform-http-service-framework:0.1.52") implementation("org.slf4j:slf4j-api") implementation("com.graphql-java-kickstart:graphql-java-servlet") From 7dec236606c451c772cf747731f10fc04475e556 Mon Sep 17 00:00:00 2001 From: SrikarMannepalli <37926341+SrikarMannepalli@users.noreply.github.com> Date: Mon, 19 Jun 2023 14:04:39 +0530 Subject: [PATCH 131/173] fix: update graphql java version (#137) * fix: update graphql java version * add suppression --- hypertrace-core-graphql-platform/build.gradle.kts | 2 +- owasp-suppressions.xml | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 76a35891..1fbf330e 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -22,7 +22,7 @@ dependencies { api("org.hypertrace.core.attribute.service:attribute-service-api:${attributeServiceVersion}") api("com.google.inject:guice:5.1.0") - api("com.graphql-java:graphql-java:20.4") + api("com.graphql-java:graphql-java:19.4") api("io.github.graphql-java:graphql-java-annotations:9.1") api("org.slf4j:slf4j-api:1.7.36") api("io.reactivex.rxjava3:rxjava:3.1.6") diff --git a/owasp-suppressions.xml b/owasp-suppressions.xml index c7071e14..894dcf1b 100644 --- a/owasp-suppressions.xml +++ b/owasp-suppressions.xml @@ -15,4 +15,11 @@ ^pkg:maven/io\.github\.graphql\-java/graphql\-java\-annotations@.*$ cpe:/a:graphql-java:graphql-java + + + ^pkg:maven/com\.fasterxml\.jackson\.core/jackson\-databind@.*$ + CVE-2023-35116 + \ No newline at end of file From 15491348fc6f0c9348a253f229f86a480edbd5ca Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Mon, 19 Jun 2023 05:04:13 -0700 Subject: [PATCH 132/173] fix: update gql java lib (#138) --- hypertrace-core-graphql-platform/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 1fbf330e..a665b64b 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -22,7 +22,7 @@ dependencies { api("org.hypertrace.core.attribute.service:attribute-service-api:${attributeServiceVersion}") api("com.google.inject:guice:5.1.0") - api("com.graphql-java:graphql-java:19.4") + api("com.graphql-java:graphql-java:19.6") api("io.github.graphql-java:graphql-java-annotations:9.1") api("org.slf4j:slf4j-api:1.7.36") api("io.reactivex.rxjava3:rxjava:3.1.6") From 984a7e2f2947e302ce54f97656aeb8cba00c49e6 Mon Sep 17 00:00:00 2001 From: Sanket Mundra <97032782+sanket-mundra@users.noreply.github.com> Date: Thu, 22 Jun 2023 14:35:44 +0530 Subject: [PATCH 133/173] Updating grpcutils version to fix netty vuln (#139) --- hypertrace-core-graphql-platform/build.gradle.kts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index a665b64b..77716efb 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -13,10 +13,9 @@ dependencies { api(platform("com.fasterxml.jackson:jackson-bom:2.15.2")) constraints { - api("org.hypertrace.core.grpcutils:grpc-context-utils:0.12.0") - api("org.hypertrace.core.grpcutils:grpc-client-utils:0.12.0") - api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.0") - api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.0") + api("org.hypertrace.core.grpcutils:grpc-context-utils:0.12.1") + api("org.hypertrace.core.grpcutils:grpc-client-utils:0.12.1") + api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.1") api("org.hypertrace.gateway.service:gateway-service-api:0.2.25") api("org.hypertrace.core.attribute.service:caching-attribute-service-client:${attributeServiceVersion}") api("org.hypertrace.core.attribute.service:attribute-service-api:${attributeServiceVersion}") From 5a8d6d3928668f5cf76de23d76f6794fb3411e9b Mon Sep 17 00:00:00 2001 From: kotharironak <53209990+kotharironak@users.noreply.github.com> Date: Thu, 13 Jul 2023 16:55:38 +0530 Subject: [PATCH 134/173] feat: adding consumer support for new traces/spans api (#140) * feat: adding consumer support for new traces/spans api * updated the spans result set * addressed the comments and updated gateway lib * fixed owas issue, need to extend supression --- .../build.gradle.kts | 2 +- .../span/dao/GatewayServiceSpanConverter.java | 2 +- .../dao/GatewayServiceSpanRequestBuilder.java | 1 + .../request/DefaultSpanRequestBuilder.java | 25 +++++++++++++++--- .../graphql/span/request/SpanRequest.java | 2 ++ .../core/graphql/span/dao/DaoTestUtil.java | 1 + .../dao/SpanLogEventRequestBuilderTest.java | 6 +++-- .../build.gradle.kts | 1 + .../dao/GatewayServiceTraceConverter.java | 3 +-- .../GatewayServiceTraceRequestBuilder.java | 1 + .../request/DefaultTraceRequestBuilder.java | 26 ++++++++++++++++--- .../graphql/trace/request/TraceRequest.java | 2 ++ owasp-suppressions.xml | 2 +- 13 files changed, 60 insertions(+), 14 deletions(-) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 77716efb..de256c14 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -16,7 +16,7 @@ dependencies { api("org.hypertrace.core.grpcutils:grpc-context-utils:0.12.1") api("org.hypertrace.core.grpcutils:grpc-client-utils:0.12.1") api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.1") - api("org.hypertrace.gateway.service:gateway-service-api:0.2.25") + api("org.hypertrace.gateway.service:gateway-service-api:0.3.0") api("org.hypertrace.core.attribute.service:caching-attribute-service-client:${attributeServiceVersion}") api("org.hypertrace.core.attribute.service:attribute-service-api:${attributeServiceVersion}") diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanConverter.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanConverter.java index e1d96932..beda91fc 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanConverter.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanConverter.java @@ -34,7 +34,7 @@ class GatewayServiceSpanConverter { } public Single convert(SpanRequest request, SpanLogEventsResponse response) { - int total = response.spansResponse().getTotal(); + int total = response.spansResponse().hasTotal() ? response.spansResponse().getTotal() : 0; return Observable.fromIterable(response.spansResponse().getSpansList()) .flatMapSingle(spanEvent -> this.convert(request, spanEvent, response.spanIdToLogEvents())) diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanRequestBuilder.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanRequestBuilder.java index 48798841..1445d3a9 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanRequestBuilder.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/dao/GatewayServiceSpanRequestBuilder.java @@ -56,6 +56,7 @@ Single buildRequest(SpanRequest gqlRequest) { .spanEventsRequest() .spaceId() .orElse("")) // String proto default value + .setFetchTotal(gqlRequest.fetchTotal()) .build()); } } diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/DefaultSpanRequestBuilder.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/DefaultSpanRequestBuilder.java index 2cae9188..6d498f52 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/DefaultSpanRequestBuilder.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/DefaultSpanRequestBuilder.java @@ -15,20 +15,26 @@ import org.hypertrace.core.graphql.common.request.ResultSetRequest; import org.hypertrace.core.graphql.common.request.ResultSetRequestBuilder; import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; +import org.hypertrace.core.graphql.common.schema.results.ResultSet; import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.core.graphql.utils.schema.GraphQlSelectionFinder; +import org.hypertrace.core.graphql.utils.schema.SelectionQuery; class DefaultSpanRequestBuilder implements SpanRequestBuilder { private final ResultSetRequestBuilder resultSetRequestBuilder; private final LogEventAttributeRequestBuilder logEventAttributeRequestBuilder; + private final GraphQlSelectionFinder selectionFinder; @Inject public DefaultSpanRequestBuilder( ResultSetRequestBuilder resultSetRequestBuilder, - LogEventAttributeRequestBuilder logEventAttributeRequestBuilder) { + LogEventAttributeRequestBuilder logEventAttributeRequestBuilder, + GraphQlSelectionFinder selectionFinder) { this.resultSetRequestBuilder = resultSetRequestBuilder; this.logEventAttributeRequestBuilder = logEventAttributeRequestBuilder; + this.selectionFinder = selectionFinder; } @Override @@ -36,6 +42,13 @@ public Single build( GraphQlRequestContext context, Map arguments, DataFetchingFieldSelectionSet selectionSet) { + boolean fetchTotal = + this.selectionFinder + .findSelections( + selectionSet, SelectionQuery.namedChild(ResultSet.RESULT_SET_TOTAL_NAME)) + .count() + > 0; + return zip( resultSetRequestBuilder.build( context, @@ -45,7 +58,8 @@ public Single build( OrderArgument.class), logEventAttributeRequestBuilder.buildAttributeRequest(context, selectionSet), (resultSetRequest, logEventAttributeRequest) -> - new DefaultSpanRequest(context, resultSetRequest, logEventAttributeRequest)); + new DefaultSpanRequest( + context, resultSetRequest, logEventAttributeRequest, fetchTotal)); } @Override @@ -54,12 +68,16 @@ public Single build( Map arguments, List spanAttributeExpressions, List logAttributeExpressions) { + return zip( resultSetRequestBuilder.build( context, HypertraceCoreAttributeScopeString.SPAN, arguments, spanAttributeExpressions), logEventAttributeRequestBuilder.buildAttributeRequest(context, logAttributeExpressions), (resultSetRequest, logEventAttributeRequest) -> - new DefaultSpanRequest(context, resultSetRequest, logEventAttributeRequest)); + // This build method is utilized in the exportSpans API, which does not accept the total + // parameter as an argument. Ref {@link ExportSpanResult}. + // So, we explicitly set fetchTotal to false. + new DefaultSpanRequest(context, resultSetRequest, logEventAttributeRequest, false)); } @Value @@ -68,5 +86,6 @@ private static class DefaultSpanRequest implements SpanRequest { GraphQlRequestContext context; ResultSetRequest spanEventsRequest; Collection logEventAttributes; + boolean fetchTotal; } } diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/SpanRequest.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/SpanRequest.java index 471debb3..3e04e01d 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/SpanRequest.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/request/SpanRequest.java @@ -10,4 +10,6 @@ public interface SpanRequest extends ContextualRequest { ResultSetRequest spanEventsRequest(); Collection logEventAttributes(); + + boolean fetchTotal(); } diff --git a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/DaoTestUtil.java b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/DaoTestUtil.java index d6ecc19c..19a9d6f2 100644 --- a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/DaoTestUtil.java +++ b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/DaoTestUtil.java @@ -72,6 +72,7 @@ static class DefaultSpanRequest implements SpanRequest { GraphQlRequestContext context; ResultSetRequest spanEventsRequest; Collection logEventAttributes; + boolean fetchTotal; } @Value diff --git a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilderTest.java b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilderTest.java index ffa5fba0..1258ee03 100644 --- a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilderTest.java +++ b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/dao/SpanLogEventRequestBuilderTest.java @@ -152,7 +152,8 @@ void testBuildRequest() { List.of(), Collections.emptyList(), Optional.empty()); - SpanRequest spanRequest = new DefaultSpanRequest(null, resultSetRequest, logAttributeRequests); + SpanRequest spanRequest = + new DefaultSpanRequest(null, resultSetRequest, logAttributeRequests, true); LogEventsRequest expectedLogEventsRequest = LogEventsRequest.newBuilder() @@ -193,7 +194,8 @@ void testBuildRequest_addSpanId() { List.of(), Collections.emptyList(), Optional.empty()); - SpanRequest spanRequest = new DefaultSpanRequest(null, resultSetRequest, logAttributeRequests); + SpanRequest spanRequest = + new DefaultSpanRequest(null, resultSetRequest, logAttributeRequests, true); LogEventsRequest expectedLogEventsRequest = LogEventsRequest.newBuilder() diff --git a/hypertrace-core-graphql-trace-schema/build.gradle.kts b/hypertrace-core-graphql-trace-schema/build.gradle.kts index ffeb5590..f1a9e9f9 100644 --- a/hypertrace-core-graphql-trace-schema/build.gradle.kts +++ b/hypertrace-core-graphql-trace-schema/build.gradle.kts @@ -24,4 +24,5 @@ dependencies { implementation(project(":hypertrace-core-graphql-attribute-store")) implementation(project(":hypertrace-core-graphql-deserialization")) implementation(project(":hypertrace-core-graphql-request-transformation")) + implementation(project(":hypertrace-core-graphql-schema-utils")) } diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceConverter.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceConverter.java index 263e481a..0a637e46 100644 --- a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceConverter.java +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceConverter.java @@ -30,8 +30,7 @@ public class GatewayServiceTraceConverter { } public Single convert(ResultSetRequest request, TracesResponse response) { - int total = response.getTotal(); - + int total = response.hasTotal() ? response.getTotal() : 0; return Observable.fromIterable(response.getTracesList()) .flatMapSingle(trace -> this.convert(request, trace)) .toList() diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceRequestBuilder.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceRequestBuilder.java index ffa630c6..1cb37645 100644 --- a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceRequestBuilder.java +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/dao/GatewayServiceTraceRequestBuilder.java @@ -54,6 +54,7 @@ Single buildRequest(TraceRequest request) { .setFilter(filters) .setSpaceId( request.resultSetRequest().spaceId().orElse("")) // String proto default value + .setFetchTotal(request.fetchTotal()) .build()); } } diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/DefaultTraceRequestBuilder.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/DefaultTraceRequestBuilder.java index 4167e64e..7bd799b8 100644 --- a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/DefaultTraceRequestBuilder.java +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/DefaultTraceRequestBuilder.java @@ -8,22 +8,29 @@ import lombok.experimental.Accessors; import org.hypertrace.core.graphql.common.request.ResultSetRequest; import org.hypertrace.core.graphql.common.request.ResultSetRequestBuilder; +import org.hypertrace.core.graphql.common.schema.results.ResultSet; import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; import org.hypertrace.core.graphql.context.GraphQlRequestContext; import org.hypertrace.core.graphql.deserialization.ArgumentDeserializer; import org.hypertrace.core.graphql.trace.schema.arguments.TraceType; import org.hypertrace.core.graphql.trace.schema.arguments.TraceTypeArgument; +import org.hypertrace.core.graphql.utils.schema.GraphQlSelectionFinder; +import org.hypertrace.core.graphql.utils.schema.SelectionQuery; class DefaultTraceRequestBuilder implements TraceRequestBuilder { private final ResultSetRequestBuilder resultSetRequestBuilder; private final ArgumentDeserializer argumentDeserializer; + private final GraphQlSelectionFinder selectionFinder; @Inject DefaultTraceRequestBuilder( - ResultSetRequestBuilder resultSetRequestBuilder, ArgumentDeserializer argumentDeserializer) { + ResultSetRequestBuilder resultSetRequestBuilder, + ArgumentDeserializer argumentDeserializer, + GraphQlSelectionFinder selectionFinder) { this.resultSetRequestBuilder = resultSetRequestBuilder; this.argumentDeserializer = argumentDeserializer; + this.selectionFinder = selectionFinder; } @Override @@ -37,18 +44,28 @@ public Single build( .deserializePrimitive(arguments, TraceTypeArgument.class) .orElseThrow(); - return this.build(context, traceType, arguments, selectionSet); + boolean fetchTotal = + this.selectionFinder + .findSelections( + selectionSet, SelectionQuery.namedChild(ResultSet.RESULT_SET_TOTAL_NAME)) + .count() + > 0; + + return this.build(context, traceType, arguments, selectionSet, fetchTotal); } private Single build( GraphQlRequestContext context, TraceType traceType, Map arguments, - DataFetchingFieldSelectionSet selectionSet) { + DataFetchingFieldSelectionSet selectionSet, + boolean fetchTotal) { return this.resultSetRequestBuilder .build(context, traceType.getScopeString(), arguments, selectionSet) - .map(resultSetRequest -> new DefaultTraceRequest(context, resultSetRequest, traceType)); + .map( + resultSetRequest -> + new DefaultTraceRequest(context, resultSetRequest, traceType, fetchTotal)); } @Value @@ -57,5 +74,6 @@ private static class DefaultTraceRequest implements TraceRequest { GraphQlRequestContext context; ResultSetRequest resultSetRequest; TraceType traceType; + boolean fetchTotal; } } diff --git a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/TraceRequest.java b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/TraceRequest.java index 05c169bb..c8704aeb 100644 --- a/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/TraceRequest.java +++ b/hypertrace-core-graphql-trace-schema/src/main/java/org/hypertrace/core/graphql/trace/request/TraceRequest.java @@ -9,4 +9,6 @@ public interface TraceRequest extends ContextualRequest { ResultSetRequest resultSetRequest(); TraceType traceType(); + + boolean fetchTotal(); } diff --git a/owasp-suppressions.xml b/owasp-suppressions.xml index 894dcf1b..07948e5c 100644 --- a/owasp-suppressions.xml +++ b/owasp-suppressions.xml @@ -15,7 +15,7 @@ ^pkg:maven/io\.github\.graphql\-java/graphql\-java\-annotations@.*$ cpe:/a:graphql-java:graphql-java - + From 8ef6b667c33792c4da7a5508d1b6200eaf9ff599 Mon Sep 17 00:00:00 2001 From: SJ <48863181+skjindal93@users.noreply.github.com> Date: Wed, 2 Aug 2023 18:56:05 +0530 Subject: [PATCH 135/173] chore(gateway-service): configurable max channel inbound message size (#141) --- .../graphql/service/DefaultGraphQlServiceConfig.java | 10 ++++++++++ .../src/main/resources/configs/common/application.conf | 3 +++ .../core/graphql/spi/config/GraphQlServiceConfig.java | 2 ++ 3 files changed, 15 insertions(+) diff --git a/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java index d6c77495..b882435b 100644 --- a/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java +++ b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java @@ -29,6 +29,8 @@ class DefaultGraphQlServiceConfig implements GraphQlServiceConfig { private static final String GATEWAY_SERVICE_HOST_PROPERTY = "gateway.service.host"; private static final String GATEWAY_SERVICE_PORT_PROPERTY = "gateway.service.port"; private static final String GATEWAY_SERVICE_CLIENT_TIMEOUT = "gateway.service.timeout"; + private static final String GATEWAY_SERVICE_CLIENT_MAX_INBOUND_MESSAGE_SIZE = + "gateway.service.maxMessageSize.inbound"; private final String serviceName; private final int servicePort; @@ -44,6 +46,7 @@ class DefaultGraphQlServiceConfig implements GraphQlServiceConfig { private final String gatewayServiceHost; private final int gatewayServicePort; private final Duration gatewayServiceTimeout; + private final int gatewayServiceMaxInboundMessageSize; DefaultGraphQlServiceConfig(Config untypedConfig) { this.serviceName = untypedConfig.getString(SERVICE_NAME_CONFIG); @@ -64,6 +67,8 @@ class DefaultGraphQlServiceConfig implements GraphQlServiceConfig { this.gatewayServicePort = untypedConfig.getInt(GATEWAY_SERVICE_PORT_PROPERTY); this.gatewayServiceTimeout = getTimeoutOrFallback(() -> untypedConfig.getDuration(GATEWAY_SERVICE_CLIENT_TIMEOUT)); + this.gatewayServiceMaxInboundMessageSize = + untypedConfig.getBytes(GATEWAY_SERVICE_CLIENT_MAX_INBOUND_MESSAGE_SIZE).intValue(); } @Override @@ -136,6 +141,11 @@ public Duration getGatewayServiceTimeout() { return gatewayServiceTimeout; } + @Override + public int getGatewayServiceMaxInboundMessageSize() { + return this.gatewayServiceMaxInboundMessageSize; + } + private Duration getTimeoutOrFallback(Supplier durationSupplier) { return optionallyGet(durationSupplier) .orElse(Duration.ofSeconds(DEFAULT_CLIENT_TIMEOUT_SECONDS)); diff --git a/hypertrace-core-graphql-service/src/main/resources/configs/common/application.conf b/hypertrace-core-graphql-service/src/main/resources/configs/common/application.conf index 11216c86..4a08113e 100644 --- a/hypertrace-core-graphql-service/src/main/resources/configs/common/application.conf +++ b/hypertrace-core-graphql-service/src/main/resources/configs/common/application.conf @@ -18,4 +18,7 @@ attribute.service = { gateway.service = { host = localhost port = 50071 + maxMessageSize = { + inbound = 4MiB + } } diff --git a/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java b/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java index 1c3c9044..915064c1 100644 --- a/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java +++ b/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java @@ -32,4 +32,6 @@ public interface GraphQlServiceConfig { int getGatewayServicePort(); Duration getGatewayServiceTimeout(); + + int getGatewayServiceMaxInboundMessageSize(); } From 70ad70a32d20b882645f511190292c8790063929 Mon Sep 17 00:00:00 2001 From: aman bansal Date: Thu, 3 Aug 2023 13:32:43 +0530 Subject: [PATCH 136/173] chore | updating gateway service version (#142) --- hypertrace-core-graphql-platform/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index de256c14..438a59c3 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -16,7 +16,7 @@ dependencies { api("org.hypertrace.core.grpcutils:grpc-context-utils:0.12.1") api("org.hypertrace.core.grpcutils:grpc-client-utils:0.12.1") api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.1") - api("org.hypertrace.gateway.service:gateway-service-api:0.3.0") + api("org.hypertrace.gateway.service:gateway-service-api:0.3.2") api("org.hypertrace.core.attribute.service:caching-attribute-service-client:${attributeServiceVersion}") api("org.hypertrace.core.attribute.service:attribute-service-api:${attributeServiceVersion}") From a4e7276e65dc6018427e9d51e8b36803d8c94968 Mon Sep 17 00:00:00 2001 From: GurtejSohi Date: Fri, 18 Aug 2023 15:41:53 +0530 Subject: [PATCH 137/173] chore: upgrade grpc and grpcutils version due to vulns (#143) --- hypertrace-core-graphql-platform/build.gradle.kts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 438a59c3..bfd58c2d 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -9,13 +9,13 @@ javaPlatform { val attributeServiceVersion: String = "0.14.14" dependencies { - api(platform("io.grpc:grpc-bom:1.56.0")) + api(platform("io.grpc:grpc-bom:1.57.2")) api(platform("com.fasterxml.jackson:jackson-bom:2.15.2")) constraints { - api("org.hypertrace.core.grpcutils:grpc-context-utils:0.12.1") - api("org.hypertrace.core.grpcutils:grpc-client-utils:0.12.1") - api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.1") + api("org.hypertrace.core.grpcutils:grpc-context-utils:0.12.2") + api("org.hypertrace.core.grpcutils:grpc-client-utils:0.12.2") + api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.2") api("org.hypertrace.gateway.service:gateway-service-api:0.3.2") api("org.hypertrace.core.attribute.service:caching-attribute-service-client:${attributeServiceVersion}") api("org.hypertrace.core.attribute.service:attribute-service-api:${attributeServiceVersion}") From ee2d2c7d80754633b16fac4b60d74ded5adb74cc Mon Sep 17 00:00:00 2001 From: Ravi Singal <62086374+ravisingal@users.noreply.github.com> Date: Fri, 22 Sep 2023 18:43:29 +0530 Subject: [PATCH 138/173] chore: update gradle plugins (#144) --- build.gradle.kts | 12 ++++++------ hypertrace-core-graphql-platform/build.gradle.kts | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index aad6b337..e1c69906 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,10 +1,10 @@ plugins { - id("org.hypertrace.repository-plugin") version "0.4.1" - id("org.hypertrace.ci-utils-plugin") version "0.3.0" - id("org.hypertrace.jacoco-report-plugin") version "0.2.0" apply false - id("org.hypertrace.docker-java-application-plugin") version "0.9.5" apply false - id("org.hypertrace.docker-publish-plugin") version "0.9.5" apply false - id("org.hypertrace.code-style-plugin") version "1.1.2" apply false + id("org.hypertrace.repository-plugin") version "0.4.2" + id("org.hypertrace.ci-utils-plugin") version "0.3.2" + id("org.hypertrace.jacoco-report-plugin") version "0.2.1" apply false + id("org.hypertrace.docker-java-application-plugin") version "0.9.9" apply false + id("org.hypertrace.docker-publish-plugin") version "0.9.9" apply false + id("org.hypertrace.code-style-plugin") version "1.2.0" apply false id("org.owasp.dependencycheck") version "8.2.1" } diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index bfd58c2d..27c2a418 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -30,7 +30,7 @@ dependencies { api("org.projectlombok:lombok:1.18.24") api("com.google.code.findbugs:jsr305:3.0.2") api("com.typesafe:config:1.4.2") - api("com.google.guava:guava:32.0.1-jre") + api("com.google.guava:guava:32.1.2-jre") api("com.graphql-java-kickstart:graphql-java-servlet:14.0.0") api("com.fasterxml.jackson.core:jackson-databind") From eee26127499686dd6136744f5daf0f125b9b1b25 Mon Sep 17 00:00:00 2001 From: Prerana Singhal Date: Thu, 19 Oct 2023 16:21:38 +0530 Subject: [PATCH 139/173] chore: upgraded hypertrace grpc-utils version (#146) * chore: upgraded hypertrace grpc-utils version * Updated versions * Added suppressions --- .../build.gradle.kts | 7 +++--- .../build.gradle.kts | 2 +- owasp-suppressions.xml | 24 ++++++++++++++++++- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts index 27c2a418..08afb5fc 100644 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ b/hypertrace-core-graphql-platform/build.gradle.kts @@ -13,10 +13,11 @@ dependencies { api(platform("com.fasterxml.jackson:jackson-bom:2.15.2")) constraints { - api("org.hypertrace.core.grpcutils:grpc-context-utils:0.12.2") - api("org.hypertrace.core.grpcutils:grpc-client-utils:0.12.2") - api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.2") + api("org.hypertrace.core.grpcutils:grpc-context-utils:0.12.6") + api("org.hypertrace.core.grpcutils:grpc-client-utils:0.12.6") + api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6") api("org.hypertrace.gateway.service:gateway-service-api:0.3.2") + api("org.hypertrace.core.serviceframework:platform-http-service-framework:0.1.62") api("org.hypertrace.core.attribute.service:caching-attribute-service-client:${attributeServiceVersion}") api("org.hypertrace.core.attribute.service:attribute-service-api:${attributeServiceVersion}") diff --git a/hypertrace-core-graphql-service/build.gradle.kts b/hypertrace-core-graphql-service/build.gradle.kts index 43e703ba..77bb83fc 100644 --- a/hypertrace-core-graphql-service/build.gradle.kts +++ b/hypertrace-core-graphql-service/build.gradle.kts @@ -8,7 +8,7 @@ plugins { dependencies { implementation(platform(project(":hypertrace-core-graphql-platform"))) - implementation("org.hypertrace.core.serviceframework:platform-http-service-framework:0.1.52") + implementation("org.hypertrace.core.serviceframework:platform-http-service-framework") implementation("org.slf4j:slf4j-api") implementation("com.graphql-java-kickstart:graphql-java-servlet") diff --git a/owasp-suppressions.xml b/owasp-suppressions.xml index 07948e5c..bd273df4 100644 --- a/owasp-suppressions.xml +++ b/owasp-suppressions.xml @@ -15,7 +15,29 @@ ^pkg:maven/io\.github\.graphql\-java/graphql\-java\-annotations@.*$ cpe:/a:graphql-java:graphql-java - + + + ^pkg:maven/io\.netty/netty.*@.*$ + CVE-2023-4586 + + + + ^pkg:maven/org\.eclipse\.jetty/jetty\-servlets@9.4.53\..*$ + CVE-2023-36479 + + From 6f68e95d677dd06da2e30bc25418a09ce0596b4c Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Sun, 5 Nov 2023 07:30:10 -0500 Subject: [PATCH 140/173] Bom (#147) * build: upgrade gradle, project accessors * ci: add gh workflow * refactor: initial locks, plugins * refactor: migrate to bom * build: update locks * ci: fix cron expression --- .github/workflows/update-locks.yml | 30 +++++ build.gradle.kts | 22 +--- gradle/libs.versions.toml | 5 + gradle/wrapper/gradle-wrapper.jar | Bin 59536 -> 63721 bytes gradle/wrapper/gradle-wrapper.properties | 4 +- gradlew | 41 ++++-- gradlew.bat | 15 ++- .../gradle.lockfile | 8 ++ .../build.gradle.kts | 10 +- .../gradle.lockfile | 58 +++++++++ .../build.gradle.kts | 34 ++--- .../gradle.lockfile | 58 +++++++++ .../build.gradle.kts | 30 ++--- .../gradle.lockfile | 59 +++++++++ .../build.gradle.kts | 22 ++-- .../gradle.lockfile | 36 ++++++ .../build.gradle.kts | 24 ++-- .../gradle.lockfile | 30 +++++ .../build.gradle.kts | 20 +-- .../gradle.lockfile | 59 +++++++++ .../build.gradle.kts | 34 ++--- .../gradle.lockfile | 49 +++++++ hypertrace-core-graphql-impl/build.gradle.kts | 48 +++---- hypertrace-core-graphql-impl/gradle.lockfile | 63 +++++++++ .../build.gradle.kts | 60 ++++----- .../gradle.lockfile | 62 +++++++++ .../build.gradle.kts | 30 ++--- .../gradle.lockfile | 59 +++++++++ .../build.gradle.kts | 45 ------- .../build.gradle.kts | 14 +- .../gradle.lockfile | 58 +++++++++ .../build.gradle.kts | 8 +- .../gradle.lockfile | 28 ++++ .../build.gradle.kts | 18 +-- .../gradle.lockfile | 27 ++++ .../build.gradle.kts | 16 +-- .../gradle.lockfile | 25 ++++ .../build.gradle.kts | 20 ++- .../gradle.lockfile | 122 ++++++++++++++++++ .../build.gradle.kts | 70 +++++----- .../gradle.lockfile | 65 ++++++++++ hypertrace-core-graphql-spi/build.gradle.kts | 6 +- hypertrace-core-graphql-spi/gradle.lockfile | 16 +++ .../build.gradle.kts | 11 -- .../build.gradle.kts | 36 +++--- .../gradle.lockfile | 62 +++++++++ settings.gradle.kts | 11 +- 47 files changed, 1281 insertions(+), 347 deletions(-) create mode 100644 .github/workflows/update-locks.yml create mode 100644 gradle/libs.versions.toml create mode 100644 hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile create mode 100644 hypertrace-core-graphql-attribute-scope/gradle.lockfile create mode 100644 hypertrace-core-graphql-attribute-store/gradle.lockfile create mode 100644 hypertrace-core-graphql-common-schema/gradle.lockfile create mode 100644 hypertrace-core-graphql-context/gradle.lockfile create mode 100644 hypertrace-core-graphql-deserialization/gradle.lockfile create mode 100644 hypertrace-core-graphql-gateway-service-utils/gradle.lockfile create mode 100644 hypertrace-core-graphql-grpc-utils/gradle.lockfile create mode 100644 hypertrace-core-graphql-impl/gradle.lockfile create mode 100644 hypertrace-core-graphql-log-event-schema/gradle.lockfile create mode 100644 hypertrace-core-graphql-metadata-schema/gradle.lockfile delete mode 100644 hypertrace-core-graphql-platform/build.gradle.kts create mode 100644 hypertrace-core-graphql-request-transformation/gradle.lockfile create mode 100644 hypertrace-core-graphql-rx-utils/gradle.lockfile create mode 100644 hypertrace-core-graphql-schema-registry/gradle.lockfile create mode 100644 hypertrace-core-graphql-schema-utils/gradle.lockfile create mode 100644 hypertrace-core-graphql-service/gradle.lockfile create mode 100644 hypertrace-core-graphql-span-schema/gradle.lockfile create mode 100644 hypertrace-core-graphql-spi/gradle.lockfile delete mode 100644 hypertrace-core-graphql-test-platform/build.gradle.kts create mode 100644 hypertrace-core-graphql-trace-schema/gradle.lockfile diff --git a/.github/workflows/update-locks.yml b/.github/workflows/update-locks.yml new file mode 100644 index 00000000..6fefa95b --- /dev/null +++ b/.github/workflows/update-locks.yml @@ -0,0 +1,30 @@ +name: Update Locks +on: + workflow_dispatch: + schedule: + - cron: '12 12 * * 5' +jobs: + update-versions: + runs-on: ubuntu-22.04 + steps: + - name: Check out code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Calculate simple repository name + id: repo-basename + shell: bash + run: | + echo "value=`basename ${{ github.repository }}`" >> $GITHUB_OUTPUT + - name: Get Token from Github App + uses: tibdex/github-app-token@v2 + id: generate-token + with: + app_id: ${{ secrets.GH_CI_APP_ID }} + private_key: ${{ secrets.GH_CI_APP_PRIVATE_KEY }} + repositories: >- + [${{ toJson(steps.repo-basename.outputs.value) }}] + - name: Update locks if needed + uses: hypertrace/github-actions/raise-lock-pr@main + with: + token: ${{ steps.generate-token.outputs.token }} \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index e1c69906..e44512e4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,32 +1,18 @@ plugins { - id("org.hypertrace.repository-plugin") version "0.4.2" - id("org.hypertrace.ci-utils-plugin") version "0.3.2" - id("org.hypertrace.jacoco-report-plugin") version "0.2.1" apply false - id("org.hypertrace.docker-java-application-plugin") version "0.9.9" apply false - id("org.hypertrace.docker-publish-plugin") version "0.9.9" apply false - id("org.hypertrace.code-style-plugin") version "1.2.0" apply false - id("org.owasp.dependencycheck") version "8.2.1" + alias(commonLibs.plugins.hypertrace.ciutils) + alias(commonLibs.plugins.hypertrace.codestyle) apply false + alias(commonLibs.plugins.owasp.dependencycheck) } subprojects { group = "org.hypertrace.core.graphql" pluginManager.withPlugin("java") { - apply(plugin = "org.hypertrace.code-style-plugin") + apply(plugin = commonLibs.plugins.hypertrace.codestyle.get().pluginId) configure { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } } - - pluginManager.withPlugin("java-library") { - dependencies { - "api"(platform(project(":hypertrace-core-graphql-platform"))) - "annotationProcessor"(platform(project(":hypertrace-core-graphql-platform"))) - "testAnnotationProcessor"(platform(project(":hypertrace-core-graphql-platform"))) - "testImplementation"(platform(project(":hypertrace-core-graphql-test-platform"))) - "compileOnly"(platform(project(":hypertrace-core-graphql-platform"))) - } - } } dependencyCheck { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 00000000..49706fcb --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,5 @@ + +[libraries] +graphql-annotations = { module = "io.github.graphql-java:graphql-java-annotations", version = "9.1" } +graphql-servlet = { module = "com.graphql-java-kickstart:graphql-java-servlet", version = "14.0.0" } +opentelemetry-proto = { module = "io.opentelemetry:opentelemetry-proto", version = "1.1.0-alpha" } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 7454180f2ae8848c63b8b4dea2cb829da983f2fa..7f93135c49b765f8051ef9d0a6055ff8e46073d8 100644 GIT binary patch delta 44391 zcmZ6yLx3hgvn<-SZQC}cZQHi({-$l)wr$(CHEo;o=A82`{=2DMR4r-|nHiN46~6#_ zeh&(+C<6+HmXMF0fP)H*mcZcjZ^3=oh$W)d?aE5H|b1^-8%?(_I@L}XSOLppo7krfU)U>F)Y_Ie$H93eGnIXF@G zDvF-uJbQ^+-qK12GskrS*mY5evp|HS9e8sQ*v_iJ2eI=tH~GcKqp{j)-5$_)e7^hl z`_*?2QPAtw4~Qe`8AiYS(0RL9cqHoh!MLMabU;Q;Rnie$A5gk~0%QMjgzn$145D9h zxZ)W@*!Fg>4PK|BM2UQP=k4_df!=n=0p3=nc^tS`ekkYJWcrEG(XGbdpyC9%%aG>r zb}uiuTXHDhtrODkgVwDv@Tpoo@TtbO4+iXE^ zA<2nfAKITD^h?_=T=RJKx-Iw8VqUQ8zX zt3h_@CLFoVShYhV&=#+Rdfi+n|;%QSAS*LTn1;A)Gc1XYEXjL|KNtANUf!f?eVvm3* zW0vM6Mtq2uSW5wW&SwHwYM1n8(|w1CX*?lXEGR!5x|GTwhhmu-P|Z)6()>g0LWj-y zOdOD+Z_1Cq;ex$8%Ni7V$pOA+hH@q%GIC=sI=CB4EgLqNGhLl>K%(jNvux%ziK&ju z01$c{(}JiaZKO_TyGjl6gfUc^*jmd{QbKNAp!Mbn$#)qfv5u%?>x8#AdfHtq~fkDH9_H?~#Hr-Sw(ZkE{yy z$6IzpTeIPcV#SF)g3Dpj!M1)A@c;D}6W{?%ajnY(FCw(8jcI3+3C9^*ug>;`B&dAX z9!hvbIm}J2=ud;sY8ycRS0cyejoQET;Pfpd(7^f)-G7EIQ-0Q-pM8+X`VHQ{YTpCL zKTgn+E8^6eD~1`~iBDmGko^l9uzH92m7+JKW*A+mSHACn^Aih@g#1x4tkAe02fQQ2 zVRpJ)-2JwXYc5e152QAgqWGIQg$fcwFz&NXt-`^%=rt{{)(JS00;U(Nu*{R`uVh)6jE5esH(fLUw0p4Pq2)TEz8U&xPOH>O`wsa6p!q8LP3Crb*U0|Y8)6)2mt z;+`}|^Q~FF$0qHt5pa$nP$*DnW%Q^lS;@6qF_1P4PP6nZyExAE7jmw>nhzO8MxRx1 z*l^`ACBE2Jp1i5c%TZFCZYG9mSVw1rpUnCh)~0_yu^qPw4quQ@gdKn{#Co(3*9EClTgh42^%qU=fA+f8$4 z&smgY7+WxRDObb(rs0NYd_D-L)J)dD;=ZI?z#%4n(092wFZ)XVTqE0P2 zn|K%)tDd9f&#!CO%StA0k~8cZ#M-?yGq#$LN~LS>cJjwX=TFqMnxYrl85r5rBj2_L zU7%Yj=SDjc7HQd+6wCg0l`dIk6$M3X8g)7puBc3wVJXv^=h;z@ZZNaU=b{X`#rY0& zU~&rlNVm)9CGI7b0eDO}Das^oYO}hayFkesiyZq!*H!J7u-U}YAN0G)_O!l9Q@JS^ zTVp*;-wK0BLm%Urb|_FH{C|As@xXdGjB&r8c~Q)im~ znV1Sxu~jXxU3WBBDv(ma_(PiHmX9V~V#oSP;KrgB7-?Z71(+){;DRmtQ&=|YIwsHf zR{coE$-OoMpQJ!Qllx5?tnqqH;~6I|`)KN&tWkTnA{SN<^S~(i8&T*=f)NbCkrPpE z+aRTFt^IatYt4~xW@~M5&Ov~@oq(h`q%W}VWacQ{qbH2+4j@c_$4o_U)H!#K0DjdVa z{vuqfo)_gG35o@tUxHWdc_i)-3{!?{cA6vs0Xw~q?Y{Zd+&lrTPFEd$ULe=6`6Bze zWPqyGT_@KZ7p^s;-`DNYQVSvS-ZB@hu|}X%HK8FGh6^iA$EmDJgR&`8>3DiiTAZlD z7rWDUEAcnjo)jL>#ofSjg)ckJ7Z4O+keEpe{C)_3*9O+g3_nrJRUJ*rB?=VP1WKA9 z5VY5DAlx^ND?!iWjijWCeS=DcBFFkKE4W%a}cMr)Guj06EjOUl~A zPBPiUOxoBZYohbf1^c%X0Z0M<7YG9k{wn|i#UTEjLpZ=r+6`Yo_&>aMID*(DsV71S zfVYl8MTLGFj(!gAEd)ka{@Xc0c!31^M`uzSbCO}henjJr+811wt(S%mW+P+c@$ogS4hY4QrT~0_0>>Cd8#x6@VlW7J`vB{>otA9~g-e|4 z#wl9*Zod}{8j*{@IhvI%y>3~UXmmaYuo$DuW-)H#MV>iRwIJo^qO!WGTv0ye)L6Dcd|(<)Lna<>S4&PMdZJsGiprGzc%0c04`Jkdf*9+GAGPIm$dSZ(e7oQOpK?Ddu3U=T9&3*q9n+E-SL)JRvPLpWy}0;Z&X!lil79 z!}sCbX{Jy-DJ+v_O6ljbB@QO3--!G8koru`MZj#EErr1~hSSC}@=QSy+Kz<+7oa`M zEQ#G?X_`WY;RB{gZ4C_=%FQOQ7BQ$^?Nm5Qm%NK{mchTtOu6uD2)k_yVY zO^P+vQmQ)ut-8Yvl75$xmJV^3>=uf#Cvs)0hdEUhw=0n^L+}1^$G1}bB@nND3>3~d zs;&!&Jt_X*)2FD{k?L-a5jWr;)Qk3^FK%o;A_sAfA%h8e%ROa1u=s4PQ1~(hxidpU z82gkNd9J2$uVAAI2muuQg54y%c@h%{fx%p9+Gea4udb23$ad+omW^kPIa%jUB z6g9eNj$pvsB-sRs9D(1$zl#PanS5kSmx|H3wj*=##rKHv*L5?rX#MviNhSBEwL_}k zMrdSjhQD95u)f}*c~=nKv{sbeeB7T-(Z$--l$WuQv-R`w{Z08> zYnv_KWce44$qre}B^8dO@nSz39sUxJITj0go&IT|wsY_dlj?)%Or?~*8^EsWkZ09| z0oUElYR)2n*lh|q7La9RO1JCRJsq$6Pzg3iJv3?Vx09;y)+v)}LS8qx!;%)eC}Og> z=ZFKh!CU96BjA0>o2z)yh}5d<>{VoxWPKfn7lBPi99Hy6ed(J6&}`H2WB4vjC;(JH zW%eDVPKnKEKbMeN!yehd0iYRdXgXTOLJ1T^k$B9pKQf(JY3M&xhqNJ`!!+;3nj2Q$ zeT;sv6{_!J5@TuMro!5fJg;QuAvaf>amp`45t~8=G@m)lMtX0{ zd$BAZGnCQI6NJ>^HJZ*s3yyGxeCfU`JW0D>3x`(V37U(Ir_bAS0VD9!tg-|Zz}OVA z&M$CH5)SYmzDEivM$Omah@Ex9*@Q!5@-aVzI24;3fMbU%E(TD%>m(z>U25-hDJv}pKG^|e> zPq52BkL8O64JfXU2KZCX6AGVNs_SbXszjxb;A)Z&&TGTP&{2Yp63qrjhcyQklD>jY zScpBsqRqrGg0%H92(?LoQ=ylK5gBNpK1T@+`V}o6n3Hy13Y2ssRn`#K zEx+K)Q}OdHn_bqC5A@FV4V;<&`yTQ?n-flF!q+z_5Re-z5D;Hdeg#>Q`yno1MEz2E zOC9MamYyq?4&?{}Wpj~d8SD-mR4Ry(8agewn2W0hRXb_dw4fcKH96sgqHbQ|OsAOj zIzIXQ#DLc?OhB4i@3;+Tm~)gGz4fLzip0V7z%sagOy#(3hSl6x z%Tee8hw8OdSxl4Ksj{S^U6ZNJe(AQdKA{2sU2DzmN-MFcQ6;{jZ>*X3q7G0SLcVQ2 zKQV8`Dpqrmu;3yE%bM}lYP+d8!I2vDQcM%OjSg2#1>b73M&Pa>{V;ScdgU4 z*|Jcz!Hcx1+gKMBBx!G=nl_gaN3xaUSH2LH@nVD$FHvn)nqd-bsV(ilr5mm5b@iUj zQ|N3hy-QqhT343hq^K^mR*I9a(P!L;?wVyWy{T1^lwUSV?9IA9MUZ(M5X`sEH^@C- zzV+WZ;;MzD#vL_ItRMq|k*)1sV?Wm4+wsIgch(X$c8RBXJ5GIgC_}xN>6k=6JI07G zXG%+yX2XN=t`{@Vw`sZJn8Ay<#+>4ay-4IoPCj8;@1V!ZV5Ha0!#(dS_JIXV#y!0| z9jyZDy;64UZr#=_ti+2kV0U)Y5lWI&Ii{aeHJ1Ul~4@g>^wB>zhS zpDz2WWr_4re$51ROwD-xtcv9Mv)oi|=}DY4Gq-5Wts?G~@94vNb45EcGJpyWAEeS6 zeaF0g9bsuEIn4vGB^Cz70y1DK2-V6RK4%EowfACt!k(P_61c-yR-lof$X&KvT_q}0 z3ONfo#_FcnDdD}1{_}H3QS->SuXpp8@dAaiArk6Yo^;u{K~WOTLHqpxwFM8(Vetmz z`kRfm;VtfNH&t*@*H(P6<;JG+4mLK8wLb!3YSw}ch2IL5UR+El15%@X?R*kJa| z=mr=hN)Bjz!zrv+RA8fg1n&1EB*JA-8KahW zp0O(*A-@Xnj~@tORAFnsBNgYV!a+B3$Fh?#%g9+xLNC5@I^&^8?At<#?)%a%gPcpV zxrFh$kMHC&O=IAXF>9RkGnZk!Wgn#WzNRu5}!)YYum@)e-$NV3Ij_M=J4B zM)7mTaIy|N4X#iGDpb%9ISXuR2VGFGxKB79I%UHG5KsIC`OiY}r}&q&Oj1>{7NChx zuUw}Bys{9=7=4ojwi`=Dc$tDiE;2LuPQWgVr~QhfN$1euUhwV^mO=n4?^|xv)51d~ zNX+I?vB7Q3=Ao>-1 zI_3g7Xa(*w(5RLk^xoQa6a6CI1K>BAylE8oDWNOnH=C&br7jLfD@PEajub(Z*uaOH zqd8$X52p~Od(Wi`XHN?iZ2iF(35MQn8D_l?k9PYxc=^6adPR-+(RqnmOHx3iLWK(_ z&&a)ib%}e8>Oab#2MNk3#zDclg0T`jq!~I8yUGfTWpJC=*vltiZm6nq1{m&sz4?vE zx{%h{bCVmcznwm9{)zBj~ z@F|*d8%(-_%2<-Bo@?1w5~X|WG&6$1hq-l!71^iKkvNZICH} zmF^fGxAuUnx}}-LWTi_iIZ2*;yEsRPwY@!LYq%*{{t2IfR-o+1L%;Dy;cT{8vwWp* zaJP65-1!uMtR%UGE`&g5L8d^BlL2~V4LM0|$X6BPqgmjCS_S~ImZE4x6C9j{3C-xm z#x9yXE>}McL8^{@gP$0XmBGcz39Li7yegrSBA`0|fC8gk5twK={Gnad+*0NKKJvG} zk;B)))ob%rdJ|F&wCG`LpTZxa#s4QC95^y5A zF(Q&328PIk*p=b-YtRrZG?s(TDqI}d6>@&UH zK%A5y^&a*sv5hdH0Y2_w)C8GtHW?KCY^2W9Q+Tk>>yxwl+Y~%^5Expa>5LV{pZ355 zB$E9KCw1d;GgK;;UnaSR8|~wY1t7O`BWoR7#0x^tJVjuMUEd<~d2lPYgxDane; zJhXhfYAex}c05^!3H6BqX5SH7&M2~teoxo%JKTaKfmD*jEVinnGx$_;)1x2_8f0d~ zZ|1;4L!#Lt>-39jrIkvqOh;c!^vkrn^Y{hV z5d-VcRHE->nk)vT%*&Uk;57qi_!pA#_fR2ren|eDt!89(1Z>fPAO+ZyXFg;9aky^nN zAS5tFv&azE7zAF!gE9v!>t*DbsFF7Dx|Hm?>W98!b%n>xdTjK%yz>0m zuC$6et6Rt8dg17JBkvxh>$Na2%~8@&B&^~>Wa#E6I-RGI`=Z`11`C?M;HK4<-5-5v z1_goE6T6P;Y*Y{C2N0MZNE$B1MN{8NwYd{|q{#68E-Zmi8|Vdoe)Y&4pc&_eA6r=z z%3Dt1N@5>}}uqLnLq9sRti z`!K~C&T|e(kBNQ(#K>e)C-**rcWY-k{;?oVcr`gnQt^^`xtyxf>zO1)&4Mgwfjuqu zECs{0O=${19uR=PWDmUNLhItu#jgVZ;atTOEfbC!a~soI>~!YVJIZ0TlL2>=7x+q+ zEquiZ$eJyKgaIq}?8;iaty^_Fr$5F*Y?2EsX7m(RFIgD(6J0em&g>0#HpXRU>Cn%i z%&rAiCW5y{5R@7(K9_sXhddw3r$pKC2opBHZLV3q1Gon*Imzd~=;wf&pCC&PuZC48 z$cnA%)7n~ff8;MRrcr%U(TJdXNNKA%6+M|>r0mLGFJ@Jw2pi(p$kY=U;Z%U4mgG=D zo=d1=&&U)Vl1LY(DQ*Ig3z(C|a7U41Ibww(Ibw)WaukLi9&=;!=G&1_h++$5@q|ja zV!aN*0M^4*nq=~Y>e+*K!%d58(Fm>}yOI3pyODnM_v%-66>Y`Kf|Bf5yChu`9Yqh<<+LQyU7y4doDdr|Wu zr!aK>w77#R)?gqW`9sPhfd&0|{701YsuN^H^;>S__76~$x#jjt0lAtdb z(87_KL5-rxn-w9Ket!6kCzkLlVZSYuk?{qkmAKGvV4XnRCbp`DAf7YDEZ_?9UH#7~ z;MZj6&~4%9o)*$0`d2)G#Zmi)&J|pabWj5mey&)^5UY@cgvSw>|1iRI(Fi>Vp^=k< z$P!m-_WKL1f!sCN2-TE_N@iVc7(U7B2kV}{)YJoAw_Pys@K`#nzyQs?f-OdxQ8?h> z_ZuRAi@=D~y+Jm{-yySmYys52W2c8M0K^We0+(c#_AnCt$f@81^+~PSWkwbwF9eUH zG9dxFU!E)Iwh8suFq7m@{xO-firphKDfx+?T1f3X#mS2Z&dmi4R{m!s!|zfByvN-0 zH!fz03gQNe0xYeNC!|Na`M#!4J|{y}pY=hu$@~5aw{r_u14!bex@-$SG?^M?bdgM3&=^?Q&>_&8|(AH z-C0G)rU@6!Ks6JLhZp^&h&n>ZEYCJz7^r}`I-Plwy6s+mKZ0rSWNaxW$rpcn2>Uz4J`^YW0_4EFD$@yE0?oyJdjx<6zvA9sV%(d82FGr5H0&PqduL&-* z=~^o`{0L&`&c(og08nBx$sXrJ5p*vKrBb`T?IxFIRC_qCT|wcs!Xcy6s;2F9;l@yj zE|VUxH%vUvBGzFCJ=HZ;AAboMZ(tE#!=*N9A&FhfagkN(JHctk!>#4i+TJr;Qu1`i z^rxqRYA3-W^-{YKgXnfbTXV(umafxVnfjdPZ@pC_MbAEg7+^we_W@tOv7K#6mDvdp5uOJI9D3h?v};qUgY>^W9KxJEZ#_nkbw)1^OUb?1wA&uDQiupks*|oTZh%JF=)_7 zEY|wpVxXr^1Au<|=&^=jroBBBW?B5QKDeea2O^PH4_+*aIHv6U1?Z_A1EQV0msYz< zrjzZ4HnCToh4QRHlkq2K@z7m;Det<4q~cPc#L)0eq#U@Um-J?+?=l!$#024c%EGQ< z@o_v;0`fTsh;;wrM3Q!|Fd zkXH61cQZNhDfLJh9Fyi-fF&yENCidnEq=R#00Sykt78zcycCZVaw4NKAJ`r=sw@rD z3D#|}zx@>RMj(X_x49#?DE*svcp;v_w?kg-_68=|x(1;ISST<9eCA*Z(!+1MBB7y| zes|u)1W`NmR!-YNhwjAM!%TyP;@ga(%m6xLwrrN@^pC(4W{~G^nj@5REpSQ7pZ|vg z4!9%7RsO^CFhr738f8*{HAE8QF-FpC0W?v&(_uSVGKcOYd2%wv4Y{2(b&n%8x)^!^ z5x5wQL)LK8YXLo=zX$7Z+;X0o#$%1$JKAcTq->zSJrWw8rd0KqeVD1JFyAmvojf%BbzC@bMXa`6DgZU{A{|_gy&-x25V4r z>=bwS(P@`u+%llIMz$?%n3}OG`&2tY0nlNdK-m=tHKNk-9Wi+H4cdD4oj^_1GnnMJ zfO1hvgZ2QgAdl@iSce3=C!N^66~oNFUts&RQrYpIZu^F@A}=Ga{F6x@qq=rZT~SUN zP#n9IzO(>{Q{k~U)*R`M)zMUJC^vzgf^!MTsP4X#Z7_#kqivz_PdBPh)2ZAsPv;{z z_3tSU@Ghg~wtV@cu&xps0jQ{n?1D2HaLLWEnsZuqM(oT+!12AnsaqlFz6WD`6rcK< zGEM2K=v=Ni=+ZB=q%#H5c>E+qu#z9) z$&#E8Cs0F$Mc9BsSxwQQkxSXFqHhDSuV{rwhZzR*zMArz&@4>mH8G%5hmhWt(TZ4` zb0If*E09TMVXgsn$s<{H#WznkgbZ-im;^{= zRs8_XjSk`6BG!l(rOl?nEOEUO#)u7ad&>f?d+OHKi2>+HW=;5=AtF10bv`LCG{Qx3 zsx!2!m(a; zZqj$@drgukG+eT_cMo&PR~wXJZgd1h+?!A}YgL>)c(;!NE}1RW#+Z8|XZ-fahC4DZ zTV(9w+H9Man`=;vJUW&DC`R_qbDTXHK?0L-&aAph`8FTK2qaSvhQUhYdG=fers)K> zcQC!8EjQYOG#Wnrgb#@`Iqnt6o~cU=5D0??&o{6bqMx=X`BvqT>CYfObvP^ z>t4n$t%J;i<9s%D*#kTHtoDieuTZ)OoW4AV_ha~juj=SIHs4qXGoGgnnQ5mTt}ZdTO8og z^;Vr?%PKvo&3UpbjSF*Dll_S8m~U-0`vPK1pAOYdVFUtOuA3mg5D9x=hx|Rp;<%Y> zHDZcw1crI>m#mo4l6+q(j6dQFP}=|A*~u!n>Pg|bWXV_9yG0!sz>XkGWEuIgrqgK7sl+=)9R$UcAM3m@%WE~d= zOt4Kb%f${>7mL~KjE?KPK0yFz`bZO-w~-}TDVwPxiaB?P6+EX=W%@#XA(^OH_y*cd z#5y-RqAH(hxKrOiyw2_)KwihWW1CTJNbfbrAM8YZ+GhT=Wbmz)A+gX2VGG@|vi4b| zI&ZhA0*4Lvnv|SBr6+wyS+V3aUhFs3E_)d6$I)Rr?)~|7lYw?vECwC5CmQ$!U>G}@ zQ@MLgxB_*&sah_!O&9E0+ci-r4jqJ={y(My?D1Bb2e7=B++UY400-q9+7RP5ai29| z{m-Y+HZpwlI4tFYwO;l6^n>S+4}m-bv03qV7SezB*9!d-d%*JctT6`{>Sf^+IbRth zFI#AFvYXkuw^^0Zp))E6HPS9VJCjhCKmZlyTUZFAV`fZqn>GnBdZW8}#NVpW>5VPZ zTy}yjf{PBUGf^D@poqLHcVjpHz1QGutI_tHbVFnJ|A9NN!5n^TAv*TQ@~t1D4;^60 zqW3SRoYSG7szKec2ga{0x4=1H_Y!3i7wm)kc16dboJnlX#$wKaKF0;(S8e1Nk6hTW zz#}o2y(YC!ei?W%y~vl10;P-KQb{nUHr2!tIVQ9zGs0Q}098b=$XXZ13-j2K(x6J> zYBKo~<;vg@y~7vv<=f+tkWaI{W8*{4_nI7^6`n4SFr18$l@<3JcODnCIgt`@o>d8F zc-AcvqN3iCkQgpfgP@KAKkXddY)XDp#-rF3SD$^kCwEJ`9f545)8Gql@FvxcyB6U) z^C6)hE&Ngy+fD#Q)+Rs=H&bbknm{mLKG!mzq&7c7(H0V#BoROMN7H`x(+v^lEl}Wi zM*L5J$JV_*r2gYnp5XsKry>C8DWD3W@w0Ya4>pEON~kse)+{I)SN;V>O&tGkj9Zz$ z9DlZ@$YJKRLEiOmjvGL^=X)N-7;kC(w6bR!?cq)vDQ4q)wjIaqa@$eH`gyYT83&YF zUs*)h#N*mwIc}4_RA8*nfXGfaZr4~EDh5v;dK`Mac|Z}A$auw4j_v^1GsddisC{mB zYqofw8_5;PILKT>nytOF!}dtD_B4cq%g8yJf7$jv+p=#u#K(s<2+o}|RMlI1ppAtB ziE_MTpL58RGq~bS-Eg!`s+SntNt?-q7Oel;eomQ$(05O-d04U!{@3x9db9u^ z1RWZgiT6vf(Cxl_?2k+LC3GX1i~4&?j+%M*>AXWb*STJ)lBdqK2i#Q?o!HcK>oy`p zY^HdY`e=0cIILE0=j!nO%Fcij2zSdo%^gnTMo3}zY!;?aIDp89$1a@BU$1~#w5Snd ztR8v#(0`6#Fg=tp=d1&vC)=}9xo4grF>enZEQqs|%6(*;#Jl!Xdmg`pEU3si*8|s)eyD!e|a4ZU0XK@bD8!I{vDJ>tLcqI%z z88eHGVXUwf+#;)!PVj{`o&(K|`^o=;-56!Qpl`?BakKG-U%`ow$Ex%ag2N?oQXiZP zWS0IW8SMl8Pvm+|F~WlVLvA}55D?3ME0c9~r~o~OMME@yd1^FRm)|TqU&iAcShy=Y z*wGXya$cn$X8+Ss@Sw>2GVUdDB)bW!HyJ=74rB5r+7%fNr!;^IblfTk3d~_%>%tqqKSz zgXzcanz+rkuV}?jLbib$a7^p{-p8kkx*0=l?@T^AQ)u;XxAk=gc6zqQb&-WZ0V9Wu z4bNu47WYM7M^Lz9{nsY+%E*wOO)4Jv923UEzAB(6MGVe71W*I_WHvBQ3v_@X0YK0( z&f5J3KEmaNu=O{0O`IHW$Ws8a)c{UP$;U!XS*IYgt7TzxYfAn=c)Wzqd`>r~42;vl%2pPKHWN}2$VBTkw2>Xnq-Ib!mohk)I%3Wp zHcP?ki`cT|j6dYu(qy))T_5FdB}QcLj{k=JPo&&x4tMYTLyFBm{Xp=)krMTXAc?q< z8@dPA0G88!`wX(lq%jZV|1$a`z3||~pa22U&?GsIp(o`RASdy)zyNesQvPY)=M!^` zS*VoArpQ|1*PhS;>BCw%;7r5v{lo)WP?6uZwCZG}6J(+F!M`@BWeVgpvoMsYn&}3l z9HE)aGL&J=@>K?#&C)YiWTs?|7J-FR-*5a9={8_Ez6(5VyI!+h=J=;P=KQ>m)*m5( zWYfOAEQiW2?lZi<>Hrbmcr14ssP=d)_kg$U<2y`3Nl%*9K3s199Yg##O74ynnI+4nU23>O>vshvmHIH0vw_Xhls+Fpq zM#UaR7So1^6+kk*jOcn&(;0Y6(~5H=v4zhGUP}uOYT9^5rAMwtDh=pLrZVM}tQNzm z&j|>PNSb61HSMu*UA1ab6j+&F)?k(C1Aw zC{Cq*;Vy2J7M~d0MggZdhwR(;IUeA%} zG7ROYZ-7*LI9-hLvv5cebfvD5UF8Noq%!q`4OLSoIlt$@5}8#>t~7)C<7yo5lKul| z@IiX?SXUH8?P0qS(1W+hU*$tDlMn;(;Y}MMIa2tc#Wm`_k` zE*}g{Y$$dWmJtw{!tP=wRGJC(GmD1n?i{>61OPJx*kIv=nU(>1ca_0yS(i@lc7nM( zPK!_l2{?K?iO3y!FLj!MoLiS4c(g8L~#S`iuE+w6@a=2G#FkJWuO&$(ExBRWCJd{w8y@ZAoI${kn}M z3jq00{USqiB^)*Q?;141b>~!dE+ef0>~DK#}{p5LCyRS#$MMr)wVWP_Z(kh z7R>~>WPIcZj*SIVZ>}Qgj+gSCYQ15nzF~7>N)`Za_+^k~eWQRyI^wzdq0DWLY&viO`BIWbu zJoLD^#g;fn`P?Lb(O*&$*gWEy&}OVfY0F(KXqNpyXeH3vXwV^7;`l%t#yqguozQoa zTj!JqjqteCqC#1@(Ivi%KJXu8=76$Fl)2E@KjtUd3w{{daBkcJ1$GLol9J`ol|t}CfFNi5^c)7^9SttQx z)p+@LyRY~%1o4opt;+Z@5IpECtYp&P7(dW`O~=F?azHW!skgA&uFM3H??*MQc@p7* zi&uNUY{sSnjR1#F^sjj}DfgF))PLgKY{NIw-0$j@Ndx3K?9d+}jejJ$me1oLjqR?) z-6+Wi6ZIbQi3RKLY5`yKi4xw_nLHSDUaH`&HqN%rT%^7D)h(uNwynn!4_F>-T989W z(QD~@by#%o4bp!SHk4N4Dbc=@s`(cq=?l$eh=x0xO;9Jl2xy4@;GVrnv5uE`A z<@lBtPn`Fvh+A?e(ouO-VL!`>WvYv6^f19g3GIUO%gO7lLjai}u*B9UP9C;y4zZ)3 znE}r#fb>SPGc4!6xJYj6F}BxgJU`7n510)E)dI7x2^k*ZyiI_jj}6iEwP;Yxb0 zxe{+U!-00EmSD-3jmi)-t4MBBu?#g!spa)ojm=hFIfBwnij8tle{Mr{%JL zQR>Kdpnt?i4`6BTLSs0h_MbDJbd3H=zsuigOL=-$c!;{<*Ndu}b3wpN1Ne-|X0-#Qiu&k-dI5Cs%hjpR zYrv+e4J6MT z``4=H!7yC!7c55+okOE6KQYhm_4);s`I%HbnB?+opdjmLswTCV5)=pW*uhpc*&aA_ zP*{AM0$8{j(pegRTv_aZUSIU{=%NkVCw2=N?ilPV#5VVgSsWYy;6 zaU~g_R@l^1=CdZBC8)hXM+!vVkCIkQxhtu!K(?(rtt#+eWXWHnH==8M3A?wG?^X^a zLyX4-Uy>XYgN9j89&@BpeLL%*HD_nizchlo0~qEkAQWWS78iPH%2%l+=e(cIghw`# zf0B5R6MBA;dcB-;BVtw|g!Dpar4vwa#&>QYPDvV^@gc`vg9IV#GCR z1d!V+&~;>q;5V!u4=hZ1@W)>MGq?guZ7pDnLl z*G-(${bk!nYc3%84M|zCnbwo!h-x3Y55RbFaij%w7d?J&eS9PQcS>55tV zhLkKYoiVGje3UM|30eTZRiP#(m~m~zU|J-WhEnW-yhl1EG~XL}`TW|6(^HKW2Dt16 z;=ZFDU5M+8a88FN@{e!)`;(-v>BC&!iW`J0Ep5gax-7R7SJ17|?pynfMX^roP^llV zPYze-oc6x0ht(jG`_uso)5YWr8R~AL8f1*G*QP_TUtb4HdEGBn{L~@k>x?<7>gAiu z5KTUyjuO2Db|UaP-=T+PaPC9}3y?a{XbzpbyPt83_`@F}YmsCXXwD(Zta@`t2C+13tQMzS-M6kbv#vJjH;9&~C-8BE)~6V$ zYXI&OAr%ls6$pztvP>1S1SBX~rZhlB65^I%5p$zv6%!a~1%=xVmn_DX>qew+N4N7u zB6tPf&K0QmhteLi+orTR#e6|;9joXvhB*fLhGZRM*-t1zR~r9?hAYx1_yQ6nDPxh>0#4&~9#k38I)f(nGD3yLjd6ver)Y#f!v6{JH!~#0xGzS1q{7?V zT>}j*Fb*%q-q*{Wji4#D+tMBdUGptb6}o4+`X|(Ke~!<&P5DV7t7=_XZ~iKF60(B1 znIS+KscL})(V(-WxF1aKj0rNFN1Q-Ep;#I)Dmmg^v&Ptw1MY8qy&cj0+A|jlp7?_@ z<3xl8vrZph`8uhCyi4m{>HSL^mZxMrfg#(EiV<@XFu4nTxsYp*;KbqrI6xV(Ju?&v zxO@AHNv&PyjG~E`_6|;CrJM~;oP&+H*JCo^RbGuToZ2Ei`MLt`xGfm}tfrLw_7eQF zfU%RVuti_)3`ntZQAPejf$&m!M!~q}GOkQX4?!y;PF8H7qBdm?p(7^4icRJ-&=;PR zUXd~Es+cbud}g9}>)z`M^JX0)_tJ&;ZTrMIJ0od@!Kci&ggxG^Sqkk%DoSRou zrJDI^ZK}{srHH*8`Oeg$b9XfFgRH@pJB+KL(tD!gLuCZW(LukB?J_!1u7hu8XTFsa;4J#|NGyrI*G?=a=( zDX}}y^+2$j^m>nrf7xcjbiz1F3-jE5Vd9yx2w&^N`Og6r{U?q&!qS7a&FF;!UnWuhu=yO4w8n!KGGul+z--3IYZ zGXvhb!OZudK~p;a22k(>b__2Mab-YxqnWVvBFyp2lXmztfMjFl^iLlP{rhOu^~GdP z^#ovFp}ZFDa1XBuyYAT0oT=ARxy2U+)~;Nff4y&P*_|ZQHhfv2EM7I+)nDZA>OMC$^o;#Ky$Q&FlqokC zCwi^9zkzTA#j8FNy}8P!Mh0I-t}mfG5$8O{P`;Ngr4pp4=^WFz#%zX6mW0$EtJ%Zf zT!?c2Jsl>8hX@pXZaaN28qjBJlvHt?PtI=fnHCH-H>*iyXu6P{0r#2LJ=|M$QsJb* zRlV=T#06|**x^bE$@j;Uh4$vW+oY2;?+R*ToqyfaYW)EN`k;Kr=Kr!z6xU(y)m6s` zNU$>d(;n6iX+&R>^1Z~N_{A~Ms9hH@taDSAobNI< zvIl~@(^}~+-Ue)qtU#ih8Fuejbmxb>UIxYycCW_FQV0?v`uaeCg-xwk-`^ODVzUwsoX$_qIJH2{%Ok$D=R6e^$YM z>W#obeR}__r%Ay+huFFK|8N2tFU))e`>y~DT%`Y#q&8!8bG5Q%1p9BVA%Ok=^V-VZ z)y&!6=)b@FZ>tmG6p3udC;1)mDLG>Ozx}9a|$gKvNSWXF>_`xu{CmW zNm13&z*R$g4+S@e0x_xp4G=Wq-hr~~*xtf21x@M7HKo)XLM38)VUC&E?kuR&*#Ue{ zdwE1aZ<;_kBDGA~^F^F<+ca5;RSY79P0sk%%h~06%hTzl!N(Uzh;7rExN+?0{m6(a zjM|L!$sLeyvM|i@z137deAl#&=8QWhJ>AI*y5FgWKrQ@X(AOUMnNjix4D5G`!-F&(YmHhwEMo{K!yBBqN*E8ccqbDSu5Q7iwtvaG}6j{&uZ#VAJL z7+^LKDa#mPRSeR$;apDPRKfOOg$#)!(Jc;j#>{(853>QzkQ4?g-I(B={XyhfRtuix zsXer}-dRPQZVb6&kz6ugv{Dz1EHdach7hI`OE$*ES#&51wQ_{x8gJK5gKI3%nj*e) zs9%MI`db$Lh=PRM9O(QI)NK7HZ4NnX3-!;Nd=`0JI`^c=Br>kDR% z=7Tdkn8pEcI4%vE;3^1RboVb8Z~3LH$b3|VZ0&3_ko~%umt0C`VOlPlP=ImxzR@w@ z-3$dEO1<}2Tkl-y+GMD>FjY|vY^iFhz}vlNLL-Cj+5wl3?zVV{j=hP=hNSIlGANO94ppO_cqfQGU*%dMW;_d zQqPVmY|#`}fi+uERkjyPXL9mNQF}`XYp>w{EWayh5A_Lumfx{Ii5h|b8zyKt8#y|f zIg47kxH?-If8vmXy_z#%3v#gkgo#hU`7eCPQL+0ZD3Sb|8Fh8yFvp`vNJ{dX1Na9S zhjCDYGSku6vKOwLeDucl8a&$Up`WX+V96367Y9GN$)C&G`nJY<J8*Pa&hk;{6Yc@GQ_qJ(WkgzoGQ0`@oc9*-MUCJH}F zmDl@OR_(K`Jh3o7oUS5?Ez-9xsOS;J^qR>NYH86e2~=1nbaQDCOMar4*Ti1dg*965 zL)t>VI7bb)81Ey~00CPSwp`^{u8YGa)y#Zv+in1Jv|jYB-M)|~TYtv5Tx(wP!N}Vv zlPtnYVVmV@>P&45BZ8GCYROGLyWBs}hN7plg7>ATCWXkPDf6 z1d(N1n{(uXM|2)(SBLC2$f908fm@5apxksKyA01T!ZS6ZA?Ta>K1~P%Dg_gEi`F2T zz0zO0Qm3pf@QZj(uz#o!QPtRu%0ISCE>~MGebP_e^uPH3FDkL8ey*ZDiRr5(Afz)^ z^rLx(EMB`F-dI?TEFLy0p8+W=f?uxGd3e_Io8V9=yd>S@7XcWjGtqA%n0gZ%BiSx) z7hSiv%MXNKa*YLhS?p`}+yi)9PfgZG_zC3#Q!LgjA9VAVtn;8e!@MfNYlqj$Ip?p1 zRy~~KndifAMa?PaPFQj&`8nr80HMb*EHgw_EwsqpBCeJJOG~rNild~Iq=?4ZC_ax6 z6GysV$GlcKjXnzAXhcb(a@oE1v;s+lX2rKhB~z*n7-n;DMcqHw;C#*>k~6Gn>;Ew( zOGo2r(0q_WgTMJ&qpFcWG*6*AD>km&CrCAR5}j(cDdj%55*mN+Aoi_>0c@wVPt2XI z6B8OYgQvc;)WmfmAzmrw`|S=xoB+w)_}LXdP*)y1DjJEk3nBh7YNpX=TPF>>1lEzW zuEUzxF~-(*bFq8{=cvYUZ&8j z_L*(%!U=VV%S@I}k4lIxOOH9n;mQ~&y>tp)s^1;Jv6Q84v9ncr5H33v(KP5YbJk0p z?ou>6hUg0=YdBru{!gG8bEfozhWPRY?lYl_J_#8GBT4=%8t`AJ5u>i7fvSP_jv$rJ z1gB2|BOIuiPlhBpyQZG68bdXcpGw6sw}voE94&7?mjNx}@Xwxc+V84Hu&*0jTm4+8 zLmg1j(0Is@B7?sEW|Nb#>XX;i^LGC8VN~$r?H#L^`jw0{pg20ImCA@CTn2?FA?V9Q~| z&X;I+fJk-MQjJcl;SZT3wjYT%mJP}c+*qfPBW*=h^Q2wqlGWr)Ha4UITl2(@LMHc= zBU1_Xt8_*ESk384rF^2|*hJ-XqqWsu2gx1pDGu-yULs4I_glwW{xHHPRh!P4)~SyT zf4v}1OpSFe)|z`G(->-HFU5$dJ+ZyWz8qSQ{U)Nx#7f+MEXmS*FR}EN8Z*xNFLi$c z#V}kWrt=gXQYzSe7WNw7d5|^obF~$h@4VBze1>&w64Ti^Q)^OdLvp23#3Y2sc_bFX z@*v*p{AZ6gsPy zJL`By|0O!Gg=)}y~`UB=~V8P|GsNKqrZE##l@bXOhnYxEcB`t7uJ&{*tJ ztLZSMjVrW>M?%0Lz_3)AVmKp$x^z>eLyG|PN7NO#pHe@I4@p9gMO{e-c9AV|Bp5pW zMyNK3VN5ZKu@%uwS)r-u&_g38>=OHUX7A4E$5&N(K-GZD_2F-zOS*>EmMtWqR4-Cd z^~M|0Q0h4U)5^e#FW{>Tqoy=_+E=AL6+PMEgPYh?Y0YjeZCO zmfKNP1Wh{`^kc$w4{D%vt6#xGRyoqVs+=Ofk=(VwbPs?*Z0~<%UxfX)u=68`@QQTc z3f4Z~ehs9hQUZ#>7auU1Y=WV2J6%0`f3LEWs>54M(%3GM$T~x>!FQa%mAOUZ#Hq3y ze5!bMp46aId7)G3_X68p4DvW=OWFb&@%76co-C^yPXB4=HtVX;+becAoVZqsdyg?B zNWeQRFVok~2_5}TrQ0ok-qgZeN`krK@JN({R8hFY-d%I`u9Gb-Fkj%vP$&6yQqS{{ zt?cb%JdIYQVMI?R`&TR3uDjeoYbpKM}V3rF)isSV+jlId+z9ur^!0!+-$miUEr;QZM9 zV5IAYJ##X!`lY`X(LG=fGVsXRs9DJsYa zX=#bjPdr0Xz>VliPJE3qlAdJ>y+0@k>qWDN?tPn(CnY;GO(f_QxeKuAlW*F&?!xJl zChFJC>>qCtZE7Wg_q~hdiQdVzV_|ziM`o4wKTVU}&fZQi^k*a}PIJVTiH~z#BL&|b z`Gs%I>fM<&&l-rEGQVT;?8UwH2t~fg^Bc!)phPzLKz*T#aEBqFKnd0TjmjXIVE*GQ z)bR_eXOwcGqrEfH3o=2r3+xB@nbp^3h{Mfi1EMjZ^sbi#s`sX9@0HALu~&uVp4IZ4U>zK2r~VhuK{(&w1PL zU#>)$a<&sbN23- z)OU+b{1NxbG5+Zq?@o1EZT39gx%-XOkrw(EeVg1}{S00KFj}N{_VI>STsRM93nWj< z-?QkUhEp|2%gu#l2VPK$=8E)bx%zX2oLezvI z8eXPLvsRUpbE`i_-R?)Yc!iWYPIIEe^S!qHfNN!E|4agn087hc^uXK1TZxFfzrN+% zgtQpAVR*Ndd3ds3SkSZBh3Xsp*co52KbEd&G?K{Ebx_-)Vm2C}n=_!CuBPvNO98E_ z@?A6MZ~I}w-}6l9LomYZ+~lWJhc<+Uqr!>QQx3OL9eWmrl#WFYzj=XTY~Di8 z){?Xho~J+beJsvc79wA8j)wTba=0w=VK*VCibi_TWs$0&;q!1cMMis}7_jd)eDjS~ zd;O{{HPKTUscI;J8FMa14?Af;^NNedB?<=|h`r2EMtI+l?~vWYVDQ^arXLcEQg_H( zd(Wi$rDxGyARksLYNdh;l{^gZa)ioprd3O_2=Vj3DUTj*7s+1kcj>#SeDpY^FOXe{ zms;{EI1cMgr@q(3Y65Cp7oLs**(j6{q_Gtn6mGxVGgO2`xfx;j#2SFG?(BE?n1cadeueLk`)Q@4aQC_{X;}n*2L5|#1See zg+%KfM5>M~s)+`@6ia|H0wrUd?Pi?mCgpB5Cu1q+&e|HCY|0s|)Cl>=z6< z@@c-EcQ;P50Vma=iMO|*B_ciZ=2p6L(us>MiFqGT{7m``epuX&m}5C2u3x|&u;{8> zLf0*{9{tQqVzYTdPzZD<@2I4Q&c-`^HARxrqd?CsQo#NokC3c68jU z!Wk&mJhFXRB{R@FCy=FAk^@Nbmn_o&TB1MdM1U;7CTnHYcqhlpvz$_faP=dBtl; zp;Betj&XZ;xlA91zJlH|)OVW1Djy@H-!y25pM`2vq22!Ni8iBhvpKt4xc6k_Jej*+ zE~g2;!R^pVL&h4hNe^g&`FUzo92R;aUeX?eff4R?1~NyVwi*%vm0y%}qjwTB89nx4 zC|q@8@{#(AW8>iNb}|FOYiS(_Pg@K2Q9~Jk%}R<}I54qg+QYG2s#TVj-3Vzh?=~rq zfd)M#9LgPtPr#6Y3$BR$eTM>S-AN?_Da<ku;vfcBuqg@D87w?UC7Nfoc_tJ7csi#cY z(j`$3gPbIXl7cOQ;e3NMW0zCS(j@f_Au3aoFS&n{q0xxrFEeW=k>IbQ)TFLQ4*ZP# zxyfmSYk36BS~oI!VzFZ(@2nqgt+C9wyuM`irF+=qQr7`mk;f}j>gr~_*O0L;ow5Gp z=-j1DMJB2H6bD=f4f!SsCeV4utwRmb)7Z~ztUcO4&l2yr)a#|g%sf;MTWjDh9eo2k z;I7?4p#!TN`od3mitq@5?C3S4PB2oTXCJ5ELrpp;o9y6RO%sWel@~@TvJU<%vulwT zg-k}0{E`C{*g4h4iAOQW&?%p2xI#fcU07REvE_Rzw@axaPKMe@=-DO2Xn*WY@_<^} zsXF8~I)WYSZujvu3!h=*%aV2`FC z5568{6~^@P71qgU$jfJr=I6O=Zx~@Quu57a&y(ETR6^;jt!XHM@VG7U9ljL~q~#e2+!e0;%x|#OUa3ww z7fmdy%WNuJoW;-tRQwJj;neX+PgF~ z&ls>J)a*p(;J<-wN0BHcByHg1Qy#I=Ir0{#h!!SQ>vtW6NjfwAv?F);r#Qx|?r)gUlFw?ydt^-6e zrL8(~rf=f2EPRfHb5;7)e6^wR58LJ**>W{RAoDH?z^Bu;f>3ydVc7*h=H}xW{#H}T z2Xryh{}j;~6Z?#=Hx@d2Dmw3_cF z*oni5=9-zvR^lbl*1jQA9iqeWQzis!BStx-JaMP5+8HsC-;D`y4qK<75#NG6PCF&` zyI6iH9MZb^=ZJ4FKHd{_N7gMp;c)N6;}}$3!0<|Jqan5(D=ViN_E zv%e)5B8S?88d@PlC>TrsUFc+m$7%0+I?hB(FllXV|7@_BU&_VTS@QwQ$?_Ijatmo& zw}s2tO&Av9!-0!qV@+um>u+eqj&)!LLCYKl%SJ8zsxw&MUTi5U>jE53OSfWppLsgg zIqx6Nk1ozmPT-na>`t^W4fm!*3SDT@rL|v{>l`jOk&iZ(Vk@kTY1TJ7j`z0y2^mW0 zeE&m*_Q2c*N=QIPe!Q!dbS-uwvqlK19_Cka@!g2zaIX*xFE-jRiPe%NxNFv&)nr03 zuf)nL_4Mm@(Vvp%Y6D1`5#N}r1DFWVPE*&#r3QlwhV5POM27-*Bv+y-3z2q$HWnA> z>ACz$AuN(ZY94bXT{R3GCnCxA6#d+o@SqZ5XaDJ4+nzLY-+P`c|FHslfZ~$1)m!VEz^K^dlZmGV!rmG}3A?3UJABMU-LrgvCCs~KnW7r&TgBX0 zjznD(z@aQB(GjhAV!GOOaDV@;ORt>K=m!h}_>Wa-2^Xfhm9`4M%luC#5;{epu<6uB zkrKS|LH!~jyqwlaf8tk_m?B@TL?o^IRbpd zU!|$gd{d^gm3+E1Ga8z6Whc5iWW;po2M1KSCNr$8GJ(H$7-%n4v+)KhVN_Gp zO;tz)a)EF#=v3~|zd?pvBh46VjCh<6 z<}zv!!7Z5$J3Fci^pmGm$74~;e8I=euk`juaEKBC(K+T5+W!7No{H#Wmfh=$ zL*eKxoMIg{kCxy9S!rUJzd}JfOO|!e-{{4%3xUNmBesXyzY8!sq6Z8sXm*@M1^J4T zqlIJ5F(kSPVn^ys!iP=O_$Q$&B^WyuyvS)(4#5%e*e%cVsa&)@dCrUKsjyYFX#%kz zC$~V3t?YfY?hJE{L;gNe7oB*jKPOtoh}k|mX6DrVhp~faxcW|Hsr+pmJX|!(-F?D4 z05I!ym^;1@&zV+wNk8v^2;tK(jv7u@7@RstN8=jVE^G(%$Pj#a-~-1aOUQYo z?=6`bhHrJg&oi+?6`LF)0q-ve2<;={_%Z^&cR;U3!GisSW|=96Cx%xek42E%BeqvY z$9~y@fijnH)>y8%oAxs=M*+efGhcP30COV!I~c@oP!kex?MW9bN5QT$`4UG;hSq3L ztwy>xovrgbFHcF594xrwvIASJPPy+hNalHSk6(l1oagclW*FgfcT6A&55FVxF&e-t zvhb`e*Rno>5B%#X{Ro;D4f2Ly18YNCdSMf^y^``D+>sdip0_()I;DDbDi$Q#4akHc z?3vJT=%Dt+M`pw99>lG&PY}jE!oTAI`k5o~MsEWY`78^66jIQ7z#DtCmk7h?WW=V! zlrN@g^d!M#PG6mPub-0sUalNjwMsZ zQ7ePg16oKxZQ`2Ue{QGl)&l+=fCNZQqDdrwWAO#^_ZWX{uEILK#gW`Cy>T9Mdw(4k_jN{#H~ zMX~}Elha}cWhD>MY}18-+S9~*=2V#VFWy6-R}OpeT>|dZcPYl*lzbw<_UiT(w)9PB z`QK-BATu{+)PG zgRPa7m<|4Yl6YK|33?>xOS)i!IhLi+7_xhU<&|_y!0*b(isFOi@hh7BP4LpjPkD(>f$4Ly4n`Hu^c%z5-p##h z+Uwx-L?$?(WQ%fDHQjoOIi+wm*a}STZ+saXr9zw%>ypWNOjX(p2U>MK&L922xfWhd z(@o2-``&!`?mP$CoWi@U8~qyU3fnw>6qir9AJYUW&Mp809x^T6D5<>u0p_GHY?hVN ztXHHFB#%mW`Q2c3t4opahN+&0%h3Y1*md|f8!@*j7tmIaS%3%^Zo+Np%pblin%;S@ zsnUxJmzyr+-uWzIx2tBxTfHS(Kusg!9O3jXEwI-5{&^`oF&Lbcgpb8R3!+tCNSY2i z)bYOTE&y=4;F(l8x_xw`dGnQI8*rYSI4L#Jv8py+itcxDr;*~Ny$yAbJI8?$H_327 zX*AgDp3t3=QCk{IW}PT#q8{(1qx_qlIz<0MZPRnU1N}pY?|#EwZ1HDjxwlVMdIyOF z`7hPTj==InoWtR6e%e)Xtka2&pXt^gF^=GO$}K?57i&wBC636Sf0MOTw(M~^%86D` z#V)@261kOqOT09@{T6^0NrZ?FA4U>ED-*vz=46qFMa(u3eC_jdxFu18VByH;uUw75rK7+#oqC?f zJbymWQ~2>^*ps@*Ahylt7-WfP)ReRFCvi1XyS7SD9Ac#0F-Z5JN{&$cw2yN3NmU$k zMq;L_Vf47@j`?0^+?gD*Di=yQ-E@-+kD0zeVdhP`fAUTWct#U&JIVi^>=0Xt3WHZkR(|#i(a`Rjjolybh)x{* z`J+cNdh#@J#5K|wI2y%GzoeDq4n<4Go$c*@5f9@qRQF6J<=Rqw&Y+qpJztjhkP|+!8;vl?j&eZ)zKAo4Y2EyO1sz`w8kYO4&JgPG8Py& zVFvqr_s*Fy1e**sI8egO0d1-xeq>8zC9C6ev^1%Y&uP=k*!-faS#11#z^f^yEO)Uu zZlROtNqY49LEskD+izb0XldVmX?VEXXY2VwRi#=4VSR^{l9wL>#?B{ffkz66*RYU_ zFiw^URF=|9`)2JbOT0ouj0HWBr@z7ZEkOs4Gf@T+)bfj4P#jlZ1f{l<<-9@BTRT7L zZVgFkE32G>h;oCK*k#+;r0O|EZ^)rxr7Dw3yUm2j{dO5Dd4=HtFv@b|S=ZW!PBQud zqq>{ixTzpAy&b(+`9yWunX#lWOSdE&^AieJTX9U!tn(a_(UYVH5Cme33S367dJjY^ zG0vCl7Nft)nPO>uMQNl(7x_Hi@QF!Ma!sfSoKV|{Mwe9Xh@|VWL=X`3SgC$_MbiUR z(Ar;Z1Z!WtxMBi;fjfw2lGan9zo>WQShHXb{@4Nxs*s_$`h`w0-TgHl=yfLDg~d`?}vV}U$!;KgZjx*Zq1w^L)K7#t{etu(AlXp+Oc17cSH`hImC@w z)?~FK<3i$xZ+)mwYsGITm!uc)n!w{_gaD^g@L%_j8;(9e(zsJISGyEy+Dj8zjSP1u z|DqP7d{1jdd1EHQT$U@g8{Gq19Tl~{(h2R&vD68kroOHtrk;B=2btA=jjDH$I=p8G zMfr=V+GzIP+d*VvrSiR&wi-{C_i!ZQmM~;0-wWcF`0YaWuR^r5gC*nI%0FCo?kZgh zjM*yL#WDzh+*WLf*47pogs)g!!Ue6gvca24QeX+``)hm)}g3z{egO-I>Xt_wRzg{1WRp`hEwZ2~;h*BfXO@7{MeS zhzo20Fe{Mzu9J%;^pix$yb(xdeL_0T|DCckwl~6WQ^JGgi^qSicVYkvxo_Y0)!o0q?=iB%Fq9Y{eCgHYcJr+70Xi}ME+-oW*Y zfDwd5P$?9>>itd9&OLSd!&k|~;`!c9g%PI@FQ(I=l|*?H`eU{wk)E$YF!es6dOSg4iWL-j)TH915!^ESbfP}H>0(=siFu^+r3;ZPNZ`~Si@7s9&7^WobG*~ay z+#`a*dF)-&dY`(WUTm(c*2^JNi66zj-yME?g)b+l`jRG-ug@4{i1x1)a@U3ao8*}r zH60TsT2ImT{trl=toMLiSXP(gxI0QuM>LM+!&1Yukzrq(@L!?&k??p=Y?a4+)k2U-;gTsP83& zhE=pytYl8-4^;P^J0adn>|bFMiUErGl|HpYa_fe=_TOTIXNIM7ZIWAsqJAdQ3k>YO zDzzlbCFn{6Zxu#KGBI@uaZwA8p?53iel8)k0YM?FfnN*qP_e#jd;_yLP%;#{Z36@I zwlmD{*9#M`Lc}X-!ILuhc4qm^-Qq@bv*s*tZ`KB(y+fGZj7EFT@)>3&)!CM zYOgg&Fw`0#qiU0HjjS9WwMFq>F|#`*-8%&qNOO$OHIi@QI;i)${Xba*uRz(tf=}Jp z*yqjs5AuC8`NDC~!0Yga; zZKztbrJ|GiP6L#N|+Hh2V~Zk&`EP#Tn|)c z1Wb94E!SpMN~5QEyg6udj!f(Sr8Oq{)^OUj+HJzPtD{6})s|&Z+~Tv+4e%E9Le~vz z5~z?@A3cM;tOyhkEjW}>nZbiX$t9dKez;DZLdzS^BOSVmc)$(A4kC>d3k}jmC1Nx`7C; zFnmE05dWB=iu8zr-oEKwNy=5A2jUTE)Z48tafjIpZQhY#euPVHUylo;yxcDd^ph6B!JcRkp zV2>8P1-#q*7;w0%>Gf!>FnnpGHQ^p-WpSpyw@q*28z#8at+6WCQa{k|t5r*?Gu#Gi zhKUI<`zzC(u>X)&CPIN<;o}@|5E`@dVY|c7%L}na`_{lb z_&*i~{l6x&DJ9$-GEs^sljcgKmgRmjbRA%;6Aa@p`1IK#W}RzJ+P0BNs3i0EHm2BU zX}O!x%Ve_o58RuE-jL&an>5oo#VVT;3{l?8Ml63{y}4%BVQ`3$L$_6=G{a`C$ZJtO zL8EcBlLj*9lE%02j2)KVU+MU{{#w|0`Mawc64YDJ&o5Ohs%i9)jNk|7raQKc{!6L* zMKyHn?d5LJDTqPq?$10ofM<1xLvnvEN=Gw?#RurJ14?!`vRwJ`;ii^ zMp3->yhx`ca9&C3XnW`k51H!pFnD!RRd=T7!B2Crq!;Zr>-}456_i2jX<-FW*y=Kr zi}PxNmf8)_r=VUPdSp%Lk`=ikp0&&#DKYV?SW5k04>%;A1Gu%$f7dr^ZhI5FoRzkD z*=oY<)=PgFmAG~e2v=GV@&dW2{6^_#fp=Dw^5#W$VKfNJeUAO@P}%enwk*Xm^A6ZI zzrxo$PCHZB%p4b`oVt~b(&=-s8MG?mQVC4ctIYkMl^cBB6d$ogs1ocKQ_k}tNc`OGx4?Q=Ira7K`avl&DR5A z69MPy5afUI#FWO^!%hIaA}h3oHAR-(Y+SCd@&R_tjehql`kKSh8l~m2Uwiz;4UU`F zB;`)l-82#VYjOrMBTgJNSta?t%X!beJ<&`q>CED8g&C1^rhiiMQik$7D z&y-~Wi9;7R1aB(_hbzahPTs$>e~nbOHuWQF2%-^IGasNRJB6@luUfy2`Fe2WB5On{R8GkfheMZS)yuUIN`O`(IGsYn` zSEm>~Z7HnNmljx&LGG3td=5Wz>K$k~^$i1D{TE~i|Herj<`8ttYpj&3|G%?iTgNb517hYKY*yF)Z)qMgw@P z@_Jf7$^#6@yoh~$dCGdyo!m|wx#j8EDZw>j^iMEITzX@9S?B4g zzV+z5Bi3?+1vJ$C6u>=)#-qgSUao~sUwA$OMlGWUQTrTQYnRXX4E)3=H1)W!;3VWGBk%U~FQfN1& z0!%4e#L(}uh#&D%4(pmeQ*-FFv(|QB5<)pB>|Kd;@nkO?o61I_nI~-{hrKI(jQeWq zwYoSl&MrAk7UiswO!@U@yAmAPR)*Lpmj{QveRMUC5GlNE`Tzq7O{(eXUx1;^0UlkZ z(Zwko;vmRp0=}SLYkk#fcz?1_Qt?_nCrV^M2{RzuM~(_by4sAV;||LiUnkMS!e`c< z!a}cU+%$6mEi#=R%n#q()&?oqIM>pGsgoZIcC=;lSoSW|a7l~XqZ#k(h7YfaIg`;+ z*dBE0A~*SpQJ2yAh2pdj9gq$sM#>&V7Y8L)B}Qo+IW^%_DmEeqgW_iNqFHVt)ZH@F zFN;clgUqVbRr3p31*V_G*l(CG2l#PO+OR1*zO9x8J6zL`(9Wbp7+J!hFm7Hx=@Ih$ z7ndhkF#WCZlRh}&K+Wk|#j|CcERCn1NN?C*;^H$D8D#6&yRZ1N3+O$v4*ia#Xhzg9 zz&fdetfD691Ds0z*S&+oXPN^ATJ1fM=mKI1SeY59mu(v(-I(G{H8v>TqNRc9yZH&Yx%TRR$aPR$Ft z69OMoYPQJCnir>D0-DR9imIGkD0Z#%%vWU7Bd3-ufuy#PAB;nTn9?IEPOcF$*b&tc zNvvm!;2gqk*6whK|0wrY1kEop&-j;?j$T=F0EFxIq6T@FV9gWDJ#sxotgPZ}ZyTm1 z6AC&z1^INpH>tzMb{OUo7b3VHznLCi8;lPcNl6hl@W(V|fwhbK8PU2n#5ZCgl@^lP z`@VZ~ov3~DLm|3ktZIA6)^A#;ApX+1s3ILjx&e%Y_dsxW=HSnWDjvwM`hBAD)QEp- zHWS8&otpfK&@h16Crq9XSl&!1z?L@5OG#;ZX z`CHK*!y<1OfGk%>GOH&&4{nj4c_#HbOr)f4a(AICAMWKC#Y8q{96~QWTIE63%k$*a zkJXZibj&kZIPihWng=cGF!2ElxFBZ0p4Y;=Musk;BFWuCVR1DWeocfw!O)lpvN38q zWQnUzd}3r$bU@%yOyrwU6!t0X&_2eI^&aYlXCW;Q5HHCcR``n;=M!Erkg~kem|uTx&U(ryPUKh^MM(4R&w!!cKL*fn8m3L@*WG~lKh7P5IyscK6M1ei%!m^LANzLhY9l|Oa!#v zB18hyL*s0Gq5 zmVoJq$Zsuwdd332J??_@(c{%8=Y!}{5a*Th{bwJrD_A7Y6DpMo)z*Xa%K6UgIf*s| z>;PASUx_6QY_EDeLxt<+>foM<|Lg&`g77#H_}(GiaU~Lr({SE_`m$4s@AEuJQa_$2 z7T|tND>Y&_TCgak>%C9#?PKcx!+j<6mm{bnt$r(L6-2qegboGi`8yVrs$#!})<1ui zwXSqXO7zh+GPZVFp74Vu3V34{&_3Jnk$Yf=iV&+9sZ*wgM-VQsfm{ND4$x3B|CTSs z*Pj-G?J``YT~#U1Z{tQkJS)vSx=or{+RJ^H);P`_nYnqC>&0vimmvMxQ{W|>c^H)% z<-A~1Zar6w&Sxyu4RvxySvV6PwF!xpZD@&VBx0Ayf&JqIBBj9Mh%NL7b_~2Ra6p#} zZ&`DKIE)gi-pgvZS^UqevKGA`>=y|ri{wY7S#x$6tyspIs-5;+Y;z(D(%4L?jQ}XC z;Il1?)|#zemWibcI}?vW7UHcHCHC64)ys|flm{~%ZzCz+f*xAy;goQ$5b~gca6v3= zS!TqE+8fT53WMScagLj;m-vqXAo!i!inuDjrpb%LBRk9|OO(bX}C65f}NBsY37-2jtZ^=k<7E!E$`Ql_b7 zqHDcm0mhAH;Z~xz;4xC@_ZgnUfrLq_X=aoHbudjA_*RYv_MYe|MRvU5&z|E`@=!F=^PzPXE88ny8M*TjAPYk>&<%mYjHq2MLE`%HbWtP+?C+CKbzdvtXO(D zqNY{VpjVLaB^7r>Sr1o+3ThXzwY!!KEpfr0#^!{6jA3l$(b>HLZ^vuuOpF1_@^Qme zBvi<5=dPgja`uxo3J@>IhNa2824cXcCTMPk!$t@0T($RdF;6|uP3esKD5%$h z9=ofGAE-Q0db!n^p4N`YbFKYIm2w@i(0`Hd2VOPl#h4G!g)D$|?7OCx*MiaRaef|x z)frMi=U5G_wQ8lw2c42mVSA}ps3@~*&F#a(WK(S+2HZ~S2dy|*3N(HjlbH@K?$uAZ zqHJvzPPH}pr1-`WlZ$G`d^lSsrF9X`^(p^`psfq2rcjijv?TVEw%#xxaWP9QRyl*_ zP7{0vDBOT&54X@Fr%sClCa-4_wYcvclXeYAOkJ)MYO9*DeiB`O(mkD|wVy89+TsR=kiIE&EHi#X>G=NK5!7EBivZiO zp~oS@BZE0gZv;suEw5%hsUXT(%J>i|gX{7gM*fQb|LN;1z}ncJw{drOcbDSsPH`w& z+}$-uaVNM-a4QtIQrwHv;x0u4v`A_D<@Q>8f8X=pJWn<`=bf1&vnQL~oq0=NO45AE z)iv~Gt6Y`=NA-OlDqat-J!=U0PNd*-2Y#ij_L$wHl{8*?xVQ*5LloRAK`o&}T$E5> zPe1XrZv8xG2lD~v%vGLzJri;RL2gk%sph<5TM{nvg_AZ{rq4BZyE}1}WBeQCp%-E< zU%>IZ{G5_XM3fO^N@^Dq%D&!nZbT5a5VJz&<)#~F`=r`Y(ax&%mnISf{k|h{DU@+5 zjLG=3)~``R1c^!NQRPdqb-tOil2m3McBpAH^Km@lj_@uO^^q*zA;gb*Dje50 zaphV@808H!ni$VFKTrS+GYgDY>`h)bo{>%~N$wunO*tXu1<%sAO%TeqNxW&STl6TO zR^+O4D6Z$uN3{eO<746^L|Ks#H#g^ZUk07(Lz%7ej+kic*|N}`^55Ep9Im1Y^4nA3 zYl~o??3Z;PyI6D~nvrb8UnbiIW$k{&y&Ye?tE|#+S)AoaSK$ME?n}PVhj6;U`VpF6 zM0g>+AG{CX>>P`|3vV{}$V^PB?VUA|e2)SAj^#fwL0Q_<92Y%ir1yYzK&dAZMDd<@ zf5a1Cuc4UP3&qbs&67!zQ4>8Fn%0^??U6=I7GyYpTbt=tUY&V$AbE*}UZzmBCF37= z9d}L5lRMd`_+ST6wW}s8jfG|`1j2B51q3x<=dPO`dOqai9}Mbn$wofcm@B~x)TYLp zGZcMZ7OR6wuo7_)FuZE$7=h==dW9 zFCjC&aDasIkaKXVaaNyw&oyO0O`yKc_-Z`(tgMc#fVb(9Y6($vxa%tg%T;F~HS7)5$yw-R z=X`LvxM3Y2L7k*T=$!UhdvNwsFc$-MI8#IZG4v#9Mgy~sd@NM(pwl|D3h}VvQ z4(Gf@nxhmzWn3H4vlu()a;=S-p~0E4@GvVwSzpG)ry;Ry5|crw!8>fnINanA+GU4n zb6L)HUUqsy^GIb<_iPQ_Aw+P0;TFyRwFSADikS?mp_2Vqn{qilc9pex9C8sI6{j6I z+m$&_HxEK4QyDWvF@cVrxISowm6N>e&Ro&US-1iK&D2BE!aX~WU;1I1LZwAPoY!M! zfOsPV*6FiTcH->M2%@|Tp`5evdSq9$A5_r}&Bk+OZzl*jm$tW#eIHuvr`$ ziAs3_QF0H6wWF$G#90cFQIj?3(R7wLD(WdJhN0Wvi^;0MboFFD-pW8HFI|gLxD7Pj zq%9i*Ff1|@>>`OE5%rh4IlSspjU6)())LBa16v^SDfai$Pv@mKFRQKXE_GceVPUS^ zS#LR`qs_v`I^uGV9qKldKd+cihtzc>;k>>y?FvIUk?)EShgw?)v2CE#&Xk=`gsaz? z%5zqK5G0knatw#|ygB@v&gGH!Z#SJS*bxxq&8 zUDx8vgT3esC>Jg*%UVy2{Iui2<8IjA_ILIYFsh=GYsWsTQj}`crG!#owr`T1k2C37 z0G|qJi%JwYwQ8E=7Wo2)&7m~V;PT7k=v!LSjs_YqnkrXScc zGI5)leu{w}CXKddm+@BH?TPo6q`I&Ou(qp4ckUd!Wp;c!DUfajIRSQp?Q^OGVZ^pv zdx0|6QroEU?bC?Vw^Et6ogGN3jBBW&n>68)yy>!!f!u26Z_c#}yEF=-=qsMW)syzAhZ z@%U)FuNXzzU5A$)^TUV=W+{mPWsI;+rI*i&i!BlZj2u>zYF-s13E*)dml%akiIGc* zk(&2Hp)f_FWKw%Kgp0(f!P9hXBE@ifs+^jXvUtB%F zR9)Ud`6E`%fFx!qOA1XxCyKUXTvkz50V7o%-_UOfnO^K(IXtp{Lys!}$Y#xNoltHE z(`v0qG%bgTt<1hX-YTXUF_3;_Lh8ozcv7fb2_BY|VU9N-b4IeAzQ}!xt*bL7T=bmdu4Y7E6itUOyb6O&W<(@2GiIY=UH- zk2{Yz{5Ty|wLww&(bz%cOiM$_!kA<2vPR}v4f`yvj=m_HZLQrbfVI^P@yan`Hzjgf z=Ii}Y?Ib;f*K}@saF`q~WyELAQ7r0-Qh8xHnz5oxlkOadgiV%~%0cxqt8a~zjBFvC z2@A7FQ1#j$!ZLAdd(U*dqtH7W+U;=IitK$Ja^^7fR5iHfSQI@(P87yOU)lJ24)ZRL zB7LU14=`dG0wvd{16W>vFgfeWI(*0Yk)nCBKv{9~Y}LJ-RPzov(GpwR zPci36SD1qtorh+r7RFp5Lm=_W5S`lL-FJqT_Ru$=YJFNCIvTHxLZE|PYoa*u3n^R7 z`@03LwPPi1BQYiItQ1ztrSuv9GC}TRAF*M7n5Fz^HTxOIeSk$%(#XR-ZyK@En>3m^ zZOPX+!(UL|q7FiRvO(bb+}cf9uGn41g(ARo7LD6a$YDoXkzM5&vkRT|o=-Lww&fj5 zKEmoj;Crrf-PQ%9^9Ucr`cL*sf&Dkn)NW292@SdTZd%aiVzG10I% zKN|cSE5i|Zylv^@PNbJykuwL?UgFQoCO;_XHx)JP1|#3>sO4|bOxCABlg^2!B2iCC|u8 zlBRSKL<|lOnwe6PJ=LsmnmuEt>$0 zLuAg(K60mQT7dFKE?Wq3d@^?1pg1iR)+rNgoULmBXjH21k=IqITNDW+bJZ@Hx$*mQ zN>w`k5f)9$_ufId?DG916zz+)`GFFs4(rw5*1v?1 ztQ&Z&1$1fW42HoPbJv~7;k14a#KU+ZI`~HT^Pv==)H?AS4a2lQo;gW^e0(yVfc_{jC2KGEFu%z!hpt70-I z!#)9Dp}U^17lA)Q?#_Lo^51>qQn#!pcTe{-z?2#O%%vpY$8@8CT>@^N0oKF-YzL3~ zNgz3ybEplTS_hGK7&y0f&1HtpxdOmBT;lQXBfMqiQZedoa3vQ*fzJ%PvOjJkp)01yqRQ1_4xBpdt~ zr7^|6>Q69DnFQ9@6FY3S>6qXGsI2+axOuEUKEv1U--*A$1@daws-SA$)Gl~-Rxd>k zKb)P(L8s=NUaJY|X0~cMgpt{myF(WcoA9!~c$0b1T#t0zB`V=-&+_KO>rX7i9!+&@ zIdRjYS$jSe;5QvFRIT+TP%08*`?zbBZ| zHE!_MR7|aA^jNS>JTwou39VRv)bPJxf2{Y;NF&RgOVpZ>%j~iqTdJ`DaZD~h!li0Z zt3|kZXW=;t=+-vr`8@A3qp?t9{}?sZwMTnNy0ahnCH#c#?3SjuJTDU({?&DJ_0+_a zdzGS#Nz>r0cg1o+>{EnIA;3$n9wj@z*Vj@)wvatex+U?t#i;=(OV%}CO`vH=;;V=cf+lbPdb7j#c%`DBqI1iaNSE2HG#pZsj8$P*{k`-HF0H`j1I1|U?>Q#~N z)Vy3<-S1JhrrKqM8Q2$4%R6)$oBa;Q_dc%ZE*p)|YmJGiM=`Rmwr=Eu^nhRp%MPxe z?0}Fc&8{x8{gdi|t|$4H&mIOT`NFP#Qzm;Oc0zoa0ZxOXtb2TJ zVA_>qVd9v0;qO$t$vEGKE$s8xh}TS@5e*l^L%$z>>ZyO>AomgMNmaIX zV4<^6e=MBgqO(-fhVLD3n-ILhwwhuu8>UElCd=_Mdbq_w*jU2i}F%vnR! z=&4oWp_U)7wE;|3VHoQTzita#Q@L#LztyIME11f#txMA4yr8vf>XWz4ga z5c|rj0894T;6|QGRev|8dZw4Rum!=5Lmj{uk3I~HhNe*6WbECDu>m>pb9o&^NiEwi z(~j9rd7yFC{M7(2cyyo@j3_@bP|nW?ea2ELG8nUZvnH7QRK#$=pHk=foB(P2zXvd7I+JI)!Ztojw{`9WI9-5`^ltCRGJ<#6_5{T; z)faH5lf^|7-e6sE=eANy-6UUTC({gUB<~{$NIu5hCg-9hCeJ%XdIjB{C#_Hq;rh-I zJl~AGL?68mw>+!_GbN7BCNXs}-7?zKf6CqAR)tC$GKW*xm2{@7Oa%}0#6!U&Tnypz z-Jc@u?~V%t!ry@BWXX4heh^5rKGpUnT@eWDeM+%gej%d|%8L@0K`v2}Sm$I+H?GizKQEyoYON@uf(8dkC$2&VfL8)G5GSJoZKh7#@}V9tcQnwW zPyO85a^g_|i;-KeNGmw6u;9hc`{TP^NUoyDnZjwgHKOjQY{>kagQESQOc_Pm$l`A| zWB^Gp6gg^IEn)0v4fn{4bHYiV^XsU)a@GcBmG|M!m&U&)9qrw|5?BA8dn+ct2Pby5 za9pwoh-SJ*j+?%xU_c2c>L=sSe!?g{*3M>J!=>YVIX7-o7Z!r1g7Ijb7J+q5Gi<-d zx+)V~z}C4RfSa1U==NzYOdng(i6ID<4~;uyq;_ZG9K<9#aq*E7aKi%vRMz;rcg1fFPT4%w|)tvQJJ80^Z9`c= z+f4++PtOs1-3#eX*HzIc1MnFV!1x@aD1FRyntEBiAss+sLU_RYt&m7F{V}YZs@8Jk=eZ` zTDge}%^ZXAnvc2qA>hNmc<1+!r_4?4%UyIJmh(c01s(_X9)X4(O$ zmxK|ZG4G{s1~TbTuSM_+4;R2;CjILBpOrImlQ+h1|-O9K1YdOoQ7vIGwM9cu=eF0Od?MX4fq_ zFv9IbGAhsPi0F7|ycf5E z0khc%X!^LcVAN+Ra=ZE>@eP_rrWfJs6yq0=^UcsKdSk^Rjw4BVaIwIo`lV1iJ%q;FDHU|v5CC{4eVcIgyC!C>f^fruWN>91H=kCB>t#LsW8|3eg* z<-!Gfjtn`sjU|ABV)}V*yS;%3RCB=sAP3>u;{SNwJnj^wL`9mGM)WBYL6M(YY687n zO*)0WbIK(g*&+W-JuPf{#>XcUYT3}Jx|QW~!(zY^Y;sL8J!w2%ZR^Y4#sI?0uYJj@ zkDF7kb2iXo-ahec-Syt}{SfK9+q^rsd@gp670M@F9it!9v5>5<%rsCd+hZt=3`kPM zawF6>rQK}}=}{j#r6(I9rAyyQ#39&@i4jmTh@rKn^A`YYP8F5)fGNKBMEY*A?$rB{ zPWEmj`(E9vA8w4k@qGZhP;3nr-95S|jNWm7{U-V~l#+5E9P&MAEE)6W9{W4l-5y*r zrS->T@ENp(`nBL-I@^02xuErAM8L;&?U11GVBzVh=zCAYA!6jbD#HhfoM}#sCy>pE~U%$Y> z7RQ!ZBWSIOS?wBg2M0sR#B=wNMI7gELc;zg+>EU&Fa4wy)Wq^lq9@gw) zJt?j;ZWPY*D(8i$w9;Vb?sEWyoo1XUuKGl2Rfn&E6lB{-!rShM5bV8I9NL=ru$?7+ zCR{wi(~{U9R1lEQX7r(+era=RG21~lgS(Aywth5yD8<6A$0z2jy)4T@!ACIk8+=lx zf+~Gmqk@vqSLJpGrRjBsm)2n!ngQ%LJ zc1Qb#S;WLwp~H!4rb33Pvl)JGPmRABre)XgWbnSK!(h}VUSM#=2Ge7kRaEUesl?x- zz8Y7tNHZ;e)4Of6(|}+M`5%Bv`9{ zp86h@DQL!A^SaS4-!=b;dQx49;!Kywx@@#>QZBA`Pnp5Jq-@ELDl%^%ebn6bP;mi? z`vkCH{gG?e{uLxfWJ&`w29@dK`>2?E7VFxQ3a`Plxp{k>y!bQ#-W;#IYO9KuyHrUF zPfw`zk8aSIuP-{P9a~C!R&BoZsWD+XI4CGlClFukrf;T*aO@s|qSEo@%vPA{{9?tT zaSpPbyA#Sx7~<%7_V&cVNyfVl^+}Km!V;`bRK1Rqr$MmgdcRc=?v{n~Rz;y#4j&_J zcvXVjm3$q~(+cPf$r;yo9Walhva8H^E_yk`$l(5Ej?CD2!0+UTzWI8WS*QP{pSvU-9BfI_zC za!-tfKdaKX3>U81yRGhJqXkb0SLh}ED5^3ULDeN6q9$(N!^+v4d8U7PP!Gri6F%vV zYzeyJWaEH+iGTD<$UUiyyaj_2erz*iKcCdGg<*e1qsf#BU!*}(+^dgi2#=e;JT<;8 z{<*k7=p>y4urR{MN3obzIAS)|w2X>9_7?Yg7pLIat^HS+eBimKoTH|>5^BflP59KQ z{30-(^ufrX+;`PbihSSq3NZ&2+1LrR7fETC2UUh4?!Ln+P+8PNrFHSh0`0 zs#V_~-IENS`H(x4TsOE`RB*n#KK4G;F-M{0v3iJug~jTY2Q^SXfrNWcE1HSus%9swbp? zs$H%68V8`vJ->J|6`yXAeX^MhO-Lq`qLD%O)|ZH*{q_~vJKbAPH|TFzrlE#j=7{x$ zYPB?VWuMhox-!2HGDk~e`ox-8m>lE(dgtl z5Cd-#B_`C597E7Z{|xqrn1Kh1^&s@PF9~W?yiDqgu@~t@=GG-aU;nv4({uIh4ie83zC>*M%8YF&R5t6K}_)|Fs6$A@#>{Kiyk;(8aGNhd_X=0u$$*3 z8$mP$l{&$aY;DdkKCgj=CQPg7R53@q?Nsq*1$(Q#zF~{)YD=+NcN|Qs6N3KQ5JFzZ zI*zgVg5GM2eEhQ2f;4}v_nS1fGp=S3;k|D2xvo3+-`+O?j z2tPR6rjghcbg#O8zWpZ@wjo2dHXLU$CFdazrvU_~if60gnog0ij_!zUJEq3bdmV*t z!pPO+N3&s!OfQ6%silRZNzwo%-Z)1kFVSAxkOAK1x?AACVAPB#twaW8<<5#^3-b zR`QnSMPyNK%~P?_-zvWBBJmR~nrJ^9Y(L~F`rzApe2SjKvO*G;*f zQ=F~ab)f-2aEe8$4SKcY1?Dn$865*oxfOdw8=6b?R-SKy|$oXqDp|1?{G=(UcVF;_qhA4a#NO{c-p4IkJ|kDo1)mK+ zV{PVg_2KeOeKwgDoqKBQE~b0QwtC44rQRJn>DhlEwCw>C5(^s?&*&Bnzy1PAG?=)b z(>v7FJM^*)zX(I11gf?5b6#*Opie>5@Kj{;nn~F(iBl}D8S8UC`e)AX1E=v6j46 z`_atXB9vs`C8J=Mz}SVOs9-C=Qlv^L6^Cz^N2$22O0Q*nXqM5n?-QX0f(kSY9xPsJ zF+NarnHq9o)MZ%;^8R|68~SJA-7@W;AGlUn8UB4PKk9hJml2Yw*_04MvkD3A`+Eb0 zkwXLB*+_xgtAxM6*G4$pIU$%oSS4ux#zOX>umn_K&?f7jCVDq9V4hHc)0=15BT@n_?KYJS9!%0D+ym=_w*d`k$@iM%aZm>(FB zFT}u)TP%ySs`RyJx#=oxe&Idagc(F$Sv(5*pWd?HYll`LXi*p`s9;8=FNKjA$zuDap z1iJ4_{GzB&FY7I^Z=V2WPV}duAN#+$7*g>}M-8M^ZIIB>-^X-D90KS2pYi;cJpI2t z9+!d$Z~~_e2!65t2V*tx>VN>IOBPZ~3v6t}2DR0RaAz+Y0&>nb^fj?~75%>lATlV_DagaSI48TP5e#m z`NUsBkeiDL|BMZ$&97r4JO2|SVnYrr+W2*{e!H;xn_8U}Ah!z{@Mwehm%07(!p~pV geSU+(twG={1R5&vkYyYSN)YnO$AzrH2Y-C~e^Sofwg3PC delta 40281 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 /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -133,22 +131,29 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -193,11 +198,15 @@ if "$cygwin" || "$msys" ; then done fi -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ @@ -205,6 +214,12 @@ set -- \ org.gradle.wrapper.GradleWrapperMain \ "$@" +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/gradlew.bat b/gradlew.bat index 107acd32..93e3f59f 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +25,8 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -75,13 +76,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile new file mode 100644 index 00000000..97056d40 --- /dev/null +++ b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile @@ -0,0 +1,8 @@ +# This is a Gradle generated file for dependency locking. +# Manual edits can break the build and are not advised. +# This file is expected to be part of source control. +com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +empty=annotationProcessor diff --git a/hypertrace-core-graphql-attribute-scope/build.gradle.kts b/hypertrace-core-graphql-attribute-scope/build.gradle.kts index a02bc157..227f1630 100644 --- a/hypertrace-core-graphql-attribute-scope/build.gradle.kts +++ b/hypertrace-core-graphql-attribute-scope/build.gradle.kts @@ -3,10 +3,10 @@ plugins { } dependencies { - api("com.google.inject:guice") - api("io.reactivex.rxjava3:rxjava") - api(project(":hypertrace-core-graphql-attribute-store")) - api(project(":hypertrace-core-graphql-common-schema")) + api(commonLibs.guice) + api(commonLibs.rxjava3) + api(projects.hypertraceCoreGraphqlAttributeStore) + api(projects.hypertraceCoreGraphqlCommonSchema) // These are kept in a separate project so they can be referenced by other projects without circular dependencies - compileOnly(project(":hypertrace-core-graphql-attribute-scope-constants")) + compileOnly(projects.hypertraceCoreGraphqlAttributeScopeConstants) } diff --git a/hypertrace-core-graphql-attribute-scope/gradle.lockfile b/hypertrace-core-graphql-attribute-scope/gradle.lockfile new file mode 100644 index 00000000..ef4733cc --- /dev/null +++ b/hypertrace-core-graphql-attribute-scope/gradle.lockfile @@ -0,0 +1,58 @@ +# This is a Gradle generated file for dependency locking. +# Manual edits can break the build and are not advised. +# This file is expected to be part of source control. +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath +com.auth0:java-jwt:4.4.0=runtimeClasspath +com.auth0:jwks-rsa:0.22.0=runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2=runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.google.android:annotations:4.1.1.4=runtimeClasspath +com.google.api.grpc:proto-google-common-protos:2.17.0=runtimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath +com.google.code.gson:gson:2.10.1=runtimeClasspath +com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath +com.google.protobuf:protobuf-java:3.24.1=runtimeClasspath +com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath +com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath +com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath +io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath +io.grpc:grpc-api:1.57.2=runtimeClasspath +io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.57.2=runtimeClasspath +io.grpc:grpc-core:1.57.2=runtimeClasspath +io.grpc:grpc-protobuf-lite:1.57.2=runtimeClasspath +io.grpc:grpc-protobuf:1.57.2=runtimeClasspath +io.grpc:grpc-stub:1.57.2=runtimeClasspath +io.netty:netty-bom:4.1.100.Final=runtimeClasspath +io.perfmark:perfmark-api:0.26.0=runtimeClasspath +io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath +javax.annotation:javax.annotation-api:1.3.2=runtimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath +javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath +javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath +javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath +org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath +org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.6=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.6=runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +empty=annotationProcessor diff --git a/hypertrace-core-graphql-attribute-store/build.gradle.kts b/hypertrace-core-graphql-attribute-store/build.gradle.kts index 1cee004a..d2f29aa2 100644 --- a/hypertrace-core-graphql-attribute-store/build.gradle.kts +++ b/hypertrace-core-graphql-attribute-store/build.gradle.kts @@ -1,30 +1,30 @@ plugins { `java-library` jacoco - id("org.hypertrace.jacoco-report-plugin") + alias(commonLibs.plugins.hypertrace.jacoco) } dependencies { - api("com.google.inject:guice") - api(project(":hypertrace-core-graphql-spi")) - api(project(":hypertrace-core-graphql-context")) + api(commonLibs.guice) + api(projects.hypertraceCoreGraphqlSpi) + api(projects.hypertraceCoreGraphqlContext) - implementation("org.slf4j:slf4j-api") - implementation("io.reactivex.rxjava3:rxjava") - implementation("com.google.guava:guava") + implementation(commonLibs.slf4j2.api) + implementation(commonLibs.rxjava3) + implementation(commonLibs.guava) - implementation("org.hypertrace.core.attribute.service:caching-attribute-service-client") - implementation("org.hypertrace.core.attribute.service:attribute-service-api") - implementation("org.hypertrace.core.grpcutils:grpc-client-rx-utils") - implementation(project(":hypertrace-core-graphql-grpc-utils")) - implementation(project(":hypertrace-core-graphql-rx-utils")) + implementation(commonLibs.hypertrace.attributeservice.cachingclient) + implementation(commonLibs.hypertrace.attributeservice.api) + implementation(commonLibs.hypertrace.grpcutils.rx.client) + implementation(projects.hypertraceCoreGraphqlGrpcUtils) + implementation(projects.hypertraceCoreGraphqlRxUtils) - annotationProcessor("org.projectlombok:lombok") - compileOnly("org.projectlombok:lombok") + annotationProcessor(commonLibs.lombok) + compileOnly(commonLibs.lombok) - testImplementation("org.junit.jupiter:junit-jupiter") - testImplementation("org.mockito:mockito-core") - testImplementation("org.mockito:mockito-junit-jupiter") + testImplementation(commonLibs.junit.jupiter) + testImplementation(commonLibs.mockito.core) + testImplementation(commonLibs.mockito.junit) } tasks.test { diff --git a/hypertrace-core-graphql-attribute-store/gradle.lockfile b/hypertrace-core-graphql-attribute-store/gradle.lockfile new file mode 100644 index 00000000..c343111c --- /dev/null +++ b/hypertrace-core-graphql-attribute-store/gradle.lockfile @@ -0,0 +1,58 @@ +# This is a Gradle generated file for dependency locking. +# Manual edits can break the build and are not advised. +# This file is expected to be part of source control. +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath +com.auth0:java-jwt:4.4.0=runtimeClasspath +com.auth0:jwks-rsa:0.22.0=runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.google.android:annotations:4.1.1.4=runtimeClasspath +com.google.api.grpc:proto-google-common-protos:2.17.0=compileClasspath,runtimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath +com.google.code.gson:gson:2.10.1=runtimeClasspath +com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath +com.google.protobuf:protobuf-java:3.24.1=compileClasspath,runtimeClasspath +com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath +com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath +com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath +io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath +io.grpc:grpc-api:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.57.2=runtimeClasspath +io.grpc:grpc-core:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-protobuf-lite:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-protobuf:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-stub:1.57.2=compileClasspath,runtimeClasspath +io.netty:netty-bom:4.1.100.Final=runtimeClasspath +io.perfmark:perfmark-api:0.26.0=runtimeClasspath +io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath +javax.annotation:javax.annotation-api:1.3.2=runtimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath +javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath +javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath +javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath +org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=compileClasspath,runtimeClasspath +org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.6=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.6=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath +org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +empty= diff --git a/hypertrace-core-graphql-common-schema/build.gradle.kts b/hypertrace-core-graphql-common-schema/build.gradle.kts index 6189ebc3..168495a4 100644 --- a/hypertrace-core-graphql-common-schema/build.gradle.kts +++ b/hypertrace-core-graphql-common-schema/build.gradle.kts @@ -1,28 +1,28 @@ plugins { `java-library` jacoco - id("org.hypertrace.jacoco-report-plugin") + alias(commonLibs.plugins.hypertrace.jacoco) } dependencies { - api("com.google.inject:guice") - api("com.graphql-java:graphql-java") - api(project(":hypertrace-core-graphql-attribute-store")) - api(project(":hypertrace-core-graphql-context")) - api("io.reactivex.rxjava3:rxjava") - api("io.github.graphql-java:graphql-java-annotations") + api(commonLibs.guice) + api(commonLibs.graphql.java) + api(projects.hypertraceCoreGraphqlAttributeStore) + api(projects.hypertraceCoreGraphqlContext) + api(commonLibs.rxjava3) + api(localLibs.graphql.annotations) - annotationProcessor("org.projectlombok:lombok") - compileOnly("org.projectlombok:lombok") + annotationProcessor(commonLibs.lombok) + compileOnly(commonLibs.lombok) - compileOnly(project(":hypertrace-core-graphql-attribute-scope-constants")) + compileOnly(projects.hypertraceCoreGraphqlAttributeScopeConstants) - implementation(project(":hypertrace-core-graphql-deserialization")) - implementation(project(":hypertrace-core-graphql-schema-utils")) + implementation(projects.hypertraceCoreGraphqlDeserialization) + implementation(projects.hypertraceCoreGraphqlSchemaUtils) - testImplementation("org.junit.jupiter:junit-jupiter") - testImplementation("org.mockito:mockito-core") - testImplementation("org.mockito:mockito-junit-jupiter") + testImplementation(commonLibs.junit.jupiter) + testImplementation(commonLibs.mockito.core) + testImplementation(commonLibs.mockito.junit) } tasks.test { diff --git a/hypertrace-core-graphql-common-schema/gradle.lockfile b/hypertrace-core-graphql-common-schema/gradle.lockfile new file mode 100644 index 00000000..de432f50 --- /dev/null +++ b/hypertrace-core-graphql-common-schema/gradle.lockfile @@ -0,0 +1,59 @@ +# This is a Gradle generated file for dependency locking. +# Manual edits can break the build and are not advised. +# This file is expected to be part of source control. +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath +com.auth0:java-jwt:4.4.0=runtimeClasspath +com.auth0:jwks-rsa:0.22.0=runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2=runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.google.android:annotations:4.1.1.4=runtimeClasspath +com.google.api.grpc:proto-google-common-protos:2.17.0=runtimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath +com.google.code.gson:gson:2.10.1=runtimeClasspath +com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath +com.google.protobuf:protobuf-java:3.24.1=runtimeClasspath +com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath +com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath +com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath +io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath +io.grpc:grpc-api:1.57.2=runtimeClasspath +io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.57.2=runtimeClasspath +io.grpc:grpc-core:1.57.2=runtimeClasspath +io.grpc:grpc-protobuf-lite:1.57.2=runtimeClasspath +io.grpc:grpc-protobuf:1.57.2=runtimeClasspath +io.grpc:grpc-stub:1.57.2=runtimeClasspath +io.netty:netty-bom:4.1.100.Final=runtimeClasspath +io.perfmark:perfmark-api:0.26.0=runtimeClasspath +io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath +javax.annotation:javax.annotation-api:1.3.2=runtimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath +javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath +javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath +javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath +org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath +org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.6=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.6=runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath +org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +empty= diff --git a/hypertrace-core-graphql-context/build.gradle.kts b/hypertrace-core-graphql-context/build.gradle.kts index 6dc6379b..02ee6d2c 100644 --- a/hypertrace-core-graphql-context/build.gradle.kts +++ b/hypertrace-core-graphql-context/build.gradle.kts @@ -1,23 +1,23 @@ plugins { `java-library` jacoco - id("org.hypertrace.jacoco-report-plugin") + alias(commonLibs.plugins.hypertrace.jacoco) } dependencies { - api("com.google.inject:guice") - api("com.graphql-java:graphql-java") - api("com.graphql-java-kickstart:graphql-java-servlet") + api(commonLibs.guice) + api(commonLibs.graphql.java) + api(localLibs.graphql.servlet) - implementation(project(":hypertrace-core-graphql-spi")) - implementation("com.google.guava:guava") + implementation(projects.hypertraceCoreGraphqlSpi) + implementation(commonLibs.guava) - annotationProcessor("org.projectlombok:lombok") - compileOnly("org.projectlombok:lombok") + annotationProcessor(commonLibs.lombok) + compileOnly(commonLibs.lombok) - testImplementation("org.junit.jupiter:junit-jupiter") - testImplementation("org.mockito:mockito-core") - testImplementation("org.mockito:mockito-junit-jupiter") + testImplementation(commonLibs.junit.jupiter) + testImplementation(commonLibs.mockito.core) + testImplementation(commonLibs.mockito.junit) } tasks.test { diff --git a/hypertrace-core-graphql-context/gradle.lockfile b/hypertrace-core-graphql-context/gradle.lockfile new file mode 100644 index 00000000..647a684c --- /dev/null +++ b/hypertrace-core-graphql-context/gradle.lockfile @@ -0,0 +1,36 @@ +# This is a Gradle generated file for dependency locking. +# Manual edits can break the build and are not advised. +# This file is expected to be part of source control. +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath +com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath +com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath +com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath +com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath +io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath +javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath +javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath +javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath +org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +empty= diff --git a/hypertrace-core-graphql-deserialization/build.gradle.kts b/hypertrace-core-graphql-deserialization/build.gradle.kts index 07490a4b..d2164986 100644 --- a/hypertrace-core-graphql-deserialization/build.gradle.kts +++ b/hypertrace-core-graphql-deserialization/build.gradle.kts @@ -1,24 +1,24 @@ plugins { `java-library` jacoco - id("org.hypertrace.jacoco-report-plugin") + alias(commonLibs.plugins.hypertrace.jacoco) } dependencies { - api("com.google.inject:guice") - api("com.fasterxml.jackson.core:jackson-databind") - api("com.graphql-java:graphql-java") + api(commonLibs.guice) + api(commonLibs.jackson.databind) + api(commonLibs.graphql.java) - annotationProcessor("org.projectlombok:lombok") - compileOnly("org.projectlombok:lombok") + annotationProcessor(commonLibs.lombok) + compileOnly(commonLibs.lombok) - implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310") - implementation("com.fasterxml.jackson.datatype:jackson-datatype-jdk8") - implementation("org.slf4j:slf4j-api") + implementation(commonLibs.jackson.datatype.jsr310) + implementation(commonLibs.jackson.datatype.jdk8) + implementation(commonLibs.slf4j2.api) - testImplementation("org.junit.jupiter:junit-jupiter") - testImplementation("org.mockito:mockito-core") - testImplementation("org.mockito:mockito-junit-jupiter") + testImplementation(commonLibs.junit.jupiter) + testImplementation(commonLibs.mockito.core) + testImplementation(commonLibs.mockito.junit) } tasks.test { diff --git a/hypertrace-core-graphql-deserialization/gradle.lockfile b/hypertrace-core-graphql-deserialization/gradle.lockfile new file mode 100644 index 00000000..0d9ba2ca --- /dev/null +++ b/hypertrace-core-graphql-deserialization/gradle.lockfile @@ -0,0 +1,30 @@ +# This is a Gradle generated file for dependency locking. +# Manual edits can break the build and are not advised. +# This file is expected to be part of source control. +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath +com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath +org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +empty= diff --git a/hypertrace-core-graphql-gateway-service-utils/build.gradle.kts b/hypertrace-core-graphql-gateway-service-utils/build.gradle.kts index ad696b43..40016ea4 100644 --- a/hypertrace-core-graphql-gateway-service-utils/build.gradle.kts +++ b/hypertrace-core-graphql-gateway-service-utils/build.gradle.kts @@ -1,20 +1,20 @@ plugins { `java-library` jacoco - id("org.hypertrace.jacoco-report-plugin") + alias(commonLibs.plugins.hypertrace.jacoco) } dependencies { - api("com.google.inject:guice") - api("org.hypertrace.gateway.service:gateway-service-api") - api(project(":hypertrace-core-graphql-attribute-store")) - api("io.reactivex.rxjava3:rxjava") - api(project(":hypertrace-core-graphql-common-schema")) - implementation(project(":hypertrace-core-graphql-grpc-utils")) + api(commonLibs.guice) + api(commonLibs.hypertrace.gatewayservice.api) + api(projects.hypertraceCoreGraphqlAttributeStore) + api(commonLibs.rxjava3) + api(projects.hypertraceCoreGraphqlCommonSchema) + implementation(projects.hypertraceCoreGraphqlGrpcUtils) - testImplementation("org.junit.jupiter:junit-jupiter") - testImplementation("org.mockito:mockito-core") - testImplementation("org.mockito:mockito-junit-jupiter") + testImplementation(commonLibs.junit.jupiter) + testImplementation(commonLibs.mockito.core) + testImplementation(commonLibs.mockito.junit) } tasks.test { diff --git a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile new file mode 100644 index 00000000..f44037cc --- /dev/null +++ b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile @@ -0,0 +1,59 @@ +# This is a Gradle generated file for dependency locking. +# Manual edits can break the build and are not advised. +# This file is expected to be part of source control. +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath +com.auth0:java-jwt:4.4.0=runtimeClasspath +com.auth0:jwks-rsa:0.22.0=runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2=runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.google.android:annotations:4.1.1.4=runtimeClasspath +com.google.api.grpc:proto-google-common-protos:2.17.0=compileClasspath,runtimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath +com.google.code.gson:gson:2.10.1=runtimeClasspath +com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath +com.google.protobuf:protobuf-java:3.24.1=compileClasspath,runtimeClasspath +com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath +com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath +com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath +io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath +io.grpc:grpc-api:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.57.2=runtimeClasspath +io.grpc:grpc-core:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-protobuf-lite:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-protobuf:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-stub:1.57.2=compileClasspath,runtimeClasspath +io.netty:netty-bom:4.1.100.Final=runtimeClasspath +io.perfmark:perfmark-api:0.26.0=runtimeClasspath +io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath +javax.annotation:javax.annotation-api:1.3.2=compileClasspath,runtimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath +javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath +javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath +javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath +org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath +org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.6=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.6=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath +org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +empty=annotationProcessor diff --git a/hypertrace-core-graphql-grpc-utils/build.gradle.kts b/hypertrace-core-graphql-grpc-utils/build.gradle.kts index b13e51f0..0cf89b3b 100644 --- a/hypertrace-core-graphql-grpc-utils/build.gradle.kts +++ b/hypertrace-core-graphql-grpc-utils/build.gradle.kts @@ -1,29 +1,29 @@ plugins { `java-library` jacoco - id("org.hypertrace.jacoco-report-plugin") + alias(commonLibs.plugins.hypertrace.jacoco) } dependencies { - api("com.google.inject:guice") - api("com.graphql-java:graphql-java") - api("io.grpc:grpc-api") - api("io.grpc:grpc-core") - api("io.grpc:grpc-stub") - api(project(":hypertrace-core-graphql-context")) - api("org.hypertrace.core.grpcutils:grpc-context-utils") + api(commonLibs.guice) + api(commonLibs.graphql.java) + api(commonLibs.grpc.api) + api(commonLibs.grpc.core) + api(commonLibs.grpc.stub) + api(projects.hypertraceCoreGraphqlContext) + api(commonLibs.hypertrace.grpcutils.context) - implementation("org.hypertrace.core.grpcutils:grpc-client-utils") - implementation("io.grpc:grpc-context") - implementation("io.reactivex.rxjava3:rxjava") - implementation("org.slf4j:slf4j-api") - implementation(project(":hypertrace-core-graphql-spi")) + implementation(commonLibs.hypertrace.grpcutils.client) + implementation(commonLibs.grpc.context) + implementation(commonLibs.rxjava3) + implementation(commonLibs.slf4j2.api) + implementation(projects.hypertraceCoreGraphqlSpi) - testImplementation("org.junit.jupiter:junit-jupiter") - testImplementation("org.mockito:mockito-core") - testImplementation("org.mockito:mockito-junit-jupiter") + testImplementation(commonLibs.junit.jupiter) + testImplementation(commonLibs.mockito.core) + testImplementation(commonLibs.mockito.junit) - testRuntimeOnly("io.grpc:grpc-netty") + testRuntimeOnly(commonLibs.grpc.netty) } tasks.test { diff --git a/hypertrace-core-graphql-grpc-utils/gradle.lockfile b/hypertrace-core-graphql-grpc-utils/gradle.lockfile new file mode 100644 index 00000000..10bcd49d --- /dev/null +++ b/hypertrace-core-graphql-grpc-utils/gradle.lockfile @@ -0,0 +1,49 @@ +# This is a Gradle generated file for dependency locking. +# Manual edits can break the build and are not advised. +# This file is expected to be part of source control. +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath +com.auth0:java-jwt:4.4.0=runtimeClasspath +com.auth0:jwks-rsa:0.22.0=runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.google.android:annotations:4.1.1.4=runtimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath +com.google.code.gson:gson:2.10.1=runtimeClasspath +com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath +com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath +com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath +com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath +io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath +io.grpc:grpc-api:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-core:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-stub:1.57.2=compileClasspath,runtimeClasspath +io.netty:netty-bom:4.1.100.Final=compileClasspath,runtimeClasspath +io.perfmark:perfmark-api:0.26.0=runtimeClasspath +io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath +javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath +javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath +javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath +org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.6=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.6=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +empty=annotationProcessor diff --git a/hypertrace-core-graphql-impl/build.gradle.kts b/hypertrace-core-graphql-impl/build.gradle.kts index c8545af6..944a8bd1 100644 --- a/hypertrace-core-graphql-impl/build.gradle.kts +++ b/hypertrace-core-graphql-impl/build.gradle.kts @@ -1,36 +1,36 @@ plugins { `java-library` jacoco - id("org.hypertrace.jacoco-report-plugin") + alias(commonLibs.plugins.hypertrace.jacoco) } dependencies { - api(project(":hypertrace-core-graphql-spi")) - api("com.graphql-java-kickstart:graphql-java-servlet") - api("org.hypertrace.core.grpcutils:grpc-client-utils") + api(projects.hypertraceCoreGraphqlSpi) + api(localLibs.graphql.servlet) + api(commonLibs.hypertrace.grpcutils.client) - implementation(project(":hypertrace-core-graphql-schema-registry")) - implementation(project(":hypertrace-core-graphql-context")) - implementation(project(":hypertrace-core-graphql-deserialization")) - implementation(project(":hypertrace-core-graphql-grpc-utils")) - implementation(project(":hypertrace-core-graphql-schema-utils")) - implementation(project(":hypertrace-core-graphql-gateway-service-utils")) - implementation(project(":hypertrace-core-graphql-attribute-store")) - implementation(project(":hypertrace-core-graphql-common-schema")) - implementation(project(":hypertrace-core-graphql-metadata-schema")) - implementation(project(":hypertrace-core-graphql-span-schema")) - implementation(project(":hypertrace-core-graphql-trace-schema")) - implementation(project(":hypertrace-core-graphql-attribute-scope")) - implementation(project(":hypertrace-core-graphql-rx-utils")) - implementation(project(":hypertrace-core-graphql-log-event-schema")) - implementation(project(":hypertrace-core-graphql-request-transformation")) + implementation(projects.hypertraceCoreGraphqlSchemaRegistry) + implementation(projects.hypertraceCoreGraphqlContext) + implementation(projects.hypertraceCoreGraphqlDeserialization) + implementation(projects.hypertraceCoreGraphqlGrpcUtils) + implementation(projects.hypertraceCoreGraphqlSchemaUtils) + implementation(projects.hypertraceCoreGraphqlGatewayServiceUtils) + implementation(projects.hypertraceCoreGraphqlAttributeStore) + implementation(projects.hypertraceCoreGraphqlCommonSchema) + implementation(projects.hypertraceCoreGraphqlMetadataSchema) + implementation(projects.hypertraceCoreGraphqlSpanSchema) + implementation(projects.hypertraceCoreGraphqlTraceSchema) + implementation(projects.hypertraceCoreGraphqlAttributeScope) + implementation(projects.hypertraceCoreGraphqlRxUtils) + implementation(projects.hypertraceCoreGraphqlLogEventSchema) + implementation(projects.hypertraceCoreGraphqlRequestTransformation) - implementation("org.slf4j:slf4j-api") - implementation("com.google.inject:guice") + implementation(commonLibs.slf4j2.api) + implementation(commonLibs.guice) - testImplementation("org.junit.jupiter:junit-jupiter") - testImplementation("org.mockito:mockito-core") - testImplementation("org.mockito:mockito-junit-jupiter") + testImplementation(commonLibs.junit.jupiter) + testImplementation(commonLibs.mockito.core) + testImplementation(commonLibs.mockito.junit) } tasks.test { diff --git a/hypertrace-core-graphql-impl/gradle.lockfile b/hypertrace-core-graphql-impl/gradle.lockfile new file mode 100644 index 00000000..3ed8e7bd --- /dev/null +++ b/hypertrace-core-graphql-impl/gradle.lockfile @@ -0,0 +1,63 @@ +# This is a Gradle generated file for dependency locking. +# Manual edits can break the build and are not advised. +# This file is expected to be part of source control. +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath +com.auth0:java-jwt:4.4.0=runtimeClasspath +com.auth0:jwks-rsa:0.22.0=runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2=runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.google.android:annotations:4.1.1.4=runtimeClasspath +com.google.api.grpc:proto-google-common-protos:2.17.0=compileClasspath,runtimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath +com.google.code.gson:gson:2.10.1=runtimeClasspath +com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath,runtimeClasspath +com.google.protobuf:protobuf-java-util:3.24.1=runtimeClasspath +com.google.protobuf:protobuf-java:3.24.1=compileClasspath,runtimeClasspath +com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath +com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath +com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath +io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath +io.grpc:grpc-api:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-core:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-protobuf-lite:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-protobuf:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-stub:1.57.2=compileClasspath,runtimeClasspath +io.netty:netty-bom:4.1.100.Final=compileClasspath,runtimeClasspath +io.opentelemetry:opentelemetry-proto:1.1.0-alpha=runtimeClasspath +io.perfmark:perfmark-api:0.26.0=runtimeClasspath +io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath +javax.annotation:javax.annotation-api:1.3.2=compileClasspath,runtimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath +javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath +javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath +javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath +org.apache.commons:commons-lang3:3.12.0=runtimeClasspath +org.apache.commons:commons-text:1.10.0=runtimeClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath +org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath +org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.6=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.6=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath +org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +empty=annotationProcessor diff --git a/hypertrace-core-graphql-log-event-schema/build.gradle.kts b/hypertrace-core-graphql-log-event-schema/build.gradle.kts index da31f39f..73805999 100644 --- a/hypertrace-core-graphql-log-event-schema/build.gradle.kts +++ b/hypertrace-core-graphql-log-event-schema/build.gradle.kts @@ -3,36 +3,36 @@ plugins { } dependencies { - api("com.google.inject:guice") - api("com.graphql-java:graphql-java") - api(project(":hypertrace-core-graphql-spi")) - api("io.github.graphql-java:graphql-java-annotations") - - annotationProcessor("org.projectlombok:lombok") - compileOnly("org.projectlombok:lombok") - - compileOnly(project(":hypertrace-core-graphql-attribute-scope-constants")) - - implementation("org.slf4j:slf4j-api") - implementation("io.reactivex.rxjava3:rxjava") - implementation("org.hypertrace.gateway.service:gateway-service-api") - implementation("com.google.protobuf:protobuf-java-util") - - implementation(project(":hypertrace-core-graphql-context")) - implementation(project(":hypertrace-core-graphql-grpc-utils")) - implementation(project(":hypertrace-core-graphql-common-schema")) - implementation(project(":hypertrace-core-graphql-attribute-store")) - implementation(project(":hypertrace-core-graphql-deserialization")) - implementation(project(":hypertrace-core-graphql-schema-utils")) - - testImplementation("org.junit.jupiter:junit-jupiter") - testImplementation("com.fasterxml.jackson.core:jackson-databind") - testImplementation(project(":hypertrace-core-graphql-gateway-service-utils")) - testImplementation("org.mockito:mockito-core") - testImplementation("org.mockito:mockito-junit-jupiter") - - testAnnotationProcessor("org.projectlombok:lombok") - testCompileOnly("org.projectlombok:lombok") + api(commonLibs.guice) + api(commonLibs.graphql.java) + api(projects.hypertraceCoreGraphqlSpi) + api(localLibs.graphql.annotations) + + annotationProcessor(commonLibs.lombok) + compileOnly(commonLibs.lombok) + + compileOnly(projects.hypertraceCoreGraphqlAttributeScopeConstants) + + implementation(commonLibs.slf4j2.api) + implementation(commonLibs.rxjava3) + implementation(commonLibs.hypertrace.gatewayservice.api) + implementation(commonLibs.protobuf.javautil) + + implementation(projects.hypertraceCoreGraphqlContext) + implementation(projects.hypertraceCoreGraphqlGrpcUtils) + implementation(projects.hypertraceCoreGraphqlCommonSchema) + implementation(projects.hypertraceCoreGraphqlAttributeStore) + implementation(projects.hypertraceCoreGraphqlDeserialization) + implementation(projects.hypertraceCoreGraphqlSchemaUtils) + + testImplementation(commonLibs.junit.jupiter) + testImplementation(commonLibs.jackson.databind) + testImplementation(projects.hypertraceCoreGraphqlGatewayServiceUtils) + testImplementation(commonLibs.mockito.core) + testImplementation(commonLibs.mockito.junit) + + testAnnotationProcessor(commonLibs.lombok) + testCompileOnly(commonLibs.lombok) } tasks.test { diff --git a/hypertrace-core-graphql-log-event-schema/gradle.lockfile b/hypertrace-core-graphql-log-event-schema/gradle.lockfile new file mode 100644 index 00000000..e62156e3 --- /dev/null +++ b/hypertrace-core-graphql-log-event-schema/gradle.lockfile @@ -0,0 +1,62 @@ +# This is a Gradle generated file for dependency locking. +# Manual edits can break the build and are not advised. +# This file is expected to be part of source control. +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath +com.auth0:java-jwt:4.4.0=runtimeClasspath +com.auth0:jwks-rsa:0.22.0=runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2=runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.google.android:annotations:4.1.1.4=runtimeClasspath +com.google.api.grpc:proto-google-common-protos:2.17.0=compileClasspath,runtimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath +com.google.code.gson:gson:2.10.1=runtimeClasspath +com.google.code.gson:gson:2.8.9=compileClasspath +com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath,runtimeClasspath +com.google.protobuf:protobuf-java-util:3.24.1=compileClasspath,runtimeClasspath +com.google.protobuf:protobuf-java:3.24.1=compileClasspath,runtimeClasspath +com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath +com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath +com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath +io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath +io.grpc:grpc-api:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.57.2=runtimeClasspath +io.grpc:grpc-core:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-protobuf-lite:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-protobuf:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-stub:1.57.2=compileClasspath,runtimeClasspath +io.netty:netty-bom:4.1.100.Final=runtimeClasspath +io.perfmark:perfmark-api:0.26.0=runtimeClasspath +io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath +javax.annotation:javax.annotation-api:1.3.2=compileClasspath,runtimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath +javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath +javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath +javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath +org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath +org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.6=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.6=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath +org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath +org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +empty= diff --git a/hypertrace-core-graphql-metadata-schema/build.gradle.kts b/hypertrace-core-graphql-metadata-schema/build.gradle.kts index 970c2f1f..cf412bf9 100644 --- a/hypertrace-core-graphql-metadata-schema/build.gradle.kts +++ b/hypertrace-core-graphql-metadata-schema/build.gradle.kts @@ -1,27 +1,27 @@ plugins { `java-library` jacoco - id("org.hypertrace.jacoco-report-plugin") + alias(commonLibs.plugins.hypertrace.jacoco) } dependencies { - api("com.google.inject:guice") - api("com.graphql-java:graphql-java") - api(project(":hypertrace-core-graphql-spi")) - api("io.github.graphql-java:graphql-java-annotations") + api(commonLibs.guice) + api(commonLibs.graphql.java) + api(projects.hypertraceCoreGraphqlSpi) + api(localLibs.graphql.annotations) - annotationProcessor("org.projectlombok:lombok") - compileOnly("org.projectlombok:lombok") + annotationProcessor(commonLibs.lombok) + compileOnly(commonLibs.lombok) - implementation("org.slf4j:slf4j-api") - implementation("io.reactivex.rxjava3:rxjava") - implementation(project(":hypertrace-core-graphql-context")) - implementation(project(":hypertrace-core-graphql-common-schema")) - implementation(project(":hypertrace-core-graphql-attribute-store")) + implementation(commonLibs.slf4j2.api) + implementation(commonLibs.rxjava3) + implementation(projects.hypertraceCoreGraphqlContext) + implementation(projects.hypertraceCoreGraphqlCommonSchema) + implementation(projects.hypertraceCoreGraphqlAttributeStore) - testImplementation("org.junit.jupiter:junit-jupiter") - testImplementation("org.mockito:mockito-core") - testImplementation("org.mockito:mockito-junit-jupiter") + testImplementation(commonLibs.junit.jupiter) + testImplementation(commonLibs.mockito.core) + testImplementation(commonLibs.mockito.junit) } tasks.test { diff --git a/hypertrace-core-graphql-metadata-schema/gradle.lockfile b/hypertrace-core-graphql-metadata-schema/gradle.lockfile new file mode 100644 index 00000000..de432f50 --- /dev/null +++ b/hypertrace-core-graphql-metadata-schema/gradle.lockfile @@ -0,0 +1,59 @@ +# This is a Gradle generated file for dependency locking. +# Manual edits can break the build and are not advised. +# This file is expected to be part of source control. +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath +com.auth0:java-jwt:4.4.0=runtimeClasspath +com.auth0:jwks-rsa:0.22.0=runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2=runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.google.android:annotations:4.1.1.4=runtimeClasspath +com.google.api.grpc:proto-google-common-protos:2.17.0=runtimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath +com.google.code.gson:gson:2.10.1=runtimeClasspath +com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath +com.google.protobuf:protobuf-java:3.24.1=runtimeClasspath +com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath +com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath +com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath +io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath +io.grpc:grpc-api:1.57.2=runtimeClasspath +io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.57.2=runtimeClasspath +io.grpc:grpc-core:1.57.2=runtimeClasspath +io.grpc:grpc-protobuf-lite:1.57.2=runtimeClasspath +io.grpc:grpc-protobuf:1.57.2=runtimeClasspath +io.grpc:grpc-stub:1.57.2=runtimeClasspath +io.netty:netty-bom:4.1.100.Final=runtimeClasspath +io.perfmark:perfmark-api:0.26.0=runtimeClasspath +io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath +javax.annotation:javax.annotation-api:1.3.2=runtimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath +javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath +javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath +javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath +org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath +org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.6=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.6=runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath +org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +empty= diff --git a/hypertrace-core-graphql-platform/build.gradle.kts b/hypertrace-core-graphql-platform/build.gradle.kts deleted file mode 100644 index 08afb5fc..00000000 --- a/hypertrace-core-graphql-platform/build.gradle.kts +++ /dev/null @@ -1,45 +0,0 @@ -plugins { - `java-platform` -} - -javaPlatform { - allowDependencies() -} - -val attributeServiceVersion: String = "0.14.14" - -dependencies { - api(platform("io.grpc:grpc-bom:1.57.2")) - api(platform("com.fasterxml.jackson:jackson-bom:2.15.2")) - constraints { - - api("org.hypertrace.core.grpcutils:grpc-context-utils:0.12.6") - api("org.hypertrace.core.grpcutils:grpc-client-utils:0.12.6") - api("org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6") - api("org.hypertrace.gateway.service:gateway-service-api:0.3.2") - api("org.hypertrace.core.serviceframework:platform-http-service-framework:0.1.62") - api("org.hypertrace.core.attribute.service:caching-attribute-service-client:${attributeServiceVersion}") - api("org.hypertrace.core.attribute.service:attribute-service-api:${attributeServiceVersion}") - - api("com.google.inject:guice:5.1.0") - api("com.graphql-java:graphql-java:19.6") - api("io.github.graphql-java:graphql-java-annotations:9.1") - api("org.slf4j:slf4j-api:1.7.36") - api("io.reactivex.rxjava3:rxjava:3.1.6") - api("com.google.protobuf:protobuf-java-util:3.21.7") - - api("org.projectlombok:lombok:1.18.24") - api("com.google.code.findbugs:jsr305:3.0.2") - api("com.typesafe:config:1.4.2") - api("com.google.guava:guava:32.1.2-jre") - api("com.graphql-java-kickstart:graphql-java-servlet:14.0.0") - - api("com.fasterxml.jackson.core:jackson-databind") - api("com.fasterxml.jackson.datatype:jackson-datatype-jsr310") - api("com.fasterxml.jackson.datatype:jackson-datatype-jdk8") - api("org.apache.commons:commons-text:1.10.0") - api("io.opentelemetry:opentelemetry-proto:1.1.0-alpha") - - runtime("org.apache.logging.log4j:log4j-slf4j-impl:2.20.0") - } -} diff --git a/hypertrace-core-graphql-request-transformation/build.gradle.kts b/hypertrace-core-graphql-request-transformation/build.gradle.kts index 7318704c..aa9d0684 100644 --- a/hypertrace-core-graphql-request-transformation/build.gradle.kts +++ b/hypertrace-core-graphql-request-transformation/build.gradle.kts @@ -1,17 +1,17 @@ plugins { `java-library` jacoco - id("org.hypertrace.jacoco-report-plugin") + alias(commonLibs.plugins.hypertrace.jacoco) } dependencies { - api("com.google.inject:guice") - api(project(":hypertrace-core-graphql-common-schema")) + api(commonLibs.guice) + api(projects.hypertraceCoreGraphqlCommonSchema) - testAnnotationProcessor("org.projectlombok:lombok") - testCompileOnly("org.projectlombok:lombok") - testImplementation("org.junit.jupiter:junit-jupiter") - testImplementation("org.mockito:mockito-core") + testAnnotationProcessor(commonLibs.lombok) + testCompileOnly(commonLibs.lombok) + testImplementation(commonLibs.junit.jupiter) + testImplementation(commonLibs.mockito.core) } tasks.test { diff --git a/hypertrace-core-graphql-request-transformation/gradle.lockfile b/hypertrace-core-graphql-request-transformation/gradle.lockfile new file mode 100644 index 00000000..ef4733cc --- /dev/null +++ b/hypertrace-core-graphql-request-transformation/gradle.lockfile @@ -0,0 +1,58 @@ +# This is a Gradle generated file for dependency locking. +# Manual edits can break the build and are not advised. +# This file is expected to be part of source control. +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath +com.auth0:java-jwt:4.4.0=runtimeClasspath +com.auth0:jwks-rsa:0.22.0=runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2=runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.google.android:annotations:4.1.1.4=runtimeClasspath +com.google.api.grpc:proto-google-common-protos:2.17.0=runtimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath +com.google.code.gson:gson:2.10.1=runtimeClasspath +com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath +com.google.protobuf:protobuf-java:3.24.1=runtimeClasspath +com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath +com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath +com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath +io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath +io.grpc:grpc-api:1.57.2=runtimeClasspath +io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.57.2=runtimeClasspath +io.grpc:grpc-core:1.57.2=runtimeClasspath +io.grpc:grpc-protobuf-lite:1.57.2=runtimeClasspath +io.grpc:grpc-protobuf:1.57.2=runtimeClasspath +io.grpc:grpc-stub:1.57.2=runtimeClasspath +io.netty:netty-bom:4.1.100.Final=runtimeClasspath +io.perfmark:perfmark-api:0.26.0=runtimeClasspath +io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath +javax.annotation:javax.annotation-api:1.3.2=runtimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath +javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath +javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath +javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath +org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath +org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.6=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.6=runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +empty=annotationProcessor diff --git a/hypertrace-core-graphql-rx-utils/build.gradle.kts b/hypertrace-core-graphql-rx-utils/build.gradle.kts index 6c0f13de..39ebc699 100644 --- a/hypertrace-core-graphql-rx-utils/build.gradle.kts +++ b/hypertrace-core-graphql-rx-utils/build.gradle.kts @@ -3,8 +3,8 @@ plugins { } dependencies { - api("io.reactivex.rxjava3:rxjava") - api("com.google.inject:guice") - implementation(project(":hypertrace-core-graphql-spi")) - implementation("com.google.guava:guava") + api(commonLibs.rxjava3) + api(commonLibs.guice) + implementation(projects.hypertraceCoreGraphqlSpi) + implementation(commonLibs.guava) } diff --git a/hypertrace-core-graphql-rx-utils/gradle.lockfile b/hypertrace-core-graphql-rx-utils/gradle.lockfile new file mode 100644 index 00000000..84349b81 --- /dev/null +++ b/hypertrace-core-graphql-rx-utils/gradle.lockfile @@ -0,0 +1,28 @@ +# This is a Gradle generated file for dependency locking. +# Manual edits can break the build and are not advised. +# This file is expected to be part of source control. +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath +com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath +com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath +io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath +io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath +javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +empty=annotationProcessor diff --git a/hypertrace-core-graphql-schema-registry/build.gradle.kts b/hypertrace-core-graphql-schema-registry/build.gradle.kts index b34bbc06..3350af49 100644 --- a/hypertrace-core-graphql-schema-registry/build.gradle.kts +++ b/hypertrace-core-graphql-schema-registry/build.gradle.kts @@ -1,21 +1,21 @@ plugins { `java-library` jacoco - id("org.hypertrace.jacoco-report-plugin") + alias(commonLibs.plugins.hypertrace.jacoco) } dependencies { - api("com.graphql-java:graphql-java") + api(commonLibs.graphql.java) - implementation("org.slf4j:slf4j-api") - implementation("com.google.inject:guice") + implementation(commonLibs.slf4j2.api) + implementation(commonLibs.guice) - implementation(project(":hypertrace-core-graphql-spi")) - implementation("io.github.graphql-java:graphql-java-annotations") + implementation(projects.hypertraceCoreGraphqlSpi) + implementation(localLibs.graphql.annotations) - testImplementation("org.junit.jupiter:junit-jupiter") - testImplementation("org.mockito:mockito-core") - testImplementation("org.mockito:mockito-junit-jupiter") + testImplementation(commonLibs.junit.jupiter) + testImplementation(commonLibs.mockito.core) + testImplementation(commonLibs.mockito.junit) } tasks.test { diff --git a/hypertrace-core-graphql-schema-registry/gradle.lockfile b/hypertrace-core-graphql-schema-registry/gradle.lockfile new file mode 100644 index 00000000..06172458 --- /dev/null +++ b/hypertrace-core-graphql-schema-registry/gradle.lockfile @@ -0,0 +1,27 @@ +# This is a Gradle generated file for dependency locking. +# Manual edits can break the build and are not advised. +# This file is expected to be part of source control. +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath +com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath +com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath +io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath +javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +empty=annotationProcessor diff --git a/hypertrace-core-graphql-schema-utils/build.gradle.kts b/hypertrace-core-graphql-schema-utils/build.gradle.kts index f0987561..3c5a7dac 100644 --- a/hypertrace-core-graphql-schema-utils/build.gradle.kts +++ b/hypertrace-core-graphql-schema-utils/build.gradle.kts @@ -1,19 +1,19 @@ plugins { `java-library` jacoco - id("org.hypertrace.jacoco-report-plugin") + alias(commonLibs.plugins.hypertrace.jacoco) } dependencies { - api("com.google.inject:guice") - api("com.graphql-java:graphql-java") + api(commonLibs.guice) + api(commonLibs.graphql.java) - annotationProcessor("org.projectlombok:lombok") - compileOnly("org.projectlombok:lombok") + annotationProcessor(commonLibs.lombok) + compileOnly(commonLibs.lombok) - testImplementation("org.junit.jupiter:junit-jupiter") - testImplementation("org.mockito:mockito-core") - testImplementation("org.mockito:mockito-junit-jupiter") + testImplementation(commonLibs.junit.jupiter) + testImplementation(commonLibs.mockito.core) + testImplementation(commonLibs.mockito.junit) } tasks.test { diff --git a/hypertrace-core-graphql-schema-utils/gradle.lockfile b/hypertrace-core-graphql-schema-utils/gradle.lockfile new file mode 100644 index 00000000..cb9c96a1 --- /dev/null +++ b/hypertrace-core-graphql-schema-utils/gradle.lockfile @@ -0,0 +1,25 @@ +# This is a Gradle generated file for dependency locking. +# Manual edits can break the build and are not advised. +# This file is expected to be part of source control. +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath +com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath +org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +empty= diff --git a/hypertrace-core-graphql-service/build.gradle.kts b/hypertrace-core-graphql-service/build.gradle.kts index 77bb83fc..2426bb5d 100644 --- a/hypertrace-core-graphql-service/build.gradle.kts +++ b/hypertrace-core-graphql-service/build.gradle.kts @@ -1,22 +1,20 @@ plugins { java application - id("org.hypertrace.docker-java-application-plugin") - id("org.hypertrace.docker-publish-plugin") + alias(commonLibs.plugins.hypertrace.docker.application) + alias(commonLibs.plugins.hypertrace.docker.publish) } dependencies { - implementation(platform(project(":hypertrace-core-graphql-platform"))) + implementation(commonLibs.hypertrace.framework.http) + implementation(commonLibs.slf4j2.api) - implementation("org.hypertrace.core.serviceframework:platform-http-service-framework") - implementation("org.slf4j:slf4j-api") + implementation(localLibs.graphql.servlet) + implementation(projects.hypertraceCoreGraphqlImpl) + implementation(projects.hypertraceCoreGraphqlSpi) - implementation("com.graphql-java-kickstart:graphql-java-servlet") - implementation(project(":hypertrace-core-graphql-impl")) - implementation(project(":hypertrace-core-graphql-spi")) - - runtimeOnly("org.apache.logging.log4j:log4j-slf4j-impl") - runtimeOnly("io.grpc:grpc-netty") + runtimeOnly(commonLibs.log4j.slf4j2.impl) + runtimeOnly(commonLibs.grpc.netty) } application { diff --git a/hypertrace-core-graphql-service/gradle.lockfile b/hypertrace-core-graphql-service/gradle.lockfile new file mode 100644 index 00000000..0175a9d2 --- /dev/null +++ b/hypertrace-core-graphql-service/gradle.lockfile @@ -0,0 +1,122 @@ +# This is a Gradle generated file for dependency locking. +# Manual edits can break the build and are not advised. +# This file is expected to be part of source control. +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath +com.auth0:java-jwt:4.4.0=runtimeClasspath +com.auth0:jwks-rsa:0.22.0=runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2=runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.google.android:annotations:4.1.1.4=runtimeClasspath +com.google.api.grpc:proto-google-common-protos:2.17.0=runtimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath +com.google.code.gson:gson:2.10.1=runtimeClasspath +com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath +com.google.inject.extensions:guice-servlet:5.1.0=runtimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath,runtimeClasspath +com.google.protobuf:protobuf-java-util:3.24.1=runtimeClasspath +com.google.protobuf:protobuf-java:3.24.1=runtimeClasspath +com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath +com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath +com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath +com.helger:profiler:1.1.1=runtimeClasspath +com.typesafe:config:1.4.2=compileClasspath,runtimeClasspath +commons-codec:commons-codec:1.15=runtimeClasspath +commons-logging:commons-logging:1.2=runtimeClasspath +io.dropwizard.metrics:metrics-core:4.2.16=runtimeClasspath +io.dropwizard.metrics:metrics-healthchecks:4.2.16=runtimeClasspath +io.dropwizard.metrics:metrics-json:4.2.16=runtimeClasspath +io.dropwizard.metrics:metrics-jvm:4.2.16=runtimeClasspath +io.dropwizard.metrics:metrics-servlets:4.2.16=runtimeClasspath +io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath +io.github.mweirauch:micrometer-jvm-extras:0.2.2=runtimeClasspath +io.grpc:grpc-api:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-core:1.57.2=runtimeClasspath +io.grpc:grpc-netty:1.57.2=runtimeClasspath +io.grpc:grpc-protobuf-lite:1.57.2=runtimeClasspath +io.grpc:grpc-protobuf:1.57.2=runtimeClasspath +io.grpc:grpc-stub:1.57.2=runtimeClasspath +io.micrometer:micrometer-commons:1.10.2=runtimeClasspath +io.micrometer:micrometer-core:1.10.2=runtimeClasspath +io.micrometer:micrometer-observation:1.10.2=runtimeClasspath +io.micrometer:micrometer-registry-prometheus:1.10.2=runtimeClasspath +io.netty:netty-bom:4.1.100.Final=compileClasspath,runtimeClasspath +io.netty:netty-buffer:4.1.100.Final=runtimeClasspath +io.netty:netty-codec-http2:4.1.100.Final=runtimeClasspath +io.netty:netty-codec-http:4.1.100.Final=runtimeClasspath +io.netty:netty-codec-socks:4.1.100.Final=runtimeClasspath +io.netty:netty-codec:4.1.100.Final=runtimeClasspath +io.netty:netty-common:4.1.100.Final=runtimeClasspath +io.netty:netty-handler-proxy:4.1.100.Final=runtimeClasspath +io.netty:netty-handler:4.1.100.Final=runtimeClasspath +io.netty:netty-resolver:4.1.100.Final=runtimeClasspath +io.netty:netty-transport-native-unix-common:4.1.100.Final=runtimeClasspath +io.netty:netty-transport:4.1.100.Final=runtimeClasspath +io.opentelemetry:opentelemetry-proto:1.1.0-alpha=runtimeClasspath +io.perfmark:perfmark-api:0.26.0=runtimeClasspath +io.prometheus:simpleclient:0.16.0=runtimeClasspath +io.prometheus:simpleclient_common:0.16.0=runtimeClasspath +io.prometheus:simpleclient_dropwizard:0.12.0=runtimeClasspath +io.prometheus:simpleclient_pushgateway:0.12.0=runtimeClasspath +io.prometheus:simpleclient_servlet:0.12.0=runtimeClasspath +io.prometheus:simpleclient_servlet_common:0.12.0=runtimeClasspath +io.prometheus:simpleclient_tracer_common:0.16.0=runtimeClasspath +io.prometheus:simpleclient_tracer_otel:0.16.0=runtimeClasspath +io.prometheus:simpleclient_tracer_otel_agent:0.16.0=runtimeClasspath +io.reactivex.rxjava3:rxjava:3.1.7=runtimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath +javax.annotation:javax.annotation-api:1.3.2=runtimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath +javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath +javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath +javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath +javax.xml.bind:jaxb-api:2.3.0=runtimeClasspath +org.apache.commons:commons-lang3:3.12.0=runtimeClasspath +org.apache.commons:commons-text:1.10.0=runtimeClasspath +org.apache.httpcomponents:httpclient:4.5.13=runtimeClasspath +org.apache.httpcomponents:httpcore:4.4.13=runtimeClasspath +org.apache.logging.log4j:log4j-api:2.20.0=runtimeClasspath +org.apache.logging.log4j:log4j-core:2.20.0=runtimeClasspath +org.apache.logging.log4j:log4j-slf4j-impl:2.19.0=runtimeClasspath +org.apache.logging.log4j:log4j-slf4j2-impl:2.20.0=runtimeClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath +org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath +org.eclipse.jetty:jetty-continuation:9.4.53.v20231009=runtimeClasspath +org.eclipse.jetty:jetty-http:9.4.53.v20231009=runtimeClasspath +org.eclipse.jetty:jetty-io:9.4.53.v20231009=runtimeClasspath +org.eclipse.jetty:jetty-security:9.4.53.v20231009=runtimeClasspath +org.eclipse.jetty:jetty-server:9.4.53.v20231009=runtimeClasspath +org.eclipse.jetty:jetty-servlet:9.4.53.v20231009=runtimeClasspath +org.eclipse.jetty:jetty-servlets:9.4.53.v20231009=runtimeClasspath +org.eclipse.jetty:jetty-util-ajax:9.4.53.v20231009=runtimeClasspath +org.eclipse.jetty:jetty-util:9.4.53.v20231009=runtimeClasspath +org.hdrhistogram:HdrHistogram:2.1.12=runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath +org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.6=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.6=runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.core.serviceframework:platform-http-service-framework:0.1.62=compileClasspath,runtimeClasspath +org.hypertrace.core.serviceframework:platform-metrics:0.1.62=runtimeClasspath +org.hypertrace.core.serviceframework:platform-service-framework:0.1.62=compileClasspath,runtimeClasspath +org.hypertrace.core.serviceframework:service-framework-spi:0.1.62=compileClasspath,runtimeClasspath +org.hypertrace.gateway.service:gateway-service-api:0.3.9=runtimeClasspath +org.latencyutils:LatencyUtils:2.0.3=runtimeClasspath +org.reactivestreams:reactive-streams:1.0.3=compileClasspath +org.reactivestreams:reactive-streams:1.0.4=runtimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +empty=annotationProcessor diff --git a/hypertrace-core-graphql-span-schema/build.gradle.kts b/hypertrace-core-graphql-span-schema/build.gradle.kts index 1123df2b..ba4fd0c4 100644 --- a/hypertrace-core-graphql-span-schema/build.gradle.kts +++ b/hypertrace-core-graphql-span-schema/build.gradle.kts @@ -3,41 +3,41 @@ plugins { } dependencies { - api("com.google.inject:guice") - api("com.graphql-java:graphql-java") - api(project(":hypertrace-core-graphql-spi")) - api("io.github.graphql-java:graphql-java-annotations") - - annotationProcessor("org.projectlombok:lombok") - compileOnly("org.projectlombok:lombok") - - compileOnly(project(":hypertrace-core-graphql-attribute-scope-constants")) - - implementation("org.slf4j:slf4j-api") - implementation("io.reactivex.rxjava3:rxjava") - implementation("org.hypertrace.gateway.service:gateway-service-api") - implementation("com.google.protobuf:protobuf-java-util") - implementation("io.opentelemetry:opentelemetry-proto") - implementation("org.apache.commons:commons-text") - - implementation(project(":hypertrace-core-graphql-context")) - implementation(project(":hypertrace-core-graphql-grpc-utils")) - implementation(project(":hypertrace-core-graphql-common-schema")) - implementation(project(":hypertrace-core-graphql-attribute-store")) - implementation(project(":hypertrace-core-graphql-log-event-schema")) - implementation(project(":hypertrace-core-graphql-deserialization")) - implementation(project(":hypertrace-core-graphql-schema-utils")) - implementation(project(":hypertrace-core-graphql-attribute-scope-constants")) - implementation(project(":hypertrace-core-graphql-request-transformation")) - - testImplementation("org.junit.jupiter:junit-jupiter") - testImplementation("com.fasterxml.jackson.core:jackson-databind") - testImplementation(project(":hypertrace-core-graphql-gateway-service-utils")) - testImplementation("org.mockito:mockito-core") - testImplementation("org.mockito:mockito-junit-jupiter") - - testAnnotationProcessor("org.projectlombok:lombok") - testCompileOnly("org.projectlombok:lombok") + api(commonLibs.guice) + api(commonLibs.graphql.java) + api(projects.hypertraceCoreGraphqlSpi) + api(localLibs.graphql.annotations) + + annotationProcessor(commonLibs.lombok) + compileOnly(commonLibs.lombok) + + compileOnly(projects.hypertraceCoreGraphqlAttributeScopeConstants) + + implementation(commonLibs.slf4j2.api) + implementation(commonLibs.rxjava3) + implementation(commonLibs.hypertrace.gatewayservice.api) + implementation(commonLibs.protobuf.javautil) + implementation(localLibs.opentelemetry.proto) + implementation(commonLibs.commons.text) + + implementation(projects.hypertraceCoreGraphqlContext) + implementation(projects.hypertraceCoreGraphqlGrpcUtils) + implementation(projects.hypertraceCoreGraphqlCommonSchema) + implementation(projects.hypertraceCoreGraphqlAttributeStore) + implementation(projects.hypertraceCoreGraphqlLogEventSchema) + implementation(projects.hypertraceCoreGraphqlDeserialization) + implementation(projects.hypertraceCoreGraphqlSchemaUtils) + implementation(projects.hypertraceCoreGraphqlAttributeScopeConstants) + implementation(projects.hypertraceCoreGraphqlRequestTransformation) + + testImplementation(commonLibs.junit.jupiter) + testImplementation(commonLibs.jackson.databind) + testImplementation(projects.hypertraceCoreGraphqlGatewayServiceUtils) + testImplementation(commonLibs.mockito.core) + testImplementation(commonLibs.mockito.junit) + + testAnnotationProcessor(commonLibs.lombok) + testCompileOnly(commonLibs.lombok) } tasks.test { diff --git a/hypertrace-core-graphql-span-schema/gradle.lockfile b/hypertrace-core-graphql-span-schema/gradle.lockfile new file mode 100644 index 00000000..5f7057a7 --- /dev/null +++ b/hypertrace-core-graphql-span-schema/gradle.lockfile @@ -0,0 +1,65 @@ +# This is a Gradle generated file for dependency locking. +# Manual edits can break the build and are not advised. +# This file is expected to be part of source control. +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath +com.auth0:java-jwt:4.4.0=runtimeClasspath +com.auth0:jwks-rsa:0.22.0=runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2=runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.google.android:annotations:4.1.1.4=runtimeClasspath +com.google.api.grpc:proto-google-common-protos:2.17.0=compileClasspath,runtimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath +com.google.code.gson:gson:2.10.1=runtimeClasspath +com.google.code.gson:gson:2.8.9=compileClasspath +com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath,runtimeClasspath +com.google.protobuf:protobuf-java-util:3.24.1=compileClasspath,runtimeClasspath +com.google.protobuf:protobuf-java:3.24.1=compileClasspath,runtimeClasspath +com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath +com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath +com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath +io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath +io.grpc:grpc-api:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.57.2=runtimeClasspath +io.grpc:grpc-core:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-protobuf-lite:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-protobuf:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-stub:1.57.2=compileClasspath,runtimeClasspath +io.netty:netty-bom:4.1.100.Final=runtimeClasspath +io.opentelemetry:opentelemetry-proto:1.1.0-alpha=compileClasspath,runtimeClasspath +io.perfmark:perfmark-api:0.26.0=runtimeClasspath +io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath +javax.annotation:javax.annotation-api:1.3.2=compileClasspath,runtimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath +javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath +javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath +javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath +org.apache.commons:commons-lang3:3.12.0=compileClasspath,runtimeClasspath +org.apache.commons:commons-text:1.10.0=compileClasspath,runtimeClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath +org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath +org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.6=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.6=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath +org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath +org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +empty= diff --git a/hypertrace-core-graphql-spi/build.gradle.kts b/hypertrace-core-graphql-spi/build.gradle.kts index 3de1e282..543f129a 100644 --- a/hypertrace-core-graphql-spi/build.gradle.kts +++ b/hypertrace-core-graphql-spi/build.gradle.kts @@ -3,7 +3,7 @@ plugins { } dependencies { - api("com.graphql-java:graphql-java") - api("io.github.graphql-java:graphql-java-annotations") - api("com.google.code.findbugs:jsr305") + api(commonLibs.graphql.java) + api(localLibs.graphql.annotations) + api(commonLibs.jsr305) } diff --git a/hypertrace-core-graphql-spi/gradle.lockfile b/hypertrace-core-graphql-spi/gradle.lockfile new file mode 100644 index 00000000..0466d657 --- /dev/null +++ b/hypertrace-core-graphql-spi/gradle.lockfile @@ -0,0 +1,16 @@ +# This is a Gradle generated file for dependency locking. +# Manual edits can break the build and are not advised. +# This file is expected to be part of source control. +com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath +com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath +io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath +javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +empty=annotationProcessor diff --git a/hypertrace-core-graphql-test-platform/build.gradle.kts b/hypertrace-core-graphql-test-platform/build.gradle.kts deleted file mode 100644 index 3def9244..00000000 --- a/hypertrace-core-graphql-test-platform/build.gradle.kts +++ /dev/null @@ -1,11 +0,0 @@ -plugins { - `java-platform` -} - -dependencies { - constraints { - api("org.junit.jupiter:junit-jupiter:5.7.0") - api("org.mockito:mockito-core:3.7.7") - api("org.mockito:mockito-junit-jupiter:3.7.7") - } -} diff --git a/hypertrace-core-graphql-trace-schema/build.gradle.kts b/hypertrace-core-graphql-trace-schema/build.gradle.kts index f1a9e9f9..580afab1 100644 --- a/hypertrace-core-graphql-trace-schema/build.gradle.kts +++ b/hypertrace-core-graphql-trace-schema/build.gradle.kts @@ -3,26 +3,26 @@ plugins { } dependencies { - api("com.google.inject:guice") - api("com.graphql-java:graphql-java") - api(project(":hypertrace-core-graphql-spi")) - api("io.github.graphql-java:graphql-java-annotations") + api(commonLibs.guice) + api(commonLibs.graphql.java) + api(projects.hypertraceCoreGraphqlSpi) + api(localLibs.graphql.annotations) - annotationProcessor("org.projectlombok:lombok") - compileOnly("org.projectlombok:lombok") + annotationProcessor(commonLibs.lombok) + compileOnly(commonLibs.lombok) - compileOnly(project(":hypertrace-core-graphql-attribute-scope-constants")) + compileOnly(projects.hypertraceCoreGraphqlAttributeScopeConstants) - implementation("org.slf4j:slf4j-api") - implementation("io.reactivex.rxjava3:rxjava") - implementation("org.hypertrace.gateway.service:gateway-service-api") - implementation("com.google.protobuf:protobuf-java-util") + implementation(commonLibs.slf4j2.api) + implementation(commonLibs.rxjava3) + implementation(commonLibs.hypertrace.gatewayservice.api) + implementation(commonLibs.protobuf.javautil) - implementation(project(":hypertrace-core-graphql-context")) - implementation(project(":hypertrace-core-graphql-grpc-utils")) - implementation(project(":hypertrace-core-graphql-common-schema")) - implementation(project(":hypertrace-core-graphql-attribute-store")) - implementation(project(":hypertrace-core-graphql-deserialization")) - implementation(project(":hypertrace-core-graphql-request-transformation")) - implementation(project(":hypertrace-core-graphql-schema-utils")) + implementation(projects.hypertraceCoreGraphqlContext) + implementation(projects.hypertraceCoreGraphqlGrpcUtils) + implementation(projects.hypertraceCoreGraphqlCommonSchema) + implementation(projects.hypertraceCoreGraphqlAttributeStore) + implementation(projects.hypertraceCoreGraphqlDeserialization) + implementation(projects.hypertraceCoreGraphqlRequestTransformation) + implementation(projects.hypertraceCoreGraphqlSchemaUtils) } diff --git a/hypertrace-core-graphql-trace-schema/gradle.lockfile b/hypertrace-core-graphql-trace-schema/gradle.lockfile new file mode 100644 index 00000000..e62156e3 --- /dev/null +++ b/hypertrace-core-graphql-trace-schema/gradle.lockfile @@ -0,0 +1,62 @@ +# This is a Gradle generated file for dependency locking. +# Manual edits can break the build and are not advised. +# This file is expected to be part of source control. +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath +com.auth0:java-jwt:4.4.0=runtimeClasspath +com.auth0:jwks-rsa:0.22.0=runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2=runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.google.android:annotations:4.1.1.4=runtimeClasspath +com.google.api.grpc:proto-google-common-protos:2.17.0=compileClasspath,runtimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath +com.google.code.gson:gson:2.10.1=runtimeClasspath +com.google.code.gson:gson:2.8.9=compileClasspath +com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath,runtimeClasspath +com.google.protobuf:protobuf-java-util:3.24.1=compileClasspath,runtimeClasspath +com.google.protobuf:protobuf-java:3.24.1=compileClasspath,runtimeClasspath +com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath +com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath +com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath +io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath +io.grpc:grpc-api:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.57.2=runtimeClasspath +io.grpc:grpc-core:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-protobuf-lite:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-protobuf:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-stub:1.57.2=compileClasspath,runtimeClasspath +io.netty:netty-bom:4.1.100.Final=runtimeClasspath +io.perfmark:perfmark-api:0.26.0=runtimeClasspath +io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath +javax.annotation:javax.annotation-api:1.3.2=compileClasspath,runtimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath +javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath +javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath +javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath +org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath +org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.6=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.6=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath +org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath +org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +empty= diff --git a/settings.gradle.kts b/settings.gradle.kts index c8213583..c92abf93 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,3 +1,5 @@ +import org.hypertrace.gradle.dependency.DependencyPluginSettingExtension + rootProject.name = "hypertrace-core-graphql-root" pluginManagement { @@ -10,8 +12,15 @@ pluginManagement { plugins { id("org.hypertrace.version-settings") version "0.2.0" + id("org.hypertrace.dependency-settings") version "0.1.1" +} + +configure { + catalogVersion.set("0.2.10") } +enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") + include(":hypertrace-core-graphql-service") include(":hypertrace-core-graphql-impl") include(":hypertrace-core-graphql-spi") @@ -29,7 +38,5 @@ include(":hypertrace-core-graphql-trace-schema") include(":hypertrace-core-graphql-attribute-scope") include(":hypertrace-core-graphql-attribute-scope-constants") include(":hypertrace-core-graphql-rx-utils") -include(":hypertrace-core-graphql-platform") -include(":hypertrace-core-graphql-test-platform") include(":hypertrace-core-graphql-log-event-schema") include(":hypertrace-core-graphql-request-transformation") \ No newline at end of file From 1e97a95b44b1b9ea74d34e65c86125b61a61375b Mon Sep 17 00:00:00 2001 From: "hypertrace-ci-app[bot]" <145367492+hypertrace-ci-app[bot]@users.noreply.github.com> Date: Fri, 10 Nov 2023 09:29:27 -0500 Subject: [PATCH 141/173] Update gradle locks (#149) Co-authored-by: aaron-steinfeld --- .../gradle.lockfile | 2 +- hypertrace-core-graphql-attribute-scope/gradle.lockfile | 2 +- hypertrace-core-graphql-attribute-store/gradle.lockfile | 2 +- hypertrace-core-graphql-common-schema/gradle.lockfile | 2 +- hypertrace-core-graphql-context/gradle.lockfile | 2 +- hypertrace-core-graphql-deserialization/gradle.lockfile | 2 +- hypertrace-core-graphql-gateway-service-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-grpc-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-impl/gradle.lockfile | 2 +- hypertrace-core-graphql-log-event-schema/gradle.lockfile | 2 +- hypertrace-core-graphql-metadata-schema/gradle.lockfile | 2 +- hypertrace-core-graphql-request-transformation/gradle.lockfile | 2 +- hypertrace-core-graphql-rx-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-schema-registry/gradle.lockfile | 2 +- hypertrace-core-graphql-schema-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-service/gradle.lockfile | 2 +- hypertrace-core-graphql-span-schema/gradle.lockfile | 2 +- hypertrace-core-graphql-spi/gradle.lockfile | 2 +- hypertrace-core-graphql-trace-schema/gradle.lockfile | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile index 97056d40..c65ff409 100644 --- a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile @@ -3,6 +3,6 @@ # This file is expected to be part of source control. com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-attribute-scope/gradle.lockfile b/hypertrace-core-graphql-attribute-scope/gradle.lockfile index ef4733cc..7f281647 100644 --- a/hypertrace-core-graphql-attribute-scope/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope/gradle.lockfile @@ -46,7 +46,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath diff --git a/hypertrace-core-graphql-attribute-store/gradle.lockfile b/hypertrace-core-graphql-attribute-store/gradle.lockfile index c343111c..30302abe 100644 --- a/hypertrace-core-graphql-attribute-store/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-store/gradle.lockfile @@ -45,7 +45,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-common-schema/gradle.lockfile b/hypertrace-core-graphql-common-schema/gradle.lockfile index de432f50..f7b8840e 100644 --- a/hypertrace-core-graphql-common-schema/gradle.lockfile +++ b/hypertrace-core-graphql-common-schema/gradle.lockfile @@ -46,7 +46,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath diff --git a/hypertrace-core-graphql-context/gradle.lockfile b/hypertrace-core-graphql-context/gradle.lockfile index 647a684c..cd37d327 100644 --- a/hypertrace-core-graphql-context/gradle.lockfile +++ b/hypertrace-core-graphql-context/gradle.lockfile @@ -28,7 +28,7 @@ javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-deserialization/gradle.lockfile b/hypertrace-core-graphql-deserialization/gradle.lockfile index 0d9ba2ca..673cf4a6 100644 --- a/hypertrace-core-graphql-deserialization/gradle.lockfile +++ b/hypertrace-core-graphql-deserialization/gradle.lockfile @@ -22,7 +22,7 @@ io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile index f44037cc..70d5ddf9 100644 --- a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile +++ b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile @@ -46,7 +46,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath diff --git a/hypertrace-core-graphql-grpc-utils/gradle.lockfile b/hypertrace-core-graphql-grpc-utils/gradle.lockfile index 10bcd49d..12604d39 100644 --- a/hypertrace-core-graphql-grpc-utils/gradle.lockfile +++ b/hypertrace-core-graphql-grpc-utils/gradle.lockfile @@ -40,7 +40,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-utils:0.12.6=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-context-utils:0.12.6=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-impl/gradle.lockfile b/hypertrace-core-graphql-impl/gradle.lockfile index 3ed8e7bd..9d5136d6 100644 --- a/hypertrace-core-graphql-impl/gradle.lockfile +++ b/hypertrace-core-graphql-impl/gradle.lockfile @@ -50,7 +50,7 @@ org.apache.commons:commons-lang3:3.12.0=runtimeClasspath org.apache.commons:commons-text:1.10.0=runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath diff --git a/hypertrace-core-graphql-log-event-schema/gradle.lockfile b/hypertrace-core-graphql-log-event-schema/gradle.lockfile index e62156e3..2a7d67a8 100644 --- a/hypertrace-core-graphql-log-event-schema/gradle.lockfile +++ b/hypertrace-core-graphql-log-event-schema/gradle.lockfile @@ -48,7 +48,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath diff --git a/hypertrace-core-graphql-metadata-schema/gradle.lockfile b/hypertrace-core-graphql-metadata-schema/gradle.lockfile index de432f50..f7b8840e 100644 --- a/hypertrace-core-graphql-metadata-schema/gradle.lockfile +++ b/hypertrace-core-graphql-metadata-schema/gradle.lockfile @@ -46,7 +46,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath diff --git a/hypertrace-core-graphql-request-transformation/gradle.lockfile b/hypertrace-core-graphql-request-transformation/gradle.lockfile index ef4733cc..7f281647 100644 --- a/hypertrace-core-graphql-request-transformation/gradle.lockfile +++ b/hypertrace-core-graphql-request-transformation/gradle.lockfile @@ -46,7 +46,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath diff --git a/hypertrace-core-graphql-rx-utils/gradle.lockfile b/hypertrace-core-graphql-rx-utils/gradle.lockfile index 84349b81..22922132 100644 --- a/hypertrace-core-graphql-rx-utils/gradle.lockfile +++ b/hypertrace-core-graphql-rx-utils/gradle.lockfile @@ -21,7 +21,7 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-registry/gradle.lockfile b/hypertrace-core-graphql-schema-registry/gradle.lockfile index 06172458..1a219098 100644 --- a/hypertrace-core-graphql-schema-registry/gradle.lockfile +++ b/hypertrace-core-graphql-schema-registry/gradle.lockfile @@ -20,7 +20,7 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-utils/gradle.lockfile b/hypertrace-core-graphql-schema-utils/gradle.lockfile index cb9c96a1..b2aab4fe 100644 --- a/hypertrace-core-graphql-schema-utils/gradle.lockfile +++ b/hypertrace-core-graphql-schema-utils/gradle.lockfile @@ -17,7 +17,7 @@ io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-service/gradle.lockfile b/hypertrace-core-graphql-service/gradle.lockfile index 0175a9d2..dd1f4ca1 100644 --- a/hypertrace-core-graphql-service/gradle.lockfile +++ b/hypertrace-core-graphql-service/gradle.lockfile @@ -103,7 +103,7 @@ org.eclipse.jetty:jetty-servlets:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util-ajax:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util:9.4.53.v20231009=runtimeClasspath org.hdrhistogram:HdrHistogram:2.1.12=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath diff --git a/hypertrace-core-graphql-span-schema/gradle.lockfile b/hypertrace-core-graphql-span-schema/gradle.lockfile index 5f7057a7..c1d6c039 100644 --- a/hypertrace-core-graphql-span-schema/gradle.lockfile +++ b/hypertrace-core-graphql-span-schema/gradle.lockfile @@ -51,7 +51,7 @@ org.apache.commons:commons-lang3:3.12.0=compileClasspath,runtimeClasspath org.apache.commons:commons-text:1.10.0=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath diff --git a/hypertrace-core-graphql-spi/gradle.lockfile b/hypertrace-core-graphql-spi/gradle.lockfile index 0466d657..7b3468c3 100644 --- a/hypertrace-core-graphql-spi/gradle.lockfile +++ b/hypertrace-core-graphql-spi/gradle.lockfile @@ -9,7 +9,7 @@ com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-trace-schema/gradle.lockfile b/hypertrace-core-graphql-trace-schema/gradle.lockfile index e62156e3..2a7d67a8 100644 --- a/hypertrace-core-graphql-trace-schema/gradle.lockfile +++ b/hypertrace-core-graphql-trace-schema/gradle.lockfile @@ -48,7 +48,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath From a4d5d5d622a5dcb20c953bd029447c53571771c8 Mon Sep 17 00:00:00 2001 From: "hypertrace-ci-app[bot]" <145367492+hypertrace-ci-app[bot]@users.noreply.github.com> Date: Sat, 25 Nov 2023 10:07:37 -0500 Subject: [PATCH 142/173] Update gradle locks (#150) Co-authored-by: aaron-steinfeld --- .../gradle.lockfile | 2 +- hypertrace-core-graphql-attribute-scope/gradle.lockfile | 2 +- hypertrace-core-graphql-attribute-store/gradle.lockfile | 2 +- hypertrace-core-graphql-common-schema/gradle.lockfile | 2 +- hypertrace-core-graphql-context/gradle.lockfile | 2 +- hypertrace-core-graphql-deserialization/gradle.lockfile | 2 +- hypertrace-core-graphql-gateway-service-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-grpc-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-impl/gradle.lockfile | 2 +- hypertrace-core-graphql-log-event-schema/gradle.lockfile | 2 +- hypertrace-core-graphql-metadata-schema/gradle.lockfile | 2 +- hypertrace-core-graphql-request-transformation/gradle.lockfile | 2 +- hypertrace-core-graphql-rx-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-schema-registry/gradle.lockfile | 2 +- hypertrace-core-graphql-schema-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-service/gradle.lockfile | 2 +- hypertrace-core-graphql-span-schema/gradle.lockfile | 2 +- hypertrace-core-graphql-spi/gradle.lockfile | 2 +- hypertrace-core-graphql-trace-schema/gradle.lockfile | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile index c65ff409..1f79c771 100644 --- a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile @@ -3,6 +3,6 @@ # This file is expected to be part of source control. com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-attribute-scope/gradle.lockfile b/hypertrace-core-graphql-attribute-scope/gradle.lockfile index 7f281647..b62f4bdf 100644 --- a/hypertrace-core-graphql-attribute-scope/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope/gradle.lockfile @@ -46,7 +46,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath diff --git a/hypertrace-core-graphql-attribute-store/gradle.lockfile b/hypertrace-core-graphql-attribute-store/gradle.lockfile index 30302abe..9b99faa0 100644 --- a/hypertrace-core-graphql-attribute-store/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-store/gradle.lockfile @@ -45,7 +45,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-common-schema/gradle.lockfile b/hypertrace-core-graphql-common-schema/gradle.lockfile index f7b8840e..b922fd30 100644 --- a/hypertrace-core-graphql-common-schema/gradle.lockfile +++ b/hypertrace-core-graphql-common-schema/gradle.lockfile @@ -46,7 +46,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath diff --git a/hypertrace-core-graphql-context/gradle.lockfile b/hypertrace-core-graphql-context/gradle.lockfile index cd37d327..8dc0d33b 100644 --- a/hypertrace-core-graphql-context/gradle.lockfile +++ b/hypertrace-core-graphql-context/gradle.lockfile @@ -28,7 +28,7 @@ javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-deserialization/gradle.lockfile b/hypertrace-core-graphql-deserialization/gradle.lockfile index 673cf4a6..2d550d2f 100644 --- a/hypertrace-core-graphql-deserialization/gradle.lockfile +++ b/hypertrace-core-graphql-deserialization/gradle.lockfile @@ -22,7 +22,7 @@ io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile index 70d5ddf9..e6fed6f5 100644 --- a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile +++ b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile @@ -46,7 +46,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath diff --git a/hypertrace-core-graphql-grpc-utils/gradle.lockfile b/hypertrace-core-graphql-grpc-utils/gradle.lockfile index 12604d39..6782f979 100644 --- a/hypertrace-core-graphql-grpc-utils/gradle.lockfile +++ b/hypertrace-core-graphql-grpc-utils/gradle.lockfile @@ -40,7 +40,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-utils:0.12.6=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-context-utils:0.12.6=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-impl/gradle.lockfile b/hypertrace-core-graphql-impl/gradle.lockfile index 9d5136d6..e2cca18a 100644 --- a/hypertrace-core-graphql-impl/gradle.lockfile +++ b/hypertrace-core-graphql-impl/gradle.lockfile @@ -50,7 +50,7 @@ org.apache.commons:commons-lang3:3.12.0=runtimeClasspath org.apache.commons:commons-text:1.10.0=runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath diff --git a/hypertrace-core-graphql-log-event-schema/gradle.lockfile b/hypertrace-core-graphql-log-event-schema/gradle.lockfile index 2a7d67a8..8472bad5 100644 --- a/hypertrace-core-graphql-log-event-schema/gradle.lockfile +++ b/hypertrace-core-graphql-log-event-schema/gradle.lockfile @@ -48,7 +48,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath diff --git a/hypertrace-core-graphql-metadata-schema/gradle.lockfile b/hypertrace-core-graphql-metadata-schema/gradle.lockfile index f7b8840e..b922fd30 100644 --- a/hypertrace-core-graphql-metadata-schema/gradle.lockfile +++ b/hypertrace-core-graphql-metadata-schema/gradle.lockfile @@ -46,7 +46,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath diff --git a/hypertrace-core-graphql-request-transformation/gradle.lockfile b/hypertrace-core-graphql-request-transformation/gradle.lockfile index 7f281647..b62f4bdf 100644 --- a/hypertrace-core-graphql-request-transformation/gradle.lockfile +++ b/hypertrace-core-graphql-request-transformation/gradle.lockfile @@ -46,7 +46,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath diff --git a/hypertrace-core-graphql-rx-utils/gradle.lockfile b/hypertrace-core-graphql-rx-utils/gradle.lockfile index 22922132..3e042151 100644 --- a/hypertrace-core-graphql-rx-utils/gradle.lockfile +++ b/hypertrace-core-graphql-rx-utils/gradle.lockfile @@ -21,7 +21,7 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-registry/gradle.lockfile b/hypertrace-core-graphql-schema-registry/gradle.lockfile index 1a219098..456748a1 100644 --- a/hypertrace-core-graphql-schema-registry/gradle.lockfile +++ b/hypertrace-core-graphql-schema-registry/gradle.lockfile @@ -20,7 +20,7 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-utils/gradle.lockfile b/hypertrace-core-graphql-schema-utils/gradle.lockfile index b2aab4fe..f504a057 100644 --- a/hypertrace-core-graphql-schema-utils/gradle.lockfile +++ b/hypertrace-core-graphql-schema-utils/gradle.lockfile @@ -17,7 +17,7 @@ io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-service/gradle.lockfile b/hypertrace-core-graphql-service/gradle.lockfile index dd1f4ca1..ee1c5dc4 100644 --- a/hypertrace-core-graphql-service/gradle.lockfile +++ b/hypertrace-core-graphql-service/gradle.lockfile @@ -103,7 +103,7 @@ org.eclipse.jetty:jetty-servlets:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util-ajax:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util:9.4.53.v20231009=runtimeClasspath org.hdrhistogram:HdrHistogram:2.1.12=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath diff --git a/hypertrace-core-graphql-span-schema/gradle.lockfile b/hypertrace-core-graphql-span-schema/gradle.lockfile index c1d6c039..1098cdb3 100644 --- a/hypertrace-core-graphql-span-schema/gradle.lockfile +++ b/hypertrace-core-graphql-span-schema/gradle.lockfile @@ -51,7 +51,7 @@ org.apache.commons:commons-lang3:3.12.0=compileClasspath,runtimeClasspath org.apache.commons:commons-text:1.10.0=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath diff --git a/hypertrace-core-graphql-spi/gradle.lockfile b/hypertrace-core-graphql-spi/gradle.lockfile index 7b3468c3..26eb3de9 100644 --- a/hypertrace-core-graphql-spi/gradle.lockfile +++ b/hypertrace-core-graphql-spi/gradle.lockfile @@ -9,7 +9,7 @@ com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-trace-schema/gradle.lockfile b/hypertrace-core-graphql-trace-schema/gradle.lockfile index 2a7d67a8..8472bad5 100644 --- a/hypertrace-core-graphql-trace-schema/gradle.lockfile +++ b/hypertrace-core-graphql-trace-schema/gradle.lockfile @@ -48,7 +48,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.2.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath From fd15f6eb33f8f49a861f7d59d2a76e8c86514241 Mon Sep 17 00:00:00 2001 From: aman bansal Date: Mon, 27 Nov 2023 12:56:13 +0530 Subject: [PATCH 143/173] chore | add support for multi filter arguments (#151) --- .../utils/gateway/GatewayUtilsModule.java | 5 ++ .../utils/gateway/MultiFilterConverter.java | 70 +++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/MultiFilterConverter.java diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayUtilsModule.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayUtilsModule.java index 78fa0750..d02a81e8 100644 --- a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayUtilsModule.java +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayUtilsModule.java @@ -58,6 +58,11 @@ protected void configure() { new TypeLiteral< Converter>, Filter>>() {})) .to(FilterConverter.class); + bind(Key.get( + new TypeLiteral< + Converter< + Collection>>, Filter>>() {})) + .to(MultiFilterConverter.class); bind(Key.get(new TypeLiteral>() {})) .to(ColumnIdentifierConverter.class); diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/MultiFilterConverter.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/MultiFilterConverter.java new file mode 100644 index 00000000..da8e78a4 --- /dev/null +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/MultiFilterConverter.java @@ -0,0 +1,70 @@ +package org.hypertrace.core.graphql.utils.gateway; + +import static io.reactivex.rxjava3.core.Single.zip; + +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.Single; +import java.util.Collection; +import java.util.stream.Collectors; +import javax.inject.Inject; +import org.hypertrace.core.graphql.common.request.AttributeAssociation; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; +import org.hypertrace.core.graphql.common.utils.Converter; +import org.hypertrace.gateway.service.v1.common.Filter; +import org.hypertrace.gateway.service.v1.common.Operator; + +public class MultiFilterConverter + implements Converter>>, Filter> { + + private final AttributeExpressionConverter attributeExpressionConverter; + private final OperatorConverter operatorConverter; + private final LiteralConstantExpressionConverter literalConstantExpressionConverter; + + @Inject + MultiFilterConverter( + AttributeExpressionConverter attributeExpressionConverter, + OperatorConverter operatorConverter, + LiteralConstantExpressionConverter literalConstantExpressionConverter) { + this.attributeExpressionConverter = attributeExpressionConverter; + this.operatorConverter = operatorConverter; + this.literalConstantExpressionConverter = literalConstantExpressionConverter; + } + + @Override + public Single convert( + Collection>> filters) { + if (filters.isEmpty()) { + return Single.just(Filter.getDefaultInstance()); + } + + return Observable.fromIterable(filters) + .flatMapSingle(this::buildAndFilterOperations) + .collect(Collectors.toUnmodifiableList()) + .map( + filterList -> + Filter.newBuilder().setOperator(Operator.OR).addAllChildFilter(filterList).build()); + } + + private Single buildAndFilterOperations( + Collection> andFilters) { + return Observable.fromIterable(andFilters) + .flatMapSingle(this::buildFilter) + .collect(Collectors.toUnmodifiableList()) + .map( + filterList -> + Filter.newBuilder() + .setOperator(Operator.AND) + .addAllChildFilter(filterList) + .build()); + } + + private Single buildFilter(AttributeAssociation filter) { + return zip( + this.attributeExpressionConverter.convert( + AttributeAssociation.of(filter.attribute(), filter.value().keyExpression())), + this.operatorConverter.convert(filter.value().operator()), + this.literalConstantExpressionConverter.convert(filter.value().value()), + (key, operator, value) -> + Filter.newBuilder().setLhs(key).setOperator(operator).setRhs(value).build()); + } +} From beeb208f19cf46b7e7f001e59abdf7be18209e44 Mon Sep 17 00:00:00 2001 From: aman bansal Date: Mon, 27 Nov 2023 20:27:58 +0530 Subject: [PATCH 144/173] Revert "chore | add support for multi filter arguments (#151)" (#152) This reverts commit fd15f6eb33f8f49a861f7d59d2a76e8c86514241. --- .../utils/gateway/GatewayUtilsModule.java | 5 -- .../utils/gateway/MultiFilterConverter.java | 70 ------------------- 2 files changed, 75 deletions(-) delete mode 100644 hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/MultiFilterConverter.java diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayUtilsModule.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayUtilsModule.java index d02a81e8..78fa0750 100644 --- a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayUtilsModule.java +++ b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/GatewayUtilsModule.java @@ -58,11 +58,6 @@ protected void configure() { new TypeLiteral< Converter>, Filter>>() {})) .to(FilterConverter.class); - bind(Key.get( - new TypeLiteral< - Converter< - Collection>>, Filter>>() {})) - .to(MultiFilterConverter.class); bind(Key.get(new TypeLiteral>() {})) .to(ColumnIdentifierConverter.class); diff --git a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/MultiFilterConverter.java b/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/MultiFilterConverter.java deleted file mode 100644 index da8e78a4..00000000 --- a/hypertrace-core-graphql-gateway-service-utils/src/main/java/org/hypertrace/core/graphql/utils/gateway/MultiFilterConverter.java +++ /dev/null @@ -1,70 +0,0 @@ -package org.hypertrace.core.graphql.utils.gateway; - -import static io.reactivex.rxjava3.core.Single.zip; - -import io.reactivex.rxjava3.core.Observable; -import io.reactivex.rxjava3.core.Single; -import java.util.Collection; -import java.util.stream.Collectors; -import javax.inject.Inject; -import org.hypertrace.core.graphql.common.request.AttributeAssociation; -import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; -import org.hypertrace.core.graphql.common.utils.Converter; -import org.hypertrace.gateway.service.v1.common.Filter; -import org.hypertrace.gateway.service.v1.common.Operator; - -public class MultiFilterConverter - implements Converter>>, Filter> { - - private final AttributeExpressionConverter attributeExpressionConverter; - private final OperatorConverter operatorConverter; - private final LiteralConstantExpressionConverter literalConstantExpressionConverter; - - @Inject - MultiFilterConverter( - AttributeExpressionConverter attributeExpressionConverter, - OperatorConverter operatorConverter, - LiteralConstantExpressionConverter literalConstantExpressionConverter) { - this.attributeExpressionConverter = attributeExpressionConverter; - this.operatorConverter = operatorConverter; - this.literalConstantExpressionConverter = literalConstantExpressionConverter; - } - - @Override - public Single convert( - Collection>> filters) { - if (filters.isEmpty()) { - return Single.just(Filter.getDefaultInstance()); - } - - return Observable.fromIterable(filters) - .flatMapSingle(this::buildAndFilterOperations) - .collect(Collectors.toUnmodifiableList()) - .map( - filterList -> - Filter.newBuilder().setOperator(Operator.OR).addAllChildFilter(filterList).build()); - } - - private Single buildAndFilterOperations( - Collection> andFilters) { - return Observable.fromIterable(andFilters) - .flatMapSingle(this::buildFilter) - .collect(Collectors.toUnmodifiableList()) - .map( - filterList -> - Filter.newBuilder() - .setOperator(Operator.AND) - .addAllChildFilter(filterList) - .build()); - } - - private Single buildFilter(AttributeAssociation filter) { - return zip( - this.attributeExpressionConverter.convert( - AttributeAssociation.of(filter.attribute(), filter.value().keyExpression())), - this.operatorConverter.convert(filter.value().operator()), - this.literalConstantExpressionConverter.convert(filter.value().value()), - (key, operator, value) -> - Filter.newBuilder().setLhs(key).setOperator(operator).setRhs(value).build()); - } -} From 6b980ed08b6b9cc518587bbc7129ca29a8dd7206 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Thu, 30 Nov 2023 13:52:19 -0500 Subject: [PATCH 145/173] fix: add support for deserializing zoned expressions (#153) * fix: add support for deserializing zoned expressions * chore: suppression update --- .../schema/typefunctions/DateTimeScalar.java | 9 +++++-- .../schema/scalars/DateTimeScalarTest.java | 26 ++++++++++++++----- owasp-suppressions.xml | 13 +++------- 3 files changed, 29 insertions(+), 19 deletions(-) diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/DateTimeScalar.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/DateTimeScalar.java index c3429f8d..3b60ebaf 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/DateTimeScalar.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/typefunctions/DateTimeScalar.java @@ -12,6 +12,7 @@ import java.lang.reflect.AnnotatedType; import java.time.DateTimeException; import java.time.Instant; +import java.time.OffsetDateTime; import java.time.temporal.TemporalAccessor; import java.util.function.Function; @@ -45,10 +46,10 @@ private Instant toInstant( return Instant.from((TemporalAccessor) instantInput); } if (instantInput instanceof CharSequence) { - return Instant.parse((CharSequence) instantInput); + return parse((CharSequence) instantInput); } if (instantInput instanceof StringValue) { - return Instant.parse(((StringValue) instantInput).getValue()); + return parse(((StringValue) instantInput).getValue()); } } catch (DateTimeException exception) { throw errorWrapper.apply(exception); @@ -75,4 +76,8 @@ public GraphQLScalarType buildType( ProcessingElementsContainer container) { return DATE_TIME_SCALAR; } + + private static Instant parse(CharSequence charSequence) { + return OffsetDateTime.parse(charSequence).toInstant(); + } } diff --git a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/DateTimeScalarTest.java b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/DateTimeScalarTest.java index 5f5953c5..e78f5e7c 100644 --- a/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/DateTimeScalarTest.java +++ b/hypertrace-core-graphql-common-schema/src/test/java/org/hypertrace/core/graphql/common/schema/scalars/DateTimeScalarTest.java @@ -19,8 +19,9 @@ @ExtendWith(MockitoExtension.class) class DateTimeScalarTest { - private static final String TEST_DATE_TIME_STRING = "2019-10-29T21:30:12.871Z"; - private static final Instant TEST_DATE_TIME_INSTANT = Instant.parse(TEST_DATE_TIME_STRING); + private static final String TEST_UTC_DATE_TIME_STRING = "2019-10-29T21:30:12.871Z"; + private static final String TEST_ZONED_DATE_TIME_STRING = "2019-10-30T03:00:12.871+05:30"; + private static final Instant TEST_DATE_TIME_INSTANT = Instant.parse(TEST_UTC_DATE_TIME_STRING); private DateTimeScalar dateTimeFunction; private GraphQLScalarType dateTimeType; @Mock AnnotatedType mockAnnotatedType; @@ -45,18 +46,24 @@ void canDetermineIfConvertible() { @Test void canConvertFromLiteral() { assertEquals( - TEST_DATE_TIME_INSTANT, dateTimeType.getCoercing().parseLiteral(TEST_DATE_TIME_STRING)); + TEST_DATE_TIME_INSTANT, dateTimeType.getCoercing().parseLiteral(TEST_UTC_DATE_TIME_STRING)); + assertEquals( + TEST_DATE_TIME_INSTANT, + dateTimeType.getCoercing().parseLiteral(TEST_ZONED_DATE_TIME_STRING)); } @Test void canSerialize() { assertEquals( - TEST_DATE_TIME_STRING, dateTimeType.getCoercing().serialize(TEST_DATE_TIME_INSTANT)); + TEST_UTC_DATE_TIME_STRING, dateTimeType.getCoercing().serialize(TEST_DATE_TIME_INSTANT)); assertEquals( - TEST_DATE_TIME_STRING, dateTimeType.getCoercing().serialize(TEST_DATE_TIME_STRING)); + TEST_UTC_DATE_TIME_STRING, dateTimeType.getCoercing().serialize(TEST_UTC_DATE_TIME_STRING)); + assertEquals( + TEST_UTC_DATE_TIME_STRING, + dateTimeType.getCoercing().serialize(TEST_ZONED_DATE_TIME_STRING)); assertEquals( - TEST_DATE_TIME_STRING, + TEST_UTC_DATE_TIME_STRING, dateTimeType .getCoercing() .serialize(TEST_DATE_TIME_INSTANT.atOffset(ZoneOffset.ofHoursMinutes(12, 30)))); @@ -68,6 +75,11 @@ void canConvertFromValue() { TEST_DATE_TIME_INSTANT, dateTimeType .getCoercing() - .parseValue(StringValue.newStringValue().value(TEST_DATE_TIME_STRING).build())); + .parseValue(StringValue.newStringValue().value(TEST_UTC_DATE_TIME_STRING).build())); + assertEquals( + TEST_DATE_TIME_INSTANT, + dateTimeType + .getCoercing() + .parseValue(StringValue.newStringValue().value(TEST_ZONED_DATE_TIME_STRING).build())); } } diff --git a/owasp-suppressions.xml b/owasp-suppressions.xml index bd273df4..fcf5e046 100644 --- a/owasp-suppressions.xml +++ b/owasp-suppressions.xml @@ -8,14 +8,7 @@ cpe:/a:grpc:grpc cpe:/a:utils_project:utils - - - ^pkg:maven/io\.github\.graphql\-java/graphql\-java\-annotations@.*$ - cpe:/a:graphql-java:graphql-java - - + ^pkg:maven/io\.netty/netty.*@.*$ CVE-2023-4586 - + ^pkg:maven/org\.eclipse\.jetty/jetty\-servlets@9.4.53\..*$ CVE-2023-36479 - + From ed421c14b3bf43a04e59e155ba6fdb5d5fe14b7c Mon Sep 17 00:00:00 2001 From: "hypertrace-ci-app[bot]" <145367492+hypertrace-ci-app[bot]@users.noreply.github.com> Date: Fri, 1 Dec 2023 09:14:58 -0500 Subject: [PATCH 146/173] Update gradle locks (#154) Co-authored-by: aaron-steinfeld --- .../gradle.lockfile | 2 +- hypertrace-core-graphql-attribute-scope/gradle.lockfile | 2 +- hypertrace-core-graphql-attribute-store/gradle.lockfile | 2 +- hypertrace-core-graphql-common-schema/gradle.lockfile | 2 +- hypertrace-core-graphql-context/gradle.lockfile | 2 +- hypertrace-core-graphql-deserialization/gradle.lockfile | 2 +- hypertrace-core-graphql-gateway-service-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-grpc-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-impl/gradle.lockfile | 2 +- hypertrace-core-graphql-log-event-schema/gradle.lockfile | 2 +- hypertrace-core-graphql-metadata-schema/gradle.lockfile | 2 +- hypertrace-core-graphql-request-transformation/gradle.lockfile | 2 +- hypertrace-core-graphql-rx-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-schema-registry/gradle.lockfile | 2 +- hypertrace-core-graphql-schema-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-service/gradle.lockfile | 2 +- hypertrace-core-graphql-span-schema/gradle.lockfile | 2 +- hypertrace-core-graphql-spi/gradle.lockfile | 2 +- hypertrace-core-graphql-trace-schema/gradle.lockfile | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile index 1f79c771..5de99019 100644 --- a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile @@ -3,6 +3,6 @@ # This file is expected to be part of source control. com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-attribute-scope/gradle.lockfile b/hypertrace-core-graphql-attribute-scope/gradle.lockfile index b62f4bdf..586512ba 100644 --- a/hypertrace-core-graphql-attribute-scope/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope/gradle.lockfile @@ -46,7 +46,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath diff --git a/hypertrace-core-graphql-attribute-store/gradle.lockfile b/hypertrace-core-graphql-attribute-store/gradle.lockfile index 9b99faa0..fabf631b 100644 --- a/hypertrace-core-graphql-attribute-store/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-store/gradle.lockfile @@ -45,7 +45,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-common-schema/gradle.lockfile b/hypertrace-core-graphql-common-schema/gradle.lockfile index b922fd30..10926894 100644 --- a/hypertrace-core-graphql-common-schema/gradle.lockfile +++ b/hypertrace-core-graphql-common-schema/gradle.lockfile @@ -46,7 +46,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath diff --git a/hypertrace-core-graphql-context/gradle.lockfile b/hypertrace-core-graphql-context/gradle.lockfile index 8dc0d33b..a9fd9ebd 100644 --- a/hypertrace-core-graphql-context/gradle.lockfile +++ b/hypertrace-core-graphql-context/gradle.lockfile @@ -28,7 +28,7 @@ javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-deserialization/gradle.lockfile b/hypertrace-core-graphql-deserialization/gradle.lockfile index 2d550d2f..d3be6b9f 100644 --- a/hypertrace-core-graphql-deserialization/gradle.lockfile +++ b/hypertrace-core-graphql-deserialization/gradle.lockfile @@ -22,7 +22,7 @@ io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile index e6fed6f5..7d96d4c9 100644 --- a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile +++ b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile @@ -46,7 +46,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath diff --git a/hypertrace-core-graphql-grpc-utils/gradle.lockfile b/hypertrace-core-graphql-grpc-utils/gradle.lockfile index 6782f979..85ab16a0 100644 --- a/hypertrace-core-graphql-grpc-utils/gradle.lockfile +++ b/hypertrace-core-graphql-grpc-utils/gradle.lockfile @@ -40,7 +40,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-utils:0.12.6=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-context-utils:0.12.6=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-impl/gradle.lockfile b/hypertrace-core-graphql-impl/gradle.lockfile index e2cca18a..c29834cd 100644 --- a/hypertrace-core-graphql-impl/gradle.lockfile +++ b/hypertrace-core-graphql-impl/gradle.lockfile @@ -50,7 +50,7 @@ org.apache.commons:commons-lang3:3.12.0=runtimeClasspath org.apache.commons:commons-text:1.10.0=runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath diff --git a/hypertrace-core-graphql-log-event-schema/gradle.lockfile b/hypertrace-core-graphql-log-event-schema/gradle.lockfile index 8472bad5..e964c7d3 100644 --- a/hypertrace-core-graphql-log-event-schema/gradle.lockfile +++ b/hypertrace-core-graphql-log-event-schema/gradle.lockfile @@ -48,7 +48,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath diff --git a/hypertrace-core-graphql-metadata-schema/gradle.lockfile b/hypertrace-core-graphql-metadata-schema/gradle.lockfile index b922fd30..10926894 100644 --- a/hypertrace-core-graphql-metadata-schema/gradle.lockfile +++ b/hypertrace-core-graphql-metadata-schema/gradle.lockfile @@ -46,7 +46,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath diff --git a/hypertrace-core-graphql-request-transformation/gradle.lockfile b/hypertrace-core-graphql-request-transformation/gradle.lockfile index b62f4bdf..586512ba 100644 --- a/hypertrace-core-graphql-request-transformation/gradle.lockfile +++ b/hypertrace-core-graphql-request-transformation/gradle.lockfile @@ -46,7 +46,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath diff --git a/hypertrace-core-graphql-rx-utils/gradle.lockfile b/hypertrace-core-graphql-rx-utils/gradle.lockfile index 3e042151..25fe3879 100644 --- a/hypertrace-core-graphql-rx-utils/gradle.lockfile +++ b/hypertrace-core-graphql-rx-utils/gradle.lockfile @@ -21,7 +21,7 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-registry/gradle.lockfile b/hypertrace-core-graphql-schema-registry/gradle.lockfile index 456748a1..7a33d309 100644 --- a/hypertrace-core-graphql-schema-registry/gradle.lockfile +++ b/hypertrace-core-graphql-schema-registry/gradle.lockfile @@ -20,7 +20,7 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-utils/gradle.lockfile b/hypertrace-core-graphql-schema-utils/gradle.lockfile index f504a057..0d12009d 100644 --- a/hypertrace-core-graphql-schema-utils/gradle.lockfile +++ b/hypertrace-core-graphql-schema-utils/gradle.lockfile @@ -17,7 +17,7 @@ io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-service/gradle.lockfile b/hypertrace-core-graphql-service/gradle.lockfile index ee1c5dc4..7d44d040 100644 --- a/hypertrace-core-graphql-service/gradle.lockfile +++ b/hypertrace-core-graphql-service/gradle.lockfile @@ -103,7 +103,7 @@ org.eclipse.jetty:jetty-servlets:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util-ajax:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util:9.4.53.v20231009=runtimeClasspath org.hdrhistogram:HdrHistogram:2.1.12=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath diff --git a/hypertrace-core-graphql-span-schema/gradle.lockfile b/hypertrace-core-graphql-span-schema/gradle.lockfile index 1098cdb3..1565af98 100644 --- a/hypertrace-core-graphql-span-schema/gradle.lockfile +++ b/hypertrace-core-graphql-span-schema/gradle.lockfile @@ -51,7 +51,7 @@ org.apache.commons:commons-lang3:3.12.0=compileClasspath,runtimeClasspath org.apache.commons:commons-text:1.10.0=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath diff --git a/hypertrace-core-graphql-spi/gradle.lockfile b/hypertrace-core-graphql-spi/gradle.lockfile index 26eb3de9..6d793087 100644 --- a/hypertrace-core-graphql-spi/gradle.lockfile +++ b/hypertrace-core-graphql-spi/gradle.lockfile @@ -9,7 +9,7 @@ com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-trace-schema/gradle.lockfile b/hypertrace-core-graphql-trace-schema/gradle.lockfile index 8472bad5..e964c7d3 100644 --- a/hypertrace-core-graphql-trace-schema/gradle.lockfile +++ b/hypertrace-core-graphql-trace-schema/gradle.lockfile @@ -48,7 +48,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.0=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath From 50b0ff99aacfa974f0da31b1778ca9481f4289e9 Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Mon, 4 Dec 2023 20:33:43 -0500 Subject: [PATCH 147/173] ci: update deps, suppressions (#156) * ci: update deps, suppressions * fix: add back grpc netty since this isn't grpc server --- .../gradle.lockfile | 6 +- .../gradle.lockfile | 43 ++++++----- .../gradle.lockfile | 40 +++++----- .../gradle.lockfile | 43 ++++++----- .../gradle.lockfile | 14 ++-- .../gradle.lockfile | 16 ++-- .../gradle.lockfile | 42 ++++++----- .../gradle.lockfile | 32 ++++---- hypertrace-core-graphql-impl/gradle.lockfile | 42 ++++++----- .../gradle.lockfile | 42 ++++++----- .../gradle.lockfile | 43 ++++++----- .../gradle.lockfile | 43 ++++++----- .../gradle.lockfile | 6 +- .../gradle.lockfile | 6 +- .../gradle.lockfile | 6 +- .../gradle.lockfile | 74 ++++++++++--------- .../gradle.lockfile | 42 ++++++----- hypertrace-core-graphql-spi/gradle.lockfile | 6 +- .../gradle.lockfile | 42 ++++++----- owasp-suppressions.xml | 8 +- 20 files changed, 313 insertions(+), 283 deletions(-) diff --git a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile index 5de99019..9fff3b5f 100644 --- a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile @@ -1,8 +1,8 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. -com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-attribute-scope/gradle.lockfile b/hypertrace-core-graphql-attribute-scope/gradle.lockfile index 586512ba..c808d87d 100644 --- a/hypertrace-core-graphql-attribute-scope/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope/gradle.lockfile @@ -4,17 +4,18 @@ aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath com.auth0:java-jwt:4.4.0=runtimeClasspath com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2=runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.0=runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath com.google.android:annotations:4.1.1.4=runtimeClasspath -com.google.api.grpc:proto-google-common-protos:2.17.0=runtimeClasspath +com.google.api.grpc:proto-google-common-protos:2.22.0=runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath com.google.code.gson:gson:2.10.1=runtimeClasspath -com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath +com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath +com.google.errorprone:error_prone_annotations:2.20.0=runtimeClasspath com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath @@ -28,14 +29,16 @@ com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClas com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-api:1.57.2=runtimeClasspath -io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.57.2=runtimeClasspath -io.grpc:grpc-core:1.57.2=runtimeClasspath -io.grpc:grpc-protobuf-lite:1.57.2=runtimeClasspath -io.grpc:grpc-protobuf:1.57.2=runtimeClasspath -io.grpc:grpc-stub:1.57.2=runtimeClasspath -io.netty:netty-bom:4.1.100.Final=runtimeClasspath +io.grpc:grpc-api:1.59.1=runtimeClasspath +io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.59.1=runtimeClasspath +io.grpc:grpc-core:1.59.1=runtimeClasspath +io.grpc:grpc-inprocess:1.59.1=runtimeClasspath +io.grpc:grpc-protobuf-lite:1.59.1=runtimeClasspath +io.grpc:grpc-protobuf:1.59.1=runtimeClasspath +io.grpc:grpc-stub:1.59.1=runtimeClasspath +io.grpc:grpc-util:1.59.1=runtimeClasspath +io.netty:netty-bom:4.1.101.Final=runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath @@ -46,12 +49,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.6=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.6=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.7=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.7=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.7=runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-attribute-store/gradle.lockfile b/hypertrace-core-graphql-attribute-store/gradle.lockfile index fabf631b..28c1b363 100644 --- a/hypertrace-core-graphql-attribute-store/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-store/gradle.lockfile @@ -4,16 +4,16 @@ aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath com.auth0:java-jwt:4.4.0=runtimeClasspath com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath com.google.android:annotations:4.1.1.4=runtimeClasspath -com.google.api.grpc:proto-google-common-protos:2.17.0=compileClasspath,runtimeClasspath +com.google.api.grpc:proto-google-common-protos:2.22.0=compileClasspath,runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath com.google.code.gson:gson:2.10.1=runtimeClasspath -com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath +com.google.errorprone:error_prone_annotations:2.20.0=compileClasspath,runtimeClasspath com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath @@ -27,14 +27,16 @@ com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClas com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-api:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.57.2=runtimeClasspath -io.grpc:grpc-core:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-protobuf-lite:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-protobuf:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-stub:1.57.2=compileClasspath,runtimeClasspath -io.netty:netty-bom:4.1.100.Final=runtimeClasspath +io.grpc:grpc-api:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.59.1=runtimeClasspath +io.grpc:grpc-core:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-inprocess:1.59.1=runtimeClasspath +io.grpc:grpc-protobuf-lite:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-protobuf:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-stub:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-util:1.59.1=runtimeClasspath +io.netty:netty-bom:4.1.101.Final=runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath @@ -45,12 +47,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.6=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.6=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.7=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.7=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.7=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-common-schema/gradle.lockfile b/hypertrace-core-graphql-common-schema/gradle.lockfile index 10926894..b59b86f0 100644 --- a/hypertrace-core-graphql-common-schema/gradle.lockfile +++ b/hypertrace-core-graphql-common-schema/gradle.lockfile @@ -4,17 +4,18 @@ aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath com.auth0:java-jwt:4.4.0=runtimeClasspath com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2=runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.0=runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath com.google.android:annotations:4.1.1.4=runtimeClasspath -com.google.api.grpc:proto-google-common-protos:2.17.0=runtimeClasspath +com.google.api.grpc:proto-google-common-protos:2.22.0=runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath com.google.code.gson:gson:2.10.1=runtimeClasspath -com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath +com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath +com.google.errorprone:error_prone_annotations:2.20.0=runtimeClasspath com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath @@ -28,14 +29,16 @@ com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClas com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-api:1.57.2=runtimeClasspath -io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.57.2=runtimeClasspath -io.grpc:grpc-core:1.57.2=runtimeClasspath -io.grpc:grpc-protobuf-lite:1.57.2=runtimeClasspath -io.grpc:grpc-protobuf:1.57.2=runtimeClasspath -io.grpc:grpc-stub:1.57.2=runtimeClasspath -io.netty:netty-bom:4.1.100.Final=runtimeClasspath +io.grpc:grpc-api:1.59.1=runtimeClasspath +io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.59.1=runtimeClasspath +io.grpc:grpc-core:1.59.1=runtimeClasspath +io.grpc:grpc-inprocess:1.59.1=runtimeClasspath +io.grpc:grpc-protobuf-lite:1.59.1=runtimeClasspath +io.grpc:grpc-protobuf:1.59.1=runtimeClasspath +io.grpc:grpc-stub:1.59.1=runtimeClasspath +io.grpc:grpc-util:1.59.1=runtimeClasspath +io.netty:netty-bom:4.1.101.Final=runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath @@ -46,12 +49,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.6=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.6=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.7=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.7=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.7=runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-context/gradle.lockfile b/hypertrace-core-graphql-context/gradle.lockfile index a9fd9ebd..507f05c0 100644 --- a/hypertrace-core-graphql-context/gradle.lockfile +++ b/hypertrace-core-graphql-context/gradle.lockfile @@ -2,11 +2,11 @@ # Manual edits can break the build and are not advised. # This file is expected to be part of source control. aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath @@ -21,14 +21,14 @@ com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClas com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-deserialization/gradle.lockfile b/hypertrace-core-graphql-deserialization/gradle.lockfile index d3be6b9f..332a9bef 100644 --- a/hypertrace-core-graphql-deserialization/gradle.lockfile +++ b/hypertrace-core-graphql-deserialization/gradle.lockfile @@ -2,12 +2,12 @@ # Manual edits can break the build and are not advised. # This file is expected to be part of source control. aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath @@ -18,11 +18,11 @@ com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath com.google.j2objc:j2objc-annotations:2.8=compileClasspath com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile index 7d96d4c9..692ad2b3 100644 --- a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile +++ b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile @@ -4,17 +4,17 @@ aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath com.auth0:java-jwt:4.4.0=runtimeClasspath com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2=runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.0=runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath com.google.android:annotations:4.1.1.4=runtimeClasspath -com.google.api.grpc:proto-google-common-protos:2.17.0=compileClasspath,runtimeClasspath +com.google.api.grpc:proto-google-common-protos:2.22.0=compileClasspath,runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath com.google.code.gson:gson:2.10.1=runtimeClasspath -com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath +com.google.errorprone:error_prone_annotations:2.20.0=compileClasspath,runtimeClasspath com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath @@ -28,14 +28,16 @@ com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClas com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-api:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.57.2=runtimeClasspath -io.grpc:grpc-core:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-protobuf-lite:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-protobuf:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-stub:1.57.2=compileClasspath,runtimeClasspath -io.netty:netty-bom:4.1.100.Final=runtimeClasspath +io.grpc:grpc-api:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.59.1=runtimeClasspath +io.grpc:grpc-core:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-inprocess:1.59.1=runtimeClasspath +io.grpc:grpc-protobuf-lite:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-protobuf:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-stub:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-util:1.59.1=runtimeClasspath +io.netty:netty-bom:4.1.101.Final=runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath @@ -46,12 +48,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.6=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.6=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.7=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.7=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.7=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-grpc-utils/gradle.lockfile b/hypertrace-core-graphql-grpc-utils/gradle.lockfile index 85ab16a0..fa5a04d2 100644 --- a/hypertrace-core-graphql-grpc-utils/gradle.lockfile +++ b/hypertrace-core-graphql-grpc-utils/gradle.lockfile @@ -4,15 +4,15 @@ aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath com.auth0:java-jwt:4.4.0=runtimeClasspath com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath com.google.android:annotations:4.1.1.4=runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath com.google.code.gson:gson:2.10.1=runtimeClasspath -com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath +com.google.errorprone:error_prone_annotations:2.20.0=compileClasspath,runtimeClasspath com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath @@ -25,12 +25,14 @@ com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClas com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-api:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-core:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-stub:1.57.2=compileClasspath,runtimeClasspath -io.netty:netty-bom:4.1.100.Final=compileClasspath,runtimeClasspath +io.grpc:grpc-api:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-core:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-inprocess:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-stub:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-util:1.59.1=runtimeClasspath +io.netty:netty-bom:4.1.101.Final=compileClasspath,runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath @@ -40,9 +42,9 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.6=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.6=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.7=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.7=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-impl/gradle.lockfile b/hypertrace-core-graphql-impl/gradle.lockfile index c29834cd..f9bc8a13 100644 --- a/hypertrace-core-graphql-impl/gradle.lockfile +++ b/hypertrace-core-graphql-impl/gradle.lockfile @@ -4,17 +4,17 @@ aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath com.auth0:java-jwt:4.4.0=runtimeClasspath com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2=runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.0=runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath com.google.android:annotations:4.1.1.4=runtimeClasspath -com.google.api.grpc:proto-google-common-protos:2.17.0=compileClasspath,runtimeClasspath +com.google.api.grpc:proto-google-common-protos:2.22.0=compileClasspath,runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath com.google.code.gson:gson:2.10.1=runtimeClasspath -com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath +com.google.errorprone:error_prone_annotations:2.20.0=compileClasspath,runtimeClasspath com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath @@ -29,14 +29,16 @@ com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClas com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-api:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-core:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-protobuf-lite:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-protobuf:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-stub:1.57.2=compileClasspath,runtimeClasspath -io.netty:netty-bom:4.1.100.Final=compileClasspath,runtimeClasspath +io.grpc:grpc-api:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-core:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-inprocess:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-protobuf-lite:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-protobuf:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-stub:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-util:1.59.1=runtimeClasspath +io.netty:netty-bom:4.1.101.Final=compileClasspath,runtimeClasspath io.opentelemetry:opentelemetry-proto:1.1.0-alpha=runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath @@ -50,12 +52,12 @@ org.apache.commons:commons-lang3:3.12.0=runtimeClasspath org.apache.commons:commons-text:1.10.0=runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.6=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.6=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.7=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.7=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.7=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-log-event-schema/gradle.lockfile b/hypertrace-core-graphql-log-event-schema/gradle.lockfile index e964c7d3..3884f4df 100644 --- a/hypertrace-core-graphql-log-event-schema/gradle.lockfile +++ b/hypertrace-core-graphql-log-event-schema/gradle.lockfile @@ -4,18 +4,18 @@ aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath com.auth0:java-jwt:4.4.0=runtimeClasspath com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2=runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.0=runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath com.google.android:annotations:4.1.1.4=runtimeClasspath -com.google.api.grpc:proto-google-common-protos:2.17.0=compileClasspath,runtimeClasspath +com.google.api.grpc:proto-google-common-protos:2.22.0=compileClasspath,runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath com.google.code.gson:gson:2.10.1=runtimeClasspath com.google.code.gson:gson:2.8.9=compileClasspath -com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath +com.google.errorprone:error_prone_annotations:2.20.0=compileClasspath,runtimeClasspath com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath @@ -30,14 +30,16 @@ com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClas com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-api:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.57.2=runtimeClasspath -io.grpc:grpc-core:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-protobuf-lite:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-protobuf:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-stub:1.57.2=compileClasspath,runtimeClasspath -io.netty:netty-bom:4.1.100.Final=runtimeClasspath +io.grpc:grpc-api:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.59.1=runtimeClasspath +io.grpc:grpc-core:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-inprocess:1.59.1=runtimeClasspath +io.grpc:grpc-protobuf-lite:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-protobuf:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-stub:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-util:1.59.1=runtimeClasspath +io.netty:netty-bom:4.1.101.Final=runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath @@ -48,12 +50,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.6=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.6=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.7=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.7=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.7=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath diff --git a/hypertrace-core-graphql-metadata-schema/gradle.lockfile b/hypertrace-core-graphql-metadata-schema/gradle.lockfile index 10926894..b59b86f0 100644 --- a/hypertrace-core-graphql-metadata-schema/gradle.lockfile +++ b/hypertrace-core-graphql-metadata-schema/gradle.lockfile @@ -4,17 +4,18 @@ aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath com.auth0:java-jwt:4.4.0=runtimeClasspath com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2=runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.0=runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath com.google.android:annotations:4.1.1.4=runtimeClasspath -com.google.api.grpc:proto-google-common-protos:2.17.0=runtimeClasspath +com.google.api.grpc:proto-google-common-protos:2.22.0=runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath com.google.code.gson:gson:2.10.1=runtimeClasspath -com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath +com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath +com.google.errorprone:error_prone_annotations:2.20.0=runtimeClasspath com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath @@ -28,14 +29,16 @@ com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClas com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-api:1.57.2=runtimeClasspath -io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.57.2=runtimeClasspath -io.grpc:grpc-core:1.57.2=runtimeClasspath -io.grpc:grpc-protobuf-lite:1.57.2=runtimeClasspath -io.grpc:grpc-protobuf:1.57.2=runtimeClasspath -io.grpc:grpc-stub:1.57.2=runtimeClasspath -io.netty:netty-bom:4.1.100.Final=runtimeClasspath +io.grpc:grpc-api:1.59.1=runtimeClasspath +io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.59.1=runtimeClasspath +io.grpc:grpc-core:1.59.1=runtimeClasspath +io.grpc:grpc-inprocess:1.59.1=runtimeClasspath +io.grpc:grpc-protobuf-lite:1.59.1=runtimeClasspath +io.grpc:grpc-protobuf:1.59.1=runtimeClasspath +io.grpc:grpc-stub:1.59.1=runtimeClasspath +io.grpc:grpc-util:1.59.1=runtimeClasspath +io.netty:netty-bom:4.1.101.Final=runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath @@ -46,12 +49,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.6=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.6=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.7=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.7=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.7=runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-request-transformation/gradle.lockfile b/hypertrace-core-graphql-request-transformation/gradle.lockfile index 586512ba..c808d87d 100644 --- a/hypertrace-core-graphql-request-transformation/gradle.lockfile +++ b/hypertrace-core-graphql-request-transformation/gradle.lockfile @@ -4,17 +4,18 @@ aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath com.auth0:java-jwt:4.4.0=runtimeClasspath com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2=runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.0=runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath com.google.android:annotations:4.1.1.4=runtimeClasspath -com.google.api.grpc:proto-google-common-protos:2.17.0=runtimeClasspath +com.google.api.grpc:proto-google-common-protos:2.22.0=runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath com.google.code.gson:gson:2.10.1=runtimeClasspath -com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath +com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath +com.google.errorprone:error_prone_annotations:2.20.0=runtimeClasspath com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath @@ -28,14 +29,16 @@ com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClas com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-api:1.57.2=runtimeClasspath -io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.57.2=runtimeClasspath -io.grpc:grpc-core:1.57.2=runtimeClasspath -io.grpc:grpc-protobuf-lite:1.57.2=runtimeClasspath -io.grpc:grpc-protobuf:1.57.2=runtimeClasspath -io.grpc:grpc-stub:1.57.2=runtimeClasspath -io.netty:netty-bom:4.1.100.Final=runtimeClasspath +io.grpc:grpc-api:1.59.1=runtimeClasspath +io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.59.1=runtimeClasspath +io.grpc:grpc-core:1.59.1=runtimeClasspath +io.grpc:grpc-inprocess:1.59.1=runtimeClasspath +io.grpc:grpc-protobuf-lite:1.59.1=runtimeClasspath +io.grpc:grpc-protobuf:1.59.1=runtimeClasspath +io.grpc:grpc-stub:1.59.1=runtimeClasspath +io.grpc:grpc-util:1.59.1=runtimeClasspath +io.netty:netty-bom:4.1.101.Final=runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath @@ -46,12 +49,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.6=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.6=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.7=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.7=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.7=runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-rx-utils/gradle.lockfile b/hypertrace-core-graphql-rx-utils/gradle.lockfile index 25fe3879..89b64eec 100644 --- a/hypertrace-core-graphql-rx-utils/gradle.lockfile +++ b/hypertrace-core-graphql-rx-utils/gradle.lockfile @@ -2,7 +2,7 @@ # Manual edits can break the build and are not advised. # This file is expected to be part of source control. aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath @@ -15,13 +15,13 @@ com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClas com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-registry/gradle.lockfile b/hypertrace-core-graphql-schema-registry/gradle.lockfile index 7a33d309..b7151055 100644 --- a/hypertrace-core-graphql-schema-registry/gradle.lockfile +++ b/hypertrace-core-graphql-schema-registry/gradle.lockfile @@ -2,7 +2,7 @@ # Manual edits can break the build and are not advised. # This file is expected to be part of source control. aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath @@ -15,12 +15,12 @@ com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClas com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-utils/gradle.lockfile b/hypertrace-core-graphql-schema-utils/gradle.lockfile index 0d12009d..d37e48a8 100644 --- a/hypertrace-core-graphql-schema-utils/gradle.lockfile +++ b/hypertrace-core-graphql-schema-utils/gradle.lockfile @@ -2,7 +2,7 @@ # Manual edits can break the build and are not advised. # This file is expected to be part of source control. aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath @@ -13,11 +13,11 @@ com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath com.google.j2objc:j2objc-annotations:2.8=compileClasspath com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-service/gradle.lockfile b/hypertrace-core-graphql-service/gradle.lockfile index 7d44d040..a535f9ee 100644 --- a/hypertrace-core-graphql-service/gradle.lockfile +++ b/hypertrace-core-graphql-service/gradle.lockfile @@ -4,17 +4,17 @@ aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath com.auth0:java-jwt:4.4.0=runtimeClasspath com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2=runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.0=runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath com.google.android:annotations:4.1.1.4=runtimeClasspath -com.google.api.grpc:proto-google-common-protos:2.17.0=runtimeClasspath +com.google.api.grpc:proto-google-common-protos:2.22.0=runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath com.google.code.gson:gson:2.10.1=runtimeClasspath -com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath +com.google.errorprone:error_prone_annotations:2.20.0=compileClasspath,runtimeClasspath com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath @@ -40,30 +40,32 @@ io.dropwizard.metrics:metrics-jvm:4.2.16=runtimeClasspath io.dropwizard.metrics:metrics-servlets:4.2.16=runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath io.github.mweirauch:micrometer-jvm-extras:0.2.2=runtimeClasspath -io.grpc:grpc-api:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-core:1.57.2=runtimeClasspath -io.grpc:grpc-netty:1.57.2=runtimeClasspath -io.grpc:grpc-protobuf-lite:1.57.2=runtimeClasspath -io.grpc:grpc-protobuf:1.57.2=runtimeClasspath -io.grpc:grpc-stub:1.57.2=runtimeClasspath +io.grpc:grpc-api:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-core:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-inprocess:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-netty:1.59.1=runtimeClasspath +io.grpc:grpc-protobuf-lite:1.59.1=runtimeClasspath +io.grpc:grpc-protobuf:1.59.1=runtimeClasspath +io.grpc:grpc-stub:1.59.1=runtimeClasspath +io.grpc:grpc-util:1.59.1=runtimeClasspath io.micrometer:micrometer-commons:1.10.2=runtimeClasspath io.micrometer:micrometer-core:1.10.2=runtimeClasspath io.micrometer:micrometer-observation:1.10.2=runtimeClasspath io.micrometer:micrometer-registry-prometheus:1.10.2=runtimeClasspath -io.netty:netty-bom:4.1.100.Final=compileClasspath,runtimeClasspath -io.netty:netty-buffer:4.1.100.Final=runtimeClasspath -io.netty:netty-codec-http2:4.1.100.Final=runtimeClasspath -io.netty:netty-codec-http:4.1.100.Final=runtimeClasspath -io.netty:netty-codec-socks:4.1.100.Final=runtimeClasspath -io.netty:netty-codec:4.1.100.Final=runtimeClasspath -io.netty:netty-common:4.1.100.Final=runtimeClasspath -io.netty:netty-handler-proxy:4.1.100.Final=runtimeClasspath -io.netty:netty-handler:4.1.100.Final=runtimeClasspath -io.netty:netty-resolver:4.1.100.Final=runtimeClasspath -io.netty:netty-transport-native-unix-common:4.1.100.Final=runtimeClasspath -io.netty:netty-transport:4.1.100.Final=runtimeClasspath +io.netty:netty-bom:4.1.101.Final=compileClasspath,runtimeClasspath +io.netty:netty-buffer:4.1.101.Final=runtimeClasspath +io.netty:netty-codec-http2:4.1.101.Final=runtimeClasspath +io.netty:netty-codec-http:4.1.101.Final=runtimeClasspath +io.netty:netty-codec-socks:4.1.101.Final=runtimeClasspath +io.netty:netty-codec:4.1.101.Final=runtimeClasspath +io.netty:netty-common:4.1.101.Final=runtimeClasspath +io.netty:netty-handler-proxy:4.1.101.Final=runtimeClasspath +io.netty:netty-handler:4.1.101.Final=runtimeClasspath +io.netty:netty-resolver:4.1.101.Final=runtimeClasspath +io.netty:netty-transport-native-unix-common:4.1.101.Final=runtimeClasspath +io.netty:netty-transport:4.1.101.Final=runtimeClasspath io.opentelemetry:opentelemetry-proto:1.1.0-alpha=runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath io.prometheus:simpleclient:0.16.0=runtimeClasspath @@ -103,17 +105,17 @@ org.eclipse.jetty:jetty-servlets:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util-ajax:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util:9.4.53.v20231009=runtimeClasspath org.hdrhistogram:HdrHistogram:2.1.12=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.6=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.6=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.7=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.7=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.7=runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath -org.hypertrace.core.serviceframework:platform-http-service-framework:0.1.62=compileClasspath,runtimeClasspath -org.hypertrace.core.serviceframework:platform-metrics:0.1.62=runtimeClasspath -org.hypertrace.core.serviceframework:platform-service-framework:0.1.62=compileClasspath,runtimeClasspath -org.hypertrace.core.serviceframework:service-framework-spi:0.1.62=compileClasspath,runtimeClasspath +org.hypertrace.core.serviceframework:platform-http-service-framework:0.1.63=compileClasspath,runtimeClasspath +org.hypertrace.core.serviceframework:platform-metrics:0.1.63=runtimeClasspath +org.hypertrace.core.serviceframework:platform-service-framework:0.1.63=compileClasspath,runtimeClasspath +org.hypertrace.core.serviceframework:service-framework-spi:0.1.63=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=runtimeClasspath org.latencyutils:LatencyUtils:2.0.3=runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath diff --git a/hypertrace-core-graphql-span-schema/gradle.lockfile b/hypertrace-core-graphql-span-schema/gradle.lockfile index 1565af98..213c0b2a 100644 --- a/hypertrace-core-graphql-span-schema/gradle.lockfile +++ b/hypertrace-core-graphql-span-schema/gradle.lockfile @@ -4,18 +4,18 @@ aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath com.auth0:java-jwt:4.4.0=runtimeClasspath com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2=runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.0=runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath com.google.android:annotations:4.1.1.4=runtimeClasspath -com.google.api.grpc:proto-google-common-protos:2.17.0=compileClasspath,runtimeClasspath +com.google.api.grpc:proto-google-common-protos:2.22.0=compileClasspath,runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath com.google.code.gson:gson:2.10.1=runtimeClasspath com.google.code.gson:gson:2.8.9=compileClasspath -com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath +com.google.errorprone:error_prone_annotations:2.20.0=compileClasspath,runtimeClasspath com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath @@ -30,14 +30,16 @@ com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClas com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-api:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.57.2=runtimeClasspath -io.grpc:grpc-core:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-protobuf-lite:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-protobuf:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-stub:1.57.2=compileClasspath,runtimeClasspath -io.netty:netty-bom:4.1.100.Final=runtimeClasspath +io.grpc:grpc-api:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.59.1=runtimeClasspath +io.grpc:grpc-core:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-inprocess:1.59.1=runtimeClasspath +io.grpc:grpc-protobuf-lite:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-protobuf:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-stub:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-util:1.59.1=runtimeClasspath +io.netty:netty-bom:4.1.101.Final=runtimeClasspath io.opentelemetry:opentelemetry-proto:1.1.0-alpha=compileClasspath,runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath @@ -51,12 +53,12 @@ org.apache.commons:commons-lang3:3.12.0=compileClasspath,runtimeClasspath org.apache.commons:commons-text:1.10.0=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.6=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.6=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.7=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.7=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.7=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath diff --git a/hypertrace-core-graphql-spi/gradle.lockfile b/hypertrace-core-graphql-spi/gradle.lockfile index 6d793087..b8648d65 100644 --- a/hypertrace-core-graphql-spi/gradle.lockfile +++ b/hypertrace-core-graphql-spi/gradle.lockfile @@ -1,15 +1,15 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. -com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-trace-schema/gradle.lockfile b/hypertrace-core-graphql-trace-schema/gradle.lockfile index e964c7d3..3884f4df 100644 --- a/hypertrace-core-graphql-trace-schema/gradle.lockfile +++ b/hypertrace-core-graphql-trace-schema/gradle.lockfile @@ -4,18 +4,18 @@ aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath com.auth0:java-jwt:4.4.0=runtimeClasspath com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.2=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2=runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.15.2=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.0=runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath com.google.android:annotations:4.1.1.4=runtimeClasspath -com.google.api.grpc:proto-google-common-protos:2.17.0=compileClasspath,runtimeClasspath +com.google.api.grpc:proto-google-common-protos:2.22.0=compileClasspath,runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath com.google.code.gson:gson:2.10.1=runtimeClasspath com.google.code.gson:gson:2.8.9=compileClasspath -com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath +com.google.errorprone:error_prone_annotations:2.20.0=compileClasspath,runtimeClasspath com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath @@ -30,14 +30,16 @@ com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClas com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-api:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.57.2=runtimeClasspath -io.grpc:grpc-core:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-protobuf-lite:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-protobuf:1.57.2=compileClasspath,runtimeClasspath -io.grpc:grpc-stub:1.57.2=compileClasspath,runtimeClasspath -io.netty:netty-bom:4.1.100.Final=runtimeClasspath +io.grpc:grpc-api:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.59.1=runtimeClasspath +io.grpc:grpc-core:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-inprocess:1.59.1=runtimeClasspath +io.grpc:grpc-protobuf-lite:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-protobuf:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-stub:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-util:1.59.1=runtimeClasspath +io.netty:netty-bom:4.1.101.Final=runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath @@ -48,12 +50,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.1=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.6=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.6=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.6=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.7=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.7=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.7=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath diff --git a/owasp-suppressions.xml b/owasp-suppressions.xml index fcf5e046..4c26776d 100644 --- a/owasp-suppressions.xml +++ b/owasp-suppressions.xml @@ -32,9 +32,11 @@ - ^pkg:maven/com\.fasterxml\.jackson\.core/jackson\-databind@.*$ - CVE-2023-35116 + ^pkg:maven/io\.grpc/grpc\-.*@.*$ + CVE-2023-44487 \ No newline at end of file From 11641e5b7f27e3cf11fe65bdfbd9f4257ad8e616 Mon Sep 17 00:00:00 2001 From: "hypertrace-ci-app[bot]" <145367492+hypertrace-ci-app[bot]@users.noreply.github.com> Date: Fri, 8 Dec 2023 09:29:04 -0500 Subject: [PATCH 148/173] Update gradle locks (#157) Co-authored-by: aaron-steinfeld --- .../gradle.lockfile | 2 +- hypertrace-core-graphql-attribute-scope/gradle.lockfile | 2 +- hypertrace-core-graphql-attribute-store/gradle.lockfile | 2 +- hypertrace-core-graphql-common-schema/gradle.lockfile | 2 +- hypertrace-core-graphql-context/gradle.lockfile | 2 +- hypertrace-core-graphql-deserialization/gradle.lockfile | 2 +- hypertrace-core-graphql-gateway-service-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-grpc-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-impl/gradle.lockfile | 2 +- hypertrace-core-graphql-log-event-schema/gradle.lockfile | 2 +- hypertrace-core-graphql-metadata-schema/gradle.lockfile | 2 +- hypertrace-core-graphql-request-transformation/gradle.lockfile | 2 +- hypertrace-core-graphql-rx-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-schema-registry/gradle.lockfile | 2 +- hypertrace-core-graphql-schema-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-service/gradle.lockfile | 2 +- hypertrace-core-graphql-span-schema/gradle.lockfile | 2 +- hypertrace-core-graphql-spi/gradle.lockfile | 2 +- hypertrace-core-graphql-trace-schema/gradle.lockfile | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile index 9fff3b5f..8aca0d58 100644 --- a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile @@ -3,6 +3,6 @@ # This file is expected to be part of source control. com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-attribute-scope/gradle.lockfile b/hypertrace-core-graphql-attribute-scope/gradle.lockfile index c808d87d..7bbba27b 100644 --- a/hypertrace-core-graphql-attribute-scope/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.7=runtimeClasspath diff --git a/hypertrace-core-graphql-attribute-store/gradle.lockfile b/hypertrace-core-graphql-attribute-store/gradle.lockfile index 28c1b363..0553862d 100644 --- a/hypertrace-core-graphql-attribute-store/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-store/gradle.lockfile @@ -47,7 +47,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-common-schema/gradle.lockfile b/hypertrace-core-graphql-common-schema/gradle.lockfile index b59b86f0..d016b51a 100644 --- a/hypertrace-core-graphql-common-schema/gradle.lockfile +++ b/hypertrace-core-graphql-common-schema/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.7=runtimeClasspath diff --git a/hypertrace-core-graphql-context/gradle.lockfile b/hypertrace-core-graphql-context/gradle.lockfile index 507f05c0..8599931e 100644 --- a/hypertrace-core-graphql-context/gradle.lockfile +++ b/hypertrace-core-graphql-context/gradle.lockfile @@ -28,7 +28,7 @@ javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-deserialization/gradle.lockfile b/hypertrace-core-graphql-deserialization/gradle.lockfile index 332a9bef..95c8e313 100644 --- a/hypertrace-core-graphql-deserialization/gradle.lockfile +++ b/hypertrace-core-graphql-deserialization/gradle.lockfile @@ -22,7 +22,7 @@ io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile index 692ad2b3..233d3166 100644 --- a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile +++ b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile @@ -48,7 +48,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.7=runtimeClasspath diff --git a/hypertrace-core-graphql-grpc-utils/gradle.lockfile b/hypertrace-core-graphql-grpc-utils/gradle.lockfile index fa5a04d2..e41628c0 100644 --- a/hypertrace-core-graphql-grpc-utils/gradle.lockfile +++ b/hypertrace-core-graphql-grpc-utils/gradle.lockfile @@ -42,7 +42,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-utils:0.12.7=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-context-utils:0.12.7=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-impl/gradle.lockfile b/hypertrace-core-graphql-impl/gradle.lockfile index f9bc8a13..e79500cc 100644 --- a/hypertrace-core-graphql-impl/gradle.lockfile +++ b/hypertrace-core-graphql-impl/gradle.lockfile @@ -52,7 +52,7 @@ org.apache.commons:commons-lang3:3.12.0=runtimeClasspath org.apache.commons:commons-text:1.10.0=runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.7=runtimeClasspath diff --git a/hypertrace-core-graphql-log-event-schema/gradle.lockfile b/hypertrace-core-graphql-log-event-schema/gradle.lockfile index 3884f4df..14934e44 100644 --- a/hypertrace-core-graphql-log-event-schema/gradle.lockfile +++ b/hypertrace-core-graphql-log-event-schema/gradle.lockfile @@ -50,7 +50,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.7=runtimeClasspath diff --git a/hypertrace-core-graphql-metadata-schema/gradle.lockfile b/hypertrace-core-graphql-metadata-schema/gradle.lockfile index b59b86f0..d016b51a 100644 --- a/hypertrace-core-graphql-metadata-schema/gradle.lockfile +++ b/hypertrace-core-graphql-metadata-schema/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.7=runtimeClasspath diff --git a/hypertrace-core-graphql-request-transformation/gradle.lockfile b/hypertrace-core-graphql-request-transformation/gradle.lockfile index c808d87d..7bbba27b 100644 --- a/hypertrace-core-graphql-request-transformation/gradle.lockfile +++ b/hypertrace-core-graphql-request-transformation/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.7=runtimeClasspath diff --git a/hypertrace-core-graphql-rx-utils/gradle.lockfile b/hypertrace-core-graphql-rx-utils/gradle.lockfile index 89b64eec..a6439e92 100644 --- a/hypertrace-core-graphql-rx-utils/gradle.lockfile +++ b/hypertrace-core-graphql-rx-utils/gradle.lockfile @@ -21,7 +21,7 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-registry/gradle.lockfile b/hypertrace-core-graphql-schema-registry/gradle.lockfile index b7151055..5978708e 100644 --- a/hypertrace-core-graphql-schema-registry/gradle.lockfile +++ b/hypertrace-core-graphql-schema-registry/gradle.lockfile @@ -20,7 +20,7 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-utils/gradle.lockfile b/hypertrace-core-graphql-schema-utils/gradle.lockfile index d37e48a8..b50ffbeb 100644 --- a/hypertrace-core-graphql-schema-utils/gradle.lockfile +++ b/hypertrace-core-graphql-schema-utils/gradle.lockfile @@ -17,7 +17,7 @@ io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-service/gradle.lockfile b/hypertrace-core-graphql-service/gradle.lockfile index a535f9ee..6e7b08c6 100644 --- a/hypertrace-core-graphql-service/gradle.lockfile +++ b/hypertrace-core-graphql-service/gradle.lockfile @@ -105,7 +105,7 @@ org.eclipse.jetty:jetty-servlets:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util-ajax:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util:9.4.53.v20231009=runtimeClasspath org.hdrhistogram:HdrHistogram:2.1.12=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.7=runtimeClasspath diff --git a/hypertrace-core-graphql-span-schema/gradle.lockfile b/hypertrace-core-graphql-span-schema/gradle.lockfile index 213c0b2a..5b6fc055 100644 --- a/hypertrace-core-graphql-span-schema/gradle.lockfile +++ b/hypertrace-core-graphql-span-schema/gradle.lockfile @@ -53,7 +53,7 @@ org.apache.commons:commons-lang3:3.12.0=compileClasspath,runtimeClasspath org.apache.commons:commons-text:1.10.0=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.7=runtimeClasspath diff --git a/hypertrace-core-graphql-spi/gradle.lockfile b/hypertrace-core-graphql-spi/gradle.lockfile index b8648d65..e3ffd54c 100644 --- a/hypertrace-core-graphql-spi/gradle.lockfile +++ b/hypertrace-core-graphql-spi/gradle.lockfile @@ -9,7 +9,7 @@ com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-trace-schema/gradle.lockfile b/hypertrace-core-graphql-trace-schema/gradle.lockfile index 3884f4df..14934e44 100644 --- a/hypertrace-core-graphql-trace-schema/gradle.lockfile +++ b/hypertrace-core-graphql-trace-schema/gradle.lockfile @@ -50,7 +50,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.2=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.7=runtimeClasspath From 905727f02d22f69e8bbb9f25d0eaa82e7487f8b7 Mon Sep 17 00:00:00 2001 From: "hypertrace-ci-app[bot]" <145367492+hypertrace-ci-app[bot]@users.noreply.github.com> Date: Fri, 15 Dec 2023 08:59:29 -0500 Subject: [PATCH 149/173] Update gradle locks (#158) Co-authored-by: aaron-steinfeld --- .../gradle.lockfile | 4 +-- .../gradle.lockfile | 26 +++++++------- .../gradle.lockfile | 26 +++++++------- .../gradle.lockfile | 26 +++++++------- .../gradle.lockfile | 4 +-- .../gradle.lockfile | 4 +-- .../gradle.lockfile | 26 +++++++------- .../gradle.lockfile | 20 +++++------ hypertrace-core-graphql-impl/gradle.lockfile | 26 +++++++------- .../gradle.lockfile | 26 +++++++------- .../gradle.lockfile | 26 +++++++------- .../gradle.lockfile | 26 +++++++------- .../gradle.lockfile | 4 +-- .../gradle.lockfile | 4 +-- .../gradle.lockfile | 4 +-- .../gradle.lockfile | 36 +++++++++---------- .../gradle.lockfile | 26 +++++++------- hypertrace-core-graphql-spi/gradle.lockfile | 4 +-- .../gradle.lockfile | 26 +++++++------- 19 files changed, 172 insertions(+), 172 deletions(-) diff --git a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile index 8aca0d58..e4b17b67 100644 --- a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile @@ -2,7 +2,7 @@ # Manual edits can break the build and are not advised. # This file is expected to be part of source control. com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-attribute-scope/gradle.lockfile b/hypertrace-core-graphql-attribute-scope/gradle.lockfile index 7bbba27b..27a0cd85 100644 --- a/hypertrace-core-graphql-attribute-scope/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope/gradle.lockfile @@ -29,15 +29,15 @@ com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClas com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-api:1.59.1=runtimeClasspath -io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.59.1=runtimeClasspath -io.grpc:grpc-core:1.59.1=runtimeClasspath -io.grpc:grpc-inprocess:1.59.1=runtimeClasspath -io.grpc:grpc-protobuf-lite:1.59.1=runtimeClasspath -io.grpc:grpc-protobuf:1.59.1=runtimeClasspath -io.grpc:grpc-stub:1.59.1=runtimeClasspath -io.grpc:grpc-util:1.59.1=runtimeClasspath +io.grpc:grpc-api:1.60.0=runtimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.60.0=runtimeClasspath +io.grpc:grpc-core:1.60.0=runtimeClasspath +io.grpc:grpc-inprocess:1.60.0=runtimeClasspath +io.grpc:grpc-protobuf-lite:1.60.0=runtimeClasspath +io.grpc:grpc-protobuf:1.60.0=runtimeClasspath +io.grpc:grpc-stub:1.60.0=runtimeClasspath +io.grpc:grpc-util:1.60.0=runtimeClasspath io.netty:netty-bom:4.1.101.Final=runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath @@ -49,12 +49,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.7=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.7=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.7=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.8=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.8=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.8=runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-attribute-store/gradle.lockfile b/hypertrace-core-graphql-attribute-store/gradle.lockfile index 0553862d..028ca41b 100644 --- a/hypertrace-core-graphql-attribute-store/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-store/gradle.lockfile @@ -27,15 +27,15 @@ com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClas com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-api:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.59.1=runtimeClasspath -io.grpc:grpc-core:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-inprocess:1.59.1=runtimeClasspath -io.grpc:grpc-protobuf-lite:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-protobuf:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-stub:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-util:1.59.1=runtimeClasspath +io.grpc:grpc-api:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.60.0=runtimeClasspath +io.grpc:grpc-core:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-inprocess:1.60.0=runtimeClasspath +io.grpc:grpc-protobuf-lite:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-protobuf:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-stub:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-util:1.60.0=runtimeClasspath io.netty:netty-bom:4.1.101.Final=runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath @@ -47,12 +47,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.7=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.7=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.7=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.8=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.8=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.8=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-common-schema/gradle.lockfile b/hypertrace-core-graphql-common-schema/gradle.lockfile index d016b51a..ab18e1e5 100644 --- a/hypertrace-core-graphql-common-schema/gradle.lockfile +++ b/hypertrace-core-graphql-common-schema/gradle.lockfile @@ -29,15 +29,15 @@ com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClas com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-api:1.59.1=runtimeClasspath -io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.59.1=runtimeClasspath -io.grpc:grpc-core:1.59.1=runtimeClasspath -io.grpc:grpc-inprocess:1.59.1=runtimeClasspath -io.grpc:grpc-protobuf-lite:1.59.1=runtimeClasspath -io.grpc:grpc-protobuf:1.59.1=runtimeClasspath -io.grpc:grpc-stub:1.59.1=runtimeClasspath -io.grpc:grpc-util:1.59.1=runtimeClasspath +io.grpc:grpc-api:1.60.0=runtimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.60.0=runtimeClasspath +io.grpc:grpc-core:1.60.0=runtimeClasspath +io.grpc:grpc-inprocess:1.60.0=runtimeClasspath +io.grpc:grpc-protobuf-lite:1.60.0=runtimeClasspath +io.grpc:grpc-protobuf:1.60.0=runtimeClasspath +io.grpc:grpc-stub:1.60.0=runtimeClasspath +io.grpc:grpc-util:1.60.0=runtimeClasspath io.netty:netty-bom:4.1.101.Final=runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath @@ -49,12 +49,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.7=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.7=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.7=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.8=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.8=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.8=runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-context/gradle.lockfile b/hypertrace-core-graphql-context/gradle.lockfile index 8599931e..47e84b37 100644 --- a/hypertrace-core-graphql-context/gradle.lockfile +++ b/hypertrace-core-graphql-context/gradle.lockfile @@ -21,14 +21,14 @@ com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClas com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-deserialization/gradle.lockfile b/hypertrace-core-graphql-deserialization/gradle.lockfile index 95c8e313..acf2e253 100644 --- a/hypertrace-core-graphql-deserialization/gradle.lockfile +++ b/hypertrace-core-graphql-deserialization/gradle.lockfile @@ -18,11 +18,11 @@ com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath com.google.j2objc:j2objc-annotations:2.8=compileClasspath com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile index 233d3166..98564f28 100644 --- a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile +++ b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile @@ -28,15 +28,15 @@ com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClas com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-api:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.59.1=runtimeClasspath -io.grpc:grpc-core:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-inprocess:1.59.1=runtimeClasspath -io.grpc:grpc-protobuf-lite:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-protobuf:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-stub:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-util:1.59.1=runtimeClasspath +io.grpc:grpc-api:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.60.0=runtimeClasspath +io.grpc:grpc-core:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-inprocess:1.60.0=runtimeClasspath +io.grpc:grpc-protobuf-lite:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-protobuf:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-stub:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-util:1.60.0=runtimeClasspath io.netty:netty-bom:4.1.101.Final=runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath @@ -48,12 +48,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.7=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.7=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.7=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.8=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.8=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.8=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-grpc-utils/gradle.lockfile b/hypertrace-core-graphql-grpc-utils/gradle.lockfile index e41628c0..c4471d33 100644 --- a/hypertrace-core-graphql-grpc-utils/gradle.lockfile +++ b/hypertrace-core-graphql-grpc-utils/gradle.lockfile @@ -25,13 +25,13 @@ com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClas com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-api:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-core:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-inprocess:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-stub:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-util:1.59.1=runtimeClasspath +io.grpc:grpc-api:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-core:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-inprocess:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-stub:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-util:1.60.0=runtimeClasspath io.netty:netty-bom:4.1.101.Final=compileClasspath,runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath @@ -42,9 +42,9 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.7=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.7=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.8=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.8=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-impl/gradle.lockfile b/hypertrace-core-graphql-impl/gradle.lockfile index e79500cc..0a22f369 100644 --- a/hypertrace-core-graphql-impl/gradle.lockfile +++ b/hypertrace-core-graphql-impl/gradle.lockfile @@ -29,15 +29,15 @@ com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClas com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-api:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-core:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-inprocess:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-protobuf-lite:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-protobuf:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-stub:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-util:1.59.1=runtimeClasspath +io.grpc:grpc-api:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-core:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-inprocess:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-protobuf-lite:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-protobuf:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-stub:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-util:1.60.0=runtimeClasspath io.netty:netty-bom:4.1.101.Final=compileClasspath,runtimeClasspath io.opentelemetry:opentelemetry-proto:1.1.0-alpha=runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath @@ -52,12 +52,12 @@ org.apache.commons:commons-lang3:3.12.0=runtimeClasspath org.apache.commons:commons-text:1.10.0=runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.7=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.7=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.7=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.8=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.8=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.8=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-log-event-schema/gradle.lockfile b/hypertrace-core-graphql-log-event-schema/gradle.lockfile index 14934e44..94eb9082 100644 --- a/hypertrace-core-graphql-log-event-schema/gradle.lockfile +++ b/hypertrace-core-graphql-log-event-schema/gradle.lockfile @@ -30,15 +30,15 @@ com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClas com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-api:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.59.1=runtimeClasspath -io.grpc:grpc-core:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-inprocess:1.59.1=runtimeClasspath -io.grpc:grpc-protobuf-lite:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-protobuf:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-stub:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-util:1.59.1=runtimeClasspath +io.grpc:grpc-api:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.60.0=runtimeClasspath +io.grpc:grpc-core:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-inprocess:1.60.0=runtimeClasspath +io.grpc:grpc-protobuf-lite:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-protobuf:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-stub:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-util:1.60.0=runtimeClasspath io.netty:netty-bom:4.1.101.Final=runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath @@ -50,12 +50,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.7=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.7=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.7=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.8=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.8=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.8=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath diff --git a/hypertrace-core-graphql-metadata-schema/gradle.lockfile b/hypertrace-core-graphql-metadata-schema/gradle.lockfile index d016b51a..ab18e1e5 100644 --- a/hypertrace-core-graphql-metadata-schema/gradle.lockfile +++ b/hypertrace-core-graphql-metadata-schema/gradle.lockfile @@ -29,15 +29,15 @@ com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClas com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-api:1.59.1=runtimeClasspath -io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.59.1=runtimeClasspath -io.grpc:grpc-core:1.59.1=runtimeClasspath -io.grpc:grpc-inprocess:1.59.1=runtimeClasspath -io.grpc:grpc-protobuf-lite:1.59.1=runtimeClasspath -io.grpc:grpc-protobuf:1.59.1=runtimeClasspath -io.grpc:grpc-stub:1.59.1=runtimeClasspath -io.grpc:grpc-util:1.59.1=runtimeClasspath +io.grpc:grpc-api:1.60.0=runtimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.60.0=runtimeClasspath +io.grpc:grpc-core:1.60.0=runtimeClasspath +io.grpc:grpc-inprocess:1.60.0=runtimeClasspath +io.grpc:grpc-protobuf-lite:1.60.0=runtimeClasspath +io.grpc:grpc-protobuf:1.60.0=runtimeClasspath +io.grpc:grpc-stub:1.60.0=runtimeClasspath +io.grpc:grpc-util:1.60.0=runtimeClasspath io.netty:netty-bom:4.1.101.Final=runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath @@ -49,12 +49,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.7=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.7=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.7=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.8=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.8=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.8=runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-request-transformation/gradle.lockfile b/hypertrace-core-graphql-request-transformation/gradle.lockfile index 7bbba27b..27a0cd85 100644 --- a/hypertrace-core-graphql-request-transformation/gradle.lockfile +++ b/hypertrace-core-graphql-request-transformation/gradle.lockfile @@ -29,15 +29,15 @@ com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClas com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-api:1.59.1=runtimeClasspath -io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.59.1=runtimeClasspath -io.grpc:grpc-core:1.59.1=runtimeClasspath -io.grpc:grpc-inprocess:1.59.1=runtimeClasspath -io.grpc:grpc-protobuf-lite:1.59.1=runtimeClasspath -io.grpc:grpc-protobuf:1.59.1=runtimeClasspath -io.grpc:grpc-stub:1.59.1=runtimeClasspath -io.grpc:grpc-util:1.59.1=runtimeClasspath +io.grpc:grpc-api:1.60.0=runtimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.60.0=runtimeClasspath +io.grpc:grpc-core:1.60.0=runtimeClasspath +io.grpc:grpc-inprocess:1.60.0=runtimeClasspath +io.grpc:grpc-protobuf-lite:1.60.0=runtimeClasspath +io.grpc:grpc-protobuf:1.60.0=runtimeClasspath +io.grpc:grpc-stub:1.60.0=runtimeClasspath +io.grpc:grpc-util:1.60.0=runtimeClasspath io.netty:netty-bom:4.1.101.Final=runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath @@ -49,12 +49,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.7=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.7=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.7=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.8=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.8=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.8=runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-rx-utils/gradle.lockfile b/hypertrace-core-graphql-rx-utils/gradle.lockfile index a6439e92..6b13c60f 100644 --- a/hypertrace-core-graphql-rx-utils/gradle.lockfile +++ b/hypertrace-core-graphql-rx-utils/gradle.lockfile @@ -15,13 +15,13 @@ com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClas com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-registry/gradle.lockfile b/hypertrace-core-graphql-schema-registry/gradle.lockfile index 5978708e..f462b82d 100644 --- a/hypertrace-core-graphql-schema-registry/gradle.lockfile +++ b/hypertrace-core-graphql-schema-registry/gradle.lockfile @@ -15,12 +15,12 @@ com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClas com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-utils/gradle.lockfile b/hypertrace-core-graphql-schema-utils/gradle.lockfile index b50ffbeb..9a44aeaa 100644 --- a/hypertrace-core-graphql-schema-utils/gradle.lockfile +++ b/hypertrace-core-graphql-schema-utils/gradle.lockfile @@ -13,11 +13,11 @@ com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath com.google.j2objc:j2objc-annotations:2.8=compileClasspath com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-service/gradle.lockfile b/hypertrace-core-graphql-service/gradle.lockfile index 6e7b08c6..3de40584 100644 --- a/hypertrace-core-graphql-service/gradle.lockfile +++ b/hypertrace-core-graphql-service/gradle.lockfile @@ -40,16 +40,16 @@ io.dropwizard.metrics:metrics-jvm:4.2.16=runtimeClasspath io.dropwizard.metrics:metrics-servlets:4.2.16=runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath io.github.mweirauch:micrometer-jvm-extras:0.2.2=runtimeClasspath -io.grpc:grpc-api:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-core:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-inprocess:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-netty:1.59.1=runtimeClasspath -io.grpc:grpc-protobuf-lite:1.59.1=runtimeClasspath -io.grpc:grpc-protobuf:1.59.1=runtimeClasspath -io.grpc:grpc-stub:1.59.1=runtimeClasspath -io.grpc:grpc-util:1.59.1=runtimeClasspath +io.grpc:grpc-api:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-core:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-inprocess:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-netty:1.60.0=runtimeClasspath +io.grpc:grpc-protobuf-lite:1.60.0=runtimeClasspath +io.grpc:grpc-protobuf:1.60.0=runtimeClasspath +io.grpc:grpc-stub:1.60.0=runtimeClasspath +io.grpc:grpc-util:1.60.0=runtimeClasspath io.micrometer:micrometer-commons:1.10.2=runtimeClasspath io.micrometer:micrometer-core:1.10.2=runtimeClasspath io.micrometer:micrometer-observation:1.10.2=runtimeClasspath @@ -105,17 +105,17 @@ org.eclipse.jetty:jetty-servlets:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util-ajax:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util:9.4.53.v20231009=runtimeClasspath org.hdrhistogram:HdrHistogram:2.1.12=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.7=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.7=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.7=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.8=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.8=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.8=runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath -org.hypertrace.core.serviceframework:platform-http-service-framework:0.1.63=compileClasspath,runtimeClasspath -org.hypertrace.core.serviceframework:platform-metrics:0.1.63=runtimeClasspath -org.hypertrace.core.serviceframework:platform-service-framework:0.1.63=compileClasspath,runtimeClasspath -org.hypertrace.core.serviceframework:service-framework-spi:0.1.63=compileClasspath,runtimeClasspath +org.hypertrace.core.serviceframework:platform-http-service-framework:0.1.64=compileClasspath,runtimeClasspath +org.hypertrace.core.serviceframework:platform-metrics:0.1.64=runtimeClasspath +org.hypertrace.core.serviceframework:platform-service-framework:0.1.64=compileClasspath,runtimeClasspath +org.hypertrace.core.serviceframework:service-framework-spi:0.1.64=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=runtimeClasspath org.latencyutils:LatencyUtils:2.0.3=runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath diff --git a/hypertrace-core-graphql-span-schema/gradle.lockfile b/hypertrace-core-graphql-span-schema/gradle.lockfile index 5b6fc055..c427051d 100644 --- a/hypertrace-core-graphql-span-schema/gradle.lockfile +++ b/hypertrace-core-graphql-span-schema/gradle.lockfile @@ -30,15 +30,15 @@ com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClas com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-api:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.59.1=runtimeClasspath -io.grpc:grpc-core:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-inprocess:1.59.1=runtimeClasspath -io.grpc:grpc-protobuf-lite:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-protobuf:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-stub:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-util:1.59.1=runtimeClasspath +io.grpc:grpc-api:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.60.0=runtimeClasspath +io.grpc:grpc-core:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-inprocess:1.60.0=runtimeClasspath +io.grpc:grpc-protobuf-lite:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-protobuf:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-stub:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-util:1.60.0=runtimeClasspath io.netty:netty-bom:4.1.101.Final=runtimeClasspath io.opentelemetry:opentelemetry-proto:1.1.0-alpha=compileClasspath,runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath @@ -53,12 +53,12 @@ org.apache.commons:commons-lang3:3.12.0=compileClasspath,runtimeClasspath org.apache.commons:commons-text:1.10.0=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.7=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.7=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.7=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.8=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.8=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.8=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath diff --git a/hypertrace-core-graphql-spi/gradle.lockfile b/hypertrace-core-graphql-spi/gradle.lockfile index e3ffd54c..f619c323 100644 --- a/hypertrace-core-graphql-spi/gradle.lockfile +++ b/hypertrace-core-graphql-spi/gradle.lockfile @@ -7,9 +7,9 @@ com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClas com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-trace-schema/gradle.lockfile b/hypertrace-core-graphql-trace-schema/gradle.lockfile index 14934e44..94eb9082 100644 --- a/hypertrace-core-graphql-trace-schema/gradle.lockfile +++ b/hypertrace-core-graphql-trace-schema/gradle.lockfile @@ -30,15 +30,15 @@ com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClas com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-api:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.59.1=runtimeClasspath -io.grpc:grpc-core:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-inprocess:1.59.1=runtimeClasspath -io.grpc:grpc-protobuf-lite:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-protobuf:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-stub:1.59.1=compileClasspath,runtimeClasspath -io.grpc:grpc-util:1.59.1=runtimeClasspath +io.grpc:grpc-api:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-context:1.60.0=runtimeClasspath +io.grpc:grpc-core:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-inprocess:1.60.0=runtimeClasspath +io.grpc:grpc-protobuf-lite:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-protobuf:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-stub:1.60.0=compileClasspath,runtimeClasspath +io.grpc:grpc-util:1.60.0=runtimeClasspath io.netty:netty-bom:4.1.101.Final=runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath @@ -50,12 +50,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.5=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.7=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.7=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.7=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.8=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.12.8=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.12.8=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath From 39dc2562000f66f4da11f32abab60e2c71afbc1f Mon Sep 17 00:00:00 2001 From: "hypertrace-ci-app[bot]" <145367492+hypertrace-ci-app[bot]@users.noreply.github.com> Date: Fri, 22 Dec 2023 08:14:23 -0500 Subject: [PATCH 150/173] Update gradle locks (#159) Co-authored-by: aaron-steinfeld --- .../gradle.lockfile | 4 ++-- .../gradle.lockfile | 10 +++++----- .../gradle.lockfile | 10 +++++----- hypertrace-core-graphql-common-schema/gradle.lockfile | 10 +++++----- hypertrace-core-graphql-context/gradle.lockfile | 4 ++-- .../gradle.lockfile | 4 ++-- .../gradle.lockfile | 10 +++++----- hypertrace-core-graphql-grpc-utils/gradle.lockfile | 8 ++++---- hypertrace-core-graphql-impl/gradle.lockfile | 10 +++++----- .../gradle.lockfile | 10 +++++----- .../gradle.lockfile | 10 +++++----- .../gradle.lockfile | 10 +++++----- hypertrace-core-graphql-rx-utils/gradle.lockfile | 4 ++-- .../gradle.lockfile | 4 ++-- hypertrace-core-graphql-schema-utils/gradle.lockfile | 4 ++-- hypertrace-core-graphql-service/gradle.lockfile | 10 +++++----- hypertrace-core-graphql-span-schema/gradle.lockfile | 10 +++++----- hypertrace-core-graphql-spi/gradle.lockfile | 4 ++-- hypertrace-core-graphql-trace-schema/gradle.lockfile | 10 +++++----- 19 files changed, 73 insertions(+), 73 deletions(-) diff --git a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile index e4b17b67..3f44ee2b 100644 --- a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile @@ -3,6 +3,6 @@ # This file is expected to be part of source control. com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-attribute-scope/gradle.lockfile b/hypertrace-core-graphql-attribute-scope/gradle.lockfile index 27a0cd85..bd64d2ea 100644 --- a/hypertrace-core-graphql-attribute-scope/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope/gradle.lockfile @@ -49,13 +49,13 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.8=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.8=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.8=runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.0=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.0=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.0=runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-attribute-store/gradle.lockfile b/hypertrace-core-graphql-attribute-store/gradle.lockfile index 028ca41b..11b0f9d0 100644 --- a/hypertrace-core-graphql-attribute-store/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-store/gradle.lockfile @@ -47,13 +47,13 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.8=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.8=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.8=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.0=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.0=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.0=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-common-schema/gradle.lockfile b/hypertrace-core-graphql-common-schema/gradle.lockfile index ab18e1e5..a5c61ea0 100644 --- a/hypertrace-core-graphql-common-schema/gradle.lockfile +++ b/hypertrace-core-graphql-common-schema/gradle.lockfile @@ -49,13 +49,13 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.8=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.8=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.8=runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.0=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.0=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.0=runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-context/gradle.lockfile b/hypertrace-core-graphql-context/gradle.lockfile index 47e84b37..8ba18476 100644 --- a/hypertrace-core-graphql-context/gradle.lockfile +++ b/hypertrace-core-graphql-context/gradle.lockfile @@ -28,8 +28,8 @@ javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-deserialization/gradle.lockfile b/hypertrace-core-graphql-deserialization/gradle.lockfile index acf2e253..056f7435 100644 --- a/hypertrace-core-graphql-deserialization/gradle.lockfile +++ b/hypertrace-core-graphql-deserialization/gradle.lockfile @@ -22,8 +22,8 @@ io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile index 98564f28..ab6653c6 100644 --- a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile +++ b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile @@ -48,13 +48,13 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.8=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.8=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.8=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.0=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.0=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.0=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-grpc-utils/gradle.lockfile b/hypertrace-core-graphql-grpc-utils/gradle.lockfile index c4471d33..37bb5d61 100644 --- a/hypertrace-core-graphql-grpc-utils/gradle.lockfile +++ b/hypertrace-core-graphql-grpc-utils/gradle.lockfile @@ -42,10 +42,10 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.8=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.8=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.0=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.0=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-impl/gradle.lockfile b/hypertrace-core-graphql-impl/gradle.lockfile index 0a22f369..961e1439 100644 --- a/hypertrace-core-graphql-impl/gradle.lockfile +++ b/hypertrace-core-graphql-impl/gradle.lockfile @@ -52,13 +52,13 @@ org.apache.commons:commons-lang3:3.12.0=runtimeClasspath org.apache.commons:commons-text:1.10.0=runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.8=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.8=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.8=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.0=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.0=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.0=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-log-event-schema/gradle.lockfile b/hypertrace-core-graphql-log-event-schema/gradle.lockfile index 94eb9082..5818e923 100644 --- a/hypertrace-core-graphql-log-event-schema/gradle.lockfile +++ b/hypertrace-core-graphql-log-event-schema/gradle.lockfile @@ -50,13 +50,13 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.8=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.8=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.8=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.0=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.0=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.0=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-metadata-schema/gradle.lockfile b/hypertrace-core-graphql-metadata-schema/gradle.lockfile index ab18e1e5..a5c61ea0 100644 --- a/hypertrace-core-graphql-metadata-schema/gradle.lockfile +++ b/hypertrace-core-graphql-metadata-schema/gradle.lockfile @@ -49,13 +49,13 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.8=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.8=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.8=runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.0=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.0=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.0=runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-request-transformation/gradle.lockfile b/hypertrace-core-graphql-request-transformation/gradle.lockfile index 27a0cd85..bd64d2ea 100644 --- a/hypertrace-core-graphql-request-transformation/gradle.lockfile +++ b/hypertrace-core-graphql-request-transformation/gradle.lockfile @@ -49,13 +49,13 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.8=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.8=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.8=runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.0=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.0=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.0=runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-rx-utils/gradle.lockfile b/hypertrace-core-graphql-rx-utils/gradle.lockfile index 6b13c60f..fa280f2d 100644 --- a/hypertrace-core-graphql-rx-utils/gradle.lockfile +++ b/hypertrace-core-graphql-rx-utils/gradle.lockfile @@ -21,8 +21,8 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-schema-registry/gradle.lockfile b/hypertrace-core-graphql-schema-registry/gradle.lockfile index f462b82d..a79c301e 100644 --- a/hypertrace-core-graphql-schema-registry/gradle.lockfile +++ b/hypertrace-core-graphql-schema-registry/gradle.lockfile @@ -20,8 +20,8 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-schema-utils/gradle.lockfile b/hypertrace-core-graphql-schema-utils/gradle.lockfile index 9a44aeaa..c24799c2 100644 --- a/hypertrace-core-graphql-schema-utils/gradle.lockfile +++ b/hypertrace-core-graphql-schema-utils/gradle.lockfile @@ -17,8 +17,8 @@ io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-service/gradle.lockfile b/hypertrace-core-graphql-service/gradle.lockfile index 3de40584..344388d0 100644 --- a/hypertrace-core-graphql-service/gradle.lockfile +++ b/hypertrace-core-graphql-service/gradle.lockfile @@ -105,13 +105,13 @@ org.eclipse.jetty:jetty-servlets:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util-ajax:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util:9.4.53.v20231009=runtimeClasspath org.hdrhistogram:HdrHistogram:2.1.12=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.8=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.8=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.8=runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.0=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.0=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.0=runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.hypertrace.core.serviceframework:platform-http-service-framework:0.1.64=compileClasspath,runtimeClasspath org.hypertrace.core.serviceframework:platform-metrics:0.1.64=runtimeClasspath org.hypertrace.core.serviceframework:platform-service-framework:0.1.64=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-span-schema/gradle.lockfile b/hypertrace-core-graphql-span-schema/gradle.lockfile index c427051d..ef9e1da4 100644 --- a/hypertrace-core-graphql-span-schema/gradle.lockfile +++ b/hypertrace-core-graphql-span-schema/gradle.lockfile @@ -53,13 +53,13 @@ org.apache.commons:commons-lang3:3.12.0=compileClasspath,runtimeClasspath org.apache.commons:commons-text:1.10.0=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.8=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.8=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.8=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.0=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.0=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.0=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-spi/gradle.lockfile b/hypertrace-core-graphql-spi/gradle.lockfile index f619c323..ba0287bd 100644 --- a/hypertrace-core-graphql-spi/gradle.lockfile +++ b/hypertrace-core-graphql-spi/gradle.lockfile @@ -9,8 +9,8 @@ com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-trace-schema/gradle.lockfile b/hypertrace-core-graphql-trace-schema/gradle.lockfile index 94eb9082..5818e923 100644 --- a/hypertrace-core-graphql-trace-schema/gradle.lockfile +++ b/hypertrace-core-graphql-trace-schema/gradle.lockfile @@ -50,13 +50,13 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.6=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.12.8=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.12.8=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.12.8=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.0=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.0=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.0=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath From 95d7ea8c5425b0b37e58e9669eaefd07aefb8615 Mon Sep 17 00:00:00 2001 From: "hypertrace-ci-app[bot]" <145367492+hypertrace-ci-app[bot]@users.noreply.github.com> Date: Fri, 5 Jan 2024 08:46:31 -0500 Subject: [PATCH 151/173] Update gradle locks (#160) Co-authored-by: aaron-steinfeld --- .../gradle.lockfile | 2 +- hypertrace-core-graphql-attribute-scope/gradle.lockfile | 8 ++++---- hypertrace-core-graphql-attribute-store/gradle.lockfile | 8 ++++---- hypertrace-core-graphql-common-schema/gradle.lockfile | 8 ++++---- hypertrace-core-graphql-context/gradle.lockfile | 2 +- hypertrace-core-graphql-deserialization/gradle.lockfile | 2 +- .../gradle.lockfile | 8 ++++---- hypertrace-core-graphql-grpc-utils/gradle.lockfile | 6 +++--- hypertrace-core-graphql-impl/gradle.lockfile | 8 ++++---- hypertrace-core-graphql-log-event-schema/gradle.lockfile | 8 ++++---- hypertrace-core-graphql-metadata-schema/gradle.lockfile | 8 ++++---- .../gradle.lockfile | 8 ++++---- hypertrace-core-graphql-rx-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-schema-registry/gradle.lockfile | 2 +- hypertrace-core-graphql-schema-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-service/gradle.lockfile | 8 ++++---- hypertrace-core-graphql-span-schema/gradle.lockfile | 8 ++++---- hypertrace-core-graphql-spi/gradle.lockfile | 2 +- hypertrace-core-graphql-trace-schema/gradle.lockfile | 8 ++++---- 19 files changed, 54 insertions(+), 54 deletions(-) diff --git a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile index 3f44ee2b..4170ac83 100644 --- a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile @@ -3,6 +3,6 @@ # This file is expected to be part of source control. com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-attribute-scope/gradle.lockfile b/hypertrace-core-graphql-attribute-scope/gradle.lockfile index bd64d2ea..1b2a5d83 100644 --- a/hypertrace-core-graphql-attribute-scope/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope/gradle.lockfile @@ -49,12 +49,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.0=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.0=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.0=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-attribute-store/gradle.lockfile b/hypertrace-core-graphql-attribute-store/gradle.lockfile index 11b0f9d0..8ebd662a 100644 --- a/hypertrace-core-graphql-attribute-store/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-store/gradle.lockfile @@ -47,12 +47,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.0=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.0=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.0=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-common-schema/gradle.lockfile b/hypertrace-core-graphql-common-schema/gradle.lockfile index a5c61ea0..f4c9d068 100644 --- a/hypertrace-core-graphql-common-schema/gradle.lockfile +++ b/hypertrace-core-graphql-common-schema/gradle.lockfile @@ -49,12 +49,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.0=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.0=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.0=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-context/gradle.lockfile b/hypertrace-core-graphql-context/gradle.lockfile index 8ba18476..077deb4a 100644 --- a/hypertrace-core-graphql-context/gradle.lockfile +++ b/hypertrace-core-graphql-context/gradle.lockfile @@ -28,7 +28,7 @@ javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-deserialization/gradle.lockfile b/hypertrace-core-graphql-deserialization/gradle.lockfile index 056f7435..ba443a38 100644 --- a/hypertrace-core-graphql-deserialization/gradle.lockfile +++ b/hypertrace-core-graphql-deserialization/gradle.lockfile @@ -22,7 +22,7 @@ io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile index ab6653c6..4fd1864b 100644 --- a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile +++ b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile @@ -48,12 +48,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.0=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.0=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.0=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-grpc-utils/gradle.lockfile b/hypertrace-core-graphql-grpc-utils/gradle.lockfile index 37bb5d61..89716314 100644 --- a/hypertrace-core-graphql-grpc-utils/gradle.lockfile +++ b/hypertrace-core-graphql-grpc-utils/gradle.lockfile @@ -42,9 +42,9 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.0=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.0=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-impl/gradle.lockfile b/hypertrace-core-graphql-impl/gradle.lockfile index 961e1439..bdacc864 100644 --- a/hypertrace-core-graphql-impl/gradle.lockfile +++ b/hypertrace-core-graphql-impl/gradle.lockfile @@ -52,12 +52,12 @@ org.apache.commons:commons-lang3:3.12.0=runtimeClasspath org.apache.commons:commons-text:1.10.0=runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.0=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.0=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.0=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-log-event-schema/gradle.lockfile b/hypertrace-core-graphql-log-event-schema/gradle.lockfile index 5818e923..71eba873 100644 --- a/hypertrace-core-graphql-log-event-schema/gradle.lockfile +++ b/hypertrace-core-graphql-log-event-schema/gradle.lockfile @@ -50,12 +50,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.0=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.0=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.0=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath diff --git a/hypertrace-core-graphql-metadata-schema/gradle.lockfile b/hypertrace-core-graphql-metadata-schema/gradle.lockfile index a5c61ea0..f4c9d068 100644 --- a/hypertrace-core-graphql-metadata-schema/gradle.lockfile +++ b/hypertrace-core-graphql-metadata-schema/gradle.lockfile @@ -49,12 +49,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.0=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.0=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.0=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-request-transformation/gradle.lockfile b/hypertrace-core-graphql-request-transformation/gradle.lockfile index bd64d2ea..1b2a5d83 100644 --- a/hypertrace-core-graphql-request-transformation/gradle.lockfile +++ b/hypertrace-core-graphql-request-transformation/gradle.lockfile @@ -49,12 +49,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.0=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.0=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.0=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-rx-utils/gradle.lockfile b/hypertrace-core-graphql-rx-utils/gradle.lockfile index fa280f2d..fdbbd379 100644 --- a/hypertrace-core-graphql-rx-utils/gradle.lockfile +++ b/hypertrace-core-graphql-rx-utils/gradle.lockfile @@ -21,7 +21,7 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-registry/gradle.lockfile b/hypertrace-core-graphql-schema-registry/gradle.lockfile index a79c301e..9972d8cb 100644 --- a/hypertrace-core-graphql-schema-registry/gradle.lockfile +++ b/hypertrace-core-graphql-schema-registry/gradle.lockfile @@ -20,7 +20,7 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-utils/gradle.lockfile b/hypertrace-core-graphql-schema-utils/gradle.lockfile index c24799c2..45a14078 100644 --- a/hypertrace-core-graphql-schema-utils/gradle.lockfile +++ b/hypertrace-core-graphql-schema-utils/gradle.lockfile @@ -17,7 +17,7 @@ io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-service/gradle.lockfile b/hypertrace-core-graphql-service/gradle.lockfile index 344388d0..ea7622cb 100644 --- a/hypertrace-core-graphql-service/gradle.lockfile +++ b/hypertrace-core-graphql-service/gradle.lockfile @@ -105,12 +105,12 @@ org.eclipse.jetty:jetty-servlets:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util-ajax:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util:9.4.53.v20231009=runtimeClasspath org.hdrhistogram:HdrHistogram:2.1.12=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.0=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.0=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.0=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.hypertrace.core.serviceframework:platform-http-service-framework:0.1.64=compileClasspath,runtimeClasspath org.hypertrace.core.serviceframework:platform-metrics:0.1.64=runtimeClasspath diff --git a/hypertrace-core-graphql-span-schema/gradle.lockfile b/hypertrace-core-graphql-span-schema/gradle.lockfile index ef9e1da4..41c8718d 100644 --- a/hypertrace-core-graphql-span-schema/gradle.lockfile +++ b/hypertrace-core-graphql-span-schema/gradle.lockfile @@ -53,12 +53,12 @@ org.apache.commons:commons-lang3:3.12.0=compileClasspath,runtimeClasspath org.apache.commons:commons-text:1.10.0=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.0=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.0=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.0=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath diff --git a/hypertrace-core-graphql-spi/gradle.lockfile b/hypertrace-core-graphql-spi/gradle.lockfile index ba0287bd..0b8cbe3f 100644 --- a/hypertrace-core-graphql-spi/gradle.lockfile +++ b/hypertrace-core-graphql-spi/gradle.lockfile @@ -9,7 +9,7 @@ com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-trace-schema/gradle.lockfile b/hypertrace-core-graphql-trace-schema/gradle.lockfile index 5818e923..71eba873 100644 --- a/hypertrace-core-graphql-trace-schema/gradle.lockfile +++ b/hypertrace-core-graphql-trace-schema/gradle.lockfile @@ -50,12 +50,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.8=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.0=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.0=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.0=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath From 73a54c27d6575c4e576573fc71f17bedae9d16a8 Mon Sep 17 00:00:00 2001 From: "hypertrace-ci-app[bot]" <145367492+hypertrace-ci-app[bot]@users.noreply.github.com> Date: Fri, 12 Jan 2024 08:58:11 -0500 Subject: [PATCH 152/173] Update gradle locks (#161) Co-authored-by: aaron-steinfeld --- .../gradle.lockfile | 2 +- hypertrace-core-graphql-attribute-scope/gradle.lockfile | 2 +- hypertrace-core-graphql-attribute-store/gradle.lockfile | 2 +- hypertrace-core-graphql-common-schema/gradle.lockfile | 2 +- hypertrace-core-graphql-context/gradle.lockfile | 2 +- hypertrace-core-graphql-deserialization/gradle.lockfile | 2 +- hypertrace-core-graphql-gateway-service-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-grpc-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-impl/gradle.lockfile | 2 +- hypertrace-core-graphql-log-event-schema/gradle.lockfile | 2 +- hypertrace-core-graphql-metadata-schema/gradle.lockfile | 2 +- hypertrace-core-graphql-request-transformation/gradle.lockfile | 2 +- hypertrace-core-graphql-rx-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-schema-registry/gradle.lockfile | 2 +- hypertrace-core-graphql-schema-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-service/gradle.lockfile | 2 +- hypertrace-core-graphql-span-schema/gradle.lockfile | 2 +- hypertrace-core-graphql-spi/gradle.lockfile | 2 +- hypertrace-core-graphql-trace-schema/gradle.lockfile | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile index 4170ac83..38bdf29a 100644 --- a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile @@ -3,6 +3,6 @@ # This file is expected to be part of source control. com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-attribute-scope/gradle.lockfile b/hypertrace-core-graphql-attribute-scope/gradle.lockfile index 1b2a5d83..5025c75c 100644 --- a/hypertrace-core-graphql-attribute-scope/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-attribute-store/gradle.lockfile b/hypertrace-core-graphql-attribute-store/gradle.lockfile index 8ebd662a..ae2f8c52 100644 --- a/hypertrace-core-graphql-attribute-store/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-store/gradle.lockfile @@ -47,7 +47,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-common-schema/gradle.lockfile b/hypertrace-core-graphql-common-schema/gradle.lockfile index f4c9d068..37c5c504 100644 --- a/hypertrace-core-graphql-common-schema/gradle.lockfile +++ b/hypertrace-core-graphql-common-schema/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-context/gradle.lockfile b/hypertrace-core-graphql-context/gradle.lockfile index 077deb4a..2d332e9d 100644 --- a/hypertrace-core-graphql-context/gradle.lockfile +++ b/hypertrace-core-graphql-context/gradle.lockfile @@ -28,7 +28,7 @@ javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-deserialization/gradle.lockfile b/hypertrace-core-graphql-deserialization/gradle.lockfile index ba443a38..7def12e8 100644 --- a/hypertrace-core-graphql-deserialization/gradle.lockfile +++ b/hypertrace-core-graphql-deserialization/gradle.lockfile @@ -22,7 +22,7 @@ io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile index 4fd1864b..f4000162 100644 --- a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile +++ b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile @@ -48,7 +48,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-grpc-utils/gradle.lockfile b/hypertrace-core-graphql-grpc-utils/gradle.lockfile index 89716314..35909e3c 100644 --- a/hypertrace-core-graphql-grpc-utils/gradle.lockfile +++ b/hypertrace-core-graphql-grpc-utils/gradle.lockfile @@ -42,7 +42,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-impl/gradle.lockfile b/hypertrace-core-graphql-impl/gradle.lockfile index bdacc864..302e4fbc 100644 --- a/hypertrace-core-graphql-impl/gradle.lockfile +++ b/hypertrace-core-graphql-impl/gradle.lockfile @@ -52,7 +52,7 @@ org.apache.commons:commons-lang3:3.12.0=runtimeClasspath org.apache.commons:commons-text:1.10.0=runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-log-event-schema/gradle.lockfile b/hypertrace-core-graphql-log-event-schema/gradle.lockfile index 71eba873..3334c702 100644 --- a/hypertrace-core-graphql-log-event-schema/gradle.lockfile +++ b/hypertrace-core-graphql-log-event-schema/gradle.lockfile @@ -50,7 +50,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-metadata-schema/gradle.lockfile b/hypertrace-core-graphql-metadata-schema/gradle.lockfile index f4c9d068..37c5c504 100644 --- a/hypertrace-core-graphql-metadata-schema/gradle.lockfile +++ b/hypertrace-core-graphql-metadata-schema/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-request-transformation/gradle.lockfile b/hypertrace-core-graphql-request-transformation/gradle.lockfile index 1b2a5d83..5025c75c 100644 --- a/hypertrace-core-graphql-request-transformation/gradle.lockfile +++ b/hypertrace-core-graphql-request-transformation/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-rx-utils/gradle.lockfile b/hypertrace-core-graphql-rx-utils/gradle.lockfile index fdbbd379..2ab1f965 100644 --- a/hypertrace-core-graphql-rx-utils/gradle.lockfile +++ b/hypertrace-core-graphql-rx-utils/gradle.lockfile @@ -21,7 +21,7 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-registry/gradle.lockfile b/hypertrace-core-graphql-schema-registry/gradle.lockfile index 9972d8cb..08124a3e 100644 --- a/hypertrace-core-graphql-schema-registry/gradle.lockfile +++ b/hypertrace-core-graphql-schema-registry/gradle.lockfile @@ -20,7 +20,7 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-utils/gradle.lockfile b/hypertrace-core-graphql-schema-utils/gradle.lockfile index 45a14078..92274a6b 100644 --- a/hypertrace-core-graphql-schema-utils/gradle.lockfile +++ b/hypertrace-core-graphql-schema-utils/gradle.lockfile @@ -17,7 +17,7 @@ io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-service/gradle.lockfile b/hypertrace-core-graphql-service/gradle.lockfile index ea7622cb..ac5f5f6d 100644 --- a/hypertrace-core-graphql-service/gradle.lockfile +++ b/hypertrace-core-graphql-service/gradle.lockfile @@ -105,7 +105,7 @@ org.eclipse.jetty:jetty-servlets:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util-ajax:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util:9.4.53.v20231009=runtimeClasspath org.hdrhistogram:HdrHistogram:2.1.12=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-span-schema/gradle.lockfile b/hypertrace-core-graphql-span-schema/gradle.lockfile index 41c8718d..71f114bc 100644 --- a/hypertrace-core-graphql-span-schema/gradle.lockfile +++ b/hypertrace-core-graphql-span-schema/gradle.lockfile @@ -53,7 +53,7 @@ org.apache.commons:commons-lang3:3.12.0=compileClasspath,runtimeClasspath org.apache.commons:commons-text:1.10.0=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-spi/gradle.lockfile b/hypertrace-core-graphql-spi/gradle.lockfile index 0b8cbe3f..1a87c920 100644 --- a/hypertrace-core-graphql-spi/gradle.lockfile +++ b/hypertrace-core-graphql-spi/gradle.lockfile @@ -9,7 +9,7 @@ com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-trace-schema/gradle.lockfile b/hypertrace-core-graphql-trace-schema/gradle.lockfile index 71eba873..3334c702 100644 --- a/hypertrace-core-graphql-trace-schema/gradle.lockfile +++ b/hypertrace-core-graphql-trace-schema/gradle.lockfile @@ -50,7 +50,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.9=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath From 599872699e33c2a9ff657427df795c95d81d32a8 Mon Sep 17 00:00:00 2001 From: "hypertrace-ci-app[bot]" <145367492+hypertrace-ci-app[bot]@users.noreply.github.com> Date: Fri, 19 Jan 2024 08:25:13 -0500 Subject: [PATCH 153/173] Update gradle locks (#163) Co-authored-by: aaron-steinfeld --- .../gradle.lockfile | 4 ++-- .../gradle.lockfile | 14 +++++++------- .../gradle.lockfile | 12 ++++++------ .../gradle.lockfile | 14 +++++++------- hypertrace-core-graphql-context/gradle.lockfile | 12 ++++++------ .../gradle.lockfile | 14 +++++++------- .../gradle.lockfile | 14 +++++++------- hypertrace-core-graphql-grpc-utils/gradle.lockfile | 12 ++++++------ hypertrace-core-graphql-impl/gradle.lockfile | 14 +++++++------- .../gradle.lockfile | 14 +++++++------- .../gradle.lockfile | 14 +++++++------- .../gradle.lockfile | 14 +++++++------- hypertrace-core-graphql-rx-utils/gradle.lockfile | 4 ++-- .../gradle.lockfile | 4 ++-- .../gradle.lockfile | 4 ++-- hypertrace-core-graphql-service/gradle.lockfile | 14 +++++++------- .../gradle.lockfile | 14 +++++++------- hypertrace-core-graphql-spi/gradle.lockfile | 4 ++-- .../gradle.lockfile | 14 +++++++------- 19 files changed, 105 insertions(+), 105 deletions(-) diff --git a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile index 38bdf29a..3c1a6b62 100644 --- a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile @@ -1,8 +1,8 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. -com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-attribute-scope/gradle.lockfile b/hypertrace-core-graphql-attribute-scope/gradle.lockfile index 5025c75c..3ae7dc86 100644 --- a/hypertrace-core-graphql-attribute-scope/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope/gradle.lockfile @@ -4,12 +4,12 @@ aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath com.auth0:java-jwt:4.4.0=runtimeClasspath com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.0=runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath com.google.android:annotations:4.1.1.4=runtimeClasspath com.google.api.grpc:proto-google-common-protos:2.22.0=runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-attribute-store/gradle.lockfile b/hypertrace-core-graphql-attribute-store/gradle.lockfile index ae2f8c52..d164704d 100644 --- a/hypertrace-core-graphql-attribute-store/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-store/gradle.lockfile @@ -4,11 +4,11 @@ aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath com.auth0:java-jwt:4.4.0=runtimeClasspath com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath com.google.android:annotations:4.1.1.4=runtimeClasspath com.google.api.grpc:proto-google-common-protos:2.22.0=compileClasspath,runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath @@ -47,7 +47,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-common-schema/gradle.lockfile b/hypertrace-core-graphql-common-schema/gradle.lockfile index 37c5c504..f100ed14 100644 --- a/hypertrace-core-graphql-common-schema/gradle.lockfile +++ b/hypertrace-core-graphql-common-schema/gradle.lockfile @@ -4,12 +4,12 @@ aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath com.auth0:java-jwt:4.4.0=runtimeClasspath com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.0=runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath com.google.android:annotations:4.1.1.4=runtimeClasspath com.google.api.grpc:proto-google-common-protos:2.22.0=runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-context/gradle.lockfile b/hypertrace-core-graphql-context/gradle.lockfile index 2d332e9d..3aca5966 100644 --- a/hypertrace-core-graphql-context/gradle.lockfile +++ b/hypertrace-core-graphql-context/gradle.lockfile @@ -2,11 +2,11 @@ # Manual edits can break the build and are not advised. # This file is expected to be part of source control. aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath @@ -28,7 +28,7 @@ javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-deserialization/gradle.lockfile b/hypertrace-core-graphql-deserialization/gradle.lockfile index 7def12e8..9d481130 100644 --- a/hypertrace-core-graphql-deserialization/gradle.lockfile +++ b/hypertrace-core-graphql-deserialization/gradle.lockfile @@ -2,12 +2,12 @@ # Manual edits can break the build and are not advised. # This file is expected to be part of source control. aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath @@ -22,7 +22,7 @@ io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile index f4000162..c65b3f95 100644 --- a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile +++ b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile @@ -4,12 +4,12 @@ aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath com.auth0:java-jwt:4.4.0=runtimeClasspath com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.0=runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath com.google.android:annotations:4.1.1.4=runtimeClasspath com.google.api.grpc:proto-google-common-protos:2.22.0=compileClasspath,runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath @@ -48,7 +48,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-grpc-utils/gradle.lockfile b/hypertrace-core-graphql-grpc-utils/gradle.lockfile index 35909e3c..a843e1eb 100644 --- a/hypertrace-core-graphql-grpc-utils/gradle.lockfile +++ b/hypertrace-core-graphql-grpc-utils/gradle.lockfile @@ -4,11 +4,11 @@ aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath com.auth0:java-jwt:4.4.0=runtimeClasspath com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath com.google.android:annotations:4.1.1.4=runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath com.google.code.gson:gson:2.10.1=runtimeClasspath @@ -42,7 +42,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-impl/gradle.lockfile b/hypertrace-core-graphql-impl/gradle.lockfile index 302e4fbc..5c2c56ac 100644 --- a/hypertrace-core-graphql-impl/gradle.lockfile +++ b/hypertrace-core-graphql-impl/gradle.lockfile @@ -4,12 +4,12 @@ aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath com.auth0:java-jwt:4.4.0=runtimeClasspath com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.0=runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath com.google.android:annotations:4.1.1.4=runtimeClasspath com.google.api.grpc:proto-google-common-protos:2.22.0=compileClasspath,runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath @@ -52,7 +52,7 @@ org.apache.commons:commons-lang3:3.12.0=runtimeClasspath org.apache.commons:commons-text:1.10.0=runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-log-event-schema/gradle.lockfile b/hypertrace-core-graphql-log-event-schema/gradle.lockfile index 3334c702..045a6a0d 100644 --- a/hypertrace-core-graphql-log-event-schema/gradle.lockfile +++ b/hypertrace-core-graphql-log-event-schema/gradle.lockfile @@ -4,12 +4,12 @@ aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath com.auth0:java-jwt:4.4.0=runtimeClasspath com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.0=runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath com.google.android:annotations:4.1.1.4=runtimeClasspath com.google.api.grpc:proto-google-common-protos:2.22.0=compileClasspath,runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath @@ -50,7 +50,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-metadata-schema/gradle.lockfile b/hypertrace-core-graphql-metadata-schema/gradle.lockfile index 37c5c504..f100ed14 100644 --- a/hypertrace-core-graphql-metadata-schema/gradle.lockfile +++ b/hypertrace-core-graphql-metadata-schema/gradle.lockfile @@ -4,12 +4,12 @@ aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath com.auth0:java-jwt:4.4.0=runtimeClasspath com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.0=runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath com.google.android:annotations:4.1.1.4=runtimeClasspath com.google.api.grpc:proto-google-common-protos:2.22.0=runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-request-transformation/gradle.lockfile b/hypertrace-core-graphql-request-transformation/gradle.lockfile index 5025c75c..3ae7dc86 100644 --- a/hypertrace-core-graphql-request-transformation/gradle.lockfile +++ b/hypertrace-core-graphql-request-transformation/gradle.lockfile @@ -4,12 +4,12 @@ aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath com.auth0:java-jwt:4.4.0=runtimeClasspath com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.0=runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath com.google.android:annotations:4.1.1.4=runtimeClasspath com.google.api.grpc:proto-google-common-protos:2.22.0=runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-rx-utils/gradle.lockfile b/hypertrace-core-graphql-rx-utils/gradle.lockfile index 2ab1f965..1d65f01a 100644 --- a/hypertrace-core-graphql-rx-utils/gradle.lockfile +++ b/hypertrace-core-graphql-rx-utils/gradle.lockfile @@ -2,7 +2,7 @@ # Manual edits can break the build and are not advised. # This file is expected to be part of source control. aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath @@ -21,7 +21,7 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-registry/gradle.lockfile b/hypertrace-core-graphql-schema-registry/gradle.lockfile index 08124a3e..d9b026d8 100644 --- a/hypertrace-core-graphql-schema-registry/gradle.lockfile +++ b/hypertrace-core-graphql-schema-registry/gradle.lockfile @@ -2,7 +2,7 @@ # Manual edits can break the build and are not advised. # This file is expected to be part of source control. aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath @@ -20,7 +20,7 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-utils/gradle.lockfile b/hypertrace-core-graphql-schema-utils/gradle.lockfile index 92274a6b..fa4d295a 100644 --- a/hypertrace-core-graphql-schema-utils/gradle.lockfile +++ b/hypertrace-core-graphql-schema-utils/gradle.lockfile @@ -2,7 +2,7 @@ # Manual edits can break the build and are not advised. # This file is expected to be part of source control. aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath @@ -17,7 +17,7 @@ io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-service/gradle.lockfile b/hypertrace-core-graphql-service/gradle.lockfile index ac5f5f6d..797abd48 100644 --- a/hypertrace-core-graphql-service/gradle.lockfile +++ b/hypertrace-core-graphql-service/gradle.lockfile @@ -4,12 +4,12 @@ aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath com.auth0:java-jwt:4.4.0=runtimeClasspath com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.0=runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath com.google.android:annotations:4.1.1.4=runtimeClasspath com.google.api.grpc:proto-google-common-protos:2.22.0=runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath @@ -105,7 +105,7 @@ org.eclipse.jetty:jetty-servlets:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util-ajax:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util:9.4.53.v20231009=runtimeClasspath org.hdrhistogram:HdrHistogram:2.1.12=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-span-schema/gradle.lockfile b/hypertrace-core-graphql-span-schema/gradle.lockfile index 71f114bc..97d9ffba 100644 --- a/hypertrace-core-graphql-span-schema/gradle.lockfile +++ b/hypertrace-core-graphql-span-schema/gradle.lockfile @@ -4,12 +4,12 @@ aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath com.auth0:java-jwt:4.4.0=runtimeClasspath com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.0=runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath com.google.android:annotations:4.1.1.4=runtimeClasspath com.google.api.grpc:proto-google-common-protos:2.22.0=compileClasspath,runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath @@ -53,7 +53,7 @@ org.apache.commons:commons-lang3:3.12.0=compileClasspath,runtimeClasspath org.apache.commons:commons-text:1.10.0=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-spi/gradle.lockfile b/hypertrace-core-graphql-spi/gradle.lockfile index 1a87c920..82660cd2 100644 --- a/hypertrace-core-graphql-spi/gradle.lockfile +++ b/hypertrace-core-graphql-spi/gradle.lockfile @@ -1,7 +1,7 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. -com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath @@ -9,7 +9,7 @@ com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-trace-schema/gradle.lockfile b/hypertrace-core-graphql-trace-schema/gradle.lockfile index 3334c702..045a6a0d 100644 --- a/hypertrace-core-graphql-trace-schema/gradle.lockfile +++ b/hypertrace-core-graphql-trace-schema/gradle.lockfile @@ -4,12 +4,12 @@ aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath com.auth0:java-jwt:4.4.0=runtimeClasspath com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.0=runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.0=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath com.google.android:annotations:4.1.1.4=runtimeClasspath com.google.api.grpc:proto-google-common-protos:2.22.0=compileClasspath,runtimeClasspath com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath @@ -50,7 +50,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.10=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath From 1597f9eec8c85041e1b3d05690e8bcb68a347c5f Mon Sep 17 00:00:00 2001 From: GurtejSohi Date: Fri, 19 Jan 2024 19:44:54 +0530 Subject: [PATCH 154/173] chore: add long and boolean array attribute type (#162) --- .../core/graphql/attributes/AttributeModelTranslator.java | 4 ++++ .../core/graphql/attributes/AttributeModelType.java | 4 +++- .../graphql/common/schema/attributes/AttributeType.java | 4 +++- .../common/utils/attributes/AttributeTypeConverter.java | 4 ++++ .../common/utils/attributes/AttributeTypeConverterTest.java | 6 ++++++ 5 files changed, 20 insertions(+), 2 deletions(-) diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java index 695a1939..a2cd57ba 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelTranslator.java @@ -1,9 +1,11 @@ package org.hypertrace.core.graphql.attributes; import static org.hypertrace.core.attribute.service.v1.AttributeKind.TYPE_BOOL; +import static org.hypertrace.core.attribute.service.v1.AttributeKind.TYPE_BOOL_ARRAY; import static org.hypertrace.core.attribute.service.v1.AttributeKind.TYPE_DOUBLE; import static org.hypertrace.core.attribute.service.v1.AttributeKind.TYPE_DOUBLE_ARRAY; import static org.hypertrace.core.attribute.service.v1.AttributeKind.TYPE_INT64; +import static org.hypertrace.core.attribute.service.v1.AttributeKind.TYPE_INT64_ARRAY; import static org.hypertrace.core.attribute.service.v1.AttributeKind.TYPE_STRING; import static org.hypertrace.core.attribute.service.v1.AttributeKind.TYPE_STRING_ARRAY; import static org.hypertrace.core.attribute.service.v1.AttributeKind.TYPE_STRING_MAP; @@ -33,6 +35,8 @@ public class AttributeModelTranslator { .put(TYPE_STRING_MAP, AttributeModelType.STRING_MAP) .put(TYPE_STRING_ARRAY, AttributeModelType.STRING_ARRAY) .put(TYPE_DOUBLE_ARRAY, AttributeModelType.DOUBLE_ARRAY) + .put(TYPE_BOOL_ARRAY, AttributeModelType.BOOLEAN_ARRAY) + .put(TYPE_INT64_ARRAY, AttributeModelType.LONG_ARRAY) .build(); public Optional translate(AttributeMetadata attributeMetadata) { diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelType.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelType.java index 527a8992..c7e79650 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelType.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeModelType.java @@ -8,5 +8,7 @@ public enum AttributeModelType { TIMESTAMP, STRING_MAP, STRING_ARRAY, - DOUBLE_ARRAY + DOUBLE_ARRAY, + LONG_ARRAY, + BOOLEAN_ARRAY; } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeType.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeType.java index 6a385efb..c494d8ef 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeType.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/attributes/AttributeType.java @@ -11,7 +11,9 @@ public enum AttributeType { TIMESTAMP, STRING_MAP, STRING_ARRAY, - DOUBLE_ARRAY; + DOUBLE_ARRAY, + LONG_ARRAY, + BOOLEAN_ARRAY; public static final String TYPE_NAME = "AttributeType"; } diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeTypeConverter.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeTypeConverter.java index bf0868d7..af209e94 100644 --- a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeTypeConverter.java +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/utils/attributes/AttributeTypeConverter.java @@ -1,9 +1,11 @@ package org.hypertrace.core.graphql.common.utils.attributes; import static org.hypertrace.core.graphql.attributes.AttributeModelType.BOOLEAN; +import static org.hypertrace.core.graphql.attributes.AttributeModelType.BOOLEAN_ARRAY; import static org.hypertrace.core.graphql.attributes.AttributeModelType.DOUBLE; import static org.hypertrace.core.graphql.attributes.AttributeModelType.DOUBLE_ARRAY; import static org.hypertrace.core.graphql.attributes.AttributeModelType.LONG; +import static org.hypertrace.core.graphql.attributes.AttributeModelType.LONG_ARRAY; import static org.hypertrace.core.graphql.attributes.AttributeModelType.STRING; import static org.hypertrace.core.graphql.attributes.AttributeModelType.STRING_ARRAY; import static org.hypertrace.core.graphql.attributes.AttributeModelType.STRING_MAP; @@ -28,6 +30,8 @@ public class AttributeTypeConverter implements Converter Date: Thu, 25 Jan 2024 12:00:18 +0530 Subject: [PATCH 155/173] Update gradle to 8.5 (#164) --- gradle/wrapper/gradle-wrapper.jar | Bin 63721 -> 43462 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew.bat | 184 +++++++++++------------ 3 files changed, 93 insertions(+), 93 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 7f93135c49b765f8051ef9d0a6055ff8e46073d8..d64cd4917707c1f8861d8cb53dd15194d4248596 100644 GIT binary patch literal 43462 zcma&NWl&^owk(X(xVyW%ySuwf;qI=D6|RlDJ2cR^yEKh!@I- zp9QeisK*rlxC>+~7Dk4IxIRsKBHqdR9b3+fyL=ynHmIDe&|>O*VlvO+%z5;9Z$|DJ zb4dO}-R=MKr^6EKJiOrJdLnCJn>np?~vU-1sSFgPu;pthGwf}bG z(1db%xwr#x)r+`4AGu$j7~u2MpVs3VpLp|mx&;>`0p0vH6kF+D2CY0fVdQOZ@h;A` z{infNyvmFUiu*XG}RNMNwXrbec_*a3N=2zJ|Wh5z* z5rAX$JJR{#zP>KY**>xHTuw?|-Rg|o24V)74HcfVT;WtQHXlE+_4iPE8QE#DUm%x0 zEKr75ur~W%w#-My3Tj`hH6EuEW+8K-^5P62$7Sc5OK+22qj&Pd1;)1#4tKihi=~8C zHiQSst0cpri6%OeaR`PY>HH_;CPaRNty%WTm4{wDK8V6gCZlG@U3$~JQZ;HPvDJcT1V{ z?>H@13MJcCNe#5z+MecYNi@VT5|&UiN1D4ATT+%M+h4c$t;C#UAs3O_q=GxK0}8%8 z8J(_M9bayxN}69ex4dzM_P3oh@ZGREjVvn%%r7=xjkqxJP4kj}5tlf;QosR=%4L5y zWhgejO=vao5oX%mOHbhJ8V+SG&K5dABn6!WiKl{|oPkq(9z8l&Mm%(=qGcFzI=eLu zWc_oCLyf;hVlB@dnwY98?75B20=n$>u3b|NB28H0u-6Rpl((%KWEBOfElVWJx+5yg z#SGqwza7f}$z;n~g%4HDU{;V{gXIhft*q2=4zSezGK~nBgu9-Q*rZ#2f=Q}i2|qOp z!!y4p)4o=LVUNhlkp#JL{tfkhXNbB=Ox>M=n6soptJw-IDI|_$is2w}(XY>a=H52d z3zE$tjPUhWWS+5h=KVH&uqQS=$v3nRs&p$%11b%5qtF}S2#Pc`IiyBIF4%A!;AVoI zXU8-Rpv!DQNcF~(qQnyyMy=-AN~U>#&X1j5BLDP{?K!%h!;hfJI>$mdLSvktEr*89 zdJHvby^$xEX0^l9g$xW-d?J;L0#(`UT~zpL&*cEh$L|HPAu=P8`OQZV!-}l`noSp_ zQ-1$q$R-gDL)?6YaM!=8H=QGW$NT2SeZlb8PKJdc=F-cT@j7Xags+Pr*jPtlHFnf- zh?q<6;)27IdPc^Wdy-mX%2s84C1xZq9Xms+==F4);O`VUASmu3(RlgE#0+#giLh-& zcxm3_e}n4{%|X zJp{G_j+%`j_q5}k{eW&TlP}J2wtZ2^<^E(O)4OQX8FDp6RJq!F{(6eHWSD3=f~(h} zJXCf7=r<16X{pHkm%yzYI_=VDP&9bmI1*)YXZeB}F? z(%QsB5fo*FUZxK$oX~X^69;x~j7ms8xlzpt-T15e9}$4T-pC z6PFg@;B-j|Ywajpe4~bk#S6(fO^|mm1hKOPfA%8-_iGCfICE|=P_~e;Wz6my&)h_~ zkv&_xSAw7AZ%ThYF(4jADW4vg=oEdJGVOs>FqamoL3Np8>?!W#!R-0%2Bg4h?kz5I zKV-rKN2n(vUL%D<4oj@|`eJ>0i#TmYBtYmfla;c!ATW%;xGQ0*TW@PTlGG><@dxUI zg>+3SiGdZ%?5N=8uoLA|$4isK$aJ%i{hECP$bK{J#0W2gQ3YEa zZQ50Stn6hqdfxJ*9#NuSLwKFCUGk@c=(igyVL;;2^wi4o30YXSIb2g_ud$ zgpCr@H0qWtk2hK8Q|&wx)}4+hTYlf;$a4#oUM=V@Cw#!$(nOFFpZ;0lc!qd=c$S}Z zGGI-0jg~S~cgVT=4Vo)b)|4phjStD49*EqC)IPwyeKBLcN;Wu@Aeph;emROAwJ-0< z_#>wVm$)ygH|qyxZaet&(Vf%pVdnvKWJn9`%DAxj3ot;v>S$I}jJ$FLBF*~iZ!ZXE zkvui&p}fI0Y=IDX)mm0@tAd|fEHl~J&K}ZX(Mm3cm1UAuwJ42+AO5@HwYfDH7ipIc zmI;1J;J@+aCNG1M`Btf>YT>~c&3j~Qi@Py5JT6;zjx$cvOQW@3oQ>|}GH?TW-E z1R;q^QFjm5W~7f}c3Ww|awg1BAJ^slEV~Pk`Kd`PS$7;SqJZNj->it4DW2l15}xP6 zoCl$kyEF%yJni0(L!Z&14m!1urXh6Btj_5JYt1{#+H8w?5QI%% zo-$KYWNMJVH?Hh@1n7OSu~QhSswL8x0=$<8QG_zepi_`y_79=nK=_ZP_`Em2UI*tyQoB+r{1QYZCpb?2OrgUw#oRH$?^Tj!Req>XiE#~B|~ z+%HB;=ic+R@px4Ld8mwpY;W^A%8%l8$@B@1m5n`TlKI6bz2mp*^^^1mK$COW$HOfp zUGTz-cN9?BGEp}5A!mDFjaiWa2_J2Iq8qj0mXzk; z66JBKRP{p%wN7XobR0YjhAuW9T1Gw3FDvR5dWJ8ElNYF94eF3ebu+QwKjtvVu4L zI9ip#mQ@4uqVdkl-TUQMb^XBJVLW(-$s;Nq;@5gr4`UfLgF$adIhd?rHOa%D);whv z=;krPp~@I+-Z|r#s3yCH+c1US?dnm+C*)r{m+86sTJusLdNu^sqLrfWed^ndHXH`m zd3#cOe3>w-ga(Dus_^ppG9AC>Iq{y%%CK+Cro_sqLCs{VLuK=dev>OL1dis4(PQ5R zcz)>DjEkfV+MO;~>VUlYF00SgfUo~@(&9$Iy2|G0T9BSP?&T22>K46D zL*~j#yJ?)^*%J3!16f)@Y2Z^kS*BzwfAQ7K96rFRIh>#$*$_Io;z>ux@}G98!fWR@ zGTFxv4r~v)Gsd|pF91*-eaZ3Qw1MH$K^7JhWIdX%o$2kCbvGDXy)a?@8T&1dY4`;L z4Kn+f%SSFWE_rpEpL9bnlmYq`D!6F%di<&Hh=+!VI~j)2mfil03T#jJ_s?}VV0_hp z7T9bWxc>Jm2Z0WMU?`Z$xE74Gu~%s{mW!d4uvKCx@WD+gPUQ zV0vQS(Ig++z=EHN)BR44*EDSWIyT~R4$FcF*VEY*8@l=218Q05D2$|fXKFhRgBIEE zdDFB}1dKkoO^7}{5crKX!p?dZWNz$m>1icsXG2N+((x0OIST9Zo^DW_tytvlwXGpn zs8?pJXjEG;T@qrZi%#h93?FP$!&P4JA(&H61tqQi=opRzNpm zkrG}$^t9&XduK*Qa1?355wd8G2CI6QEh@Ua>AsD;7oRUNLPb76m4HG3K?)wF~IyS3`fXuNM>${?wmB zpVz;?6_(Fiadfd{vUCBM*_kt$+F3J+IojI;9L(gc9n3{sEZyzR9o!_mOwFC#tQ{Q~ zP3-`#uK#tP3Q7~Q;4H|wjZHO8h7e4IuBxl&vz2w~D8)w=Wtg31zpZhz%+kzSzL*dV zwp@{WU4i;hJ7c2f1O;7Mz6qRKeASoIv0_bV=i@NMG*l<#+;INk-^`5w@}Dj~;k=|}qM1vq_P z|GpBGe_IKq|LNy9SJhKOQ$c=5L{Dv|Q_lZl=-ky*BFBJLW9&y_C|!vyM~rQx=!vun z?rZJQB5t}Dctmui5i31C_;_}CEn}_W%>oSXtt>@kE1=JW*4*v4tPp;O6 zmAk{)m!)}34pTWg8{i>($%NQ(Tl;QC@J@FfBoc%Gr&m560^kgSfodAFrIjF}aIw)X zoXZ`@IsMkc8_=w%-7`D6Y4e*CG8k%Ud=GXhsTR50jUnm+R*0A(O3UKFg0`K;qp1bl z7``HN=?39ic_kR|^R^~w-*pa?Vj#7|e9F1iRx{GN2?wK!xR1GW!qa=~pjJb-#u1K8 zeR?Y2i-pt}yJq;SCiVHODIvQJX|ZJaT8nO+(?HXbLefulKKgM^B(UIO1r+S=7;kLJ zcH}1J=Px2jsh3Tec&v8Jcbng8;V-`#*UHt?hB(pmOipKwf3Lz8rG$heEB30Sg*2rx zV<|KN86$soN(I!BwO`1n^^uF2*x&vJ$2d$>+`(romzHP|)K_KkO6Hc>_dwMW-M(#S zK(~SiXT1@fvc#U+?|?PniDRm01)f^#55;nhM|wi?oG>yBsa?~?^xTU|fX-R(sTA+5 zaq}-8Tx7zrOy#3*JLIIVsBmHYLdD}!0NP!+ITW+Thn0)8SS!$@)HXwB3tY!fMxc#1 zMp3H?q3eD?u&Njx4;KQ5G>32+GRp1Ee5qMO0lZjaRRu&{W<&~DoJNGkcYF<5(Ab+J zgO>VhBl{okDPn78<%&e2mR{jwVCz5Og;*Z;;3%VvoGo_;HaGLWYF7q#jDX=Z#Ml`H z858YVV$%J|e<1n`%6Vsvq7GmnAV0wW4$5qQ3uR@1i>tW{xrl|ExywIc?fNgYlA?C5 zh$ezAFb5{rQu6i7BSS5*J-|9DQ{6^BVQ{b*lq`xS@RyrsJN?-t=MTMPY;WYeKBCNg z^2|pN!Q^WPJuuO4!|P@jzt&tY1Y8d%FNK5xK(!@`jO2aEA*4 zkO6b|UVBipci?){-Ke=+1;mGlND8)6+P;8sq}UXw2hn;fc7nM>g}GSMWu&v&fqh

iViYT=fZ(|3Ox^$aWPp4a8h24tD<|8-!aK0lHgL$N7Efw}J zVIB!7=T$U`ao1?upi5V4Et*-lTG0XvExbf!ya{cua==$WJyVG(CmA6Of*8E@DSE%L z`V^$qz&RU$7G5mg;8;=#`@rRG`-uS18$0WPN@!v2d{H2sOqP|!(cQ@ zUHo!d>>yFArLPf1q`uBvY32miqShLT1B@gDL4XoVTK&@owOoD)OIHXrYK-a1d$B{v zF^}8D3Y^g%^cnvScOSJR5QNH+BI%d|;J;wWM3~l>${fb8DNPg)wrf|GBP8p%LNGN# z3EaIiItgwtGgT&iYCFy9-LG}bMI|4LdmmJt@V@% zb6B)1kc=T)(|L@0;wr<>=?r04N;E&ef+7C^`wPWtyQe(*pD1pI_&XHy|0gIGHMekd zF_*M4yi6J&Z4LQj65)S zXwdM{SwUo%3SbPwFsHgqF@V|6afT|R6?&S;lw=8% z3}@9B=#JI3@B*#4s!O))~z zc>2_4Q_#&+5V`GFd?88^;c1i7;Vv_I*qt!_Yx*n=;rj!82rrR2rQ8u5(Ejlo{15P% zs~!{%XJ>FmJ})H^I9bn^Re&38H{xA!0l3^89k(oU;bZWXM@kn$#aoS&Y4l^-WEn-fH39Jb9lA%s*WsKJQl?n9B7_~P z-XM&WL7Z!PcoF6_D>V@$CvUIEy=+Z&0kt{szMk=f1|M+r*a43^$$B^MidrT0J;RI` z(?f!O<8UZkm$_Ny$Hth1J#^4ni+im8M9mr&k|3cIgwvjAgjH z8`N&h25xV#v*d$qBX5jkI|xOhQn!>IYZK7l5#^P4M&twe9&Ey@@GxYMxBZq2e7?`q z$~Szs0!g{2fGcp9PZEt|rdQ6bhAgpcLHPz?f-vB?$dc*!9OL?Q8mn7->bFD2Si60* z!O%y)fCdMSV|lkF9w%x~J*A&srMyYY3{=&$}H zGQ4VG_?$2X(0|vT0{=;W$~icCI{b6W{B!Q8xdGhF|D{25G_5_+%s(46lhvNLkik~R z>nr(&C#5wwOzJZQo9m|U<;&Wk!_#q|V>fsmj1g<6%hB{jGoNUPjgJslld>xmODzGjYc?7JSuA?A_QzjDw5AsRgi@Y|Z0{F{!1=!NES-#*f^s4l0Hu zz468))2IY5dmD9pa*(yT5{EyP^G>@ZWumealS-*WeRcZ}B%gxq{MiJ|RyX-^C1V=0 z@iKdrGi1jTe8Ya^x7yyH$kBNvM4R~`fbPq$BzHum-3Zo8C6=KW@||>zsA8-Y9uV5V z#oq-f5L5}V<&wF4@X@<3^C%ptp6+Ce)~hGl`kwj)bsAjmo_GU^r940Z-|`<)oGnh7 zFF0Tde3>ui?8Yj{sF-Z@)yQd~CGZ*w-6p2U<8}JO-sRsVI5dBji`01W8A&3$?}lxBaC&vn0E$c5tW* zX>5(zzZ=qn&!J~KdsPl;P@bmA-Pr8T*)eh_+Dv5=Ma|XSle6t(k8qcgNyar{*ReQ8 zTXwi=8vr>!3Ywr+BhggHDw8ke==NTQVMCK`$69fhzEFB*4+H9LIvdt-#IbhZvpS}} zO3lz;P?zr0*0$%-Rq_y^k(?I{Mk}h@w}cZpMUp|ucs55bcloL2)($u%mXQw({Wzc~ z;6nu5MkjP)0C(@%6Q_I_vsWrfhl7Zpoxw#WoE~r&GOSCz;_ro6i(^hM>I$8y>`!wW z*U^@?B!MMmb89I}2(hcE4zN2G^kwyWCZp5JG>$Ez7zP~D=J^LMjSM)27_0B_X^C(M z`fFT+%DcKlu?^)FCK>QzSnV%IsXVcUFhFdBP!6~se&xxrIxsvySAWu++IrH;FbcY$ z2DWTvSBRfLwdhr0nMx+URA$j3i7_*6BWv#DXfym?ZRDcX9C?cY9sD3q)uBDR3uWg= z(lUIzB)G$Hr!){>E{s4Dew+tb9kvToZp-1&c?y2wn@Z~(VBhqz`cB;{E4(P3N2*nJ z_>~g@;UF2iG{Kt(<1PyePTKahF8<)pozZ*xH~U-kfoAayCwJViIrnqwqO}7{0pHw$ zs2Kx?s#vQr7XZ264>5RNKSL8|Ty^=PsIx^}QqOOcfpGUU4tRkUc|kc7-!Ae6!+B{o~7nFpm3|G5^=0#Bnm6`V}oSQlrX(u%OWnC zoLPy&Q;1Jui&7ST0~#+}I^&?vcE*t47~Xq#YwvA^6^} z`WkC)$AkNub|t@S!$8CBlwbV~?yp&@9h{D|3z-vJXgzRC5^nYm+PyPcgRzAnEi6Q^gslXYRv4nycsy-SJu?lMps-? zV`U*#WnFsdPLL)Q$AmD|0`UaC4ND07+&UmOu!eHruzV|OUox<+Jl|Mr@6~C`T@P%s zW7sgXLF2SSe9Fl^O(I*{9wsFSYb2l%-;&Pi^dpv!{)C3d0AlNY6!4fgmSgj_wQ*7Am7&$z;Jg&wgR-Ih;lUvWS|KTSg!&s_E9_bXBkZvGiC6bFKDWZxsD$*NZ#_8bl zG1P-#@?OQzED7@jlMJTH@V!6k;W>auvft)}g zhoV{7$q=*;=l{O>Q4a@ ziMjf_u*o^PsO)#BjC%0^h>Xp@;5$p{JSYDt)zbb}s{Kbt!T*I@Pk@X0zds6wsefuU zW$XY%yyRGC94=6mf?x+bbA5CDQ2AgW1T-jVAJbm7K(gp+;v6E0WI#kuACgV$r}6L? zd|Tj?^%^*N&b>Dd{Wr$FS2qI#Ucs1yd4N+RBUQiSZGujH`#I)mG&VKoDh=KKFl4=G z&MagXl6*<)$6P}*Tiebpz5L=oMaPrN+caUXRJ`D?=K9!e0f{@D&cZLKN?iNP@X0aF zE(^pl+;*T5qt?1jRC=5PMgV!XNITRLS_=9{CJExaQj;lt!&pdzpK?8p>%Mb+D z?yO*uSung=-`QQ@yX@Hyd4@CI^r{2oiu`%^bNkz+Nkk!IunjwNC|WcqvX~k=><-I3 zDQdbdb|!v+Iz01$w@aMl!R)koD77Xp;eZwzSl-AT zr@Vu{=xvgfq9akRrrM)}=!=xcs+U1JO}{t(avgz`6RqiiX<|hGG1pmop8k6Q+G_mv zJv|RfDheUp2L3=^C=4aCBMBn0aRCU(DQwX-W(RkRwmLeuJYF<0urcaf(=7)JPg<3P zQs!~G)9CT18o!J4{zX{_e}4eS)U-E)0FAt}wEI(c0%HkxgggW;(1E=>J17_hsH^sP z%lT0LGgbUXHx-K*CI-MCrP66UP0PvGqM$MkeLyqHdbgP|_Cm!7te~b8p+e6sQ_3k| zVcwTh6d83ltdnR>D^)BYQpDKlLk3g0Hdcgz2}%qUs9~~Rie)A-BV1mS&naYai#xcZ z(d{8=-LVpTp}2*y)|gR~;qc7fp26}lPcLZ#=JpYcn3AT9(UIdOyg+d(P5T7D&*P}# zQCYplZO5|7+r19%9e`v^vfSS1sbX1c%=w1;oyruXB%Kl$ACgKQ6=qNWLsc=28xJjg zwvsI5-%SGU|3p>&zXVl^vVtQT3o-#$UT9LI@Npz~6=4!>mc431VRNN8od&Ul^+G_kHC`G=6WVWM z%9eWNyy(FTO|A+@x}Ou3CH)oi;t#7rAxdIXfNFwOj_@Y&TGz6P_sqiB`Q6Lxy|Q{`|fgmRG(k+!#b*M+Z9zFce)f-7;?Km5O=LHV9f9_87; zF7%R2B+$?@sH&&-$@tzaPYkw0;=i|;vWdI|Wl3q_Zu>l;XdIw2FjV=;Mq5t1Q0|f< zs08j54Bp`3RzqE=2enlkZxmX6OF+@|2<)A^RNQpBd6o@OXl+i)zO%D4iGiQNuXd+zIR{_lb96{lc~bxsBveIw6umhShTX+3@ZJ=YHh@ zWY3(d0azg;7oHn>H<>?4@*RQbi>SmM=JrHvIG(~BrvI)#W(EAeO6fS+}mxxcc+X~W6&YVl86W9WFSS}Vz-f9vS?XUDBk)3TcF z8V?$4Q)`uKFq>xT=)Y9mMFVTUk*NIA!0$?RP6Ig0TBmUFrq*Q-Agq~DzxjStQyJ({ zBeZ;o5qUUKg=4Hypm|}>>L=XKsZ!F$yNTDO)jt4H0gdQ5$f|d&bnVCMMXhNh)~mN z@_UV6D7MVlsWz+zM+inZZp&P4fj=tm6fX)SG5H>OsQf_I8c~uGCig$GzuwViK54bcgL;VN|FnyQl>Ed7(@>=8$a_UKIz|V6CeVSd2(P z0Uu>A8A+muM%HLFJQ9UZ5c)BSAv_zH#1f02x?h9C}@pN@6{>UiAp>({Fn(T9Q8B z^`zB;kJ5b`>%dLm+Ol}ty!3;8f1XDSVX0AUe5P#@I+FQ-`$(a;zNgz)4x5hz$Hfbg z!Q(z26wHLXko(1`;(BAOg_wShpX0ixfWq3ponndY+u%1gyX)_h=v1zR#V}#q{au6; z!3K=7fQwnRfg6FXtNQmP>`<;!N137paFS%y?;lb1@BEdbvQHYC{976l`cLqn;b8lp zIDY>~m{gDj(wfnK!lpW6pli)HyLEiUrNc%eXTil|F2s(AY+LW5hkKb>TQ3|Q4S9rr zpDs4uK_co6XPsn_z$LeS{K4jFF`2>U`tbgKdyDne`xmR<@6AA+_hPNKCOR-Zqv;xk zu5!HsBUb^!4uJ7v0RuH-7?l?}b=w5lzzXJ~gZcxRKOovSk@|#V+MuX%Y+=;14i*%{)_gSW9(#4%)AV#3__kac1|qUy!uyP{>?U#5wYNq}y$S9pCc zFc~4mgSC*G~j0u#qqp9 z${>3HV~@->GqEhr_Xwoxq?Hjn#=s2;i~g^&Hn|aDKpA>Oc%HlW(KA1?BXqpxB;Ydx)w;2z^MpjJ(Qi(X!$5RC z*P{~%JGDQqojV>2JbEeCE*OEu!$XJ>bWA9Oa_Hd;y)F%MhBRi*LPcdqR8X`NQ&1L# z5#9L*@qxrx8n}LfeB^J{%-?SU{FCwiWyHp682F+|pa+CQa3ZLzBqN1{)h4d6+vBbV zC#NEbQLC;}me3eeYnOG*nXOJZEU$xLZ1<1Y=7r0(-U0P6-AqwMAM`a(Ed#7vJkn6plb4eI4?2y3yOTGmmDQ!z9`wzbf z_OY#0@5=bnep;MV0X_;;SJJWEf^E6Bd^tVJ9znWx&Ks8t*B>AM@?;D4oWUGc z!H*`6d7Cxo6VuyS4Eye&L1ZRhrRmN6Lr`{NL(wDbif|y&z)JN>Fl5#Wi&mMIr5i;x zBx}3YfF>>8EC(fYnmpu~)CYHuHCyr5*`ECap%t@y=jD>!_%3iiE|LN$mK9>- zHdtpy8fGZtkZF?%TW~29JIAfi2jZT8>OA7=h;8T{{k?c2`nCEx9$r zS+*&vt~2o^^J+}RDG@+9&M^K*z4p{5#IEVbz`1%`m5c2};aGt=V?~vIM}ZdPECDI)47|CWBCfDWUbxBCnmYivQ*0Nu_xb*C>~C9(VjHM zxe<*D<#dQ8TlpMX2c@M<9$w!RP$hpG4cs%AI){jp*Sj|*`m)5(Bw*A0$*i-(CA5#%>a)$+jI2C9r6|(>J8InryENI z$NohnxDUB;wAYDwrb*!N3noBTKPpPN}~09SEL18tkG zxgz(RYU_;DPT{l?Q$+eaZaxnsWCA^ds^0PVRkIM%bOd|G2IEBBiz{&^JtNsODs;5z zICt_Zj8wo^KT$7Bg4H+y!Df#3mbl%%?|EXe!&(Vmac1DJ*y~3+kRKAD=Ovde4^^%~ zw<9av18HLyrf*_>Slp;^i`Uy~`mvBjZ|?Ad63yQa#YK`4+c6;pW4?XIY9G1(Xh9WO8{F-Aju+nS9Vmv=$Ac0ienZ+p9*O%NG zMZKy5?%Z6TAJTE?o5vEr0r>f>hb#2w2U3DL64*au_@P!J!TL`oH2r*{>ffu6|A7tv zL4juf$DZ1MW5ZPsG!5)`k8d8c$J$o;%EIL0va9&GzWvkS%ZsGb#S(?{!UFOZ9<$a| zY|a+5kmD5N&{vRqkgY>aHsBT&`rg|&kezoD)gP0fsNYHsO#TRc_$n6Lf1Z{?+DLziXlHrq4sf(!>O{?Tj;Eh@%)+nRE_2VxbN&&%%caU#JDU%vL3}Cb zsb4AazPI{>8H&d=jUaZDS$-0^AxE@utGs;-Ez_F(qC9T=UZX=>ok2k2 ziTn{K?y~a5reD2A)P${NoI^>JXn>`IeArow(41c-Wm~)wiryEP(OS{YXWi7;%dG9v zI?mwu1MxD{yp_rrk!j^cKM)dc4@p4Ezyo%lRN|XyD}}>v=Xoib0gOcdXrQ^*61HNj z=NP|pd>@yfvr-=m{8$3A8TQGMTE7g=z!%yt`8`Bk-0MMwW~h^++;qyUP!J~ykh1GO z(FZ59xuFR$(WE;F@UUyE@Sp>`aVNjyj=Ty>_Vo}xf`e7`F;j-IgL5`1~-#70$9_=uBMq!2&1l zomRgpD58@)YYfvLtPW}{C5B35R;ZVvB<<#)x%srmc_S=A7F@DW8>QOEGwD6suhwCg z>Pa+YyULhmw%BA*4yjDp|2{!T98~<6Yfd(wo1mQ!KWwq0eg+6)o1>W~f~kL<-S+P@$wx*zeI|1t7z#Sxr5 zt6w+;YblPQNplq4Z#T$GLX#j6yldXAqj>4gAnnWtBICUnA&-dtnlh=t0Ho_vEKwV` z)DlJi#!@nkYV#$!)@>udAU*hF?V`2$Hf=V&6PP_|r#Iv*J$9)pF@X3`k;5})9^o4y z&)~?EjX5yX12O(BsFy-l6}nYeuKkiq`u9145&3Ssg^y{5G3Pse z9w(YVa0)N-fLaBq1`P!_#>SS(8fh_5!f{UrgZ~uEdeMJIz7DzI5!NHHqQtm~#CPij z?=N|J>nPR6_sL7!f4hD_|KH`vf8(Wpnj-(gPWH+ZvID}%?~68SwhPTC3u1_cB`otq z)U?6qo!ZLi5b>*KnYHWW=3F!p%h1;h{L&(Q&{qY6)_qxNfbP6E3yYpW!EO+IW3?@J z);4>g4gnl^8klu7uA>eGF6rIGSynacogr)KUwE_R4E5Xzi*Qir@b-jy55-JPC8c~( zo!W8y9OGZ&`xmc8;=4-U9=h{vCqfCNzYirONmGbRQlR`WWlgnY+1wCXbMz&NT~9*| z6@FrzP!LX&{no2!Ln_3|I==_4`@}V?4a;YZKTdw;vT<+K+z=uWbW(&bXEaWJ^W8Td z-3&1bY^Z*oM<=M}LVt>_j+p=2Iu7pZmbXrhQ_k)ysE9yXKygFNw$5hwDn(M>H+e1&9BM5!|81vd%r%vEm zqxY3?F@fb6O#5UunwgAHR9jp_W2zZ}NGp2%mTW@(hz7$^+a`A?mb8|_G*GNMJ) zjqegXQio=i@AINre&%ofexAr95aop5C+0MZ0m-l=MeO8m3epm7U%vZB8+I+C*iNFM z#T3l`gknX;D$-`2XT^Cg*vrv=RH+P;_dfF++cP?B_msQI4j+lt&rX2)3GaJx%W*Nn zkML%D{z5tpHH=dksQ*gzc|}gzW;lwAbxoR07VNgS*-c3d&8J|;@3t^ zVUz*J*&r7DFRuFVDCJDK8V9NN5hvpgGjwx+5n)qa;YCKe8TKtdnh{I7NU9BCN!0dq zczrBk8pE{{@vJa9ywR@mq*J=v+PG;?fwqlJVhijG!3VmIKs>9T6r7MJpC)m!Tc#>g zMtVsU>wbwFJEfwZ{vB|ZlttNe83)$iz`~#8UJ^r)lJ@HA&G#}W&ZH*;k{=TavpjWE z7hdyLZPf*X%Gm}i`Y{OGeeu^~nB8=`{r#TUrM-`;1cBvEd#d!kPqIgYySYhN-*1;L z^byj%Yi}Gx)Wnkosi337BKs}+5H5dth1JA{Ir-JKN$7zC)*}hqeoD(WfaUDPT>0`- z(6sa0AoIqASwF`>hP}^|)a_j2s^PQn*qVC{Q}htR z5-)duBFXT_V56-+UohKXlq~^6uf!6sA#ttk1o~*QEy_Y-S$gAvq47J9Vtk$5oA$Ct zYhYJ@8{hsC^98${!#Ho?4y5MCa7iGnfz}b9jE~h%EAAv~Qxu)_rAV;^cygV~5r_~?l=B`zObj7S=H=~$W zPtI_m%g$`kL_fVUk9J@>EiBH zOO&jtn~&`hIFMS5S`g8w94R4H40mdNUH4W@@XQk1sr17b{@y|JB*G9z1|CrQjd+GX z6+KyURG3;!*BQrentw{B2R&@2&`2}n(z-2&X7#r!{yg@Soy}cRD~j zj9@UBW+N|4HW4AWapy4wfUI- zZ`gSL6DUlgj*f1hSOGXG0IVH8HxK?o2|3HZ;KW{K+yPAlxtb)NV_2AwJm|E)FRs&& z=c^e7bvUsztY|+f^k7NXs$o1EUq>cR7C0$UKi6IooHWlK_#?IWDkvywnzg&ThWo^? z2O_N{5X39#?eV9l)xI(>@!vSB{DLt*oY!K1R8}_?%+0^C{d9a%N4 zoxHVT1&Lm|uDX%$QrBun5e-F`HJ^T$ zmzv)p@4ZHd_w9!%Hf9UYNvGCw2TTTbrj9pl+T9%-_-}L(tES>Or-}Z4F*{##n3~L~TuxjirGuIY#H7{%$E${?p{Q01 zi6T`n;rbK1yIB9jmQNycD~yZq&mbIsFWHo|ZAChSFPQa<(%d8mGw*V3fh|yFoxOOiWJd(qvVb!Z$b88cg->N=qO*4k~6;R==|9ihg&riu#P~s4Oap9O7f%crSr^rljeIfXDEg>wi)&v*a%7zpz<9w z*r!3q9J|390x`Zk;g$&OeN&ctp)VKRpDSV@kU2Q>jtok($Y-*x8_$2piTxun81@vt z!Vj?COa0fg2RPXMSIo26T=~0d`{oGP*eV+$!0I<(4azk&Vj3SiG=Q!6mX0p$z7I}; z9BJUFgT-K9MQQ-0@Z=^7R<{bn2Fm48endsSs`V7_@%8?Bxkqv>BDoVcj?K#dV#uUP zL1ND~?D-|VGKe3Rw_7-Idpht>H6XRLh*U7epS6byiGvJpr%d}XwfusjH9g;Z98H`x zyde%%5mhGOiL4wljCaWCk-&uE4_OOccb9c!ZaWt4B(wYl!?vyzl%7n~QepN&eFUrw zFIOl9c({``6~QD+43*_tzP{f2x41h(?b43^y6=iwyB)2os5hBE!@YUS5?N_tXd=h( z)WE286Fbd>R4M^P{!G)f;h<3Q>Fipuy+d2q-)!RyTgt;wr$(?9ox3;q+{E*ZQHhOn;lM`cjnu9 zXa48ks-v(~b*;MAI<>YZH(^NV8vjb34beE<_cwKlJoR;k6lJNSP6v}uiyRD?|0w+X@o1ONrH8a$fCxXpf? z?$DL0)7|X}Oc%h^zrMKWc-NS9I0Utu@>*j}b@tJ=ixQSJ={4@854wzW@E>VSL+Y{i z#0b=WpbCZS>kUCO_iQz)LoE>P5LIG-hv9E+oG}DtlIDF>$tJ1aw9^LuhLEHt?BCj& z(O4I8v1s#HUi5A>nIS-JK{v!7dJx)^Yg%XjNmlkWAq2*cv#tHgz`Y(bETc6CuO1VkN^L-L3j_x<4NqYb5rzrLC-7uOv z!5e`GZt%B782C5-fGnn*GhDF$%(qP<74Z}3xx+{$4cYKy2ikxI7B2N+2r07DN;|-T->nU&!=Cm#rZt%O_5c&1Z%nlWq3TKAW0w zQqemZw_ue--2uKQsx+niCUou?HjD`xhEjjQd3%rrBi82crq*~#uA4+>vR<_S{~5ce z-2EIl?~s z1=GVL{NxP1N3%=AOaC}j_Fv=ur&THz zyO!d9kHq|c73kpq`$+t+8Bw7MgeR5~`d7ChYyGCBWSteTB>8WAU(NPYt2Dk`@#+}= zI4SvLlyk#pBgVigEe`?NG*vl7V6m+<}%FwPV=~PvvA)=#ths==DRTDEYh4V5}Cf$z@#;< zyWfLY_5sP$gc3LLl2x+Ii)#b2nhNXJ{R~vk`s5U7Nyu^3yFg&D%Txwj6QezMX`V(x z=C`{76*mNb!qHHs)#GgGZ_7|vkt9izl_&PBrsu@}L`X{95-2jf99K)0=*N)VxBX2q z((vkpP2RneSIiIUEnGb?VqbMb=Zia+rF~+iqslydE34cSLJ&BJW^3knX@M;t*b=EA zNvGzv41Ld_T+WT#XjDB840vovUU^FtN_)G}7v)1lPetgpEK9YS^OWFkPoE{ovj^=@ zO9N$S=G$1ecndT_=5ehth2Lmd1II-PuT~C9`XVePw$y8J#dpZ?Tss<6wtVglm(Ok7 z3?^oi@pPio6l&!z8JY(pJvG=*pI?GIOu}e^EB6QYk$#FJQ%^AIK$I4epJ+9t?KjqA+bkj&PQ*|vLttme+`9G=L% ziadyMw_7-M)hS(3E$QGNCu|o23|%O+VN7;Qggp?PB3K-iSeBa2b}V4_wY`G1Jsfz4 z9|SdB^;|I8E8gWqHKx!vj_@SMY^hLEIbSMCuE?WKq=c2mJK z8LoG-pnY!uhqFv&L?yEuxo{dpMTsmCn)95xanqBrNPTgXP((H$9N${Ow~Is-FBg%h z53;|Y5$MUN)9W2HBe2TD`ct^LHI<(xWrw}$qSoei?}s)&w$;&!14w6B6>Yr6Y8b)S z0r71`WmAvJJ`1h&poLftLUS6Ir zC$bG9!Im_4Zjse)#K=oJM9mHW1{%l8sz$1o?ltdKlLTxWWPB>Vk22czVt|1%^wnN@*!l)}?EgtvhC>vlHm^t+ogpgHI1_$1ox9e;>0!+b(tBrmXRB`PY1vp-R**8N7 zGP|QqI$m(Rdu#=(?!(N}G9QhQ%o!aXE=aN{&wtGP8|_qh+7a_j_sU5|J^)vxq;# zjvzLn%_QPHZZIWu1&mRAj;Sa_97p_lLq_{~j!M9N^1yp3U_SxRqK&JnR%6VI#^E12 z>CdOVI^_9aPK2eZ4h&^{pQs}xsijXgFYRIxJ~N7&BB9jUR1fm!(xl)mvy|3e6-B3j zJn#ajL;bFTYJ2+Q)tDjx=3IklO@Q+FFM}6UJr6km7hj7th9n_&JR7fnqC!hTZoM~T zBeaVFp%)0cbPhejX<8pf5HyRUj2>aXnXBqDJe73~J%P(2C?-RT{c3NjE`)om! zl$uewSgWkE66$Kb34+QZZvRn`fob~Cl9=cRk@Es}KQm=?E~CE%spXaMO6YmrMl%9Q zlA3Q$3|L1QJ4?->UjT&CBd!~ru{Ih^in&JXO=|<6J!&qp zRe*OZ*cj5bHYlz!!~iEKcuE|;U4vN1rk$xq6>bUWD*u(V@8sG^7>kVuo(QL@Ki;yL zWC!FT(q{E8#on>%1iAS0HMZDJg{Z{^!De(vSIq&;1$+b)oRMwA3nc3mdTSG#3uYO_ z>+x;7p4I;uHz?ZB>dA-BKl+t-3IB!jBRgdvAbW!aJ(Q{aT>+iz?91`C-xbe)IBoND z9_Xth{6?(y3rddwY$GD65IT#f3<(0o#`di{sh2gm{dw*#-Vnc3r=4==&PU^hCv$qd zjw;>i&?L*Wq#TxG$mFIUf>eK+170KG;~+o&1;Tom9}}mKo23KwdEM6UonXgc z!6N(@k8q@HPw{O8O!lAyi{rZv|DpgfU{py+j(X_cwpKqcalcqKIr0kM^%Br3SdeD> zHSKV94Yxw;pjzDHo!Q?8^0bb%L|wC;4U^9I#pd5O&eexX+Im{ z?jKnCcsE|H?{uGMqVie_C~w7GX)kYGWAg%-?8|N_1#W-|4F)3YTDC+QSq1s!DnOML3@d`mG%o2YbYd#jww|jD$gotpa)kntakp#K;+yo-_ZF9qrNZw<%#C zuPE@#3RocLgPyiBZ+R_-FJ_$xP!RzWm|aN)S+{$LY9vvN+IW~Kf3TsEIvP+B9Mtm! zpfNNxObWQpLoaO&cJh5>%slZnHl_Q~(-Tfh!DMz(dTWld@LG1VRF`9`DYKhyNv z2pU|UZ$#_yUx_B_|MxUq^glT}O5Xt(Vm4Mr02><%C)@v;vPb@pT$*yzJ4aPc_FZ3z z3}PLoMBIM>q_9U2rl^sGhk1VUJ89=*?7|v`{!Z{6bqFMq(mYiA?%KbsI~JwuqVA9$H5vDE+VocjX+G^%bieqx->s;XWlKcuv(s%y%D5Xbc9+ zc(_2nYS1&^yL*ey664&4`IoOeDIig}y-E~_GS?m;D!xv5-xwz+G`5l6V+}CpeJDi^ z%4ed$qowm88=iYG+(`ld5Uh&>Dgs4uPHSJ^TngXP_V6fPyl~>2bhi20QB%lSd#yYn zO05?KT1z@?^-bqO8Cg`;ft>ilejsw@2%RR7;`$Vs;FmO(Yr3Fp`pHGr@P2hC%QcA|X&N2Dn zYf`MqXdHi%cGR@%y7Rg7?d3?an){s$zA{!H;Ie5exE#c~@NhQUFG8V=SQh%UxUeiV zd7#UcYqD=lk-}sEwlpu&H^T_V0{#G?lZMxL7ih_&{(g)MWBnCZxtXg znr#}>U^6!jA%e}@Gj49LWG@*&t0V>Cxc3?oO7LSG%~)Y5}f7vqUUnQ;STjdDU}P9IF9d9<$;=QaXc zL1^X7>fa^jHBu_}9}J~#-oz3Oq^JmGR#?GO7b9a(=R@fw@}Q{{@`Wy1vIQ#Bw?>@X z-_RGG@wt|%u`XUc%W{J z>iSeiz8C3H7@St3mOr_mU+&bL#Uif;+Xw-aZdNYUpdf>Rvu0i0t6k*}vwU`XNO2he z%miH|1tQ8~ZK!zmL&wa3E;l?!!XzgV#%PMVU!0xrDsNNZUWKlbiOjzH-1Uoxm8E#r`#2Sz;-o&qcqB zC-O_R{QGuynW14@)7&@yw1U}uP(1cov)twxeLus0s|7ayrtT8c#`&2~Fiu2=R;1_4bCaD=*E@cYI>7YSnt)nQc zohw5CsK%m?8Ack)qNx`W0_v$5S}nO|(V|RZKBD+btO?JXe|~^Qqur%@eO~<8-L^9d z=GA3-V14ng9L29~XJ>a5k~xT2152zLhM*@zlp2P5Eu}bywkcqR;ISbas&#T#;HZSf z2m69qTV(V@EkY(1Dk3`}j)JMo%ZVJ*5eB zYOjIisi+igK0#yW*gBGj?@I{~mUOvRFQR^pJbEbzFxTubnrw(Muk%}jI+vXmJ;{Q6 zrSobKD>T%}jV4Ub?L1+MGOD~0Ir%-`iTnWZN^~YPrcP5y3VMAzQ+&en^VzKEb$K!Q z<7Dbg&DNXuow*eD5yMr+#08nF!;%4vGrJI++5HdCFcGLfMW!KS*Oi@=7hFwDG!h2< zPunUEAF+HncQkbfFj&pbzp|MU*~60Z(|Ik%Tn{BXMN!hZOosNIseT?R;A`W?=d?5X zK(FB=9mZusYahp|K-wyb={rOpdn=@;4YI2W0EcbMKyo~-#^?h`BA9~o285%oY zfifCh5Lk$SY@|2A@a!T2V+{^!psQkx4?x0HSV`(w9{l75QxMk!)U52Lbhn{8ol?S) zCKo*7R(z!uk<6*qO=wh!Pul{(qq6g6xW;X68GI_CXp`XwO zxuSgPRAtM8K7}5E#-GM!*ydOOG_{A{)hkCII<|2=ma*71ci_-}VPARm3crFQjLYV! z9zbz82$|l01mv`$WahE2$=fAGWkd^X2kY(J7iz}WGS z@%MyBEO=A?HB9=^?nX`@nh;7;laAjs+fbo!|K^mE!tOB>$2a_O0y-*uaIn8k^6Y zSbuv;5~##*4Y~+y7Z5O*3w4qgI5V^17u*ZeupVGH^nM&$qmAk|anf*>r zWc5CV;-JY-Z@Uq1Irpb^O`L_7AGiqd*YpGUShb==os$uN3yYvb`wm6d=?T*it&pDk zo`vhw)RZX|91^^Wa_ti2zBFyWy4cJu#g)_S6~jT}CC{DJ_kKpT`$oAL%b^!2M;JgT zM3ZNbUB?}kP(*YYvXDIH8^7LUxz5oE%kMhF!rnPqv!GiY0o}NR$OD=ITDo9r%4E>E0Y^R(rS^~XjWyVI6 zMOR5rPXhTp*G*M&X#NTL`Hu*R+u*QNoiOKg4CtNPrjgH>c?Hi4MUG#I917fx**+pJfOo!zFM&*da&G_x)L(`k&TPI*t3e^{crd zX<4I$5nBQ8Ax_lmNRa~E*zS-R0sxkz`|>7q_?*e%7bxqNm3_eRG#1ae3gtV9!fQpY z+!^a38o4ZGy9!J5sylDxZTx$JmG!wg7;>&5H1)>f4dXj;B+@6tMlL=)cLl={jLMxY zbbf1ax3S4>bwB9-$;SN2?+GULu;UA-35;VY*^9Blx)Jwyb$=U!D>HhB&=jSsd^6yw zL)?a|>GxU!W}ocTC(?-%z3!IUhw^uzc`Vz_g>-tv)(XA#JK^)ZnC|l1`@CdX1@|!| z_9gQ)7uOf?cR@KDp97*>6X|;t@Y`k_N@)aH7gY27)COv^P3ya9I{4z~vUjLR9~z1Z z5=G{mVtKH*&$*t0@}-i_v|3B$AHHYale7>E+jP`ClqG%L{u;*ff_h@)al?RuL7tOO z->;I}>%WI{;vbLP3VIQ^iA$4wl6@0sDj|~112Y4OFjMs`13!$JGkp%b&E8QzJw_L5 zOnw9joc0^;O%OpF$Qp)W1HI!$4BaXX84`%@#^dk^hFp^pQ@rx4g(8Xjy#!X%+X5Jd@fs3amGT`}mhq#L97R>OwT5-m|h#yT_-v@(k$q7P*9X~T*3)LTdzP!*B} z+SldbVWrrwQo9wX*%FyK+sRXTa@O?WM^FGWOE?S`R(0P{<6p#f?0NJvnBia?k^fX2 zNQs7K-?EijgHJY}&zsr;qJ<*PCZUd*x|dD=IQPUK_nn)@X4KWtqoJNHkT?ZWL_hF? zS8lp2(q>;RXR|F;1O}EE#}gCrY~#n^O`_I&?&z5~7N;zL0)3Tup`%)oHMK-^r$NT% zbFg|o?b9w(q@)6w5V%si<$!U<#}s#x@0aX-hP>zwS#9*75VXA4K*%gUc>+yzupTDBOKH8WR4V0pM(HrfbQ&eJ79>HdCvE=F z|J>s;;iDLB^3(9}?biKbxf1$lI!*Z%*0&8UUq}wMyPs_hclyQQi4;NUY+x2qy|0J; zhn8;5)4ED1oHwg+VZF|80<4MrL97tGGXc5Sw$wAI#|2*cvQ=jB5+{AjMiDHmhUC*a zlmiZ`LAuAn_}hftXh;`Kq0zblDk8?O-`tnilIh|;3lZp@F_osJUV9`*R29M?7H{Fy z`nfVEIDIWXmU&YW;NjU8)EJpXhxe5t+scf|VXM!^bBlwNh)~7|3?fWwo_~ZFk(22% zTMesYw+LNx3J-_|DM~`v93yXe=jPD{q;li;5PD?Dyk+b? zo21|XpT@)$BM$%F=P9J19Vi&1#{jM3!^Y&fr&_`toi`XB1!n>sbL%U9I5<7!@?t)~ z;&H%z>bAaQ4f$wIzkjH70;<8tpUoxzKrPhn#IQfS%9l5=Iu))^XC<58D!-O z{B+o5R^Z21H0T9JQ5gNJnqh#qH^na|z92=hONIM~@_iuOi|F>jBh-?aA20}Qx~EpDGElELNn~|7WRXRFnw+Wdo`|# zBpU=Cz3z%cUJ0mx_1($X<40XEIYz(`noWeO+x#yb_pwj6)R(__%@_Cf>txOQ74wSJ z0#F3(zWWaR-jMEY$7C*3HJrohc79>MCUu26mfYN)f4M~4gD`}EX4e}A!U}QV8!S47 z6y-U-%+h`1n`*pQuKE%Av0@)+wBZr9mH}@vH@i{v(m-6QK7Ncf17x_D=)32`FOjjo zg|^VPf5c6-!FxN{25dvVh#fog=NNpXz zfB$o+0jbRkHH{!TKhE709f+jI^$3#v1Nmf80w`@7-5$1Iv_`)W^px8P-({xwb;D0y z7LKDAHgX<84?l!I*Dvi2#D@oAE^J|g$3!)x1Ua;_;<@#l1fD}lqU2_tS^6Ht$1Wl} zBESo7o^)9-Tjuz$8YQSGhfs{BQV6zW7dA?0b(Dbt=UnQs&4zHfe_sj{RJ4uS-vQpC zX;Bbsuju4%!o8?&m4UZU@~ZZjeFF6ex2ss5_60_JS_|iNc+R0GIjH1@Z z=rLT9%B|WWgOrR7IiIwr2=T;Ne?30M!@{%Qf8o`!>=s<2CBpCK_TWc(DX51>e^xh8 z&@$^b6CgOd7KXQV&Y4%}_#uN*mbanXq(2=Nj`L7H7*k(6F8s6{FOw@(DzU`4-*77{ zF+dxpv}%mFpYK?>N_2*#Y?oB*qEKB}VoQ@bzm>ptmVS_EC(#}Lxxx730trt0G)#$b zE=wVvtqOct1%*9}U{q<)2?{+0TzZzP0jgf9*)arV)*e!f`|jgT{7_9iS@e)recI#z zbzolURQ+TOzE!ymqvBY7+5NnAbWxvMLsLTwEbFqW=CPyCsmJ}P1^V30|D5E|p3BC5 z)3|qgw@ra7aXb-wsa|l^in~1_fm{7bS9jhVRkYVO#U{qMp z)Wce+|DJ}4<2gp8r0_xfZpMo#{Hl2MfjLcZdRB9(B(A(f;+4s*FxV{1F|4d`*sRNd zp4#@sEY|?^FIJ;tmH{@keZ$P(sLh5IdOk@k^0uB^BWr@pk6mHy$qf&~rI>P*a;h0C{%oA*i!VjWn&D~O#MxN&f@1Po# zKN+ zrGrkSjcr?^R#nGl<#Q722^wbYcgW@{+6CBS<1@%dPA8HC!~a`jTz<`g_l5N1M@9wn9GOAZ>nqNgq!yOCbZ@1z`U_N`Z>}+1HIZxk*5RDc&rd5{3qjRh8QmT$VyS;jK z;AF+r6XnnCp=wQYoG|rT2@8&IvKq*IB_WvS%nt%e{MCFm`&W*#LXc|HrD?nVBo=(8*=Aq?u$sDA_sC_RPDUiQ+wnIJET8vx$&fxkW~kP9qXKt zozR)@xGC!P)CTkjeWvXW5&@2?)qt)jiYWWBU?AUtzAN}{JE1I)dfz~7$;}~BmQF`k zpn11qmObXwRB8&rnEG*#4Xax3XBkKlw(;tb?Np^i+H8m(Wyz9k{~ogba@laiEk;2! zV*QV^6g6(QG%vX5Um#^sT&_e`B1pBW5yVth~xUs#0}nv?~C#l?W+9Lsb_5)!71rirGvY zTIJ$OPOY516Y|_014sNv+Z8cc5t_V=i>lWV=vNu#!58y9Zl&GsMEW#pPYPYGHQ|;vFvd*9eM==$_=vc7xnyz0~ zY}r??$<`wAO?JQk@?RGvkWVJlq2dk9vB(yV^vm{=NVI8dhsX<)O(#nr9YD?I?(VmQ z^r7VfUBn<~p3()8yOBjm$#KWx!5hRW)5Jl7wY@ky9lNM^jaT##8QGVsYeaVywmpv>X|Xj7gWE1Ezai&wVLt3p)k4w~yrskT-!PR!kiyQlaxl(( zXhF%Q9x}1TMt3~u@|#wWm-Vq?ZerK={8@~&@9r5JW}r#45#rWii};t`{5#&3$W)|@ zbAf2yDNe0q}NEUvq_Quq3cTjcw z@H_;$hu&xllCI9CFDLuScEMg|x{S7GdV8<&Mq=ezDnRZAyX-8gv97YTm0bg=d)(>N z+B2FcqvI9>jGtnK%eO%y zoBPkJTk%y`8TLf4)IXPBn`U|9>O~WL2C~C$z~9|0m*YH<-vg2CD^SX#&)B4ngOSG$ zV^wmy_iQk>dfN@Pv(ckfy&#ak@MLC7&Q6Ro#!ezM*VEh`+b3Jt%m(^T&p&WJ2Oqvj zs-4nq0TW6cv~(YI$n0UkfwN}kg3_fp?(ijSV#tR9L0}l2qjc7W?i*q01=St0eZ=4h zyGQbEw`9OEH>NMuIe)hVwYHsGERWOD;JxEiO7cQv%pFCeR+IyhwQ|y@&^24k+|8fD zLiOWFNJ2&vu2&`Jv96_z-Cd5RLgmeY3*4rDOQo?Jm`;I_(+ejsPM03!ly!*Cu}Cco zrQSrEDHNyzT(D5s1rZq!8#?f6@v6dB7a-aWs(Qk>N?UGAo{gytlh$%_IhyL7h?DLXDGx zgxGEBQoCAWo-$LRvM=F5MTle`M})t3vVv;2j0HZY&G z22^iGhV@uaJh(XyyY%} zd4iH_UfdV#T=3n}(Lj^|n;O4|$;xhu*8T3hR1mc_A}fK}jfZ7LX~*n5+`8N2q#rI$ z@<_2VANlYF$vIH$ zl<)+*tIWW78IIINA7Rr7i{<;#^yzxoLNkXL)eSs=%|P>$YQIh+ea_3k z_s7r4%j7%&*NHSl?R4k%1>Z=M9o#zxY!n8sL5>BO-ZP;T3Gut>iLS@U%IBrX6BA3k z)&@q}V8a{X<5B}K5s(c(LQ=%v1ocr`t$EqqY0EqVjr65usa=0bkf|O#ky{j3)WBR(((L^wmyHRzoWuL2~WTC=`yZ zn%VX`L=|Ok0v7?s>IHg?yArBcync5rG#^+u)>a%qjES%dRZoIyA8gQ;StH z1Ao7{<&}6U=5}4v<)1T7t!J_CL%U}CKNs-0xWoTTeqj{5{?Be$L0_tk>M9o8 zo371}S#30rKZFM{`H_(L`EM9DGp+Mifk&IP|C2Zu_)Ghr4Qtpmkm1osCf@%Z$%t+7 zYH$Cr)Ro@3-QDeQJ8m+x6%;?YYT;k6Z0E-?kr>x33`H%*ueBD7Zx~3&HtWn0?2Wt} zTG}*|v?{$ajzt}xPzV%lL1t-URi8*Zn)YljXNGDb>;!905Td|mpa@mHjIH%VIiGx- zd@MqhpYFu4_?y5N4xiHn3vX&|e6r~Xt> zZG`aGq|yTNjv;9E+Txuoa@A(9V7g?1_T5FzRI;!=NP1Kqou1z5?%X~Wwb{trRfd>i z8&y^H)8YnKyA_Fyx>}RNmQIczT?w2J4SNvI{5J&}Wto|8FR(W;Qw#b1G<1%#tmYzQ zQ2mZA-PAdi%RQOhkHy9Ea#TPSw?WxwL@H@cbkZwIq0B!@ns}niALidmn&W?!Vd4Gj zO7FiuV4*6Mr^2xlFSvM;Cp_#r8UaqIzHJQg_z^rEJw&OMm_8NGAY2)rKvki|o1bH~ z$2IbfVeY2L(^*rMRU1lM5Y_sgrDS`Z??nR2lX;zyR=c%UyGb*%TC-Dil?SihkjrQy~TMv6;BMs7P8il`H7DmpVm@rJ;b)hW)BL)GjS154b*xq-NXq2cwE z^;VP7ua2pxvCmxrnqUYQMH%a%nHmwmI33nJM(>4LznvY*k&C0{8f*%?zggpDgkuz&JBx{9mfb@wegEl2v!=}Sq2Gaty0<)UrOT0{MZtZ~j5y&w zXlYa_jY)I_+VA-^#mEox#+G>UgvM!Ac8zI<%JRXM_73Q!#i3O|)lOP*qBeJG#BST0 zqohi)O!|$|2SeJQo(w6w7%*92S})XfnhrH_Z8qe!G5>CglP=nI7JAOW?(Z29;pXJ9 zR9`KzQ=WEhy*)WH>$;7Cdz|>*i>=##0bB)oU0OR>>N<21e4rMCHDemNi2LD>Nc$;& zQRFthpWniC1J6@Zh~iJCoLOxN`oCKD5Q4r%ynwgUKPlIEd#?QViIqovY|czyK8>6B zSP%{2-<;%;1`#0mG^B(8KbtXF;Nf>K#Di72UWE4gQ%(_26Koiad)q$xRL~?pN71ZZ zujaaCx~jXjygw;rI!WB=xrOJO6HJ!!w}7eiivtCg5K|F6$EXa)=xUC za^JXSX98W`7g-tm@uo|BKj39Dl;sg5ta;4qjo^pCh~{-HdLl6qI9Ix6f$+qiZ$}s= zNguKrU;u+T@ko(Vr1>)Q%h$?UKXCY>3se%&;h2osl2D zE4A9bd7_|^njDd)6cI*FupHpE3){4NQ*$k*cOWZ_?CZ>Z4_fl@n(mMnYK62Q1d@+I zr&O))G4hMihgBqRIAJkLdk(p(D~X{-oBUA+If@B}j& zsHbeJ3RzTq96lB7d($h$xTeZ^gP0c{t!Y0c)aQE;$FY2!mACg!GDEMKXFOPI^)nHZ z`aSPJpvV0|bbrzhWWkuPURlDeN%VT8tndV8?d)eN*i4I@u zVKl^6{?}A?P)Fsy?3oi#clf}L18t;TjNI2>eI&(ezDK7RyqFxcv%>?oxUlonv(px) z$vnPzRH`y5A(x!yOIfL0bmgeMQB$H5wenx~!ujQK*nUBW;@Em&6Xv2%s(~H5WcU2R z;%Nw<$tI)a`Ve!>x+qegJnQsN2N7HaKzrFqM>`6R*gvh%O*-%THt zrB$Nk;lE;z{s{r^PPm5qz(&lM{sO*g+W{sK+m3M_z=4=&CC>T`{X}1Vg2PEfSj2x_ zmT*(x;ov%3F?qoEeeM>dUn$a*?SIGyO8m806J1W1o+4HRhc2`9$s6hM#qAm zChQ87b~GEw{ADfs+5}FJ8+|bIlIv(jT$Ap#hSHoXdd9#w<#cA<1Rkq^*EEkknUd4& zoIWIY)sAswy6fSERVm&!SO~#iN$OgOX*{9@_BWFyJTvC%S++ilSfCrO(?u=Dc?CXZ zzCG&0yVR{Z`|ZF0eEApWEo#s9osV>F{uK{QA@BES#&;#KsScf>y zvs?vIbI>VrT<*!;XmQS=bhq%46-aambZ(8KU-wOO2=en~D}MCToB_u;Yz{)1ySrPZ z@=$}EvjTdzTWU7c0ZI6L8=yP+YRD_eMMos}b5vY^S*~VZysrkq<`cK3>>v%uy7jgq z0ilW9KjVDHLv0b<1K_`1IkbTOINs0=m-22c%M~l=^S}%hbli-3?BnNq?b`hx^HX2J zIe6ECljRL0uBWb`%{EA=%!i^4sMcj+U_TaTZRb+~GOk z^ZW!nky0n*Wb*r+Q|9H@ml@Z5gU&W`(z4-j!OzC1wOke`TRAYGZVl$PmQ16{3196( zO*?`--I}Qf(2HIwb2&1FB^!faPA2=sLg(@6P4mN)>Dc3i(B0;@O-y2;lM4akD>@^v z=u>*|!s&9zem70g7zfw9FXl1bpJW(C#5w#uy5!V?Q(U35A~$dR%LDVnq@}kQm13{} zd53q3N(s$Eu{R}k2esbftfjfOITCL;jWa$}(mmm}d(&7JZ6d3%IABCapFFYjdEjdK z&4Edqf$G^MNAtL=uCDRs&Fu@FXRgX{*0<(@c3|PNHa>L%zvxWS={L8%qw`STm+=Rd zA}FLspESSIpE_^41~#5yI2bJ=9`oc;GIL!JuW&7YetZ?0H}$$%8rW@*J37L-~Rsx!)8($nI4 zZhcZ2^=Y+p4YPl%j!nFJA|*M^gc(0o$i3nlphe+~-_m}jVkRN{spFs(o0ajW@f3K{ zDV!#BwL322CET$}Y}^0ixYj2w>&Xh12|R8&yEw|wLDvF!lZ#dOTHM9pK6@Nm-@9Lnng4ZHBgBSrr7KI8YCC9DX5Kg|`HsiwJHg2(7#nS;A{b3tVO?Z% za{m5b3rFV6EpX;=;n#wltDv1LE*|g5pQ+OY&*6qCJZc5oDS6Z6JD#6F)bWxZSF@q% z+1WV;m!lRB!n^PC>RgQCI#D1br_o^#iPk>;K2hB~0^<~)?p}LG%kigm@moD#q3PE+ zA^Qca)(xnqw6x>XFhV6ku9r$E>bWNrVH9fum0?4s?Rn2LG{Vm_+QJHse6xa%nzQ?k zKug4PW~#Gtb;#5+9!QBgyB@q=sk9=$S{4T>wjFICStOM?__fr+Kei1 z3j~xPqW;W@YkiUM;HngG!;>@AITg}vAE`M2Pj9Irl4w1fo4w<|Bu!%rh%a(Ai^Zhi zs92>v5;@Y(Zi#RI*ua*h`d_7;byQSa*v9E{2x$<-_=5Z<7{%)}4XExANcz@rK69T0x3%H<@frW>RA8^swA+^a(FxK| zFl3LD*ImHN=XDUkrRhp6RY5$rQ{bRgSO*(vEHYV)3Mo6Jy3puiLmU&g82p{qr0F?ohmbz)f2r{X2|T2 z$4fdQ=>0BeKbiVM!e-lIIs8wVTuC_m7}y4A_%ikI;Wm5$9j(^Y z(cD%U%k)X>_>9~t8;pGzL6L-fmQO@K; zo&vQzMlgY95;1BSkngY)e{`n0!NfVgf}2mB3t}D9@*N;FQ{HZ3Pb%BK6;5#-O|WI( zb6h@qTLU~AbVW#_6?c!?Dj65Now7*pU{h!1+eCV^KCuPAGs28~3k@ueL5+u|Z-7}t z9|lskE`4B7W8wMs@xJa{#bsCGDFoRSNSnmNYB&U7 zVGKWe%+kFB6kb)e;TyHfqtU6~fRg)f|>=5(N36)0+C z`hv65J<$B}WUc!wFAb^QtY31yNleq4dzmG`1wHTj=c*=hay9iD071Hc?oYoUk|M*_ zU1GihAMBsM@5rUJ(qS?9ZYJ6@{bNqJ`2Mr+5#hKf?doa?F|+^IR!8lq9)wS3tF_9n zW_?hm)G(M+MYb?V9YoX^_mu5h-LP^TL^!Q9Z7|@sO(rg_4+@=PdI)WL(B7`!K^ND- z-uIuVDCVEdH_C@c71YGYT^_Scf_dhB8Z2Xy6vGtBSlYud9vggOqv^L~F{BraSE_t} zIkP+Hp2&nH^-MNEs}^`oMLy11`PQW$T|K(`Bu*(f@)mv1-qY(_YG&J2M2<7k;;RK~ zL{Fqj9yCz8(S{}@c)S!65aF<=&eLI{hAMErCx&>i7OeDN>okvegO87OaG{Jmi<|}D zaT@b|0X{d@OIJ7zvT>r+eTzgLq~|Dpu)Z&db-P4z*`M$UL51lf>FLlq6rfG)%doyp z)3kk_YIM!03eQ8Vu_2fg{+osaEJPtJ-s36R+5_AEG12`NG)IQ#TF9c@$99%0iye+ zUzZ57=m2)$D(5Nx!n)=5Au&O0BBgwxIBaeI(mro$#&UGCr<;C{UjJVAbVi%|+WP(a zL$U@TYCxJ=1{Z~}rnW;7UVb7+ZnzgmrogDxhjLGo>c~MiJAWs&&;AGg@%U?Y^0JhL ze(x6Z74JG6FlOFK(T}SXQfhr}RIFl@QXKnIcXYF)5|V~e-}suHILKT-k|<*~Ij|VF zC;t@=uj=hot~*!C68G8hTA%8SzOfETOXQ|3FSaIEjvBJp(A)7SWUi5!Eu#yWgY+;n zlm<$+UDou*V+246_o#V4kMdto8hF%%Lki#zPh}KYXmMf?hrN0;>Mv%`@{0Qn`Ujp) z=lZe+13>^Q!9zT);H<(#bIeRWz%#*}sgUX9P|9($kexOyKIOc`dLux}c$7It4u|Rl z6SSkY*V~g_B-hMPo_ak>>z@AVQ(_N)VY2kB3IZ0G(iDUYw+2d7W^~(Jq}KY=JnWS( z#rzEa&0uNhJ>QE8iiyz;n2H|SV#Og+wEZv=f2%1ELX!SX-(d3tEj$5$1}70Mp<&eI zCkfbByL7af=qQE@5vDVxx1}FSGt_a1DoE3SDI+G)mBAna)KBG4p8Epxl9QZ4BfdAN zFnF|Y(umr;gRgG6NLQ$?ZWgllEeeq~z^ZS7L?<(~O&$5|y)Al^iMKy}&W+eMm1W z7EMU)u^ke(A1#XCV>CZ71}P}0x)4wtHO8#JRG3MA-6g=`ZM!FcICCZ{IEw8Dm2&LQ z1|r)BUG^0GzI6f946RrBlfB1Vs)~8toZf~7)+G;pv&XiUO(%5bm)pl=p>nV^o*;&T z;}@oZSibzto$arQgfkp|z4Z($P>dTXE{4O=vY0!)kDO* zGF8a4wq#VaFpLfK!iELy@?-SeRrdz%F*}hjKcA*y@mj~VD3!it9lhRhX}5YOaR9$} z3mS%$2Be7{l(+MVx3 z(4?h;P!jnRmX9J9sYN#7i=iyj_5q7n#X(!cdqI2lnr8T$IfOW<_v`eB!d9xY1P=2q&WtOXY=D9QYteP)De?S4}FK6#6Ma z=E*V+#s8>L;8aVroK^6iKo=MH{4yEZ_>N-N z`(|;aOATba1^asjxlILk<4}f~`39dBFlxj>Dw(hMYKPO3EEt1@S`1lxFNM+J@uB7T zZ8WKjz7HF1-5&2=l=fqF-*@>n5J}jIxdDwpT?oKM3s8Nr`x8JnN-kCE?~aM1H!hAE z%%w(3kHfGwMnMmNj(SU(w42OrC-euI>Dsjk&jz3ts}WHqmMpzQ3vZrsXrZ|}+MHA7 z068obeXZTsO*6RS@o3x80E4ok``rV^Y3hr&C1;|ZZ0|*EKO`$lECUYG2gVFtUTw)R z4Um<0ZzlON`zTdvVdL#KFoMFQX*a5wM0Czp%wTtfK4Sjs)P**RW&?lP$(<}q%r68Z zS53Y!d@&~ne9O)A^tNrXHhXBkj~$8j%pT1%%mypa9AW5E&s9)rjF4@O3ytH{0z6riz|@< zB~UPh*wRFg2^7EbQrHf0y?E~dHlkOxof_a?M{LqQ^C!i2dawHTPYUE=X@2(3<=OOxs8qn_(y>pU>u^}3y&df{JarR0@VJn0f+U%UiF=$Wyq zQvnVHESil@d|8&R<%}uidGh7@u^(%?$#|&J$pvFC-n8&A>utA=n3#)yMkz+qnG3wd zP7xCnF|$9Dif@N~L)Vde3hW8W!UY0BgT2v(wzp;tlLmyk2%N|0jfG$%<;A&IVrOI< z!L)o>j>;dFaqA3pL}b-Je(bB@VJ4%!JeX@3x!i{yIeIso^=n?fDX`3bU=eG7sTc%g%ye8$v8P@yKE^XD=NYxTb zbf!Mk=h|otpqjFaA-vs5YOF-*GwWPc7VbaOW&stlANnCN8iftFMMrUdYNJ_Bnn5Vt zxfz@Ah|+4&P;reZxp;MmEI7C|FOv8NKUm8njF7Wb6Gi7DeODLl&G~}G4be&*Hi0Qw z5}77vL0P+7-B%UL@3n1&JPxW^d@vVwp?u#gVcJqY9#@-3X{ok#UfW3<1fb%FT`|)V~ggq z(3AUoUS-;7)^hCjdT0Kf{i}h)mBg4qhtHHBti=~h^n^OTH5U*XMgDLIR@sre`AaB$ zg)IGBET_4??m@cx&c~bA80O7B8CHR7(LX7%HThkeC*@vi{-pL%e)yXp!B2InafbDF zjPXf1mko3h59{lT6EEbxKO1Z5GF71)WwowO6kY|6tjSVSWdQ}NsK2x{>i|MKZK8%Q zfu&_0D;CO-Jg0#YmyfctyJ!mRJp)e#@O0mYdp|8x;G1%OZQ3Q847YWTyy|%^cpA;m zze0(5p{tMu^lDkpe?HynyO?a1$_LJl2L&mpeKu%8YvgRNr=%2z${%WThHG=vrWY@4 zsA`OP#O&)TetZ>s%h!=+CE15lOOls&nvC~$Qz0Ph7tHiP;O$i|eDwpT{cp>+)0-|; zY$|bB+Gbel>5aRN3>c0x)4U=|X+z+{ zn*_p*EQoquRL+=+p;=lm`d71&1NqBz&_ph)MXu(Nv6&XE7(RsS)^MGj5Q?Fwude-(sq zjJ>aOq!7!EN>@(fK7EE#;i_BGvli`5U;r!YA{JRodLBc6-`n8K+Fjgwb%sX;j=qHQ z7&Tr!)!{HXoO<2BQrV9Sw?JRaLXV8HrsNevvnf>Y-6|{T!pYLl7jp$-nEE z#X!4G4L#K0qG_4Z;Cj6=;b|Be$hi4JvMH!-voxqx^@8cXp`B??eFBz2lLD8RRaRGh zn7kUfy!YV~p(R|p7iC1Rdgt$_24i0cd-S8HpG|`@my70g^y`gu%#Tf_L21-k?sRRZHK&at(*ED0P8iw{7?R$9~OF$Ko;Iu5)ur5<->x!m93Eb zFYpIx60s=Wxxw=`$aS-O&dCO_9?b1yKiPCQmSQb>T)963`*U+Ydj5kI(B(B?HNP8r z*bfSBpSu)w(Z3j7HQoRjUG(+d=IaE~tv}y14zHHs|0UcN52fT8V_<@2ep_ee{QgZG zmgp8iv4V{k;~8@I%M3<#B;2R>Ef(Gg_cQM7%}0s*^)SK6!Ym+~P^58*wnwV1BW@eG z4sZLqsUvBbFsr#8u7S1r4teQ;t)Y@jnn_m5jS$CsW1um!p&PqAcc8!zyiXHVta9QC zY~wCwCF0U%xiQPD_INKtTb;A|Zf29(mu9NI;E zc-e>*1%(LSXB`g}kd`#}O;veb<(sk~RWL|f3ljxCnEZDdNSTDV6#Td({6l&y4IjKF z^}lIUq*ZUqgTPumD)RrCN{M^jhY>E~1pn|KOZ5((%F)G|*ZQ|r4zIbrEiV%42hJV8 z3xS)=!X1+=olbdGJ=yZil?oXLct8FM{(6ikLL3E%=q#O6(H$p~gQu6T8N!plf!96| z&Q3=`L~>U0zZh;z(pGR2^S^{#PrPxTRHD1RQOON&f)Siaf`GLj#UOk&(|@0?zm;Sx ztsGt8=29-MZs5CSf1l1jNFtNt5rFNZxJPvkNu~2}7*9468TWm>nN9TP&^!;J{-h)_ z7WsHH9|F%I`Pb!>KAS3jQWKfGivTVkMJLO-HUGM_a4UQ_%RgL6WZvrW+Z4ujZn;y@ zz9$=oO!7qVTaQAA^BhX&ZxS*|5dj803M=k&2%QrXda`-Q#IoZL6E(g+tN!6CA!CP* zCpWtCujIea)ENl0liwVfj)Nc<9mV%+e@=d`haoZ*`B7+PNjEbXBkv=B+Pi^~L#EO$D$ZqTiD8f<5$eyb54-(=3 zh)6i8i|jp(@OnRrY5B8t|LFXFQVQ895n*P16cEKTrT*~yLH6Z4e*bZ5otpRDri&+A zfNbK1D5@O=sm`fN=WzWyse!za5n%^+6dHPGX#8DyIK>?9qyX}2XvBWVqbP%%D)7$= z=#$WulZlZR<{m#gU7lwqK4WS1Ne$#_P{b17qe$~UOXCl>5b|6WVh;5vVnR<%d+Lnp z$uEmML38}U4vaW8>shm6CzB(Wei3s#NAWE3)a2)z@i{4jTn;;aQS)O@l{rUM`J@K& l00vQ5JBs~;vo!vr%%-k{2_Fq1Mn4QF81S)AQ99zk{{c4yR+0b! literal 63721 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鯊%1Et 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⁢ zv5o9#E7!G0XmdzfsS{efPNi`1b44~SZ4Z8fuX!I}#8g+(wxzQwUT#Xb2(tbY1+EUhGKoT@KEU9Ktl>_0 z%bjDJg;#*gtJZv!-Zs`?^}v5eKmnbjqlvnSzE@_SP|LG_PJ6CYU+6zY6>92%E+ z=j@TZf-iW4(%U{lnYxQA;7Q!b;^brF8n0D>)`q5>|WDDXLrqYU_tKN2>=#@~OE7grMnNh?UOz-O~6 z6%rHy{#h9K0AT+lDC7q4{hw^|q6*Ry;;L%Q@)Ga}$60_q%D)rv(CtS$CQbpq9|y1e zRSrN4;$Jyl{m5bZw`$8TGvb}(LpY{-cQ)fcyJv7l3S52TLXVDsphtv&aPuDk1OzCA z4A^QtC(!11`IsNx_HnSy?>EKpHJWT^wmS~hc^p^zIIh@9f6U@I2 zC=Mve{j2^)mS#U$e{@Q?SO6%LDsXz@SY+=cK_QMmXBIU)j!$ajc-zLx3V60EXJ!qC zi<%2x8Q24YN+&8U@CIlN zrZkcT9yh%LrlGS9`G)KdP(@9Eo-AQz@8GEFWcb7U=a0H^ZVbLmz{+&M7W(nXJ4sN8 zJLR7eeK(K8`2-}j(T7JsO`L!+CvbueT%izanm-^A1Dn{`1Nw`9P?cq;7no+XfC`K(GO9?O^5zNIt4M+M8LM0=7Gz8UA@Z0N+lg+cX)NfazRu z5D)~HA^(u%w^cz+@2@_#S|u>GpB+j4KzQ^&Wcl9f z&hG#bCA(Yk0D&t&aJE^xME^&E-&xGHhXn%}psEIj641H+Nl-}boj;)Zt*t(4wZ5DN z@GXF$bL=&pBq-#vkTkh>7hl%K5|3 z{`Vn9b$iR-SoGENp}bn4;fR3>9sA%X2@1L3aE9yTra;Wb#_`xWwLSLdfu+PAu+o3| zGVnpzPr=ch{uuoHjtw7+_!L_2;knQ!DuDl0R`|%jr+}jFzXtrHIKc323?JO{l&;VF z*L1+}JU7%QJOg|5|Tc|D8fN zJORAg=_vsy{ak|o);@)Yh8Lkcg@$FG3k@ep36BRa^>~UmnRPziS>Z=`Jb2x*Q#`%A zU*i3&Vg?TluO@X0O;r2Jl6LKLUOVhSqg1*qOt^|8*c7 zo(298@+r$k_wQNGHv{|$tW(T8L+4_`FQ{kEW5Jgg{yf7ey4ss_(SNKfz(N9lx&a;< je(UuV8hP?p&}TPdm1I$XmG#(RzlD&B2izSj9sl%y5~4qc diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 8838ba97..e6aba251 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-all.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew.bat b/gradlew.bat index 93e3f59f..6689b85b 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,92 +1,92 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega From 504a2f71aa617718a17e439b5f7f4ea1cca4422b Mon Sep 17 00:00:00 2001 From: Bhuvnesh Bamoriya <48723434+bhubam@users.noreply.github.com> Date: Wed, 7 Feb 2024 20:32:01 +0530 Subject: [PATCH 156/173] add logical operator in hypertrace gql common schema (#165) --- .../common/schema/operator/LogicalOperator.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/operator/LogicalOperator.java diff --git a/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/operator/LogicalOperator.java b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/operator/LogicalOperator.java new file mode 100644 index 00000000..53c1f45d --- /dev/null +++ b/hypertrace-core-graphql-common-schema/src/main/java/org/hypertrace/core/graphql/common/schema/operator/LogicalOperator.java @@ -0,0 +1,12 @@ +package org.hypertrace.core.graphql.common.schema.operator; + +import graphql.annotations.annotationTypes.GraphQLDescription; +import graphql.annotations.annotationTypes.GraphQLName; + +@GraphQLDescription("Logical operator describing how to combine multiple independent clauses") +@GraphQLName(LogicalOperator.TYPE_NAME) +public enum LogicalOperator { + AND, + OR; + static final String TYPE_NAME = "LogicalOperator"; +} From 6eae17a0a9489c1849ed228eaa506f74befda0c5 Mon Sep 17 00:00:00 2001 From: "hypertrace-ci-app[bot]" <145367492+hypertrace-ci-app[bot]@users.noreply.github.com> Date: Fri, 9 Feb 2024 08:43:28 -0500 Subject: [PATCH 157/173] Update gradle locks (#166) Co-authored-by: aaron-steinfeld --- .../gradle.lockfile | 2 +- hypertrace-core-graphql-attribute-scope/gradle.lockfile | 2 +- hypertrace-core-graphql-attribute-store/gradle.lockfile | 5 +++-- hypertrace-core-graphql-common-schema/gradle.lockfile | 5 +++-- hypertrace-core-graphql-context/gradle.lockfile | 5 +++-- hypertrace-core-graphql-deserialization/gradle.lockfile | 5 +++-- .../gradle.lockfile | 2 +- hypertrace-core-graphql-grpc-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-impl/gradle.lockfile | 2 +- hypertrace-core-graphql-log-event-schema/gradle.lockfile | 5 +++-- hypertrace-core-graphql-metadata-schema/gradle.lockfile | 5 +++-- .../gradle.lockfile | 2 +- hypertrace-core-graphql-rx-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-schema-registry/gradle.lockfile | 2 +- hypertrace-core-graphql-schema-utils/gradle.lockfile | 5 +++-- hypertrace-core-graphql-service/gradle.lockfile | 2 +- hypertrace-core-graphql-span-schema/gradle.lockfile | 5 +++-- hypertrace-core-graphql-spi/gradle.lockfile | 2 +- hypertrace-core-graphql-trace-schema/gradle.lockfile | 5 +++-- 19 files changed, 37 insertions(+), 28 deletions(-) diff --git a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile index 3c1a6b62..bf6e63a3 100644 --- a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile @@ -3,6 +3,6 @@ # This file is expected to be part of source control. com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-attribute-scope/gradle.lockfile b/hypertrace-core-graphql-attribute-scope/gradle.lockfile index 3ae7dc86..26e3551e 100644 --- a/hypertrace-core-graphql-attribute-scope/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-attribute-store/gradle.lockfile b/hypertrace-core-graphql-attribute-store/gradle.lockfile index d164704d..1fc84b00 100644 --- a/hypertrace-core-graphql-attribute-store/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-store/gradle.lockfile @@ -47,14 +47,15 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=runtimeClasspath org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath -org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath +org.projectlombok:lombok:1.18.28=annotationProcessor +org.projectlombok:lombok:1.18.30=compileClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath empty= diff --git a/hypertrace-core-graphql-common-schema/gradle.lockfile b/hypertrace-core-graphql-common-schema/gradle.lockfile index f100ed14..50a50b26 100644 --- a/hypertrace-core-graphql-common-schema/gradle.lockfile +++ b/hypertrace-core-graphql-common-schema/gradle.lockfile @@ -49,14 +49,15 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=runtimeClasspath org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath -org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath +org.projectlombok:lombok:1.18.28=annotationProcessor +org.projectlombok:lombok:1.18.30=compileClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath empty= diff --git a/hypertrace-core-graphql-context/gradle.lockfile b/hypertrace-core-graphql-context/gradle.lockfile index 3aca5966..7f2d99b5 100644 --- a/hypertrace-core-graphql-context/gradle.lockfile +++ b/hypertrace-core-graphql-context/gradle.lockfile @@ -28,9 +28,10 @@ javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath -org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath +org.projectlombok:lombok:1.18.28=annotationProcessor +org.projectlombok:lombok:1.18.30=compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath empty= diff --git a/hypertrace-core-graphql-deserialization/gradle.lockfile b/hypertrace-core-graphql-deserialization/gradle.lockfile index 9d481130..8a58a044 100644 --- a/hypertrace-core-graphql-deserialization/gradle.lockfile +++ b/hypertrace-core-graphql-deserialization/gradle.lockfile @@ -22,9 +22,10 @@ io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath -org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath +org.projectlombok:lombok:1.18.28=annotationProcessor +org.projectlombok:lombok:1.18.30=compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath empty= diff --git a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile index c65b3f95..60f75271 100644 --- a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile +++ b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile @@ -48,7 +48,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-grpc-utils/gradle.lockfile b/hypertrace-core-graphql-grpc-utils/gradle.lockfile index a843e1eb..bb8535dd 100644 --- a/hypertrace-core-graphql-grpc-utils/gradle.lockfile +++ b/hypertrace-core-graphql-grpc-utils/gradle.lockfile @@ -42,7 +42,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-impl/gradle.lockfile b/hypertrace-core-graphql-impl/gradle.lockfile index 5c2c56ac..2bc9972e 100644 --- a/hypertrace-core-graphql-impl/gradle.lockfile +++ b/hypertrace-core-graphql-impl/gradle.lockfile @@ -52,7 +52,7 @@ org.apache.commons:commons-lang3:3.12.0=runtimeClasspath org.apache.commons:commons-text:1.10.0=runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-log-event-schema/gradle.lockfile b/hypertrace-core-graphql-log-event-schema/gradle.lockfile index 045a6a0d..0d39d793 100644 --- a/hypertrace-core-graphql-log-event-schema/gradle.lockfile +++ b/hypertrace-core-graphql-log-event-schema/gradle.lockfile @@ -50,7 +50,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath @@ -58,7 +58,8 @@ org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=runtimeClasspath org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath -org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath +org.projectlombok:lombok:1.18.28=annotationProcessor +org.projectlombok:lombok:1.18.30=compileClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath empty= diff --git a/hypertrace-core-graphql-metadata-schema/gradle.lockfile b/hypertrace-core-graphql-metadata-schema/gradle.lockfile index f100ed14..50a50b26 100644 --- a/hypertrace-core-graphql-metadata-schema/gradle.lockfile +++ b/hypertrace-core-graphql-metadata-schema/gradle.lockfile @@ -49,14 +49,15 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=runtimeClasspath org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath -org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath +org.projectlombok:lombok:1.18.28=annotationProcessor +org.projectlombok:lombok:1.18.30=compileClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath empty= diff --git a/hypertrace-core-graphql-request-transformation/gradle.lockfile b/hypertrace-core-graphql-request-transformation/gradle.lockfile index 3ae7dc86..26e3551e 100644 --- a/hypertrace-core-graphql-request-transformation/gradle.lockfile +++ b/hypertrace-core-graphql-request-transformation/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-rx-utils/gradle.lockfile b/hypertrace-core-graphql-rx-utils/gradle.lockfile index 1d65f01a..c1a075bb 100644 --- a/hypertrace-core-graphql-rx-utils/gradle.lockfile +++ b/hypertrace-core-graphql-rx-utils/gradle.lockfile @@ -21,7 +21,7 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-registry/gradle.lockfile b/hypertrace-core-graphql-schema-registry/gradle.lockfile index d9b026d8..e425991b 100644 --- a/hypertrace-core-graphql-schema-registry/gradle.lockfile +++ b/hypertrace-core-graphql-schema-registry/gradle.lockfile @@ -20,7 +20,7 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-utils/gradle.lockfile b/hypertrace-core-graphql-schema-utils/gradle.lockfile index fa4d295a..ca2e4567 100644 --- a/hypertrace-core-graphql-schema-utils/gradle.lockfile +++ b/hypertrace-core-graphql-schema-utils/gradle.lockfile @@ -17,9 +17,10 @@ io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath -org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath +org.projectlombok:lombok:1.18.28=annotationProcessor +org.projectlombok:lombok:1.18.30=compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath empty= diff --git a/hypertrace-core-graphql-service/gradle.lockfile b/hypertrace-core-graphql-service/gradle.lockfile index 797abd48..c6161ee7 100644 --- a/hypertrace-core-graphql-service/gradle.lockfile +++ b/hypertrace-core-graphql-service/gradle.lockfile @@ -105,7 +105,7 @@ org.eclipse.jetty:jetty-servlets:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util-ajax:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util:9.4.53.v20231009=runtimeClasspath org.hdrhistogram:HdrHistogram:2.1.12=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-span-schema/gradle.lockfile b/hypertrace-core-graphql-span-schema/gradle.lockfile index 97d9ffba..e34b3e5b 100644 --- a/hypertrace-core-graphql-span-schema/gradle.lockfile +++ b/hypertrace-core-graphql-span-schema/gradle.lockfile @@ -53,7 +53,7 @@ org.apache.commons:commons-lang3:3.12.0=compileClasspath,runtimeClasspath org.apache.commons:commons-text:1.10.0=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath @@ -61,7 +61,8 @@ org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=runtimeClasspath org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath -org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath +org.projectlombok:lombok:1.18.28=annotationProcessor +org.projectlombok:lombok:1.18.30=compileClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath empty= diff --git a/hypertrace-core-graphql-spi/gradle.lockfile b/hypertrace-core-graphql-spi/gradle.lockfile index 82660cd2..5b11e298 100644 --- a/hypertrace-core-graphql-spi/gradle.lockfile +++ b/hypertrace-core-graphql-spi/gradle.lockfile @@ -9,7 +9,7 @@ com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-trace-schema/gradle.lockfile b/hypertrace-core-graphql-trace-schema/gradle.lockfile index 045a6a0d..0d39d793 100644 --- a/hypertrace-core-graphql-trace-schema/gradle.lockfile +++ b/hypertrace-core-graphql-trace-schema/gradle.lockfile @@ -50,7 +50,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.11=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath @@ -58,7 +58,8 @@ org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=runtimeClasspath org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath -org.projectlombok:lombok:1.18.28=annotationProcessor,compileClasspath +org.projectlombok:lombok:1.18.28=annotationProcessor +org.projectlombok:lombok:1.18.30=compileClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath empty= From c8de1d37e70aeb20d1c7a1798865cd82bc72c0b1 Mon Sep 17 00:00:00 2001 From: "hypertrace-ci-app[bot]" <145367492+hypertrace-ci-app[bot]@users.noreply.github.com> Date: Mon, 19 Feb 2024 17:07:44 +0530 Subject: [PATCH 158/173] Update gradle locks (#167) Co-authored-by: sanket-mundra --- .../gradle.lockfile | 2 +- hypertrace-core-graphql-attribute-scope/gradle.lockfile | 2 +- hypertrace-core-graphql-attribute-store/gradle.lockfile | 2 +- hypertrace-core-graphql-common-schema/gradle.lockfile | 2 +- hypertrace-core-graphql-context/gradle.lockfile | 2 +- hypertrace-core-graphql-deserialization/gradle.lockfile | 2 +- hypertrace-core-graphql-gateway-service-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-grpc-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-impl/gradle.lockfile | 2 +- hypertrace-core-graphql-log-event-schema/gradle.lockfile | 2 +- hypertrace-core-graphql-metadata-schema/gradle.lockfile | 2 +- hypertrace-core-graphql-request-transformation/gradle.lockfile | 2 +- hypertrace-core-graphql-rx-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-schema-registry/gradle.lockfile | 2 +- hypertrace-core-graphql-schema-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-service/gradle.lockfile | 2 +- hypertrace-core-graphql-span-schema/gradle.lockfile | 2 +- hypertrace-core-graphql-spi/gradle.lockfile | 2 +- hypertrace-core-graphql-trace-schema/gradle.lockfile | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile index bf6e63a3..195531b1 100644 --- a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile @@ -3,6 +3,6 @@ # This file is expected to be part of source control. com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-attribute-scope/gradle.lockfile b/hypertrace-core-graphql-attribute-scope/gradle.lockfile index 26e3551e..81d7818e 100644 --- a/hypertrace-core-graphql-attribute-scope/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-attribute-store/gradle.lockfile b/hypertrace-core-graphql-attribute-store/gradle.lockfile index 1fc84b00..b6bddfb1 100644 --- a/hypertrace-core-graphql-attribute-store/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-store/gradle.lockfile @@ -47,7 +47,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-common-schema/gradle.lockfile b/hypertrace-core-graphql-common-schema/gradle.lockfile index 50a50b26..a5b883d6 100644 --- a/hypertrace-core-graphql-common-schema/gradle.lockfile +++ b/hypertrace-core-graphql-common-schema/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-context/gradle.lockfile b/hypertrace-core-graphql-context/gradle.lockfile index 7f2d99b5..18569897 100644 --- a/hypertrace-core-graphql-context/gradle.lockfile +++ b/hypertrace-core-graphql-context/gradle.lockfile @@ -28,7 +28,7 @@ javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath diff --git a/hypertrace-core-graphql-deserialization/gradle.lockfile b/hypertrace-core-graphql-deserialization/gradle.lockfile index 8a58a044..8df8b73f 100644 --- a/hypertrace-core-graphql-deserialization/gradle.lockfile +++ b/hypertrace-core-graphql-deserialization/gradle.lockfile @@ -22,7 +22,7 @@ io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath diff --git a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile index 60f75271..e8f85494 100644 --- a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile +++ b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile @@ -48,7 +48,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-grpc-utils/gradle.lockfile b/hypertrace-core-graphql-grpc-utils/gradle.lockfile index bb8535dd..164636fc 100644 --- a/hypertrace-core-graphql-grpc-utils/gradle.lockfile +++ b/hypertrace-core-graphql-grpc-utils/gradle.lockfile @@ -42,7 +42,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-impl/gradle.lockfile b/hypertrace-core-graphql-impl/gradle.lockfile index 2bc9972e..a646f568 100644 --- a/hypertrace-core-graphql-impl/gradle.lockfile +++ b/hypertrace-core-graphql-impl/gradle.lockfile @@ -52,7 +52,7 @@ org.apache.commons:commons-lang3:3.12.0=runtimeClasspath org.apache.commons:commons-text:1.10.0=runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-log-event-schema/gradle.lockfile b/hypertrace-core-graphql-log-event-schema/gradle.lockfile index 0d39d793..49af8aee 100644 --- a/hypertrace-core-graphql-log-event-schema/gradle.lockfile +++ b/hypertrace-core-graphql-log-event-schema/gradle.lockfile @@ -50,7 +50,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-metadata-schema/gradle.lockfile b/hypertrace-core-graphql-metadata-schema/gradle.lockfile index 50a50b26..a5b883d6 100644 --- a/hypertrace-core-graphql-metadata-schema/gradle.lockfile +++ b/hypertrace-core-graphql-metadata-schema/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-request-transformation/gradle.lockfile b/hypertrace-core-graphql-request-transformation/gradle.lockfile index 26e3551e..81d7818e 100644 --- a/hypertrace-core-graphql-request-transformation/gradle.lockfile +++ b/hypertrace-core-graphql-request-transformation/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-rx-utils/gradle.lockfile b/hypertrace-core-graphql-rx-utils/gradle.lockfile index c1a075bb..7f736836 100644 --- a/hypertrace-core-graphql-rx-utils/gradle.lockfile +++ b/hypertrace-core-graphql-rx-utils/gradle.lockfile @@ -21,7 +21,7 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-registry/gradle.lockfile b/hypertrace-core-graphql-schema-registry/gradle.lockfile index e425991b..493c1428 100644 --- a/hypertrace-core-graphql-schema-registry/gradle.lockfile +++ b/hypertrace-core-graphql-schema-registry/gradle.lockfile @@ -20,7 +20,7 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-utils/gradle.lockfile b/hypertrace-core-graphql-schema-utils/gradle.lockfile index ca2e4567..de9e2953 100644 --- a/hypertrace-core-graphql-schema-utils/gradle.lockfile +++ b/hypertrace-core-graphql-schema-utils/gradle.lockfile @@ -17,7 +17,7 @@ io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath diff --git a/hypertrace-core-graphql-service/gradle.lockfile b/hypertrace-core-graphql-service/gradle.lockfile index c6161ee7..c4e8070e 100644 --- a/hypertrace-core-graphql-service/gradle.lockfile +++ b/hypertrace-core-graphql-service/gradle.lockfile @@ -105,7 +105,7 @@ org.eclipse.jetty:jetty-servlets:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util-ajax:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util:9.4.53.v20231009=runtimeClasspath org.hdrhistogram:HdrHistogram:2.1.12=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-span-schema/gradle.lockfile b/hypertrace-core-graphql-span-schema/gradle.lockfile index e34b3e5b..690a4a9a 100644 --- a/hypertrace-core-graphql-span-schema/gradle.lockfile +++ b/hypertrace-core-graphql-span-schema/gradle.lockfile @@ -53,7 +53,7 @@ org.apache.commons:commons-lang3:3.12.0=compileClasspath,runtimeClasspath org.apache.commons:commons-text:1.10.0=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-spi/gradle.lockfile b/hypertrace-core-graphql-spi/gradle.lockfile index 5b11e298..60b3d41d 100644 --- a/hypertrace-core-graphql-spi/gradle.lockfile +++ b/hypertrace-core-graphql-spi/gradle.lockfile @@ -9,7 +9,7 @@ com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-trace-schema/gradle.lockfile b/hypertrace-core-graphql-trace-schema/gradle.lockfile index 0d39d793..49af8aee 100644 --- a/hypertrace-core-graphql-trace-schema/gradle.lockfile +++ b/hypertrace-core-graphql-trace-schema/gradle.lockfile @@ -50,7 +50,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.12=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath From 633404eaf8212124635a759d13839054e36f3340 Mon Sep 17 00:00:00 2001 From: "hypertrace-ci-app[bot]" <145367492+hypertrace-ci-app[bot]@users.noreply.github.com> Date: Mon, 19 Feb 2024 17:43:40 +0530 Subject: [PATCH 159/173] Update gradle locks (#168) Co-authored-by: sanket-mundra --- .../gradle.lockfile | 2 +- hypertrace-core-graphql-attribute-scope/gradle.lockfile | 2 +- hypertrace-core-graphql-attribute-store/gradle.lockfile | 2 +- hypertrace-core-graphql-common-schema/gradle.lockfile | 2 +- hypertrace-core-graphql-context/gradle.lockfile | 2 +- hypertrace-core-graphql-deserialization/gradle.lockfile | 2 +- hypertrace-core-graphql-gateway-service-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-grpc-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-impl/gradle.lockfile | 2 +- hypertrace-core-graphql-log-event-schema/gradle.lockfile | 2 +- hypertrace-core-graphql-metadata-schema/gradle.lockfile | 2 +- hypertrace-core-graphql-request-transformation/gradle.lockfile | 2 +- hypertrace-core-graphql-rx-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-schema-registry/gradle.lockfile | 2 +- hypertrace-core-graphql-schema-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-service/gradle.lockfile | 2 +- hypertrace-core-graphql-span-schema/gradle.lockfile | 2 +- hypertrace-core-graphql-spi/gradle.lockfile | 2 +- hypertrace-core-graphql-trace-schema/gradle.lockfile | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile index 195531b1..2424e2b7 100644 --- a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile @@ -3,6 +3,6 @@ # This file is expected to be part of source control. com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-attribute-scope/gradle.lockfile b/hypertrace-core-graphql-attribute-scope/gradle.lockfile index 81d7818e..b7f87fc3 100644 --- a/hypertrace-core-graphql-attribute-scope/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-attribute-store/gradle.lockfile b/hypertrace-core-graphql-attribute-store/gradle.lockfile index b6bddfb1..b1dce758 100644 --- a/hypertrace-core-graphql-attribute-store/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-store/gradle.lockfile @@ -47,7 +47,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-common-schema/gradle.lockfile b/hypertrace-core-graphql-common-schema/gradle.lockfile index a5b883d6..0040adb6 100644 --- a/hypertrace-core-graphql-common-schema/gradle.lockfile +++ b/hypertrace-core-graphql-common-schema/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-context/gradle.lockfile b/hypertrace-core-graphql-context/gradle.lockfile index 18569897..6e164104 100644 --- a/hypertrace-core-graphql-context/gradle.lockfile +++ b/hypertrace-core-graphql-context/gradle.lockfile @@ -28,7 +28,7 @@ javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath diff --git a/hypertrace-core-graphql-deserialization/gradle.lockfile b/hypertrace-core-graphql-deserialization/gradle.lockfile index 8df8b73f..adf0d704 100644 --- a/hypertrace-core-graphql-deserialization/gradle.lockfile +++ b/hypertrace-core-graphql-deserialization/gradle.lockfile @@ -22,7 +22,7 @@ io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath diff --git a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile index e8f85494..e8ce54ff 100644 --- a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile +++ b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile @@ -48,7 +48,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-grpc-utils/gradle.lockfile b/hypertrace-core-graphql-grpc-utils/gradle.lockfile index 164636fc..a4ca1daa 100644 --- a/hypertrace-core-graphql-grpc-utils/gradle.lockfile +++ b/hypertrace-core-graphql-grpc-utils/gradle.lockfile @@ -42,7 +42,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-impl/gradle.lockfile b/hypertrace-core-graphql-impl/gradle.lockfile index a646f568..d96f54e7 100644 --- a/hypertrace-core-graphql-impl/gradle.lockfile +++ b/hypertrace-core-graphql-impl/gradle.lockfile @@ -52,7 +52,7 @@ org.apache.commons:commons-lang3:3.12.0=runtimeClasspath org.apache.commons:commons-text:1.10.0=runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-log-event-schema/gradle.lockfile b/hypertrace-core-graphql-log-event-schema/gradle.lockfile index 49af8aee..1cc7a775 100644 --- a/hypertrace-core-graphql-log-event-schema/gradle.lockfile +++ b/hypertrace-core-graphql-log-event-schema/gradle.lockfile @@ -50,7 +50,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-metadata-schema/gradle.lockfile b/hypertrace-core-graphql-metadata-schema/gradle.lockfile index a5b883d6..0040adb6 100644 --- a/hypertrace-core-graphql-metadata-schema/gradle.lockfile +++ b/hypertrace-core-graphql-metadata-schema/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-request-transformation/gradle.lockfile b/hypertrace-core-graphql-request-transformation/gradle.lockfile index 81d7818e..b7f87fc3 100644 --- a/hypertrace-core-graphql-request-transformation/gradle.lockfile +++ b/hypertrace-core-graphql-request-transformation/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-rx-utils/gradle.lockfile b/hypertrace-core-graphql-rx-utils/gradle.lockfile index 7f736836..a1518033 100644 --- a/hypertrace-core-graphql-rx-utils/gradle.lockfile +++ b/hypertrace-core-graphql-rx-utils/gradle.lockfile @@ -21,7 +21,7 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-registry/gradle.lockfile b/hypertrace-core-graphql-schema-registry/gradle.lockfile index 493c1428..88d95b89 100644 --- a/hypertrace-core-graphql-schema-registry/gradle.lockfile +++ b/hypertrace-core-graphql-schema-registry/gradle.lockfile @@ -20,7 +20,7 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-utils/gradle.lockfile b/hypertrace-core-graphql-schema-utils/gradle.lockfile index de9e2953..311d107c 100644 --- a/hypertrace-core-graphql-schema-utils/gradle.lockfile +++ b/hypertrace-core-graphql-schema-utils/gradle.lockfile @@ -17,7 +17,7 @@ io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath diff --git a/hypertrace-core-graphql-service/gradle.lockfile b/hypertrace-core-graphql-service/gradle.lockfile index c4e8070e..4b3f0dd5 100644 --- a/hypertrace-core-graphql-service/gradle.lockfile +++ b/hypertrace-core-graphql-service/gradle.lockfile @@ -105,7 +105,7 @@ org.eclipse.jetty:jetty-servlets:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util-ajax:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util:9.4.53.v20231009=runtimeClasspath org.hdrhistogram:HdrHistogram:2.1.12=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-span-schema/gradle.lockfile b/hypertrace-core-graphql-span-schema/gradle.lockfile index 690a4a9a..dfe88aad 100644 --- a/hypertrace-core-graphql-span-schema/gradle.lockfile +++ b/hypertrace-core-graphql-span-schema/gradle.lockfile @@ -53,7 +53,7 @@ org.apache.commons:commons-lang3:3.12.0=compileClasspath,runtimeClasspath org.apache.commons:commons-text:1.10.0=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-spi/gradle.lockfile b/hypertrace-core-graphql-spi/gradle.lockfile index 60b3d41d..5f65954c 100644 --- a/hypertrace-core-graphql-spi/gradle.lockfile +++ b/hypertrace-core-graphql-spi/gradle.lockfile @@ -9,7 +9,7 @@ com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-trace-schema/gradle.lockfile b/hypertrace-core-graphql-trace-schema/gradle.lockfile index 49af8aee..1cc7a775 100644 --- a/hypertrace-core-graphql-trace-schema/gradle.lockfile +++ b/hypertrace-core-graphql-trace-schema/gradle.lockfile @@ -50,7 +50,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.14=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath From 8a357d6366c790b9705334be064a83476d85bb04 Mon Sep 17 00:00:00 2001 From: Sanket Mundra <97032782+sanket-mundra@users.noreply.github.com> Date: Mon, 19 Feb 2024 18:23:00 +0530 Subject: [PATCH 160/173] Update settings.gradle.kts (#169) --- settings.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/settings.gradle.kts b/settings.gradle.kts index c92abf93..1a89e18e 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -11,7 +11,7 @@ pluginManagement { } plugins { - id("org.hypertrace.version-settings") version "0.2.0" + id("org.hypertrace.version-settings") version "0.2.1" id("org.hypertrace.dependency-settings") version "0.1.1" } @@ -39,4 +39,4 @@ include(":hypertrace-core-graphql-attribute-scope") include(":hypertrace-core-graphql-attribute-scope-constants") include(":hypertrace-core-graphql-rx-utils") include(":hypertrace-core-graphql-log-event-schema") -include(":hypertrace-core-graphql-request-transformation") \ No newline at end of file +include(":hypertrace-core-graphql-request-transformation") From 4420bc3f8c594d0b7108e5b90dc257926cb4e3a9 Mon Sep 17 00:00:00 2001 From: "hypertrace-ci-app[bot]" <145367492+hypertrace-ci-app[bot]@users.noreply.github.com> Date: Fri, 23 Feb 2024 13:42:08 -0100 Subject: [PATCH 161/173] Update gradle locks (#170) Co-authored-by: aaron-steinfeld --- .../gradle.lockfile | 4 ++-- hypertrace-core-graphql-attribute-scope/gradle.lockfile | 4 ++-- hypertrace-core-graphql-attribute-store/gradle.lockfile | 4 ++-- hypertrace-core-graphql-common-schema/gradle.lockfile | 4 ++-- hypertrace-core-graphql-context/gradle.lockfile | 4 ++-- hypertrace-core-graphql-deserialization/gradle.lockfile | 4 ++-- hypertrace-core-graphql-gateway-service-utils/gradle.lockfile | 4 ++-- hypertrace-core-graphql-grpc-utils/gradle.lockfile | 4 ++-- hypertrace-core-graphql-impl/gradle.lockfile | 4 ++-- hypertrace-core-graphql-log-event-schema/gradle.lockfile | 4 ++-- hypertrace-core-graphql-metadata-schema/gradle.lockfile | 4 ++-- .../gradle.lockfile | 4 ++-- hypertrace-core-graphql-rx-utils/gradle.lockfile | 4 ++-- hypertrace-core-graphql-schema-registry/gradle.lockfile | 4 ++-- hypertrace-core-graphql-schema-utils/gradle.lockfile | 4 ++-- hypertrace-core-graphql-service/gradle.lockfile | 4 ++-- hypertrace-core-graphql-span-schema/gradle.lockfile | 4 ++-- hypertrace-core-graphql-spi/gradle.lockfile | 4 ++-- hypertrace-core-graphql-trace-schema/gradle.lockfile | 4 ++-- 19 files changed, 38 insertions(+), 38 deletions(-) diff --git a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile index 2424e2b7..518acb70 100644 --- a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile @@ -3,6 +3,6 @@ # This file is expected to be part of source control. com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-attribute-scope/gradle.lockfile b/hypertrace-core-graphql-attribute-scope/gradle.lockfile index b7f87fc3..f8bf47f4 100644 --- a/hypertrace-core-graphql-attribute-scope/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope/gradle.lockfile @@ -49,13 +49,13 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=runtimeClasspath org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-attribute-store/gradle.lockfile b/hypertrace-core-graphql-attribute-store/gradle.lockfile index b1dce758..f4e29c36 100644 --- a/hypertrace-core-graphql-attribute-store/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-store/gradle.lockfile @@ -47,13 +47,13 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=runtimeClasspath org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-common-schema/gradle.lockfile b/hypertrace-core-graphql-common-schema/gradle.lockfile index 0040adb6..dadb1baf 100644 --- a/hypertrace-core-graphql-common-schema/gradle.lockfile +++ b/hypertrace-core-graphql-common-schema/gradle.lockfile @@ -49,13 +49,13 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=runtimeClasspath org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-context/gradle.lockfile b/hypertrace-core-graphql-context/gradle.lockfile index 6e164104..855e0cbf 100644 --- a/hypertrace-core-graphql-context/gradle.lockfile +++ b/hypertrace-core-graphql-context/gradle.lockfile @@ -28,8 +28,8 @@ javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-deserialization/gradle.lockfile b/hypertrace-core-graphql-deserialization/gradle.lockfile index adf0d704..9338d960 100644 --- a/hypertrace-core-graphql-deserialization/gradle.lockfile +++ b/hypertrace-core-graphql-deserialization/gradle.lockfile @@ -22,8 +22,8 @@ io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile index e8ce54ff..def83068 100644 --- a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile +++ b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile @@ -48,13 +48,13 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=runtimeClasspath org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-grpc-utils/gradle.lockfile b/hypertrace-core-graphql-grpc-utils/gradle.lockfile index a4ca1daa..87c94d2d 100644 --- a/hypertrace-core-graphql-grpc-utils/gradle.lockfile +++ b/hypertrace-core-graphql-grpc-utils/gradle.lockfile @@ -42,10 +42,10 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-impl/gradle.lockfile b/hypertrace-core-graphql-impl/gradle.lockfile index d96f54e7..552cfe12 100644 --- a/hypertrace-core-graphql-impl/gradle.lockfile +++ b/hypertrace-core-graphql-impl/gradle.lockfile @@ -52,13 +52,13 @@ org.apache.commons:commons-lang3:3.12.0=runtimeClasspath org.apache.commons:commons-text:1.10.0=runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-log-event-schema/gradle.lockfile b/hypertrace-core-graphql-log-event-schema/gradle.lockfile index 1cc7a775..1d1d583b 100644 --- a/hypertrace-core-graphql-log-event-schema/gradle.lockfile +++ b/hypertrace-core-graphql-log-event-schema/gradle.lockfile @@ -50,13 +50,13 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=runtimeClasspath org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath diff --git a/hypertrace-core-graphql-metadata-schema/gradle.lockfile b/hypertrace-core-graphql-metadata-schema/gradle.lockfile index 0040adb6..dadb1baf 100644 --- a/hypertrace-core-graphql-metadata-schema/gradle.lockfile +++ b/hypertrace-core-graphql-metadata-schema/gradle.lockfile @@ -49,13 +49,13 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=runtimeClasspath org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-request-transformation/gradle.lockfile b/hypertrace-core-graphql-request-transformation/gradle.lockfile index b7f87fc3..f8bf47f4 100644 --- a/hypertrace-core-graphql-request-transformation/gradle.lockfile +++ b/hypertrace-core-graphql-request-transformation/gradle.lockfile @@ -49,13 +49,13 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=runtimeClasspath org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-rx-utils/gradle.lockfile b/hypertrace-core-graphql-rx-utils/gradle.lockfile index a1518033..b857ed32 100644 --- a/hypertrace-core-graphql-rx-utils/gradle.lockfile +++ b/hypertrace-core-graphql-rx-utils/gradle.lockfile @@ -21,8 +21,8 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-schema-registry/gradle.lockfile b/hypertrace-core-graphql-schema-registry/gradle.lockfile index 88d95b89..222906ab 100644 --- a/hypertrace-core-graphql-schema-registry/gradle.lockfile +++ b/hypertrace-core-graphql-schema-registry/gradle.lockfile @@ -20,8 +20,8 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-schema-utils/gradle.lockfile b/hypertrace-core-graphql-schema-utils/gradle.lockfile index 311d107c..93506469 100644 --- a/hypertrace-core-graphql-schema-utils/gradle.lockfile +++ b/hypertrace-core-graphql-schema-utils/gradle.lockfile @@ -17,8 +17,8 @@ io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-service/gradle.lockfile b/hypertrace-core-graphql-service/gradle.lockfile index 4b3f0dd5..74386fe7 100644 --- a/hypertrace-core-graphql-service/gradle.lockfile +++ b/hypertrace-core-graphql-service/gradle.lockfile @@ -105,13 +105,13 @@ org.eclipse.jetty:jetty-servlets:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util-ajax:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util:9.4.53.v20231009=runtimeClasspath org.hdrhistogram:HdrHistogram:2.1.12=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.hypertrace.core.serviceframework:platform-http-service-framework:0.1.64=compileClasspath,runtimeClasspath org.hypertrace.core.serviceframework:platform-metrics:0.1.64=runtimeClasspath org.hypertrace.core.serviceframework:platform-service-framework:0.1.64=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-span-schema/gradle.lockfile b/hypertrace-core-graphql-span-schema/gradle.lockfile index dfe88aad..35b3eb1a 100644 --- a/hypertrace-core-graphql-span-schema/gradle.lockfile +++ b/hypertrace-core-graphql-span-schema/gradle.lockfile @@ -53,13 +53,13 @@ org.apache.commons:commons-lang3:3.12.0=compileClasspath,runtimeClasspath org.apache.commons:commons-text:1.10.0=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=runtimeClasspath org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath diff --git a/hypertrace-core-graphql-spi/gradle.lockfile b/hypertrace-core-graphql-spi/gradle.lockfile index 5f65954c..f1869166 100644 --- a/hypertrace-core-graphql-spi/gradle.lockfile +++ b/hypertrace-core-graphql-spi/gradle.lockfile @@ -9,8 +9,8 @@ com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-trace-schema/gradle.lockfile b/hypertrace-core-graphql-trace-schema/gradle.lockfile index 1cc7a775..1d1d583b 100644 --- a/hypertrace-core-graphql-trace-schema/gradle.lockfile +++ b/hypertrace-core-graphql-trace-schema/gradle.lockfile @@ -50,13 +50,13 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.15=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=runtimeClasspath org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.5=compileClasspath,runtimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath From de98fa8e52854cc319f796efc5b5df1e5c2c7385 Mon Sep 17 00:00:00 2001 From: anujgoyal1 <51903063+anujgoyal1@users.noreply.github.com> Date: Wed, 27 Mar 2024 19:00:35 +0530 Subject: [PATCH 162/173] Added fetch attribute by id in Attribute Store (#171) --- .../core/graphql/attributes/AttributeStore.java | 2 ++ .../graphql/attributes/CachingAttributeStore.java | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStore.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStore.java index 55b0e13e..cbdc5b04 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStore.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/AttributeStore.java @@ -13,6 +13,8 @@ public interface AttributeStore { Single getIdAttribute(GraphQlRequestContext context, String scope); + Single getAttributeById(GraphQlRequestContext context, String attributeId); + Single getForeignIdAttribute( GraphQlRequestContext context, String scope, String foreignScope); diff --git a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java index 0fd2aadc..8f7dc27d 100644 --- a/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java +++ b/hypertrace-core-graphql-attribute-store/src/main/java/org/hypertrace/core/graphql/attributes/CachingAttributeStore.java @@ -86,6 +86,16 @@ public Single getForeignIdAttribute( .flatMap(key -> this.get(context, scope, key)); } + @Override + public Single getAttributeById( + GraphQlRequestContext context, String attributeId) { + return grpcContextBuilder + .build(context) + .call(() -> cachingAttributeClient.get(attributeId)) + .mapOptional(this.translator::translate) + .switchIfEmpty(Single.error(this.buildErrorForMissingAttributeId(attributeId))); + } + @Override public Completable create( final GraphQlRequestContext context, final List attributes) { @@ -139,6 +149,11 @@ private NoSuchElementException buildErrorForMissingAttribute(String scope, Strin String.format("No attribute available for scope '%s' and key '%s'", scope, key)); } + private NoSuchElementException buildErrorForMissingAttributeId(String attributeId) { + return new NoSuchElementException( + String.format("No attribute available for attribute id '%s'", attributeId)); + } + private NoSuchElementException buildErrorForMissingForeignScopeMapping( String scope, String foreignScope) { return new NoSuchElementException( From 650d5915c58a36143ddcdb922be3c143bfc17a37 Mon Sep 17 00:00:00 2001 From: "hypertrace-ci-app[bot]" <145367492+hypertrace-ci-app[bot]@users.noreply.github.com> Date: Fri, 29 Mar 2024 10:07:34 -0400 Subject: [PATCH 163/173] Update gradle locks (#172) Co-authored-by: aaron-steinfeld --- .../gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- hypertrace-core-graphql-impl/gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- .../gradle.lockfile | 38 +++++++++---------- .../gradle.lockfile | 2 +- hypertrace-core-graphql-spi/gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- 19 files changed, 37 insertions(+), 37 deletions(-) diff --git a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile index 518acb70..fa564668 100644 --- a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile @@ -3,6 +3,6 @@ # This file is expected to be part of source control. com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-attribute-scope/gradle.lockfile b/hypertrace-core-graphql-attribute-scope/gradle.lockfile index f8bf47f4..30d1de54 100644 --- a/hypertrace-core-graphql-attribute-scope/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-attribute-store/gradle.lockfile b/hypertrace-core-graphql-attribute-store/gradle.lockfile index f4e29c36..63aa9e84 100644 --- a/hypertrace-core-graphql-attribute-store/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-store/gradle.lockfile @@ -47,7 +47,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-common-schema/gradle.lockfile b/hypertrace-core-graphql-common-schema/gradle.lockfile index dadb1baf..c06adcaa 100644 --- a/hypertrace-core-graphql-common-schema/gradle.lockfile +++ b/hypertrace-core-graphql-common-schema/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-context/gradle.lockfile b/hypertrace-core-graphql-context/gradle.lockfile index 855e0cbf..c166003a 100644 --- a/hypertrace-core-graphql-context/gradle.lockfile +++ b/hypertrace-core-graphql-context/gradle.lockfile @@ -28,7 +28,7 @@ javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath diff --git a/hypertrace-core-graphql-deserialization/gradle.lockfile b/hypertrace-core-graphql-deserialization/gradle.lockfile index 9338d960..f1714c2a 100644 --- a/hypertrace-core-graphql-deserialization/gradle.lockfile +++ b/hypertrace-core-graphql-deserialization/gradle.lockfile @@ -22,7 +22,7 @@ io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath diff --git a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile index def83068..7f244e27 100644 --- a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile +++ b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile @@ -48,7 +48,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-grpc-utils/gradle.lockfile b/hypertrace-core-graphql-grpc-utils/gradle.lockfile index 87c94d2d..b2b263e7 100644 --- a/hypertrace-core-graphql-grpc-utils/gradle.lockfile +++ b/hypertrace-core-graphql-grpc-utils/gradle.lockfile @@ -42,7 +42,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-impl/gradle.lockfile b/hypertrace-core-graphql-impl/gradle.lockfile index 552cfe12..113044c4 100644 --- a/hypertrace-core-graphql-impl/gradle.lockfile +++ b/hypertrace-core-graphql-impl/gradle.lockfile @@ -52,7 +52,7 @@ org.apache.commons:commons-lang3:3.12.0=runtimeClasspath org.apache.commons:commons-text:1.10.0=runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-log-event-schema/gradle.lockfile b/hypertrace-core-graphql-log-event-schema/gradle.lockfile index 1d1d583b..d30f2cad 100644 --- a/hypertrace-core-graphql-log-event-schema/gradle.lockfile +++ b/hypertrace-core-graphql-log-event-schema/gradle.lockfile @@ -50,7 +50,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-metadata-schema/gradle.lockfile b/hypertrace-core-graphql-metadata-schema/gradle.lockfile index dadb1baf..c06adcaa 100644 --- a/hypertrace-core-graphql-metadata-schema/gradle.lockfile +++ b/hypertrace-core-graphql-metadata-schema/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-request-transformation/gradle.lockfile b/hypertrace-core-graphql-request-transformation/gradle.lockfile index f8bf47f4..30d1de54 100644 --- a/hypertrace-core-graphql-request-transformation/gradle.lockfile +++ b/hypertrace-core-graphql-request-transformation/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-rx-utils/gradle.lockfile b/hypertrace-core-graphql-rx-utils/gradle.lockfile index b857ed32..0137595f 100644 --- a/hypertrace-core-graphql-rx-utils/gradle.lockfile +++ b/hypertrace-core-graphql-rx-utils/gradle.lockfile @@ -21,7 +21,7 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-registry/gradle.lockfile b/hypertrace-core-graphql-schema-registry/gradle.lockfile index 222906ab..d445463a 100644 --- a/hypertrace-core-graphql-schema-registry/gradle.lockfile +++ b/hypertrace-core-graphql-schema-registry/gradle.lockfile @@ -20,7 +20,7 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-utils/gradle.lockfile b/hypertrace-core-graphql-schema-utils/gradle.lockfile index 93506469..7765ab25 100644 --- a/hypertrace-core-graphql-schema-utils/gradle.lockfile +++ b/hypertrace-core-graphql-schema-utils/gradle.lockfile @@ -17,7 +17,7 @@ io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath diff --git a/hypertrace-core-graphql-service/gradle.lockfile b/hypertrace-core-graphql-service/gradle.lockfile index 74386fe7..f183c0cb 100644 --- a/hypertrace-core-graphql-service/gradle.lockfile +++ b/hypertrace-core-graphql-service/gradle.lockfile @@ -54,18 +54,18 @@ io.micrometer:micrometer-commons:1.10.2=runtimeClasspath io.micrometer:micrometer-core:1.10.2=runtimeClasspath io.micrometer:micrometer-observation:1.10.2=runtimeClasspath io.micrometer:micrometer-registry-prometheus:1.10.2=runtimeClasspath -io.netty:netty-bom:4.1.101.Final=compileClasspath,runtimeClasspath -io.netty:netty-buffer:4.1.101.Final=runtimeClasspath -io.netty:netty-codec-http2:4.1.101.Final=runtimeClasspath -io.netty:netty-codec-http:4.1.101.Final=runtimeClasspath -io.netty:netty-codec-socks:4.1.101.Final=runtimeClasspath -io.netty:netty-codec:4.1.101.Final=runtimeClasspath -io.netty:netty-common:4.1.101.Final=runtimeClasspath -io.netty:netty-handler-proxy:4.1.101.Final=runtimeClasspath -io.netty:netty-handler:4.1.101.Final=runtimeClasspath -io.netty:netty-resolver:4.1.101.Final=runtimeClasspath -io.netty:netty-transport-native-unix-common:4.1.101.Final=runtimeClasspath -io.netty:netty-transport:4.1.101.Final=runtimeClasspath +io.netty:netty-bom:4.1.108.Final=compileClasspath,runtimeClasspath +io.netty:netty-buffer:4.1.108.Final=runtimeClasspath +io.netty:netty-codec-http2:4.1.108.Final=runtimeClasspath +io.netty:netty-codec-http:4.1.108.Final=runtimeClasspath +io.netty:netty-codec-socks:4.1.108.Final=runtimeClasspath +io.netty:netty-codec:4.1.108.Final=runtimeClasspath +io.netty:netty-common:4.1.108.Final=runtimeClasspath +io.netty:netty-handler-proxy:4.1.108.Final=runtimeClasspath +io.netty:netty-handler:4.1.108.Final=runtimeClasspath +io.netty:netty-resolver:4.1.108.Final=runtimeClasspath +io.netty:netty-transport-native-unix-common:4.1.108.Final=runtimeClasspath +io.netty:netty-transport:4.1.108.Final=runtimeClasspath io.opentelemetry:opentelemetry-proto:1.1.0-alpha=runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath io.prometheus:simpleclient:0.16.0=runtimeClasspath @@ -105,17 +105,17 @@ org.eclipse.jetty:jetty-servlets:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util-ajax:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util:9.4.53.v20231009=runtimeClasspath org.hdrhistogram:HdrHistogram:2.1.12=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.2=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.2=runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath -org.hypertrace.core.serviceframework:platform-http-service-framework:0.1.64=compileClasspath,runtimeClasspath -org.hypertrace.core.serviceframework:platform-metrics:0.1.64=runtimeClasspath -org.hypertrace.core.serviceframework:platform-service-framework:0.1.64=compileClasspath,runtimeClasspath -org.hypertrace.core.serviceframework:service-framework-spi:0.1.64=compileClasspath,runtimeClasspath +org.hypertrace.core.serviceframework:platform-http-service-framework:0.1.70=compileClasspath,runtimeClasspath +org.hypertrace.core.serviceframework:platform-metrics:0.1.70=runtimeClasspath +org.hypertrace.core.serviceframework:platform-service-framework:0.1.70=compileClasspath,runtimeClasspath +org.hypertrace.core.serviceframework:service-framework-spi:0.1.70=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=runtimeClasspath org.latencyutils:LatencyUtils:2.0.3=runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath diff --git a/hypertrace-core-graphql-span-schema/gradle.lockfile b/hypertrace-core-graphql-span-schema/gradle.lockfile index 35b3eb1a..08111c19 100644 --- a/hypertrace-core-graphql-span-schema/gradle.lockfile +++ b/hypertrace-core-graphql-span-schema/gradle.lockfile @@ -53,7 +53,7 @@ org.apache.commons:commons-lang3:3.12.0=compileClasspath,runtimeClasspath org.apache.commons:commons-text:1.10.0=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-spi/gradle.lockfile b/hypertrace-core-graphql-spi/gradle.lockfile index f1869166..570be8d8 100644 --- a/hypertrace-core-graphql-spi/gradle.lockfile +++ b/hypertrace-core-graphql-spi/gradle.lockfile @@ -9,7 +9,7 @@ com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-trace-schema/gradle.lockfile b/hypertrace-core-graphql-trace-schema/gradle.lockfile index 1d1d583b..d30f2cad 100644 --- a/hypertrace-core-graphql-trace-schema/gradle.lockfile +++ b/hypertrace-core-graphql-trace-schema/gradle.lockfile @@ -50,7 +50,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.16=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath From 861071c376f1cba87fe3dd98342e3113978fe06f Mon Sep 17 00:00:00 2001 From: Aaron Steinfeld <45047841+aaron-steinfeld@users.noreply.github.com> Date: Fri, 5 Apr 2024 08:37:54 -0400 Subject: [PATCH 164/173] chore: add support to disable introspection (#173) --- .../gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- .../context/AsyncDataFetcherFactory.java | 16 +++---- .../context/AsyncDataFetcherFactoryTest.java | 8 ++-- .../gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- hypertrace-core-graphql-impl/gradle.lockfile | 2 +- .../core/graphql/impl/GraphQlFactory.java | 9 ++-- .../core/graphql/impl/GraphQlModule.java | 13 ++++-- .../core/graphql/impl/GraphQlModuleTest.java | 3 ++ .../gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- .../rx/BoundedIoSchedulerProvider.java | 10 ++--- .../gradle.lockfile | 2 +- .../GraphQlAnnotatedSchemaMerger.java | 23 +++++++++- .../GraphQlAnnotatedSchemaMergerTest.java | 30 ++++++++++++- .../gradle.lockfile | 2 +- .../build.gradle.kts | 4 ++ .../gradle.lockfile | 6 ++- .../service/DefaultGraphQlEndpointConfig.java | 39 +++++++++++++++++ .../service/DefaultGraphQlServiceConfig.java | 42 ------------------- .../core/graphql/service/GraphQlService.java | 20 +++++---- .../resources/configs/common/application.conf | 1 + .../gradle.lockfile | 2 +- hypertrace-core-graphql-spi/gradle.lockfile | 2 +- .../spi/config/GraphQlEndpointConfig.java | 17 ++++++++ .../spi/config/GraphQlServiceConfig.java | 10 ----- .../gradle.lockfile | 2 +- owasp-suppressions.xml | 33 +-------------- 35 files changed, 182 insertions(+), 138 deletions(-) create mode 100644 hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlEndpointConfig.java create mode 100644 hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlEndpointConfig.java diff --git a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile index fa564668..ec9dfaa9 100644 --- a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile @@ -3,6 +3,6 @@ # This file is expected to be part of source control. com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-attribute-scope/gradle.lockfile b/hypertrace-core-graphql-attribute-scope/gradle.lockfile index 30d1de54..5d948480 100644 --- a/hypertrace-core-graphql-attribute-scope/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-attribute-store/gradle.lockfile b/hypertrace-core-graphql-attribute-store/gradle.lockfile index 63aa9e84..358eac2e 100644 --- a/hypertrace-core-graphql-attribute-store/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-store/gradle.lockfile @@ -47,7 +47,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-common-schema/gradle.lockfile b/hypertrace-core-graphql-common-schema/gradle.lockfile index c06adcaa..0589cd71 100644 --- a/hypertrace-core-graphql-common-schema/gradle.lockfile +++ b/hypertrace-core-graphql-common-schema/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-context/gradle.lockfile b/hypertrace-core-graphql-context/gradle.lockfile index c166003a..b99a2d65 100644 --- a/hypertrace-core-graphql-context/gradle.lockfile +++ b/hypertrace-core-graphql-context/gradle.lockfile @@ -28,7 +28,7 @@ javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath diff --git a/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/AsyncDataFetcherFactory.java b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/AsyncDataFetcherFactory.java index 4e1d811b..f72225fd 100644 --- a/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/AsyncDataFetcherFactory.java +++ b/hypertrace-core-graphql-context/src/main/java/org/hypertrace/core/graphql/context/AsyncDataFetcherFactory.java @@ -12,36 +12,36 @@ import javax.inject.Inject; import javax.inject.Singleton; import lombok.AllArgsConstructor; -import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; +import org.hypertrace.core.graphql.spi.config.GraphQlEndpointConfig; @Singleton class AsyncDataFetcherFactory { private final Injector injector; - private final GraphQlServiceConfig config; + private final GraphQlEndpointConfig endpointConfig; private final ExecutorService requestExecutor; @Inject - AsyncDataFetcherFactory(Injector injector, GraphQlServiceConfig config) { + AsyncDataFetcherFactory(Injector injector, GraphQlEndpointConfig endpointConfig) { this.injector = injector; - this.config = config; + this.endpointConfig = endpointConfig; this.requestExecutor = Executors.newFixedThreadPool( - config.getMaxRequestThreads(), + endpointConfig.getMaxRequestThreads(), new ThreadFactoryBuilder().setDaemon(true).setNameFormat("request-handler-%d").build()); } DataFetcher> buildDataFetcher( Class>> dataFetcherClass) { return new AsyncForwardingDataFetcher<>( - this.injector.getInstance(dataFetcherClass), requestExecutor, config); + this.injector.getInstance(dataFetcherClass), requestExecutor, endpointConfig); } @AllArgsConstructor private static class AsyncForwardingDataFetcher implements DataFetcher> { private final DataFetcher> delegate; private final ExecutorService executorService; - private final GraphQlServiceConfig config; + private final GraphQlEndpointConfig config; @Override public CompletableFuture get(DataFetchingEnvironment dataFetchingEnvironment) @@ -52,7 +52,7 @@ public CompletableFuture get(DataFetchingEnvironment dataFetchingEnvironment) try { return delegate .get(dataFetchingEnvironment) - .get(config.getGraphQlTimeout().toMillis(), MILLISECONDS); + .get(config.getTimeout().toMillis(), MILLISECONDS); } catch (Exception e) { throw new RuntimeException(e); } diff --git a/hypertrace-core-graphql-context/src/test/java/org/hypertrace/core/graphql/context/AsyncDataFetcherFactoryTest.java b/hypertrace-core-graphql-context/src/test/java/org/hypertrace/core/graphql/context/AsyncDataFetcherFactoryTest.java index 682279fe..62f12e1a 100644 --- a/hypertrace-core-graphql-context/src/test/java/org/hypertrace/core/graphql/context/AsyncDataFetcherFactoryTest.java +++ b/hypertrace-core-graphql-context/src/test/java/org/hypertrace/core/graphql/context/AsyncDataFetcherFactoryTest.java @@ -7,7 +7,7 @@ import graphql.schema.DataFetcher; import graphql.schema.DataFetchingEnvironment; import java.util.concurrent.CompletableFuture; -import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; +import org.hypertrace.core.graphql.spi.config.GraphQlEndpointConfig; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; @@ -15,14 +15,14 @@ @ExtendWith(MockitoExtension.class) class AsyncDataFetcherFactoryTest { - @Mock GraphQlServiceConfig graphQlServiceConfig; + @Mock GraphQlEndpointConfig endpointConfig; @Mock DataFetchingEnvironment dataFetchingEnvironment; @Test void canBuildAsyncDataFetcher() throws Exception { - when(graphQlServiceConfig.getMaxRequestThreads()).thenReturn(1); + when(endpointConfig.getMaxRequestThreads()).thenReturn(1); DataFetcher> fetcher = - new AsyncDataFetcherFactory(Guice.createInjector(), graphQlServiceConfig) + new AsyncDataFetcherFactory(Guice.createInjector(), endpointConfig) .buildDataFetcher(ThreadEchoingDataFetcher.class); Thread fetcherThread = fetcher.get(dataFetchingEnvironment).get(); diff --git a/hypertrace-core-graphql-deserialization/gradle.lockfile b/hypertrace-core-graphql-deserialization/gradle.lockfile index f1714c2a..ee22e513 100644 --- a/hypertrace-core-graphql-deserialization/gradle.lockfile +++ b/hypertrace-core-graphql-deserialization/gradle.lockfile @@ -22,7 +22,7 @@ io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath diff --git a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile index 7f244e27..8c3c5cc8 100644 --- a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile +++ b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile @@ -48,7 +48,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-grpc-utils/gradle.lockfile b/hypertrace-core-graphql-grpc-utils/gradle.lockfile index b2b263e7..4e15fdb5 100644 --- a/hypertrace-core-graphql-grpc-utils/gradle.lockfile +++ b/hypertrace-core-graphql-grpc-utils/gradle.lockfile @@ -42,7 +42,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-impl/gradle.lockfile b/hypertrace-core-graphql-impl/gradle.lockfile index 113044c4..b4f65791 100644 --- a/hypertrace-core-graphql-impl/gradle.lockfile +++ b/hypertrace-core-graphql-impl/gradle.lockfile @@ -52,7 +52,7 @@ org.apache.commons:commons-lang3:3.12.0=runtimeClasspath org.apache.commons:commons-text:1.10.0=runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlFactory.java b/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlFactory.java index 21dc88da..7b368d5d 100644 --- a/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlFactory.java +++ b/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlFactory.java @@ -5,21 +5,24 @@ import graphql.kickstart.servlet.GraphQLConfiguration; import graphql.schema.GraphQLSchema; import org.hypertrace.core.graphql.context.GraphQlRequestContextBuilder; +import org.hypertrace.core.graphql.spi.config.GraphQlEndpointConfig; import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; import org.hypertrace.core.graphql.spi.lifecycle.GraphQlServiceLifecycle; import org.hypertrace.core.grpcutils.client.GrpcChannelRegistry; public class GraphQlFactory { public static GraphQLConfiguration build( - GraphQlServiceConfig config, + GraphQlServiceConfig serviceConfig, + GraphQlEndpointConfig endpointConfig, GraphQlServiceLifecycle lifecycle, GrpcChannelRegistry grpcChannelRegistry) { final Injector injector = - Guice.createInjector(new GraphQlModule(config, lifecycle, grpcChannelRegistry)); + Guice.createInjector( + new GraphQlModule(serviceConfig, endpointConfig, lifecycle, grpcChannelRegistry)); return GraphQLConfiguration.with(injector.getInstance(GraphQLSchema.class)) .with(injector.getInstance(GraphQlRequestContextBuilder.class)) - .asyncTimeout(config.getGraphQlTimeout().toMillis()) + .asyncTimeout(endpointConfig.getTimeout().toMillis()) .build(); } } diff --git a/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlModule.java b/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlModule.java index d3dfc732..a636d2c9 100644 --- a/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlModule.java +++ b/hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlModule.java @@ -13,6 +13,7 @@ import org.hypertrace.core.graphql.rx.RxUtilModule; import org.hypertrace.core.graphql.schema.registry.GraphQlSchemaRegistryModule; import org.hypertrace.core.graphql.span.SpanSchemaModule; +import org.hypertrace.core.graphql.spi.config.GraphQlEndpointConfig; import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; import org.hypertrace.core.graphql.spi.lifecycle.GraphQlServiceLifecycle; import org.hypertrace.core.graphql.trace.TraceSchemaModule; @@ -23,22 +24,26 @@ class GraphQlModule extends AbstractModule { - private final GraphQlServiceConfig config; + private final GraphQlServiceConfig serviceConfig; + private final GraphQlEndpointConfig endpointConfig; private final GraphQlServiceLifecycle lifecycle; private final GrpcChannelRegistry grpcChannelRegistry; public GraphQlModule( - final GraphQlServiceConfig config, + final GraphQlServiceConfig serviceConfig, + final GraphQlEndpointConfig endpointConfig, final GraphQlServiceLifecycle lifecycle, final GrpcChannelRegistry grpcChannelRegistry) { - this.config = config; + this.serviceConfig = serviceConfig; + this.endpointConfig = endpointConfig; this.lifecycle = lifecycle; this.grpcChannelRegistry = grpcChannelRegistry; } @Override protected void configure() { - bind(GraphQlServiceConfig.class).toInstance(this.config); + bind(GraphQlServiceConfig.class).toInstance(this.serviceConfig); + bind(GraphQlEndpointConfig.class).toInstance(this.endpointConfig); bind(GraphQlServiceLifecycle.class).toInstance(this.lifecycle); bind(GrpcChannelRegistry.class).toInstance(this.grpcChannelRegistry); install(new GraphQlRequestContextModule()); diff --git a/hypertrace-core-graphql-impl/src/test/java/org/hypertrace/core/graphql/impl/GraphQlModuleTest.java b/hypertrace-core-graphql-impl/src/test/java/org/hypertrace/core/graphql/impl/GraphQlModuleTest.java index b7df02fc..4677ffec 100644 --- a/hypertrace-core-graphql-impl/src/test/java/org/hypertrace/core/graphql/impl/GraphQlModuleTest.java +++ b/hypertrace-core-graphql-impl/src/test/java/org/hypertrace/core/graphql/impl/GraphQlModuleTest.java @@ -5,6 +5,7 @@ import com.google.inject.Guice; import graphql.schema.GraphQLSchema; +import org.hypertrace.core.graphql.spi.config.GraphQlEndpointConfig; import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; import org.hypertrace.core.graphql.spi.lifecycle.GraphQlServiceLifecycle; import org.hypertrace.core.grpcutils.client.GrpcChannelRegistry; @@ -19,6 +20,7 @@ public void testResolveBindings() { Guice.createInjector( new GraphQlModule( mock(GraphQlServiceConfig.class), + mock(GraphQlEndpointConfig.class), mock(GraphQlServiceLifecycle.class), mock(GrpcChannelRegistry.class))) .getAllBindings()); @@ -31,6 +33,7 @@ public void testResolveSchema() { Guice.createInjector( new GraphQlModule( mock(GraphQlServiceConfig.class), + mock(GraphQlEndpointConfig.class), mock(GraphQlServiceLifecycle.class), mock(GrpcChannelRegistry.class))) .getInstance(GraphQLSchema.class)); diff --git a/hypertrace-core-graphql-log-event-schema/gradle.lockfile b/hypertrace-core-graphql-log-event-schema/gradle.lockfile index d30f2cad..496c02cb 100644 --- a/hypertrace-core-graphql-log-event-schema/gradle.lockfile +++ b/hypertrace-core-graphql-log-event-schema/gradle.lockfile @@ -50,7 +50,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-metadata-schema/gradle.lockfile b/hypertrace-core-graphql-metadata-schema/gradle.lockfile index c06adcaa..0589cd71 100644 --- a/hypertrace-core-graphql-metadata-schema/gradle.lockfile +++ b/hypertrace-core-graphql-metadata-schema/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-request-transformation/gradle.lockfile b/hypertrace-core-graphql-request-transformation/gradle.lockfile index 30d1de54..5d948480 100644 --- a/hypertrace-core-graphql-request-transformation/gradle.lockfile +++ b/hypertrace-core-graphql-request-transformation/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-rx-utils/gradle.lockfile b/hypertrace-core-graphql-rx-utils/gradle.lockfile index 0137595f..99e6fca8 100644 --- a/hypertrace-core-graphql-rx-utils/gradle.lockfile +++ b/hypertrace-core-graphql-rx-utils/gradle.lockfile @@ -21,7 +21,7 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-rx-utils/src/main/java/org/hypertrace/core/graphql/rx/BoundedIoSchedulerProvider.java b/hypertrace-core-graphql-rx-utils/src/main/java/org/hypertrace/core/graphql/rx/BoundedIoSchedulerProvider.java index e1f91a72..3d3ece54 100644 --- a/hypertrace-core-graphql-rx-utils/src/main/java/org/hypertrace/core/graphql/rx/BoundedIoSchedulerProvider.java +++ b/hypertrace-core-graphql-rx-utils/src/main/java/org/hypertrace/core/graphql/rx/BoundedIoSchedulerProvider.java @@ -8,7 +8,7 @@ import java.util.concurrent.ThreadFactory; import javax.inject.Inject; import javax.inject.Provider; -import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; +import org.hypertrace.core.graphql.spi.config.GraphQlEndpointConfig; /** * A scheduler using up to a configuration-based number of threads. @@ -19,11 +19,11 @@ class BoundedIoSchedulerProvider implements Provider { private final Scheduler scheduler; - private final GraphQlServiceConfig serviceConfig; + private final GraphQlEndpointConfig endpointConfig; @Inject - BoundedIoSchedulerProvider(GraphQlServiceConfig serviceConfig) { - this.serviceConfig = serviceConfig; + BoundedIoSchedulerProvider(GraphQlEndpointConfig endpointConfig) { + this.endpointConfig = endpointConfig; this.scheduler = Schedulers.from(this.buildExecutor()); } @@ -34,7 +34,7 @@ public Scheduler get() { private Executor buildExecutor() { return Executors.newFixedThreadPool( - this.serviceConfig.getMaxIoThreads(), this.buildThreadFactory()); + this.endpointConfig.getMaxIoThreads(), this.buildThreadFactory()); } private ThreadFactory buildThreadFactory() { diff --git a/hypertrace-core-graphql-schema-registry/gradle.lockfile b/hypertrace-core-graphql-schema-registry/gradle.lockfile index d445463a..74e5121e 100644 --- a/hypertrace-core-graphql-schema-registry/gradle.lockfile +++ b/hypertrace-core-graphql-schema-registry/gradle.lockfile @@ -20,7 +20,7 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/GraphQlAnnotatedSchemaMerger.java b/hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/GraphQlAnnotatedSchemaMerger.java index 13df8de9..45aaf2aa 100644 --- a/hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/GraphQlAnnotatedSchemaMerger.java +++ b/hypertrace-core-graphql-schema-registry/src/main/java/org/hypertrace/core/graphql/schema/registry/GraphQlAnnotatedSchemaMerger.java @@ -8,6 +8,7 @@ import graphql.schema.GraphQLCodeRegistry.Builder; import graphql.schema.GraphQLObjectType; import graphql.schema.GraphQLSchema; +import graphql.schema.visibility.NoIntrospectionGraphqlFieldVisibility; import java.util.AbstractMap.SimpleImmutableEntry; import java.util.Collection; import java.util.Map; @@ -19,15 +20,18 @@ import javax.inject.Inject; import javax.inject.Provider; import org.checkerframework.checker.nullness.qual.NonNull; +import org.hypertrace.core.graphql.spi.config.GraphQlEndpointConfig; import org.hypertrace.core.graphql.spi.schema.GraphQlSchemaFragment; class GraphQlAnnotatedSchemaMerger implements Provider { private final GraphQlSchemaRegistry registry; + private final GraphQlEndpointConfig config; @Inject - GraphQlAnnotatedSchemaMerger(GraphQlSchemaRegistry registry) { + GraphQlAnnotatedSchemaMerger(GraphQlSchemaRegistry registry, GraphQlEndpointConfig config) { this.registry = registry; + this.config = config; } @Override @@ -41,7 +45,8 @@ public GraphQLSchema get() { return fragments.stream() .map(fragment -> this.fragmentToSchema(fragment, annotationProcessor)) .reduce(this.fragmentToSchema(rootFragment, annotationProcessor), this::merge) - .transform(this::removeRootPlaceholders); + .transform(this::removeRootPlaceholders) + .transform(this::applyConfig); } private void registerAllTypeFunctions( @@ -146,6 +151,20 @@ private void removeRootPlaceholders(GraphQLSchema.Builder mergedSchema) { this.rebuildTypeWithoutPlaceholders(mergedWithPlaceholders.getMutationType()).orElse(null)); } + private void applyConfig(GraphQLSchema.Builder builder) { + if (!this.config.isIntrospectionAllowed()) { + GraphQLSchema schemaSoFar = builder.build(); + GraphQLCodeRegistry registryWithoutIntrospection = + schemaSoFar + .getCodeRegistry() + .transform( + registry -> + registry.fieldVisibility( + NoIntrospectionGraphqlFieldVisibility.NO_INTROSPECTION_FIELD_VISIBILITY)); + builder.codeRegistry(registryWithoutIntrospection); + } + } + private Optional rebuildTypeWithoutPlaceholders(GraphQLObjectType objectType) { // Schema validation now requires all objects to have at least one field. To merge partial // fragments, we start with placeholders, identified by a constant, then remove them at the end. diff --git a/hypertrace-core-graphql-schema-registry/src/test/java/org/hypertrace/core/graphql/schema/registry/GraphQlAnnotatedSchemaMergerTest.java b/hypertrace-core-graphql-schema-registry/src/test/java/org/hypertrace/core/graphql/schema/registry/GraphQlAnnotatedSchemaMergerTest.java index efc7f588..21e4cff9 100644 --- a/hypertrace-core-graphql-schema-registry/src/test/java/org/hypertrace/core/graphql/schema/registry/GraphQlAnnotatedSchemaMergerTest.java +++ b/hypertrace-core-graphql-schema-registry/src/test/java/org/hypertrace/core/graphql/schema/registry/GraphQlAnnotatedSchemaMergerTest.java @@ -2,6 +2,9 @@ import static org.hypertrace.core.graphql.schema.registry.DefaultSchema.ROOT_MUTATION_NAME; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; +import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.when; @@ -17,11 +20,13 @@ import graphql.schema.GraphQLObjectType; import graphql.schema.GraphQLSchema; import graphql.schema.GraphQLType; +import graphql.schema.visibility.NoIntrospectionGraphqlFieldVisibility; import java.lang.reflect.AnnotatedType; import java.util.List; import java.util.Set; import java.util.stream.Collectors; import javax.annotation.Nonnull; +import org.hypertrace.core.graphql.spi.config.GraphQlEndpointConfig; import org.hypertrace.core.graphql.spi.schema.GraphQlSchemaFragment; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -34,6 +39,7 @@ public class GraphQlAnnotatedSchemaMergerTest { @Mock private GraphQlSchemaRegistry mockRegistry; @Mock private DataFetchingEnvironment mockDataFetchingEnvironment; + @Mock private GraphQlEndpointConfig mockConfig; private GraphQlAnnotatedSchemaMerger merger; @@ -82,7 +88,7 @@ interface SharedType { @BeforeEach public void beforeEach() { - this.merger = new GraphQlAnnotatedSchemaMerger(mockRegistry); + this.merger = new GraphQlAnnotatedSchemaMerger(mockRegistry, mockConfig); when(mockRegistry.getRootFragment()).thenReturn(new DefaultSchema()); } @@ -186,6 +192,28 @@ public GraphQLType buildType( .getName()); } + @Test + void supportsEnablingIntrospection() { + when(mockRegistry.getRegisteredFragments()) + .thenReturn(Set.of(this.createSchemaFragment(FirstQuerySchema.class))); + when(mockConfig.isIntrospectionAllowed()).thenReturn(true); + GraphQLSchema schema = this.merger.get(); + assertNotNull(schema.getIntrospectionSchemaType()); + assertFalse( + schema.getCodeRegistry().getFieldVisibility() + instanceof NoIntrospectionGraphqlFieldVisibility); + } + + @Test + void supportsDisablingIntrospection() { + when(mockRegistry.getRegisteredFragments()) + .thenReturn(Set.of(this.createSchemaFragment(FirstQuerySchema.class))); + when(mockConfig.isIntrospectionAllowed()).thenReturn(false); + GraphQLSchema schema = this.merger.get(); + assertInstanceOf( + NoIntrospectionGraphqlFieldVisibility.class, schema.getCodeRegistry().getFieldVisibility()); + } + private GraphQlSchemaFragment createSchemaFragment(Class queryClass) { return this.createSchemaFragment(queryClass, null); } diff --git a/hypertrace-core-graphql-schema-utils/gradle.lockfile b/hypertrace-core-graphql-schema-utils/gradle.lockfile index 7765ab25..5cc59444 100644 --- a/hypertrace-core-graphql-schema-utils/gradle.lockfile +++ b/hypertrace-core-graphql-schema-utils/gradle.lockfile @@ -17,7 +17,7 @@ io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath diff --git a/hypertrace-core-graphql-service/build.gradle.kts b/hypertrace-core-graphql-service/build.gradle.kts index 2426bb5d..24b2566f 100644 --- a/hypertrace-core-graphql-service/build.gradle.kts +++ b/hypertrace-core-graphql-service/build.gradle.kts @@ -12,9 +12,13 @@ dependencies { implementation(localLibs.graphql.servlet) implementation(projects.hypertraceCoreGraphqlImpl) implementation(projects.hypertraceCoreGraphqlSpi) + implementation(commonLibs.typesafe.config) runtimeOnly(commonLibs.log4j.slf4j2.impl) runtimeOnly(commonLibs.grpc.netty) + + compileOnly(commonLibs.lombok) + annotationProcessor(commonLibs.lombok) } application { diff --git a/hypertrace-core-graphql-service/gradle.lockfile b/hypertrace-core-graphql-service/gradle.lockfile index f183c0cb..e8a3b875 100644 --- a/hypertrace-core-graphql-service/gradle.lockfile +++ b/hypertrace-core-graphql-service/gradle.lockfile @@ -105,7 +105,7 @@ org.eclipse.jetty:jetty-servlets:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util-ajax:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util:9.4.53.v20231009=runtimeClasspath org.hdrhistogram:HdrHistogram:2.1.12=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath @@ -118,7 +118,9 @@ org.hypertrace.core.serviceframework:platform-service-framework:0.1.70=compileCl org.hypertrace.core.serviceframework:service-framework-spi:0.1.70=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=runtimeClasspath org.latencyutils:LatencyUtils:2.0.3=runtimeClasspath +org.projectlombok:lombok:1.18.28=annotationProcessor +org.projectlombok:lombok:1.18.30=compileClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath org.reactivestreams:reactive-streams:1.0.4=runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath -empty=annotationProcessor +empty= diff --git a/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlEndpointConfig.java b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlEndpointConfig.java new file mode 100644 index 00000000..49a5ce7f --- /dev/null +++ b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlEndpointConfig.java @@ -0,0 +1,39 @@ +package org.hypertrace.core.graphql.service; + +import com.typesafe.config.Config; +import java.time.Duration; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Value; +import org.hypertrace.core.graphql.spi.config.GraphQlEndpointConfig; + +@Value +@AllArgsConstructor(access = AccessLevel.PROTECTED) +@Builder(access = AccessLevel.PRIVATE) +class DefaultGraphQlEndpointConfig implements GraphQlEndpointConfig { + private static final String URL_PATH_PROP_KEY = "graphql.urlPath"; + private static final String TIMEOUT_PROP_KEY = "graphql.timeout"; + private static final String MAX_IO_THREADS_PROP_KEY = "threads.io.max"; + private static final String MAX_REQUEST_THREADS_PROP_KEY = "threads.request.max"; + private static final String CORS_ENABLED_PROP_KEY = "graphql.corsEnabled"; + private static final String INTROSPECTION_ENABLED_PROP_KEY = "introspection.enabled"; + + String urlPath; + Duration timeout; + int maxRequestThreads; + int maxIoThreads; + boolean corsEnabled; + boolean introspectionAllowed; + + static GraphQlEndpointConfig fromConfig(Config config) { + return new DefaultGraphQlEndpointConfigBuilder() + .urlPath(config.getString(URL_PATH_PROP_KEY)) + .timeout(config.getDuration(TIMEOUT_PROP_KEY)) + .maxRequestThreads(config.getInt(MAX_REQUEST_THREADS_PROP_KEY)) + .maxIoThreads(config.getInt(MAX_IO_THREADS_PROP_KEY)) + .corsEnabled(config.getBoolean(CORS_ENABLED_PROP_KEY)) + .introspectionAllowed(config.getBoolean(INTROSPECTION_ENABLED_PROP_KEY)) + .build(); + } +} diff --git a/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java index b882435b..76ced6e7 100644 --- a/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java +++ b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/DefaultGraphQlServiceConfig.java @@ -13,15 +13,8 @@ class DefaultGraphQlServiceConfig implements GraphQlServiceConfig { private static final String SERVICE_NAME_CONFIG = "service.name"; private static final String SERVICE_PORT_CONFIG = "service.port"; - private static final String GRAPHQL_URL_PATH = "graphql.urlPath"; - private static final String GRAPHQL_CORS_ENABLED = "graphql.corsEnabled"; - private static final String GRAPHQL_TIMEOUT = "graphql.timeout"; - private static final String DEFAULT_TENANT_ID = "defaultTenantId"; - private static final String MAX_IO_THREADS_PROPERTY = "threads.io.max"; - private static final String MAX_REQUEST_THREADS_PROPERTY = "threads.request.max"; - private static final String ATTRIBUTE_SERVICE_HOST_PROPERTY = "attribute.service.host"; private static final String ATTRIBUTE_SERVICE_PORT_PROPERTY = "attribute.service.port"; private static final String ATTRIBUTE_SERVICE_CLIENT_TIMEOUT = "attribute.service.timeout"; @@ -34,12 +27,7 @@ class DefaultGraphQlServiceConfig implements GraphQlServiceConfig { private final String serviceName; private final int servicePort; - private final String graphQlUrlPath; - private final boolean corsEnabled; - private final Duration graphQlTimeout; private final Optional defaultTenantId; - private final int maxIoThreads; - private final int maxRequestThreads; private final String attributeServiceHost; private final int attributeServicePort; private final Duration attributeServiceTimeout; @@ -51,12 +39,7 @@ class DefaultGraphQlServiceConfig implements GraphQlServiceConfig { DefaultGraphQlServiceConfig(Config untypedConfig) { this.serviceName = untypedConfig.getString(SERVICE_NAME_CONFIG); this.servicePort = untypedConfig.getInt(SERVICE_PORT_CONFIG); - this.graphQlUrlPath = untypedConfig.getString(GRAPHQL_URL_PATH); - this.corsEnabled = untypedConfig.getBoolean(GRAPHQL_CORS_ENABLED); - this.graphQlTimeout = untypedConfig.getDuration(GRAPHQL_TIMEOUT); this.defaultTenantId = optionallyGet(() -> untypedConfig.getString(DEFAULT_TENANT_ID)); - this.maxIoThreads = untypedConfig.getInt(MAX_IO_THREADS_PROPERTY); - this.maxRequestThreads = untypedConfig.getInt(MAX_REQUEST_THREADS_PROPERTY); this.attributeServiceHost = untypedConfig.getString(ATTRIBUTE_SERVICE_HOST_PROPERTY); this.attributeServicePort = untypedConfig.getInt(ATTRIBUTE_SERVICE_PORT_PROPERTY); @@ -81,36 +64,11 @@ public String getServiceName() { return serviceName; } - @Override - public String getGraphQlUrlPath() { - return graphQlUrlPath; - } - - @Override - public Duration getGraphQlTimeout() { - return graphQlTimeout; - } - - @Override - public boolean isCorsEnabled() { - return corsEnabled; - } - @Override public Optional getDefaultTenantId() { return this.defaultTenantId; } - @Override - public int getMaxIoThreads() { - return maxIoThreads; - } - - @Override - public int getMaxRequestThreads() { - return maxRequestThreads; - } - @Override public String getAttributeServiceHost() { return this.attributeServiceHost; diff --git a/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/GraphQlService.java b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/GraphQlService.java index b46d5383..33654cd3 100644 --- a/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/GraphQlService.java +++ b/hypertrace-core-graphql-service/src/main/java/org/hypertrace/core/graphql/service/GraphQlService.java @@ -1,7 +1,9 @@ package org.hypertrace.core.graphql.service; +import com.typesafe.config.Config; import java.util.List; import org.hypertrace.core.graphql.impl.GraphQlFactory; +import org.hypertrace.core.graphql.spi.config.GraphQlEndpointConfig; import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig; import org.hypertrace.core.serviceframework.config.ConfigClient; import org.hypertrace.core.serviceframework.http.HttpContainerEnvironment; @@ -23,25 +25,29 @@ protected List getHandlerFactories() { } List buildHandlerDefinition(HttpContainerEnvironment environment) { - GraphQlServiceConfig config = - new DefaultGraphQlServiceConfig(environment.getConfig(SERVICE_NAME)); + Config rawConfig = environment.getConfig(SERVICE_NAME); + GraphQlServiceConfig serviceConfig = new DefaultGraphQlServiceConfig(rawConfig); + GraphQlEndpointConfig endpointConfig = DefaultGraphQlEndpointConfig.fromConfig(rawConfig); DefaultGraphQlServiceLifecycle serviceLifecycle = new DefaultGraphQlServiceLifecycle(); environment.getLifecycle().shutdownComplete().thenRun(serviceLifecycle::shutdown); return List.of( HttpHandlerDefinition.builder() .name("graphql") - .port(config.getServicePort()) - .contextPath(config.getGraphQlUrlPath()) - .corsConfig(buildCorsConfig(config)) + .port(serviceConfig.getServicePort()) + .contextPath(endpointConfig.getUrlPath()) + .corsConfig(buildCorsConfig(endpointConfig)) .servlet( new GraphQlServiceHttpServlet( GraphQlFactory.build( - config, serviceLifecycle, environment.getChannelRegistry()))) + serviceConfig, + endpointConfig, + serviceLifecycle, + environment.getChannelRegistry()))) .build()); } - private CorsConfig buildCorsConfig(GraphQlServiceConfig config) { + private CorsConfig buildCorsConfig(GraphQlEndpointConfig config) { if (!config.isCorsEnabled()) { return null; } diff --git a/hypertrace-core-graphql-service/src/main/resources/configs/common/application.conf b/hypertrace-core-graphql-service/src/main/resources/configs/common/application.conf index 4a08113e..2c301472 100644 --- a/hypertrace-core-graphql-service/src/main/resources/configs/common/application.conf +++ b/hypertrace-core-graphql-service/src/main/resources/configs/common/application.conf @@ -6,6 +6,7 @@ service.admin.port = 23432 graphql.urlPath = /graphql graphql.corsEnabled = true graphql.timeout = 30s +introspection.enabled = false threads.io.max = 10 threads.request.max = 10 diff --git a/hypertrace-core-graphql-span-schema/gradle.lockfile b/hypertrace-core-graphql-span-schema/gradle.lockfile index 08111c19..87061faa 100644 --- a/hypertrace-core-graphql-span-schema/gradle.lockfile +++ b/hypertrace-core-graphql-span-schema/gradle.lockfile @@ -53,7 +53,7 @@ org.apache.commons:commons-lang3:3.12.0=compileClasspath,runtimeClasspath org.apache.commons:commons-text:1.10.0=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-spi/gradle.lockfile b/hypertrace-core-graphql-spi/gradle.lockfile index 570be8d8..4798239f 100644 --- a/hypertrace-core-graphql-spi/gradle.lockfile +++ b/hypertrace-core-graphql-spi/gradle.lockfile @@ -9,7 +9,7 @@ com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlEndpointConfig.java b/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlEndpointConfig.java new file mode 100644 index 00000000..b92be153 --- /dev/null +++ b/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlEndpointConfig.java @@ -0,0 +1,17 @@ +package org.hypertrace.core.graphql.spi.config; + +/** This specifies the configuration of one graphql endpoint in the server */ +public interface GraphQlEndpointConfig { + + boolean isIntrospectionAllowed(); + + boolean isCorsEnabled(); + + java.time.Duration getTimeout(); + + String getUrlPath(); + + int getMaxRequestThreads(); + + int getMaxIoThreads(); +} diff --git a/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java b/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java index 915064c1..11b011d6 100644 --- a/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java +++ b/hypertrace-core-graphql-spi/src/main/java/org/hypertrace/core/graphql/spi/config/GraphQlServiceConfig.java @@ -9,18 +9,8 @@ public interface GraphQlServiceConfig { String getServiceName(); - String getGraphQlUrlPath(); - - boolean isCorsEnabled(); - - Duration getGraphQlTimeout(); - Optional getDefaultTenantId(); - int getMaxRequestThreads(); - - int getMaxIoThreads(); - String getAttributeServiceHost(); int getAttributeServicePort(); diff --git a/hypertrace-core-graphql-trace-schema/gradle.lockfile b/hypertrace-core-graphql-trace-schema/gradle.lockfile index d30f2cad..496c02cb 100644 --- a/hypertrace-core-graphql-trace-schema/gradle.lockfile +++ b/hypertrace-core-graphql-trace-schema/gradle.lockfile @@ -50,7 +50,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.17=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/owasp-suppressions.xml b/owasp-suppressions.xml index 4c26776d..204a52b4 100644 --- a/owasp-suppressions.xml +++ b/owasp-suppressions.xml @@ -8,35 +8,4 @@ cpe:/a:grpc:grpc cpe:/a:utils_project:utils - - - ^pkg:maven/io\.netty/netty.*@.*$ - CVE-2023-4586 - - - - ^pkg:maven/org\.eclipse\.jetty/jetty\-servlets@9.4.53\..*$ - CVE-2023-36479 - - - - ^pkg:maven/io\.grpc/grpc\-.*@.*$ - CVE-2023-44487 - - \ No newline at end of file + From 3548c83fbffa3bf83031ce78f982f3a90ac0a97d Mon Sep 17 00:00:00 2001 From: "hypertrace-ci-app[bot]" <145367492+hypertrace-ci-app[bot]@users.noreply.github.com> Date: Fri, 12 Apr 2024 08:46:13 -0400 Subject: [PATCH 165/173] Update gradle locks (#175) Co-authored-by: aaron-steinfeld --- .../gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- hypertrace-core-graphql-common-schema/gradle.lockfile | 2 +- hypertrace-core-graphql-context/gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- hypertrace-core-graphql-grpc-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-impl/gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- hypertrace-core-graphql-rx-utils/gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- hypertrace-core-graphql-schema-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-service/gradle.lockfile | 10 +++++----- hypertrace-core-graphql-span-schema/gradle.lockfile | 2 +- hypertrace-core-graphql-spi/gradle.lockfile | 2 +- hypertrace-core-graphql-trace-schema/gradle.lockfile | 2 +- 19 files changed, 23 insertions(+), 23 deletions(-) diff --git a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile index ec9dfaa9..1107a38d 100644 --- a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile @@ -3,6 +3,6 @@ # This file is expected to be part of source control. com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-attribute-scope/gradle.lockfile b/hypertrace-core-graphql-attribute-scope/gradle.lockfile index 5d948480..95f6005f 100644 --- a/hypertrace-core-graphql-attribute-scope/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-attribute-store/gradle.lockfile b/hypertrace-core-graphql-attribute-store/gradle.lockfile index 358eac2e..5ff38b88 100644 --- a/hypertrace-core-graphql-attribute-store/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-store/gradle.lockfile @@ -47,7 +47,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-common-schema/gradle.lockfile b/hypertrace-core-graphql-common-schema/gradle.lockfile index 0589cd71..e7ca2f10 100644 --- a/hypertrace-core-graphql-common-schema/gradle.lockfile +++ b/hypertrace-core-graphql-common-schema/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-context/gradle.lockfile b/hypertrace-core-graphql-context/gradle.lockfile index b99a2d65..9ef30508 100644 --- a/hypertrace-core-graphql-context/gradle.lockfile +++ b/hypertrace-core-graphql-context/gradle.lockfile @@ -28,7 +28,7 @@ javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath diff --git a/hypertrace-core-graphql-deserialization/gradle.lockfile b/hypertrace-core-graphql-deserialization/gradle.lockfile index ee22e513..149ce5e8 100644 --- a/hypertrace-core-graphql-deserialization/gradle.lockfile +++ b/hypertrace-core-graphql-deserialization/gradle.lockfile @@ -22,7 +22,7 @@ io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath diff --git a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile index 8c3c5cc8..49f4b4bf 100644 --- a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile +++ b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile @@ -48,7 +48,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-grpc-utils/gradle.lockfile b/hypertrace-core-graphql-grpc-utils/gradle.lockfile index 4e15fdb5..f3447d06 100644 --- a/hypertrace-core-graphql-grpc-utils/gradle.lockfile +++ b/hypertrace-core-graphql-grpc-utils/gradle.lockfile @@ -42,7 +42,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-impl/gradle.lockfile b/hypertrace-core-graphql-impl/gradle.lockfile index b4f65791..934d9210 100644 --- a/hypertrace-core-graphql-impl/gradle.lockfile +++ b/hypertrace-core-graphql-impl/gradle.lockfile @@ -52,7 +52,7 @@ org.apache.commons:commons-lang3:3.12.0=runtimeClasspath org.apache.commons:commons-text:1.10.0=runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-log-event-schema/gradle.lockfile b/hypertrace-core-graphql-log-event-schema/gradle.lockfile index 496c02cb..fcd1ed08 100644 --- a/hypertrace-core-graphql-log-event-schema/gradle.lockfile +++ b/hypertrace-core-graphql-log-event-schema/gradle.lockfile @@ -50,7 +50,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-metadata-schema/gradle.lockfile b/hypertrace-core-graphql-metadata-schema/gradle.lockfile index 0589cd71..e7ca2f10 100644 --- a/hypertrace-core-graphql-metadata-schema/gradle.lockfile +++ b/hypertrace-core-graphql-metadata-schema/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-request-transformation/gradle.lockfile b/hypertrace-core-graphql-request-transformation/gradle.lockfile index 5d948480..95f6005f 100644 --- a/hypertrace-core-graphql-request-transformation/gradle.lockfile +++ b/hypertrace-core-graphql-request-transformation/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-rx-utils/gradle.lockfile b/hypertrace-core-graphql-rx-utils/gradle.lockfile index 99e6fca8..e976174f 100644 --- a/hypertrace-core-graphql-rx-utils/gradle.lockfile +++ b/hypertrace-core-graphql-rx-utils/gradle.lockfile @@ -21,7 +21,7 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-registry/gradle.lockfile b/hypertrace-core-graphql-schema-registry/gradle.lockfile index 74e5121e..99a358a3 100644 --- a/hypertrace-core-graphql-schema-registry/gradle.lockfile +++ b/hypertrace-core-graphql-schema-registry/gradle.lockfile @@ -20,7 +20,7 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-utils/gradle.lockfile b/hypertrace-core-graphql-schema-utils/gradle.lockfile index 5cc59444..0aa6ef23 100644 --- a/hypertrace-core-graphql-schema-utils/gradle.lockfile +++ b/hypertrace-core-graphql-schema-utils/gradle.lockfile @@ -17,7 +17,7 @@ io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath diff --git a/hypertrace-core-graphql-service/gradle.lockfile b/hypertrace-core-graphql-service/gradle.lockfile index e8a3b875..07f4a888 100644 --- a/hypertrace-core-graphql-service/gradle.lockfile +++ b/hypertrace-core-graphql-service/gradle.lockfile @@ -105,17 +105,17 @@ org.eclipse.jetty:jetty-servlets:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util-ajax:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util:9.4.53.v20231009=runtimeClasspath org.hdrhistogram:HdrHistogram:2.1.12=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-utils:0.13.2=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-context-utils:0.13.2=runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath -org.hypertrace.core.serviceframework:platform-http-service-framework:0.1.70=compileClasspath,runtimeClasspath -org.hypertrace.core.serviceframework:platform-metrics:0.1.70=runtimeClasspath -org.hypertrace.core.serviceframework:platform-service-framework:0.1.70=compileClasspath,runtimeClasspath -org.hypertrace.core.serviceframework:service-framework-spi:0.1.70=compileClasspath,runtimeClasspath +org.hypertrace.core.serviceframework:platform-http-service-framework:0.1.71=compileClasspath,runtimeClasspath +org.hypertrace.core.serviceframework:platform-metrics:0.1.71=runtimeClasspath +org.hypertrace.core.serviceframework:platform-service-framework:0.1.71=compileClasspath,runtimeClasspath +org.hypertrace.core.serviceframework:service-framework-spi:0.1.71=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=runtimeClasspath org.latencyutils:LatencyUtils:2.0.3=runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor diff --git a/hypertrace-core-graphql-span-schema/gradle.lockfile b/hypertrace-core-graphql-span-schema/gradle.lockfile index 87061faa..6a1640d4 100644 --- a/hypertrace-core-graphql-span-schema/gradle.lockfile +++ b/hypertrace-core-graphql-span-schema/gradle.lockfile @@ -53,7 +53,7 @@ org.apache.commons:commons-lang3:3.12.0=compileClasspath,runtimeClasspath org.apache.commons:commons-text:1.10.0=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-spi/gradle.lockfile b/hypertrace-core-graphql-spi/gradle.lockfile index 4798239f..f7523e95 100644 --- a/hypertrace-core-graphql-spi/gradle.lockfile +++ b/hypertrace-core-graphql-spi/gradle.lockfile @@ -9,7 +9,7 @@ com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-trace-schema/gradle.lockfile b/hypertrace-core-graphql-trace-schema/gradle.lockfile index 496c02cb..fcd1ed08 100644 --- a/hypertrace-core-graphql-trace-schema/gradle.lockfile +++ b/hypertrace-core-graphql-trace-schema/gradle.lockfile @@ -50,7 +50,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.18=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath From 4df2934212972f95783a1e1b05f660c1e61dd4b5 Mon Sep 17 00:00:00 2001 From: Shivansh Anand Srivastava Date: Thu, 23 May 2024 12:34:20 +0530 Subject: [PATCH 166/173] Add SpanJoiner based on spanId (#176) --- .../core/graphql/span/SpanSchemaModule.java | 2 + .../span/joiner/DefaultSpanJoinerBuilder.java | 180 ++++++++++++++++++ .../core/graphql/span/joiner/SpanJoin.java | 13 ++ .../core/graphql/span/joiner/SpanJoiner.java | 27 +++ .../span/joiner/SpanJoinerBuilder.java | 15 ++ .../graphql/span/joiner/SpanJoinerModule.java | 20 ++ .../span/joiner/SpanJoinerBuilderTest.java | 165 ++++++++++++++++ 7 files changed, 422 insertions(+) create mode 100644 hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/DefaultSpanJoinerBuilder.java create mode 100644 hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/SpanJoin.java create mode 100644 hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/SpanJoiner.java create mode 100644 hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/SpanJoinerBuilder.java create mode 100644 hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/SpanJoinerModule.java create mode 100644 hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/joiner/SpanJoinerBuilderTest.java diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/SpanSchemaModule.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/SpanSchemaModule.java index bbc21668..f677143c 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/SpanSchemaModule.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/SpanSchemaModule.java @@ -4,6 +4,7 @@ import com.google.inject.multibindings.Multibinder; import org.hypertrace.core.graphql.common.request.ResultSetRequestBuilder; import org.hypertrace.core.graphql.span.dao.SpanDaoModule; +import org.hypertrace.core.graphql.span.joiner.SpanJoinerModule; import org.hypertrace.core.graphql.span.request.SpanRequestModule; import org.hypertrace.core.graphql.spi.schema.GraphQlSchemaFragment; @@ -17,5 +18,6 @@ protected void configure() { requireBinding(ResultSetRequestBuilder.class); install(new SpanDaoModule()); install(new SpanRequestModule()); + install(new SpanJoinerModule()); } } diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/DefaultSpanJoinerBuilder.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/DefaultSpanJoinerBuilder.java new file mode 100644 index 00000000..bf4ea147 --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/DefaultSpanJoinerBuilder.java @@ -0,0 +1,180 @@ +package org.hypertrace.core.graphql.span.joiner; + +import static com.google.common.collect.ImmutableList.copyOf; +import static com.google.common.collect.Iterables.concat; +import static org.hypertrace.core.graphql.atttributes.scopes.HypertraceCoreAttributeScopeString.SPAN; +import static org.hypertrace.core.graphql.span.joiner.SpanJoin.SPAN_KEY; + +import graphql.schema.DataFetchingFieldSelectionSet; +import graphql.schema.SelectedField; +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.Single; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Optional; +import java.util.Set; +import java.util.function.Function; +import java.util.stream.Collectors; +import javax.inject.Inject; +import lombok.AllArgsConstructor; +import lombok.Value; +import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.common.request.AttributeAssociation; +import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.request.FilterRequestBuilder; +import org.hypertrace.core.graphql.common.request.ResultSetRequest; +import org.hypertrace.core.graphql.common.request.ResultSetRequestBuilder; +import org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument; +import org.hypertrace.core.graphql.common.schema.attributes.AttributeScope; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; +import org.hypertrace.core.graphql.common.schema.id.Identifiable; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterOperatorType; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterType; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.core.graphql.span.dao.SpanDao; +import org.hypertrace.core.graphql.span.request.SpanRequest; +import org.hypertrace.core.graphql.span.schema.Span; +import org.hypertrace.core.graphql.span.schema.SpanResultSet; +import org.hypertrace.core.graphql.utils.schema.GraphQlSelectionFinder; +import org.hypertrace.core.graphql.utils.schema.SelectionQuery; + +public class DefaultSpanJoinerBuilder implements SpanJoinerBuilder { + + private static final int ZERO_OFFSET = 0; + + private final SpanDao spanDao; + private final GraphQlSelectionFinder selectionFinder; + private final ResultSetRequestBuilder resultSetRequestBuilder; + private final FilterRequestBuilder filterRequestBuilder; + + @Inject + DefaultSpanJoinerBuilder( + SpanDao spanDao, + GraphQlSelectionFinder selectionFinder, + ResultSetRequestBuilder resultSetRequestBuilder, + FilterRequestBuilder filterRequestBuilder) { + this.spanDao = spanDao; + this.selectionFinder = selectionFinder; + this.resultSetRequestBuilder = resultSetRequestBuilder; + this.filterRequestBuilder = filterRequestBuilder; + } + + @Override + public Single build( + GraphQlRequestContext context, + TimeRangeArgument timeRange, + DataFetchingFieldSelectionSet selectionSet, + List pathToSpanJoin) { + return Single.just( + new DefaultSpanJoiner( + context, timeRange, this.getSelections(selectionSet, pathToSpanJoin))); + } + + private List getSelections( + DataFetchingFieldSelectionSet selectionSet, List pathToSpanJoin) { + List fullPath = copyOf(concat(pathToSpanJoin, List.of(SPAN_KEY))); + return selectionFinder + .findSelections(selectionSet, SelectionQuery.builder().selectionPath(fullPath).build()) + .collect(Collectors.toUnmodifiableList()); + } + + @AllArgsConstructor + private class DefaultSpanJoiner implements SpanJoiner { + + private final GraphQlRequestContext context; + private final TimeRangeArgument timeRange; + private final List selectedFields; + + @Override + public Single> joinSpans( + Collection joinSources, SpanIdGetter spanIdGetter) { + return this.buildSourceToIdMap(joinSources, spanIdGetter).flatMap(this::joinSpans); + } + + private Single> joinSpans(Map sourceToSpanIdMap) { + return this.buildSpanRequest(sourceToSpanIdMap) + .flatMap(spanDao::getSpans) + .map(this::buildSpanIdToSpanMap) + .map(spanIdToSpanMap -> buildSourceToSpanMap(sourceToSpanIdMap, spanIdToSpanMap)); + } + + private Map buildSourceToSpanMap( + Map sourceToSpanIdMap, Map spanIdToSpanMap) { + return sourceToSpanIdMap.entrySet().stream() + .filter(entry -> spanIdToSpanMap.containsKey(entry.getValue())) + .collect( + Collectors.toUnmodifiableMap( + Entry::getKey, entry -> spanIdToSpanMap.get(entry.getValue()))); + } + + private Map buildSpanIdToSpanMap(SpanResultSet resultSet) { + return resultSet.results().stream() + .collect(Collectors.toUnmodifiableMap(Identifiable::id, Function.identity())); + } + + private Single buildSpanRequest(Map sourceToSpanIdMap) { + Collection spanIds = sourceToSpanIdMap.values(); + return buildSpanIdsFilter(spanIds) + .flatMap(filterArguments -> buildSpanRequest(spanIds.size(), filterArguments)); + } + + private Single buildSpanRequest( + int size, List> filterArguments) { + return resultSetRequestBuilder + .build( + context, + SPAN, + size, + ZERO_OFFSET, + timeRange, + Collections.emptyList(), + filterArguments, + selectedFields.stream(), + Optional.empty()) + .map(spanEventsRequest -> new SpanJoinRequest(context, spanEventsRequest)); + } + + private Single>> buildSpanIdsFilter( + Collection spanIds) { + return filterRequestBuilder.build(context, SPAN, Set.of(new SpanIdFilter(spanIds))); + } + + private Single> buildSourceToIdMap( + Collection joinSources, SpanIdGetter spanIdGetter) { + return Observable.fromIterable(joinSources) + .flatMapSingle(source -> this.maybeBuildMapEntry(source, spanIdGetter)) + .collect(Collectors.toMap(Entry::getKey, Entry::getValue)); + } + + private Single> maybeBuildMapEntry( + T source, SpanIdGetter spanIdGetter) { + return spanIdGetter.getSpanId(source).map(id -> Map.entry(source, id)); + } + } + + @Value + @Accessors(fluent = true) + private static class SpanIdFilter implements FilterArgument { + FilterType type = FilterType.ID; + String key = null; + AttributeExpression keyExpression = null; + FilterOperatorType operator = FilterOperatorType.IN; + Collection value; + AttributeScope idType = null; + String idScope = SPAN; + } + + @Value + @Accessors(fluent = true) + private static class SpanJoinRequest implements SpanRequest { + GraphQlRequestContext context; + ResultSetRequest spanEventsRequest; + Collection logEventAttributes = Collections.emptyList(); + boolean fetchTotal = false; + } +} diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/SpanJoin.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/SpanJoin.java new file mode 100644 index 00000000..6611267b --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/SpanJoin.java @@ -0,0 +1,13 @@ +package org.hypertrace.core.graphql.span.joiner; + +import graphql.annotations.annotationTypes.GraphQLField; +import graphql.annotations.annotationTypes.GraphQLName; +import org.hypertrace.core.graphql.span.schema.Span; + +public interface SpanJoin { + String SPAN_KEY = "span"; + + @GraphQLField + @GraphQLName(SPAN_KEY) + Span span(); +} diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/SpanJoiner.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/SpanJoiner.java new file mode 100644 index 00000000..7cfe87b7 --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/SpanJoiner.java @@ -0,0 +1,27 @@ +package org.hypertrace.core.graphql.span.joiner; + +import io.reactivex.rxjava3.core.Single; +import java.util.Collection; +import java.util.Collections; +import java.util.Map; +import org.hypertrace.core.graphql.span.schema.Span; + +public interface SpanJoiner { + + /** A NOOP joiner */ + SpanJoiner NO_OP_JOINER = + new SpanJoiner() { + @Override + public Single> joinSpans( + Collection joinSources, SpanIdGetter spanIdGetter) { + return Single.just(Collections.emptyMap()); + } + }; + + Single> joinSpans(Collection joinSources, SpanIdGetter spanIdGetter); + + @FunctionalInterface + interface SpanIdGetter { + Single getSpanId(T source); + } +} diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/SpanJoinerBuilder.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/SpanJoinerBuilder.java new file mode 100644 index 00000000..a06ccf45 --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/SpanJoinerBuilder.java @@ -0,0 +1,15 @@ +package org.hypertrace.core.graphql.span.joiner; + +import graphql.schema.DataFetchingFieldSelectionSet; +import io.reactivex.rxjava3.core.Single; +import java.util.List; +import org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; + +public interface SpanJoinerBuilder { + Single build( + GraphQlRequestContext context, + TimeRangeArgument timeRange, + DataFetchingFieldSelectionSet selectionSet, + List pathToSpanJoin); +} diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/SpanJoinerModule.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/SpanJoinerModule.java new file mode 100644 index 00000000..162eb36b --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/SpanJoinerModule.java @@ -0,0 +1,20 @@ +package org.hypertrace.core.graphql.span.joiner; + +import com.google.inject.AbstractModule; +import org.hypertrace.core.graphql.common.request.FilterRequestBuilder; +import org.hypertrace.core.graphql.common.request.ResultSetRequestBuilder; +import org.hypertrace.core.graphql.span.dao.SpanDao; +import org.hypertrace.core.graphql.utils.schema.GraphQlSelectionFinder; + +public class SpanJoinerModule extends AbstractModule { + + @Override + protected void configure() { + bind(SpanJoinerBuilder.class).to(DefaultSpanJoinerBuilder.class); + + requireBinding(SpanDao.class); + requireBinding(GraphQlSelectionFinder.class); + requireBinding(ResultSetRequestBuilder.class); + requireBinding(FilterRequestBuilder.class); + } +} diff --git a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/joiner/SpanJoinerBuilderTest.java b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/joiner/SpanJoinerBuilderTest.java new file mode 100644 index 00000000..d135e32a --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/joiner/SpanJoinerBuilderTest.java @@ -0,0 +1,165 @@ +package org.hypertrace.core.graphql.span.joiner; + +import static java.util.Collections.emptyList; +import static java.util.Map.entry; +import static org.hypertrace.core.graphql.atttributes.scopes.HypertraceCoreAttributeScopeString.SPAN; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anySet; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import graphql.schema.DataFetchingFieldSelectionSet; +import graphql.schema.SelectedField; +import io.reactivex.rxjava3.core.Single; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Stream; +import lombok.Value; +import lombok.experimental.Accessors; +import org.hypertrace.core.graphql.common.request.AttributeAssociation; +import org.hypertrace.core.graphql.common.request.FilterRequestBuilder; +import org.hypertrace.core.graphql.common.request.ResultSetRequest; +import org.hypertrace.core.graphql.common.request.ResultSetRequestBuilder; +import org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument; +import org.hypertrace.core.graphql.common.schema.attributes.arguments.AttributeExpression; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.order.OrderArgument; +import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.core.graphql.log.event.schema.LogEventResultSet; +import org.hypertrace.core.graphql.span.dao.SpanDao; +import org.hypertrace.core.graphql.span.joiner.SpanJoiner.SpanIdGetter; +import org.hypertrace.core.graphql.span.request.SpanRequest; +import org.hypertrace.core.graphql.span.schema.Span; +import org.hypertrace.core.graphql.span.schema.SpanResultSet; +import org.hypertrace.core.graphql.utils.schema.GraphQlSelectionFinder; +import org.hypertrace.core.graphql.utils.schema.SelectionQuery; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +public class SpanJoinerBuilderTest { + + private static final String FIRST_SPAN_ID = "spanId1"; + private static final String SECOND_SPAN_ID = "spanId2"; + + @Mock private SpanDao mockSpanDao; + @Mock private GraphQlSelectionFinder mockSelectionFinder; + @Mock private ResultSetRequestBuilder mockResultSetRequestBuilder; + @Mock private FilterRequestBuilder mockFilterRequestBuilder; + @Mock private DataFetchingFieldSelectionSet mockSelectionSet; + @Mock private GraphQlRequestContext mockRequestContext; + @Mock private ResultSetRequest mockResultSetRequest; + @Mock private AttributeAssociation mockFilter; + @Mock private TimeRangeArgument mockTimeRangeArgument; + + private SpanJoinerBuilder spanJoinerBuilder; + + @BeforeEach + void setup() { + spanJoinerBuilder = + new DefaultSpanJoinerBuilder( + mockSpanDao, + mockSelectionFinder, + mockResultSetRequestBuilder, + mockFilterRequestBuilder); + } + + @Test + void fetchSpans() { + Span span1 = new TestSpan(FIRST_SPAN_ID); + Span span2 = new TestSpan(SECOND_SPAN_ID); + TestJoinSource joinSource1 = new TestJoinSource(FIRST_SPAN_ID); + TestJoinSource joinSource2 = new TestJoinSource(SECOND_SPAN_ID); + Map expected = + Map.ofEntries(entry(joinSource1, span1), entry(joinSource2, span2)); + List joinSources = List.of(joinSource1, joinSource2); + mockRequestedSelectionFields( + List.of(mock(SelectedField.class), mock(SelectedField.class)), "pathToSpan"); + mockRequestBuilding(); + mockResult(List.of(span1, span2)); + SpanJoiner joiner = + this.spanJoinerBuilder + .build( + this.mockRequestContext, + this.mockTimeRangeArgument, + this.mockSelectionSet, + List.of("pathToSpan")) + .blockingGet(); + assertEquals( + expected, joiner.joinSpans(joinSources, new TestJoinSourceIdGetter()).blockingGet()); + } + + private void mockRequestBuilding() { + when(mockFilterRequestBuilder.build(eq(mockRequestContext), eq(SPAN), anySet())) + .thenReturn(Single.just(List.of(mockFilter))); + + when(mockResultSetRequestBuilder.build( + eq(mockRequestContext), + eq(SPAN), + eq(2), + eq(0), + eq(mockTimeRangeArgument), + eq(emptyList()), + eq(List.of(mockFilter)), + any(Stream.class), + eq(Optional.empty()))) + .thenReturn(Single.just(mockResultSetRequest)); + } + + private void mockRequestedSelectionFields(List selectedFields, String location) { + when(mockSelectionFinder.findSelections( + mockSelectionSet, + SelectionQuery.builder().selectionPath(List.of(location, "span")).build())) + .thenReturn(selectedFields.stream()); + } + + private void mockResult(List spans) { + when(mockSpanDao.getSpans(any(SpanRequest.class))) + .thenAnswer(invocation -> Single.just(new TestSpanResultSet(spans))); + } + + @Value + private static class TestJoinSource { + String spanId; + } + + private static class TestJoinSourceIdGetter implements SpanIdGetter { + @Override + public Single getSpanId(TestJoinSource source) { + if (source.getSpanId() == null || source.getSpanId().isEmpty()) { + return Single.error(new IllegalArgumentException("Empty spanId")); + } + return Single.just(source.getSpanId()); + } + } + + @Value + @Accessors(fluent = true) + private static class TestSpanResultSet implements SpanResultSet { + List results; + long count = 0; + long total = 0; + } + + @Value + @Accessors(fluent = true) + private static class TestSpan implements Span { + String id; + + @Override + public Object attribute(AttributeExpression expression) { + return null; + } + + @Override + public LogEventResultSet logEvents() { + return null; + } + } +} From d6b4b5796f189db82d877ac51545f477eb40f5fb Mon Sep 17 00:00:00 2001 From: "hypertrace-ci-app[bot]" <145367492+hypertrace-ci-app[bot]@users.noreply.github.com> Date: Fri, 24 May 2024 09:07:46 -0400 Subject: [PATCH 167/173] Update gradle locks (#178) Co-authored-by: aaron-steinfeld --- .../gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- hypertrace-core-graphql-common-schema/gradle.lockfile | 2 +- hypertrace-core-graphql-context/gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- hypertrace-core-graphql-grpc-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-impl/gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- hypertrace-core-graphql-rx-utils/gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- hypertrace-core-graphql-schema-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-service/gradle.lockfile | 11 +++++------ hypertrace-core-graphql-span-schema/gradle.lockfile | 2 +- hypertrace-core-graphql-spi/gradle.lockfile | 2 +- hypertrace-core-graphql-trace-schema/gradle.lockfile | 2 +- 19 files changed, 23 insertions(+), 24 deletions(-) diff --git a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile index 1107a38d..e0e092a6 100644 --- a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile @@ -3,6 +3,6 @@ # This file is expected to be part of source control. com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-attribute-scope/gradle.lockfile b/hypertrace-core-graphql-attribute-scope/gradle.lockfile index 95f6005f..fd2b5962 100644 --- a/hypertrace-core-graphql-attribute-scope/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-attribute-store/gradle.lockfile b/hypertrace-core-graphql-attribute-store/gradle.lockfile index 5ff38b88..b84d2571 100644 --- a/hypertrace-core-graphql-attribute-store/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-store/gradle.lockfile @@ -47,7 +47,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-common-schema/gradle.lockfile b/hypertrace-core-graphql-common-schema/gradle.lockfile index e7ca2f10..0b5bedcf 100644 --- a/hypertrace-core-graphql-common-schema/gradle.lockfile +++ b/hypertrace-core-graphql-common-schema/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-context/gradle.lockfile b/hypertrace-core-graphql-context/gradle.lockfile index 9ef30508..871ec233 100644 --- a/hypertrace-core-graphql-context/gradle.lockfile +++ b/hypertrace-core-graphql-context/gradle.lockfile @@ -28,7 +28,7 @@ javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath diff --git a/hypertrace-core-graphql-deserialization/gradle.lockfile b/hypertrace-core-graphql-deserialization/gradle.lockfile index 149ce5e8..2241baac 100644 --- a/hypertrace-core-graphql-deserialization/gradle.lockfile +++ b/hypertrace-core-graphql-deserialization/gradle.lockfile @@ -22,7 +22,7 @@ io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath diff --git a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile index 49f4b4bf..d9318cb4 100644 --- a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile +++ b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile @@ -48,7 +48,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-grpc-utils/gradle.lockfile b/hypertrace-core-graphql-grpc-utils/gradle.lockfile index f3447d06..c94207f5 100644 --- a/hypertrace-core-graphql-grpc-utils/gradle.lockfile +++ b/hypertrace-core-graphql-grpc-utils/gradle.lockfile @@ -42,7 +42,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-impl/gradle.lockfile b/hypertrace-core-graphql-impl/gradle.lockfile index 934d9210..2a4d868a 100644 --- a/hypertrace-core-graphql-impl/gradle.lockfile +++ b/hypertrace-core-graphql-impl/gradle.lockfile @@ -52,7 +52,7 @@ org.apache.commons:commons-lang3:3.12.0=runtimeClasspath org.apache.commons:commons-text:1.10.0=runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-log-event-schema/gradle.lockfile b/hypertrace-core-graphql-log-event-schema/gradle.lockfile index fcd1ed08..2cd7c1ff 100644 --- a/hypertrace-core-graphql-log-event-schema/gradle.lockfile +++ b/hypertrace-core-graphql-log-event-schema/gradle.lockfile @@ -50,7 +50,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-metadata-schema/gradle.lockfile b/hypertrace-core-graphql-metadata-schema/gradle.lockfile index e7ca2f10..0b5bedcf 100644 --- a/hypertrace-core-graphql-metadata-schema/gradle.lockfile +++ b/hypertrace-core-graphql-metadata-schema/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-request-transformation/gradle.lockfile b/hypertrace-core-graphql-request-transformation/gradle.lockfile index 95f6005f..fd2b5962 100644 --- a/hypertrace-core-graphql-request-transformation/gradle.lockfile +++ b/hypertrace-core-graphql-request-transformation/gradle.lockfile @@ -49,7 +49,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-rx-utils/gradle.lockfile b/hypertrace-core-graphql-rx-utils/gradle.lockfile index e976174f..0145121f 100644 --- a/hypertrace-core-graphql-rx-utils/gradle.lockfile +++ b/hypertrace-core-graphql-rx-utils/gradle.lockfile @@ -21,7 +21,7 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-registry/gradle.lockfile b/hypertrace-core-graphql-schema-registry/gradle.lockfile index 99a358a3..fb9e969b 100644 --- a/hypertrace-core-graphql-schema-registry/gradle.lockfile +++ b/hypertrace-core-graphql-schema-registry/gradle.lockfile @@ -20,7 +20,7 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-utils/gradle.lockfile b/hypertrace-core-graphql-schema-utils/gradle.lockfile index 0aa6ef23..4cb25b9d 100644 --- a/hypertrace-core-graphql-schema-utils/gradle.lockfile +++ b/hypertrace-core-graphql-schema-utils/gradle.lockfile @@ -17,7 +17,7 @@ io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath diff --git a/hypertrace-core-graphql-service/gradle.lockfile b/hypertrace-core-graphql-service/gradle.lockfile index 07f4a888..c7041eb7 100644 --- a/hypertrace-core-graphql-service/gradle.lockfile +++ b/hypertrace-core-graphql-service/gradle.lockfile @@ -91,7 +91,6 @@ org.apache.httpcomponents:httpclient:4.5.13=runtimeClasspath org.apache.httpcomponents:httpcore:4.4.13=runtimeClasspath org.apache.logging.log4j:log4j-api:2.20.0=runtimeClasspath org.apache.logging.log4j:log4j-core:2.20.0=runtimeClasspath -org.apache.logging.log4j:log4j-slf4j-impl:2.19.0=runtimeClasspath org.apache.logging.log4j:log4j-slf4j2-impl:2.20.0=runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath @@ -105,17 +104,17 @@ org.eclipse.jetty:jetty-servlets:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util-ajax:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util:9.4.53.v20231009=runtimeClasspath org.hdrhistogram:HdrHistogram:2.1.12=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-utils:0.13.2=compileClasspath,runtimeClasspath org.hypertrace.core.grpcutils:grpc-context-utils:0.13.2=runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath -org.hypertrace.core.serviceframework:platform-http-service-framework:0.1.71=compileClasspath,runtimeClasspath -org.hypertrace.core.serviceframework:platform-metrics:0.1.71=runtimeClasspath -org.hypertrace.core.serviceframework:platform-service-framework:0.1.71=compileClasspath,runtimeClasspath -org.hypertrace.core.serviceframework:service-framework-spi:0.1.71=compileClasspath,runtimeClasspath +org.hypertrace.core.serviceframework:platform-http-service-framework:0.1.72=compileClasspath,runtimeClasspath +org.hypertrace.core.serviceframework:platform-metrics:0.1.72=runtimeClasspath +org.hypertrace.core.serviceframework:platform-service-framework:0.1.72=compileClasspath,runtimeClasspath +org.hypertrace.core.serviceframework:service-framework-spi:0.1.72=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=runtimeClasspath org.latencyutils:LatencyUtils:2.0.3=runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor diff --git a/hypertrace-core-graphql-span-schema/gradle.lockfile b/hypertrace-core-graphql-span-schema/gradle.lockfile index 6a1640d4..4f5053ae 100644 --- a/hypertrace-core-graphql-span-schema/gradle.lockfile +++ b/hypertrace-core-graphql-span-schema/gradle.lockfile @@ -53,7 +53,7 @@ org.apache.commons:commons-lang3:3.12.0=compileClasspath,runtimeClasspath org.apache.commons:commons-text:1.10.0=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath diff --git a/hypertrace-core-graphql-spi/gradle.lockfile b/hypertrace-core-graphql-spi/gradle.lockfile index f7523e95..2e95f722 100644 --- a/hypertrace-core-graphql-spi/gradle.lockfile +++ b/hypertrace-core-graphql-spi/gradle.lockfile @@ -9,7 +9,7 @@ com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-trace-schema/gradle.lockfile b/hypertrace-core-graphql-trace-schema/gradle.lockfile index fcd1ed08..2cd7c1ff 100644 --- a/hypertrace-core-graphql-trace-schema/gradle.lockfile +++ b/hypertrace-core-graphql-trace-schema/gradle.lockfile @@ -50,7 +50,7 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.19=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath From 89ab3a07f871dcc24db302b15dac77de0559f03a Mon Sep 17 00:00:00 2001 From: Shivansh Anand Srivastava Date: Thu, 30 May 2024 18:50:53 +0530 Subject: [PATCH 168/173] chore | Add SpanJoiner based on list of spanId (#177) * Add SpanJoiner based on list of spanId * Add SpanJoiner based on list of spanId * Revert "Add SpanJoiner based on list of spanId" This reverts commit 14ba29c0fb563feff85f57f21d6570f3695276b3. * Revert "Add SpanJoiner based on list of spanId" This reverts commit 8e9dfae7b3262cbe18933851e10d2633a2a49c2a. * Add SpanJoiner based on list of spanId * Resolve PR reviews * Resolve PR reviews --- .../span/joiner/DefaultSpanJoinerBuilder.java | 114 +++++++++++------- .../graphql/span/joiner/MultipleSpanJoin.java | 14 +++ .../core/graphql/span/joiner/SpanJoiner.java | 21 +++- .../span/joiner/SpanJoinerBuilderTest.java | 90 +++++++++++--- 4 files changed, 176 insertions(+), 63 deletions(-) create mode 100644 hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/MultipleSpanJoin.java diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/DefaultSpanJoinerBuilder.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/DefaultSpanJoinerBuilder.java index bf4ea147..46bcd6c3 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/DefaultSpanJoinerBuilder.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/DefaultSpanJoinerBuilder.java @@ -3,8 +3,11 @@ import static com.google.common.collect.ImmutableList.copyOf; import static com.google.common.collect.Iterables.concat; import static org.hypertrace.core.graphql.atttributes.scopes.HypertraceCoreAttributeScopeString.SPAN; +import static org.hypertrace.core.graphql.span.joiner.MultipleSpanJoin.SPANS_KEY; import static org.hypertrace.core.graphql.span.joiner.SpanJoin.SPAN_KEY; +import com.google.common.collect.ImmutableListMultimap; +import com.google.common.collect.ListMultimap; import graphql.schema.DataFetchingFieldSelectionSet; import graphql.schema.SelectedField; import io.reactivex.rxjava3.core.Observable; @@ -46,9 +49,9 @@ public class DefaultSpanJoinerBuilder implements SpanJoinerBuilder { private static final int ZERO_OFFSET = 0; - private final SpanDao spanDao; private final GraphQlSelectionFinder selectionFinder; + private final ResultSetRequestBuilder resultSetRequestBuilder; private final FilterRequestBuilder filterRequestBuilder; @@ -70,17 +73,7 @@ public Single build( TimeRangeArgument timeRange, DataFetchingFieldSelectionSet selectionSet, List pathToSpanJoin) { - return Single.just( - new DefaultSpanJoiner( - context, timeRange, this.getSelections(selectionSet, pathToSpanJoin))); - } - - private List getSelections( - DataFetchingFieldSelectionSet selectionSet, List pathToSpanJoin) { - List fullPath = copyOf(concat(pathToSpanJoin, List.of(SPAN_KEY))); - return selectionFinder - .findSelections(selectionSet, SelectionQuery.builder().selectionPath(fullPath).build()) - .collect(Collectors.toUnmodifiableList()); + return Single.just(new DefaultSpanJoiner(context, timeRange, selectionSet, pathToSpanJoin)); } @AllArgsConstructor @@ -88,43 +81,92 @@ private class DefaultSpanJoiner implements SpanJoiner { private final GraphQlRequestContext context; private final TimeRangeArgument timeRange; - private final List selectedFields; + private final DataFetchingFieldSelectionSet selectionSet; + private final List pathToJoin; @Override - public Single> joinSpans( + public Single> joinSpan( Collection joinSources, SpanIdGetter spanIdGetter) { - return this.buildSourceToIdMap(joinSources, spanIdGetter).flatMap(this::joinSpans); + Function>> idsGetter = + source -> spanIdGetter.getSpanId(source).map(List::of); + return this.joinSpans(joinSources, idsGetter, SPAN_KEY).map(this::reduceMap); } - private Single> joinSpans(Map sourceToSpanIdMap) { - return this.buildSpanRequest(sourceToSpanIdMap) - .flatMap(spanDao::getSpans) - .map(this::buildSpanIdToSpanMap) - .map(spanIdToSpanMap -> buildSourceToSpanMap(sourceToSpanIdMap, spanIdToSpanMap)); + @Override + public Single> joinSpans( + Collection joinSources, MultipleSpanIdGetter multipleSpanIdGetter) { + return this.joinSpans(joinSources, multipleSpanIdGetter::getSpanIds, SPANS_KEY); } - private Map buildSourceToSpanMap( - Map sourceToSpanIdMap, Map spanIdToSpanMap) { - return sourceToSpanIdMap.entrySet().stream() - .filter(entry -> spanIdToSpanMap.containsKey(entry.getValue())) + private Single> joinSpans( + Collection joinSources, + Function>> idsGetter, + String joinSpanKey) { + return this.buildSourceToIdsMap(joinSources, idsGetter) + .flatMap( + sourceToSpanIdsMap -> + this.buildSpanRequest(sourceToSpanIdsMap, joinSpanKey) + .flatMap(spanDao::getSpans) + .map(this::buildSpanIdToSpanMap) + .map( + spanIdToSpanMap -> + this.buildSourceToSpanListMultiMap( + sourceToSpanIdsMap, spanIdToSpanMap))); + } + + private Map reduceMap(ListMultimap listMultimap) { + return listMultimap.entries().stream() .collect( Collectors.toUnmodifiableMap( + Entry::getKey, Entry::getValue, (first, second) -> first)); + } + + private Single> buildSourceToIdsMap( + Collection joinSources, Function>> idsGetter) { + return Observable.fromIterable(joinSources) + .flatMapSingle(source -> idsGetter.apply(source).map(ids -> Map.entry(source, ids))) + .collect( + ImmutableListMultimap.flatteningToImmutableListMultimap( + Entry::getKey, entry -> entry.getValue().stream())); + } + + private ImmutableListMultimap buildSourceToSpanListMultiMap( + ListMultimap sourceToSpanIdsMultimap, Map spanIdToSpanMap) { + return sourceToSpanIdsMultimap.entries().stream() + .filter(entry -> spanIdToSpanMap.containsKey(entry.getValue())) + .collect( + ImmutableListMultimap.toImmutableListMultimap( Entry::getKey, entry -> spanIdToSpanMap.get(entry.getValue()))); } + private List getSelections(String joinSpanKey) { + List fullPath = copyOf(concat(pathToJoin, List.of(joinSpanKey))); + return selectionFinder + .findSelections(selectionSet, SelectionQuery.builder().selectionPath(fullPath).build()) + .collect(Collectors.toUnmodifiableList()); + } + private Map buildSpanIdToSpanMap(SpanResultSet resultSet) { return resultSet.results().stream() .collect(Collectors.toUnmodifiableMap(Identifiable::id, Function.identity())); } - private Single buildSpanRequest(Map sourceToSpanIdMap) { - Collection spanIds = sourceToSpanIdMap.values(); - return buildSpanIdsFilter(spanIds) - .flatMap(filterArguments -> buildSpanRequest(spanIds.size(), filterArguments)); + private Single buildSpanRequest( + ListMultimap sourceToSpanIdsMultimap, String joinSpanKey) { + Collection spanIds = + sourceToSpanIdsMultimap.values().stream() + .distinct() + .collect(Collectors.toUnmodifiableList()); + List selectedFields = getSelections(joinSpanKey); + return buildSpanIdsFilter(context, spanIds) + .flatMap( + filterArguments -> buildSpanRequest(spanIds.size(), filterArguments, selectedFields)); } private Single buildSpanRequest( - int size, List> filterArguments) { + int size, + List> filterArguments, + List selectedFields) { return resultSetRequestBuilder .build( context, @@ -140,21 +182,9 @@ private Single buildSpanRequest( } private Single>> buildSpanIdsFilter( - Collection spanIds) { + GraphQlRequestContext context, Collection spanIds) { return filterRequestBuilder.build(context, SPAN, Set.of(new SpanIdFilter(spanIds))); } - - private Single> buildSourceToIdMap( - Collection joinSources, SpanIdGetter spanIdGetter) { - return Observable.fromIterable(joinSources) - .flatMapSingle(source -> this.maybeBuildMapEntry(source, spanIdGetter)) - .collect(Collectors.toMap(Entry::getKey, Entry::getValue)); - } - - private Single> maybeBuildMapEntry( - T source, SpanIdGetter spanIdGetter) { - return spanIdGetter.getSpanId(source).map(id -> Map.entry(source, id)); - } } @Value diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/MultipleSpanJoin.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/MultipleSpanJoin.java new file mode 100644 index 00000000..afa706e7 --- /dev/null +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/MultipleSpanJoin.java @@ -0,0 +1,14 @@ +package org.hypertrace.core.graphql.span.joiner; + +import graphql.annotations.annotationTypes.GraphQLField; +import graphql.annotations.annotationTypes.GraphQLName; +import java.util.List; +import org.hypertrace.core.graphql.span.schema.Span; + +public interface MultipleSpanJoin { + String SPANS_KEY = "spans"; + + @GraphQLField + @GraphQLName(SPANS_KEY) + List spans(); +} diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/SpanJoiner.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/SpanJoiner.java index 7cfe87b7..9997257a 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/SpanJoiner.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/SpanJoiner.java @@ -1,8 +1,11 @@ package org.hypertrace.core.graphql.span.joiner; +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.ListMultimap; import io.reactivex.rxjava3.core.Single; import java.util.Collection; import java.util.Collections; +import java.util.List; import java.util.Map; import org.hypertrace.core.graphql.span.schema.Span; @@ -12,16 +15,30 @@ public interface SpanJoiner { SpanJoiner NO_OP_JOINER = new SpanJoiner() { @Override - public Single> joinSpans( + public Single> joinSpan( Collection joinSources, SpanIdGetter spanIdGetter) { return Single.just(Collections.emptyMap()); } + + @Override + public Single> joinSpans( + Collection joinSources, MultipleSpanIdGetter multipleSpanIdGetter) { + return Single.just(ArrayListMultimap.create()); + } }; - Single> joinSpans(Collection joinSources, SpanIdGetter spanIdGetter); + Single> joinSpan(Collection joinSources, SpanIdGetter spanIdGetter); + + Single> joinSpans( + Collection joinSources, MultipleSpanIdGetter multipleSpanIdGetter); @FunctionalInterface interface SpanIdGetter { Single getSpanId(T source); } + + @FunctionalInterface + interface MultipleSpanIdGetter { + Single> getSpanIds(T source); + } } diff --git a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/joiner/SpanJoinerBuilderTest.java b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/joiner/SpanJoinerBuilderTest.java index d135e32a..eae7b19a 100644 --- a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/joiner/SpanJoinerBuilderTest.java +++ b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/joiner/SpanJoinerBuilderTest.java @@ -10,6 +10,8 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.ListMultimap; import graphql.schema.DataFetchingFieldSelectionSet; import graphql.schema.SelectedField; import io.reactivex.rxjava3.core.Single; @@ -30,6 +32,7 @@ import org.hypertrace.core.graphql.context.GraphQlRequestContext; import org.hypertrace.core.graphql.log.event.schema.LogEventResultSet; import org.hypertrace.core.graphql.span.dao.SpanDao; +import org.hypertrace.core.graphql.span.joiner.SpanJoiner.MultipleSpanIdGetter; import org.hypertrace.core.graphql.span.joiner.SpanJoiner.SpanIdGetter; import org.hypertrace.core.graphql.span.request.SpanRequest; import org.hypertrace.core.graphql.span.schema.Span; @@ -45,8 +48,10 @@ @ExtendWith(MockitoExtension.class) public class SpanJoinerBuilderTest { - private static final String FIRST_SPAN_ID = "spanId1"; - private static final String SECOND_SPAN_ID = "spanId2"; + private static final String SPAN_ID1 = "spanId1"; + private static final String SPAN_ID2 = "spanId2"; + private static final String SPAN_ID3 = "spanId3"; + private static final String SPAN_ID4 = "spanId4"; @Mock private SpanDao mockSpanDao; @Mock private GraphQlSelectionFinder mockSelectionFinder; @@ -72,16 +77,31 @@ void setup() { @Test void fetchSpans() { - Span span1 = new TestSpan(FIRST_SPAN_ID); - Span span2 = new TestSpan(SECOND_SPAN_ID); - TestJoinSource joinSource1 = new TestJoinSource(FIRST_SPAN_ID); - TestJoinSource joinSource2 = new TestJoinSource(SECOND_SPAN_ID); + Span span1 = new TestSpan(SPAN_ID1); + Span span2 = new TestSpan(SPAN_ID2); + TestJoinSource joinSource1 = new TestJoinSource(SPAN_ID1); + TestJoinSource joinSource2 = new TestJoinSource(SPAN_ID2); Map expected = Map.ofEntries(entry(joinSource1, span1), entry(joinSource2, span2)); List joinSources = List.of(joinSource1, joinSource2); - mockRequestedSelectionFields( - List.of(mock(SelectedField.class), mock(SelectedField.class)), "pathToSpan"); - mockRequestBuilding(); + when(mockSelectionFinder.findSelections( + mockSelectionSet, + SelectionQuery.builder().selectionPath(List.of("pathToSpan", "span")).build())) + .thenReturn(Stream.of(mock(SelectedField.class), mock(SelectedField.class))); + when(mockFilterRequestBuilder.build(eq(mockRequestContext), eq(SPAN), anySet())) + .thenReturn(Single.just(List.of(mockFilter))); + + when(mockResultSetRequestBuilder.build( + eq(mockRequestContext), + eq(SPAN), + eq(2), + eq(0), + eq(mockTimeRangeArgument), + eq(emptyList()), + eq(List.of(mockFilter)), + any(Stream.class), + eq(Optional.empty()))) + .thenReturn(Single.just(mockResultSetRequest)); mockResult(List.of(span1, span2)); SpanJoiner joiner = this.spanJoinerBuilder @@ -92,17 +112,30 @@ void fetchSpans() { List.of("pathToSpan")) .blockingGet(); assertEquals( - expected, joiner.joinSpans(joinSources, new TestJoinSourceIdGetter()).blockingGet()); + expected, joiner.joinSpan(joinSources, new TestJoinSourceIdGetter()).blockingGet()); } - private void mockRequestBuilding() { + @Test + void fetchMultipleSpans() { + Span span1 = new TestSpan(SPAN_ID1); + Span span2 = new TestSpan(SPAN_ID2); + TestMultipleJoinSource joinSource1 = new TestMultipleJoinSource(List.of(SPAN_ID1, SPAN_ID2)); + TestMultipleJoinSource joinSource2 = new TestMultipleJoinSource(List.of(SPAN_ID3, SPAN_ID4)); + ListMultimap expected = ArrayListMultimap.create(); + expected.put(joinSource1, span1); + expected.put(joinSource1, span2); + List joinSources = List.of(joinSource1, joinSource2); + when(mockSelectionFinder.findSelections( + mockSelectionSet, + SelectionQuery.builder().selectionPath(List.of("pathToSpans", "spans")).build())) + .thenReturn(Stream.of(mock(SelectedField.class), mock(SelectedField.class))); when(mockFilterRequestBuilder.build(eq(mockRequestContext), eq(SPAN), anySet())) .thenReturn(Single.just(List.of(mockFilter))); when(mockResultSetRequestBuilder.build( eq(mockRequestContext), eq(SPAN), - eq(2), + eq(4), eq(0), eq(mockTimeRangeArgument), eq(emptyList()), @@ -110,18 +143,24 @@ private void mockRequestBuilding() { any(Stream.class), eq(Optional.empty()))) .thenReturn(Single.just(mockResultSetRequest)); - } - private void mockRequestedSelectionFields(List selectedFields, String location) { - when(mockSelectionFinder.findSelections( - mockSelectionSet, - SelectionQuery.builder().selectionPath(List.of(location, "span")).build())) - .thenReturn(selectedFields.stream()); + mockResult(List.of(span1, span2)); + SpanJoiner joiner = + this.spanJoinerBuilder + .build( + this.mockRequestContext, + this.mockTimeRangeArgument, + this.mockSelectionSet, + List.of("pathToSpans")) + .blockingGet(); + assertEquals( + expected, + joiner.joinSpans(joinSources, new TestMultipleJoinSourceIdGetter()).blockingGet()); } private void mockResult(List spans) { when(mockSpanDao.getSpans(any(SpanRequest.class))) - .thenAnswer(invocation -> Single.just(new TestSpanResultSet(spans))); + .thenReturn(Single.just(new TestSpanResultSet(spans))); } @Value @@ -162,4 +201,17 @@ public LogEventResultSet logEvents() { return null; } } + + @Value + private static class TestMultipleJoinSource { + List spanIds; + } + + private static class TestMultipleJoinSourceIdGetter + implements MultipleSpanIdGetter { + @Override + public Single> getSpanIds(TestMultipleJoinSource source) { + return Single.just(source.getSpanIds()); + } + } } From 4202d012907e88cc99a983794c3b202440331d77 Mon Sep 17 00:00:00 2001 From: "hypertrace-ci-app[bot]" <145367492+hypertrace-ci-app[bot]@users.noreply.github.com> Date: Fri, 31 May 2024 08:59:58 -0400 Subject: [PATCH 169/173] Update gradle locks (#179) Co-authored-by: aaron-steinfeld --- .../gradle.lockfile | 2 +- .../gradle.lockfile | 10 +++++----- .../gradle.lockfile | 10 +++++----- hypertrace-core-graphql-common-schema/gradle.lockfile | 10 +++++----- hypertrace-core-graphql-context/gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- .../gradle.lockfile | 10 +++++----- hypertrace-core-graphql-grpc-utils/gradle.lockfile | 8 ++++---- hypertrace-core-graphql-impl/gradle.lockfile | 10 +++++----- .../gradle.lockfile | 10 +++++----- .../gradle.lockfile | 10 +++++----- .../gradle.lockfile | 10 +++++----- hypertrace-core-graphql-rx-utils/gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- hypertrace-core-graphql-schema-utils/gradle.lockfile | 2 +- hypertrace-core-graphql-service/gradle.lockfile | 8 ++++---- hypertrace-core-graphql-span-schema/gradle.lockfile | 10 +++++----- hypertrace-core-graphql-spi/gradle.lockfile | 2 +- hypertrace-core-graphql-trace-schema/gradle.lockfile | 10 +++++----- 19 files changed, 65 insertions(+), 65 deletions(-) diff --git a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile index e0e092a6..98a1c289 100644 --- a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile @@ -3,6 +3,6 @@ # This file is expected to be part of source control. com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-attribute-scope/gradle.lockfile b/hypertrace-core-graphql-attribute-scope/gradle.lockfile index fd2b5962..8375f0ff 100644 --- a/hypertrace-core-graphql-attribute-scope/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope/gradle.lockfile @@ -38,7 +38,7 @@ io.grpc:grpc-protobuf-lite:1.60.0=runtimeClasspath io.grpc:grpc-protobuf:1.60.0=runtimeClasspath io.grpc:grpc-stub:1.60.0=runtimeClasspath io.grpc:grpc-util:1.60.0=runtimeClasspath -io.netty:netty-bom:4.1.101.Final=runtimeClasspath +io.netty:netty-bom:4.1.108.Final=runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath @@ -49,12 +49,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.3=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.3=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.3=runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-attribute-store/gradle.lockfile b/hypertrace-core-graphql-attribute-store/gradle.lockfile index b84d2571..a51075fb 100644 --- a/hypertrace-core-graphql-attribute-store/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-store/gradle.lockfile @@ -36,7 +36,7 @@ io.grpc:grpc-protobuf-lite:1.60.0=compileClasspath,runtimeClasspath io.grpc:grpc-protobuf:1.60.0=compileClasspath,runtimeClasspath io.grpc:grpc-stub:1.60.0=compileClasspath,runtimeClasspath io.grpc:grpc-util:1.60.0=runtimeClasspath -io.netty:netty-bom:4.1.101.Final=runtimeClasspath +io.netty:netty-bom:4.1.108.Final=runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath @@ -47,12 +47,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.3=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.3=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.3=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath diff --git a/hypertrace-core-graphql-common-schema/gradle.lockfile b/hypertrace-core-graphql-common-schema/gradle.lockfile index 0b5bedcf..2761d798 100644 --- a/hypertrace-core-graphql-common-schema/gradle.lockfile +++ b/hypertrace-core-graphql-common-schema/gradle.lockfile @@ -38,7 +38,7 @@ io.grpc:grpc-protobuf-lite:1.60.0=runtimeClasspath io.grpc:grpc-protobuf:1.60.0=runtimeClasspath io.grpc:grpc-stub:1.60.0=runtimeClasspath io.grpc:grpc-util:1.60.0=runtimeClasspath -io.netty:netty-bom:4.1.101.Final=runtimeClasspath +io.netty:netty-bom:4.1.108.Final=runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath @@ -49,12 +49,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.3=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.3=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.3=runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath diff --git a/hypertrace-core-graphql-context/gradle.lockfile b/hypertrace-core-graphql-context/gradle.lockfile index 871ec233..42af5433 100644 --- a/hypertrace-core-graphql-context/gradle.lockfile +++ b/hypertrace-core-graphql-context/gradle.lockfile @@ -28,7 +28,7 @@ javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath diff --git a/hypertrace-core-graphql-deserialization/gradle.lockfile b/hypertrace-core-graphql-deserialization/gradle.lockfile index 2241baac..fbd4719b 100644 --- a/hypertrace-core-graphql-deserialization/gradle.lockfile +++ b/hypertrace-core-graphql-deserialization/gradle.lockfile @@ -22,7 +22,7 @@ io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath diff --git a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile index d9318cb4..1696d086 100644 --- a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile +++ b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile @@ -37,7 +37,7 @@ io.grpc:grpc-protobuf-lite:1.60.0=compileClasspath,runtimeClasspath io.grpc:grpc-protobuf:1.60.0=compileClasspath,runtimeClasspath io.grpc:grpc-stub:1.60.0=compileClasspath,runtimeClasspath io.grpc:grpc-util:1.60.0=runtimeClasspath -io.netty:netty-bom:4.1.101.Final=runtimeClasspath +io.netty:netty-bom:4.1.108.Final=runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath @@ -48,12 +48,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.3=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.3=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.3=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-grpc-utils/gradle.lockfile b/hypertrace-core-graphql-grpc-utils/gradle.lockfile index c94207f5..99457edc 100644 --- a/hypertrace-core-graphql-grpc-utils/gradle.lockfile +++ b/hypertrace-core-graphql-grpc-utils/gradle.lockfile @@ -32,7 +32,7 @@ io.grpc:grpc-core:1.60.0=compileClasspath,runtimeClasspath io.grpc:grpc-inprocess:1.60.0=compileClasspath,runtimeClasspath io.grpc:grpc-stub:1.60.0=compileClasspath,runtimeClasspath io.grpc:grpc-util:1.60.0=runtimeClasspath -io.netty:netty-bom:4.1.101.Final=compileClasspath,runtimeClasspath +io.netty:netty-bom:4.1.108.Final=compileClasspath,runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath @@ -42,9 +42,9 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.3=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.3=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-impl/gradle.lockfile b/hypertrace-core-graphql-impl/gradle.lockfile index 2a4d868a..657f5396 100644 --- a/hypertrace-core-graphql-impl/gradle.lockfile +++ b/hypertrace-core-graphql-impl/gradle.lockfile @@ -38,7 +38,7 @@ io.grpc:grpc-protobuf-lite:1.60.0=compileClasspath,runtimeClasspath io.grpc:grpc-protobuf:1.60.0=compileClasspath,runtimeClasspath io.grpc:grpc-stub:1.60.0=compileClasspath,runtimeClasspath io.grpc:grpc-util:1.60.0=runtimeClasspath -io.netty:netty-bom:4.1.101.Final=compileClasspath,runtimeClasspath +io.netty:netty-bom:4.1.108.Final=compileClasspath,runtimeClasspath io.opentelemetry:opentelemetry-proto:1.1.0-alpha=runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath @@ -52,12 +52,12 @@ org.apache.commons:commons-lang3:3.12.0=runtimeClasspath org.apache.commons:commons-text:1.10.0=runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.3=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.3=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.3=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-log-event-schema/gradle.lockfile b/hypertrace-core-graphql-log-event-schema/gradle.lockfile index 2cd7c1ff..d6c48590 100644 --- a/hypertrace-core-graphql-log-event-schema/gradle.lockfile +++ b/hypertrace-core-graphql-log-event-schema/gradle.lockfile @@ -39,7 +39,7 @@ io.grpc:grpc-protobuf-lite:1.60.0=compileClasspath,runtimeClasspath io.grpc:grpc-protobuf:1.60.0=compileClasspath,runtimeClasspath io.grpc:grpc-stub:1.60.0=compileClasspath,runtimeClasspath io.grpc:grpc-util:1.60.0=runtimeClasspath -io.netty:netty-bom:4.1.101.Final=runtimeClasspath +io.netty:netty-bom:4.1.108.Final=runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath @@ -50,12 +50,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.3=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.3=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.3=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor diff --git a/hypertrace-core-graphql-metadata-schema/gradle.lockfile b/hypertrace-core-graphql-metadata-schema/gradle.lockfile index 0b5bedcf..2761d798 100644 --- a/hypertrace-core-graphql-metadata-schema/gradle.lockfile +++ b/hypertrace-core-graphql-metadata-schema/gradle.lockfile @@ -38,7 +38,7 @@ io.grpc:grpc-protobuf-lite:1.60.0=runtimeClasspath io.grpc:grpc-protobuf:1.60.0=runtimeClasspath io.grpc:grpc-stub:1.60.0=runtimeClasspath io.grpc:grpc-util:1.60.0=runtimeClasspath -io.netty:netty-bom:4.1.101.Final=runtimeClasspath +io.netty:netty-bom:4.1.108.Final=runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath @@ -49,12 +49,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.3=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.3=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.3=runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath diff --git a/hypertrace-core-graphql-request-transformation/gradle.lockfile b/hypertrace-core-graphql-request-transformation/gradle.lockfile index fd2b5962..8375f0ff 100644 --- a/hypertrace-core-graphql-request-transformation/gradle.lockfile +++ b/hypertrace-core-graphql-request-transformation/gradle.lockfile @@ -38,7 +38,7 @@ io.grpc:grpc-protobuf-lite:1.60.0=runtimeClasspath io.grpc:grpc-protobuf:1.60.0=runtimeClasspath io.grpc:grpc-stub:1.60.0=runtimeClasspath io.grpc:grpc-util:1.60.0=runtimeClasspath -io.netty:netty-bom:4.1.101.Final=runtimeClasspath +io.netty:netty-bom:4.1.108.Final=runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath @@ -49,12 +49,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.3=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.3=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.3=runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-rx-utils/gradle.lockfile b/hypertrace-core-graphql-rx-utils/gradle.lockfile index 0145121f..5f0e0cad 100644 --- a/hypertrace-core-graphql-rx-utils/gradle.lockfile +++ b/hypertrace-core-graphql-rx-utils/gradle.lockfile @@ -21,7 +21,7 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-registry/gradle.lockfile b/hypertrace-core-graphql-schema-registry/gradle.lockfile index fb9e969b..1ada8d72 100644 --- a/hypertrace-core-graphql-schema-registry/gradle.lockfile +++ b/hypertrace-core-graphql-schema-registry/gradle.lockfile @@ -20,7 +20,7 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-utils/gradle.lockfile b/hypertrace-core-graphql-schema-utils/gradle.lockfile index 4cb25b9d..0c384556 100644 --- a/hypertrace-core-graphql-schema-utils/gradle.lockfile +++ b/hypertrace-core-graphql-schema-utils/gradle.lockfile @@ -17,7 +17,7 @@ io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath diff --git a/hypertrace-core-graphql-service/gradle.lockfile b/hypertrace-core-graphql-service/gradle.lockfile index c7041eb7..01c465e6 100644 --- a/hypertrace-core-graphql-service/gradle.lockfile +++ b/hypertrace-core-graphql-service/gradle.lockfile @@ -104,12 +104,12 @@ org.eclipse.jetty:jetty-servlets:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util-ajax:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util:9.4.53.v20231009=runtimeClasspath org.hdrhistogram:HdrHistogram:2.1.12=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.2=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.2=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.3=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.3=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.3=runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.hypertrace.core.serviceframework:platform-http-service-framework:0.1.72=compileClasspath,runtimeClasspath org.hypertrace.core.serviceframework:platform-metrics:0.1.72=runtimeClasspath diff --git a/hypertrace-core-graphql-span-schema/gradle.lockfile b/hypertrace-core-graphql-span-schema/gradle.lockfile index 4f5053ae..899c248e 100644 --- a/hypertrace-core-graphql-span-schema/gradle.lockfile +++ b/hypertrace-core-graphql-span-schema/gradle.lockfile @@ -39,7 +39,7 @@ io.grpc:grpc-protobuf-lite:1.60.0=compileClasspath,runtimeClasspath io.grpc:grpc-protobuf:1.60.0=compileClasspath,runtimeClasspath io.grpc:grpc-stub:1.60.0=compileClasspath,runtimeClasspath io.grpc:grpc-util:1.60.0=runtimeClasspath -io.netty:netty-bom:4.1.101.Final=runtimeClasspath +io.netty:netty-bom:4.1.108.Final=runtimeClasspath io.opentelemetry:opentelemetry-proto:1.1.0-alpha=compileClasspath,runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath @@ -53,12 +53,12 @@ org.apache.commons:commons-lang3:3.12.0=compileClasspath,runtimeClasspath org.apache.commons:commons-text:1.10.0=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.3=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.3=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.3=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor diff --git a/hypertrace-core-graphql-spi/gradle.lockfile b/hypertrace-core-graphql-spi/gradle.lockfile index 2e95f722..b43f3d90 100644 --- a/hypertrace-core-graphql-spi/gradle.lockfile +++ b/hypertrace-core-graphql-spi/gradle.lockfile @@ -9,7 +9,7 @@ com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-trace-schema/gradle.lockfile b/hypertrace-core-graphql-trace-schema/gradle.lockfile index 2cd7c1ff..d6c48590 100644 --- a/hypertrace-core-graphql-trace-schema/gradle.lockfile +++ b/hypertrace-core-graphql-trace-schema/gradle.lockfile @@ -39,7 +39,7 @@ io.grpc:grpc-protobuf-lite:1.60.0=compileClasspath,runtimeClasspath io.grpc:grpc-protobuf:1.60.0=compileClasspath,runtimeClasspath io.grpc:grpc-stub:1.60.0=compileClasspath,runtimeClasspath io.grpc:grpc-util:1.60.0=runtimeClasspath -io.netty:netty-bom:4.1.101.Final=runtimeClasspath +io.netty:netty-bom:4.1.108.Final=runtimeClasspath io.perfmark:perfmark-api:0.26.0=runtimeClasspath io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath @@ -50,12 +50,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.20=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.1=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.1=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.1=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.3=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.3=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.3=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor From 36bd2064eb18b4607ad64b379ffe1d4c1abda069 Mon Sep 17 00:00:00 2001 From: Shivansh Anand Srivastava Date: Fri, 7 Jun 2024 15:37:30 +0530 Subject: [PATCH 170/173] chore | Add support for providing filters in spanJoiner (#181) * Add support for providing filters in spanJoiner * Resolve PR reviews --- .../span/joiner/DefaultSpanJoinerBuilder.java | 37 +++++++++++++------ .../core/graphql/span/joiner/SpanJoiner.java | 28 ++++++++++++-- .../span/joiner/SpanJoinerBuilderTest.java | 16 +++++--- 3 files changed, 60 insertions(+), 21 deletions(-) diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/DefaultSpanJoinerBuilder.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/DefaultSpanJoinerBuilder.java index 46bcd6c3..4cd98626 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/DefaultSpanJoinerBuilder.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/DefaultSpanJoinerBuilder.java @@ -18,9 +18,9 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Optional; -import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; +import java.util.stream.Stream; import javax.inject.Inject; import lombok.AllArgsConstructor; import lombok.Value; @@ -86,26 +86,32 @@ private class DefaultSpanJoiner implements SpanJoiner { @Override public Single> joinSpan( - Collection joinSources, SpanIdGetter spanIdGetter) { + Collection joinSources, + SpanIdGetter spanIdGetter, + Collection filterArguments) { Function>> idsGetter = source -> spanIdGetter.getSpanId(source).map(List::of); - return this.joinSpans(joinSources, idsGetter, SPAN_KEY).map(this::reduceMap); + return this.joinSpans(joinSources, idsGetter, filterArguments, SPAN_KEY).map(this::reduceMap); } @Override public Single> joinSpans( - Collection joinSources, MultipleSpanIdGetter multipleSpanIdGetter) { - return this.joinSpans(joinSources, multipleSpanIdGetter::getSpanIds, SPANS_KEY); + Collection joinSources, + MultipleSpanIdGetter multipleSpanIdGetter, + Collection filterArguments) { + return this.joinSpans( + joinSources, multipleSpanIdGetter::getSpanIds, filterArguments, SPANS_KEY); } private Single> joinSpans( Collection joinSources, Function>> idsGetter, + Collection filterArguments, String joinSpanKey) { return this.buildSourceToIdsMap(joinSources, idsGetter) .flatMap( sourceToSpanIdsMap -> - this.buildSpanRequest(sourceToSpanIdsMap, joinSpanKey) + this.buildSpanRequest(sourceToSpanIdsMap, joinSpanKey, filterArguments) .flatMap(spanDao::getSpans) .map(this::buildSpanIdToSpanMap) .map( @@ -152,15 +158,16 @@ private Map buildSpanIdToSpanMap(SpanResultSet resultSet) { } private Single buildSpanRequest( - ListMultimap sourceToSpanIdsMultimap, String joinSpanKey) { + ListMultimap sourceToSpanIdsMultimap, + String joinSpanKey, + Collection filterArguments) { Collection spanIds = sourceToSpanIdsMultimap.values().stream() .distinct() .collect(Collectors.toUnmodifiableList()); List selectedFields = getSelections(joinSpanKey); - return buildSpanIdsFilter(context, spanIds) - .flatMap( - filterArguments -> buildSpanRequest(spanIds.size(), filterArguments, selectedFields)); + return buildSpanIdsFilter(context, spanIds, filterArguments) + .flatMap(filters -> buildSpanRequest(spanIds.size(), filters, selectedFields)); } private Single buildSpanRequest( @@ -182,8 +189,14 @@ private Single buildSpanRequest( } private Single>> buildSpanIdsFilter( - GraphQlRequestContext context, Collection spanIds) { - return filterRequestBuilder.build(context, SPAN, Set.of(new SpanIdFilter(spanIds))); + GraphQlRequestContext context, + Collection spanIds, + Collection filterArguments) { + return filterRequestBuilder.build( + context, + SPAN, + Stream.concat(filterArguments.stream(), Stream.of(new SpanIdFilter(spanIds))) + .collect(Collectors.toUnmodifiableList())); } } diff --git a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/SpanJoiner.java b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/SpanJoiner.java index 9997257a..3cc8c8c9 100644 --- a/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/SpanJoiner.java +++ b/hypertrace-core-graphql-span-schema/src/main/java/org/hypertrace/core/graphql/span/joiner/SpanJoiner.java @@ -7,6 +7,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; import org.hypertrace.core.graphql.span.schema.Span; public interface SpanJoiner { @@ -16,21 +17,40 @@ public interface SpanJoiner { new SpanJoiner() { @Override public Single> joinSpan( - Collection joinSources, SpanIdGetter spanIdGetter) { + Collection joinSources, + SpanIdGetter spanIdGetter, + Collection filterArguments) { return Single.just(Collections.emptyMap()); } @Override public Single> joinSpans( - Collection joinSources, MultipleSpanIdGetter multipleSpanIdGetter) { + Collection joinSources, + MultipleSpanIdGetter multipleSpanIdGetter, + Collection filterArguments) { return Single.just(ArrayListMultimap.create()); } }; - Single> joinSpan(Collection joinSources, SpanIdGetter spanIdGetter); + default Single> joinSpan( + Collection joinSources, SpanIdGetter spanIdGetter) { + return joinSpan(joinSources, spanIdGetter, Collections.emptyList()); + } + + default Single> joinSpans( + Collection joinSources, MultipleSpanIdGetter multipleSpanIdGetter) { + return joinSpans(joinSources, multipleSpanIdGetter, Collections.emptyList()); + } + + Single> joinSpan( + Collection joinSources, + SpanIdGetter spanIdGetter, + Collection filterArguments); Single> joinSpans( - Collection joinSources, MultipleSpanIdGetter multipleSpanIdGetter); + Collection joinSources, + MultipleSpanIdGetter multipleSpanIdGetter, + Collection filterArguments); @FunctionalInterface interface SpanIdGetter { diff --git a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/joiner/SpanJoinerBuilderTest.java b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/joiner/SpanJoinerBuilderTest.java index eae7b19a..7242cf9a 100644 --- a/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/joiner/SpanJoinerBuilderTest.java +++ b/hypertrace-core-graphql-span-schema/src/test/java/org/hypertrace/core/graphql/span/joiner/SpanJoinerBuilderTest.java @@ -5,7 +5,7 @@ import static org.hypertrace.core.graphql.atttributes.scopes.HypertraceCoreAttributeScopeString.SPAN; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anySet; +import static org.mockito.ArgumentMatchers.anyList; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -15,6 +15,7 @@ import graphql.schema.DataFetchingFieldSelectionSet; import graphql.schema.SelectedField; import io.reactivex.rxjava3.core.Single; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Optional; @@ -88,7 +89,7 @@ void fetchSpans() { mockSelectionSet, SelectionQuery.builder().selectionPath(List.of("pathToSpan", "span")).build())) .thenReturn(Stream.of(mock(SelectedField.class), mock(SelectedField.class))); - when(mockFilterRequestBuilder.build(eq(mockRequestContext), eq(SPAN), anySet())) + when(mockFilterRequestBuilder.build(eq(mockRequestContext), eq(SPAN), anyList())) .thenReturn(Single.just(List.of(mockFilter))); when(mockResultSetRequestBuilder.build( @@ -112,7 +113,10 @@ void fetchSpans() { List.of("pathToSpan")) .blockingGet(); assertEquals( - expected, joiner.joinSpan(joinSources, new TestJoinSourceIdGetter()).blockingGet()); + expected, + joiner + .joinSpan(joinSources, new TestJoinSourceIdGetter(), Collections.emptyList()) + .blockingGet()); } @Test @@ -129,7 +133,7 @@ void fetchMultipleSpans() { mockSelectionSet, SelectionQuery.builder().selectionPath(List.of("pathToSpans", "spans")).build())) .thenReturn(Stream.of(mock(SelectedField.class), mock(SelectedField.class))); - when(mockFilterRequestBuilder.build(eq(mockRequestContext), eq(SPAN), anySet())) + when(mockFilterRequestBuilder.build(eq(mockRequestContext), eq(SPAN), anyList())) .thenReturn(Single.just(List.of(mockFilter))); when(mockResultSetRequestBuilder.build( @@ -155,7 +159,9 @@ void fetchMultipleSpans() { .blockingGet(); assertEquals( expected, - joiner.joinSpans(joinSources, new TestMultipleJoinSourceIdGetter()).blockingGet()); + joiner + .joinSpans(joinSources, new TestMultipleJoinSourceIdGetter(), Collections.emptyList()) + .blockingGet()); } private void mockResult(List spans) { From 450177051890b32612d962f2a60c345d1611f810 Mon Sep 17 00:00:00 2001 From: "hypertrace-ci-app[bot]" <145367492+hypertrace-ci-app[bot]@users.noreply.github.com> Date: Fri, 7 Jun 2024 08:54:10 -0400 Subject: [PATCH 171/173] Update gradle locks (#182) Co-authored-by: aaron-steinfeld --- .../gradle.lockfile | 2 +- .../gradle.lockfile | 8 ++++---- .../gradle.lockfile | 8 ++++---- .../gradle.lockfile | 8 ++++---- hypertrace-core-graphql-context/gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- .../gradle.lockfile | 8 ++++---- .../gradle.lockfile | 6 +++--- hypertrace-core-graphql-impl/gradle.lockfile | 8 ++++---- .../gradle.lockfile | 8 ++++---- .../gradle.lockfile | 8 ++++---- .../gradle.lockfile | 8 ++++---- hypertrace-core-graphql-rx-utils/gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- .../gradle.lockfile | 2 +- hypertrace-core-graphql-service/gradle.lockfile | 16 ++++++++-------- .../gradle.lockfile | 8 ++++---- hypertrace-core-graphql-spi/gradle.lockfile | 2 +- .../gradle.lockfile | 8 ++++---- 19 files changed, 58 insertions(+), 58 deletions(-) diff --git a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile index 98a1c289..3dc17720 100644 --- a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile @@ -3,6 +3,6 @@ # This file is expected to be part of source control. com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-attribute-scope/gradle.lockfile b/hypertrace-core-graphql-attribute-scope/gradle.lockfile index 8375f0ff..f7c27d3f 100644 --- a/hypertrace-core-graphql-attribute-scope/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope/gradle.lockfile @@ -49,12 +49,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.3=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.3=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.3=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.4=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-attribute-store/gradle.lockfile b/hypertrace-core-graphql-attribute-store/gradle.lockfile index a51075fb..f40a1577 100644 --- a/hypertrace-core-graphql-attribute-store/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-store/gradle.lockfile @@ -47,12 +47,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.3=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.3=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.3=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.4=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath diff --git a/hypertrace-core-graphql-common-schema/gradle.lockfile b/hypertrace-core-graphql-common-schema/gradle.lockfile index 2761d798..0a39a2a1 100644 --- a/hypertrace-core-graphql-common-schema/gradle.lockfile +++ b/hypertrace-core-graphql-common-schema/gradle.lockfile @@ -49,12 +49,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.3=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.3=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.3=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.4=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath diff --git a/hypertrace-core-graphql-context/gradle.lockfile b/hypertrace-core-graphql-context/gradle.lockfile index 42af5433..7ef69e89 100644 --- a/hypertrace-core-graphql-context/gradle.lockfile +++ b/hypertrace-core-graphql-context/gradle.lockfile @@ -28,7 +28,7 @@ javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath diff --git a/hypertrace-core-graphql-deserialization/gradle.lockfile b/hypertrace-core-graphql-deserialization/gradle.lockfile index fbd4719b..3f1013cd 100644 --- a/hypertrace-core-graphql-deserialization/gradle.lockfile +++ b/hypertrace-core-graphql-deserialization/gradle.lockfile @@ -22,7 +22,7 @@ io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath diff --git a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile index 1696d086..5caf04db 100644 --- a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile +++ b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile @@ -48,12 +48,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.3=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.3=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.3=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.4=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-grpc-utils/gradle.lockfile b/hypertrace-core-graphql-grpc-utils/gradle.lockfile index 99457edc..2c13cfbd 100644 --- a/hypertrace-core-graphql-grpc-utils/gradle.lockfile +++ b/hypertrace-core-graphql-grpc-utils/gradle.lockfile @@ -42,9 +42,9 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.3=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.3=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-impl/gradle.lockfile b/hypertrace-core-graphql-impl/gradle.lockfile index 657f5396..96099621 100644 --- a/hypertrace-core-graphql-impl/gradle.lockfile +++ b/hypertrace-core-graphql-impl/gradle.lockfile @@ -52,12 +52,12 @@ org.apache.commons:commons-lang3:3.12.0=runtimeClasspath org.apache.commons:commons-text:1.10.0=runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.3=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.3=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.3=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.4=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-log-event-schema/gradle.lockfile b/hypertrace-core-graphql-log-event-schema/gradle.lockfile index d6c48590..7a822e1f 100644 --- a/hypertrace-core-graphql-log-event-schema/gradle.lockfile +++ b/hypertrace-core-graphql-log-event-schema/gradle.lockfile @@ -50,12 +50,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.3=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.3=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.3=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.4=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor diff --git a/hypertrace-core-graphql-metadata-schema/gradle.lockfile b/hypertrace-core-graphql-metadata-schema/gradle.lockfile index 2761d798..0a39a2a1 100644 --- a/hypertrace-core-graphql-metadata-schema/gradle.lockfile +++ b/hypertrace-core-graphql-metadata-schema/gradle.lockfile @@ -49,12 +49,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.3=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.3=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.3=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.4=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath diff --git a/hypertrace-core-graphql-request-transformation/gradle.lockfile b/hypertrace-core-graphql-request-transformation/gradle.lockfile index 8375f0ff..f7c27d3f 100644 --- a/hypertrace-core-graphql-request-transformation/gradle.lockfile +++ b/hypertrace-core-graphql-request-transformation/gradle.lockfile @@ -49,12 +49,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.3=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.3=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.3=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.4=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-rx-utils/gradle.lockfile b/hypertrace-core-graphql-rx-utils/gradle.lockfile index 5f0e0cad..33c23e47 100644 --- a/hypertrace-core-graphql-rx-utils/gradle.lockfile +++ b/hypertrace-core-graphql-rx-utils/gradle.lockfile @@ -21,7 +21,7 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-registry/gradle.lockfile b/hypertrace-core-graphql-schema-registry/gradle.lockfile index 1ada8d72..4a773ff1 100644 --- a/hypertrace-core-graphql-schema-registry/gradle.lockfile +++ b/hypertrace-core-graphql-schema-registry/gradle.lockfile @@ -20,7 +20,7 @@ jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-schema-utils/gradle.lockfile b/hypertrace-core-graphql-schema-utils/gradle.lockfile index 0c384556..f76e73fe 100644 --- a/hypertrace-core-graphql-schema-utils/gradle.lockfile +++ b/hypertrace-core-graphql-schema-utils/gradle.lockfile @@ -17,7 +17,7 @@ io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath javax.inject:javax.inject:1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor org.projectlombok:lombok:1.18.30=compileClasspath diff --git a/hypertrace-core-graphql-service/gradle.lockfile b/hypertrace-core-graphql-service/gradle.lockfile index 01c465e6..09c8675b 100644 --- a/hypertrace-core-graphql-service/gradle.lockfile +++ b/hypertrace-core-graphql-service/gradle.lockfile @@ -104,17 +104,17 @@ org.eclipse.jetty:jetty-servlets:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util-ajax:9.4.53.v20231009=runtimeClasspath org.eclipse.jetty:jetty-util:9.4.53.v20231009=runtimeClasspath org.hdrhistogram:HdrHistogram:2.1.12=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.3=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.3=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.3=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.4=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath -org.hypertrace.core.serviceframework:platform-http-service-framework:0.1.72=compileClasspath,runtimeClasspath -org.hypertrace.core.serviceframework:platform-metrics:0.1.72=runtimeClasspath -org.hypertrace.core.serviceframework:platform-service-framework:0.1.72=compileClasspath,runtimeClasspath -org.hypertrace.core.serviceframework:service-framework-spi:0.1.72=compileClasspath,runtimeClasspath +org.hypertrace.core.serviceframework:platform-http-service-framework:0.1.73=compileClasspath,runtimeClasspath +org.hypertrace.core.serviceframework:platform-metrics:0.1.73=runtimeClasspath +org.hypertrace.core.serviceframework:platform-service-framework:0.1.73=compileClasspath,runtimeClasspath +org.hypertrace.core.serviceframework:service-framework-spi:0.1.73=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=runtimeClasspath org.latencyutils:LatencyUtils:2.0.3=runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor diff --git a/hypertrace-core-graphql-span-schema/gradle.lockfile b/hypertrace-core-graphql-span-schema/gradle.lockfile index 899c248e..7431c58f 100644 --- a/hypertrace-core-graphql-span-schema/gradle.lockfile +++ b/hypertrace-core-graphql-span-schema/gradle.lockfile @@ -53,12 +53,12 @@ org.apache.commons:commons-lang3:3.12.0=compileClasspath,runtimeClasspath org.apache.commons:commons-text:1.10.0=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.3=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.3=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.3=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.4=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor diff --git a/hypertrace-core-graphql-spi/gradle.lockfile b/hypertrace-core-graphql-spi/gradle.lockfile index b43f3d90..b62bf990 100644 --- a/hypertrace-core-graphql-spi/gradle.lockfile +++ b/hypertrace-core-graphql-spi/gradle.lockfile @@ -9,7 +9,7 @@ com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath diff --git a/hypertrace-core-graphql-trace-schema/gradle.lockfile b/hypertrace-core-graphql-trace-schema/gradle.lockfile index d6c48590..7a822e1f 100644 --- a/hypertrace-core-graphql-trace-schema/gradle.lockfile +++ b/hypertrace-core-graphql-trace-schema/gradle.lockfile @@ -50,12 +50,12 @@ javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.21=compileClasspath,runtimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.3=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.3=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.3=compileClasspath,runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.4=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=runtimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=compileClasspath,runtimeClasspath org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath org.projectlombok:lombok:1.18.28=annotationProcessor From 15da6ece8c20b10ef0f9875722cd77716b82eae7 Mon Sep 17 00:00:00 2001 From: Kishan Sairam Adapa Date: Fri, 7 Jun 2024 20:40:02 +0530 Subject: [PATCH 172/173] update catalog version (#183) --- .../gradle.lockfile | 8 +- .../gradle.lockfile | 114 ++++----- .../gradle.lockfile | 132 +++++----- .../gradle.lockfile | 136 +++++----- .../gradle.lockfile | 84 +++--- .../gradle.lockfile | 72 ++++-- .../gradle.lockfile | 133 +++++----- .../gradle.lockfile | 125 +++++---- hypertrace-core-graphql-impl/gradle.lockfile | 141 +++++----- .../gradle.lockfile | 140 +++++----- .../gradle.lockfile | 136 +++++----- .../gradle.lockfile | 128 +++++----- .../gradle.lockfile | 48 ++-- .../gradle.lockfile | 65 +++-- .../gradle.lockfile | 62 +++-- .../gradle.lockfile | 241 +++++++++--------- .../gradle.lockfile | 146 ++++++----- hypertrace-core-graphql-spi/gradle.lockfile | 24 +- .../gradle.lockfile | 121 +++++---- settings.gradle.kts | 4 +- 20 files changed, 1152 insertions(+), 908 deletions(-) diff --git a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile index 3dc17720..c8fcb9b3 100644 --- a/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope-constants/gradle.lockfile @@ -1,8 +1,8 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. -com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-attribute-scope/gradle.lockfile b/hypertrace-core-graphql-attribute-scope/gradle.lockfile index f7c27d3f..05764b1c 100644 --- a/hypertrace-core-graphql-attribute-scope/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-scope/gradle.lockfile @@ -1,61 +1,61 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. -aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath -com.auth0:java-jwt:4.4.0=runtimeClasspath -com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath -com.google.android:annotations:4.1.1.4=runtimeClasspath -com.google.api.grpc:proto-google-common-protos:2.22.0=runtimeClasspath -com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath -com.google.code.gson:gson:2.10.1=runtimeClasspath -com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath -com.google.errorprone:error_prone_annotations:2.20.0=runtimeClasspath -com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath -com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath -com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath -com.google.j2objc:j2objc-annotations:2.8=compileClasspath -com.google.protobuf:protobuf-java:3.24.1=runtimeClasspath -com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath -com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath -com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath -com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath -com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath -io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-api:1.60.0=runtimeClasspath -io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.60.0=runtimeClasspath -io.grpc:grpc-core:1.60.0=runtimeClasspath -io.grpc:grpc-inprocess:1.60.0=runtimeClasspath -io.grpc:grpc-protobuf-lite:1.60.0=runtimeClasspath -io.grpc:grpc-protobuf:1.60.0=runtimeClasspath -io.grpc:grpc-stub:1.60.0=runtimeClasspath -io.grpc:grpc-util:1.60.0=runtimeClasspath -io.netty:netty-bom:4.1.108.Final=runtimeClasspath -io.perfmark:perfmark-api:0.26.0=runtimeClasspath -io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath -jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath -javax.annotation:javax.annotation-api:1.3.2=runtimeClasspath -javax.inject:javax.inject:1=compileClasspath,runtimeClasspath -javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath -javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath -org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath -org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath -org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.4=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath -org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath -org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.auth0:java-jwt:4.4.0=runtimeClasspath,testRuntimeClasspath +com.auth0:jwks-rsa:0.22.0=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.android:annotations:4.1.1.4=runtimeClasspath,testRuntimeClasspath +com.google.api.grpc:proto-google-common-protos:2.22.0=runtimeClasspath,testRuntimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.code.gson:gson:2.10.1=runtimeClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,testCompileClasspath +com.google.errorprone:error_prone_annotations:2.20.0=runtimeClasspath,testRuntimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath,testCompileClasspath +com.google.protobuf:protobuf-java:3.24.1=runtimeClasspath,testRuntimeClasspath +com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-api:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-context:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-core:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-inprocess:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-protobuf-lite:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-protobuf:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-stub:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-util:1.60.0=runtimeClasspath,testRuntimeClasspath +io.netty:netty-bom:4.1.108.Final=runtimeClasspath,testRuntimeClasspath +io.perfmark:perfmark-api:0.26.0=runtimeClasspath,testRuntimeClasspath +io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.annotation:javax.annotation-api:1.3.2=runtimeClasspath,testRuntimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath,testRuntimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.4=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-attribute-store/gradle.lockfile b/hypertrace-core-graphql-attribute-store/gradle.lockfile index f40a1577..5b6ff987 100644 --- a/hypertrace-core-graphql-attribute-store/gradle.lockfile +++ b/hypertrace-core-graphql-attribute-store/gradle.lockfile @@ -1,61 +1,79 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. -aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath -com.auth0:java-jwt:4.4.0=runtimeClasspath -com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath -com.google.android:annotations:4.1.1.4=runtimeClasspath -com.google.api.grpc:proto-google-common-protos:2.22.0=compileClasspath,runtimeClasspath -com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath -com.google.code.gson:gson:2.10.1=runtimeClasspath -com.google.errorprone:error_prone_annotations:2.20.0=compileClasspath,runtimeClasspath -com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath -com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath -com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath -com.google.j2objc:j2objc-annotations:2.8=compileClasspath -com.google.protobuf:protobuf-java:3.24.1=compileClasspath,runtimeClasspath -com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath -com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath -com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath -com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath -com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath -io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-api:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.60.0=runtimeClasspath -io.grpc:grpc-core:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-inprocess:1.60.0=runtimeClasspath -io.grpc:grpc-protobuf-lite:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-protobuf:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-stub:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-util:1.60.0=runtimeClasspath -io.netty:netty-bom:4.1.108.Final=runtimeClasspath -io.perfmark:perfmark-api:0.26.0=runtimeClasspath -io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath -jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath -javax.annotation:javax.annotation-api:1.3.2=runtimeClasspath -javax.inject:javax.inject:1=compileClasspath,runtimeClasspath -javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath -javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath -org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath -org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=compileClasspath,runtimeClasspath -org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.4=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath -org.projectlombok:lombok:1.18.28=annotationProcessor -org.projectlombok:lombok:1.18.30=compileClasspath -org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath -org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.auth0:java-jwt:4.4.0=runtimeClasspath,testRuntimeClasspath +com.auth0:jwks-rsa:0.22.0=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.android:annotations:4.1.1.4=runtimeClasspath,testRuntimeClasspath +com.google.api.grpc:proto-google-common-protos:2.22.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.code.gson:gson:2.10.1=runtimeClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_annotations:2.20.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath,testCompileClasspath +com.google.protobuf:protobuf-java:3.24.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-api:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-context:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-core:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-inprocess:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-protobuf-lite:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-protobuf:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-stub:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-util:1.60.0=runtimeClasspath,testRuntimeClasspath +io.netty:netty-bom:4.1.108.Final=runtimeClasspath,testRuntimeClasspath +io.perfmark:perfmark-api:0.26.0=runtimeClasspath,testRuntimeClasspath +io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.annotation:javax.annotation-api:1.3.2=runtimeClasspath,testRuntimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy-agent:1.14.10=testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy:1.14.10=testCompileClasspath,testRuntimeClasspath +org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath,testRuntimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.4=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.junit.jupiter:junit-jupiter-api:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter-api:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter-engine:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter-params:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter-params:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter:5.10.1=testRuntimeClasspath +org.junit.platform:junit-platform-commons:1.10.0=testCompileClasspath +org.junit.platform:junit-platform-commons:1.10.1=testRuntimeClasspath +org.junit.platform:junit-platform-engine:1.10.1=testRuntimeClasspath +org.junit:junit-bom:5.10.0=testCompileClasspath +org.junit:junit-bom:5.10.1=testRuntimeClasspath +org.mockito:mockito-core:5.8.0=testCompileClasspath,testRuntimeClasspath +org.mockito:mockito-junit-jupiter:5.8.0=testCompileClasspath,testRuntimeClasspath +org.objenesis:objenesis:3.3=testRuntimeClasspath +org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testRuntimeClasspath +org.projectlombok:lombok:1.18.30=annotationProcessor,compileClasspath +org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath empty= diff --git a/hypertrace-core-graphql-common-schema/gradle.lockfile b/hypertrace-core-graphql-common-schema/gradle.lockfile index 0a39a2a1..62f4d26e 100644 --- a/hypertrace-core-graphql-common-schema/gradle.lockfile +++ b/hypertrace-core-graphql-common-schema/gradle.lockfile @@ -1,63 +1,81 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. -aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath -com.auth0:java-jwt:4.4.0=runtimeClasspath -com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath -com.google.android:annotations:4.1.1.4=runtimeClasspath -com.google.api.grpc:proto-google-common-protos:2.22.0=runtimeClasspath -com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath -com.google.code.gson:gson:2.10.1=runtimeClasspath -com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath -com.google.errorprone:error_prone_annotations:2.20.0=runtimeClasspath -com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath -com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath -com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath -com.google.j2objc:j2objc-annotations:2.8=compileClasspath -com.google.protobuf:protobuf-java:3.24.1=runtimeClasspath -com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath -com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath -com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath -com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath -com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath -io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-api:1.60.0=runtimeClasspath -io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.60.0=runtimeClasspath -io.grpc:grpc-core:1.60.0=runtimeClasspath -io.grpc:grpc-inprocess:1.60.0=runtimeClasspath -io.grpc:grpc-protobuf-lite:1.60.0=runtimeClasspath -io.grpc:grpc-protobuf:1.60.0=runtimeClasspath -io.grpc:grpc-stub:1.60.0=runtimeClasspath -io.grpc:grpc-util:1.60.0=runtimeClasspath -io.netty:netty-bom:4.1.108.Final=runtimeClasspath -io.perfmark:perfmark-api:0.26.0=runtimeClasspath -io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath -jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath -javax.annotation:javax.annotation-api:1.3.2=runtimeClasspath -javax.inject:javax.inject:1=compileClasspath,runtimeClasspath -javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath -javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath -org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath -org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath -org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.4=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath -org.projectlombok:lombok:1.18.28=annotationProcessor -org.projectlombok:lombok:1.18.30=compileClasspath -org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath -org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.auth0:java-jwt:4.4.0=runtimeClasspath,testRuntimeClasspath +com.auth0:jwks-rsa:0.22.0=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.android:annotations:4.1.1.4=runtimeClasspath,testRuntimeClasspath +com.google.api.grpc:proto-google-common-protos:2.22.0=runtimeClasspath,testRuntimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.code.gson:gson:2.10.1=runtimeClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,testCompileClasspath +com.google.errorprone:error_prone_annotations:2.20.0=runtimeClasspath,testRuntimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath,testCompileClasspath +com.google.protobuf:protobuf-java:3.24.1=runtimeClasspath,testRuntimeClasspath +com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-api:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-context:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-core:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-inprocess:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-protobuf-lite:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-protobuf:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-stub:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-util:1.60.0=runtimeClasspath,testRuntimeClasspath +io.netty:netty-bom:4.1.108.Final=runtimeClasspath,testRuntimeClasspath +io.perfmark:perfmark-api:0.26.0=runtimeClasspath,testRuntimeClasspath +io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.annotation:javax.annotation-api:1.3.2=runtimeClasspath,testRuntimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy-agent:1.14.10=testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy:1.14.10=testCompileClasspath,testRuntimeClasspath +org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath,testRuntimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.4=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.junit.jupiter:junit-jupiter-api:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter-api:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter-engine:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter-params:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter-params:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter:5.10.1=testRuntimeClasspath +org.junit.platform:junit-platform-commons:1.10.0=testCompileClasspath +org.junit.platform:junit-platform-commons:1.10.1=testRuntimeClasspath +org.junit.platform:junit-platform-engine:1.10.1=testRuntimeClasspath +org.junit:junit-bom:5.10.0=testCompileClasspath +org.junit:junit-bom:5.10.1=testRuntimeClasspath +org.mockito:mockito-core:5.8.0=testCompileClasspath,testRuntimeClasspath +org.mockito:mockito-junit-jupiter:5.8.0=testCompileClasspath,testRuntimeClasspath +org.objenesis:objenesis:3.3=testRuntimeClasspath +org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testRuntimeClasspath +org.projectlombok:lombok:1.18.30=annotationProcessor,compileClasspath +org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath empty= diff --git a/hypertrace-core-graphql-context/gradle.lockfile b/hypertrace-core-graphql-context/gradle.lockfile index 7ef69e89..8067edf1 100644 --- a/hypertrace-core-graphql-context/gradle.lockfile +++ b/hypertrace-core-graphql-context/gradle.lockfile @@ -1,37 +1,55 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. -aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath -com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath -com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath -com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath -com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath -com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath -com.google.j2objc:j2objc-annotations:2.8=compileClasspath -com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath -com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath -com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath -com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath -com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath -io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath -jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath -javax.inject:javax.inject:1=compileClasspath,runtimeClasspath -javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath -javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath -org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath -org.projectlombok:lombok:1.18.28=annotationProcessor -org.projectlombok:lombok:1.18.30=compileClasspath -org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath -org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath,testCompileClasspath +com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy-agent:1.14.10=testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy:1.14.10=testCompileClasspath,testRuntimeClasspath +org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.junit.jupiter:junit-jupiter-api:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter-api:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter-engine:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter-params:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter-params:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter:5.10.1=testRuntimeClasspath +org.junit.platform:junit-platform-commons:1.10.0=testCompileClasspath +org.junit.platform:junit-platform-commons:1.10.1=testRuntimeClasspath +org.junit.platform:junit-platform-engine:1.10.1=testRuntimeClasspath +org.junit:junit-bom:5.10.0=testCompileClasspath +org.junit:junit-bom:5.10.1=testRuntimeClasspath +org.mockito:mockito-core:5.8.0=testCompileClasspath,testRuntimeClasspath +org.mockito:mockito-junit-jupiter:5.8.0=testCompileClasspath,testRuntimeClasspath +org.objenesis:objenesis:3.3=testRuntimeClasspath +org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testRuntimeClasspath +org.projectlombok:lombok:1.18.30=annotationProcessor,compileClasspath +org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath empty= diff --git a/hypertrace-core-graphql-deserialization/gradle.lockfile b/hypertrace-core-graphql-deserialization/gradle.lockfile index 3f1013cd..7553779b 100644 --- a/hypertrace-core-graphql-deserialization/gradle.lockfile +++ b/hypertrace-core-graphql-deserialization/gradle.lockfile @@ -1,31 +1,49 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. -aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath -com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath -com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath -com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath -com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath -com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath -com.google.j2objc:j2objc-annotations:2.8=compileClasspath -com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath -com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath -jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath -javax.inject:javax.inject:1=compileClasspath,runtimeClasspath -org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath -org.projectlombok:lombok:1.18.28=annotationProcessor -org.projectlombok:lombok:1.18.30=compileClasspath -org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath -org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath,testCompileClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy-agent:1.14.10=testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy:1.14.10=testCompileClasspath,testRuntimeClasspath +org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.junit.jupiter:junit-jupiter-api:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter-api:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter-engine:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter-params:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter-params:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter:5.10.1=testRuntimeClasspath +org.junit.platform:junit-platform-commons:1.10.0=testCompileClasspath +org.junit.platform:junit-platform-commons:1.10.1=testRuntimeClasspath +org.junit.platform:junit-platform-engine:1.10.1=testRuntimeClasspath +org.junit:junit-bom:5.10.0=testCompileClasspath +org.junit:junit-bom:5.10.1=testRuntimeClasspath +org.mockito:mockito-core:5.8.0=testCompileClasspath,testRuntimeClasspath +org.mockito:mockito-junit-jupiter:5.8.0=testCompileClasspath,testRuntimeClasspath +org.objenesis:objenesis:3.3=testRuntimeClasspath +org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testRuntimeClasspath +org.projectlombok:lombok:1.18.30=annotationProcessor,compileClasspath +org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath empty= diff --git a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile index 5caf04db..0145e3bb 100644 --- a/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile +++ b/hypertrace-core-graphql-gateway-service-utils/gradle.lockfile @@ -1,61 +1,80 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. -aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath -com.auth0:java-jwt:4.4.0=runtimeClasspath -com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath -com.google.android:annotations:4.1.1.4=runtimeClasspath -com.google.api.grpc:proto-google-common-protos:2.22.0=compileClasspath,runtimeClasspath -com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath -com.google.code.gson:gson:2.10.1=runtimeClasspath -com.google.errorprone:error_prone_annotations:2.20.0=compileClasspath,runtimeClasspath -com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath -com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath -com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath -com.google.j2objc:j2objc-annotations:2.8=compileClasspath -com.google.protobuf:protobuf-java:3.24.1=compileClasspath,runtimeClasspath -com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath -com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath -com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath -com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath -com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath -io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-api:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.60.0=runtimeClasspath -io.grpc:grpc-core:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-inprocess:1.60.0=runtimeClasspath -io.grpc:grpc-protobuf-lite:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-protobuf:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-stub:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-util:1.60.0=runtimeClasspath -io.netty:netty-bom:4.1.108.Final=runtimeClasspath -io.perfmark:perfmark-api:0.26.0=runtimeClasspath -io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath -jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath -javax.annotation:javax.annotation-api:1.3.2=compileClasspath,runtimeClasspath -javax.inject:javax.inject:1=compileClasspath,runtimeClasspath -javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath -javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath -org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath -org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath -org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.4=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath -org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath -org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath -org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.auth0:java-jwt:4.4.0=runtimeClasspath,testRuntimeClasspath +com.auth0:jwks-rsa:0.22.0=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.android:annotations:4.1.1.4=runtimeClasspath,testRuntimeClasspath +com.google.api.grpc:proto-google-common-protos:2.22.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.code.gson:gson:2.10.1=runtimeClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_annotations:2.20.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath,testCompileClasspath +com.google.protobuf:protobuf-java:3.24.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-api:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-context:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-core:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-inprocess:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-protobuf-lite:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-protobuf:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-stub:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-util:1.60.0=runtimeClasspath,testRuntimeClasspath +io.netty:netty-bom:4.1.108.Final=runtimeClasspath,testRuntimeClasspath +io.perfmark:perfmark-api:0.26.0=runtimeClasspath,testRuntimeClasspath +io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.annotation:javax.annotation-api:1.3.2=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy-agent:1.14.10=testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy:1.14.10=testCompileClasspath,testRuntimeClasspath +org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath,testRuntimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.4=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.junit.jupiter:junit-jupiter-api:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter-api:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter-engine:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter-params:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter-params:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter:5.10.1=testRuntimeClasspath +org.junit.platform:junit-platform-commons:1.10.0=testCompileClasspath +org.junit.platform:junit-platform-commons:1.10.1=testRuntimeClasspath +org.junit.platform:junit-platform-engine:1.10.1=testRuntimeClasspath +org.junit:junit-bom:5.10.0=testCompileClasspath +org.junit:junit-bom:5.10.1=testRuntimeClasspath +org.mockito:mockito-core:5.8.0=testCompileClasspath,testRuntimeClasspath +org.mockito:mockito-junit-jupiter:5.8.0=testCompileClasspath,testRuntimeClasspath +org.objenesis:objenesis:3.3=testRuntimeClasspath +org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testRuntimeClasspath +org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-grpc-utils/gradle.lockfile b/hypertrace-core-graphql-grpc-utils/gradle.lockfile index 2c13cfbd..6f4b8ed5 100644 --- a/hypertrace-core-graphql-grpc-utils/gradle.lockfile +++ b/hypertrace-core-graphql-grpc-utils/gradle.lockfile @@ -1,51 +1,82 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. -aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath -com.auth0:java-jwt:4.4.0=runtimeClasspath -com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath -com.google.android:annotations:4.1.1.4=runtimeClasspath -com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath -com.google.code.gson:gson:2.10.1=runtimeClasspath -com.google.errorprone:error_prone_annotations:2.20.0=compileClasspath,runtimeClasspath -com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath -com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath -com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath -com.google.j2objc:j2objc-annotations:2.8=compileClasspath -com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath -com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath -com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath -com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath -com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath -io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-api:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-core:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-inprocess:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-stub:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-util:1.60.0=runtimeClasspath -io.netty:netty-bom:4.1.108.Final=compileClasspath,runtimeClasspath -io.perfmark:perfmark-api:0.26.0=runtimeClasspath -io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath -jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath -javax.inject:javax.inject:1=compileClasspath,runtimeClasspath -javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath -javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath -org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath -org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath -org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.auth0:java-jwt:4.4.0=runtimeClasspath,testRuntimeClasspath +com.auth0:jwks-rsa:0.22.0=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.android:annotations:4.1.1.4=runtimeClasspath,testRuntimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.code.gson:gson:2.10.1=runtimeClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_annotations:2.20.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath,testCompileClasspath +com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-api:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-context:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-core:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-inprocess:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-netty:1.60.0=testRuntimeClasspath +io.grpc:grpc-stub:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-util:1.60.0=runtimeClasspath,testRuntimeClasspath +io.netty:netty-bom:4.1.108.Final=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.netty:netty-buffer:4.1.108.Final=testRuntimeClasspath +io.netty:netty-codec-http2:4.1.108.Final=testRuntimeClasspath +io.netty:netty-codec-http:4.1.108.Final=testRuntimeClasspath +io.netty:netty-codec-socks:4.1.108.Final=testRuntimeClasspath +io.netty:netty-codec:4.1.108.Final=testRuntimeClasspath +io.netty:netty-common:4.1.108.Final=testRuntimeClasspath +io.netty:netty-handler-proxy:4.1.108.Final=testRuntimeClasspath +io.netty:netty-handler:4.1.108.Final=testRuntimeClasspath +io.netty:netty-resolver:4.1.108.Final=testRuntimeClasspath +io.netty:netty-transport-native-unix-common:4.1.108.Final=testRuntimeClasspath +io.netty:netty-transport:4.1.108.Final=testRuntimeClasspath +io.perfmark:perfmark-api:0.26.0=runtimeClasspath,testRuntimeClasspath +io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy-agent:1.14.10=testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy:1.14.10=testCompileClasspath,testRuntimeClasspath +org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath,testRuntimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.junit.jupiter:junit-jupiter-api:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter-api:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter-engine:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter-params:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter-params:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter:5.10.1=testRuntimeClasspath +org.junit.platform:junit-platform-commons:1.10.0=testCompileClasspath +org.junit.platform:junit-platform-commons:1.10.1=testRuntimeClasspath +org.junit.platform:junit-platform-engine:1.10.1=testRuntimeClasspath +org.junit:junit-bom:5.10.0=testCompileClasspath +org.junit:junit-bom:5.10.1=testRuntimeClasspath +org.mockito:mockito-core:5.8.0=testCompileClasspath,testRuntimeClasspath +org.mockito:mockito-junit-jupiter:5.8.0=testCompileClasspath,testRuntimeClasspath +org.objenesis:objenesis:3.3=testRuntimeClasspath +org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testRuntimeClasspath +org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-impl/gradle.lockfile b/hypertrace-core-graphql-impl/gradle.lockfile index 96099621..dc6b4860 100644 --- a/hypertrace-core-graphql-impl/gradle.lockfile +++ b/hypertrace-core-graphql-impl/gradle.lockfile @@ -1,65 +1,84 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. -aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath -com.auth0:java-jwt:4.4.0=runtimeClasspath -com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath -com.google.android:annotations:4.1.1.4=runtimeClasspath -com.google.api.grpc:proto-google-common-protos:2.22.0=compileClasspath,runtimeClasspath -com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath -com.google.code.gson:gson:2.10.1=runtimeClasspath -com.google.errorprone:error_prone_annotations:2.20.0=compileClasspath,runtimeClasspath -com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath -com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath -com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath -com.google.j2objc:j2objc-annotations:2.8=compileClasspath,runtimeClasspath -com.google.protobuf:protobuf-java-util:3.24.1=runtimeClasspath -com.google.protobuf:protobuf-java:3.24.1=compileClasspath,runtimeClasspath -com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath -com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath -com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath -com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath -com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath -io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-api:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-core:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-inprocess:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-protobuf-lite:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-protobuf:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-stub:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-util:1.60.0=runtimeClasspath -io.netty:netty-bom:4.1.108.Final=compileClasspath,runtimeClasspath -io.opentelemetry:opentelemetry-proto:1.1.0-alpha=runtimeClasspath -io.perfmark:perfmark-api:0.26.0=runtimeClasspath -io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath -jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath -javax.annotation:javax.annotation-api:1.3.2=compileClasspath,runtimeClasspath -javax.inject:javax.inject:1=compileClasspath,runtimeClasspath -javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath -javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath -org.apache.commons:commons-lang3:3.12.0=runtimeClasspath -org.apache.commons:commons-text:1.10.0=runtimeClasspath -org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath -org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath -org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.4=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath -org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath -org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath -org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.auth0:java-jwt:4.4.0=runtimeClasspath,testRuntimeClasspath +com.auth0:jwks-rsa:0.22.0=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.android:annotations:4.1.1.4=runtimeClasspath,testRuntimeClasspath +com.google.api.grpc:proto-google-common-protos:2.22.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.code.gson:gson:2.10.1=runtimeClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_annotations:2.20.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.protobuf:protobuf-java-util:3.24.1=runtimeClasspath,testRuntimeClasspath +com.google.protobuf:protobuf-java:3.24.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-api:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-context:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-core:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-inprocess:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-protobuf-lite:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-protobuf:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-stub:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-util:1.60.0=runtimeClasspath,testRuntimeClasspath +io.netty:netty-bom:4.1.108.Final=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.opentelemetry:opentelemetry-proto:1.1.0-alpha=runtimeClasspath,testRuntimeClasspath +io.perfmark:perfmark-api:0.26.0=runtimeClasspath,testRuntimeClasspath +io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.annotation:javax.annotation-api:1.3.2=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy-agent:1.14.10=testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy:1.14.10=testCompileClasspath,testRuntimeClasspath +org.apache.commons:commons-lang3:3.12.0=runtimeClasspath,testRuntimeClasspath +org.apache.commons:commons-text:1.10.0=runtimeClasspath,testRuntimeClasspath +org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath,testRuntimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.4=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.junit.jupiter:junit-jupiter-api:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter-api:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter-engine:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter-params:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter-params:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter:5.10.1=testRuntimeClasspath +org.junit.platform:junit-platform-commons:1.10.0=testCompileClasspath +org.junit.platform:junit-platform-commons:1.10.1=testRuntimeClasspath +org.junit.platform:junit-platform-engine:1.10.1=testRuntimeClasspath +org.junit:junit-bom:5.10.0=testCompileClasspath +org.junit:junit-bom:5.10.1=testRuntimeClasspath +org.mockito:mockito-core:5.8.0=testCompileClasspath,testRuntimeClasspath +org.mockito:mockito-junit-jupiter:5.8.0=testCompileClasspath,testRuntimeClasspath +org.objenesis:objenesis:3.3=testRuntimeClasspath +org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testRuntimeClasspath +org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-log-event-schema/gradle.lockfile b/hypertrace-core-graphql-log-event-schema/gradle.lockfile index 7a822e1f..8621ec44 100644 --- a/hypertrace-core-graphql-log-event-schema/gradle.lockfile +++ b/hypertrace-core-graphql-log-event-schema/gradle.lockfile @@ -1,65 +1,83 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. -aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath -com.auth0:java-jwt:4.4.0=runtimeClasspath -com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath -com.google.android:annotations:4.1.1.4=runtimeClasspath -com.google.api.grpc:proto-google-common-protos:2.22.0=compileClasspath,runtimeClasspath -com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath -com.google.code.gson:gson:2.10.1=runtimeClasspath -com.google.code.gson:gson:2.8.9=compileClasspath -com.google.errorprone:error_prone_annotations:2.20.0=compileClasspath,runtimeClasspath -com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath -com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath -com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath -com.google.j2objc:j2objc-annotations:2.8=compileClasspath,runtimeClasspath -com.google.protobuf:protobuf-java-util:3.24.1=compileClasspath,runtimeClasspath -com.google.protobuf:protobuf-java:3.24.1=compileClasspath,runtimeClasspath -com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath -com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath -com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath -com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath -com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath -io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-api:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.60.0=runtimeClasspath -io.grpc:grpc-core:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-inprocess:1.60.0=runtimeClasspath -io.grpc:grpc-protobuf-lite:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-protobuf:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-stub:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-util:1.60.0=runtimeClasspath -io.netty:netty-bom:4.1.108.Final=runtimeClasspath -io.perfmark:perfmark-api:0.26.0=runtimeClasspath -io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath -jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath -javax.annotation:javax.annotation-api:1.3.2=compileClasspath,runtimeClasspath -javax.inject:javax.inject:1=compileClasspath,runtimeClasspath -javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath -javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath -org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath -org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath -org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.4=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath -org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath -org.projectlombok:lombok:1.18.28=annotationProcessor -org.projectlombok:lombok:1.18.30=compileClasspath -org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath -org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.auth0:java-jwt:4.4.0=runtimeClasspath,testRuntimeClasspath +com.auth0:jwks-rsa:0.22.0=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.android:annotations:4.1.1.4=runtimeClasspath,testRuntimeClasspath +com.google.api.grpc:proto-google-common-protos:2.22.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.code.gson:gson:2.10.1=runtimeClasspath,testRuntimeClasspath +com.google.code.gson:gson:2.8.9=compileClasspath,testCompileClasspath +com.google.errorprone:error_prone_annotations:2.20.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.protobuf:protobuf-java-util:3.24.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.protobuf:protobuf-java:3.24.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-api:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-context:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-core:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-inprocess:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-protobuf-lite:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-protobuf:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-stub:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-util:1.60.0=runtimeClasspath,testRuntimeClasspath +io.netty:netty-bom:4.1.108.Final=runtimeClasspath,testRuntimeClasspath +io.perfmark:perfmark-api:0.26.0=runtimeClasspath,testRuntimeClasspath +io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.annotation:javax.annotation-api:1.3.2=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy-agent:1.14.10=testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy:1.14.10=testCompileClasspath,testRuntimeClasspath +org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath,testRuntimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.4=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.junit.jupiter:junit-jupiter-api:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter-api:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter-engine:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter-params:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter-params:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter:5.10.1=testRuntimeClasspath +org.junit.platform:junit-platform-commons:1.10.0=testCompileClasspath +org.junit.platform:junit-platform-commons:1.10.1=testRuntimeClasspath +org.junit.platform:junit-platform-engine:1.10.1=testRuntimeClasspath +org.junit:junit-bom:5.10.0=testCompileClasspath +org.junit:junit-bom:5.10.1=testRuntimeClasspath +org.mockito:mockito-core:5.8.0=testCompileClasspath,testRuntimeClasspath +org.mockito:mockito-junit-jupiter:5.8.0=testCompileClasspath,testRuntimeClasspath +org.objenesis:objenesis:3.3=testRuntimeClasspath +org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testRuntimeClasspath +org.projectlombok:lombok:1.18.30=annotationProcessor,compileClasspath,testCompileClasspath +org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath empty= diff --git a/hypertrace-core-graphql-metadata-schema/gradle.lockfile b/hypertrace-core-graphql-metadata-schema/gradle.lockfile index 0a39a2a1..62f4d26e 100644 --- a/hypertrace-core-graphql-metadata-schema/gradle.lockfile +++ b/hypertrace-core-graphql-metadata-schema/gradle.lockfile @@ -1,63 +1,81 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. -aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath -com.auth0:java-jwt:4.4.0=runtimeClasspath -com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath -com.google.android:annotations:4.1.1.4=runtimeClasspath -com.google.api.grpc:proto-google-common-protos:2.22.0=runtimeClasspath -com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath -com.google.code.gson:gson:2.10.1=runtimeClasspath -com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath -com.google.errorprone:error_prone_annotations:2.20.0=runtimeClasspath -com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath -com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath -com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath -com.google.j2objc:j2objc-annotations:2.8=compileClasspath -com.google.protobuf:protobuf-java:3.24.1=runtimeClasspath -com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath -com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath -com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath -com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath -com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath -io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-api:1.60.0=runtimeClasspath -io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.60.0=runtimeClasspath -io.grpc:grpc-core:1.60.0=runtimeClasspath -io.grpc:grpc-inprocess:1.60.0=runtimeClasspath -io.grpc:grpc-protobuf-lite:1.60.0=runtimeClasspath -io.grpc:grpc-protobuf:1.60.0=runtimeClasspath -io.grpc:grpc-stub:1.60.0=runtimeClasspath -io.grpc:grpc-util:1.60.0=runtimeClasspath -io.netty:netty-bom:4.1.108.Final=runtimeClasspath -io.perfmark:perfmark-api:0.26.0=runtimeClasspath -io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath -jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath -javax.annotation:javax.annotation-api:1.3.2=runtimeClasspath -javax.inject:javax.inject:1=compileClasspath,runtimeClasspath -javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath -javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath -org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath -org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath -org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.4=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath -org.projectlombok:lombok:1.18.28=annotationProcessor -org.projectlombok:lombok:1.18.30=compileClasspath -org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath -org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.auth0:java-jwt:4.4.0=runtimeClasspath,testRuntimeClasspath +com.auth0:jwks-rsa:0.22.0=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.android:annotations:4.1.1.4=runtimeClasspath,testRuntimeClasspath +com.google.api.grpc:proto-google-common-protos:2.22.0=runtimeClasspath,testRuntimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.code.gson:gson:2.10.1=runtimeClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,testCompileClasspath +com.google.errorprone:error_prone_annotations:2.20.0=runtimeClasspath,testRuntimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath,testCompileClasspath +com.google.protobuf:protobuf-java:3.24.1=runtimeClasspath,testRuntimeClasspath +com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-api:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-context:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-core:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-inprocess:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-protobuf-lite:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-protobuf:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-stub:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-util:1.60.0=runtimeClasspath,testRuntimeClasspath +io.netty:netty-bom:4.1.108.Final=runtimeClasspath,testRuntimeClasspath +io.perfmark:perfmark-api:0.26.0=runtimeClasspath,testRuntimeClasspath +io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.annotation:javax.annotation-api:1.3.2=runtimeClasspath,testRuntimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy-agent:1.14.10=testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy:1.14.10=testCompileClasspath,testRuntimeClasspath +org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath,testRuntimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.4=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.junit.jupiter:junit-jupiter-api:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter-api:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter-engine:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter-params:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter-params:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter:5.10.1=testRuntimeClasspath +org.junit.platform:junit-platform-commons:1.10.0=testCompileClasspath +org.junit.platform:junit-platform-commons:1.10.1=testRuntimeClasspath +org.junit.platform:junit-platform-engine:1.10.1=testRuntimeClasspath +org.junit:junit-bom:5.10.0=testCompileClasspath +org.junit:junit-bom:5.10.1=testRuntimeClasspath +org.mockito:mockito-core:5.8.0=testCompileClasspath,testRuntimeClasspath +org.mockito:mockito-junit-jupiter:5.8.0=testCompileClasspath,testRuntimeClasspath +org.objenesis:objenesis:3.3=testRuntimeClasspath +org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testRuntimeClasspath +org.projectlombok:lombok:1.18.30=annotationProcessor,compileClasspath +org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath empty= diff --git a/hypertrace-core-graphql-request-transformation/gradle.lockfile b/hypertrace-core-graphql-request-transformation/gradle.lockfile index f7c27d3f..21625be4 100644 --- a/hypertrace-core-graphql-request-transformation/gradle.lockfile +++ b/hypertrace-core-graphql-request-transformation/gradle.lockfile @@ -1,61 +1,75 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. -aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath -com.auth0:java-jwt:4.4.0=runtimeClasspath -com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath -com.google.android:annotations:4.1.1.4=runtimeClasspath -com.google.api.grpc:proto-google-common-protos:2.22.0=runtimeClasspath -com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath -com.google.code.gson:gson:2.10.1=runtimeClasspath -com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath -com.google.errorprone:error_prone_annotations:2.20.0=runtimeClasspath -com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath -com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath -com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath -com.google.j2objc:j2objc-annotations:2.8=compileClasspath -com.google.protobuf:protobuf-java:3.24.1=runtimeClasspath -com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath -com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath -com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath -com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath -com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath -io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-api:1.60.0=runtimeClasspath -io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.60.0=runtimeClasspath -io.grpc:grpc-core:1.60.0=runtimeClasspath -io.grpc:grpc-inprocess:1.60.0=runtimeClasspath -io.grpc:grpc-protobuf-lite:1.60.0=runtimeClasspath -io.grpc:grpc-protobuf:1.60.0=runtimeClasspath -io.grpc:grpc-stub:1.60.0=runtimeClasspath -io.grpc:grpc-util:1.60.0=runtimeClasspath -io.netty:netty-bom:4.1.108.Final=runtimeClasspath -io.perfmark:perfmark-api:0.26.0=runtimeClasspath -io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath -jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath -javax.annotation:javax.annotation-api:1.3.2=runtimeClasspath -javax.inject:javax.inject:1=compileClasspath,runtimeClasspath -javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath -javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath -org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath -org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath -org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.4=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath -org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath -org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.auth0:java-jwt:4.4.0=runtimeClasspath,testRuntimeClasspath +com.auth0:jwks-rsa:0.22.0=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.android:annotations:4.1.1.4=runtimeClasspath,testRuntimeClasspath +com.google.api.grpc:proto-google-common-protos:2.22.0=runtimeClasspath,testRuntimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.code.gson:gson:2.10.1=runtimeClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,testCompileClasspath +com.google.errorprone:error_prone_annotations:2.20.0=runtimeClasspath,testRuntimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath,testCompileClasspath +com.google.protobuf:protobuf-java:3.24.1=runtimeClasspath,testRuntimeClasspath +com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-api:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-context:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-core:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-inprocess:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-protobuf-lite:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-protobuf:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-stub:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-util:1.60.0=runtimeClasspath,testRuntimeClasspath +io.netty:netty-bom:4.1.108.Final=runtimeClasspath,testRuntimeClasspath +io.perfmark:perfmark-api:0.26.0=runtimeClasspath,testRuntimeClasspath +io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.annotation:javax.annotation-api:1.3.2=runtimeClasspath,testRuntimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy-agent:1.14.10=testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy:1.14.10=testCompileClasspath,testRuntimeClasspath +org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath,testRuntimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.4=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.junit.jupiter:junit-jupiter-api:5.10.0=testCompileClasspath,testRuntimeClasspath +org.junit.jupiter:junit-jupiter-engine:5.10.0=testRuntimeClasspath +org.junit.jupiter:junit-jupiter-params:5.10.0=testCompileClasspath,testRuntimeClasspath +org.junit.jupiter:junit-jupiter:5.10.0=testCompileClasspath,testRuntimeClasspath +org.junit.platform:junit-platform-commons:1.10.0=testCompileClasspath,testRuntimeClasspath +org.junit.platform:junit-platform-engine:1.10.0=testRuntimeClasspath +org.junit:junit-bom:5.10.0=testCompileClasspath,testRuntimeClasspath +org.mockito:mockito-core:5.8.0=testCompileClasspath,testRuntimeClasspath +org.objenesis:objenesis:3.3=testRuntimeClasspath +org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testRuntimeClasspath +org.projectlombok:lombok:1.18.30=testCompileClasspath +org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-rx-utils/gradle.lockfile b/hypertrace-core-graphql-rx-utils/gradle.lockfile index 33c23e47..4be40ba5 100644 --- a/hypertrace-core-graphql-rx-utils/gradle.lockfile +++ b/hypertrace-core-graphql-rx-utils/gradle.lockfile @@ -1,28 +1,28 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. -aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath -com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath -com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath -com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath -com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath -com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath -com.google.j2objc:j2objc-annotations:2.8=compileClasspath -com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath -com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath -com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath -io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath -io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath -jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath -javax.inject:javax.inject:1=compileClasspath,runtimeClasspath -javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath -org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath -org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath,testCompileClasspath +com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-schema-registry/gradle.lockfile b/hypertrace-core-graphql-schema-registry/gradle.lockfile index 4a773ff1..50f0b4b8 100644 --- a/hypertrace-core-graphql-schema-registry/gradle.lockfile +++ b/hypertrace-core-graphql-schema-registry/gradle.lockfile @@ -1,27 +1,46 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. -aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath -com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath -com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath -com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath -com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath -com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath -com.google.j2objc:j2objc-annotations:2.8=compileClasspath -com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath -com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath -com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath -io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath -jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath -javax.inject:javax.inject:1=compileClasspath,runtimeClasspath -javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath -org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath -org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath,testCompileClasspath +com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy-agent:1.14.10=testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy:1.14.10=testCompileClasspath,testRuntimeClasspath +org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.junit.jupiter:junit-jupiter-api:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter-api:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter-engine:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter-params:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter-params:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter:5.10.1=testRuntimeClasspath +org.junit.platform:junit-platform-commons:1.10.0=testCompileClasspath +org.junit.platform:junit-platform-commons:1.10.1=testRuntimeClasspath +org.junit.platform:junit-platform-engine:1.10.1=testRuntimeClasspath +org.junit:junit-bom:5.10.0=testCompileClasspath +org.junit:junit-bom:5.10.1=testRuntimeClasspath +org.mockito:mockito-core:5.8.0=testCompileClasspath,testRuntimeClasspath +org.mockito:mockito-junit-jupiter:5.8.0=testCompileClasspath,testRuntimeClasspath +org.objenesis:objenesis:3.3=testRuntimeClasspath +org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testRuntimeClasspath +org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-schema-utils/gradle.lockfile b/hypertrace-core-graphql-schema-utils/gradle.lockfile index f76e73fe..32cda945 100644 --- a/hypertrace-core-graphql-schema-utils/gradle.lockfile +++ b/hypertrace-core-graphql-schema-utils/gradle.lockfile @@ -1,26 +1,44 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. -aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath -com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath -com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath -com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath -com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath -com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath -com.google.j2objc:j2objc-annotations:2.8=compileClasspath -com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath -com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath -jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath -javax.inject:javax.inject:1=compileClasspath,runtimeClasspath -org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath -org.projectlombok:lombok:1.18.28=annotationProcessor -org.projectlombok:lombok:1.18.30=compileClasspath -org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath -org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_annotations:2.18.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath,testCompileClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy-agent:1.14.10=testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy:1.14.10=testCompileClasspath,testRuntimeClasspath +org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.junit.jupiter:junit-jupiter-api:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter-api:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter-engine:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter-params:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter-params:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter:5.10.1=testRuntimeClasspath +org.junit.platform:junit-platform-commons:1.10.0=testCompileClasspath +org.junit.platform:junit-platform-commons:1.10.1=testRuntimeClasspath +org.junit.platform:junit-platform-engine:1.10.1=testRuntimeClasspath +org.junit:junit-bom:5.10.0=testCompileClasspath +org.junit:junit-bom:5.10.1=testRuntimeClasspath +org.mockito:mockito-core:5.8.0=testCompileClasspath,testRuntimeClasspath +org.mockito:mockito-junit-jupiter:5.8.0=testCompileClasspath,testRuntimeClasspath +org.objenesis:objenesis:3.3=testRuntimeClasspath +org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testRuntimeClasspath +org.projectlombok:lombok:1.18.30=annotationProcessor,compileClasspath +org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath empty= diff --git a/hypertrace-core-graphql-service/gradle.lockfile b/hypertrace-core-graphql-service/gradle.lockfile index 09c8675b..832327cb 100644 --- a/hypertrace-core-graphql-service/gradle.lockfile +++ b/hypertrace-core-graphql-service/gradle.lockfile @@ -1,125 +1,124 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. -aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath -com.auth0:java-jwt:4.4.0=runtimeClasspath -com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath -com.google.android:annotations:4.1.1.4=runtimeClasspath -com.google.api.grpc:proto-google-common-protos:2.22.0=runtimeClasspath -com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath -com.google.code.gson:gson:2.10.1=runtimeClasspath -com.google.errorprone:error_prone_annotations:2.20.0=compileClasspath,runtimeClasspath -com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath -com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath -com.google.inject.extensions:guice-servlet:5.1.0=runtimeClasspath -com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath -com.google.j2objc:j2objc-annotations:2.8=compileClasspath,runtimeClasspath -com.google.protobuf:protobuf-java-util:3.24.1=runtimeClasspath -com.google.protobuf:protobuf-java:3.24.1=runtimeClasspath -com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath -com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath -com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath -com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath -com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath -com.helger:profiler:1.1.1=runtimeClasspath -com.typesafe:config:1.4.2=compileClasspath,runtimeClasspath -commons-codec:commons-codec:1.15=runtimeClasspath -commons-logging:commons-logging:1.2=runtimeClasspath -io.dropwizard.metrics:metrics-core:4.2.16=runtimeClasspath -io.dropwizard.metrics:metrics-healthchecks:4.2.16=runtimeClasspath -io.dropwizard.metrics:metrics-json:4.2.16=runtimeClasspath -io.dropwizard.metrics:metrics-jvm:4.2.16=runtimeClasspath -io.dropwizard.metrics:metrics-servlets:4.2.16=runtimeClasspath -io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.github.mweirauch:micrometer-jvm-extras:0.2.2=runtimeClasspath -io.grpc:grpc-api:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-core:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-inprocess:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-netty:1.60.0=runtimeClasspath -io.grpc:grpc-protobuf-lite:1.60.0=runtimeClasspath -io.grpc:grpc-protobuf:1.60.0=runtimeClasspath -io.grpc:grpc-stub:1.60.0=runtimeClasspath -io.grpc:grpc-util:1.60.0=runtimeClasspath -io.micrometer:micrometer-commons:1.10.2=runtimeClasspath -io.micrometer:micrometer-core:1.10.2=runtimeClasspath -io.micrometer:micrometer-observation:1.10.2=runtimeClasspath -io.micrometer:micrometer-registry-prometheus:1.10.2=runtimeClasspath -io.netty:netty-bom:4.1.108.Final=compileClasspath,runtimeClasspath -io.netty:netty-buffer:4.1.108.Final=runtimeClasspath -io.netty:netty-codec-http2:4.1.108.Final=runtimeClasspath -io.netty:netty-codec-http:4.1.108.Final=runtimeClasspath -io.netty:netty-codec-socks:4.1.108.Final=runtimeClasspath -io.netty:netty-codec:4.1.108.Final=runtimeClasspath -io.netty:netty-common:4.1.108.Final=runtimeClasspath -io.netty:netty-handler-proxy:4.1.108.Final=runtimeClasspath -io.netty:netty-handler:4.1.108.Final=runtimeClasspath -io.netty:netty-resolver:4.1.108.Final=runtimeClasspath -io.netty:netty-transport-native-unix-common:4.1.108.Final=runtimeClasspath -io.netty:netty-transport:4.1.108.Final=runtimeClasspath -io.opentelemetry:opentelemetry-proto:1.1.0-alpha=runtimeClasspath -io.perfmark:perfmark-api:0.26.0=runtimeClasspath -io.prometheus:simpleclient:0.16.0=runtimeClasspath -io.prometheus:simpleclient_common:0.16.0=runtimeClasspath -io.prometheus:simpleclient_dropwizard:0.12.0=runtimeClasspath -io.prometheus:simpleclient_pushgateway:0.12.0=runtimeClasspath -io.prometheus:simpleclient_servlet:0.12.0=runtimeClasspath -io.prometheus:simpleclient_servlet_common:0.12.0=runtimeClasspath -io.prometheus:simpleclient_tracer_common:0.16.0=runtimeClasspath -io.prometheus:simpleclient_tracer_otel:0.16.0=runtimeClasspath -io.prometheus:simpleclient_tracer_otel_agent:0.16.0=runtimeClasspath -io.reactivex.rxjava3:rxjava:3.1.7=runtimeClasspath -jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath -javax.annotation:javax.annotation-api:1.3.2=runtimeClasspath -javax.inject:javax.inject:1=compileClasspath,runtimeClasspath -javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath -javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath -javax.xml.bind:jaxb-api:2.3.0=runtimeClasspath -org.apache.commons:commons-lang3:3.12.0=runtimeClasspath -org.apache.commons:commons-text:1.10.0=runtimeClasspath -org.apache.httpcomponents:httpclient:4.5.13=runtimeClasspath -org.apache.httpcomponents:httpcore:4.4.13=runtimeClasspath -org.apache.logging.log4j:log4j-api:2.20.0=runtimeClasspath -org.apache.logging.log4j:log4j-core:2.20.0=runtimeClasspath -org.apache.logging.log4j:log4j-slf4j2-impl:2.20.0=runtimeClasspath -org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.eclipse.jetty:jetty-continuation:9.4.53.v20231009=runtimeClasspath -org.eclipse.jetty:jetty-http:9.4.53.v20231009=runtimeClasspath -org.eclipse.jetty:jetty-io:9.4.53.v20231009=runtimeClasspath -org.eclipse.jetty:jetty-security:9.4.53.v20231009=runtimeClasspath -org.eclipse.jetty:jetty-server:9.4.53.v20231009=runtimeClasspath -org.eclipse.jetty:jetty-servlet:9.4.53.v20231009=runtimeClasspath -org.eclipse.jetty:jetty-servlets:9.4.53.v20231009=runtimeClasspath -org.eclipse.jetty:jetty-util-ajax:9.4.53.v20231009=runtimeClasspath -org.eclipse.jetty:jetty-util:9.4.53.v20231009=runtimeClasspath -org.hdrhistogram:HdrHistogram:2.1.12=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath -org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath -org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.4=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=compileClasspath,runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath -org.hypertrace.core.serviceframework:platform-http-service-framework:0.1.73=compileClasspath,runtimeClasspath -org.hypertrace.core.serviceframework:platform-metrics:0.1.73=runtimeClasspath -org.hypertrace.core.serviceframework:platform-service-framework:0.1.73=compileClasspath,runtimeClasspath -org.hypertrace.core.serviceframework:service-framework-spi:0.1.73=compileClasspath,runtimeClasspath -org.hypertrace.gateway.service:gateway-service-api:0.3.9=runtimeClasspath -org.latencyutils:LatencyUtils:2.0.3=runtimeClasspath -org.projectlombok:lombok:1.18.28=annotationProcessor -org.projectlombok:lombok:1.18.30=compileClasspath -org.reactivestreams:reactive-streams:1.0.3=compileClasspath -org.reactivestreams:reactive-streams:1.0.4=runtimeClasspath -org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.auth0:java-jwt:4.4.0=runtimeClasspath,testRuntimeClasspath +com.auth0:jwks-rsa:0.22.0=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.android:annotations:4.1.1.4=runtimeClasspath,testRuntimeClasspath +com.google.api.grpc:proto-google-common-protos:2.22.0=runtimeClasspath,testRuntimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.code.gson:gson:2.10.1=runtimeClasspath,testRuntimeClasspath +com.google.errorprone:error_prone_annotations:2.20.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.inject.extensions:guice-servlet:5.1.0=runtimeClasspath,testRuntimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.protobuf:protobuf-java-util:3.24.1=runtimeClasspath,testRuntimeClasspath +com.google.protobuf:protobuf-java:3.24.1=runtimeClasspath,testRuntimeClasspath +com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.helger:profiler:1.1.1=runtimeClasspath,testRuntimeClasspath +com.typesafe:config:1.4.2=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +commons-codec:commons-codec:1.15=runtimeClasspath,testRuntimeClasspath +commons-logging:commons-logging:1.2=runtimeClasspath,testRuntimeClasspath +io.dropwizard.metrics:metrics-core:4.2.16=runtimeClasspath,testRuntimeClasspath +io.dropwizard.metrics:metrics-healthchecks:4.2.16=runtimeClasspath,testRuntimeClasspath +io.dropwizard.metrics:metrics-json:4.2.16=runtimeClasspath,testRuntimeClasspath +io.dropwizard.metrics:metrics-jvm:4.2.16=runtimeClasspath,testRuntimeClasspath +io.dropwizard.metrics:metrics-servlets:4.2.16=runtimeClasspath,testRuntimeClasspath +io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.github.mweirauch:micrometer-jvm-extras:0.2.2=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-api:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-context:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-core:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-inprocess:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-netty:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-protobuf-lite:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-protobuf:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-stub:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-util:1.60.0=runtimeClasspath,testRuntimeClasspath +io.micrometer:micrometer-commons:1.10.2=runtimeClasspath,testRuntimeClasspath +io.micrometer:micrometer-core:1.10.2=runtimeClasspath,testRuntimeClasspath +io.micrometer:micrometer-observation:1.10.2=runtimeClasspath,testRuntimeClasspath +io.micrometer:micrometer-registry-prometheus:1.10.2=runtimeClasspath,testRuntimeClasspath +io.netty:netty-bom:4.1.108.Final=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.netty:netty-buffer:4.1.108.Final=runtimeClasspath,testRuntimeClasspath +io.netty:netty-codec-http2:4.1.108.Final=runtimeClasspath,testRuntimeClasspath +io.netty:netty-codec-http:4.1.108.Final=runtimeClasspath,testRuntimeClasspath +io.netty:netty-codec-socks:4.1.108.Final=runtimeClasspath,testRuntimeClasspath +io.netty:netty-codec:4.1.108.Final=runtimeClasspath,testRuntimeClasspath +io.netty:netty-common:4.1.108.Final=runtimeClasspath,testRuntimeClasspath +io.netty:netty-handler-proxy:4.1.108.Final=runtimeClasspath,testRuntimeClasspath +io.netty:netty-handler:4.1.108.Final=runtimeClasspath,testRuntimeClasspath +io.netty:netty-resolver:4.1.108.Final=runtimeClasspath,testRuntimeClasspath +io.netty:netty-transport-native-unix-common:4.1.108.Final=runtimeClasspath,testRuntimeClasspath +io.netty:netty-transport:4.1.108.Final=runtimeClasspath,testRuntimeClasspath +io.opentelemetry:opentelemetry-proto:1.1.0-alpha=runtimeClasspath,testRuntimeClasspath +io.perfmark:perfmark-api:0.26.0=runtimeClasspath,testRuntimeClasspath +io.prometheus:simpleclient:0.16.0=runtimeClasspath,testRuntimeClasspath +io.prometheus:simpleclient_common:0.16.0=runtimeClasspath,testRuntimeClasspath +io.prometheus:simpleclient_dropwizard:0.12.0=runtimeClasspath,testRuntimeClasspath +io.prometheus:simpleclient_pushgateway:0.12.0=runtimeClasspath,testRuntimeClasspath +io.prometheus:simpleclient_servlet:0.12.0=runtimeClasspath,testRuntimeClasspath +io.prometheus:simpleclient_servlet_common:0.12.0=runtimeClasspath,testRuntimeClasspath +io.prometheus:simpleclient_tracer_common:0.16.0=runtimeClasspath,testRuntimeClasspath +io.prometheus:simpleclient_tracer_otel:0.16.0=runtimeClasspath,testRuntimeClasspath +io.prometheus:simpleclient_tracer_otel_agent:0.16.0=runtimeClasspath,testRuntimeClasspath +io.reactivex.rxjava3:rxjava:3.1.7=runtimeClasspath,testRuntimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.annotation:javax.annotation-api:1.3.2=runtimeClasspath,testRuntimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.xml.bind:jaxb-api:2.3.0=runtimeClasspath,testRuntimeClasspath +org.apache.commons:commons-lang3:3.12.0=runtimeClasspath,testRuntimeClasspath +org.apache.commons:commons-text:1.10.0=runtimeClasspath,testRuntimeClasspath +org.apache.httpcomponents:httpclient:4.5.13=runtimeClasspath,testRuntimeClasspath +org.apache.httpcomponents:httpcore:4.4.13=runtimeClasspath,testRuntimeClasspath +org.apache.logging.log4j:log4j-api:2.20.0=runtimeClasspath,testRuntimeClasspath +org.apache.logging.log4j:log4j-core:2.20.0=runtimeClasspath,testRuntimeClasspath +org.apache.logging.log4j:log4j-slf4j2-impl:2.20.0=runtimeClasspath,testRuntimeClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath,testRuntimeClasspath +org.eclipse.jetty:jetty-continuation:9.4.53.v20231009=runtimeClasspath,testRuntimeClasspath +org.eclipse.jetty:jetty-http:9.4.53.v20231009=runtimeClasspath,testRuntimeClasspath +org.eclipse.jetty:jetty-io:9.4.53.v20231009=runtimeClasspath,testRuntimeClasspath +org.eclipse.jetty:jetty-security:9.4.53.v20231009=runtimeClasspath,testRuntimeClasspath +org.eclipse.jetty:jetty-server:9.4.53.v20231009=runtimeClasspath,testRuntimeClasspath +org.eclipse.jetty:jetty-servlet:9.4.53.v20231009=runtimeClasspath,testRuntimeClasspath +org.eclipse.jetty:jetty-servlets:9.4.53.v20231009=runtimeClasspath,testRuntimeClasspath +org.eclipse.jetty:jetty-util-ajax:9.4.53.v20231009=runtimeClasspath,testRuntimeClasspath +org.eclipse.jetty:jetty-util:9.4.53.v20231009=runtimeClasspath,testRuntimeClasspath +org.hdrhistogram:HdrHistogram:2.1.12=runtimeClasspath,testRuntimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.4=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.serviceframework:platform-http-service-framework:0.1.73=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.serviceframework:platform-metrics:0.1.73=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.serviceframework:platform-service-framework:0.1.73=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.serviceframework:service-framework-spi:0.1.73=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.gateway.service:gateway-service-api:0.3.9=runtimeClasspath,testRuntimeClasspath +org.latencyutils:LatencyUtils:2.0.3=runtimeClasspath,testRuntimeClasspath +org.projectlombok:lombok:1.18.30=annotationProcessor,compileClasspath +org.reactivestreams:reactive-streams:1.0.3=compileClasspath,testCompileClasspath +org.reactivestreams:reactive-streams:1.0.4=runtimeClasspath,testRuntimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath empty= diff --git a/hypertrace-core-graphql-span-schema/gradle.lockfile b/hypertrace-core-graphql-span-schema/gradle.lockfile index 7431c58f..a6957448 100644 --- a/hypertrace-core-graphql-span-schema/gradle.lockfile +++ b/hypertrace-core-graphql-span-schema/gradle.lockfile @@ -1,68 +1,86 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. -aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath -com.auth0:java-jwt:4.4.0=runtimeClasspath -com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath -com.google.android:annotations:4.1.1.4=runtimeClasspath -com.google.api.grpc:proto-google-common-protos:2.22.0=compileClasspath,runtimeClasspath -com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath -com.google.code.gson:gson:2.10.1=runtimeClasspath -com.google.code.gson:gson:2.8.9=compileClasspath -com.google.errorprone:error_prone_annotations:2.20.0=compileClasspath,runtimeClasspath -com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath -com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath -com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath -com.google.j2objc:j2objc-annotations:2.8=compileClasspath,runtimeClasspath -com.google.protobuf:protobuf-java-util:3.24.1=compileClasspath,runtimeClasspath -com.google.protobuf:protobuf-java:3.24.1=compileClasspath,runtimeClasspath -com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath -com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath -com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath -com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath -com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath -io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-api:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.60.0=runtimeClasspath -io.grpc:grpc-core:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-inprocess:1.60.0=runtimeClasspath -io.grpc:grpc-protobuf-lite:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-protobuf:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-stub:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-util:1.60.0=runtimeClasspath -io.netty:netty-bom:4.1.108.Final=runtimeClasspath -io.opentelemetry:opentelemetry-proto:1.1.0-alpha=compileClasspath,runtimeClasspath -io.perfmark:perfmark-api:0.26.0=runtimeClasspath -io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath -jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath -javax.annotation:javax.annotation-api:1.3.2=compileClasspath,runtimeClasspath -javax.inject:javax.inject:1=compileClasspath,runtimeClasspath -javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath -javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath -org.apache.commons:commons-lang3:3.12.0=compileClasspath,runtimeClasspath -org.apache.commons:commons-text:1.10.0=compileClasspath,runtimeClasspath -org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath -org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath -org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.4=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath -org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath -org.projectlombok:lombok:1.18.28=annotationProcessor -org.projectlombok:lombok:1.18.30=compileClasspath -org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath -org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.auth0:java-jwt:4.4.0=runtimeClasspath,testRuntimeClasspath +com.auth0:jwks-rsa:0.22.0=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.android:annotations:4.1.1.4=runtimeClasspath,testRuntimeClasspath +com.google.api.grpc:proto-google-common-protos:2.22.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.code.gson:gson:2.10.1=runtimeClasspath,testRuntimeClasspath +com.google.code.gson:gson:2.8.9=compileClasspath,testCompileClasspath +com.google.errorprone:error_prone_annotations:2.20.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.protobuf:protobuf-java-util:3.24.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.protobuf:protobuf-java:3.24.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-api:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-context:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-core:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-inprocess:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-protobuf-lite:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-protobuf:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-stub:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-util:1.60.0=runtimeClasspath,testRuntimeClasspath +io.netty:netty-bom:4.1.108.Final=runtimeClasspath,testRuntimeClasspath +io.opentelemetry:opentelemetry-proto:1.1.0-alpha=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.perfmark:perfmark-api:0.26.0=runtimeClasspath,testRuntimeClasspath +io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.annotation:javax.annotation-api:1.3.2=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy-agent:1.14.10=testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy:1.14.10=testCompileClasspath,testRuntimeClasspath +org.apache.commons:commons-lang3:3.12.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.apache.commons:commons-text:1.10.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath,testRuntimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.4=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.junit.jupiter:junit-jupiter-api:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter-api:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter-engine:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter-params:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter-params:5.10.1=testRuntimeClasspath +org.junit.jupiter:junit-jupiter:5.10.0=testCompileClasspath +org.junit.jupiter:junit-jupiter:5.10.1=testRuntimeClasspath +org.junit.platform:junit-platform-commons:1.10.0=testCompileClasspath +org.junit.platform:junit-platform-commons:1.10.1=testRuntimeClasspath +org.junit.platform:junit-platform-engine:1.10.1=testRuntimeClasspath +org.junit:junit-bom:5.10.0=testCompileClasspath +org.junit:junit-bom:5.10.1=testRuntimeClasspath +org.mockito:mockito-core:5.8.0=testCompileClasspath,testRuntimeClasspath +org.mockito:mockito-junit-jupiter:5.8.0=testCompileClasspath,testRuntimeClasspath +org.objenesis:objenesis:3.3=testRuntimeClasspath +org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testRuntimeClasspath +org.projectlombok:lombok:1.18.30=annotationProcessor,compileClasspath,testCompileClasspath +org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath empty= diff --git a/hypertrace-core-graphql-spi/gradle.lockfile b/hypertrace-core-graphql-spi/gradle.lockfile index b62bf990..afdc19ec 100644 --- a/hypertrace-core-graphql-spi/gradle.lockfile +++ b/hypertrace-core-graphql-spi/gradle.lockfile @@ -1,16 +1,16 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. -com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath -com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath -com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath -com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath -com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath -io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath -javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath -org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath -org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.reactivestreams:reactive-streams:1.0.3=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath empty=annotationProcessor diff --git a/hypertrace-core-graphql-trace-schema/gradle.lockfile b/hypertrace-core-graphql-trace-schema/gradle.lockfile index 7a822e1f..c1939053 100644 --- a/hypertrace-core-graphql-trace-schema/gradle.lockfile +++ b/hypertrace-core-graphql-trace-schema/gradle.lockfile @@ -1,65 +1,64 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. -aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath -com.auth0:java-jwt:4.4.0=runtimeClasspath -com.auth0:jwks-rsa:0.22.0=runtimeClasspath -com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath -com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=runtimeClasspath -com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath -com.google.android:annotations:4.1.1.4=runtimeClasspath -com.google.api.grpc:proto-google-common-protos:2.22.0=compileClasspath,runtimeClasspath -com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath -com.google.code.gson:gson:2.10.1=runtimeClasspath -com.google.code.gson:gson:2.8.9=compileClasspath -com.google.errorprone:error_prone_annotations:2.20.0=compileClasspath,runtimeClasspath -com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath -com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath -com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath -com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath -com.google.j2objc:j2objc-annotations:2.8=compileClasspath,runtimeClasspath -com.google.protobuf:protobuf-java-util:3.24.1=compileClasspath,runtimeClasspath -com.google.protobuf:protobuf-java:3.24.1=compileClasspath,runtimeClasspath -com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath -com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath -com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath -com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath -com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath -io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath -io.grpc:grpc-api:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-context:1.60.0=runtimeClasspath -io.grpc:grpc-core:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-inprocess:1.60.0=runtimeClasspath -io.grpc:grpc-protobuf-lite:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-protobuf:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-stub:1.60.0=compileClasspath,runtimeClasspath -io.grpc:grpc-util:1.60.0=runtimeClasspath -io.netty:netty-bom:4.1.108.Final=runtimeClasspath -io.perfmark:perfmark-api:0.26.0=runtimeClasspath -io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath -jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath -javax.annotation:javax.annotation-api:1.3.2=compileClasspath,runtimeClasspath -javax.inject:javax.inject:1=compileClasspath,runtimeClasspath -javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath -javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath -javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath -org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath -org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath -org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath -org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath -org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.4=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=runtimeClasspath -org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=compileClasspath,runtimeClasspath -org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath -org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath -org.projectlombok:lombok:1.18.28=annotationProcessor -org.projectlombok:lombok:1.18.30=compileClasspath -org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath -org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath +aopalliance:aopalliance:1.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.auth0:java-jwt:4.4.0=runtimeClasspath,testRuntimeClasspath +com.auth0:jwks-rsa:0.22.0=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-annotations:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-core:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.core:jackson-databind:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.16.1=runtimeClasspath,testRuntimeClasspath +com.fasterxml.jackson:jackson-bom:2.16.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.android:annotations:4.1.1.4=runtimeClasspath,testRuntimeClasspath +com.google.api.grpc:proto-google-common-protos:2.22.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.code.gson:gson:2.10.1=runtimeClasspath,testRuntimeClasspath +com.google.code.gson:gson:2.8.9=compileClasspath,testCompileClasspath +com.google.errorprone:error_prone_annotations:2.20.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava-parent:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:guava:32.1.2-jre=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.inject:guice:6.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.j2objc:j2objc-annotations:2.8=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.protobuf:protobuf-java-util:3.24.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.google.protobuf:protobuf-java:3.24.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java-kickstart:graphql-java-kickstart:14.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java-kickstart:graphql-java-servlet:14.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:graphql-java-extended-scalars:17.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:graphql-java:19.6=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +com.graphql-java:java-dataloader:3.2.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.github.graphql-java:graphql-java-annotations:9.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-api:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-bom:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-context:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-core:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-inprocess:1.60.0=runtimeClasspath,testRuntimeClasspath +io.grpc:grpc-protobuf-lite:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-protobuf:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-stub:1.60.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +io.grpc:grpc-util:1.60.0=runtimeClasspath,testRuntimeClasspath +io.netty:netty-bom:4.1.108.Final=runtimeClasspath,testRuntimeClasspath +io.perfmark:perfmark-api:0.26.0=runtimeClasspath,testRuntimeClasspath +io.reactivex.rxjava3:rxjava:3.1.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +jakarta.inject:jakarta.inject-api:2.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.annotation:javax.annotation-api:1.3.2=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.inject:javax.inject:1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.servlet:javax.servlet-api:4.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.validation:validation-api:1.1.0.Final=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +javax.websocket:javax.websocket-api:1.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.checkerframework:checker-qual:3.33.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath,testRuntimeClasspath +org.hypertrace.bom:hypertrace-bom:0.3.23=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.attribute.service:attribute-service-api:0.14.35=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.attribute.service:caching-attribute-service-client:0.14.35=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-client-rx-utils:0.13.4=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-client-utils:0.13.4=runtimeClasspath,testRuntimeClasspath +org.hypertrace.core.grpcutils:grpc-context-utils:0.13.4=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.core.kafkastreams.framework:kafka-bom:0.4.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.hypertrace.gateway.service:gateway-service-api:0.3.9=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.projectlombok:lombok:1.18.30=annotationProcessor,compileClasspath +org.reactivestreams:reactive-streams:1.0.4=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.slf4j:slf4j-api:2.0.7=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath empty= diff --git a/settings.gradle.kts b/settings.gradle.kts index 1a89e18e..6975815e 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -12,11 +12,11 @@ pluginManagement { plugins { id("org.hypertrace.version-settings") version "0.2.1" - id("org.hypertrace.dependency-settings") version "0.1.1" + id("org.hypertrace.dependency-settings") version "0.1.2" } configure { - catalogVersion.set("0.2.10") + catalogVersion.set("0.3.23") } enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") From 37ecebf50e7a83c45bb1f40c19cb7b9dd072ee82 Mon Sep 17 00:00:00 2001 From: SJ <48863181+skjindal93@users.noreply.github.com> Date: Fri, 21 Jun 2024 22:12:24 +0530 Subject: [PATCH 173/173] remove hypertrace-core-graphql submodule --- .gitmodules | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.gitmodules b/.gitmodules index 49078789..e69de29b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +0,0 @@ -[submodule "hypertrace-core-graphql"] - path = hypertrace-core-graphql - url = https://github.com/hypertrace/hypertrace-core-graphql.git - branch = main