Alerting: Add metadata field with editor_settings to alert rule (#93245)
This commit is contained in:
@@ -790,7 +790,12 @@ func TestIntegrationDeleteFolderWithRules(t *testing.T) {
|
||||
"namespace_uid": %q,
|
||||
"rule_group": "arulegroup",
|
||||
"no_data_state": "NoData",
|
||||
"exec_err_state": "Alerting"
|
||||
"exec_err_state": "Alerting",
|
||||
"metadata": {
|
||||
"editor_settings": {
|
||||
"simplified_query_and_expressions_section": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -1268,7 +1273,12 @@ func TestIntegrationAlertRuleCRUD(t *testing.T) {
|
||||
"namespace_uid":"nsuid",
|
||||
"rule_group":"arulegroup",
|
||||
"no_data_state":"NoData",
|
||||
"exec_err_state":"Alerting"
|
||||
"exec_err_state":"Alerting",
|
||||
"metadata": {
|
||||
"editor_settings": {
|
||||
"simplified_query_and_expressions_section": false
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -1304,7 +1314,12 @@ func TestIntegrationAlertRuleCRUD(t *testing.T) {
|
||||
"namespace_uid":"nsuid",
|
||||
"rule_group":"arulegroup",
|
||||
"no_data_state":"Alerting",
|
||||
"exec_err_state":"Alerting"
|
||||
"exec_err_state":"Alerting",
|
||||
"metadata": {
|
||||
"editor_settings": {
|
||||
"simplified_query_and_expressions_section": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -1612,7 +1627,12 @@ func TestIntegrationAlertRuleCRUD(t *testing.T) {
|
||||
"namespace_uid":"nsuid",
|
||||
"rule_group":"arulegroup",
|
||||
"no_data_state":"Alerting",
|
||||
"exec_err_state":"Alerting"
|
||||
"exec_err_state":"Alerting",
|
||||
"metadata": {
|
||||
"editor_settings": {
|
||||
"simplified_query_and_expressions_section": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -1721,8 +1741,13 @@ func TestIntegrationAlertRuleCRUD(t *testing.T) {
|
||||
"namespace_uid":"nsuid",
|
||||
"rule_group":"arulegroup",
|
||||
"no_data_state":"Alerting",
|
||||
"exec_err_state":"Alerting"
|
||||
}
|
||||
"exec_err_state":"Alerting",
|
||||
"metadata": {
|
||||
"editor_settings": {
|
||||
"simplified_query_and_expressions_section": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1809,8 +1834,13 @@ func TestIntegrationAlertRuleCRUD(t *testing.T) {
|
||||
"namespace_uid":"nsuid",
|
||||
"rule_group":"arulegroup",
|
||||
"no_data_state":"Alerting",
|
||||
"exec_err_state":"Alerting"
|
||||
}
|
||||
"exec_err_state":"Alerting",
|
||||
"metadata": {
|
||||
"editor_settings": {
|
||||
"simplified_query_and_expressions_section": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -2336,8 +2366,13 @@ func TestIntegrationQuota(t *testing.T) {
|
||||
"namespace_uid":"nsuid",
|
||||
"rule_group":"arulegroup",
|
||||
"no_data_state":"NoData",
|
||||
"exec_err_state":"Alerting"
|
||||
}
|
||||
"exec_err_state":"Alerting",
|
||||
"metadata": {
|
||||
"editor_settings": {
|
||||
"simplified_query_and_expressions_section": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -798,6 +798,115 @@ func TestAlertRulePostExport(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
func TestIntegrationAlertRuleEditorSettings(t *testing.T) {
|
||||
testinfra.SQLiteIntegrationTest(t)
|
||||
|
||||
const folderName = "folder1"
|
||||
const groupName = "test-group"
|
||||
|
||||
// Setup Grafana and its Database
|
||||
dir, path := testinfra.CreateGrafDir(t, testinfra.GrafanaOpts{
|
||||
DisableLegacyAlerting: true,
|
||||
EnableUnifiedAlerting: true,
|
||||
EnableQuota: true,
|
||||
DisableAnonymous: true,
|
||||
ViewersCanEdit: true,
|
||||
AppModeProduction: true,
|
||||
})
|
||||
|
||||
grafanaListedAddr, env := testinfra.StartGrafanaEnv(t, dir, path)
|
||||
apiClient := newAlertingApiClient(grafanaListedAddr, "admin", "admin")
|
||||
createUser(t, env.SQLStore, env.Cfg, user.CreateUserCommand{
|
||||
DefaultOrgRole: string(org.RoleAdmin),
|
||||
Password: "admin",
|
||||
Login: "admin",
|
||||
})
|
||||
apiClient.CreateFolder(t, folderName, folderName)
|
||||
|
||||
createAlertInGrafana := func(metadata *apimodels.AlertRuleMetadata) apimodels.GettableRuleGroupConfig {
|
||||
interval, err := model.ParseDuration("1m")
|
||||
require.NoError(t, err)
|
||||
alertRule := apimodels.PostableExtendedRuleNode{
|
||||
ApiRuleNode: &apimodels.ApiRuleNode{
|
||||
For: &interval,
|
||||
Labels: map[string]string{"label1": "val1"},
|
||||
Annotations: map[string]string{"annotation1": "val1"},
|
||||
},
|
||||
GrafanaManagedAlert: &apimodels.PostableGrafanaRule{
|
||||
Title: "AlwaysFiring",
|
||||
Condition: "A",
|
||||
Data: []apimodels.AlertQuery{
|
||||
{
|
||||
RefID: "A",
|
||||
RelativeTimeRange: apimodels.RelativeTimeRange{
|
||||
From: apimodels.Duration(time.Duration(5) * time.Hour),
|
||||
To: apimodels.Duration(time.Duration(3) * time.Hour),
|
||||
},
|
||||
DatasourceUID: expr.DatasourceUID,
|
||||
Model: json.RawMessage(`{
|
||||
"type": "math",
|
||||
"expression": "2 + 3 > 1"
|
||||
}`),
|
||||
},
|
||||
},
|
||||
Metadata: metadata,
|
||||
},
|
||||
}
|
||||
rules := apimodels.PostableRuleGroupConfig{
|
||||
Name: groupName,
|
||||
Rules: []apimodels.PostableExtendedRuleNode{
|
||||
alertRule,
|
||||
},
|
||||
}
|
||||
|
||||
respModel, status, _ := apiClient.PostRulesGroupWithStatus(t, folderName, &rules)
|
||||
assert.Equal(t, http.StatusAccepted, status)
|
||||
require.Len(t, respModel.Created, 1)
|
||||
|
||||
createdRuleGroup := apiClient.GetRulesGroup(t, folderName, rules.Name).GettableRuleGroupConfig
|
||||
require.Len(t, createdRuleGroup.Rules, 1)
|
||||
|
||||
expectedMetadata := alertRule.GrafanaManagedAlert.Metadata
|
||||
if metadata == nil {
|
||||
expectedMetadata = &apimodels.AlertRuleMetadata{
|
||||
EditorSettings: apimodels.AlertRuleEditorSettings{
|
||||
SimplifiedQueryAndExpressionsSection: false,
|
||||
},
|
||||
}
|
||||
}
|
||||
require.Equal(t, expectedMetadata, createdRuleGroup.Rules[0].GrafanaManagedAlert.Metadata)
|
||||
|
||||
return createdRuleGroup
|
||||
}
|
||||
|
||||
t.Run("set simplified query editor in editor settings", func(t *testing.T) {
|
||||
metadata := &apimodels.AlertRuleMetadata{
|
||||
EditorSettings: apimodels.AlertRuleEditorSettings{
|
||||
SimplifiedQueryAndExpressionsSection: false,
|
||||
},
|
||||
}
|
||||
createdRuleGroup := createAlertInGrafana(metadata)
|
||||
|
||||
rulesWithUID := convertGettableRuleGroupToPostable(createdRuleGroup)
|
||||
rulesWithUID.Rules[0].GrafanaManagedAlert.Metadata.EditorSettings.SimplifiedQueryAndExpressionsSection = true
|
||||
|
||||
_, status, _ := apiClient.PostRulesGroupWithStatus(t, folderName, &rulesWithUID)
|
||||
assert.Equal(t, http.StatusAccepted, status)
|
||||
|
||||
updatedRuleGroup := apiClient.GetRulesGroup(t, folderName, groupName).GettableRuleGroupConfig
|
||||
require.Len(t, updatedRuleGroup.Rules, 1)
|
||||
require.False(t, false, updatedRuleGroup.Rules[0].GrafanaManagedAlert.Metadata.EditorSettings.SimplifiedQueryAndExpressionsSection)
|
||||
})
|
||||
|
||||
t.Run("post alert without metadata", func(t *testing.T) {
|
||||
createAlertInGrafana(nil)
|
||||
|
||||
createdRuleGroup := apiClient.GetRulesGroup(t, folderName, groupName).GettableRuleGroupConfig
|
||||
require.Len(t, createdRuleGroup.Rules, 1)
|
||||
require.False(t, false, createdRuleGroup.Rules[0].GrafanaManagedAlert.Metadata.EditorSettings.SimplifiedQueryAndExpressionsSection)
|
||||
})
|
||||
}
|
||||
|
||||
func TestIntegrationAlertRuleConflictingTitle(t *testing.T) {
|
||||
testinfra.SQLiteIntegrationTest(t)
|
||||
|
||||
@@ -1021,7 +1130,12 @@ func TestIntegrationRulerRulesFilterByDashboard(t *testing.T) {
|
||||
"namespace_uid": "nsuid",
|
||||
"rule_group": "anotherrulegroup",
|
||||
"no_data_state": "NoData",
|
||||
"exec_err_state": "Alerting"
|
||||
"exec_err_state": "Alerting",
|
||||
"metadata": {
|
||||
"editor_settings": {
|
||||
"simplified_query_and_expressions_section": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}, {
|
||||
"expr": "",
|
||||
@@ -1054,7 +1168,12 @@ func TestIntegrationRulerRulesFilterByDashboard(t *testing.T) {
|
||||
"namespace_uid": "nsuid",
|
||||
"rule_group": "anotherrulegroup",
|
||||
"no_data_state": "Alerting",
|
||||
"exec_err_state": "Alerting"
|
||||
"exec_err_state": "Alerting",
|
||||
"metadata": {
|
||||
"editor_settings": {
|
||||
"simplified_query_and_expressions_section": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}]
|
||||
}]
|
||||
@@ -1099,7 +1218,12 @@ func TestIntegrationRulerRulesFilterByDashboard(t *testing.T) {
|
||||
"namespace_uid": "nsuid",
|
||||
"rule_group": "anotherrulegroup",
|
||||
"no_data_state": "NoData",
|
||||
"exec_err_state": "Alerting"
|
||||
"exec_err_state": "Alerting",
|
||||
"metadata": {
|
||||
"editor_settings": {
|
||||
"simplified_query_and_expressions_section": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}]
|
||||
}]
|
||||
|
||||
@@ -41,7 +41,12 @@
|
||||
"rule_group": "Group1",
|
||||
"no_data_state": "NoData",
|
||||
"exec_err_state": "Alerting",
|
||||
"is_paused": false
|
||||
"is_paused": false,
|
||||
"metadata": {
|
||||
"editor_settings": {
|
||||
"simplified_query_and_expressions_section": false
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -83,8 +88,13 @@
|
||||
"rule_group": "Group1",
|
||||
"no_data_state": "NoData",
|
||||
"exec_err_state": "Alerting",
|
||||
"is_paused": false
|
||||
"is_paused": false,
|
||||
"metadata": {
|
||||
"editor_settings": {
|
||||
"simplified_query_and_expressions_section": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,8 +41,13 @@
|
||||
"rule_group": "Group2",
|
||||
"no_data_state": "NoData",
|
||||
"exec_err_state": "Error",
|
||||
"is_paused": false
|
||||
"is_paused": false,
|
||||
"metadata": {
|
||||
"editor_settings": {
|
||||
"simplified_query_and_expressions_section": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,7 +41,12 @@
|
||||
"rule_group": "Group3",
|
||||
"no_data_state": "NoData",
|
||||
"exec_err_state": "Alerting",
|
||||
"is_paused": false
|
||||
"is_paused": false,
|
||||
"metadata": {
|
||||
"editor_settings": {
|
||||
"simplified_query_and_expressions_section": false
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -83,8 +88,13 @@
|
||||
"rule_group": "Group3",
|
||||
"no_data_state": "NoData",
|
||||
"exec_err_state": "Alerting",
|
||||
"is_paused": false
|
||||
"is_paused": false,
|
||||
"metadata": {
|
||||
"editor_settings": {
|
||||
"simplified_query_and_expressions_section": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -233,6 +233,7 @@ func convertGettableGrafanaRuleToPostable(gettable *apimodels.GettableGrafanaRul
|
||||
ExecErrState: gettable.ExecErrState,
|
||||
IsPaused: &gettable.IsPaused,
|
||||
NotificationSettings: gettable.NotificationSettings,
|
||||
Metadata: gettable.Metadata,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user