chore(serializers)!: Remove old-style creation (#15971)
This commit is contained in:
parent
598079ad64
commit
18cdb1a99e
|
|
@ -87,6 +87,10 @@
|
|||
delivery state update of un-parseable messages from `ACK` to `NACK` without
|
||||
requeueing. This way, those messages are not lost and can optionally be
|
||||
handled using a dead-letter exchange by other means.
|
||||
- Removal of old-style serializer creation. This should not directly affect
|
||||
users as it is an API change. All serializers in Telegraf are already ported
|
||||
to the new framework. If you experience any issues with not being able to
|
||||
create serializers let us know!
|
||||
|
||||
### Bugfixes
|
||||
|
||||
|
|
|
|||
|
|
@ -1212,15 +1212,6 @@ func (c *Config) addOutput(name string, table *ast.Table) error {
|
|||
return err
|
||||
}
|
||||
t.SetSerializer(serializer)
|
||||
} else if t, ok := output.(serializers.SerializerOutput); ok {
|
||||
// Keep the old interface for backward compatibility
|
||||
// DEPRECATED: Please switch your plugin to telegraf.Serializers
|
||||
missThreshold = 1
|
||||
serializer, err := c.addSerializer(name, table)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
t.SetSerializer(serializer)
|
||||
}
|
||||
|
||||
if t, ok := output.(telegraf.SerializerFuncPlugin); ok {
|
||||
|
|
|
|||
|
|
@ -630,7 +630,6 @@ func TestConfig_SerializerInterfaceNewFormat(t *testing.T) {
|
|||
require.NoError(t, c.LoadConfig("./testdata/serializers_new.toml"))
|
||||
require.Len(t, c.Outputs, len(formats))
|
||||
|
||||
cfg := serializers.Config{}
|
||||
override := map[string]struct {
|
||||
param map[string]interface{}
|
||||
mask []string
|
||||
|
|
@ -638,20 +637,12 @@ func TestConfig_SerializerInterfaceNewFormat(t *testing.T) {
|
|||
|
||||
expected := make([]telegraf.Serializer, 0, len(formats))
|
||||
for _, format := range formats {
|
||||
formatCfg := &cfg
|
||||
formatCfg.DataFormat = format
|
||||
|
||||
logger := logging.New("serializers", format, "test")
|
||||
|
||||
var serializer telegraf.Serializer
|
||||
if creator, found := serializers.Serializers[format]; found {
|
||||
t.Logf("new-style %q", format)
|
||||
serializer = creator()
|
||||
} else {
|
||||
t.Logf("old-style %q", format)
|
||||
var err error
|
||||
serializer, err = serializers.NewSerializer(formatCfg)
|
||||
require.NoErrorf(t, err, "No serializer for format %q", format)
|
||||
}
|
||||
|
||||
if settings, found := override[format]; found {
|
||||
|
|
@ -703,98 +694,6 @@ func TestConfig_SerializerInterfaceNewFormat(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestConfig_SerializerInterfaceOldFormat(t *testing.T) {
|
||||
formats := []string{
|
||||
"carbon2",
|
||||
"csv",
|
||||
"graphite",
|
||||
"influx",
|
||||
"json",
|
||||
"msgpack",
|
||||
"nowmetric",
|
||||
"prometheus",
|
||||
"prometheusremotewrite",
|
||||
"splunkmetric",
|
||||
"wavefront",
|
||||
}
|
||||
|
||||
c := config.NewConfig()
|
||||
require.NoError(t, c.LoadConfig("./testdata/serializers_old.toml"))
|
||||
require.Len(t, c.Outputs, len(formats))
|
||||
|
||||
cfg := serializers.Config{}
|
||||
override := map[string]struct {
|
||||
param map[string]interface{}
|
||||
mask []string
|
||||
}{}
|
||||
|
||||
expected := make([]telegraf.Serializer, 0, len(formats))
|
||||
for _, format := range formats {
|
||||
formatCfg := &cfg
|
||||
formatCfg.DataFormat = format
|
||||
|
||||
logger := logging.New("serializers", format, "test")
|
||||
|
||||
var serializer serializers.Serializer
|
||||
if creator, found := serializers.Serializers[format]; found {
|
||||
t.Logf("new-style %q", format)
|
||||
serializer = creator()
|
||||
} else {
|
||||
t.Logf("old-style %q", format)
|
||||
var err error
|
||||
serializer, err = serializers.NewSerializer(formatCfg)
|
||||
require.NoErrorf(t, err, "No serializer for format %q", format)
|
||||
}
|
||||
|
||||
if settings, found := override[format]; found {
|
||||
s := reflect.Indirect(reflect.ValueOf(serializer))
|
||||
for key, value := range settings.param {
|
||||
v := reflect.ValueOf(value)
|
||||
s.FieldByName(key).Set(v)
|
||||
}
|
||||
}
|
||||
models.SetLoggerOnPlugin(serializer, logger)
|
||||
if s, ok := serializer.(telegraf.Initializer); ok {
|
||||
require.NoError(t, s.Init())
|
||||
}
|
||||
expected = append(expected, serializer)
|
||||
}
|
||||
require.Len(t, expected, len(formats))
|
||||
|
||||
actual := make([]interface{}, 0)
|
||||
for _, plugin := range c.Outputs {
|
||||
output, ok := plugin.Output.(*MockupOutputPluginSerializerOld)
|
||||
require.True(t, ok)
|
||||
// Get the parser set with 'SetParser()'
|
||||
if p, ok := output.Serializer.(*models.RunningSerializer); ok {
|
||||
actual = append(actual, p.Serializer)
|
||||
} else {
|
||||
actual = append(actual, output.Serializer)
|
||||
}
|
||||
}
|
||||
require.Len(t, actual, len(formats))
|
||||
|
||||
for i, format := range formats {
|
||||
// Determine the underlying type of the serializer
|
||||
stype := reflect.Indirect(reflect.ValueOf(expected[i])).Interface()
|
||||
// Ignore all unexported fields and fields not relevant for functionality
|
||||
options := []cmp.Option{
|
||||
cmpopts.IgnoreUnexported(stype),
|
||||
cmpopts.IgnoreUnexported(reflect.Indirect(reflect.ValueOf(serializers_prometheus.MetricTypes{})).Interface()),
|
||||
cmpopts.IgnoreTypes(sync.Mutex{}, regexp.Regexp{}),
|
||||
cmpopts.IgnoreInterfaces(struct{ telegraf.Logger }{}),
|
||||
}
|
||||
if settings, found := override[format]; found {
|
||||
options = append(options, cmpopts.IgnoreFields(stype, settings.mask...))
|
||||
}
|
||||
|
||||
// Do a manual comparison as require.EqualValues will also work on unexported fields
|
||||
// that cannot be cleared or ignored.
|
||||
diff := cmp.Diff(expected[i], actual[i], options...)
|
||||
require.Emptyf(t, diff, "Difference in SetSerializer() for %q", format)
|
||||
}
|
||||
}
|
||||
|
||||
func TestConfig_ParserInterface(t *testing.T) {
|
||||
formats := []string{
|
||||
"collectd",
|
||||
|
|
@ -1503,27 +1402,6 @@ func (m *MockupOutputPlugin) Write(_ []telegraf.Metric) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// Mockup OUTPUT plugin for serializer testing to avoid cyclic dependencies
|
||||
type MockupOutputPluginSerializerOld struct {
|
||||
Serializer serializers.Serializer
|
||||
}
|
||||
|
||||
func (m *MockupOutputPluginSerializerOld) SetSerializer(s serializers.Serializer) {
|
||||
m.Serializer = s
|
||||
}
|
||||
func (*MockupOutputPluginSerializerOld) Connect() error {
|
||||
return nil
|
||||
}
|
||||
func (*MockupOutputPluginSerializerOld) Close() error {
|
||||
return nil
|
||||
}
|
||||
func (*MockupOutputPluginSerializerOld) SampleConfig() string {
|
||||
return "Mockup test output plugin"
|
||||
}
|
||||
func (*MockupOutputPluginSerializerOld) Write(_ []telegraf.Metric) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
type MockupOutputPluginSerializerNew struct {
|
||||
Serializer telegraf.Serializer
|
||||
}
|
||||
|
|
@ -1662,7 +1540,4 @@ func init() {
|
|||
outputs.Add("serializer_test_new", func() telegraf.Output {
|
||||
return &MockupOutputPluginSerializerNew{}
|
||||
})
|
||||
outputs.Add("serializer_test_old", func() telegraf.Output {
|
||||
return &MockupOutputPluginSerializerOld{}
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import (
|
|||
|
||||
"github.com/influxdata/telegraf"
|
||||
logging "github.com/influxdata/telegraf/logger"
|
||||
"github.com/influxdata/telegraf/plugins/serializers"
|
||||
"github.com/influxdata/telegraf/selfstat"
|
||||
)
|
||||
|
||||
|
|
@ -19,7 +18,7 @@ type SerializerConfig struct {
|
|||
}
|
||||
|
||||
type RunningSerializer struct {
|
||||
Serializer serializers.Serializer
|
||||
Serializer telegraf.Serializer
|
||||
Config *SerializerConfig
|
||||
log telegraf.Logger
|
||||
|
||||
|
|
@ -28,7 +27,7 @@ type RunningSerializer struct {
|
|||
SerializationTime selfstat.Stat
|
||||
}
|
||||
|
||||
func NewRunningSerializer(serializer serializers.Serializer, config *SerializerConfig) *RunningSerializer {
|
||||
func NewRunningSerializer(serializer telegraf.Serializer, config *SerializerConfig) *RunningSerializer {
|
||||
tags := map[string]string{"type": config.DataFormat}
|
||||
if config.Alias != "" {
|
||||
tags["alias"] = config.Alias
|
||||
|
|
|
|||
|
|
@ -17,7 +17,6 @@ import (
|
|||
"github.com/influxdata/telegraf/plugins/common/proxy"
|
||||
"github.com/influxdata/telegraf/plugins/common/tls"
|
||||
"github.com/influxdata/telegraf/plugins/outputs"
|
||||
"github.com/influxdata/telegraf/plugins/serializers"
|
||||
)
|
||||
|
||||
//go:embed sample.conf
|
||||
|
|
@ -67,7 +66,7 @@ type AMQP struct {
|
|||
tls.ClientConfig
|
||||
proxy.TCPProxy
|
||||
|
||||
serializer serializers.Serializer
|
||||
serializer telegraf.Serializer
|
||||
connect func(*ClientConfig) (Client, error)
|
||||
client Client
|
||||
config *ClientConfig
|
||||
|
|
@ -84,7 +83,7 @@ func (*AMQP) SampleConfig() string {
|
|||
return sampleConfig
|
||||
}
|
||||
|
||||
func (q *AMQP) SetSerializer(serializer serializers.Serializer) {
|
||||
func (q *AMQP) SetSerializer(serializer telegraf.Serializer) {
|
||||
q.serializer = serializer
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -20,7 +20,6 @@ import (
|
|||
"github.com/influxdata/telegraf/internal"
|
||||
"github.com/influxdata/telegraf/internal/choice"
|
||||
"github.com/influxdata/telegraf/plugins/outputs"
|
||||
"github.com/influxdata/telegraf/plugins/serializers"
|
||||
"github.com/influxdata/telegraf/plugins/serializers/json"
|
||||
)
|
||||
|
||||
|
|
@ -36,7 +35,7 @@ type AzureDataExplorer struct {
|
|||
TableName string `toml:"table_name"`
|
||||
CreateTables bool `toml:"create_tables"`
|
||||
IngestionType string `toml:"ingestion_type"`
|
||||
serializer serializers.Serializer
|
||||
serializer telegraf.Serializer
|
||||
kustoClient *kusto.Client
|
||||
metricIngestors map[string]ingest.Ingestor
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@ import (
|
|||
"github.com/influxdata/telegraf/config"
|
||||
"github.com/influxdata/telegraf/internal"
|
||||
"github.com/influxdata/telegraf/plugins/outputs"
|
||||
"github.com/influxdata/telegraf/plugins/serializers"
|
||||
)
|
||||
|
||||
//go:embed sample.conf
|
||||
|
|
@ -45,7 +44,7 @@ type PubSub struct {
|
|||
|
||||
stubTopic func(id string) topic
|
||||
|
||||
serializer serializers.Serializer
|
||||
serializer telegraf.Serializer
|
||||
publishResults []publishResult
|
||||
encoder internal.ContentEncoder
|
||||
}
|
||||
|
|
@ -54,7 +53,7 @@ func (*PubSub) SampleConfig() string {
|
|||
return sampleConfig
|
||||
}
|
||||
|
||||
func (ps *PubSub) SetSerializer(serializer serializers.Serializer) {
|
||||
func (ps *PubSub) SetSerializer(serializer telegraf.Serializer) {
|
||||
ps.serializer = serializer
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ import (
|
|||
"github.com/influxdata/telegraf"
|
||||
"github.com/influxdata/telegraf/config"
|
||||
"github.com/influxdata/telegraf/plugins/outputs"
|
||||
"github.com/influxdata/telegraf/plugins/serializers"
|
||||
)
|
||||
|
||||
//go:embed sample.conf
|
||||
|
|
@ -62,7 +61,7 @@ type EventHubs struct {
|
|||
|
||||
Hub EventHubInterface
|
||||
batchOptions []eventhub.BatchOption
|
||||
serializer serializers.Serializer
|
||||
serializer telegraf.Serializer
|
||||
}
|
||||
|
||||
const (
|
||||
|
|
@ -104,7 +103,7 @@ func (e *EventHubs) Close() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (e *EventHubs) SetSerializer(serializer serializers.Serializer) {
|
||||
func (e *EventHubs) SetSerializer(serializer telegraf.Serializer) {
|
||||
e.serializer = serializer
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@ import (
|
|||
"github.com/influxdata/telegraf/config"
|
||||
"github.com/influxdata/telegraf/internal"
|
||||
"github.com/influxdata/telegraf/plugins/outputs"
|
||||
"github.com/influxdata/telegraf/plugins/serializers"
|
||||
)
|
||||
|
||||
//go:embed sample.conf
|
||||
|
|
@ -33,7 +32,7 @@ type Exec struct {
|
|||
Log telegraf.Logger `toml:"-"`
|
||||
|
||||
runner Runner
|
||||
serializer serializers.Serializer
|
||||
serializer telegraf.Serializer
|
||||
}
|
||||
|
||||
func (*Exec) SampleConfig() string {
|
||||
|
|
@ -47,7 +46,7 @@ func (e *Exec) Init() error {
|
|||
}
|
||||
|
||||
// SetSerializer sets the serializer for the output.
|
||||
func (e *Exec) SetSerializer(serializer serializers.Serializer) {
|
||||
func (e *Exec) SetSerializer(serializer telegraf.Serializer) {
|
||||
e.serializer = serializer
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,6 @@ import (
|
|||
"github.com/influxdata/telegraf/config"
|
||||
"github.com/influxdata/telegraf/internal/process"
|
||||
"github.com/influxdata/telegraf/plugins/outputs"
|
||||
"github.com/influxdata/telegraf/plugins/serializers"
|
||||
)
|
||||
|
||||
//go:embed sample.conf
|
||||
|
|
@ -29,14 +28,14 @@ type Execd struct {
|
|||
Log telegraf.Logger
|
||||
|
||||
process *process.Process
|
||||
serializer serializers.Serializer
|
||||
serializer telegraf.Serializer
|
||||
}
|
||||
|
||||
func (*Execd) SampleConfig() string {
|
||||
return sampleConfig
|
||||
}
|
||||
|
||||
func (e *Execd) SetSerializer(s serializers.Serializer) {
|
||||
func (e *Execd) SetSerializer(s telegraf.Serializer) {
|
||||
e.serializer = s
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@ import (
|
|||
"github.com/influxdata/telegraf/internal"
|
||||
"github.com/influxdata/telegraf/internal/rotate"
|
||||
"github.com/influxdata/telegraf/plugins/outputs"
|
||||
"github.com/influxdata/telegraf/plugins/serializers"
|
||||
)
|
||||
|
||||
//go:embed sample.conf
|
||||
|
|
@ -32,14 +31,14 @@ type File struct {
|
|||
encoder internal.ContentEncoder
|
||||
writer io.Writer
|
||||
closers []io.Closer
|
||||
serializer serializers.Serializer
|
||||
serializer telegraf.Serializer
|
||||
}
|
||||
|
||||
func (*File) SampleConfig() string {
|
||||
return sampleConfig
|
||||
}
|
||||
|
||||
func (f *File) SetSerializer(serializer serializers.Serializer) {
|
||||
func (f *File) SetSerializer(serializer telegraf.Serializer) {
|
||||
f.serializer = serializer
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -25,7 +25,6 @@ import (
|
|||
common_aws "github.com/influxdata/telegraf/plugins/common/aws"
|
||||
common_http "github.com/influxdata/telegraf/plugins/common/http"
|
||||
"github.com/influxdata/telegraf/plugins/outputs"
|
||||
"github.com/influxdata/telegraf/plugins/serializers"
|
||||
)
|
||||
|
||||
//go:embed sample.conf
|
||||
|
|
@ -56,7 +55,7 @@ type HTTP struct {
|
|||
Log telegraf.Logger `toml:"-"`
|
||||
|
||||
client *http.Client
|
||||
serializer serializers.Serializer
|
||||
serializer telegraf.Serializer
|
||||
|
||||
awsCfg *aws.Config
|
||||
common_aws.CredentialConfig
|
||||
|
|
@ -70,7 +69,7 @@ func (*HTTP) SampleConfig() string {
|
|||
return sampleConfig
|
||||
}
|
||||
|
||||
func (h *HTTP) SetSerializer(serializer serializers.Serializer) {
|
||||
func (h *HTTP) SetSerializer(serializer telegraf.Serializer) {
|
||||
h.serializer = serializer
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -21,7 +21,6 @@ import (
|
|||
common_aws "github.com/influxdata/telegraf/plugins/common/aws"
|
||||
common_http "github.com/influxdata/telegraf/plugins/common/http"
|
||||
"github.com/influxdata/telegraf/plugins/common/oauth"
|
||||
"github.com/influxdata/telegraf/plugins/serializers"
|
||||
"github.com/influxdata/telegraf/plugins/serializers/influx"
|
||||
"github.com/influxdata/telegraf/plugins/serializers/json"
|
||||
"github.com/influxdata/telegraf/testutil"
|
||||
|
|
@ -735,7 +734,7 @@ func TestBatchedUnbatched(t *testing.T) {
|
|||
jsonSerializer := &json.Serializer{}
|
||||
require.NoError(t, jsonSerializer.Init())
|
||||
|
||||
s := map[string]serializers.Serializer{
|
||||
s := map[string]telegraf.Serializer{
|
||||
"influx": influxSerializer,
|
||||
"json": jsonSerializer,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@ import (
|
|||
"github.com/influxdata/telegraf/plugins/common/kafka"
|
||||
"github.com/influxdata/telegraf/plugins/common/proxy"
|
||||
"github.com/influxdata/telegraf/plugins/outputs"
|
||||
"github.com/influxdata/telegraf/plugins/serializers"
|
||||
)
|
||||
|
||||
//go:embed sample.conf
|
||||
|
|
@ -56,7 +55,7 @@ type Kafka struct {
|
|||
producerFunc func(addrs []string, config *sarama.Config) (sarama.SyncProducer, error)
|
||||
producer sarama.SyncProducer
|
||||
|
||||
serializer serializers.Serializer
|
||||
serializer telegraf.Serializer
|
||||
}
|
||||
|
||||
type TopicSuffix struct {
|
||||
|
|
@ -114,7 +113,7 @@ func (k *Kafka) GetTopicName(metric telegraf.Metric) (telegraf.Metric, string) {
|
|||
return metric, topicName
|
||||
}
|
||||
|
||||
func (k *Kafka) SetSerializer(serializer serializers.Serializer) {
|
||||
func (k *Kafka) SetSerializer(serializer telegraf.Serializer) {
|
||||
k.serializer = serializer
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,6 @@ import (
|
|||
"github.com/influxdata/telegraf"
|
||||
common_aws "github.com/influxdata/telegraf/plugins/common/aws"
|
||||
"github.com/influxdata/telegraf/plugins/outputs"
|
||||
"github.com/influxdata/telegraf/plugins/serializers"
|
||||
)
|
||||
|
||||
//go:embed sample.conf
|
||||
|
|
@ -32,7 +31,7 @@ type (
|
|||
Debug bool `toml:"debug"`
|
||||
|
||||
Log telegraf.Logger `toml:"-"`
|
||||
serializer serializers.Serializer
|
||||
serializer telegraf.Serializer
|
||||
svc kinesisClient
|
||||
|
||||
common_aws.CredentialConfig
|
||||
|
|
@ -86,7 +85,7 @@ func (k *KinesisOutput) Close() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (k *KinesisOutput) SetSerializer(serializer serializers.Serializer) {
|
||||
func (k *KinesisOutput) SetSerializer(serializer telegraf.Serializer) {
|
||||
k.serializer = serializer
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@ import (
|
|||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/influxdata/telegraf"
|
||||
"github.com/influxdata/telegraf/plugins/serializers"
|
||||
"github.com/influxdata/telegraf/plugins/serializers/influx"
|
||||
"github.com/influxdata/telegraf/testutil"
|
||||
)
|
||||
|
|
@ -566,11 +565,7 @@ func (m *mockKinesisPutRecords) AssertRequests(
|
|||
}
|
||||
}
|
||||
|
||||
func createTestMetric(
|
||||
t *testing.T,
|
||||
name string,
|
||||
serializer serializers.Serializer,
|
||||
) (telegraf.Metric, []byte) {
|
||||
func createTestMetric(t *testing.T, name string, serializer telegraf.Serializer) (telegraf.Metric, []byte) {
|
||||
metric := testutil.TestMetric(1, name)
|
||||
|
||||
data, err := serializer.Serialize(metric)
|
||||
|
|
@ -579,11 +574,7 @@ func createTestMetric(
|
|||
return metric, data
|
||||
}
|
||||
|
||||
func createTestMetrics(
|
||||
t *testing.T,
|
||||
count uint32,
|
||||
serializer serializers.Serializer,
|
||||
) ([]telegraf.Metric, [][]byte) {
|
||||
func createTestMetrics(t *testing.T, count uint32, serializer telegraf.Serializer) ([]telegraf.Metric, [][]byte) {
|
||||
metrics := make([]telegraf.Metric, 0, count)
|
||||
metricsData := make([][]byte, 0, count)
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,6 @@ import (
|
|||
"github.com/influxdata/telegraf/internal"
|
||||
"github.com/influxdata/telegraf/plugins/common/mqtt"
|
||||
"github.com/influxdata/telegraf/plugins/outputs"
|
||||
"github.com/influxdata/telegraf/plugins/serializers"
|
||||
)
|
||||
|
||||
//go:embed sample.conf
|
||||
|
|
@ -36,7 +35,7 @@ type MQTT struct {
|
|||
mqtt.MqttConfig
|
||||
|
||||
client mqtt.Client
|
||||
serializer serializers.Serializer
|
||||
serializer telegraf.Serializer
|
||||
generator *TopicNameGenerator
|
||||
|
||||
homieDeviceNameGenerator *HomieGenerator
|
||||
|
|
@ -118,7 +117,7 @@ func (m *MQTT) Connect() error {
|
|||
return err
|
||||
}
|
||||
|
||||
func (m *MQTT) SetSerializer(serializer serializers.Serializer) {
|
||||
func (m *MQTT) SetSerializer(serializer telegraf.Serializer) {
|
||||
m.serializer = serializer
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -17,7 +17,6 @@ import (
|
|||
"github.com/influxdata/telegraf/internal/choice"
|
||||
"github.com/influxdata/telegraf/plugins/common/tls"
|
||||
"github.com/influxdata/telegraf/plugins/outputs"
|
||||
"github.com/influxdata/telegraf/plugins/serializers"
|
||||
)
|
||||
|
||||
//go:embed sample.conf
|
||||
|
|
@ -39,7 +38,7 @@ type NATS struct {
|
|||
conn *nats.Conn
|
||||
jetstreamClient jetstream.JetStream
|
||||
jetstreamStreamConfig *jetstream.StreamConfig
|
||||
serializer serializers.Serializer
|
||||
serializer telegraf.Serializer
|
||||
}
|
||||
|
||||
// StreamConfig is the configuration for creating stream
|
||||
|
|
@ -83,7 +82,7 @@ func (*NATS) SampleConfig() string {
|
|||
return sampleConfig
|
||||
}
|
||||
|
||||
func (n *NATS) SetSerializer(serializer serializers.Serializer) {
|
||||
func (n *NATS) SetSerializer(serializer telegraf.Serializer) {
|
||||
n.serializer = serializer
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ import (
|
|||
|
||||
"github.com/influxdata/telegraf"
|
||||
"github.com/influxdata/telegraf/plugins/outputs"
|
||||
"github.com/influxdata/telegraf/plugins/serializers"
|
||||
)
|
||||
|
||||
//go:embed sample.conf
|
||||
|
|
@ -21,14 +20,14 @@ type NSQ struct {
|
|||
Log telegraf.Logger `toml:"-"`
|
||||
|
||||
producer *nsq.Producer
|
||||
serializer serializers.Serializer
|
||||
serializer telegraf.Serializer
|
||||
}
|
||||
|
||||
func (*NSQ) SampleConfig() string {
|
||||
return sampleConfig
|
||||
}
|
||||
|
||||
func (n *NSQ) SetSerializer(serializer serializers.Serializer) {
|
||||
func (n *NSQ) SetSerializer(serializer telegraf.Serializer) {
|
||||
n.serializer = serializer
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@ import (
|
|||
"github.com/influxdata/telegraf/internal"
|
||||
common_tls "github.com/influxdata/telegraf/plugins/common/tls"
|
||||
"github.com/influxdata/telegraf/plugins/outputs"
|
||||
"github.com/influxdata/telegraf/plugins/serializers"
|
||||
)
|
||||
|
||||
//go:embed sample.conf
|
||||
|
|
@ -32,7 +31,7 @@ type SocketWriter struct {
|
|||
common_tls.ClientConfig
|
||||
Log telegraf.Logger `toml:"-"`
|
||||
|
||||
serializers.Serializer
|
||||
serializer telegraf.Serializer
|
||||
|
||||
encoder internal.ContentEncoder
|
||||
|
||||
|
|
@ -43,8 +42,8 @@ func (*SocketWriter) SampleConfig() string {
|
|||
return sampleConfig
|
||||
}
|
||||
|
||||
func (sw *SocketWriter) SetSerializer(s serializers.Serializer) {
|
||||
sw.Serializer = s
|
||||
func (sw *SocketWriter) SetSerializer(s telegraf.Serializer) {
|
||||
sw.serializer = s
|
||||
}
|
||||
|
||||
func (sw *SocketWriter) Connect() error {
|
||||
|
|
@ -141,7 +140,7 @@ func (sw *SocketWriter) Write(metrics []telegraf.Metric) error {
|
|||
}
|
||||
|
||||
for _, m := range metrics {
|
||||
bs, err := sw.Serialize(m)
|
||||
bs, err := sw.serializer.Serialize(m)
|
||||
if err != nil {
|
||||
sw.Log.Debugf("Could not serialize metric: %v", err)
|
||||
continue
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ func newSocketWriter(t *testing.T, addr string) *SocketWriter {
|
|||
require.NoError(t, serializer.Init())
|
||||
return &SocketWriter{
|
||||
Address: addr,
|
||||
Serializer: serializer,
|
||||
serializer: serializer,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -79,12 +79,12 @@ func TestSocketWriter_unixgram(t *testing.T) {
|
|||
|
||||
func testSocketWriterStream(t *testing.T, sw *SocketWriter, lconn net.Conn) {
|
||||
metrics := []telegraf.Metric{testutil.TestMetric(1, "test")}
|
||||
mbs1out, err := sw.Serialize(metrics[0])
|
||||
mbs1out, err := sw.serializer.Serialize(metrics[0])
|
||||
require.NoError(t, err)
|
||||
mbs1out, err = sw.encoder.Encode(mbs1out)
|
||||
require.NoError(t, err)
|
||||
metrics = append(metrics, testutil.TestMetric(2, "test"))
|
||||
mbs2out, err := sw.Serialize(metrics[1])
|
||||
mbs2out, err := sw.serializer.Serialize(metrics[1])
|
||||
require.NoError(t, err)
|
||||
mbs2out, err = sw.encoder.Encode(mbs2out)
|
||||
require.NoError(t, err)
|
||||
|
|
@ -104,13 +104,13 @@ func testSocketWriterStream(t *testing.T, sw *SocketWriter, lconn net.Conn) {
|
|||
|
||||
func testSocketWriterPacket(t *testing.T, sw *SocketWriter, lconn net.PacketConn) {
|
||||
metrics := []telegraf.Metric{testutil.TestMetric(1, "test")}
|
||||
mbs1out, err := sw.Serialize(metrics[0])
|
||||
mbs1out, err := sw.serializer.Serialize(metrics[0])
|
||||
require.NoError(t, err)
|
||||
mbs1out, err = sw.encoder.Encode(mbs1out)
|
||||
require.NoError(t, err)
|
||||
mbs1str := string(mbs1out)
|
||||
metrics = append(metrics, testutil.TestMetric(2, "test"))
|
||||
mbs2out, err := sw.Serialize(metrics[1])
|
||||
mbs2out, err := sw.serializer.Serialize(metrics[1])
|
||||
require.NoError(t, err)
|
||||
mbs2out, err = sw.encoder.Encode(mbs2out)
|
||||
require.NoError(t, err)
|
||||
|
|
@ -191,7 +191,7 @@ func TestSocketWriter_Write_reconnect(t *testing.T) {
|
|||
wg.Wait()
|
||||
require.NoError(t, lerr)
|
||||
|
||||
mbsout, err := sw.Serialize(metrics[0])
|
||||
mbsout, err := sw.serializer.Serialize(metrics[0])
|
||||
require.NoError(t, err)
|
||||
buf := make([]byte, 256)
|
||||
n, err := lconn.Read(buf)
|
||||
|
|
|
|||
|
|
@ -14,7 +14,6 @@ import (
|
|||
"github.com/influxdata/telegraf/config"
|
||||
common_tls "github.com/influxdata/telegraf/plugins/common/tls"
|
||||
"github.com/influxdata/telegraf/plugins/outputs"
|
||||
"github.com/influxdata/telegraf/plugins/serializers"
|
||||
)
|
||||
|
||||
//go:embed sample.conf
|
||||
|
|
@ -35,7 +34,7 @@ type STOMP struct {
|
|||
conn net.Conn
|
||||
stomp *stomp.Conn
|
||||
|
||||
serialize serializers.Serializer
|
||||
serialize telegraf.Serializer
|
||||
}
|
||||
|
||||
func (q *STOMP) Connect() error {
|
||||
|
|
@ -71,7 +70,7 @@ func (q *STOMP) Connect() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (q *STOMP) SetSerializer(serializer serializers.Serializer) {
|
||||
func (q *STOMP) SetSerializer(serializer telegraf.Serializer) {
|
||||
q.serialize = serializer
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ import (
|
|||
"github.com/influxdata/telegraf/internal"
|
||||
"github.com/influxdata/telegraf/models"
|
||||
"github.com/influxdata/telegraf/plugins/outputs"
|
||||
"github.com/influxdata/telegraf/plugins/serializers"
|
||||
"github.com/influxdata/telegraf/plugins/serializers/carbon2"
|
||||
"github.com/influxdata/telegraf/plugins/serializers/graphite"
|
||||
"github.com/influxdata/telegraf/plugins/serializers/prometheus"
|
||||
|
|
@ -57,7 +56,7 @@ type SumoLogic struct {
|
|||
Log telegraf.Logger `toml:"-"`
|
||||
|
||||
client *http.Client
|
||||
serializer serializers.Serializer
|
||||
serializer telegraf.Serializer
|
||||
|
||||
headers map[string]string
|
||||
}
|
||||
|
|
@ -66,7 +65,7 @@ func (*SumoLogic) SampleConfig() string {
|
|||
return sampleConfig
|
||||
}
|
||||
|
||||
func (s *SumoLogic) SetSerializer(serializer serializers.Serializer) {
|
||||
func (s *SumoLogic) SetSerializer(serializer telegraf.Serializer) {
|
||||
s.serializer = serializer
|
||||
}
|
||||
|
||||
|
|
@ -82,7 +81,7 @@ func (s *SumoLogic) createClient() *http.Client {
|
|||
func (s *SumoLogic) Connect() error {
|
||||
s.headers = make(map[string]string)
|
||||
|
||||
var serializer serializers.Serializer
|
||||
var serializer telegraf.Serializer
|
||||
if unwrapped, ok := s.serializer.(*models.RunningSerializer); ok {
|
||||
serializer = unwrapped.Serializer
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@ import (
|
|||
"github.com/influxdata/telegraf/plugins/common/proxy"
|
||||
"github.com/influxdata/telegraf/plugins/common/tls"
|
||||
"github.com/influxdata/telegraf/plugins/outputs"
|
||||
"github.com/influxdata/telegraf/plugins/serializers"
|
||||
)
|
||||
|
||||
//go:embed sample.conf
|
||||
|
|
@ -42,7 +41,7 @@ type WebSocket struct {
|
|||
tls.ClientConfig
|
||||
|
||||
conn *ws.Conn
|
||||
serializer serializers.Serializer
|
||||
serializer telegraf.Serializer
|
||||
}
|
||||
|
||||
func (*WebSocket) SampleConfig() string {
|
||||
|
|
@ -50,7 +49,7 @@ func (*WebSocket) SampleConfig() string {
|
|||
}
|
||||
|
||||
// SetSerializer implements serializers.SerializerOutput.
|
||||
func (w *WebSocket) SetSerializer(serializer serializers.Serializer) {
|
||||
func (w *WebSocket) SetSerializer(serializer telegraf.Serializer) {
|
||||
w.serializer = serializer
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ import (
|
|||
"github.com/influxdata/telegraf/internal/process"
|
||||
"github.com/influxdata/telegraf/plugins/parsers/influx"
|
||||
"github.com/influxdata/telegraf/plugins/processors"
|
||||
"github.com/influxdata/telegraf/plugins/serializers"
|
||||
)
|
||||
|
||||
//go:embed sample.conf
|
||||
|
|
@ -28,7 +27,7 @@ type Execd struct {
|
|||
Log telegraf.Logger
|
||||
|
||||
parser telegraf.Parser
|
||||
serializer serializers.Serializer
|
||||
serializer telegraf.Serializer
|
||||
acc telegraf.Accumulator
|
||||
process *process.Process
|
||||
}
|
||||
|
|
|
|||
|
|
@ -101,7 +101,7 @@ func (s *Serializer) SerializeBatch(metrics []telegraf.Metric) ([]byte, error) {
|
|||
|
||||
func init() {
|
||||
serializers.Add("binary",
|
||||
func() serializers.Serializer {
|
||||
func() telegraf.Serializer {
|
||||
return &Serializer{}
|
||||
},
|
||||
)
|
||||
|
|
|
|||
|
|
@ -112,16 +112,8 @@ func (s *Serializer) createObject(metric telegraf.Metric) []byte {
|
|||
|
||||
func init() {
|
||||
serializers.Add("carbon2",
|
||||
func() serializers.Serializer {
|
||||
func() telegraf.Serializer {
|
||||
return &Serializer{}
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
// InitFromConfig is a compatibility function to construct the parser the old way
|
||||
func (s *Serializer) InitFromConfig(cfg *serializers.Config) error {
|
||||
s.Format = cfg.Carbon2Format
|
||||
s.SanitizeReplaceChar = cfg.Carbon2SanitizeReplaceChar
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -192,7 +192,7 @@ func (s *Serializer) createEvent(m telegraf.Metric) (*cloudevents.Event, error)
|
|||
|
||||
func init() {
|
||||
serializers.Add("cloudevents",
|
||||
func() serializers.Serializer {
|
||||
func() telegraf.Serializer {
|
||||
return &Serializer{}
|
||||
},
|
||||
)
|
||||
|
|
|
|||
|
|
@ -238,18 +238,8 @@ func (s *Serializer) writeDataOrdered(metric telegraf.Metric) error {
|
|||
|
||||
func init() {
|
||||
serializers.Add("csv",
|
||||
func() serializers.Serializer {
|
||||
func() telegraf.Serializer {
|
||||
return &Serializer{}
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
// InitFromConfig is a compatibility function to construct the parser the old way
|
||||
func (s *Serializer) InitFromConfig(cfg *serializers.Config) error {
|
||||
s.TimestampFormat = cfg.TimestampFormat
|
||||
s.Separator = cfg.CSVSeparator
|
||||
s.Header = cfg.CSVHeader
|
||||
s.Prefix = cfg.CSVPrefix
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -355,20 +355,8 @@ func compatibleSanitize(name, value string) string {
|
|||
|
||||
func init() {
|
||||
serializers.Add("graphite",
|
||||
func() serializers.Serializer {
|
||||
func() telegraf.Serializer {
|
||||
return &GraphiteSerializer{}
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
// InitFromConfig is a compatibility function to construct the parser the old way
|
||||
func (s *GraphiteSerializer) InitFromConfig(cfg *serializers.Config) error {
|
||||
s.Prefix = cfg.Prefix
|
||||
s.Templates = cfg.Templates
|
||||
s.StrictRegex = cfg.GraphiteStrictRegex
|
||||
s.TagSupport = cfg.GraphiteTagSupport
|
||||
s.TagSanitizeMode = cfg.GraphiteTagSanitizeMode
|
||||
s.Separator = cfg.GraphiteSeparator
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -328,17 +328,8 @@ func appendStringField(buf []byte, value string) []byte {
|
|||
|
||||
func init() {
|
||||
serializers.Add("influx",
|
||||
func() serializers.Serializer {
|
||||
func() telegraf.Serializer {
|
||||
return &Serializer{}
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
// InitFromConfig is a compatibility function to construct the parser the old way
|
||||
func (s *Serializer) InitFromConfig(cfg *serializers.Config) error {
|
||||
s.MaxLineBytes = cfg.InfluxMaxLineBytes
|
||||
s.SortFields = cfg.InfluxSortFields
|
||||
s.UintSupport = cfg.InfluxUintSupport
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -162,19 +162,8 @@ func (s *Serializer) transform(obj interface{}) (interface{}, error) {
|
|||
|
||||
func init() {
|
||||
serializers.Add("json",
|
||||
func() serializers.Serializer {
|
||||
func() telegraf.Serializer {
|
||||
return &Serializer{}
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
// InitFromConfig is a compatibility function to construct the parser the old way
|
||||
func (s *Serializer) InitFromConfig(cfg *serializers.Config) error {
|
||||
s.TimestampUnits = config.Duration(cfg.TimestampUnits)
|
||||
s.TimestampFormat = cfg.TimestampFormat
|
||||
s.Transformation = cfg.Transformation
|
||||
s.NestedFieldsInclude = cfg.JSONNestedFieldInclude
|
||||
s.NestedFieldsExclude = cfg.JSONNestedFieldExclude
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,13 +40,8 @@ func (s *Serializer) SerializeBatch(metrics []telegraf.Metric) ([]byte, error) {
|
|||
|
||||
func init() {
|
||||
serializers.Add("msgpack",
|
||||
func() serializers.Serializer {
|
||||
func() telegraf.Serializer {
|
||||
return &Serializer{}
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
// InitFromConfig is a compatibility function to construct the parser the old way
|
||||
func (s *Serializer) InitFromConfig(_ *serializers.Config) error {
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -130,13 +130,8 @@ func verifyValue(v interface{}) bool {
|
|||
|
||||
func init() {
|
||||
serializers.Add("nowmetric",
|
||||
func() serializers.Serializer {
|
||||
func() telegraf.Serializer {
|
||||
return &Serializer{}
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
// InitFromConfig is a compatibility function to construct the parser the old way
|
||||
func (s *Serializer) InitFromConfig(_ *serializers.Config) error {
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -88,18 +88,8 @@ func (s *Serializer) SerializeBatch(metrics []telegraf.Metric) ([]byte, error) {
|
|||
|
||||
func init() {
|
||||
serializers.Add("prometheus",
|
||||
func() serializers.Serializer {
|
||||
func() telegraf.Serializer {
|
||||
return &Serializer{}
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
// InitFromConfig is a compatibility function to construct the parser the old way
|
||||
func (s *Serializer) InitFromConfig(cfg *serializers.Config) error {
|
||||
s.FormatConfig.CompactEncoding = cfg.PrometheusCompactEncoding
|
||||
s.FormatConfig.SortMetrics = cfg.PrometheusSortMetrics
|
||||
s.FormatConfig.StringAsLabel = cfg.PrometheusStringAsLabel
|
||||
s.FormatConfig.ExportTimestamp = cfg.PrometheusExportTimestamp
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -350,16 +350,8 @@ func (sl sortableLabels) Swap(i, j int) {
|
|||
|
||||
func init() {
|
||||
serializers.Add("prometheusremotewrite",
|
||||
func() serializers.Serializer {
|
||||
func() telegraf.Serializer {
|
||||
return &Serializer{}
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
// InitFromConfig is a compatibility function to construct the parser the old way
|
||||
func (s *Serializer) InitFromConfig(cfg *serializers.Config) error {
|
||||
s.SortMetrics = cfg.PrometheusSortMetrics
|
||||
s.StringAsLabel = cfg.PrometheusStringAsLabel
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,14 +1,9 @@
|
|||
package serializers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/influxdata/telegraf"
|
||||
)
|
||||
import "github.com/influxdata/telegraf"
|
||||
|
||||
// Creator is the function to create a new serializer
|
||||
type Creator func() Serializer
|
||||
type Creator func() telegraf.Serializer
|
||||
|
||||
// Serializers contains the registry of all known serializers (following the new style)
|
||||
var Serializers = make(map[string]Creator)
|
||||
|
|
@ -17,157 +12,3 @@ var Serializers = make(map[string]Creator)
|
|||
func Add(name string, creator Creator) {
|
||||
Serializers[name] = creator
|
||||
}
|
||||
|
||||
// SerializerOutput is an interface for output plugins that are able to
|
||||
// serialize telegraf metrics into arbitrary data formats.
|
||||
type SerializerOutput interface {
|
||||
// SetSerializer sets the serializer function for the interface.
|
||||
SetSerializer(serializer Serializer)
|
||||
}
|
||||
|
||||
// Serializer is an interface defining functions that a serializer plugin must
|
||||
// satisfy.
|
||||
//
|
||||
// Implementations of this interface should be reentrant but are not required
|
||||
// to be thread-safe.
|
||||
type Serializer interface {
|
||||
// Serialize takes a single telegraf metric and turns it into a byte buffer.
|
||||
// separate metrics should be separated by a newline, and there should be
|
||||
// a newline at the end of the buffer.
|
||||
//
|
||||
// New plugins should use SerializeBatch instead to allow for non-line
|
||||
// delimited metrics.
|
||||
Serialize(metric telegraf.Metric) ([]byte, error)
|
||||
|
||||
// SerializeBatch takes an array of telegraf metric and serializes it into
|
||||
// a byte buffer. This method is not required to be suitable for use with
|
||||
// line oriented framing.
|
||||
SerializeBatch(metrics []telegraf.Metric) ([]byte, error)
|
||||
}
|
||||
|
||||
// SerializerCompatibility is an interface for backward-compatible initialization of serializers
|
||||
type SerializerCompatibility interface {
|
||||
// InitFromConfig sets the serializers internal variables from the old-style config
|
||||
InitFromConfig(config *Config) error
|
||||
}
|
||||
|
||||
// Config is a struct that covers the data types needed for all serializer types,
|
||||
// and can be used to instantiate _any_ of the serializers.
|
||||
type Config struct {
|
||||
// DataFormat can be one of the serializer types listed in NewSerializer.
|
||||
DataFormat string `toml:"data_format"`
|
||||
|
||||
// Carbon2 metric format.
|
||||
Carbon2Format string `toml:"carbon2_format"`
|
||||
|
||||
// Character used for metric name sanitization in Carbon2.
|
||||
Carbon2SanitizeReplaceChar string `toml:"carbon2_sanitize_replace_char"`
|
||||
|
||||
// Separator for CSV
|
||||
CSVSeparator string `toml:"csv_separator"`
|
||||
|
||||
// Output a CSV header for naming the columns
|
||||
CSVHeader bool `toml:"csv_header"`
|
||||
|
||||
// Prefix the tag and field columns for CSV format
|
||||
CSVPrefix bool `toml:"csv_column_prefix"`
|
||||
|
||||
// Support tags in graphite protocol
|
||||
GraphiteTagSupport bool `toml:"graphite_tag_support"`
|
||||
|
||||
// Support tags which follow the spec
|
||||
GraphiteTagSanitizeMode string `toml:"graphite_tag_sanitize_mode"`
|
||||
|
||||
// Character for separating metric name and field for Graphite tags
|
||||
GraphiteSeparator string `toml:"graphite_separator"`
|
||||
|
||||
// Regex string
|
||||
GraphiteStrictRegex string `toml:"graphite_strict_sanitize_regex"`
|
||||
|
||||
// Maximum line length in bytes; influx format only
|
||||
InfluxMaxLineBytes int `toml:"influx_max_line_bytes"`
|
||||
|
||||
// Sort field keys, set to true only when debugging as it less performant
|
||||
// than unsorted fields; influx format only
|
||||
InfluxSortFields bool `toml:"influx_sort_fields"`
|
||||
|
||||
// Support unsigned integer output; influx format only
|
||||
InfluxUintSupport bool `toml:"influx_uint_support"`
|
||||
|
||||
// Omit timestamp from output; influx format only
|
||||
InfluxOmitTimestamp bool `toml:"influx_omit_timestamp"`
|
||||
|
||||
// Prefix to add to all measurements, only supports Graphite
|
||||
Prefix string `toml:"prefix"`
|
||||
|
||||
// Template for converting telegraf metrics into Graphite
|
||||
// only supports Graphite
|
||||
Template string `toml:"template"`
|
||||
|
||||
// Templates same Template, but multiple
|
||||
Templates []string `toml:"templates"`
|
||||
|
||||
// Timestamp units to use for JSON formatted output
|
||||
TimestampUnits time.Duration `toml:"timestamp_units"`
|
||||
|
||||
// Timestamp format to use for JSON and CSV formatted output
|
||||
TimestampFormat string `toml:"timestamp_format"`
|
||||
|
||||
// Transformation as JSONata expression to use for JSON formatted output
|
||||
Transformation string `toml:"transformation"`
|
||||
|
||||
// Field filter for interpreting data as nested JSON for JSON serializer
|
||||
JSONNestedFieldInclude []string `toml:"json_nested_fields_include"`
|
||||
JSONNestedFieldExclude []string `toml:"json_nested_fields_exclude"`
|
||||
|
||||
// Include HEC routing fields for splunkmetric output
|
||||
HecRouting bool `toml:"hec_routing"`
|
||||
|
||||
// Enable Splunk MultiMetric output (Splunk 8.0+)
|
||||
SplunkmetricMultiMetric bool `toml:"splunkmetric_multi_metric"`
|
||||
|
||||
// Omit the Splunk Event "metric" tag
|
||||
SplunkmetricOmitEventTag bool `toml:"splunkmetric_omit_event_tag"`
|
||||
|
||||
// Point tags to use as the source name for Wavefront (if none found, host will be used).
|
||||
WavefrontSourceOverride []string `toml:"wavefront_source_override"`
|
||||
|
||||
// Use Strict rules to sanitize metric and tag names from invalid characters for Wavefront
|
||||
// When enabled forward slash (/) and comma (,) will be accepted
|
||||
WavefrontUseStrict bool `toml:"wavefront_use_strict"`
|
||||
|
||||
// Convert "_" in prefixes to "." for Wavefront
|
||||
WavefrontDisablePrefixConversion bool `toml:"wavefront_disable_prefix_conversion"`
|
||||
|
||||
// Include the metric timestamp on each sample.
|
||||
PrometheusExportTimestamp bool `toml:"prometheus_export_timestamp"`
|
||||
|
||||
// Sort prometheus metric families and metric samples. Useful for
|
||||
// debugging.
|
||||
PrometheusSortMetrics bool `toml:"prometheus_sort_metrics"`
|
||||
|
||||
// Output string fields as metric labels; when false string fields are
|
||||
// discarded.
|
||||
PrometheusStringAsLabel bool `toml:"prometheus_string_as_label"`
|
||||
|
||||
// Encode metrics without HELP metadata. This helps reduce the payload size.
|
||||
PrometheusCompactEncoding bool `toml:"prometheus_compact_encoding"`
|
||||
}
|
||||
|
||||
// NewSerializer a Serializer interface based on the given config.
|
||||
func NewSerializer(config *Config) (Serializer, error) {
|
||||
creator, found := Serializers[config.DataFormat]
|
||||
if !found {
|
||||
return nil, fmt.Errorf("invalid data format: %s", config.DataFormat)
|
||||
}
|
||||
|
||||
// Try to create new-style serializers the old way...
|
||||
serializer := creator()
|
||||
p, ok := serializer.(SerializerCompatibility)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("serializer for %q cannot be created the old way", config.DataFormat)
|
||||
}
|
||||
err := p.InitFromConfig(config)
|
||||
|
||||
return serializer, err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -210,17 +210,8 @@ func verifyValue(v interface{}) (value interface{}, valid bool) {
|
|||
|
||||
func init() {
|
||||
serializers.Add("splunkmetric",
|
||||
func() serializers.Serializer {
|
||||
func() telegraf.Serializer {
|
||||
return &Serializer{}
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
// InitFromConfig is a compatibility function to construct the parser the old way
|
||||
func (s *Serializer) InitFromConfig(cfg *serializers.Config) error {
|
||||
s.HecRouting = cfg.HecRouting
|
||||
s.MultiMetric = cfg.SplunkmetricMultiMetric
|
||||
s.OmitEventTag = cfg.SplunkmetricOmitEventTag
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ func (s *Serializer) SerializeBatch(metrics []telegraf.Metric) ([]byte, error) {
|
|||
|
||||
func init() {
|
||||
serializers.Add("template",
|
||||
func() serializers.Serializer {
|
||||
func() telegraf.Serializer {
|
||||
return &Serializer{}
|
||||
},
|
||||
)
|
||||
|
|
|
|||
|
|
@ -189,18 +189,8 @@ func (b *buffer) WriteFloat64(val float64) {
|
|||
|
||||
func init() {
|
||||
serializers.Add("wavefront",
|
||||
func() serializers.Serializer {
|
||||
func() telegraf.Serializer {
|
||||
return &Serializer{}
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
// InitFromConfig is a compatibility function to construct the parser the old way
|
||||
func (s *Serializer) InitFromConfig(cfg *serializers.Config) error {
|
||||
s.Prefix = cfg.Prefix
|
||||
s.UseStrict = cfg.WavefrontUseStrict
|
||||
s.SourceOverride = cfg.WavefrontSourceOverride
|
||||
s.DisablePrefixConversions = cfg.WavefrontDisablePrefixConversion
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue