github.com/grafana/pyroscope@v1.18.0/pkg/validation/recording_rules.go (about)

     1  package validation
     2  
     3  import (
     4  	"encoding/json"
     5  	"flag"
     6  	"fmt"
     7  
     8  	"gopkg.in/yaml.v3"
     9  
    10  	settingsv1 "github.com/grafana/pyroscope/api/gen/proto/go/settings/v1"
    11  )
    12  
    13  type RecordingRules []*settingsv1.RecordingRule
    14  
    15  func (r *RecordingRules) RegisterFlags(f *flag.FlagSet) {
    16  	f.Var(r, "compaction-worker.metrics-exporter.rules-source.static", "List of static recording rules of the type settingsv1.RecordingRule. Will only be use in the absence of a recording rules client.")
    17  }
    18  
    19  func (r *RecordingRules) Set(s string) error {
    20  	var rules []*settingsv1.RecordingRule
    21  	if err := json.Unmarshal([]byte(s), &rules); err != nil {
    22  		return fmt.Errorf("failed to unmarshal recording rules: %w", err)
    23  	}
    24  	*r = rules
    25  	return nil
    26  }
    27  
    28  func (r *RecordingRules) String() string {
    29  	jsonBytes, err := json.Marshal(*r)
    30  	if err != nil {
    31  		panic(fmt.Errorf("error marshal json: %w", err))
    32  	}
    33  	return string(jsonBytes)
    34  }
    35  
    36  func (r *RecordingRules) UnmarshalYAML(value *yaml.Node) error {
    37  	var temp interface{}
    38  	if err := value.Decode(&temp); err != nil {
    39  		return err
    40  	}
    41  
    42  	jsonBytes, err := json.Marshal(temp)
    43  	if err != nil {
    44  		return err
    45  	}
    46  
    47  	return json.Unmarshal(jsonBytes, r)
    48  }
    49  
    50  func (o *Overrides) RecordingRules(tenantId string) []*settingsv1.RecordingRule {
    51  	limits := o.getOverridesForTenant(tenantId)
    52  	return limits.RecordingRules
    53  }