feat: enhance filter support for JSON log body

This commit is contained in:
Piyush Singariya 2025-06-03 15:25:06 +05:30
parent 6a629623bc
commit c29d1b766a
2 changed files with 10 additions and 6 deletions

View File

@ -131,10 +131,8 @@ func getOperators(ops []pipelinetypes.PipelineOperator) ([]pipelinetypes.Pipelin
)
}
operator.If = fmt.Sprintf(
`%s && (
(typeOf(%s) == "string" && %s matches "^\\s*{.*}\\s*$" ) ||
typeOf(%s) == "map[string]any"
)`, parseFromNotNilCheck, operator.ParseFrom, operator.ParseFrom, operator.ParseFrom,
`%s && ((type(%s) == "string" && %s matches "^\\s*{.*}\\s*$" ) || type(%s) == "map")`,
parseFromNotNilCheck, operator.ParseFrom, operator.ParseFrom, operator.ParseFrom,
)
} else if operator.Type == "add" {
if strings.HasPrefix(operator.Value, "EXPR(") && strings.HasSuffix(operator.Value, ")") {

View File

@ -63,8 +63,14 @@ func Parse(filters *v3.FilterSet) (string, error) {
// filter = fmt.Sprintf("%s %s list%s", name, logOperatorsToExpr[v.Operator], exprFormattedValue(v.Value))
case v3.FilterOperatorExists, v3.FilterOperatorNotExists:
filter = fmt.Sprintf("%s %s %s", exprFormattedValue(v.Key.Key), logOperatorsToExpr[v.Operator], getTypeName(v.Key.Type))
// accustom log filters like `body.log.message EXISTS` into EXPR language
// where User is attempting to check for keys present in JSON log body
key, found := strings.CutPrefix(v.Key.Key, "body.")
if found {
filter = fmt.Sprintf("%s %s %s", exprFormattedValue(key), logOperatorsToExpr[v.Operator], "fromJSON(body)")
} else {
filter = fmt.Sprintf("%s %s %s", exprFormattedValue(v.Key.Key), logOperatorsToExpr[v.Operator], getTypeName(v.Key.Type))
}
default:
filter = fmt.Sprintf("%s %s %s", name, logOperatorsToExpr[v.Operator], exprFormattedValue(v.Value))