func (r *Rule) Validate() (errs []error) {
	if r.Record != "" && r.Alert != "" {
		errs = append(errs, errors.Errorf("only one of 'record' and 'alert' must be set"))
	}
	if r.Record == "" && r.Alert == "" {
		errs = append(errs, errors.Errorf("one of 'record' or 'alert' must be set"))
	}

	if r.Expr == "" {
		errs = append(errs, errors.Errorf("field 'expr' must be set in rule"))
	} else if _, err := promql.ParseExpr(r.Expr); err != nil {
		errs = append(errs, errors.Errorf("could not parse expression: %s", err))
	}
	if r.Record != "" {
		if len(r.Annotations) > 0 {
			errs = append(errs, errors.Errorf("invalid field 'annotations' in recording rule"))
		}
		if r.For != 0 {
			errs = append(errs, errors.Errorf("invalid field 'for' in recording rule"))
		}
		if !model.IsValidMetricName(model.LabelValue(r.Record)) {
			errs = append(errs, errors.Errorf("invalid recording rule name: %s", r.Record))
		}
	}

	for k, v := range r.Labels {
		if !model.LabelName(k).IsValid() {
			errs = append(errs, errors.Errorf("invalid label name: %s", k))
		}

		if !model.LabelValue(v).IsValid() {
			errs = append(errs, errors.Errorf("invalid label value: %s", v))
		}
	}

	for k := range r.Annotations {
		if !model.LabelName(k).IsValid() {
			errs = append(errs, errors.Errorf("invalid annotation name: %s", k))
		}
	}

	errs = append(errs, testTemplateParsing(r)...)
	return errs
}
func (r *Rule) Validate() (errs []error) {
	if r.Record != "" && r.Alert != "" {
		errs = append(errs, errors.Errorf("only one of 'record' and 'alert' must be set"))
	}
	if r.Record == "" && r.Alert == "" {
		errs = append(errs, errors.Errorf("one of 'record' or 'alert' must be set"))
	}

	if r.Expr == "" {
		errs = append(errs, errors.Errorf("field 'expr' must be set in rule"))
	} else if _, err := promql.ParseExpr(r.Expr); err != nil {
		errs = append(errs, errors.Errorf("could not parse expression: %s", err))
	}
	if r.Record != "" {
		if len(r.Annotations) > 0 {
			errs = append(errs, errors.Errorf("invalid field 'annotations' in recording rule"))
		}
		if r.For != 0 {
			errs = append(errs, errors.Errorf("invalid field 'for' in recording rule"))
		}
		if !model.IsValidMetricName(model.LabelValue(r.Record)) {
			errs = append(errs, errors.Errorf("invalid recording rule name: %s", r.Record))
		}
	}

	for k, v := range r.Labels {
		if !model.LabelName(k).IsValid() {
			errs = append(errs, errors.Errorf("invalid label name: %s", k))
		}

		if !model.LabelValue(v).IsValid() {
			errs = append(errs, errors.Errorf("invalid label value: %s", v))
		}
	}

	for k := range r.Annotations {
		if !model.LabelName(k).IsValid() {
			errs = append(errs, errors.Errorf("invalid annotation name: %s", k))
		}
	}

	errs = append(errs, testTemplateParsing(r)...)
	return errs
}
func ( r * Rule ) Validate ( ) ( errs [ ] error ) { if r . Record != " " && r . Alert != " " { errs = append ( errs , errors . Errorf ( " " ) ) } if r . Record == " " && r . Alert == " " { errs = append ( errs , errors . Errorf ( " " ) ) } if r . Expr == " " { errs = append ( errs , errors . Errorf ( " " ) ) } else if _ , err := promql . ParseExpr ( r . Expr ) ; err != nil { errs = append ( errs , errors . Errorf ( " " , err ) ) } if r . Record != " " { if len ( r . Annotations ) > 0 { errs = append ( errs , errors . Errorf ( " " ) ) } if r . For != 0 { errs = append ( errs , errors . Errorf ( " " ) ) } if ! model . IsValidMetricName ( model . LabelValue ( r . Record ) ) { errs = append ( errs , errors . Errorf ( " " , r . Record ) ) } } for k , v := range r . Labels { if ! model . LabelName ( k ) . IsValid ( ) { errs = append ( errs , errors . Errorf ( " " , k ) ) } if ! model . LabelValue ( v ) . IsValid ( ) { errs = append ( errs , errors . Errorf ( " " , v ) ) } } for k := range r . Annotations { if ! model . LabelName ( k ) . IsValid ( ) { errs = append ( errs , errors . Errorf ( " " , k ) ) } } errs = append ( errs , testTemplateParsing ( r ) ... ) return errs }
// Validate the rule and return a list of encountered errors.
Validate the rule and return a list of encountered errors .