2016-09-08 14:22:10 +00:00
|
|
|
package models
|
|
|
|
|
|
|
|
import (
|
2017-07-13 22:34:21 +00:00
|
|
|
"sync"
|
|
|
|
|
2016-09-08 14:22:10 +00:00
|
|
|
"github.com/influxdata/telegraf"
|
|
|
|
)
|
|
|
|
|
|
|
|
type RunningProcessor struct {
|
2017-07-13 22:34:21 +00:00
|
|
|
Name string
|
|
|
|
|
|
|
|
sync.Mutex
|
2016-09-08 14:22:10 +00:00
|
|
|
Processor telegraf.Processor
|
|
|
|
Config *ProcessorConfig
|
|
|
|
}
|
|
|
|
|
2016-09-27 15:17:58 +00:00
|
|
|
type RunningProcessors []*RunningProcessor
|
|
|
|
|
|
|
|
func (rp RunningProcessors) Len() int { return len(rp) }
|
|
|
|
func (rp RunningProcessors) Swap(i, j int) { rp[i], rp[j] = rp[j], rp[i] }
|
|
|
|
func (rp RunningProcessors) Less(i, j int) bool { return rp[i].Config.Order < rp[j].Config.Order }
|
|
|
|
|
2016-09-08 14:22:10 +00:00
|
|
|
// FilterConfig containing a name and filter
|
|
|
|
type ProcessorConfig struct {
|
|
|
|
Name string
|
2016-09-27 15:17:58 +00:00
|
|
|
Order int64
|
2016-09-08 14:22:10 +00:00
|
|
|
Filter Filter
|
|
|
|
}
|
|
|
|
|
|
|
|
func (rp *RunningProcessor) Apply(in ...telegraf.Metric) []telegraf.Metric {
|
2017-07-13 22:34:21 +00:00
|
|
|
rp.Lock()
|
|
|
|
defer rp.Unlock()
|
|
|
|
|
2016-09-08 14:22:10 +00:00
|
|
|
ret := []telegraf.Metric{}
|
|
|
|
|
|
|
|
for _, metric := range in {
|
|
|
|
if rp.Config.Filter.IsActive() {
|
|
|
|
// check if the filter should be applied to this metric
|
|
|
|
if ok := rp.Config.Filter.Apply(metric.Name(), metric.Fields(), metric.Tags()); !ok {
|
|
|
|
// this means filter should not be applied
|
|
|
|
ret = append(ret, metric)
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// This metric should pass through the filter, so call the filter Apply
|
|
|
|
// function and append results to the output slice.
|
|
|
|
ret = append(ret, rp.Processor.Apply(metric)...)
|
|
|
|
}
|
|
|
|
|
|
|
|
return ret
|
|
|
|
}
|