Alerting: Add metadata field with editor_settings to alert rule (#93245)

This commit is contained in:
Alexander Akhmetov
2024-09-19 16:43:41 +02:00
committed by GitHub
parent 4d1adf9db4
commit 9f5b05f936
18 changed files with 309 additions and 22 deletions
+45 -10
View File
@@ -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
}
}
}
}
]
}
+127 -3
View File
@@ -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
}
}
}
}
]
}
}
+1
View File
@@ -233,6 +233,7 @@ func convertGettableGrafanaRuleToPostable(gettable *apimodels.GettableGrafanaRul
ExecErrState: gettable.ExecErrState,
IsPaused: &gettable.IsPaused,
NotificationSettings: gettable.NotificationSettings,
Metadata: gettable.Metadata,
}
}