package clone import ( "github.com/influxdata/telegraf" "github.com/influxdata/telegraf/plugins/processors" ) var sampleConfig = ` ## All modifications on inputs and aggregators can be overridden: # name_override = "new_name" # name_prefix = "new_name_prefix" # name_suffix = "new_name_suffix" ## Tags to be added (all values must be strings) # [processors.clone.tags] # additional_tag = "tag_value" ` type Clone struct { NameOverride string NamePrefix string NameSuffix string Tags map[string]string } func (c *Clone) SampleConfig() string { return sampleConfig } func (c *Clone) Description() string { return "Clone metrics and apply modifications." } func (c *Clone) Apply(in ...telegraf.Metric) []telegraf.Metric { cloned := []telegraf.Metric{} for _, metric := range in { cloned = append(cloned, metric.Copy()) if len(c.NameOverride) > 0 { metric.SetName(c.NameOverride) } if len(c.NamePrefix) > 0 { metric.AddPrefix(c.NamePrefix) } if len(c.NameSuffix) > 0 { metric.AddSuffix(c.NameSuffix) } for key, value := range c.Tags { metric.AddTag(key, value) } } return append(in, cloned...) } func init() { processors.Add("clone", func() telegraf.Processor { return &Clone{} }) }