From 2728ddd25509831af3782f833de200d8d2ad4dce Mon Sep 17 00:00:00 2001 From: Raj Kamal Singh <1133322+raj-k-singh@users.noreply.github.com> Date: Mon, 14 Oct 2024 11:24:42 +0530 Subject: [PATCH] Fix: log pipelines generates bad config if first op is disabled (#6174) * chore: add test reproducing bad config generation when first pipeline op is disabled * fix: logs pipelines: set router output to first enabled operator --- .../collector_config_test.go | 73 +++++++++++++++++++ .../app/logparsingpipeline/pipelineBuilder.go | 2 +- 2 files changed, 74 insertions(+), 1 deletion(-) diff --git a/pkg/query-service/app/logparsingpipeline/collector_config_test.go b/pkg/query-service/app/logparsingpipeline/collector_config_test.go index 2f2d898416..5cc15b2aa2 100644 --- a/pkg/query-service/app/logparsingpipeline/collector_config_test.go +++ b/pkg/query-service/app/logparsingpipeline/collector_config_test.go @@ -1,12 +1,14 @@ package logparsingpipeline import ( + "context" "fmt" "testing" . "github.com/smartystreets/goconvey/convey" "github.com/stretchr/testify/require" "go.signoz.io/signoz/pkg/query-service/constants" + "go.signoz.io/signoz/pkg/query-service/model" v3 "go.signoz.io/signoz/pkg/query-service/model/v3" "gopkg.in/yaml.v3" ) @@ -293,3 +295,74 @@ func TestPipelineAliasCollisionsDontResultInDuplicateCollectorProcessors(t *test ) } + +func TestPipelineRouterWorksEvenIfFirstOpIsDisabled(t *testing.T) { + require := require.New(t) + + testPipelines := []Pipeline{ + { + OrderId: 1, + Name: "pipeline1", + Alias: "pipeline1", + Enabled: true, + Filter: &v3.FilterSet{ + Operator: "AND", + Items: []v3.FilterItem{ + { + Key: v3.AttributeKey{ + Key: "method", + DataType: v3.AttributeKeyDataTypeString, + Type: v3.AttributeKeyTypeTag, + }, + Operator: "=", + Value: "GET", + }, + }, + }, + Config: []PipelineOperator{ + { + OrderId: 1, + ID: "add", + Type: "add", + Field: "attributes.test", + Value: "val", + Enabled: false, + Name: "test add", + }, + { + OrderId: 2, + ID: "add2", + Type: "add", + Field: "attributes.test2", + Value: "val2", + Enabled: true, + Name: "test add 2", + }, + }, + }, + } + + result, collectorWarnAndErrorLogs, err := SimulatePipelinesProcessing( + context.Background(), + testPipelines, + []model.SignozLog{ + makeTestSignozLog( + "test log body", + map[string]any{ + "method": "GET", + }, + ), + }, + ) + + require.Nil(err) + require.Equal(0, len(collectorWarnAndErrorLogs)) + require.Equal(1, len(result)) + + require.Equal( + map[string]string{ + "method": "GET", + "test2": "val2", + }, result[0].Attributes_string, + ) +} diff --git a/pkg/query-service/app/logparsingpipeline/pipelineBuilder.go b/pkg/query-service/app/logparsingpipeline/pipelineBuilder.go index 5dd6406a79..4f7963c10a 100644 --- a/pkg/query-service/app/logparsingpipeline/pipelineBuilder.go +++ b/pkg/query-service/app/logparsingpipeline/pipelineBuilder.go @@ -49,7 +49,7 @@ func PreparePipelineProcessor(pipelines []Pipeline) (map[string]interface{}, []s Type: "router", Routes: &[]Route{ { - Output: v.Config[0].ID, + Output: operators[0].ID, Expr: filterExpr, }, },