in hub/hub.go [219:248]
func (c *MetricHub) exposeMetrics(metricFamiliesByName map[string]*familyAndMetrics, workers int) string {
fams := make(chan *familyAndMetrics, workers)
results := make(chan string, workers)
respCh := make(chan string, 1)
waitGroup := &sync.WaitGroup{}
for i := 0; i < workers; i++ {
waitGroup.Add(1)
go processFamilyWorker(fams, results, waitGroup)
}
go processFamilyStringsWorker(results, respCh)
for _, fam := range metricFamiliesByName {
fams <- fam
}
close(fams)
waitGroup.Wait()
close(results)
select {
case resp := <-respCh:
return resp
case <-time.After(time.Duration(c.scrapeTimeout) * time.Second):
log.Print("Timeout reached for building metrics string")
return ""
}
}