mirror of https://github.com/grafana/grafana.git
Alerting Provisioning: Don't error on recording rules without conditions (#109410)
* Don't error on recording rules without conditions The provisioning model doesn't include conditions for recording rules. Only return an error for a missing condition if the rule isn't a recording rule. Also, added a test case to show the failure. This resolves #109398 * Run `go fmt` to fix whitespace issues
This commit is contained in:
parent
15ec2f0c17
commit
e414e790f7
|
@ -151,10 +151,6 @@ func (rule *AlertRuleV1) mapToModel(orgID int64) (models.AlertRule, error) {
|
||||||
noDataState = models.NoData
|
noDataState = models.NoData
|
||||||
}
|
}
|
||||||
alertRule.NoDataState = noDataState
|
alertRule.NoDataState = noDataState
|
||||||
alertRule.Condition = rule.Condition.Value()
|
|
||||||
if alertRule.Condition == "" {
|
|
||||||
return models.AlertRule{}, fmt.Errorf("rule '%s' failed to parse: no condition set", alertRule.Title)
|
|
||||||
}
|
|
||||||
alertRule.Annotations = rule.Annotations.Raw
|
alertRule.Annotations = rule.Annotations.Raw
|
||||||
alertRule.Labels = rule.Labels.Value()
|
alertRule.Labels = rule.Labels.Value()
|
||||||
for _, queryV1 := range rule.Data {
|
for _, queryV1 := range rule.Data {
|
||||||
|
@ -182,6 +178,10 @@ func (rule *AlertRuleV1) mapToModel(orgID int64) (models.AlertRule, error) {
|
||||||
}
|
}
|
||||||
alertRule.Record = &record
|
alertRule.Record = &record
|
||||||
}
|
}
|
||||||
|
alertRule.Condition = rule.Condition.Value()
|
||||||
|
if alertRule.Condition == "" && alertRule.Record == nil {
|
||||||
|
return models.AlertRule{}, fmt.Errorf("rule '%s' failed to parse: no condition set", alertRule.Title)
|
||||||
|
}
|
||||||
return alertRule, nil
|
return alertRule, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -202,6 +202,14 @@ func TestRules(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestRecordingRules(t *testing.T) {
|
||||||
|
t.Run("a valid rule should not error", func(t *testing.T) {
|
||||||
|
rule := validRecordingRuleV1(t)
|
||||||
|
_, err := rule.mapToModel(1)
|
||||||
|
require.NoError(t, err)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func TestNotificationsSettingsV1MapToModel(t *testing.T) {
|
func TestNotificationsSettingsV1MapToModel(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
|
@ -347,6 +355,37 @@ func validRuleV1(t *testing.T) AlertRuleV1 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func validRecordingRuleV1(t *testing.T) AlertRuleV1 {
|
||||||
|
t.Helper()
|
||||||
|
var (
|
||||||
|
title values.StringValue
|
||||||
|
uid values.StringValue
|
||||||
|
forDuration values.StringValue
|
||||||
|
metric values.StringValue
|
||||||
|
from values.StringValue
|
||||||
|
)
|
||||||
|
err := yaml.Unmarshal([]byte("test"), &title)
|
||||||
|
require.NoError(t, err)
|
||||||
|
err = yaml.Unmarshal([]byte("test_uid"), &uid)
|
||||||
|
require.NoError(t, err)
|
||||||
|
err = yaml.Unmarshal([]byte("10s"), &forDuration)
|
||||||
|
require.NoError(t, err)
|
||||||
|
err = yaml.Unmarshal([]byte("test_metric"), &metric)
|
||||||
|
require.NoError(t, err)
|
||||||
|
err = yaml.Unmarshal([]byte("A"), &from)
|
||||||
|
require.NoError(t, err)
|
||||||
|
return AlertRuleV1{
|
||||||
|
Title: title,
|
||||||
|
UID: uid,
|
||||||
|
For: forDuration,
|
||||||
|
Record: &RecordV1{
|
||||||
|
Metric: metric,
|
||||||
|
From: from,
|
||||||
|
},
|
||||||
|
Data: []QueryV1{{}},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func stringToStringValue(s string) values.StringValue {
|
func stringToStringValue(s string) values.StringValue {
|
||||||
result := values.StringValue{}
|
result := values.StringValue{}
|
||||||
err := yaml.Unmarshal([]byte(s), &result)
|
err := yaml.Unmarshal([]byte(s), &result)
|
||||||
|
|
Loading…
Reference in New Issue