Skip to content

Commit 1a28bf0

Browse files
committed
Support keep_firing_for field for alert rules
Signed-off-by: Mustafain Ali Khan <[email protected]>
1 parent 4b75a5c commit 1a28bf0

File tree

2 files changed

+61
-10
lines changed

2 files changed

+61
-10
lines changed

pkg/ruler/rulespb/compat.go

+12-10
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,13 @@ func formattedRuleToProto(rls []rulefmt.RuleNode) []*RuleDesc {
2828
rules := make([]*RuleDesc, len(rls))
2929
for i := range rls {
3030
rules[i] = &RuleDesc{
31-
Expr: rls[i].Expr.Value,
32-
Record: rls[i].Record.Value,
33-
Alert: rls[i].Alert.Value,
34-
For: time.Duration(rls[i].For),
35-
Labels: cortexpb.FromLabelsToLabelAdapters(labels.FromMap(rls[i].Labels)),
36-
Annotations: cortexpb.FromLabelsToLabelAdapters(labels.FromMap(rls[i].Annotations)),
31+
Expr: rls[i].Expr.Value,
32+
Record: rls[i].Record.Value,
33+
Alert: rls[i].Alert.Value,
34+
For: time.Duration(rls[i].For),
35+
KeepFiringFor: time.Duration(rls[i].KeepFiringFor),
36+
Labels: cortexpb.FromLabelsToLabelAdapters(labels.FromMap(rls[i].Labels)),
37+
Annotations: cortexpb.FromLabelsToLabelAdapters(labels.FromMap(rls[i].Annotations)),
3738
}
3839
}
3940

@@ -54,10 +55,11 @@ func FromProto(rg *RuleGroupDesc) rulefmt.RuleGroup {
5455
exprNode.SetString(rl.GetExpr())
5556

5657
newRule := rulefmt.RuleNode{
57-
Expr: exprNode,
58-
Labels: cortexpb.FromLabelAdaptersToLabels(rl.Labels).Map(),
59-
Annotations: cortexpb.FromLabelAdaptersToLabels(rl.Annotations).Map(),
60-
For: model.Duration(rl.GetFor()),
58+
Expr: exprNode,
59+
Labels: cortexpb.FromLabelAdaptersToLabels(rl.Labels).Map(),
60+
Annotations: cortexpb.FromLabelAdaptersToLabels(rl.Annotations).Map(),
61+
For: model.Duration(rl.GetFor()),
62+
KeepFiringFor: model.Duration(rl.GetKeepFiringFor()),
6163
}
6264

6365
if rl.GetRecord() != "" {

pkg/ruler/rulespb/compat_test.go

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package rulespb
2+
3+
import (
4+
"github.com/prometheus/common/model"
5+
"github.com/prometheus/prometheus/model/rulefmt"
6+
"github.com/stretchr/testify/assert"
7+
"gopkg.in/yaml.v3"
8+
"testing"
9+
"time"
10+
)
11+
12+
func TestProto(t *testing.T) {
13+
rules := make([]rulefmt.RuleNode, 0)
14+
15+
alertNode := yaml.Node{}
16+
alertNode.SetString("test_rule")
17+
exprNode := yaml.Node{}
18+
exprNode.SetString("test_expr")
19+
20+
testRule := rulefmt.RuleNode{
21+
Alert: alertNode,
22+
Expr: exprNode,
23+
Labels: map[string]string{"label1": "value1"},
24+
Annotations: map[string]string{"key1": "value1"},
25+
For: model.Duration(time.Minute * 2),
26+
KeepFiringFor: model.Duration(time.Hour),
27+
}
28+
29+
rules = append(rules, testRule)
30+
31+
rg := rulefmt.RuleGroup{
32+
Name: "group1",
33+
Rules: rules,
34+
Interval: model.Duration(time.Minute),
35+
}
36+
desc := ToProto("test", "namespace", rg)
37+
38+
assert.Equal(t, len(rules), len(desc.Rules))
39+
40+
ruleDesc := desc.Rules[0]
41+
42+
assert.Equal(t, "test_rule", ruleDesc.Alert)
43+
assert.Equal(t, "test_expr", ruleDesc.Expr)
44+
assert.Equal(t, time.Minute*2, ruleDesc.For)
45+
assert.Equal(t, time.Hour, ruleDesc.KeepFiringFor)
46+
47+
formatted := FromProto(desc)
48+
assert.Equal(t, rg, formatted)
49+
}

0 commit comments

Comments
 (0)