github.com/muhammadn/cortex@v1.9.1-0.20220510110439-46bb7000d03d/pkg/ruler/rulespb/compat.go (about) 1 package rulespb 2 3 import ( 4 "time" 5 6 "github.com/prometheus/common/model" 7 "github.com/prometheus/prometheus/pkg/labels" 8 "github.com/prometheus/prometheus/pkg/rulefmt" 9 "gopkg.in/yaml.v3" 10 11 "github.com/cortexproject/cortex/pkg/cortexpb" //lint:ignore faillint allowed to import other protobuf 12 ) 13 14 // ToProto transforms a formatted prometheus rulegroup to a rule group protobuf 15 func ToProto(user string, namespace string, rl rulefmt.RuleGroup) *RuleGroupDesc { 16 rg := RuleGroupDesc{ 17 Name: rl.Name, 18 Namespace: namespace, 19 Interval: time.Duration(rl.Interval), 20 Rules: formattedRuleToProto(rl.Rules), 21 User: user, 22 } 23 return &rg 24 } 25 26 func formattedRuleToProto(rls []rulefmt.RuleNode) []*RuleDesc { 27 rules := make([]*RuleDesc, len(rls)) 28 for i := range rls { 29 rules[i] = &RuleDesc{ 30 Expr: rls[i].Expr.Value, 31 Record: rls[i].Record.Value, 32 Alert: rls[i].Alert.Value, 33 For: time.Duration(rls[i].For), 34 Labels: cortexpb.FromLabelsToLabelAdapters(labels.FromMap(rls[i].Labels)), 35 Annotations: cortexpb.FromLabelsToLabelAdapters(labels.FromMap(rls[i].Annotations)), 36 } 37 } 38 39 return rules 40 } 41 42 // FromProto generates a rulefmt RuleGroup 43 func FromProto(rg *RuleGroupDesc) rulefmt.RuleGroup { 44 formattedRuleGroup := rulefmt.RuleGroup{ 45 Name: rg.GetName(), 46 Interval: model.Duration(rg.Interval), 47 Rules: make([]rulefmt.RuleNode, len(rg.GetRules())), 48 } 49 50 for i, rl := range rg.GetRules() { 51 exprNode := yaml.Node{} 52 exprNode.SetString(rl.GetExpr()) 53 54 newRule := rulefmt.RuleNode{ 55 Expr: exprNode, 56 Labels: cortexpb.FromLabelAdaptersToLabels(rl.Labels).Map(), 57 Annotations: cortexpb.FromLabelAdaptersToLabels(rl.Annotations).Map(), 58 For: model.Duration(rl.GetFor()), 59 } 60 61 if rl.GetRecord() != "" { 62 recordNode := yaml.Node{} 63 recordNode.SetString(rl.GetRecord()) 64 newRule.Record = recordNode 65 } else { 66 alertNode := yaml.Node{} 67 alertNode.SetString(rl.GetAlert()) 68 newRule.Alert = alertNode 69 } 70 71 formattedRuleGroup.Rules[i] = newRule 72 } 73 74 return formattedRuleGroup 75 }