mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-08-14 20:55:54 +08:00
Fix: pipelines: string ops on missing attribs in pipeline filters should not spam warnings (#4049)
* chore: add test validating collector doesn't spam logs for string ops on missing attributes * fix: pipelines filter: check if attrib is not nil before running string operator * chore: do a nil check for all but == and != ops
This commit is contained in:
parent
feaac39e2a
commit
f5b1d4146f
@ -420,3 +420,65 @@ func TestResourceFiltersWork(t *testing.T) {
|
|||||||
|
|
||||||
require.Equal(result[0].Attributes_string["test"], "test-value")
|
require.Equal(result[0].Attributes_string["test"], "test-value")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestPipelineFilterWithStringOpsShouldNotSpamWarningsIfAttributeIsMissing(t *testing.T) {
|
||||||
|
require := require.New(t)
|
||||||
|
|
||||||
|
for _, operator := range []v3.FilterOperator{
|
||||||
|
v3.FilterOperatorContains,
|
||||||
|
v3.FilterOperatorNotContains,
|
||||||
|
v3.FilterOperatorRegex,
|
||||||
|
v3.FilterOperatorNotRegex,
|
||||||
|
} {
|
||||||
|
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: 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{},
|
||||||
|
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))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -64,6 +64,11 @@ func Parse(filters *v3.FilterSet) (string, error) {
|
|||||||
filter = fmt.Sprintf("%s %s %s", exprFormattedValue(v.Key.Key), logOperatorsToExpr[v.Operator], getTypeName(v.Key.Type))
|
filter = fmt.Sprintf("%s %s %s", exprFormattedValue(v.Key.Key), logOperatorsToExpr[v.Operator], getTypeName(v.Key.Type))
|
||||||
default:
|
default:
|
||||||
filter = fmt.Sprintf("%s %s %s", name, logOperatorsToExpr[v.Operator], exprFormattedValue(v.Value))
|
filter = fmt.Sprintf("%s %s %s", name, logOperatorsToExpr[v.Operator], exprFormattedValue(v.Value))
|
||||||
|
|
||||||
|
// Avoid running operators on nil values
|
||||||
|
if v.Operator != v3.FilterOperatorEqual && v.Operator != v3.FilterOperatorNotEqual {
|
||||||
|
filter = fmt.Sprintf("%s != nil && %s", name, filter)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if the filter is a correct expression language
|
// check if the filter is a correct expression language
|
||||||
|
Loading…
x
Reference in New Issue
Block a user