|
|
|
@ -94,6 +94,7 @@ type discovery struct {
|
|
|
|
|
clientDatacenter string |
|
|
|
|
tagSeparator string |
|
|
|
|
logger log.Logger |
|
|
|
|
oldSourceList map[string]bool |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (d *discovery) parseServiceNodes(resp *http.Response, name string) (*targetgroup.Group, error) { |
|
|
|
@ -180,6 +181,8 @@ func (d *discovery) Run(ctx context.Context, ch chan<- []*targetgroup.Group) {
|
|
|
|
|
// list of targets simply because there may have been a timeout. If the service is actually
|
|
|
|
|
// gone as far as consul is concerned, that will be picked up during the next iteration of
|
|
|
|
|
// the outer loop.
|
|
|
|
|
|
|
|
|
|
newSourceList := make(map[string]bool) |
|
|
|
|
for name := range srvs { |
|
|
|
|
if name == "consul" { |
|
|
|
|
continue |
|
|
|
@ -195,7 +198,17 @@ func (d *discovery) Run(ctx context.Context, ch chan<- []*targetgroup.Group) {
|
|
|
|
|
break |
|
|
|
|
} |
|
|
|
|
tgs = append(tgs, tg) |
|
|
|
|
newSourceList[tg.Source] = true |
|
|
|
|
} |
|
|
|
|
// when targetGroup disappear, send an update with empty targetList
|
|
|
|
|
for key := range d.oldSourceList { |
|
|
|
|
if !newSourceList[key] { |
|
|
|
|
tgs = append(tgs, &targetgroup.Group{ |
|
|
|
|
Source: key, |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
d.oldSourceList = newSourceList |
|
|
|
|
if err == nil { |
|
|
|
|
// We're returning all Consul services as a single targetgroup.
|
|
|
|
|
ch <- tgs |
|
|
|
@ -216,6 +229,7 @@ func newDiscovery(conf sdConfig) (*discovery, error) {
|
|
|
|
|
refreshInterval: conf.RefreshInterval, |
|
|
|
|
tagSeparator: conf.TagSeparator, |
|
|
|
|
logger: logger, |
|
|
|
|
oldSourceList: make(map[string]bool), |
|
|
|
|
} |
|
|
|
|
return cd, nil |
|
|
|
|
} |
|
|
|
|