From 84da68840060b52faf995ce1dd300a4f0d4673bb Mon Sep 17 00:00:00 2001 From: "Grot (@grafanabot)" <43478413+grafanabot@users.noreply.github.com> Date: Thu, 2 Feb 2023 17:07:06 -0500 Subject: [PATCH] [v9.4.x] Alerting: Pause dash alerts on migration (#62830) Alerting: Pause dash alerts on migration (#62798) * Alerting: Pause dash alerts on migration (cherry picked from commit f49efa6e27b5a39e31e41e39dc416a0185118486) Co-authored-by: George Robinson --- .../sqlstore/migrations/ualert/alert_rule.go | 9 ++++++++ .../migrations/ualert/alert_rule_test.go | 21 +++++++++++++++++++ .../sqlstore/migrations/ualert/testing.go | 2 ++ 3 files changed, 32 insertions(+) diff --git a/pkg/services/sqlstore/migrations/ualert/alert_rule.go b/pkg/services/sqlstore/migrations/ualert/alert_rule.go index 60e3c3ad3c0..c906c0150a9 100644 --- a/pkg/services/sqlstore/migrations/ualert/alert_rule.go +++ b/pkg/services/sqlstore/migrations/ualert/alert_rule.go @@ -37,6 +37,7 @@ type alertRule struct { Updated time.Time Annotations map[string]string Labels map[string]string + IsPaused bool } type alertRuleVersion struct { @@ -61,6 +62,7 @@ type alertRuleVersion struct { For duration Annotations map[string]string Labels map[string]string + IsPaused bool } func (a *alertRule) makeVersion() *alertRuleVersion { @@ -84,6 +86,7 @@ func (a *alertRule) makeVersion() *alertRuleVersion { For: a.For, Annotations: a.Annotations, Labels: map[string]string{}, + IsPaused: a.IsPaused, } } @@ -120,6 +123,11 @@ func (m *migration) makeAlertRule(cond condition, da dashAlert, folderUID string name := normalizeRuleName(da.Name, uid) + isPaused := false + if da.State == "paused" { + isPaused = true + } + ar := &alertRule{ OrgID: da.OrgId, Title: name, // TODO: Make sure all names are unique, make new name on constraint insert error. @@ -135,6 +143,7 @@ func (m *migration) makeAlertRule(cond condition, da dashAlert, folderUID string Annotations: annotations, Labels: lbls, RuleGroupIndex: 1, + IsPaused: isPaused, } ar.NoDataState, err = transNoData(da.ParsedSettings.NoDataState) diff --git a/pkg/services/sqlstore/migrations/ualert/alert_rule_test.go b/pkg/services/sqlstore/migrations/ualert/alert_rule_test.go index 64896d24666..1e730fc8465 100644 --- a/pkg/services/sqlstore/migrations/ualert/alert_rule_test.go +++ b/pkg/services/sqlstore/migrations/ualert/alert_rule_test.go @@ -117,6 +117,27 @@ func TestMakeAlertRule(t *testing.T) { require.Equal(t, ar.Title, ar.RuleGroup) }) }) + + t.Run("alert is not paused", func(t *testing.T) { + m := newTestMigration(t) + da := createTestDashAlert() + cnd := createTestDashAlertCondition() + + ar, err := m.makeAlertRule(cnd, da, "folder") + require.NoError(t, err) + require.False(t, ar.IsPaused) + }) + + t.Run("paused dash alert is paused", func(t *testing.T) { + m := newTestMigration(t) + da := createTestDashAlert() + da.State = "paused" + cnd := createTestDashAlertCondition() + + ar, err := m.makeAlertRule(cnd, da, "folder") + require.NoError(t, err) + require.True(t, ar.IsPaused) + }) } func createTestDashAlert() dashAlert { diff --git a/pkg/services/sqlstore/migrations/ualert/testing.go b/pkg/services/sqlstore/migrations/ualert/testing.go index 229b782458d..9a74c5d04d9 100644 --- a/pkg/services/sqlstore/migrations/ualert/testing.go +++ b/pkg/services/sqlstore/migrations/ualert/testing.go @@ -5,6 +5,7 @@ import ( "github.com/grafana/grafana/pkg/infra/log" "github.com/grafana/grafana/pkg/services/sqlstore/migrator" + "github.com/prometheus/alertmanager/silence/silencepb" ) // newTestMigration generates an empty migration to use in tests. @@ -19,5 +20,6 @@ func newTestMigration(t *testing.T) *migration { seenUIDs: uidSet{ set: make(map[string]struct{}), }, + silences: make(map[int64][]*silencepb.MeshSilence), } }