99 lines
2.5 KiB
Cheetah
99 lines
2.5 KiB
Cheetah
package reads
|
|
|
|
import (
|
|
"github.com/influxdata/influxdb/storage/reads/datatypes"
|
|
"github.com/influxdata/influxdb/tsdb/cursors"
|
|
)
|
|
|
|
|
|
{{range .}}
|
|
func (w *ResponseWriter) get{{.Name}}PointsFrame() *datatypes.ReadResponse_Frame_{{.Name}}Points {
|
|
var res *datatypes.ReadResponse_Frame_{{.Name}}Points
|
|
if len(w.buffer.{{.Name}}) > 0 {
|
|
i := len(w.buffer.{{.Name}}) - 1
|
|
res = w.buffer.{{.Name}}[i]
|
|
w.buffer.{{.Name}}[i] = nil
|
|
w.buffer.{{.Name}} = w.buffer.{{.Name}}[:i]
|
|
} else {
|
|
res = &datatypes.ReadResponse_Frame_{{.Name}}Points{
|
|
{{.Name}}Points: &datatypes.ReadResponse_{{.Name}}PointsFrame{
|
|
Timestamps: make([]int64, 0, batchSize),
|
|
Values: make([]{{.Type}}, 0, batchSize),
|
|
},
|
|
}
|
|
}
|
|
|
|
return res
|
|
}
|
|
|
|
func (w *ResponseWriter) put{{.Name}}PointsFrame(f *datatypes.ReadResponse_Frame_{{.Name}}Points) {
|
|
f.{{.Name}}Points.Timestamps = f.{{.Name}}Points.Timestamps[:0]
|
|
f.{{.Name}}Points.Values = f.{{.Name}}Points.Values[:0]
|
|
w.buffer.{{.Name}} = append(w.buffer.{{.Name}}, f)
|
|
}
|
|
|
|
func (w *ResponseWriter) stream{{.Name}}ArraySeries(cur cursors.{{.Name}}ArrayCursor) {
|
|
w.sf.DataType = datatypes.DataType{{.Name}}
|
|
ss := len(w.res.Frames) - 1
|
|
a := cur.Next()
|
|
if len(a.Timestamps) == 0 {
|
|
w.sz -= w.sf.Size()
|
|
w.putSeriesFrame(w.res.Frames[ss].Data.(*datatypes.ReadResponse_Frame_Series))
|
|
w.res.Frames = w.res.Frames[:ss]
|
|
} else if w.sz > writeSize {
|
|
w.Flush()
|
|
}
|
|
}
|
|
|
|
func (w *ResponseWriter) stream{{.Name}}ArrayPoints(cur cursors.{{.Name}}ArrayCursor) {
|
|
w.sf.DataType = datatypes.DataType{{.Name}}
|
|
ss := len(w.res.Frames) - 1
|
|
|
|
p := w.get{{.Name}}PointsFrame()
|
|
frame := p.{{.Name}}Points
|
|
w.res.Frames = append(w.res.Frames, datatypes.ReadResponse_Frame{Data: p})
|
|
|
|
var (
|
|
seriesValueCount = 0
|
|
b = 0
|
|
)
|
|
|
|
for {
|
|
a := cur.Next()
|
|
if len(a.Timestamps) == 0 {
|
|
break
|
|
}
|
|
|
|
frame.Timestamps = append(frame.Timestamps, a.Timestamps...)
|
|
frame.Values = append(frame.Values, a.Values...)
|
|
|
|
b = len(frame.Timestamps)
|
|
if b >= batchSize {
|
|
seriesValueCount += b
|
|
b = 0
|
|
w.sz += frame.Size()
|
|
if w.sz >= writeSize {
|
|
w.Flush()
|
|
if w.err != nil {
|
|
break
|
|
}
|
|
}
|
|
|
|
p = w.get{{.Name}}PointsFrame()
|
|
frame = p.{{.Name}}Points
|
|
w.res.Frames = append(w.res.Frames, datatypes.ReadResponse_Frame{Data: p})
|
|
}
|
|
}
|
|
|
|
seriesValueCount += b
|
|
w.vc += seriesValueCount
|
|
if seriesValueCount == 0 {
|
|
w.sz -= w.sf.Size()
|
|
w.putSeriesFrame(w.res.Frames[ss].Data.(*datatypes.ReadResponse_Frame_Series))
|
|
w.res.Frames = w.res.Frames[:ss]
|
|
} else if w.sz > writeSize {
|
|
w.Flush()
|
|
}
|
|
}
|
|
{{end}}
|