mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Alerting: Refactor Alert Rule Generators (#86813)
This commit is contained in:
@@ -7,10 +7,11 @@ import (
|
||||
"math/rand"
|
||||
"net/url"
|
||||
"strconv"
|
||||
"sync"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
|
||||
"github.com/grafana/grafana/pkg/components/simplejson"
|
||||
"github.com/grafana/grafana/pkg/infra/db"
|
||||
"github.com/grafana/grafana/pkg/infra/log"
|
||||
@@ -28,7 +29,6 @@ import (
|
||||
historymodel "github.com/grafana/grafana/pkg/services/ngalert/state/historian/model"
|
||||
"github.com/grafana/grafana/pkg/setting"
|
||||
"github.com/grafana/grafana/pkg/tests/testsuite"
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
@@ -59,21 +59,15 @@ func TestIntegrationAlertStateHistoryStore(t *testing.T) {
|
||||
"title": "Dashboard 2",
|
||||
}),
|
||||
})
|
||||
|
||||
knownUIDs := &sync.Map{}
|
||||
generator := ngmodels.AlertRuleGen(
|
||||
ngmodels.WithUniqueUID(knownUIDs),
|
||||
ngmodels.WithUniqueID(),
|
||||
ngmodels.WithOrgID(1),
|
||||
)
|
||||
gen := ngmodels.RuleGen.With(ngmodels.RuleGen.WithOrgID(1))
|
||||
|
||||
dashboardRules := map[string][]*ngmodels.AlertRule{
|
||||
dashboard1.UID: {
|
||||
createAlertRuleFromDashboard(t, sql, "Test Rule 1", *dashboard1, generator),
|
||||
createAlertRuleFromDashboard(t, sql, "Test Rule 2", *dashboard1, generator),
|
||||
createAlertRuleFromDashboard(t, sql, "Test Rule 1", *dashboard1, gen),
|
||||
createAlertRuleFromDashboard(t, sql, "Test Rule 2", *dashboard1, gen),
|
||||
},
|
||||
dashboard2.UID: {
|
||||
createAlertRuleFromDashboard(t, sql, "Test Rule 3", *dashboard2, generator),
|
||||
createAlertRuleFromDashboard(t, sql, "Test Rule 3", *dashboard2, gen),
|
||||
},
|
||||
}
|
||||
|
||||
@@ -343,7 +337,7 @@ func TestIntegrationAlertStateHistoryStore(t *testing.T) {
|
||||
rule := dashboardRules[dashboard1.UID][0]
|
||||
stream1 := historian.StatesToStream(ruleMetaFromRule(t, rule), transitions, map[string]string{}, log.NewNopLogger())
|
||||
|
||||
rule = createAlertRule(t, sql, "Test rule", generator)
|
||||
rule = createAlertRule(t, sql, "Test rule", gen)
|
||||
stream2 := historian.StatesToStream(ruleMetaFromRule(t, rule), transitions, map[string]string{}, log.NewNopLogger())
|
||||
|
||||
stream := historian.Stream{
|
||||
@@ -591,14 +585,15 @@ func createTestLokiStore(t *testing.T, sql db.DB, client lokiQueryClient) *LokiH
|
||||
|
||||
// createAlertRule creates an alert rule in the database and returns it.
|
||||
// If a generator is not specified, uniqueness of primary key is not guaranteed.
|
||||
func createAlertRule(t *testing.T, sql db.DB, title string, generator func() *ngmodels.AlertRule) *ngmodels.AlertRule {
|
||||
func createAlertRule(t *testing.T, sql db.DB, title string, generator *ngmodels.AlertRuleGenerator) *ngmodels.AlertRule {
|
||||
t.Helper()
|
||||
|
||||
if generator == nil {
|
||||
generator = ngmodels.AlertRuleGen(ngmodels.WithTitle(title), withDashboardUID(nil), withPanelID(nil), ngmodels.WithOrgID(1))
|
||||
g := ngmodels.RuleGen
|
||||
generator = g.With(g.WithTitle(title), g.WithDashboardAndPanel(nil, nil), g.WithOrgID(1))
|
||||
}
|
||||
|
||||
rule := generator()
|
||||
rule := generator.GenerateRef()
|
||||
// ensure rule has correct values
|
||||
if rule.Title != title {
|
||||
rule.Title = title
|
||||
@@ -632,17 +627,18 @@ func createAlertRule(t *testing.T, sql db.DB, title string, generator func() *ng
|
||||
|
||||
// createAlertRuleFromDashboard creates an alert rule with a linked dashboard and panel in the database and returns it.
|
||||
// If a generator is not specified, uniqueness of primary key is not guaranteed.
|
||||
func createAlertRuleFromDashboard(t *testing.T, sql db.DB, title string, dashboard dashboards.Dashboard, generator func() *ngmodels.AlertRule) *ngmodels.AlertRule {
|
||||
func createAlertRuleFromDashboard(t *testing.T, sql db.DB, title string, dashboard dashboards.Dashboard, generator *ngmodels.AlertRuleGenerator) *ngmodels.AlertRule {
|
||||
t.Helper()
|
||||
|
||||
panelID := new(int64)
|
||||
*panelID = 123
|
||||
|
||||
if generator == nil {
|
||||
generator = ngmodels.AlertRuleGen(ngmodels.WithTitle(title), ngmodels.WithOrgID(1), withDashboardUID(&dashboard.UID), withPanelID(panelID))
|
||||
g := ngmodels.RuleGen
|
||||
generator = g.With(g.WithTitle(title), g.WithDashboardAndPanel(&dashboard.UID, panelID), g.WithOrgID(1))
|
||||
}
|
||||
|
||||
rule := generator()
|
||||
rule := generator.GenerateRef()
|
||||
// ensure rule has correct values
|
||||
if rule.Title != title {
|
||||
rule.Title = title
|
||||
@@ -741,18 +737,6 @@ func genStateTransitions(t *testing.T, num int, start time.Time) []state.StateTr
|
||||
return transitions
|
||||
}
|
||||
|
||||
func withDashboardUID(dashboardUID *string) ngmodels.AlertRuleMutator {
|
||||
return func(rule *ngmodels.AlertRule) {
|
||||
rule.DashboardUID = dashboardUID
|
||||
}
|
||||
}
|
||||
|
||||
func withPanelID(panelID *int64) ngmodels.AlertRuleMutator {
|
||||
return func(rule *ngmodels.AlertRule) {
|
||||
rule.PanelID = panelID
|
||||
}
|
||||
}
|
||||
|
||||
func compareAnnotationItem(t *testing.T, expected, actual *annotations.ItemDTO) {
|
||||
require.Equal(t, expected.AlertID, actual.AlertID)
|
||||
require.Equal(t, expected.AlertName, actual.AlertName)
|
||||
|
||||
Reference in New Issue
Block a user