github.com/grafana/pyroscope@v1.18.0/pkg/scheduler/schedulerdiscovery/discovery.go (about) 1 // SPDX-License-Identifier: AGPL-3.0-only 2 3 package schedulerdiscovery 4 5 import ( 6 "time" 7 8 "github.com/go-kit/log" 9 "github.com/grafana/dskit/services" 10 "github.com/prometheus/client_golang/prometheus" 11 12 "github.com/grafana/pyroscope/pkg/util/servicediscovery" 13 ) 14 15 func New(cfg Config, schedulerAddress string, lookupPeriod time.Duration, component string, receiver servicediscovery.Notifications, logger log.Logger, reg prometheus.Registerer) (services.Service, error) { 16 // Since this is a client for the query-schedulers ring, we append "query-scheduler-client" to the component to clearly differentiate it. 17 component = component + "-query-scheduler-client" 18 19 switch cfg.Mode { 20 case ModeRing: 21 return newRing(cfg, component, receiver, logger, reg) 22 default: 23 return servicediscovery.NewDNS(schedulerAddress, lookupPeriod, receiver) 24 } 25 } 26 27 func newRing(cfg Config, component string, receiver servicediscovery.Notifications, logger log.Logger, reg prometheus.Registerer) (services.Service, error) { 28 client, err := NewRingClient(cfg.SchedulerRing, component, logger, reg) 29 if err != nil { 30 return nil, err 31 } 32 33 const ringCheckPeriod = 5 * time.Second 34 return servicediscovery.NewRing(client, ringCheckPeriod, cfg.MaxUsedInstances, receiver), nil 35 }