Alerting: Update Alert Rule to use int64 for MissingSeriesEvalsToResolve (#109306)

This commit is contained in:
Moustafa Baiou
2025-08-06 21:45:48 -04:00
committed by GitHub
parent e36402a121
commit 16f8359d35
15 changed files with 50 additions and 50 deletions
@@ -403,7 +403,7 @@ func TestIntegrationProvisioningApi(t *testing.T) {
})
t.Run("PUT without MissingSeriesEvalsToResolve clears the field", func(t *testing.T) {
oldValue := util.Pointer(5)
oldValue := util.Pointer[int64](5)
sut := createProvisioningSrvSut(t)
rc := createTestRequestCtx()
rule := createTestAlertRule("rule", 1)
@@ -420,8 +420,8 @@ func TestIntegrationProvisioningApi(t *testing.T) {
})
t.Run("PUT with MissingSeriesEvalsToResolve updates the value", func(t *testing.T) {
oldValue := util.Pointer(5)
newValue := util.Pointer(10)
oldValue := util.Pointer[int64](5)
newValue := util.Pointer[int64](10)
sut := createProvisioningSrvSut(t)
rc := createTestRequestCtx()
rule := createTestAlertRule("rule", 1)
@@ -657,12 +657,12 @@ func TestIntegrationProvisioningApi(t *testing.T) {
require.Nil(t, updated.Rules[0].MissingSeriesEvalsToResolve)
// Put the same group with a new value
group.Rules[0].MissingSeriesEvalsToResolve = util.Pointer(5)
group.Rules[0].MissingSeriesEvalsToResolve = util.Pointer[int64](5)
response = sut.RoutePutAlertRuleGroup(&rc, group, "folder-uid", group.Title)
require.Equal(t, 200, response.Status())
updated = deserializeRuleGroup(t, response.Body())
require.NotNil(t, updated.Rules[0].MissingSeriesEvalsToResolve)
require.Equal(t, 5, *updated.Rules[0].MissingSeriesEvalsToResolve)
require.Equal(t, int64(5), *updated.Rules[0].MissingSeriesEvalsToResolve)
// Reset the value again
group.Rules[0].MissingSeriesEvalsToResolve = nil
@@ -593,7 +593,7 @@ type PostableGrafanaRule struct {
// If set to 0, the value is reset to the default.
// required: false
// example: 3
MissingSeriesEvalsToResolve *int `json:"missing_series_evals_to_resolve,omitempty" yaml:"missing_series_evals_to_resolve,omitempty"`
MissingSeriesEvalsToResolve *int64 `json:"missing_series_evals_to_resolve,omitempty" yaml:"missing_series_evals_to_resolve,omitempty"`
}
// swagger:model
@@ -616,7 +616,7 @@ type GettableGrafanaRule struct {
Record *Record `json:"record,omitempty" yaml:"record,omitempty"`
Metadata *AlertRuleMetadata `json:"metadata,omitempty" yaml:"metadata,omitempty"`
GUID string `json:"guid" yaml:"guid"`
MissingSeriesEvalsToResolve *int `json:"missing_series_evals_to_resolve,omitempty" yaml:"missing_series_evals_to_resolve,omitempty"`
MissingSeriesEvalsToResolve *int64 `json:"missing_series_evals_to_resolve,omitempty" yaml:"missing_series_evals_to_resolve,omitempty"`
}
// UserInfo represents user-related information, including a unique identifier and a name.
@@ -174,7 +174,7 @@ type ProvisionedAlertRule struct {
// example: {"metric":"grafana_alerts_ratio", "from":"A"}
Record *Record `json:"record"`
// example: 2
MissingSeriesEvalsToResolve *int `json:"missingSeriesEvalsToResolve,omitempty"`
MissingSeriesEvalsToResolve *int64 `json:"missingSeriesEvalsToResolve,omitempty"`
}
// swagger:route GET /v1/provisioning/folder/{FolderUID}/rule-groups/{Group} provisioning stable RouteGetAlertRuleGroup
@@ -284,7 +284,7 @@ type AlertRuleExport struct {
IsPaused bool `json:"isPaused" yaml:"isPaused" hcl:"is_paused"`
NotificationSettings *AlertRuleNotificationSettingsExport `json:"notification_settings,omitempty" yaml:"notification_settings,omitempty" hcl:"notification_settings,block"`
Record *AlertRuleRecordExport `json:"record,omitempty" yaml:"record,omitempty" hcl:"record,block"`
MissingSeriesEvalsToResolve *int `json:"missing_series_evals_to_resolve,omitempty" yaml:"missing_series_evals_to_resolve,omitempty" hcl:"missing_series_evals_to_resolve"`
MissingSeriesEvalsToResolve *int64 `json:"missing_series_evals_to_resolve,omitempty" yaml:"missing_series_evals_to_resolve,omitempty" hcl:"missing_series_evals_to_resolve"`
}
// AlertQueryExport is the provisioned export of models.AlertQuery.
@@ -299,10 +299,10 @@ func validateKeepFiringForInterval(ruleNode *apimodels.PostableExtendedRuleNode)
// - == 0, returns nil (reset to default)
// - == nil && UID == "", returns nil (new rule)
// - == nil && UID != "", returns -1 (existing rule)
func validateMissingSeriesEvalsToResolve(ruleNode *apimodels.PostableExtendedRuleNode) (*int, error) {
func validateMissingSeriesEvalsToResolve(ruleNode *apimodels.PostableExtendedRuleNode) (*int64, error) {
if ruleNode.GrafanaManagedAlert.MissingSeriesEvalsToResolve == nil {
if ruleNode.GrafanaManagedAlert.UID != "" {
return util.Pointer(-1), nil // will be patched later with the real value of the current version of the rule
return util.Pointer[int64](-1), nil // will be patched later with the real value of the current version of the rule
}
return nil, nil // if it's a new rule, use nil as the default
}