func NewDiscovery(conf *SDConfig, logger log.Logger) (*Discovery, error) {
	if logger == nil {
		logger = log.NewNopLogger()
	}

	tls, err := config_util.NewTLSConfig(&conf.TLSConfig)
	if err != nil {
		return nil, err
	}
	transport := &http.Transport{
		IdleConnTimeout: 5 * time.Duration(conf.RefreshInterval),
		TLSClientConfig: tls,
		DialContext: conntrack.NewDialContextFunc(
			conntrack.DialWithTracing(),
			conntrack.DialWithName("consul_sd"),
		),
	}
	wrapper := &http.Client{
		Transport: transport,
		Timeout:   35 * time.Second,
	}

	clientConf := &consul.Config{
		Address:    conf.Server,
		Scheme:     conf.Scheme,
		Datacenter: conf.Datacenter,
		Token:      string(conf.Token),
		HttpAuth: &consul.HttpBasicAuth{
			Username: conf.Username,
			Password: string(conf.Password),
		},
		HttpClient: wrapper,
	}
	client, err := consul.NewClient(clientConf)
	if err != nil {
		return nil, err
	}
	cd := &Discovery{
		client:           client,
		tagSeparator:     conf.TagSeparator,
		watchedServices:  conf.Services,
		watchedTags:      conf.ServiceTags,
		watchedNodeMeta:  conf.NodeMeta,
		allowStale:       conf.AllowStale,
		refreshInterval:  time.Duration(conf.RefreshInterval),
		clientDatacenter: conf.Datacenter,
		finalizer:        transport.CloseIdleConnections,
		logger:           logger,
	}
	return cd, nil
}
func NewDiscovery(conf *SDConfig, logger log.Logger) (*Discovery, error) {
	if logger == nil {
		logger = log.NewNopLogger()
	}

	tls, err := config_util.NewTLSConfig(&conf.TLSConfig)
	if err != nil {
		return nil, err
	}
	transport := &http.Transport{
		IdleConnTimeout: 5 * time.Duration(conf.RefreshInterval),
		TLSClientConfig: tls,
		DialContext: conntrack.NewDialContextFunc(
			conntrack.DialWithTracing(),
			conntrack.DialWithName("consul_sd"),
		),
	}
	wrapper := &http.Client{
		Transport: transport,
		Timeout:   35 * time.Second,
	}

	clientConf := &consul.Config{
		Address:    conf.Server,
		Scheme:     conf.Scheme,
		Datacenter: conf.Datacenter,
		Token:      string(conf.Token),
		HttpAuth: &consul.HttpBasicAuth{
			Username: conf.Username,
			Password: string(conf.Password),
		},
		HttpClient: wrapper,
	}
	client, err := consul.NewClient(clientConf)
	if err != nil {
		return nil, err
	}
	cd := &Discovery{
		client:           client,
		tagSeparator:     conf.TagSeparator,
		watchedServices:  conf.Services,
		watchedTags:      conf.ServiceTags,
		watchedNodeMeta:  conf.NodeMeta,
		allowStale:       conf.AllowStale,
		refreshInterval:  time.Duration(conf.RefreshInterval),
		clientDatacenter: conf.Datacenter,
		finalizer:        transport.CloseIdleConnections,
		logger:           logger,
	}
	return cd, nil
}
func NewDiscovery ( conf * SDConfig , logger log . Logger ) ( * Discovery , error ) { if logger == nil { logger = log . NewNopLogger ( ) } tls , err := config_util . NewTLSConfig ( & conf . TLSConfig ) if err != nil { return nil , err } transport := & http . Transport { IdleConnTimeout : 5 * time . Duration ( conf . RefreshInterval ) , TLSClientConfig : tls , DialContext : conntrack . NewDialContextFunc ( conntrack . DialWithTracing ( ) , conntrack . DialWithName ( " " ) , ) , } wrapper := & http . Client { Transport : transport , Timeout : 35 * time . Second , } clientConf := & consul . Config { Address : conf . Server , Scheme : conf . Scheme , Datacenter : conf . Datacenter , Token : string ( conf . Token ) , HttpAuth : & consul . HttpBasicAuth { Username : conf . Username , Password : string ( conf . Password ) , } , HttpClient : wrapper , } client , err := consul . NewClient ( clientConf ) if err != nil { return nil , err } cd := & Discovery { client : client , tagSeparator : conf . TagSeparator , watchedServices : conf . Services , watchedTags : conf . ServiceTags , watchedNodeMeta : conf . NodeMeta , allowStale : conf . AllowStale , refreshInterval : time . Duration ( conf . RefreshInterval ) , clientDatacenter : conf . Datacenter , finalizer : transport . CloseIdleConnections , logger : logger , } return cd , nil }
// NewDiscovery returns a new Discovery for the given config.
NewDiscovery returns a new Discovery for the given config .