mirror of
https://github.com/Oxalide/vsphere-influxdb-go.git
synced 2023-10-10 13:36:51 +02:00
48 lines
1.1 KiB
Go
48 lines
1.1 KiB
Go
|
package statement
|
||
|
|
||
|
// A Template contains all information to fill in templated variables in inset and query statements
|
||
|
type Template struct {
|
||
|
Tags []string
|
||
|
Function *Function
|
||
|
}
|
||
|
|
||
|
// Templates are a collection of Template
|
||
|
type Templates []*Template
|
||
|
|
||
|
// Init makes Stringers out of the Templates for quick point creation
|
||
|
func (t Templates) Init(seriesCount int) Stringers {
|
||
|
arr := make([]Stringer, len(t))
|
||
|
for i, tmp := range t {
|
||
|
if len(tmp.Tags) == 0 {
|
||
|
arr[i] = tmp.Function.NewStringer(seriesCount)
|
||
|
continue
|
||
|
}
|
||
|
arr[i] = tmp.NewTagFunc()
|
||
|
}
|
||
|
return arr
|
||
|
}
|
||
|
|
||
|
// Calculates the number of series implied by a template
|
||
|
func (t *Template) numSeries() int {
|
||
|
// If !t.Tags then tag cardinality is t.Function.Count
|
||
|
if len(t.Tags) == 0 {
|
||
|
return t.Function.Count
|
||
|
}
|
||
|
// Else tag cardinality is len(t.Tags)
|
||
|
return len(t.Tags)
|
||
|
}
|
||
|
|
||
|
// NewTagFunc returns a Stringer that loops through the given tags
|
||
|
func (t *Template) NewTagFunc() Stringer {
|
||
|
if len(t.Tags) == 0 {
|
||
|
return func() string { return "EMPTY TAGS" }
|
||
|
}
|
||
|
|
||
|
i := 0
|
||
|
return func() string {
|
||
|
s := t.Tags[i]
|
||
|
i = (i + 1) % len(t.Tags)
|
||
|
return s
|
||
|
}
|
||
|
}
|