|
|
|
@ -3,6 +3,7 @@ package ruler |
|
|
|
|
import ( |
|
|
|
|
"bytes" |
|
|
|
|
"context" |
|
|
|
|
"fmt" |
|
|
|
|
"io/ioutil" |
|
|
|
|
"strings" |
|
|
|
|
"time" |
|
|
|
@ -227,7 +228,7 @@ func ValidateGroups(grps ...rulefmt.RuleGroup) (errs []error) { |
|
|
|
|
set[g.Name] = struct{}{} |
|
|
|
|
|
|
|
|
|
for _, r := range g.Rules { |
|
|
|
|
if err := validateRuleNode(&r); err != nil { |
|
|
|
|
if err := validateRuleNode(&r, g.Name); err != nil { |
|
|
|
|
errs = append(errs, err) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -236,7 +237,7 @@ func ValidateGroups(grps ...rulefmt.RuleGroup) (errs []error) { |
|
|
|
|
return errs |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func validateRuleNode(r *rulefmt.RuleNode) error { |
|
|
|
|
func validateRuleNode(r *rulefmt.RuleNode, groupName string) error { |
|
|
|
|
if r.Record.Value != "" && r.Alert.Value != "" { |
|
|
|
|
return errors.Errorf("only one of 'record' and 'alert' must be set") |
|
|
|
|
} |
|
|
|
@ -252,7 +253,7 @@ func validateRuleNode(r *rulefmt.RuleNode) error { |
|
|
|
|
if r.Expr.Value == "" { |
|
|
|
|
return errors.Errorf("field 'expr' must be set in rule") |
|
|
|
|
} else if _, err := logql.ParseExpr(r.Expr.Value); err != nil { |
|
|
|
|
return errors.Wrapf(err, "could not parse expression") |
|
|
|
|
return errors.Wrapf(err, fmt.Sprintf("could not parse expression for record '%s' in group '%s'", r.Record.Value, groupName)) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if r.Record.Value != "" { |
|
|
|
|