scraper.go 623 B

1234567891011121314151617181920212223242526272829
  1. package scrape
  2. import (
  3. "github.com/opencost/opencost/modules/collector-source/pkg/metric"
  4. )
  5. type Scraper interface {
  6. Scrape() []metric.Update
  7. }
  8. type ScrapeFunc func() []metric.Update
  9. func concurrentScrape(scrapeFuncs ...ScrapeFunc) []metric.Update {
  10. resultCh := make(chan []metric.Update)
  11. defer close(resultCh)
  12. for _, scrapeFunc := range scrapeFuncs {
  13. go func() {
  14. scrapeResults := scrapeFunc()
  15. resultCh <- scrapeResults
  16. }()
  17. }
  18. var scrapeResults []metric.Update
  19. for range scrapeFuncs {
  20. targetResults := <-resultCh
  21. scrapeResults = append(scrapeResults, targetResults...)
  22. }
  23. return scrapeResults
  24. }