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 }