Adding upstream version 1.34.4.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
e393c3af3f
commit
4978089aab
4963 changed files with 677545 additions and 0 deletions
60
plugins/common/parallel/unordered.go
Normal file
60
plugins/common/parallel/unordered.go
Normal file
|
@ -0,0 +1,60 @@
|
|||
package parallel
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"github.com/influxdata/telegraf"
|
||||
)
|
||||
|
||||
type Unordered struct {
|
||||
wg sync.WaitGroup
|
||||
acc telegraf.Accumulator
|
||||
fn func(telegraf.Metric) []telegraf.Metric
|
||||
inQueue chan telegraf.Metric
|
||||
}
|
||||
|
||||
func NewUnordered(
|
||||
acc telegraf.Accumulator,
|
||||
fn func(telegraf.Metric) []telegraf.Metric,
|
||||
workerCount int,
|
||||
) *Unordered {
|
||||
p := &Unordered{
|
||||
acc: acc,
|
||||
inQueue: make(chan telegraf.Metric, workerCount),
|
||||
fn: fn,
|
||||
}
|
||||
|
||||
// start workers
|
||||
p.wg.Add(1)
|
||||
go func() {
|
||||
p.startWorkers(workerCount)
|
||||
p.wg.Done()
|
||||
}()
|
||||
|
||||
return p
|
||||
}
|
||||
|
||||
func (p *Unordered) startWorkers(count int) {
|
||||
wg := sync.WaitGroup{}
|
||||
wg.Add(count)
|
||||
for i := 0; i < count; i++ {
|
||||
go func() {
|
||||
for metric := range p.inQueue {
|
||||
for _, m := range p.fn(metric) {
|
||||
p.acc.AddMetric(m)
|
||||
}
|
||||
}
|
||||
wg.Done()
|
||||
}()
|
||||
}
|
||||
wg.Wait()
|
||||
}
|
||||
|
||||
func (p *Unordered) Stop() {
|
||||
close(p.inQueue)
|
||||
p.wg.Wait()
|
||||
}
|
||||
|
||||
func (p *Unordered) Enqueue(m telegraf.Metric) {
|
||||
p.inQueue <- m
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue