Skip to content

Commit 7c6ad04

Browse files
committed
Add filtering by health and state in list rules
Signed-off-by: Eunice Kim <[email protected]>
1 parent 176df21 commit 7c6ad04

File tree

5 files changed

+251
-50
lines changed

5 files changed

+251
-50
lines changed

pkg/ruler/api.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,11 +135,25 @@ func (a *API) PrometheusRules(w http.ResponseWriter, req *http.Request) {
135135
return
136136
}
137137

138+
state := strings.ToLower(req.URL.Query().Get("state"))
139+
if state != "" && state != firingStateFilter && state != pendingStateFilter && state != inactiveStateFilter {
140+
util_api.RespondError(logger, w, v1.ErrBadData, fmt.Sprintf("unsupported state value %q", state), http.StatusBadRequest)
141+
return
142+
}
143+
144+
health := strings.ToLower(req.URL.Query().Get("health"))
145+
if health != "" && health != unknownHealthFilter && health != okHealthFilter && health != errHealthFilter {
146+
util_api.RespondError(logger, w, v1.ErrBadData, fmt.Sprintf("unsupported health value %q", health), http.StatusBadRequest)
147+
return
148+
}
149+
138150
rulesRequest := RulesRequest{
139151
RuleNames: req.Form["rule_name[]"],
140152
RuleGroupNames: req.Form["rule_group[]"],
141153
Files: req.Form["file[]"],
142154
Type: typ,
155+
State: state,
156+
Health: health,
143157
}
144158

145159
w.Header().Set("Content-Type", "application/json")

pkg/ruler/ruler.go

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,14 @@ const (
7373

7474
alertingRuleFilter string = "alert"
7575
recordingRuleFilter string = "record"
76+
77+
firingStateFilter string = "firing"
78+
pendingStateFilter string = "pending"
79+
inactiveStateFilter string = "inactive"
80+
81+
unknownHealthFilter string = "unknown"
82+
okHealthFilter string = "ok"
83+
errHealthFilter string = "err"
7684
)
7785

7886
type DisabledRuleGroupErr struct {
@@ -874,9 +882,11 @@ func (r *Ruler) getLocalRules(userID string, rulesRequest RulesRequest, includeB
874882
ruleGroupNameSet := sliceToSet(rulesRequest.RuleGroupNames)
875883
fileSet := sliceToSet(rulesRequest.Files)
876884
ruleType := rulesRequest.Type
885+
alertState := rulesRequest.State
886+
health := rulesRequest.Health
877887

878888
returnAlerts := ruleType == "" || ruleType == alertingRuleFilter
879-
returnRecording := ruleType == "" || ruleType == recordingRuleFilter
889+
returnRecording := (ruleType == "" || ruleType == recordingRuleFilter) && alertState == ""
880890

881891
for _, group := range groups {
882892
// The mapped filename is url path escaped encoded to make handling `/` characters easier
@@ -915,6 +925,9 @@ func (r *Ruler) getLocalRules(userID string, rulesRequest RulesRequest, includeB
915925
continue
916926
}
917927
}
928+
if !returnByHealth(health, string(r.Health())) {
929+
continue
930+
}
918931
lastError := ""
919932
if r.LastError() != nil {
920933
lastError = r.LastError().Error()
@@ -926,6 +939,9 @@ func (r *Ruler) getLocalRules(userID string, rulesRequest RulesRequest, includeB
926939
if !returnAlerts {
927940
continue
928941
}
942+
if !returnByState(alertState, rule.State().String()) {
943+
continue
944+
}
929945
alerts := []*AlertStateDesc{}
930946
for _, a := range rule.ActiveAlerts() {
931947
alerts = append(alerts, &AlertStateDesc{
@@ -1296,3 +1312,11 @@ func (r *Ruler) ListAllRules(w http.ResponseWriter, req *http.Request) {
12961312
close(iter)
12971313
<-done
12981314
}
1315+
1316+
func returnByState(requestState string, alertState string) bool {
1317+
return requestState == "" || requestState == alertState
1318+
}
1319+
1320+
func returnByHealth(requestHealth string, ruleHealth string) bool {
1321+
return requestHealth == "" || requestHealth == ruleHealth
1322+
}

pkg/ruler/ruler.pb.go

Lines changed: 162 additions & 49 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/ruler/ruler.proto

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ message RulesRequest {
2424
repeated string ruleGroupNames = 2;
2525
repeated string files = 3;
2626
string type = 4;
27+
string state = 5;
28+
string health = 6;
2729
}
2830

2931
message RulesResponse {

0 commit comments

Comments
 (0)