diff --git a/pkg/parser/interface.go b/pkg/parser/interface.go index cdcf2f2d..ab04be30 100644 --- a/pkg/parser/interface.go +++ b/pkg/parser/interface.go @@ -24,6 +24,8 @@ const ( EtConst // EtString is a const for 'String' type expression EtString + // EtNil is a const for 'None' type expression + EtNil ) var ( diff --git a/pkg/parser/internal.go b/pkg/parser/internal.go index 8635d3a0..8b6d29fd 100644 --- a/pkg/parser/internal.go +++ b/pkg/parser/internal.go @@ -22,6 +22,9 @@ func (e *expr) getNamedArg(name string) *expr { } func (e *expr) doGetFloatArg() (float64, error) { + if e.etype == EtNil { + return 0, ErrBadType + } if e.etype != EtConst { return 0, ErrBadType } @@ -30,6 +33,9 @@ func (e *expr) doGetFloatArg() (float64, error) { } func (e *expr) doGetStringArg() (string, error) { + if e.etype == EtNil { + return "", nil + } if e.etype != EtString { return "", ErrBadType } diff --git a/pkg/parser/parser.go b/pkg/parser/parser.go index c123a95a..02c3acbf 100644 --- a/pkg/parser/parser.go +++ b/pkg/parser/parser.go @@ -373,6 +373,11 @@ func parseExprWithoutPipe(e string) (Expr, string, error) { if strings.ToLower(name) == "false" || strings.ToLower(name) == "true" { return &expr{valStr: name, etype: EtString, target: name}, e, nil } + //check for none arg explicitly + if strings.EqualFold(name, "none") { + return &expr{valStr: "", etype: EtNil, target: "none"}, e, nil + } + if name == "" { return nil, e, ErrMissingArgument } diff --git a/pkg/parser/parser_test.go b/pkg/parser/parser_test.go index 29cd51a5..bbce1a71 100644 --- a/pkg/parser/parser_test.go +++ b/pkg/parser/parser_test.go @@ -198,6 +198,23 @@ func TestParseExpr(t *testing.T) { argString: "metric, key=true", }, }, + { + s: "None", + e: &expr{target: "none", etype: EtNil}, + }, + { + s: "asPercent(metric, None, 1)", + e: &expr{ + target: "asPercent", + etype: EtFunc, + args: []*expr{ + {target: "metric"}, + {target: "none", etype: EtNil}, + {val: 1, etype: EtConst}, + }, + argString: "metric, None, 1", + }, + }, { s: "func(metric, key=1)", e: &expr{