code: func (d *Discovery) Run(ctx context.Context, ch chan<- []*targetgroup.Group) {
  	if d.finalizer != nil {
  		defer d.finalizer()
  	}
  	d.initialize(ctx)
  
  	if len(d.watchedServices) == 0 || len(d.watchedTags) != 0 {
  		// We need to watch the catalog.
  		ticker := time.NewTicker(d.refreshInterval)
  
  		// Watched services and their cancellation functions.
  		services := make(map[string]func())
  		var lastIndex uint64
  
  		for {
  			select {
  			case <-ctx.Done():
  				ticker.Stop()
  				return
  			default:
  				d.watchServices(ctx, ch, &lastIndex, services)
  				<-ticker.C
  			}
  		}
  	} else {
  		// We only have fully defined services.
  		for _, name := range d.watchedServices {
  			d.watchService(ctx, ch, name)
  		}
  		<-ctx.Done()
  	}
  }
docs: // Run implements the Discoverer interface.