Skip to content

Commit bac3d66

Browse files
committed
alerting rules default to sort by update time
Signed-off-by: junotx <junotx@126.com>
1 parent f57d915 commit bac3d66

File tree

2 files changed

+34
-5
lines changed

2 files changed

+34
-5
lines changed

pkg/api/alerting/v2alpha1/types.go

+19-5
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ import (
3535
const (
3636
RuleLevelCluster RuleLevel = "cluster"
3737
RuleLevelNamespace RuleLevel = "namespace"
38+
39+
AnnotationKeyRuleUpdateTime = "rule_update_time"
3840
)
3941

4042
var (
@@ -217,10 +219,22 @@ func AlertingRuleIdCompare(leftId, rightId string) bool {
217219
}
218220

219221
func (q *AlertingRuleQueryParams) Sort(rules []*GettableAlertingRule) {
220-
idCompare := func(left, right *GettableAlertingRule) bool {
222+
baseCompare := func(left, right *GettableAlertingRule) bool {
223+
var leftUpdateTime, rightUpdateTime string
224+
if len(left.Annotations) > 0 {
225+
leftUpdateTime = left.Annotations[AnnotationKeyRuleUpdateTime]
226+
}
227+
if len(right.Annotations) > 0 {
228+
rightUpdateTime = right.Annotations[AnnotationKeyRuleUpdateTime]
229+
}
230+
231+
if leftUpdateTime != rightUpdateTime {
232+
return leftUpdateTime > rightUpdateTime
233+
}
234+
221235
return AlertingRuleIdCompare(left.Id, right.Id)
222236
}
223-
var compare = idCompare
237+
var compare = baseCompare
224238
if q != nil {
225239
reverse := q.SortType == "desc"
226240
switch q.SortField {
@@ -232,7 +246,7 @@ func (q *AlertingRuleQueryParams) Sort(rules []*GettableAlertingRule) {
232246
}
233247
return c < 0
234248
}
235-
return idCompare(left, right)
249+
return baseCompare(left, right)
236250
}
237251
case "lastEvaluation":
238252
compare = func(left, right *GettableAlertingRule) bool {
@@ -250,7 +264,7 @@ func (q *AlertingRuleQueryParams) Sort(rules []*GettableAlertingRule) {
250264
return left.LastEvaluation.Before(*right.LastEvaluation)
251265
}
252266
}
253-
return idCompare(left, right)
267+
return baseCompare(left, right)
254268
}
255269
case "evaluationTime":
256270
compare = func(left, right *GettableAlertingRule) bool {
@@ -260,7 +274,7 @@ func (q *AlertingRuleQueryParams) Sort(rules []*GettableAlertingRule) {
260274
}
261275
return left.EvaluationDurationSeconds < right.EvaluationDurationSeconds
262276
}
263-
return idCompare(left, right)
277+
return baseCompare(left, right)
264278
}
265279
}
266280
}

pkg/models/alerting/alerting.go

+15
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"sort"
66
"strings"
7+
"time"
78

89
"github.com/pkg/errors"
910
promresourcesv1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1"
@@ -470,6 +471,8 @@ func (o *operator) CreateCustomAlertingRule(ctx context.Context, namespace strin
470471
return v2alpha1.ErrAlertingRuleAlreadyExists
471472
}
472473

474+
setRuleUpdateTime(rule, time.Now())
475+
473476
return ruler.AddAlertingRule(ctx, ruleNamespace, extraRuleResourceSelector,
474477
customRuleGroupDefault, parseToPrometheusRule(rule), ruleResourceLabels)
475478
}
@@ -521,6 +524,8 @@ func (o *operator) UpdateCustomAlertingRule(ctx context.Context, namespace, name
521524
return v2alpha1.ErrAlertingRuleNotFound
522525
}
523526

527+
setRuleUpdateTime(rule, time.Now())
528+
524529
return ruler.UpdateAlertingRule(ctx, ruleNamespace, extraRuleResourceSelector,
525530
resourceRule.Group, parseToPrometheusRule(rule), ruleResourceLabels)
526531
}
@@ -633,3 +638,13 @@ func pageAlerts(alertingRules []*v2alpha1.GettableAlertingRule,
633638
Items: queryParams.Sub(alerts),
634639
}
635640
}
641+
642+
func setRuleUpdateTime(rule *v2alpha1.PostableAlertingRule, t time.Time) {
643+
if rule.Annotations == nil {
644+
rule.Annotations = make(map[string]string)
645+
}
646+
if t.IsZero() {
647+
t = time.Now()
648+
}
649+
rule.Annotations[v2alpha1.AnnotationKeyRuleUpdateTime] = t.UTC().Format(time.RFC3339)
650+
}

0 commit comments

Comments
 (0)