52 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
package models
 | 
						|
 | 
						|
import (
 | 
						|
	"sync"
 | 
						|
 | 
						|
	"github.com/influxdata/telegraf"
 | 
						|
)
 | 
						|
 | 
						|
type RunningProcessor struct {
 | 
						|
	Name string
 | 
						|
 | 
						|
	sync.Mutex
 | 
						|
	Processor telegraf.Processor
 | 
						|
	Config    *ProcessorConfig
 | 
						|
}
 | 
						|
 | 
						|
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 }
 | 
						|
 | 
						|
// FilterConfig containing a name and filter
 | 
						|
type ProcessorConfig struct {
 | 
						|
	Name   string
 | 
						|
	Order  int64
 | 
						|
	Filter Filter
 | 
						|
}
 | 
						|
 | 
						|
func (rp *RunningProcessor) Apply(in ...telegraf.Metric) []telegraf.Metric {
 | 
						|
	rp.Lock()
 | 
						|
	defer rp.Unlock()
 | 
						|
 | 
						|
	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
 | 
						|
}
 |