func getPeersFromDiscoveryURL(discoverURL string) ([]string, error) { if discoverURL == "" { return nil, nil } u, err := url.Parse(discoverURL) if err != nil { return nil, err } token := u.Path u.Path = "" c, err := client.NewHTTPClient(&http.Transport{}, []string{u.String()}) if err != nil { return nil, err } dc := client.NewDiscoveryKeysAPI(c) ctx, cancel := context.WithTimeout(context.Background(), client.DefaultRequestTimeout) resp, err := dc.Get(ctx, token) cancel() if err != nil { return nil, err } peers := make([]string, 0) // append non-config keys to peers for _, n := range resp.Node.Nodes { if g := path.Base(n.Key); g == "_config" || g == "_state" { continue } peers = append(peers, n.Value) } return peers, nil }
func New(durl string, id uint64, config string) (Discoverer, error) { u, err := url.Parse(durl) if err != nil { return nil, err } token := u.Path u.Path = "" pf, err := proxyFuncFromEnv() if err != nil { return nil, err } c, err := client.NewDiscoveryKeysAPI(&http.Transport{Proxy: pf}, u.String(), client.DefaultRequestTimeout) if err != nil { return nil, err } return &discovery{ cluster: token, id: id, config: config, c: c, url: u, clock: clockwork.NewRealClock(), }, nil }
func newDiscovery(durl, dproxyurl string, id types.ID) (*discovery, error) { u, err := url.Parse(durl) if err != nil { return nil, err } token := u.Path u.Path = "" pf, err := newProxyFunc(dproxyurl) if err != nil { return nil, err } c, err := client.NewHTTPClient(&http.Transport{Proxy: pf}, []string{u.String()}) if err != nil { return nil, err } dc := client.NewDiscoveryKeysAPI(c) return &discovery{ cluster: token, c: dc, id: id, url: u, clock: clockwork.NewRealClock(), }, nil }