From 582bb08f4817b53cc4fea4bb7cd138e76ccec346 Mon Sep 17 00:00:00 2001 From: Sanket Mundra Date: Mon, 12 Jun 2023 15:44:00 +0530 Subject: [PATCH 1/6] Added new operator to check ip within range --- .../hypertrace/graphql/label/schema/rule/StringCondition.java | 3 ++- .../label/dao/LabelApplicationRuleRequestConverter.java | 2 ++ .../label/dao/LabelApplicationRuleResponseConverter.java | 2 ++ hypertrace-graphql-platform/build.gradle.kts | 2 +- 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/hypertrace-graphql-labels-schema-api/src/main/java/org/hypertrace/graphql/label/schema/rule/StringCondition.java b/hypertrace-graphql-labels-schema-api/src/main/java/org/hypertrace/graphql/label/schema/rule/StringCondition.java index 2790078d..07ac13c4 100644 --- a/hypertrace-graphql-labels-schema-api/src/main/java/org/hypertrace/graphql/label/schema/rule/StringCondition.java +++ b/hypertrace-graphql-labels-schema-api/src/main/java/org/hypertrace/graphql/label/schema/rule/StringCondition.java @@ -14,7 +14,8 @@ public interface StringCondition { @GraphQLName(Operator.TYPE_NAME) enum Operator { OPERATOR_EQUALS, - OPERATOR_MATCHES_REGEX; + OPERATOR_MATCHES_REGEX, + OPERATOR_CIDR; private static final String TYPE_NAME = "StringConditionOperator"; } diff --git a/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelApplicationRuleRequestConverter.java b/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelApplicationRuleRequestConverter.java index 4700cf5e..9277ec30 100644 --- a/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelApplicationRuleRequestConverter.java +++ b/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelApplicationRuleRequestConverter.java @@ -150,6 +150,8 @@ StringCondition.Operator convertStringConditionOperator( return StringCondition.Operator.OPERATOR_EQUALS; case OPERATOR_MATCHES_REGEX: return StringCondition.Operator.OPERATOR_MATCHES_REGEX; + case OPERATOR_CIDR: + return StringCondition.Operator.OPERATOR_CIDR; default: throw new IllegalArgumentException("Unsupported String Condition Operator"); } diff --git a/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelApplicationRuleResponseConverter.java b/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelApplicationRuleResponseConverter.java index 42a5a173..020348a2 100644 --- a/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelApplicationRuleResponseConverter.java +++ b/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelApplicationRuleResponseConverter.java @@ -228,6 +228,8 @@ private Optional convertOperatorInStringCondition( return Optional.of(StringCondition.Operator.OPERATOR_EQUALS); case OPERATOR_MATCHES_REGEX: return Optional.of(StringCondition.Operator.OPERATOR_MATCHES_REGEX); + case OPERATOR_CIDR: + return Optional.of(StringCondition.Operator.OPERATOR_CIDR); default: log.error( "Unrecognized Operator Type in String Condition {}", diff --git a/hypertrace-graphql-platform/build.gradle.kts b/hypertrace-graphql-platform/build.gradle.kts index 4aa3951b..8778fb4f 100644 --- a/hypertrace-graphql-platform/build.gradle.kts +++ b/hypertrace-graphql-platform/build.gradle.kts @@ -12,7 +12,7 @@ dependencies { api("org.hypertrace.entity.service:entity-type-service-rx-client:0.5.6") api("org.hypertrace.config.service:spaces-config-service-api:0.1.1") api("org.hypertrace.config.service:labels-config-service-api:0.1.15") - api("org.hypertrace.config.service:label-application-rule-config-service-api:0.1.16") + api("org.hypertrace.config.service:label-application-rule-config-service-api:0.1.49") api("org.hypertrace.config.service:span-processing-config-service-api:0.1.41") } } From 59ea812a1c523e50506c5c8febadf564bb01ddc2 Mon Sep 17 00:00:00 2001 From: Sanket Mundra Date: Fri, 16 Jun 2023 11:45:18 +0530 Subject: [PATCH 2/6] Updated enums --- .../graphql/label/schema/rule/StringCondition.java | 3 ++- .../label/dao/LabelApplicationRuleRequestConverter.java | 6 ++++-- .../label/dao/LabelApplicationRuleResponseConverter.java | 6 ++++-- hypertrace-graphql-platform/build.gradle.kts | 2 +- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/hypertrace-graphql-labels-schema-api/src/main/java/org/hypertrace/graphql/label/schema/rule/StringCondition.java b/hypertrace-graphql-labels-schema-api/src/main/java/org/hypertrace/graphql/label/schema/rule/StringCondition.java index 07ac13c4..3d7e57f1 100644 --- a/hypertrace-graphql-labels-schema-api/src/main/java/org/hypertrace/graphql/label/schema/rule/StringCondition.java +++ b/hypertrace-graphql-labels-schema-api/src/main/java/org/hypertrace/graphql/label/schema/rule/StringCondition.java @@ -15,7 +15,8 @@ public interface StringCondition { enum Operator { OPERATOR_EQUALS, OPERATOR_MATCHES_REGEX, - OPERATOR_CIDR; + OPERATOR_MATCHES_IPS, + OPERATOR_NOT_MATCHES_IPS; private static final String TYPE_NAME = "StringConditionOperator"; } diff --git a/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelApplicationRuleRequestConverter.java b/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelApplicationRuleRequestConverter.java index 9277ec30..8ee570cc 100644 --- a/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelApplicationRuleRequestConverter.java +++ b/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelApplicationRuleRequestConverter.java @@ -150,8 +150,10 @@ StringCondition.Operator convertStringConditionOperator( return StringCondition.Operator.OPERATOR_EQUALS; case OPERATOR_MATCHES_REGEX: return StringCondition.Operator.OPERATOR_MATCHES_REGEX; - case OPERATOR_CIDR: - return StringCondition.Operator.OPERATOR_CIDR; + case OPERATOR_MATCHES_IPS: + return StringCondition.Operator.OPERATOR_MATCHES_IPS; + case OPERATOR_NOT_MATCHES_IPS: + return StringCondition.Operator.OPERATOR_NOT_MATCHES_IPS; default: throw new IllegalArgumentException("Unsupported String Condition Operator"); } diff --git a/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelApplicationRuleResponseConverter.java b/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelApplicationRuleResponseConverter.java index 020348a2..0295899c 100644 --- a/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelApplicationRuleResponseConverter.java +++ b/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelApplicationRuleResponseConverter.java @@ -228,8 +228,10 @@ private Optional convertOperatorInStringCondition( return Optional.of(StringCondition.Operator.OPERATOR_EQUALS); case OPERATOR_MATCHES_REGEX: return Optional.of(StringCondition.Operator.OPERATOR_MATCHES_REGEX); - case OPERATOR_CIDR: - return Optional.of(StringCondition.Operator.OPERATOR_CIDR); + case OPERATOR_MATCHES_IPS: + return Optional.of(StringCondition.Operator.OPERATOR_MATCHES_IPS); + case OPERATOR_NOT_MATCHES_IPS: + return Optional.of(StringCondition.Operator.OPERATOR_NOT_MATCHES_IPS); default: log.error( "Unrecognized Operator Type in String Condition {}", diff --git a/hypertrace-graphql-platform/build.gradle.kts b/hypertrace-graphql-platform/build.gradle.kts index 8778fb4f..061db378 100644 --- a/hypertrace-graphql-platform/build.gradle.kts +++ b/hypertrace-graphql-platform/build.gradle.kts @@ -12,7 +12,7 @@ dependencies { api("org.hypertrace.entity.service:entity-type-service-rx-client:0.5.6") api("org.hypertrace.config.service:spaces-config-service-api:0.1.1") api("org.hypertrace.config.service:labels-config-service-api:0.1.15") - api("org.hypertrace.config.service:label-application-rule-config-service-api:0.1.49") + api("org.hypertrace.config.service:label-application-rule-config-service-api:0.1.51") api("org.hypertrace.config.service:span-processing-config-service-api:0.1.41") } } From 8f89d9ae25d6d2020c56bc1a53e35a1ce24b9415 Mon Sep 17 00:00:00 2001 From: Sanket Mundra Date: Fri, 16 Jun 2023 12:37:18 +0530 Subject: [PATCH 3/6] Updated ht config-service version --- hypertrace-graphql-platform/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hypertrace-graphql-platform/build.gradle.kts b/hypertrace-graphql-platform/build.gradle.kts index 061db378..4f694b95 100644 --- a/hypertrace-graphql-platform/build.gradle.kts +++ b/hypertrace-graphql-platform/build.gradle.kts @@ -12,7 +12,7 @@ dependencies { api("org.hypertrace.entity.service:entity-type-service-rx-client:0.5.6") api("org.hypertrace.config.service:spaces-config-service-api:0.1.1") api("org.hypertrace.config.service:labels-config-service-api:0.1.15") - api("org.hypertrace.config.service:label-application-rule-config-service-api:0.1.51") + api("org.hypertrace.config.service:label-application-rule-config-service-api:0.1.52") api("org.hypertrace.config.service:span-processing-config-service-api:0.1.41") } } From 79280c653b04b1dc60e0c77f4126aeba52962999 Mon Sep 17 00:00:00 2001 From: Sanket Mundra Date: Fri, 16 Jun 2023 20:20:13 +0530 Subject: [PATCH 4/6] Updated converters for StringCondition value changes --- .../label/schema/rule/StringCondition.java | 6 +-- .../schema/rule/StringConditionValue.java | 37 +++++++++++++++++ .../LabelApplicationRuleRequestConverter.java | 21 ++++++++-- ...LabelApplicationRuleResponseConverter.java | 41 ++++++++++++++++++- ...licationRuleDataDeserializationConfig.java | 16 ++++++++ ...lApplicationRuleDeserializationConfig.java | 16 ++++++++ 6 files changed, 129 insertions(+), 8 deletions(-) create mode 100644 hypertrace-graphql-labels-schema-api/src/main/java/org/hypertrace/graphql/label/schema/rule/StringConditionValue.java diff --git a/hypertrace-graphql-labels-schema-api/src/main/java/org/hypertrace/graphql/label/schema/rule/StringCondition.java b/hypertrace-graphql-labels-schema-api/src/main/java/org/hypertrace/graphql/label/schema/rule/StringCondition.java index 3d7e57f1..0c1d2d4a 100644 --- a/hypertrace-graphql-labels-schema-api/src/main/java/org/hypertrace/graphql/label/schema/rule/StringCondition.java +++ b/hypertrace-graphql-labels-schema-api/src/main/java/org/hypertrace/graphql/label/schema/rule/StringCondition.java @@ -9,7 +9,7 @@ public interface StringCondition { String TYPE_NAME = "LabelApplicationStringCondition"; String OPERATOR_KEY = "operator"; - String VALUE_KEY = "value"; + String STRING_CONDITION_VALUE_KEY = "stringConditionValue"; @GraphQLName(Operator.TYPE_NAME) enum Operator { @@ -27,6 +27,6 @@ enum Operator { @GraphQLField @GraphQLNonNull - @GraphQLName(VALUE_KEY) - String value(); + @GraphQLName(STRING_CONDITION_VALUE_KEY) + StringConditionValue stringConditionValue(); } diff --git a/hypertrace-graphql-labels-schema-api/src/main/java/org/hypertrace/graphql/label/schema/rule/StringConditionValue.java b/hypertrace-graphql-labels-schema-api/src/main/java/org/hypertrace/graphql/label/schema/rule/StringConditionValue.java new file mode 100644 index 00000000..7c99360b --- /dev/null +++ b/hypertrace-graphql-labels-schema-api/src/main/java/org/hypertrace/graphql/label/schema/rule/StringConditionValue.java @@ -0,0 +1,37 @@ +package org.hypertrace.graphql.label.schema.rule; + +import graphql.annotations.annotationTypes.GraphQLField; +import graphql.annotations.annotationTypes.GraphQLName; +import graphql.annotations.annotationTypes.GraphQLNonNull; +import java.util.List; +import javax.annotation.Nullable; + +@GraphQLName(StringConditionValue.TYPE_NAME) +public interface StringConditionValue { + String TYPE_NAME = "LabelApplicationStringConditionValue"; + String VALUE_KEY = "value"; + String VALUES_KEY = "values"; + String STRING_CONDITION_VALUE_TYPE_KEY = "stringConditionValueType"; + + @GraphQLName(StringConditionValueType.TYPE_NAME) + enum StringConditionValueType { + VALUE, + VALUES; + private static final String TYPE_NAME = "StringConditionValueType"; + } + + @GraphQLField + @Nullable + @GraphQLName(VALUE_KEY) + String value(); + + @GraphQLField + @Nullable + @GraphQLName(VALUES_KEY) + List values(); + + @GraphQLField + @GraphQLNonNull + @GraphQLName(STRING_CONDITION_VALUE_TYPE_KEY) + StringConditionValueType stringConditionValueType(); +} diff --git a/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelApplicationRuleRequestConverter.java b/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelApplicationRuleRequestConverter.java index 8ee570cc..0dc983d6 100644 --- a/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelApplicationRuleRequestConverter.java +++ b/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelApplicationRuleRequestConverter.java @@ -130,10 +130,23 @@ LeafCondition convertLeafCondition( StringCondition convertStringCondition( org.hypertrace.graphql.label.schema.rule.StringCondition stringCondition) { - return StringCondition.newBuilder() - .setOperator(convertStringConditionOperator(stringCondition.operator())) - .setValue(stringCondition.value()) - .build(); + StringCondition.Builder stringConditionBuilder = + StringCondition.newBuilder() + .setOperator(convertStringConditionOperator(stringCondition.operator())); + switch (stringCondition.stringConditionValue().stringConditionValueType()) { + case VALUE: + return stringConditionBuilder + .setValue(stringCondition.stringConditionValue().value()) + .build(); + case VALUES: + return stringConditionBuilder + .setValues( + StringCondition.StringList.newBuilder() + .addAllValues(stringCondition.stringConditionValue().values())) + .build(); + default: + throw new IllegalArgumentException("Unsupported String Condition value"); + } } UnaryCondition convertUnaryCondition( diff --git a/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelApplicationRuleResponseConverter.java b/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelApplicationRuleResponseConverter.java index 0295899c..667e7cd4 100644 --- a/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelApplicationRuleResponseConverter.java +++ b/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelApplicationRuleResponseConverter.java @@ -18,6 +18,7 @@ import org.hypertrace.graphql.label.schema.rule.LeafCondition; import org.hypertrace.graphql.label.schema.rule.StaticLabels; import org.hypertrace.graphql.label.schema.rule.StringCondition; +import org.hypertrace.graphql.label.schema.rule.StringConditionValue; import org.hypertrace.graphql.label.schema.rule.UnaryCondition; import org.hypertrace.graphql.label.schema.rule.ValueCondition; import org.hypertrace.label.application.rule.config.service.v1.CreateLabelApplicationRuleResponse; @@ -216,7 +217,37 @@ private Optional convertStringCondition( .StringCondition stringCondition) { Optional operator = convertOperatorInStringCondition(stringCondition); - return operator.map(op -> new ConvertedStringCondition(op, stringCondition.getValue())); + Optional stringConditionValue = + convertStringConditionValue(stringCondition); + if (operator.isEmpty() || stringConditionValue.isEmpty()) { + return Optional.empty(); + } + return Optional.of( + new ConvertedStringCondition(operator.orElseThrow(), stringConditionValue.orElseThrow())); + } + + private Optional convertStringConditionValue( + org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData + .StringCondition + stringCondition) { + switch (stringCondition.getKindCase()) { + case VALUE: + return Optional.of( + new ConvertedStringConditionValue( + stringCondition.getValue(), + null, + StringConditionValue.StringConditionValueType.VALUE)); + case VALUES: + return Optional.of( + new ConvertedStringConditionValue( + null, + stringCondition.getValues().getValuesList(), + StringConditionValue.StringConditionValueType.VALUES)); + default: + log.error( + "Unrecognized String Condition Value Type {}", stringCondition.getKindCase().name()); + return Optional.empty(); + } } private Optional convertOperatorInStringCondition( @@ -319,7 +350,15 @@ private static class ConvertedUnaryCondition implements UnaryCondition { @Accessors(fluent = true) private static class ConvertedStringCondition implements StringCondition { Operator operator; + StringConditionValue stringConditionValue; + } + + @Value + @Accessors(fluent = true) + private static class ConvertedStringConditionValue implements StringConditionValue { String value; + List values; + StringConditionValueType stringConditionValueType; } @Value diff --git a/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/deserialization/LabelApplicationRuleDataDeserializationConfig.java b/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/deserialization/LabelApplicationRuleDataDeserializationConfig.java index ec129a0d..4f1ef910 100644 --- a/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/deserialization/LabelApplicationRuleDataDeserializationConfig.java +++ b/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/deserialization/LabelApplicationRuleDataDeserializationConfig.java @@ -14,6 +14,7 @@ import org.hypertrace.graphql.label.schema.rule.LeafCondition; import org.hypertrace.graphql.label.schema.rule.StaticLabels; import org.hypertrace.graphql.label.schema.rule.StringCondition; +import org.hypertrace.graphql.label.schema.rule.StringConditionValue; import org.hypertrace.graphql.label.schema.rule.UnaryCondition; import org.hypertrace.graphql.label.schema.rule.ValueCondition; @@ -41,6 +42,7 @@ public List jacksonModules() { .addAbstractTypeMapping(LeafCondition.class, LeafConditionArgument.class) .addAbstractTypeMapping(ValueCondition.class, ValueConditionArgument.class) .addAbstractTypeMapping(StringCondition.class, StringConditionArgument.class) + .addAbstractTypeMapping(StringConditionValue.class, StringConditionValueArgument.class) .addAbstractTypeMapping(UnaryCondition.class, UnaryConditionArgument.class)); } @@ -132,8 +134,22 @@ private static class StringConditionArgument implements StringCondition { @JsonProperty(OPERATOR_KEY) Operator operator; + @JsonProperty(STRING_CONDITION_VALUE_KEY) + StringConditionValue stringConditionValue; + } + + @Value + @Accessors(fluent = true) + @NoArgsConstructor(force = true) + private static class StringConditionValueArgument implements StringConditionValue { @JsonProperty(VALUE_KEY) String value; + + @JsonProperty(VALUES_KEY) + List values; + + @JsonProperty(STRING_CONDITION_VALUE_TYPE_KEY) + StringConditionValueType stringConditionValueType; } @Value diff --git a/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/deserialization/LabelApplicationRuleDeserializationConfig.java b/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/deserialization/LabelApplicationRuleDeserializationConfig.java index efe75467..c22acb33 100644 --- a/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/deserialization/LabelApplicationRuleDeserializationConfig.java +++ b/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/deserialization/LabelApplicationRuleDeserializationConfig.java @@ -15,6 +15,7 @@ import org.hypertrace.graphql.label.schema.rule.LeafCondition; import org.hypertrace.graphql.label.schema.rule.StaticLabels; import org.hypertrace.graphql.label.schema.rule.StringCondition; +import org.hypertrace.graphql.label.schema.rule.StringConditionValue; import org.hypertrace.graphql.label.schema.rule.UnaryCondition; import org.hypertrace.graphql.label.schema.rule.ValueCondition; @@ -42,6 +43,7 @@ public List jacksonModules() { .addAbstractTypeMapping(LeafCondition.class, LeafConditionArgument.class) .addAbstractTypeMapping(ValueCondition.class, ValueConditionArgument.class) .addAbstractTypeMapping(StringCondition.class, StringConditionArgument.class) + .addAbstractTypeMapping(StringConditionValue.class, StringConditionValueArgument.class) .addAbstractTypeMapping(UnaryCondition.class, UnaryConditionArgument.class)); } @@ -144,8 +146,22 @@ private static class StringConditionArgument implements StringCondition { @JsonProperty(OPERATOR_KEY) Operator operator; + @JsonProperty(STRING_CONDITION_VALUE_KEY) + StringConditionValue stringConditionValue; + } + + @Value + @Accessors(fluent = true) + @NoArgsConstructor(force = true) + private static class StringConditionValueArgument implements StringConditionValue { @JsonProperty(VALUE_KEY) String value; + + @JsonProperty(VALUES_KEY) + List values; + + @JsonProperty(STRING_CONDITION_VALUE_TYPE_KEY) + StringConditionValueType stringConditionValueType; } @Value From fd2eca9ba7223b72d43adf22a42da443c0d6789b Mon Sep 17 00:00:00 2001 From: Sanket Mundra Date: Fri, 16 Jun 2023 21:30:57 +0530 Subject: [PATCH 5/6] Reverted breaking changes | addressed review comment --- .../label/schema/rule/StringCondition.java | 29 ++++++++++-- .../schema/rule/StringConditionValue.java | 37 ---------------- .../LabelApplicationRuleRequestConverter.java | 12 ++--- ...LabelApplicationRuleResponseConverter.java | 44 ++++++------------- ...licationRuleDataDeserializationConfig.java | 10 ----- ...lApplicationRuleDeserializationConfig.java | 10 ----- 6 files changed, 43 insertions(+), 99 deletions(-) delete mode 100644 hypertrace-graphql-labels-schema-api/src/main/java/org/hypertrace/graphql/label/schema/rule/StringConditionValue.java diff --git a/hypertrace-graphql-labels-schema-api/src/main/java/org/hypertrace/graphql/label/schema/rule/StringCondition.java b/hypertrace-graphql-labels-schema-api/src/main/java/org/hypertrace/graphql/label/schema/rule/StringCondition.java index 0c1d2d4a..e6e19a56 100644 --- a/hypertrace-graphql-labels-schema-api/src/main/java/org/hypertrace/graphql/label/schema/rule/StringCondition.java +++ b/hypertrace-graphql-labels-schema-api/src/main/java/org/hypertrace/graphql/label/schema/rule/StringCondition.java @@ -3,13 +3,17 @@ import graphql.annotations.annotationTypes.GraphQLField; import graphql.annotations.annotationTypes.GraphQLName; import graphql.annotations.annotationTypes.GraphQLNonNull; +import java.util.List; +import javax.annotation.Nullable; @GraphQLName(StringCondition.TYPE_NAME) public interface StringCondition { String TYPE_NAME = "LabelApplicationStringCondition"; String OPERATOR_KEY = "operator"; - String STRING_CONDITION_VALUE_KEY = "stringConditionValue"; + String VALUE_KEY = "value"; + String VALUES_KEY = "values"; + String STRING_CONDITION_VALUE_TYPE_KEY = "stringConditionValueType"; @GraphQLName(Operator.TYPE_NAME) enum Operator { @@ -20,13 +24,30 @@ enum Operator { private static final String TYPE_NAME = "StringConditionOperator"; } + @GraphQLName(StringConditionValueType.TYPE_NAME) + enum StringConditionValueType { + VALUE, + VALUES; + private static final String TYPE_NAME = "StringConditionValueType"; + } + @GraphQLField @GraphQLNonNull @GraphQLName(OPERATOR_KEY) Operator operator(); @GraphQLField - @GraphQLNonNull - @GraphQLName(STRING_CONDITION_VALUE_KEY) - StringConditionValue stringConditionValue(); + @Nullable + @GraphQLName(VALUE_KEY) + String value(); + + @GraphQLField + @Nullable + @GraphQLName(VALUES_KEY) + List values(); + + @GraphQLField + @Nullable + @GraphQLName(STRING_CONDITION_VALUE_TYPE_KEY) + StringConditionValueType stringConditionValueType(); } diff --git a/hypertrace-graphql-labels-schema-api/src/main/java/org/hypertrace/graphql/label/schema/rule/StringConditionValue.java b/hypertrace-graphql-labels-schema-api/src/main/java/org/hypertrace/graphql/label/schema/rule/StringConditionValue.java deleted file mode 100644 index 7c99360b..00000000 --- a/hypertrace-graphql-labels-schema-api/src/main/java/org/hypertrace/graphql/label/schema/rule/StringConditionValue.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.hypertrace.graphql.label.schema.rule; - -import graphql.annotations.annotationTypes.GraphQLField; -import graphql.annotations.annotationTypes.GraphQLName; -import graphql.annotations.annotationTypes.GraphQLNonNull; -import java.util.List; -import javax.annotation.Nullable; - -@GraphQLName(StringConditionValue.TYPE_NAME) -public interface StringConditionValue { - String TYPE_NAME = "LabelApplicationStringConditionValue"; - String VALUE_KEY = "value"; - String VALUES_KEY = "values"; - String STRING_CONDITION_VALUE_TYPE_KEY = "stringConditionValueType"; - - @GraphQLName(StringConditionValueType.TYPE_NAME) - enum StringConditionValueType { - VALUE, - VALUES; - private static final String TYPE_NAME = "StringConditionValueType"; - } - - @GraphQLField - @Nullable - @GraphQLName(VALUE_KEY) - String value(); - - @GraphQLField - @Nullable - @GraphQLName(VALUES_KEY) - List values(); - - @GraphQLField - @GraphQLNonNull - @GraphQLName(STRING_CONDITION_VALUE_TYPE_KEY) - StringConditionValueType stringConditionValueType(); -} diff --git a/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelApplicationRuleRequestConverter.java b/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelApplicationRuleRequestConverter.java index 0dc983d6..e39e211f 100644 --- a/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelApplicationRuleRequestConverter.java +++ b/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelApplicationRuleRequestConverter.java @@ -133,19 +133,15 @@ StringCondition convertStringCondition( StringCondition.Builder stringConditionBuilder = StringCondition.newBuilder() .setOperator(convertStringConditionOperator(stringCondition.operator())); - switch (stringCondition.stringConditionValue().stringConditionValueType()) { - case VALUE: - return stringConditionBuilder - .setValue(stringCondition.stringConditionValue().value()) - .build(); + switch (stringCondition.stringConditionValueType()) { case VALUES: return stringConditionBuilder .setValues( - StringCondition.StringList.newBuilder() - .addAllValues(stringCondition.stringConditionValue().values())) + StringCondition.StringList.newBuilder().addAllValues(stringCondition.values())) .build(); + case VALUE: default: - throw new IllegalArgumentException("Unsupported String Condition value"); + return stringConditionBuilder.setValue(stringCondition.value()).build(); } } diff --git a/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelApplicationRuleResponseConverter.java b/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelApplicationRuleResponseConverter.java index 667e7cd4..7cea9c4f 100644 --- a/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelApplicationRuleResponseConverter.java +++ b/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/dao/LabelApplicationRuleResponseConverter.java @@ -18,7 +18,6 @@ import org.hypertrace.graphql.label.schema.rule.LeafCondition; import org.hypertrace.graphql.label.schema.rule.StaticLabels; import org.hypertrace.graphql.label.schema.rule.StringCondition; -import org.hypertrace.graphql.label.schema.rule.StringConditionValue; import org.hypertrace.graphql.label.schema.rule.UnaryCondition; import org.hypertrace.graphql.label.schema.rule.ValueCondition; import org.hypertrace.label.application.rule.config.service.v1.CreateLabelApplicationRuleResponse; @@ -217,32 +216,23 @@ private Optional convertStringCondition( .StringCondition stringCondition) { Optional operator = convertOperatorInStringCondition(stringCondition); - Optional stringConditionValue = - convertStringConditionValue(stringCondition); - if (operator.isEmpty() || stringConditionValue.isEmpty()) { - return Optional.empty(); - } - return Optional.of( - new ConvertedStringCondition(operator.orElseThrow(), stringConditionValue.orElseThrow())); - } - - private Optional convertStringConditionValue( - org.hypertrace.label.application.rule.config.service.v1.LabelApplicationRuleData - .StringCondition - stringCondition) { switch (stringCondition.getKindCase()) { case VALUE: - return Optional.of( - new ConvertedStringConditionValue( - stringCondition.getValue(), - null, - StringConditionValue.StringConditionValueType.VALUE)); + return operator.map( + op -> + new ConvertedStringCondition( + op, + stringCondition.getValue(), + null, + StringCondition.StringConditionValueType.VALUE)); case VALUES: - return Optional.of( - new ConvertedStringConditionValue( - null, - stringCondition.getValues().getValuesList(), - StringConditionValue.StringConditionValueType.VALUES)); + return operator.map( + op -> + new ConvertedStringCondition( + op, + null, + stringCondition.getValues().getValuesList(), + StringCondition.StringConditionValueType.VALUES)); default: log.error( "Unrecognized String Condition Value Type {}", stringCondition.getKindCase().name()); @@ -350,12 +340,6 @@ private static class ConvertedUnaryCondition implements UnaryCondition { @Accessors(fluent = true) private static class ConvertedStringCondition implements StringCondition { Operator operator; - StringConditionValue stringConditionValue; - } - - @Value - @Accessors(fluent = true) - private static class ConvertedStringConditionValue implements StringConditionValue { String value; List values; StringConditionValueType stringConditionValueType; diff --git a/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/deserialization/LabelApplicationRuleDataDeserializationConfig.java b/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/deserialization/LabelApplicationRuleDataDeserializationConfig.java index 4f1ef910..f75c704d 100644 --- a/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/deserialization/LabelApplicationRuleDataDeserializationConfig.java +++ b/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/deserialization/LabelApplicationRuleDataDeserializationConfig.java @@ -14,7 +14,6 @@ import org.hypertrace.graphql.label.schema.rule.LeafCondition; import org.hypertrace.graphql.label.schema.rule.StaticLabels; import org.hypertrace.graphql.label.schema.rule.StringCondition; -import org.hypertrace.graphql.label.schema.rule.StringConditionValue; import org.hypertrace.graphql.label.schema.rule.UnaryCondition; import org.hypertrace.graphql.label.schema.rule.ValueCondition; @@ -42,7 +41,6 @@ public List jacksonModules() { .addAbstractTypeMapping(LeafCondition.class, LeafConditionArgument.class) .addAbstractTypeMapping(ValueCondition.class, ValueConditionArgument.class) .addAbstractTypeMapping(StringCondition.class, StringConditionArgument.class) - .addAbstractTypeMapping(StringConditionValue.class, StringConditionValueArgument.class) .addAbstractTypeMapping(UnaryCondition.class, UnaryConditionArgument.class)); } @@ -134,14 +132,6 @@ private static class StringConditionArgument implements StringCondition { @JsonProperty(OPERATOR_KEY) Operator operator; - @JsonProperty(STRING_CONDITION_VALUE_KEY) - StringConditionValue stringConditionValue; - } - - @Value - @Accessors(fluent = true) - @NoArgsConstructor(force = true) - private static class StringConditionValueArgument implements StringConditionValue { @JsonProperty(VALUE_KEY) String value; diff --git a/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/deserialization/LabelApplicationRuleDeserializationConfig.java b/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/deserialization/LabelApplicationRuleDeserializationConfig.java index c22acb33..98d7723c 100644 --- a/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/deserialization/LabelApplicationRuleDeserializationConfig.java +++ b/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/deserialization/LabelApplicationRuleDeserializationConfig.java @@ -15,7 +15,6 @@ import org.hypertrace.graphql.label.schema.rule.LeafCondition; import org.hypertrace.graphql.label.schema.rule.StaticLabels; import org.hypertrace.graphql.label.schema.rule.StringCondition; -import org.hypertrace.graphql.label.schema.rule.StringConditionValue; import org.hypertrace.graphql.label.schema.rule.UnaryCondition; import org.hypertrace.graphql.label.schema.rule.ValueCondition; @@ -43,7 +42,6 @@ public List jacksonModules() { .addAbstractTypeMapping(LeafCondition.class, LeafConditionArgument.class) .addAbstractTypeMapping(ValueCondition.class, ValueConditionArgument.class) .addAbstractTypeMapping(StringCondition.class, StringConditionArgument.class) - .addAbstractTypeMapping(StringConditionValue.class, StringConditionValueArgument.class) .addAbstractTypeMapping(UnaryCondition.class, UnaryConditionArgument.class)); } @@ -146,14 +144,6 @@ private static class StringConditionArgument implements StringCondition { @JsonProperty(OPERATOR_KEY) Operator operator; - @JsonProperty(STRING_CONDITION_VALUE_KEY) - StringConditionValue stringConditionValue; - } - - @Value - @Accessors(fluent = true) - @NoArgsConstructor(force = true) - private static class StringConditionValueArgument implements StringConditionValue { @JsonProperty(VALUE_KEY) String value; From d7258e53cf9fe6db2ef9c01afa86be9966872c08 Mon Sep 17 00:00:00 2001 From: Sanket Mundra Date: Fri, 16 Jun 2023 23:00:38 +0530 Subject: [PATCH 6/6] Removed redundant deserializer --- ...licationRuleDataDeserializationConfig.java | 152 ------------------ ...lApplicationRuleDeserializationModule.java | 3 - 2 files changed, 155 deletions(-) delete mode 100644 hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/deserialization/LabelApplicationRuleDataDeserializationConfig.java diff --git a/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/deserialization/LabelApplicationRuleDataDeserializationConfig.java b/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/deserialization/LabelApplicationRuleDataDeserializationConfig.java deleted file mode 100644 index f75c704d..00000000 --- a/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/deserialization/LabelApplicationRuleDataDeserializationConfig.java +++ /dev/null @@ -1,152 +0,0 @@ -package org.hypertrace.graphql.label.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.deserialization.ArgumentDeserializationConfig; -import org.hypertrace.graphql.label.schema.rule.Action; -import org.hypertrace.graphql.label.schema.rule.Condition; -import org.hypertrace.graphql.label.schema.rule.LabelApplicationRuleData; -import org.hypertrace.graphql.label.schema.rule.LeafCondition; -import org.hypertrace.graphql.label.schema.rule.StaticLabels; -import org.hypertrace.graphql.label.schema.rule.StringCondition; -import org.hypertrace.graphql.label.schema.rule.UnaryCondition; -import org.hypertrace.graphql.label.schema.rule.ValueCondition; - -public class LabelApplicationRuleDataDeserializationConfig - implements ArgumentDeserializationConfig { - @Override - public String getArgumentKey() { - return LabelApplicationRuleData.ARGUMENT_NAME; - } - - @Override - public Class getArgumentSchema() { - return LabelApplicationRuleData.class; - } - - @Override - public List jacksonModules() { - return List.of( - new SimpleModule() - .addAbstractTypeMapping( - LabelApplicationRuleData.class, LabelApplicationRuleDataArgument.class) - .addAbstractTypeMapping(Action.class, ActionArgument.class) - .addAbstractTypeMapping(StaticLabels.class, StaticLabelsArgument.class) - .addAbstractTypeMapping(Condition.class, ConditionArgument.class) - .addAbstractTypeMapping(LeafCondition.class, LeafConditionArgument.class) - .addAbstractTypeMapping(ValueCondition.class, ValueConditionArgument.class) - .addAbstractTypeMapping(StringCondition.class, StringConditionArgument.class) - .addAbstractTypeMapping(UnaryCondition.class, UnaryConditionArgument.class)); - } - - @Value - @Accessors(fluent = true) - @NoArgsConstructor(force = true) - private static class LabelApplicationRuleDataArgument implements LabelApplicationRuleData { - @JsonProperty(NAME_KEY) - String name; - - @JsonProperty(CONDITION_LIST_KEY) - List conditionList; - - @JsonProperty(ACTION_KEY) - Action action; - - @JsonProperty(ENABLED_KEY) - boolean enabled; - - @JsonProperty(DESCRIPTION_KEY) - String description; - } - - @Value - @Accessors(fluent = true) - @NoArgsConstructor(force = true) - private static class ActionArgument implements Action { - @JsonProperty(ENTITY_TYPES_KEY) - List entityTypes; - - @JsonProperty(OPERATION_KEY) - Operation operation; - - @JsonProperty(STATIC_LABELS) - StaticLabels staticLabels; - - @JsonProperty(DYNAMIC_LABEL_KEY_KEY) - String dynamicLabelKey; - - @JsonProperty(ACTION_TYPE_KEY) - ActionType type; - } - - @Value - @Accessors(fluent = true) - @NoArgsConstructor(force = true) - private static class StaticLabelsArgument implements StaticLabels { - @JsonProperty(IDS_KEY) - List ids; - } - - @Value - @Accessors(fluent = true) - @NoArgsConstructor(force = true) - private static class ConditionArgument implements Condition { - @JsonProperty(LEAF_CONDITION_KEY) - LeafCondition leafCondition; - } - - @Value - @Accessors(fluent = true) - @NoArgsConstructor(force = true) - private static class LeafConditionArgument implements LeafCondition { - @JsonProperty(KEY_CONDITION_KEY) - StringCondition keyCondition; - - @JsonProperty(VALUE_CONDITION_KEY) - ValueCondition valueCondition; - } - - @Value - @Accessors(fluent = true) - @NoArgsConstructor(force = true) - private static class ValueConditionArgument implements ValueCondition { - @JsonProperty(STRING_CONDITION_KEY) - StringCondition stringCondition; - - @JsonProperty(UNARY_CONDITION_KEY) - UnaryCondition unaryCondition; - - @JsonProperty(VALUE_CONDITION_TYPE_KEY) - ValueConditionType valueConditionType; - } - - @Value - @Accessors(fluent = true) - @NoArgsConstructor(force = true) - private static class StringConditionArgument implements StringCondition { - @JsonProperty(OPERATOR_KEY) - Operator operator; - - @JsonProperty(VALUE_KEY) - String value; - - @JsonProperty(VALUES_KEY) - List values; - - @JsonProperty(STRING_CONDITION_VALUE_TYPE_KEY) - StringConditionValueType stringConditionValueType; - } - - @Value - @Accessors(fluent = true) - @NoArgsConstructor(force = true) - private static class UnaryConditionArgument implements UnaryCondition { - @JsonProperty(OPERATOR_KEY) - Operator operator; - } -} diff --git a/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/deserialization/LabelApplicationRuleDeserializationModule.java b/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/deserialization/LabelApplicationRuleDeserializationModule.java index f156fd7b..99f47449 100644 --- a/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/deserialization/LabelApplicationRuleDeserializationModule.java +++ b/hypertrace-graphql-labels-schema-impl/src/main/java/org/hypertrace/graphql/label/deserialization/LabelApplicationRuleDeserializationModule.java @@ -10,9 +10,6 @@ protected void configure() { Multibinder deserializationConfigBinder = Multibinder.newSetBinder(binder(), ArgumentDeserializationConfig.class); - deserializationConfigBinder - .addBinding() - .to(LabelApplicationRuleDataDeserializationConfig.class); deserializationConfigBinder.addBinding().to(LabelApplicationRuleDeserializationConfig.class); deserializationConfigBinder