func()

in components/otelopscol/receiver/dcgmreceiver/scraper.go [201:233]


func (s *dcgmScraper) pollClient(ctx context.Context, client *dcgmClient, metricsCh chan<- map[uint]deviceMetrics, collectTriggerCh <-chan struct{}) {
	defer client.cleanup()
	for {
		waitTime, err := client.collect()
		// Ignore the error; it's logged in collect()
		if err != nil {
			waitTime = 10 * time.Second
		}
		// Try to poll at least twice per collection interval
		waitTime = max(
			100*time.Millisecond,
			min(
				s.config.CollectionInterval,
				waitTime,
			)/2,
		)
		s.settings.Logger.Sugar().Debugf("Waiting %s for the next collection", waitTime)
		after := time.After(waitTime)
		for after != nil {
			deviceMetrics := client.getDeviceMetrics()
			select {
			case <-ctx.Done():
				return
			case <-collectTriggerCh:
				// Loop and trigger a collect() again.
				after = nil
			case metricsCh <- deviceMetrics:
			case <-after:
				after = nil
			}
		}
	}
}