feat: add regex support to traces (#3393)

This commit is contained in:
Vishal Sharma 2023-08-22 10:42:53 +05:30 committed by GitHub
parent a75f4f02d6
commit f8bfd1abc4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 1 deletions

View File

@ -50,6 +50,8 @@ var tracesOperatorMappingV3 = map[v3.FilterOperator]string{
v3.FilterOperatorGreaterThanOrEq: ">=", v3.FilterOperatorGreaterThanOrEq: ">=",
v3.FilterOperatorLike: "ILIKE", v3.FilterOperatorLike: "ILIKE",
v3.FilterOperatorNotLike: "NOT ILIKE", v3.FilterOperatorNotLike: "NOT ILIKE",
v3.FilterOperatorRegex: "match(%s, %s)",
v3.FilterOperatorNotRegex: "NOT match(%s, %s)",
v3.FilterOperatorContains: "ILIKE", v3.FilterOperatorContains: "ILIKE",
v3.FilterOperatorNotContains: "NOT ILIKE", v3.FilterOperatorNotContains: "NOT ILIKE",
v3.FilterOperatorExists: "has(%s%s, '%s')", v3.FilterOperatorExists: "has(%s%s, '%s')",
@ -173,7 +175,8 @@ func buildTracesFilterQuery(fs *v3.FilterSet, keys map[string]v3.AttributeKey) (
switch item.Operator { switch item.Operator {
case v3.FilterOperatorContains, v3.FilterOperatorNotContains: case v3.FilterOperatorContains, v3.FilterOperatorNotContains:
conditions = append(conditions, fmt.Sprintf("%s %s '%%%s%%'", columnName, operator, item.Value)) conditions = append(conditions, fmt.Sprintf("%s %s '%%%s%%'", columnName, operator, item.Value))
case v3.FilterOperatorRegex, v3.FilterOperatorNotRegex:
conditions = append(conditions, fmt.Sprintf(operator, columnName, fmtVal))
case v3.FilterOperatorExists, v3.FilterOperatorNotExists: case v3.FilterOperatorExists, v3.FilterOperatorNotExists:
if key.IsColumn { if key.IsColumn {
subQuery, err := existsSubQueryForFixedColumn(key, item.Operator) subQuery, err := existsSubQueryForFixedColumn(key, item.Operator)

View File

@ -107,6 +107,20 @@ var buildFilterQueryData = []struct {
}}, }},
ExpectedFilter: " AND stringTagMap['host'] NOT ILIKE '%102.%'", ExpectedFilter: " AND stringTagMap['host'] NOT ILIKE '%102.%'",
}, },
{
Name: "Test regex",
FilterSet: &v3.FilterSet{Operator: "AND", Items: []v3.FilterItem{
{Key: v3.AttributeKey{Key: "name", DataType: v3.AttributeKeyDataTypeString, Type: v3.AttributeKeyTypeTag, IsColumn: true}, Value: "name: \"(?P<host>\\S+)\"", Operator: "regex"},
}},
ExpectedFilter: " AND match(name, 'name: \"(?P<host>\\\\S+)\"')",
},
{
Name: "Test not regex",
FilterSet: &v3.FilterSet{Operator: "AND", Items: []v3.FilterItem{
{Key: v3.AttributeKey{Key: "name", DataType: v3.AttributeKeyDataTypeString, Type: v3.AttributeKeyTypeTag}, Value: "102.", Operator: "nregex"},
}},
ExpectedFilter: " AND NOT match(stringTagMap['name'], '102.')",
},
} }
func TestBuildTracesFilterQuery(t *testing.T) { func TestBuildTracesFilterQuery(t *testing.T) {