87 lines
2.3 KiB
Go
87 lines
2.3 KiB
Go
package models
|
|
|
|
import (
|
|
"log"
|
|
"time"
|
|
|
|
"github.com/influxdata/telegraf"
|
|
"github.com/influxdata/telegraf/metric"
|
|
)
|
|
|
|
// makemetric is used by both RunningAggregator & RunningInput
|
|
// to make metrics.
|
|
// nameOverride: override the name of the measurement being made.
|
|
// namePrefix: add this prefix to each measurement name.
|
|
// nameSuffix: add this suffix to each measurement name.
|
|
// pluginTags: these are tags that are specific to this plugin.
|
|
// daemonTags: these are daemon-wide global tags, and get applied after pluginTags.
|
|
// filter: this is a filter to apply to each metric being made.
|
|
// applyFilter: if false, the above filter is not applied to each metric.
|
|
// This is used by Aggregators, because aggregators use filters
|
|
// on incoming metrics instead of on created metrics.
|
|
// TODO refactor this to not have such a huge func signature.
|
|
func makemetric(
|
|
measurement string,
|
|
fields map[string]interface{},
|
|
tags map[string]string,
|
|
nameOverride string,
|
|
namePrefix string,
|
|
nameSuffix string,
|
|
pluginTags map[string]string,
|
|
daemonTags map[string]string,
|
|
filter Filter,
|
|
applyFilter bool,
|
|
mType telegraf.ValueType,
|
|
t time.Time,
|
|
) telegraf.Metric {
|
|
if len(fields) == 0 || len(measurement) == 0 {
|
|
return nil
|
|
}
|
|
if tags == nil {
|
|
tags = make(map[string]string)
|
|
}
|
|
|
|
// Override measurement name if set
|
|
if len(nameOverride) != 0 {
|
|
measurement = nameOverride
|
|
}
|
|
// Apply measurement prefix and suffix if set
|
|
if len(namePrefix) != 0 {
|
|
measurement = namePrefix + measurement
|
|
}
|
|
if len(nameSuffix) != 0 {
|
|
measurement = measurement + nameSuffix
|
|
}
|
|
|
|
// Apply plugin-wide tags if set
|
|
for k, v := range pluginTags {
|
|
if _, ok := tags[k]; !ok {
|
|
tags[k] = v
|
|
}
|
|
}
|
|
// Apply daemon-wide tags if set
|
|
for k, v := range daemonTags {
|
|
if _, ok := tags[k]; !ok {
|
|
tags[k] = v
|
|
}
|
|
}
|
|
|
|
// Apply the metric filter(s)
|
|
// for aggregators, the filter does not get applied when the metric is made.
|
|
// instead, the filter is applied to metric incoming into the plugin.
|
|
// ie, it gets applied in the RunningAggregator.Apply function.
|
|
if applyFilter {
|
|
if ok := filter.Apply(measurement, fields, tags); !ok {
|
|
return nil
|
|
}
|
|
}
|
|
|
|
m, err := metric.New(measurement, tags, fields, t, mType)
|
|
if err != nil {
|
|
log.Printf("Error adding point [%s]: %s\n", measurement, err.Error())
|
|
return nil
|
|
}
|
|
|
|
return m
|
|
}
|