mirror of
https://github.com/prometheus/prometheus.git
synced 2025-03-05 20:59:13 -08:00
discovery: extract Consul shouldWatch logic
This commit is contained in:
parent
e805e68c01
commit
086f7caceb
|
@ -19,5 +19,5 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewConsul(cfg *config.ConsulSDConfig) (*consul.Discovery, error) {
|
func NewConsul(cfg *config.ConsulSDConfig) (*consul.Discovery, error) {
|
||||||
return nil, nil
|
return consul.NewDiscovery(cfg)
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,7 +56,7 @@ type Discovery struct {
|
||||||
clientConf *consul.Config
|
clientConf *consul.Config
|
||||||
clientDatacenter string
|
clientDatacenter string
|
||||||
tagSeparator string
|
tagSeparator string
|
||||||
scrapedServices map[string]struct{} // Set of services which will be discovered.
|
watchedServices []string // Set of services which will be discovered.
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewDiscovery returns a new Discovery for the given config.
|
// NewDiscovery returns a new Discovery for the given config.
|
||||||
|
@ -79,7 +79,7 @@ func NewDiscovery(conf *config.ConsulSDConfig) (*Discovery, error) {
|
||||||
client: client,
|
client: client,
|
||||||
clientConf: clientConf,
|
clientConf: clientConf,
|
||||||
tagSeparator: conf.TagSeparator,
|
tagSeparator: conf.TagSeparator,
|
||||||
scrapedServices: map[string]struct{}{},
|
watchedServices: conf.Services,
|
||||||
}
|
}
|
||||||
// If the datacenter isn't set in the clientConf, let's get it from the local Consul agent
|
// If the datacenter isn't set in the clientConf, let's get it from the local Consul agent
|
||||||
// (Consul default is to use local node's datacenter if one isn't given for a query).
|
// (Consul default is to use local node's datacenter if one isn't given for a query).
|
||||||
|
@ -92,12 +92,23 @@ func NewDiscovery(conf *config.ConsulSDConfig) (*Discovery, error) {
|
||||||
} else {
|
} else {
|
||||||
cd.clientDatacenter = clientConf.Datacenter
|
cd.clientDatacenter = clientConf.Datacenter
|
||||||
}
|
}
|
||||||
for _, name := range conf.Services {
|
|
||||||
cd.scrapedServices[name] = struct{}{}
|
|
||||||
}
|
|
||||||
return cd, nil
|
return cd, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// shouldWatch returns whether the service of the given name should be watched.
|
||||||
|
func (cd *Discovery) shouldWatch(name string) bool {
|
||||||
|
// If there's no fixed set of watched services, we watch everything.
|
||||||
|
if len(cd.watchedServices) == 0 {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
for _, sn := range cd.watchedServices {
|
||||||
|
if sn == name {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
// Run implements the TargetProvider interface.
|
// Run implements the TargetProvider interface.
|
||||||
func (cd *Discovery) Run(ctx context.Context, ch chan<- []*config.TargetGroup) {
|
func (cd *Discovery) Run(ctx context.Context, ch chan<- []*config.TargetGroup) {
|
||||||
defer close(ch)
|
defer close(ch)
|
||||||
|
@ -134,8 +145,7 @@ func (cd *Discovery) Run(ctx context.Context, ch chan<- []*config.TargetGroup) {
|
||||||
|
|
||||||
// Check for new services.
|
// Check for new services.
|
||||||
for name := range srvs {
|
for name := range srvs {
|
||||||
// If no restriction on scraped services is set, we scrape everything.
|
if !cd.shouldWatch(name) {
|
||||||
if _, ok := cd.scrapedServices[name]; len(cd.scrapedServices) > 0 && !ok {
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if _, ok := services[name]; ok {
|
if _, ok := services[name]; ok {
|
||||||
|
|
Loading…
Reference in a new issue