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  }