github.com/grafana/pyroscope@v1.18.0/pkg/validation/runtime_config.go (about) 1 package validation 2 3 import ( 4 "fmt" 5 "io" 6 7 "github.com/go-kit/log/level" 8 "gopkg.in/yaml.v3" 9 10 "github.com/grafana/pyroscope/pkg/util" 11 ) 12 13 type RuntimeConfigValues struct { 14 TenantLimits map[string]*Limits `yaml:"overrides"` 15 } 16 17 func (r RuntimeConfigValues) validate() error { 18 for t, c := range r.TenantLimits { 19 if c == nil { 20 level.Warn(util.Logger).Log("msg", "skipping empty tenant limit definition", "tenant", t) 21 continue 22 } 23 24 if err := c.Validate(); err != nil { 25 return fmt.Errorf("invalid override for tenant %s: %w", t, err) 26 } 27 } 28 29 return nil 30 } 31 32 func LoadRuntimeConfig(r io.Reader) (*RuntimeConfigValues, error) { 33 overrides := &RuntimeConfigValues{} 34 35 decoder := yaml.NewDecoder(r) 36 decoder.KnownFields(true) 37 if err := decoder.Decode(&overrides); err != nil { 38 return nil, err 39 } 40 if err := overrides.validate(); err != nil { 41 return nil, err 42 } 43 return overrides, nil 44 }