fix expr debugger when no variable is present
@@ -7,6 +7,7 @@ import (
"github.com/antonmedv/expr/parser"
"github.com/sirupsen/logrus"
+ log "github.com/sirupsen/logrus"
"github.com/antonmedv/expr"
"github.com/antonmedv/expr/ast"
@@ -59,26 +60,38 @@ func (v *visitor) Build(filter string, exprEnv expr.Option) (*ExprDebugger, erro
ret := &ExprDebugger{
filter: filter,
}
+ if filter == "" {
+ log.Debugf("unable to create expr debugger with empty filter")
+ return &ExprDebugger{}, nil
+ }
v.newVar = false
tree, err := parser.Parse(filter)
if err != nil {
return nil, err
}
ast.Walk(&tree.Node, v)
+ if v.currentID != "" && len(v.properties) > 0 { // if its a variable with property (eg. evt.Line.Labels)
fullVar := fmt.Sprintf("%s.%s", v.currentID, strings.Join(v.properties, "."))
v.vars = append(v.vars, fullVar)
+ } else if v.currentID != "" && len(v.properties) == 0 { // if it's a variable without property
+ fullVar := v.currentID
+ v.vars = append(v.vars, fullVar)
+ } else {
+ log.Debugf("no variable in filter : '%s'", filter)
+ }
v.properties = []string{}
v.currentID = ""
for _, variable := range v.vars {
debugFilter, err := expr.Compile(variable, exprEnv)
+ if err != nil {
+ return ret, fmt.Errorf("compilation of variable '%s' failed: %v", variable, err)
+ }
tmpExpression := &expression{
variable,
debugFilter,
}
expressions = append(expressions, tmpExpression)
- if err != nil {
- return nil, fmt.Errorf("compilation of variable '%s' failed: %v", variable, err)
- }
+
}
ret.expression = expressions
return ret, nil
@@ -101,6 +114,10 @@ Run display the content of each variable of a filter by evaluating them with exp
again the expr environment given in parameter
*/
func (e *ExprDebugger) Run(logger *logrus.Entry, filterResult bool, exprEnv map[string]interface{}) {
+ if len(e.expression) == 0 {
+ logger.Debugf("no variable to eval for filter '%s'", e.filter)
+ return
+ }
logger.Debugf("eval(%s) = %s", e.filter, strings.ToUpper(strconv.FormatBool(filterResult)))
logger.Debugf("eval variables:")
for _, expression := range e.expression {
