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  }