Alerting: Extend PUT rule-group route to write the entire rule group rather than top-level fields only (#53078) (#53554)
* Wire up to full alert rule struct
* Extract group change detection logic to dedicated file
* GroupDiff -> GroupDelta for consistency
* Calculate deltas and handle backwards compatible requests
* Separate changes and insert/update/delete as needed
* Regenerate files
* Don't touch the DB if there are no changes
* Quota checking, delete unused file
* Mark modified records as provisioned
* Validation + a couple API layer tests
* Address linter errors
* Fix issue with UID assignment and rule creation
* Propagate top level group fields to all rules
* Tests for repeated updates and versioning
* Tests for quota and provenance checks
* Fix linter errors
* Regenerate
* Factor out some shared logic
* Drop unnecessary multiple nilchecks
* Use alternative strategy for rolling UIDs on inserted rules
* Fix tests, add back nilcheck, refresh UIDs during test
* Address feedback
* Add missing nil-check
(cherry picked from commit b198559225)
Co-authored-by: Alexander Weaver <weaver.alex.d@gmail.com>
This commit is contained in:
co-authored by
Alexander Weaver
parent
57e60ffed6
commit
aa321e74f6
@@ -298,6 +298,37 @@ func TestProvisioningApi(t *testing.T) {
|
||||
|
||||
require.Equal(t, 404, response.Status())
|
||||
})
|
||||
|
||||
t.Run("are invalid at group level", func(t *testing.T) {
|
||||
t.Run("PUT returns 400", func(t *testing.T) {
|
||||
sut := createProvisioningSrvSut(t)
|
||||
rc := createTestRequestCtx()
|
||||
insertRule(t, sut, createTestAlertRule("rule", 1))
|
||||
group := createInvalidAlertRuleGroup()
|
||||
group.Interval = 0
|
||||
|
||||
response := sut.RoutePutAlertRuleGroup(&rc, group, "folder-uid", group.Title)
|
||||
|
||||
require.Equal(t, 400, response.Status())
|
||||
require.NotEmpty(t, response.Body())
|
||||
require.Contains(t, string(response.Body()), "invalid alert rule")
|
||||
})
|
||||
})
|
||||
|
||||
t.Run("are invalid at rule level", func(t *testing.T) {
|
||||
t.Run("PUT returns 400", func(t *testing.T) {
|
||||
sut := createProvisioningSrvSut(t)
|
||||
rc := createTestRequestCtx()
|
||||
insertRule(t, sut, createTestAlertRule("rule", 1))
|
||||
group := createInvalidAlertRuleGroup()
|
||||
|
||||
response := sut.RoutePutAlertRuleGroup(&rc, group, "folder-uid", group.Title)
|
||||
|
||||
require.Equal(t, 400, response.Status())
|
||||
require.NotEmpty(t, response.Body())
|
||||
require.Contains(t, string(response.Body()), "invalid alert rule")
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
@@ -476,6 +507,14 @@ func createInvalidAlertRule() definitions.ProvisionedAlertRule {
|
||||
return definitions.ProvisionedAlertRule{}
|
||||
}
|
||||
|
||||
func createInvalidAlertRuleGroup() definitions.AlertRuleGroup {
|
||||
return definitions.AlertRuleGroup{
|
||||
Title: "invalid",
|
||||
Interval: 10,
|
||||
Rules: []models.AlertRule{{}},
|
||||
}
|
||||
}
|
||||
|
||||
func createTestAlertRule(title string, orgID int64) definitions.ProvisionedAlertRule {
|
||||
return definitions.ProvisionedAlertRule{
|
||||
OrgID: orgID,
|
||||
|
||||
Reference in New Issue
Block a user