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  }