diff --git a/pkg/services/ngalert/api/compat/compat.go b/pkg/services/ngalert/api/compat/compat.go index df1f34fc428..bf676ba2eae 100644 --- a/pkg/services/ngalert/api/compat/compat.go +++ b/pkg/services/ngalert/api/compat/compat.go @@ -207,20 +207,19 @@ func AlertRuleExportFromAlertRule(rule models.AlertRule) (definitions.AlertRuleE } result := definitions.AlertRuleExport{ - UID: rule.UID, - Title: rule.Title, - For: model.Duration(rule.For), - KeepFiringFor: model.Duration(rule.KeepFiringFor), - Condition: cPtr, - Data: data, - DashboardUID: rule.DashboardUID, - PanelID: rule.PanelID, - NoDataState: ndsPtr, - ExecErrState: eesPtr, - IsPaused: rule.IsPaused, - NotificationSettings: AlertRuleNotificationSettingsExportFromNotificationSettings(rule.NotificationSettings), - Record: AlertRuleRecordExportFromRecord(rule.Record), - MissingSeriesEvalsToResolve: rule.MissingSeriesEvalsToResolve, + UID: rule.UID, + Title: rule.Title, + For: model.Duration(rule.For), + KeepFiringFor: model.Duration(rule.KeepFiringFor), + Condition: cPtr, + Data: data, + DashboardUID: rule.DashboardUID, + PanelID: rule.PanelID, + NoDataState: ndsPtr, + ExecErrState: eesPtr, + IsPaused: rule.IsPaused, + NotificationSettings: AlertRuleNotificationSettingsExportFromNotificationSettings(rule.NotificationSettings), + Record: AlertRuleRecordExportFromRecord(rule.Record), } if rule.For.Seconds() > 0 { result.ForString = util.Pointer(model.Duration(rule.For).String()) @@ -234,6 +233,9 @@ func AlertRuleExportFromAlertRule(rule models.AlertRule) (definitions.AlertRuleE if rule.Labels != nil { result.Labels = &rule.Labels } + if rule.MissingSeriesEvalsToResolve != nil && *rule.MissingSeriesEvalsToResolve != -1 { + result.MissingSeriesEvalsToResolve = rule.MissingSeriesEvalsToResolve + } return result, nil } diff --git a/pkg/services/ngalert/api/test-data/post-rulegroup-101-export.hcl b/pkg/services/ngalert/api/test-data/post-rulegroup-101-export.hcl index b50b0d3dde7..38c72f77601 100644 --- a/pkg/services/ngalert/api/test-data/post-rulegroup-101-export.hcl +++ b/pkg/services/ngalert/api/test-data/post-rulegroup-101-export.hcl @@ -87,6 +87,46 @@ resource "grafana_rule_group" "rule_group_d3e8424bfbf66bc3" { mute_timings = ["test-mute"] } } + rule { + name = "alert with uid" + condition = "B" + + data { + ref_id = "A" + + relative_time_range { + from = 18000 + to = 10800 + } + + datasource_uid = "000000004" + model = "{\"alias\":\"just-testing\",\"intervalMs\":1000,\"maxDataPoints\":100,\"orgId\":0,\"refId\":\"A\",\"scenarioId\":\"csv_metric_values\",\"stringInput\":\"1,20,90,30,5,0\"}" + } + data { + ref_id = "B" + + relative_time_range { + from = 18000 + to = 10800 + } + + datasource_uid = "__expr__" + model = "{\"expression\":\"$A\",\"intervalMs\":2000,\"maxDataPoints\":200,\"orgId\":0,\"reducer\":\"mean\",\"refId\":\"B\",\"type\":\"reduce\"}" + } + + no_data_state = "NoData" + exec_err_state = "Alerting" + is_paused = false + + notification_settings { + contact_point = "Test-Receiver" + group_by = ["alertname", "grafana_folder", "test"] + group_wait = "1s" + group_interval = "5s" + repeat_interval = "5m" + mute_timings = ["test-mute"] + } + } rule { name = "recording rule" diff --git a/pkg/services/ngalert/api/test-data/post-rulegroup-101-export.json b/pkg/services/ngalert/api/test-data/post-rulegroup-101-export.json index 9c814c758d7..856c6648658 100644 --- a/pkg/services/ngalert/api/test-data/post-rulegroup-101-export.json +++ b/pkg/services/ngalert/api/test-data/post-rulegroup-101-export.json @@ -118,6 +118,60 @@ "mute_time_intervals":["test-mute"] } }, + { + "title": "alert with uid", + "uid": "alert-with-uid", + "condition": "B", + "data": [ + { + "refId": "A", + "relativeTimeRange": { + "from": 18000, + "to": 10800 + }, + "datasourceUid": "000000004", + "model": { + "alias": "just-testing", + "intervalMs": 1000, + "maxDataPoints": 100, + "orgId": 0, + "refId": "A", + "scenarioId": "csv_metric_values", + "stringInput": "1,20,90,30,5,0" + } + }, + { + "refId": "B", + "relativeTimeRange": { + "from": 18000, + "to": 10800 + }, + "datasourceUid": "__expr__", + "model": { + "expression": "$A", + "intervalMs": 2000, + "maxDataPoints": 200, + "orgId": 0, + "reducer": "mean", + "refId": "B", + "type": "reduce" + } + } + ], + "noDataState": "NoData", + "execErrState": "Alerting", + "isPaused": false, + "for": "0s", + "keepFiringFor": "0s", + "notification_settings":{ + "receiver":"Test-Receiver", + "group_by":["alertname","grafana_folder","test"], + "group_wait":"1s", + "group_interval":"5s", + "repeat_interval":"5m", + "mute_time_intervals":["test-mute"] + } + }, { "title": "recording rule", "data": [ diff --git a/pkg/services/ngalert/api/test-data/post-rulegroup-101-export.yaml b/pkg/services/ngalert/api/test-data/post-rulegroup-101-export.yaml index c4a1f9edf12..f628fff245d 100644 --- a/pkg/services/ngalert/api/test-data/post-rulegroup-101-export.yaml +++ b/pkg/services/ngalert/api/test-data/post-rulegroup-101-export.yaml @@ -93,6 +93,52 @@ groups: repeat_interval: 5m mute_time_intervals: - test-mute + - uid: alert-with-uid + title: alert with uid + condition: B + data: + - refId: A + relativeTimeRange: + from: 18000 + to: 10800 + datasourceUid: "000000004" + model: + alias: just-testing + intervalMs: 1000 + maxDataPoints: 100 + orgId: 0 + refId: A + scenarioId: csv_metric_values + stringInput: 1,20,90,30,5,0 + - refId: B + relativeTimeRange: + from: 18000 + to: 10800 + datasourceUid: __expr__ + model: + expression: $A + intervalMs: 2000 + maxDataPoints: 200 + orgId: 0 + reducer: mean + refId: B + type: reduce + noDataState: NoData + execErrState: Alerting + for: 0s + keepFiringFor: 0s + isPaused: false + notification_settings: + receiver: Test-Receiver + group_by: + - alertname + - grafana_folder + - test + group_wait: 1s + group_interval: 5s + repeat_interval: 5m + mute_time_intervals: + - test-mute - title: recording rule data: - refId: query diff --git a/pkg/services/ngalert/api/test-data/post-rulegroup-101.json b/pkg/services/ngalert/api/test-data/post-rulegroup-101.json index a340dbd189c..d1739dfe155 100644 --- a/pkg/services/ngalert/api/test-data/post-rulegroup-101.json +++ b/pkg/services/ngalert/api/test-data/post-rulegroup-101.json @@ -120,6 +120,61 @@ } } }, + { + "grafana_alert": { + "title": "alert with uid", + "uid": "alert-with-uid", + "condition": "B", + "data": [ + { + "refId": "A", + "queryType": "", + "relativeTimeRange": { + "from": 18000, + "to": 10800 + }, + "datasourceUid": "000000004", + "model": { + "alias": "just-testing", + "intervalMs": 1000, + "maxDataPoints": 100, + "orgId": 0, + "refId": "A", + "scenarioId": "csv_metric_values", + "stringInput": "1,20,90,30,5,0" + } + }, + { + "refId": "B", + "queryType": "", + "relativeTimeRange": { + "from": 18000, + "to": 10800 + }, + "datasourceUid": "__expr__", + "model": { + "expression": "$A", + "intervalMs": 2000, + "maxDataPoints": 200, + "orgId": 0, + "reducer": "mean", + "refId": "B", + "type": "reduce" + } + } + ], + "no_data_state": "NoData", + "exec_err_state": "Alerting", + "notification_settings":{ + "receiver":"Test-Receiver", + "group_by":["alertname","grafana_folder","test"], + "group_wait":"1s", + "group_interval":"5s", + "repeat_interval":"5m", + "mute_time_intervals":["test-mute"] + } + } + }, { "grafana_alert": { "title": "recording rule",