47 lines
1.1 KiB
Go
47 lines
1.1 KiB
Go
package msgpack
|
|
|
|
import (
|
|
"github.com/influxdata/telegraf"
|
|
"github.com/influxdata/telegraf/plugins/serializers"
|
|
)
|
|
|
|
// Serializer encodes metrics in MessagePack format
|
|
type Serializer struct{}
|
|
|
|
func marshalMetric(buf []byte, metric telegraf.Metric) ([]byte, error) {
|
|
return (&Metric{
|
|
Name: metric.Name(),
|
|
Time: MessagePackTime{time: metric.Time()},
|
|
Tags: metric.Tags(),
|
|
Fields: metric.Fields(),
|
|
}).MarshalMsg(buf)
|
|
}
|
|
|
|
// Serialize implements serializers.Serializer.Serialize
|
|
// github.com/influxdata/telegraf/plugins/serializers/Serializer
|
|
func (*Serializer) Serialize(metric telegraf.Metric) ([]byte, error) {
|
|
return marshalMetric(nil, metric)
|
|
}
|
|
|
|
// SerializeBatch implements serializers.Serializer.SerializeBatch
|
|
// github.com/influxdata/telegraf/plugins/serializers/Serializer
|
|
func (*Serializer) SerializeBatch(metrics []telegraf.Metric) ([]byte, error) {
|
|
buf := make([]byte, 0)
|
|
for _, m := range metrics {
|
|
var err error
|
|
buf, err = marshalMetric(buf, m)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
return buf, nil
|
|
}
|
|
|
|
func init() {
|
|
serializers.Add("msgpack",
|
|
func() telegraf.Serializer {
|
|
return &Serializer{}
|
|
},
|
|
)
|
|
}
|