package telegraf // Processor is a processor plugin interface for defining new inline processors. // these are extremely efficient and should be used over StreamingProcessor if // you do not need asynchronous metric writes. type Processor interface { PluginDescriber // Apply the filter to the given metric. Apply(in ...Metric) []Metric } // StreamingProcessor is a processor that can take in a stream of messages type StreamingProcessor interface { PluginDescriber // Start is called once when the plugin starts; it is only called once per // plugin instance, and never in parallel. // Start should return once it is ready to receive metrics. // The passed in accumulator is the same as the one passed to Add(), so you // can choose to save it in the plugin, or use the one received from Add(). Start(acc Accumulator) error // Add is called for each metric to be processed. The Add() function does not // need to wait for the metric to be processed before returning, and it may // be acceptable to let background goroutine(s) handle the processing if you // have slow processing you need to do in parallel. // Keep in mind Add() should not spawn unbounded goroutines, so you may need // to use a semaphore or pool of workers (eg: reverse_dns plugin does this) // Metrics you don't want to pass downstream should have metric.Drop() called, // rather than simply omitting the acc.AddMetric() call Add(metric Metric, acc Accumulator) error // Stop gives you an opportunity to gracefully shut down the processor. // Once Stop() is called, Add() will not be called any more. If you are using // goroutines, you should wait for any in-progress metrics to be processed // before returning from Stop(). // When stop returns, you should no longer be writing metrics to the // accumulator. Stop() error }