optimize operations for the latest rule resources
Signed-off-by: junotx <junotx@126.com>
This commit is contained in:
@@ -41,7 +41,7 @@ var (
|
|||||||
ErrThanosRulerNotEnabled = errors.New("The request operation to custom alerting rule could not be done because thanos ruler is not enabled")
|
ErrThanosRulerNotEnabled = errors.New("The request operation to custom alerting rule could not be done because thanos ruler is not enabled")
|
||||||
ErrAlertingRuleNotFound = errors.New("The alerting rule was not found")
|
ErrAlertingRuleNotFound = errors.New("The alerting rule was not found")
|
||||||
ErrAlertingRuleAlreadyExists = errors.New("The alerting rule already exists")
|
ErrAlertingRuleAlreadyExists = errors.New("The alerting rule already exists")
|
||||||
ErrAlertingAPIV2NotEnabled = errors.New("The alerting v2 API was not enabled")
|
ErrAlertingAPIV2NotEnabled = errors.New("The alerting v2 API is not enabled")
|
||||||
|
|
||||||
templateTestData = template.AlertTemplateData(map[string]string{}, map[string]string{}, 0)
|
templateTestData = template.AlertTemplateData(map[string]string{}, map[string]string{}, 0)
|
||||||
templateTestTextPrefix = "{{$labels := .Labels}}{{$externalLabels := .ExternalLabels}}{{$value := .Value}}"
|
templateTestTextPrefix = "{{$labels := .Labels}}{{$externalLabels := .ExternalLabels}}{{$value := .Value}}"
|
||||||
|
|||||||
@@ -363,8 +363,8 @@ func (r *ThanosRuler) addAlertingRule(ctx context.Context, ruleNamespace *corev1
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if err := r.doRuleResourceOperation(prometheusRule, func(newerPr *promresourcesv1.PrometheusRule) error {
|
if err := r.doRuleResourceOperation(ctx, prometheusRule, func(pr *promresourcesv1.PrometheusRule) error {
|
||||||
resource := ruleResource(*newerPr)
|
resource := ruleResource(*pr)
|
||||||
if ok, err := resource.addAlertingRule(group, rule); err != nil {
|
if ok, err := resource.addAlertingRule(group, rule); err != nil {
|
||||||
return err
|
return err
|
||||||
} else if ok {
|
} else if ok {
|
||||||
@@ -421,8 +421,8 @@ func (r *ThanosRuler) UpdateAlertingRule(ctx context.Context, ruleNamespace *cor
|
|||||||
)
|
)
|
||||||
for i, prometheusRule := range prometheusRules {
|
for i, prometheusRule := range prometheusRules {
|
||||||
if success { // If the update has been successful, delete the possible same rule in other resources
|
if success { // If the update has been successful, delete the possible same rule in other resources
|
||||||
if err := r.doRuleResourceOperation(prometheusRule, func(newerPr *promresourcesv1.PrometheusRule) error {
|
if err := r.doRuleResourceOperation(ctx, prometheusRule, func(pr *promresourcesv1.PrometheusRule) error {
|
||||||
resource := ruleResource(*newerPr)
|
resource := ruleResource(*pr)
|
||||||
if ok, err := resource.deleteAlertingRule(rule.Alert); err != nil {
|
if ok, err := resource.deleteAlertingRule(rule.Alert); err != nil {
|
||||||
return err
|
return err
|
||||||
} else if ok {
|
} else if ok {
|
||||||
@@ -437,8 +437,8 @@ func (r *ThanosRuler) UpdateAlertingRule(ctx context.Context, ruleNamespace *cor
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := r.doRuleResourceOperation(prometheusRule, func(newerPr *promresourcesv1.PrometheusRule) error {
|
if err := r.doRuleResourceOperation(ctx, prometheusRule, func(pr *promresourcesv1.PrometheusRule) error {
|
||||||
resource := ruleResource(*newerPr)
|
resource := ruleResource(*pr)
|
||||||
if ok, err := resource.updateAlertingRule(group, rule); err != nil {
|
if ok, err := resource.updateAlertingRule(group, rule); err != nil {
|
||||||
return err
|
return err
|
||||||
} else if ok {
|
} else if ok {
|
||||||
@@ -474,8 +474,8 @@ func (r *ThanosRuler) UpdateAlertingRule(ctx context.Context, ruleNamespace *cor
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
for _, pr := range prsToDelRule {
|
for _, pr := range prsToDelRule {
|
||||||
if err := r.doRuleResourceOperation(pr, func(newerPr *promresourcesv1.PrometheusRule) error {
|
if err := r.doRuleResourceOperation(ctx, pr, func(pr *promresourcesv1.PrometheusRule) error {
|
||||||
resource := ruleResource(*newerPr)
|
resource := ruleResource(*pr)
|
||||||
if ok, err := resource.deleteAlertingRule(rule.Alert); err != nil {
|
if ok, err := resource.deleteAlertingRule(rule.Alert); err != nil {
|
||||||
return err
|
return err
|
||||||
} else if ok {
|
} else if ok {
|
||||||
@@ -499,8 +499,8 @@ func (r *ThanosRuler) DeleteAlertingRule(ctx context.Context, ruleNamespace *cor
|
|||||||
}
|
}
|
||||||
var success bool
|
var success bool
|
||||||
for _, prometheusRule := range prometheusRules {
|
for _, prometheusRule := range prometheusRules {
|
||||||
if err := r.doRuleResourceOperation(prometheusRule, func(newerPr *promresourcesv1.PrometheusRule) error {
|
if err := r.doRuleResourceOperation(ctx, prometheusRule, func(pr *promresourcesv1.PrometheusRule) error {
|
||||||
resource := ruleResource(*newerPr)
|
resource := ruleResource(*pr)
|
||||||
if ok, err := resource.deleteAlertingRule(name); err != nil {
|
if ok, err := resource.deleteAlertingRule(name); err != nil {
|
||||||
return err
|
return err
|
||||||
} else if ok {
|
} else if ok {
|
||||||
@@ -523,13 +523,13 @@ func (r *ThanosRuler) DeleteAlertingRule(ctx context.Context, ruleNamespace *cor
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *ThanosRuler) doRuleResourceOperation(pr *promresourcesv1.PrometheusRule,
|
func (r *ThanosRuler) doRuleResourceOperation(ctx context.Context, pr *promresourcesv1.PrometheusRule,
|
||||||
operation func(newerPr *promresourcesv1.PrometheusRule) error) error {
|
operation func(pr *promresourcesv1.PrometheusRule) error) error {
|
||||||
key := pr.Namespace + "/" + pr.Name
|
key := pr.Namespace + "/" + pr.Name
|
||||||
return retry.RetryOnConflict(retry.DefaultRetry, func() error {
|
return retry.RetryOnConflict(retry.DefaultRetry, func() error {
|
||||||
r.locker.Lock(key)
|
r.locker.Lock(key)
|
||||||
defer r.locker.Unlock(key)
|
defer r.locker.Unlock(key)
|
||||||
pr, err := r.informer.Lister().PrometheusRules(pr.Namespace).Get(pr.Name)
|
pr, err := r.client.MonitoringV1().PrometheusRules(pr.Namespace).Get(ctx, pr.Name, metav1.GetOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user