github.com/grafana/pyroscope@v1.18.0/pkg/scheduler/schedulerdiscovery/config.go (about) 1 // SPDX-License-Identifier: AGPL-3.0-only 2 3 package schedulerdiscovery 4 5 import ( 6 "errors" 7 "flag" 8 "fmt" 9 "strings" 10 11 "github.com/go-kit/log" 12 13 "github.com/grafana/pyroscope/pkg/util" 14 ) 15 16 const ( 17 ModeFlagName = "query-scheduler.service-discovery-mode" 18 19 ModeDNS = "dns" 20 ModeRing = "ring" 21 ) 22 23 var modes = []string{ModeDNS, ModeRing} 24 25 type Config struct { 26 Mode string `yaml:"service_discovery_mode" category:"experimental" doc:"hidden"` 27 SchedulerRing util.CommonRingConfig `yaml:"ring" doc:"hidden"` 28 MaxUsedInstances int `yaml:"max_used_instances" category:"experimental"` 29 } 30 31 func (cfg *Config) RegisterFlags(f *flag.FlagSet, logger log.Logger) { 32 f.StringVar(&cfg.Mode, ModeFlagName, ModeDNS, fmt.Sprintf("Service discovery mode that query-frontends and queriers use to find query-scheduler instances.%s Supported values are: %s.", sharedOptionWithRingClient, strings.Join(modes, ", "))) 33 f.IntVar(&cfg.MaxUsedInstances, "query-scheduler.max-used-instances", 0, fmt.Sprintf("The maximum number of query-scheduler instances to use, regardless how many replicas are running. This option can be set only when -%s is set to '%s'. 0 to use all available query-scheduler instances.", ModeFlagName, ModeRing)) 34 cfg.SchedulerRing.RegisterFlags("query-scheduler.ring.", "collectors/", ringKey, f, logger) 35 } 36 37 func (cfg *Config) Validate() error { 38 if !util.StringsContain(modes, cfg.Mode) { 39 return fmt.Errorf("unsupported query-scheduler service discovery mode (supported values are: %s)", strings.Join(modes, ", ")) 40 } 41 if cfg.MaxUsedInstances > 0 && cfg.Mode != ModeRing { 42 return fmt.Errorf("the query-scheduler max used instances can be set only when -%s is set to '%s'", ModeFlagName, ModeRing) 43 } 44 if cfg.MaxUsedInstances < 0 { 45 return errors.New("the query-scheduler max used instances can't be negative") 46 } 47 48 return nil 49 }