[release-12.1.2] Alerting: Add keepFiringFor and missing_series_evals_to_resolve to file provisioning (#109710)
* Alerting: Add keepFiringFor and missing_series_evals_to_resolve to file provisioning (#109699) * Fix MissingSeriesEvalsToResolve type
This commit is contained in:
@@ -273,7 +273,7 @@ type AlertRuleExport struct {
|
||||
NoDataState *NoDataState `json:"noDataState,omitempty" yaml:"noDataState,omitempty" hcl:"no_data_state"`
|
||||
ExecErrState *ExecutionErrorState `json:"execErrState,omitempty" yaml:"execErrState,omitempty" hcl:"exec_err_state"`
|
||||
For model.Duration `json:"for,omitempty" yaml:"for,omitempty"`
|
||||
KeepFiringFor model.Duration `json:"keepFiringFor,omitempty" yaml:"keepFiringFor,omitempty" hcl:"keep_firing_for"`
|
||||
KeepFiringFor model.Duration `json:"keepFiringFor,omitempty" yaml:"keepFiringFor,omitempty"`
|
||||
// ForString and KeepFiringForString are used to:
|
||||
// - Only export the for field for HCL if it is non-zero.
|
||||
// - Format the Prometheus model.Duration type properly for HCL.
|
||||
|
||||
@@ -62,21 +62,23 @@ func (ruleGroupV1 *AlertRuleGroupV1) MapToModel() (models.AlertRuleGroupWithFold
|
||||
}
|
||||
|
||||
type AlertRuleV1 struct {
|
||||
UID values.StringValue `json:"uid" yaml:"uid"`
|
||||
Title values.StringValue `json:"title" yaml:"title"`
|
||||
Condition values.StringValue `json:"condition" yaml:"condition"`
|
||||
Data []QueryV1 `json:"data" yaml:"data"`
|
||||
DasboardUID values.StringValue `json:"dasboardUid" yaml:"dasboardUid"` // TODO: Grandfathered typo support. TODO: This should be removed in V2.
|
||||
DashboardUID values.StringValue `json:"dashboardUid" yaml:"dashboardUid"`
|
||||
PanelID values.Int64Value `json:"panelId" yaml:"panelId"`
|
||||
NoDataState values.StringValue `json:"noDataState" yaml:"noDataState"`
|
||||
ExecErrState values.StringValue `json:"execErrState" yaml:"execErrState"`
|
||||
For values.StringValue `json:"for" yaml:"for"`
|
||||
Annotations values.StringMapValue `json:"annotations" yaml:"annotations"`
|
||||
Labels values.StringMapValue `json:"labels" yaml:"labels"`
|
||||
IsPaused values.BoolValue `json:"isPaused" yaml:"isPaused"`
|
||||
NotificationSettings *NotificationSettingsV1 `json:"notification_settings" yaml:"notification_settings"`
|
||||
Record *RecordV1 `json:"record" yaml:"record"`
|
||||
UID values.StringValue `json:"uid" yaml:"uid"`
|
||||
Title values.StringValue `json:"title" yaml:"title"`
|
||||
Condition values.StringValue `json:"condition" yaml:"condition"`
|
||||
Data []QueryV1 `json:"data" yaml:"data"`
|
||||
DasboardUID values.StringValue `json:"dasboardUid" yaml:"dasboardUid"` // TODO: Grandfathered typo support. TODO: This should be removed in V2.
|
||||
DashboardUID values.StringValue `json:"dashboardUid" yaml:"dashboardUid"`
|
||||
PanelID values.Int64Value `json:"panelId" yaml:"panelId"`
|
||||
NoDataState values.StringValue `json:"noDataState" yaml:"noDataState"`
|
||||
ExecErrState values.StringValue `json:"execErrState" yaml:"execErrState"`
|
||||
For values.StringValue `json:"for" yaml:"for"`
|
||||
KeepFiringFor values.StringValue `json:"keepFiringFor" yaml:"keepFiringFor"`
|
||||
MissingSeriesEvalsToResolve values.IntValue `json:"missing_series_evals_to_resolve" yaml:"missing_series_evals_to_resolve"`
|
||||
Annotations values.StringMapValue `json:"annotations" yaml:"annotations"`
|
||||
Labels values.StringMapValue `json:"labels" yaml:"labels"`
|
||||
IsPaused values.BoolValue `json:"isPaused" yaml:"isPaused"`
|
||||
NotificationSettings *NotificationSettingsV1 `json:"notification_settings" yaml:"notification_settings"`
|
||||
Record *RecordV1 `json:"record" yaml:"record"`
|
||||
}
|
||||
|
||||
func withFallback(value, fallback string) *string {
|
||||
@@ -108,6 +110,24 @@ func (rule *AlertRuleV1) mapToModel(orgID int64) (models.AlertRule, error) {
|
||||
}
|
||||
alertRule.For = time.Duration(duration)
|
||||
|
||||
keepFiringForDuration := model.Duration(0)
|
||||
if rule.KeepFiringFor.Value() != "" {
|
||||
var err error
|
||||
keepFiringForDuration, err = model.ParseDuration(rule.KeepFiringFor.Value())
|
||||
if err != nil {
|
||||
return models.AlertRule{}, fmt.Errorf("rule '%s' failed to parse 'keepFiringFor' field: %w", alertRule.Title, err)
|
||||
}
|
||||
}
|
||||
alertRule.KeepFiringFor = time.Duration(keepFiringForDuration)
|
||||
|
||||
if rule.MissingSeriesEvalsToResolve.Raw != "" {
|
||||
missingSeriesEvalsToResolve := rule.MissingSeriesEvalsToResolve.Value()
|
||||
if missingSeriesEvalsToResolve < 0 {
|
||||
return models.AlertRule{}, fmt.Errorf("rule '%s' failed to parse 'missing_series_evals_to_resolve' field: cannot be negative", alertRule.Title)
|
||||
}
|
||||
alertRule.MissingSeriesEvalsToResolve = &missingSeriesEvalsToResolve
|
||||
}
|
||||
|
||||
dasboardUID := rule.DasboardUID.Value()
|
||||
dashboardUID := rule.DashboardUID.Value()
|
||||
alertRule.DashboardUID = withFallback(dashboardUID, dasboardUID) // Use correct spelling over supported typo.
|
||||
|
||||
Reference in New Issue
Block a user