mirror of
https://github.com/Oxalide/vsphere-influxdb-go.git
synced 2023-10-10 13:36:51 +02:00
236 lines
6.5 KiB
Cheetah
236 lines
6.5 KiB
Cheetah
|
package influxql
|
||
|
|
||
|
import (
|
||
|
"encoding/binary"
|
||
|
"io"
|
||
|
|
||
|
"github.com/gogo/protobuf/proto"
|
||
|
internal "github.com/influxdata/influxdb/influxql/internal"
|
||
|
)
|
||
|
|
||
|
{{range .}}
|
||
|
|
||
|
// {{.Name}}Point represents a point with a {{.Type}} value.
|
||
|
// DO NOT ADD ADDITIONAL FIELDS TO THIS STRUCT.
|
||
|
// See TestPoint_Fields in influxql/point_test.go for more details.
|
||
|
type {{.Name}}Point struct {
|
||
|
Name string
|
||
|
Tags Tags
|
||
|
|
||
|
Time int64
|
||
|
Nil bool
|
||
|
Value {{.Type}}
|
||
|
Aux []interface{}
|
||
|
|
||
|
// Total number of points that were combined into this point from an aggregate.
|
||
|
// If this is zero, the point is not the result of an aggregate function.
|
||
|
Aggregated uint32
|
||
|
}
|
||
|
|
||
|
func (v *{{.Name}}Point) name() string { return v.Name }
|
||
|
func (v *{{.Name}}Point) tags() Tags { return v.Tags }
|
||
|
func (v *{{.Name}}Point) time() int64 { return v.Time }
|
||
|
func (v *{{.Name}}Point) nil() bool { return v.Nil }
|
||
|
func (v *{{.Name}}Point) value() interface{} {
|
||
|
if v.Nil {
|
||
|
return nil
|
||
|
}
|
||
|
return v.Value
|
||
|
}
|
||
|
func (v *{{.Name}}Point) aux() []interface{} { return v.Aux }
|
||
|
|
||
|
// Clone returns a copy of v.
|
||
|
func (v *{{.Name}}Point) Clone() *{{.Name}}Point {
|
||
|
if v == nil {
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
other := *v
|
||
|
if v.Aux != nil {
|
||
|
other.Aux = make([]interface{}, len(v.Aux))
|
||
|
copy(other.Aux, v.Aux)
|
||
|
}
|
||
|
|
||
|
return &other
|
||
|
}
|
||
|
|
||
|
// CopyTo makes a deep copy into the point.
|
||
|
func (v *{{.Name}}Point) CopyTo(other *{{.Name}}Point) {
|
||
|
*other = *v
|
||
|
if v.Aux != nil {
|
||
|
other.Aux = make([]interface{}, len(v.Aux))
|
||
|
copy(other.Aux, v.Aux)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func encode{{.Name}}Point(p *{{.Name}}Point) *internal.Point {
|
||
|
return &internal.Point{
|
||
|
Name: proto.String(p.Name),
|
||
|
Tags: proto.String(p.Tags.ID()),
|
||
|
Time: proto.Int64(p.Time),
|
||
|
Nil: proto.Bool(p.Nil),
|
||
|
Aux: encodeAux(p.Aux),
|
||
|
Aggregated: proto.Uint32(p.Aggregated),
|
||
|
|
||
|
{{if eq .Name "Float"}}
|
||
|
FloatValue: proto.Float64(p.Value),
|
||
|
{{else if eq .Name "Integer"}}
|
||
|
IntegerValue: proto.Int64(p.Value),
|
||
|
{{else if eq .Name "String"}}
|
||
|
StringValue: proto.String(p.Value),
|
||
|
{{else if eq .Name "Boolean"}}
|
||
|
BooleanValue: proto.Bool(p.Value),
|
||
|
{{end}}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func decode{{.Name}}Point(pb *internal.Point) *{{.Name}}Point {
|
||
|
return &{{.Name}}Point{
|
||
|
Name: pb.GetName(),
|
||
|
Tags: newTagsID(pb.GetTags()),
|
||
|
Time: pb.GetTime(),
|
||
|
Nil: pb.GetNil(),
|
||
|
Aux: decodeAux(pb.Aux),
|
||
|
Aggregated: pb.GetAggregated(),
|
||
|
Value: pb.Get{{.Name}}Value(),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// {{.name}}Points represents a slice of points sortable by value.
|
||
|
type {{.name}}Points []{{.Name}}Point
|
||
|
|
||
|
func (a {{.name}}Points) Len() int { return len(a) }
|
||
|
func (a {{.name}}Points) Less(i, j int) bool {
|
||
|
if a[i].Time != a[j].Time {
|
||
|
return a[i].Time < a[j].Time
|
||
|
}
|
||
|
return {{if ne .Name "Boolean"}}a[i].Value < a[j].Value{{else}}!a[i].Value{{end}}
|
||
|
}
|
||
|
func (a {{.name}}Points) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
|
||
|
|
||
|
// {{.name}}PointsByValue represents a slice of points sortable by value.
|
||
|
type {{.name}}PointsByValue []{{.Name}}Point
|
||
|
|
||
|
func (a {{.name}}PointsByValue) Len() int { return len(a) }
|
||
|
{{if eq .Name "Boolean"}}
|
||
|
func (a {{.name}}PointsByValue) Less(i, j int) bool { return !a[i].Value }
|
||
|
{{else}}
|
||
|
func (a {{.name}}PointsByValue) Less(i, j int) bool { return a[i].Value < a[j].Value }
|
||
|
{{end}}
|
||
|
func (a {{.name}}PointsByValue) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
|
||
|
|
||
|
// {{.name}}PointsByTime represents a slice of points sortable by value.
|
||
|
type {{.name}}PointsByTime []{{.Name}}Point
|
||
|
|
||
|
func (a {{.name}}PointsByTime) Len() int { return len(a) }
|
||
|
func (a {{.name}}PointsByTime) Less(i, j int) bool { return a[i].Time < a[j].Time }
|
||
|
func (a {{.name}}PointsByTime) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
|
||
|
|
||
|
// {{.name}}PointByFunc represents a slice of points sortable by a function.
|
||
|
type {{.name}}PointsByFunc struct {
|
||
|
points []{{.Name}}Point
|
||
|
cmp func(a, b *{{.Name}}Point) bool
|
||
|
}
|
||
|
|
||
|
func (a *{{.name}}PointsByFunc) Len() int { return len(a.points) }
|
||
|
func (a *{{.name}}PointsByFunc) Less(i, j int) bool { return a.cmp(&a.points[i], &a.points[j]) }
|
||
|
func (a *{{.name}}PointsByFunc) Swap(i, j int) { a.points[i], a.points[j] = a.points[j], a.points[i] }
|
||
|
|
||
|
func (a *{{.name}}PointsByFunc) Push(x interface{}) {
|
||
|
a.points = append(a.points, x.({{.Name}}Point))
|
||
|
}
|
||
|
|
||
|
func (a *{{.name}}PointsByFunc) Pop() interface{} {
|
||
|
p := a.points[len(a.points)-1]
|
||
|
a.points = a.points[:len(a.points)-1]
|
||
|
return p
|
||
|
}
|
||
|
|
||
|
func {{.name}}PointsSortBy(points []{{.Name}}Point, cmp func(a, b *{{.Name}}Point) bool) *{{.name}}PointsByFunc {
|
||
|
return &{{.name}}PointsByFunc{
|
||
|
points: points,
|
||
|
cmp: cmp,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// {{.Name}}PointEncoder encodes {{.Name}}Point points to a writer.
|
||
|
type {{.Name}}PointEncoder struct {
|
||
|
w io.Writer
|
||
|
}
|
||
|
|
||
|
// New{{.Name}}PointEncoder returns a new instance of {{.Name}}PointEncoder that writes to w.
|
||
|
func New{{.Name}}PointEncoder(w io.Writer) *{{.Name}}PointEncoder {
|
||
|
return &{{.Name}}PointEncoder{w: w}
|
||
|
}
|
||
|
|
||
|
// Encode{{.Name}}Point marshals and writes p to the underlying writer.
|
||
|
func (enc *{{.Name}}PointEncoder) Encode{{.Name}}Point(p *{{.Name}}Point) error {
|
||
|
// Marshal to bytes.
|
||
|
buf, err := proto.Marshal(encode{{.Name}}Point(p))
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// Write the length.
|
||
|
if err := binary.Write(enc.w, binary.BigEndian, uint32(len(buf))); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// Write the encoded point.
|
||
|
if _, err := enc.w.Write(buf); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
|
||
|
// {{.Name}}PointDecoder decodes {{.Name}}Point points from a reader.
|
||
|
type {{.Name}}PointDecoder struct {
|
||
|
r io.Reader
|
||
|
stats IteratorStats
|
||
|
}
|
||
|
|
||
|
// New{{.Name}}PointDecoder returns a new instance of {{.Name}}PointDecoder that reads from r.
|
||
|
func New{{.Name}}PointDecoder(r io.Reader) *{{.Name}}PointDecoder {
|
||
|
return &{{.Name}}PointDecoder{r: r}
|
||
|
}
|
||
|
|
||
|
// Stats returns iterator stats embedded within the stream.
|
||
|
func (dec *{{.Name}}PointDecoder) Stats() IteratorStats { return dec.stats }
|
||
|
|
||
|
// Decode{{.Name}}Point reads from the underlying reader and unmarshals into p.
|
||
|
func (dec *{{.Name}}PointDecoder) Decode{{.Name}}Point(p *{{.Name}}Point) error {
|
||
|
for {
|
||
|
// Read length.
|
||
|
var sz uint32
|
||
|
if err := binary.Read(dec.r, binary.BigEndian, &sz); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// Read point data.
|
||
|
buf := make([]byte, sz)
|
||
|
if _, err := io.ReadFull(dec.r, buf); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// Unmarshal into point.
|
||
|
var pb internal.Point
|
||
|
if err := proto.Unmarshal(buf, &pb); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// If the point contains stats then read stats and retry.
|
||
|
if pb.Stats != nil {
|
||
|
dec.stats = decodeIteratorStats(pb.Stats)
|
||
|
continue
|
||
|
}
|
||
|
|
||
|
// Decode into point object.
|
||
|
*p = *decode{{.Name}}Point(&pb)
|
||
|
|
||
|
return nil
|
||
|
}
|
||
|
}
|
||
|
|
||
|
{{end}}
|