-
-
Notifications
You must be signed in to change notification settings - Fork 3
/
pool.go
44 lines (35 loc) · 830 Bytes
/
pool.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package worker
import (
"sync"
"github.com/bakito/kubexporter/pkg/types"
wp "github.com/vardius/worker-pool/v2"
)
// RunExport run the export wit the given workers
func RunExport(workers []Worker, resources []*types.GroupResource) (*Stats, error) {
var wg sync.WaitGroup
poolSize := len(resources)
// create new pool
pool := wp.New(poolSize)
out := make(chan *types.GroupResource, poolSize)
for _, w := range workers {
if err := pool.AddWorker(w.GenerateWork(&wg, out)); err != nil {
return nil, err
}
}
wg.Add(len(resources))
for _, res := range resources {
if err := pool.Delegate(res); err != nil {
return nil, err
}
}
// stop all workers after jobs are done
wg.Wait()
close(out)
pool.Stop()
st := &Stats{}
for _, w := range workers {
s := w.Stop()
st.Add(&s)
}
return st, nil
}