diff --git a/pkg/query-service/app/logparsingpipeline/pipelineBuilder_test.go b/pkg/query-service/app/logparsingpipeline/pipelineBuilder_test.go index 47a3e70925..e696d24cc3 100644 --- a/pkg/query-service/app/logparsingpipeline/pipelineBuilder_test.go +++ b/pkg/query-service/app/logparsingpipeline/pipelineBuilder_test.go @@ -361,3 +361,62 @@ func TestNoCollectorErrorsFromProcessorsForMismatchedLogs(t *testing.T) { require.Equal(1, len(result)) } } + +func TestResourceFiltersWork(t *testing.T) { + require := require.New(t) + + testPipeline := Pipeline{ + OrderId: 1, + Name: "pipeline1", + Alias: "pipeline1", + Enabled: true, + Filter: &v3.FilterSet{ + Operator: "AND", + Items: []v3.FilterItem{ + { + Key: v3.AttributeKey{ + Key: "service", + DataType: v3.AttributeKeyDataTypeString, + Type: v3.AttributeKeyTypeResource, + }, + Operator: "=", + Value: "nginx", + }, + }, + }, + Config: []PipelineOperator{ + { + ID: "add", + Type: "add", + Enabled: true, + Name: "add", + Field: "attributes.test", + Value: "test-value", + }, + }, + } + + testLog := model.SignozLog{ + Timestamp: uint64(time.Now().UnixNano()), + Body: "test log", + Attributes_string: map[string]string{}, + Resources_string: map[string]string{ + "service": "nginx", + }, + SeverityText: entry.Info.String(), + SeverityNumber: uint8(entry.Info), + SpanID: "", + TraceID: "", + } + + result, collectorWarnAndErrorLogs, err := SimulatePipelinesProcessing( + context.Background(), + []Pipeline{testPipeline}, + []model.SignozLog{testLog}, + ) + require.Nil(err) + require.Equal(0, len(collectorWarnAndErrorLogs), strings.Join(collectorWarnAndErrorLogs, "\n")) + require.Equal(1, len(result)) + + require.Equal(result[0].Attributes_string["test"], "test-value") +} diff --git a/pkg/query-service/queryBuilderToExpr/queryBuilderToExpr.go b/pkg/query-service/queryBuilderToExpr/queryBuilderToExpr.go index f71470ff6e..ed68feb071 100644 --- a/pkg/query-service/queryBuilderToExpr/queryBuilderToExpr.go +++ b/pkg/query-service/queryBuilderToExpr/queryBuilderToExpr.go @@ -30,9 +30,9 @@ var logOperatorsToExpr = map[v3.FilterOperator]string{ func getName(v v3.AttributeKey) string { if v.Type == v3.AttributeKeyTypeTag { - return "attributes." + v.Key + return "attributes?." + v.Key } else if v.Type == v3.AttributeKeyTypeResource { - return "resources." + v.Key + return "resource?." + v.Key } return v.Key } @@ -41,7 +41,7 @@ func getTypeName(v v3.AttributeKeyType) string { if v == v3.AttributeKeyTypeTag { return "attributes" } else if v == v3.AttributeKeyTypeResource { - return "resources" + return "resource" } return "" }