Encoder for Golang to prepare sets of metrics in InfluxDB's Line Protocol format. As input, we use structs annotated with the influx tag, similar to how encoding/json works.
Supports the following Go builtin types as fields:
stringint32,int64,int16,int8,int,uint32,uint64,uint16,uint8,uintfloat64,float32booltime.Time
Not thread safe. If the struct is modified elsewhere concurrently, one would need to protect the read access required for encoding.
go get github.com/DCSO/fluxlinepackage main
import (
"bytes"
"fmt"
"log"
"github.com/DCSO/fluxline"
)
const measurement = "example"
type MyCounts struct {
Success uint64 `influx:"success"`
Error uint64 `influx:"error"`
}
func main() {
var counts MyCounts
var b bytes.Buffer
// ...
counts.Success++
// ...
counts.Success++
// ...
counts.Error++
// ...
tags := make(map[string]string)
tags["foo"] = "bar"
encoder := fluxline.NewEncoder(&b)
err := encoder.Encode(measurement, counts, tags)
if err != nil {
log.Fatal(err)
}
fmt.Print(b.String())
}