@@ -202,22 +202,22 @@ var builtins = map[string]parse.Func{
202
202
203
203
// Group functions
204
204
"addtags" : {
205
- Args : []models.FuncType {models .TypeSeriesSet , models .TypeString },
206
- Return : models . TypeSeriesSet ,
207
- Tags : tagRename ,
208
- F : AddTags ,
205
+ Args : []models.FuncType {models .TypeVariantSet , models .TypeString },
206
+ VariantReturn : true ,
207
+ Tags : tagRename ,
208
+ F : AddTags ,
209
209
},
210
210
"rename" : {
211
- Args : []models.FuncType {models .TypeSeriesSet , models .TypeString },
212
- Return : models . TypeSeriesSet ,
213
- Tags : tagRename ,
214
- F : Rename ,
211
+ Args : []models.FuncType {models .TypeVariantSet , models .TypeString },
212
+ VariantReturn : true ,
213
+ Tags : tagRename ,
214
+ F : Rename ,
215
215
},
216
216
"remove" : {
217
- Args : []models.FuncType {models .TypeSeriesSet , models .TypeString },
218
- Return : models . TypeSeriesSet ,
219
- Tags : tagRemove ,
220
- F : Remove ,
217
+ Args : []models.FuncType {models .TypeVariantSet , models .TypeString },
218
+ VariantReturn : true ,
219
+ Tags : tagRemove ,
220
+ F : Remove ,
221
221
},
222
222
"t" : {
223
223
Args : []models.FuncType {models .TypeNumberSet , models .TypeString },
@@ -234,10 +234,10 @@ var builtins = map[string]parse.Func{
234
234
// Other functions
235
235
236
236
"abs" : {
237
- Args : []models.FuncType {models .TypeNumberSet },
238
- Return : models . TypeNumberSet ,
239
- Tags : tagFirst ,
240
- F : Abs ,
237
+ Args : []models.FuncType {models .TypeVariantSet },
238
+ VariantReturn : true ,
239
+ Tags : tagFirst ,
240
+ F : Abs ,
241
241
},
242
242
"crop" : {
243
243
Args : []models.FuncType {models .TypeSeriesSet , models .TypeNumberSet , models .TypeNumberSet },
@@ -303,16 +303,16 @@ var builtins = map[string]parse.Func{
303
303
F : Epoch ,
304
304
},
305
305
"filter" : {
306
- Args : []models.FuncType {models .TypeSeriesSet , models .TypeNumberSet },
307
- Return : models . TypeSeriesSet ,
308
- Tags : tagFirst ,
309
- F : Filter ,
306
+ Args : []models.FuncType {models .TypeVariantSet , models .TypeNumberSet },
307
+ VariantReturn : true ,
308
+ Tags : tagFirst ,
309
+ F : Filter ,
310
310
},
311
311
"limit" : {
312
- Args : []models.FuncType {models .TypeNumberSet , models .TypeScalar },
313
- Return : models . TypeNumberSet ,
314
- Tags : tagFirst ,
315
- F : Limit ,
312
+ Args : []models.FuncType {models .TypeVariantSet , models .TypeScalar },
313
+ VariantReturn : true ,
314
+ Tags : tagFirst ,
315
+ F : Limit ,
316
316
},
317
317
"nv" : {
318
318
Args : []models.FuncType {models .TypeNumberSet , models .TypeScalar },
@@ -553,27 +553,27 @@ func Sort(e *State, T miniprofiler.Timer, series *Results, order string) (*Resul
553
553
return series , nil
554
554
}
555
555
556
- func Limit (e * State , T miniprofiler.Timer , series * Results , v float64 ) (* Results , error ) {
556
+ func Limit (e * State , T miniprofiler.Timer , set * Results , v float64 ) (* Results , error ) {
557
557
i := int (v )
558
- if len (series .Results ) > i {
559
- series .Results = series .Results [:i ]
558
+ if len (set .Results ) > i {
559
+ set .Results = set .Results [:i ]
560
560
}
561
- return series , nil
561
+ return set , nil
562
562
}
563
563
564
- func Filter (e * State , T miniprofiler.Timer , series * Results , number * Results ) (* Results , error ) {
564
+ func Filter (e * State , T miniprofiler.Timer , set * Results , numberSet * Results ) (* Results , error ) {
565
565
var ns ResultSlice
566
- for _ , sr := range series .Results {
567
- for _ , nr := range number .Results {
566
+ for _ , sr := range set .Results {
567
+ for _ , nr := range numberSet .Results {
568
568
if sr .Group .Subset (nr .Group ) || nr .Group .Subset (sr .Group ) {
569
569
if nr .Value .Value ().(Number ) != 0 {
570
570
ns = append (ns , sr )
571
571
}
572
572
}
573
573
}
574
574
}
575
- series .Results = ns
576
- return series , nil
575
+ set .Results = ns
576
+ return set , nil
577
577
}
578
578
579
579
func Tail (e * State , T miniprofiler.Timer , series * Results , number * Results ) (* Results , error ) {
@@ -634,20 +634,20 @@ func Merge(e *State, T miniprofiler.Timer, series ...*Results) (*Results, error)
634
634
return res , nil
635
635
}
636
636
637
- func Remove (e * State , T miniprofiler.Timer , seriesSet * Results , tagKey string ) (* Results , error ) {
637
+ func Remove (e * State , T miniprofiler.Timer , set * Results , tagKey string ) (* Results , error ) {
638
638
seen := make (map [string ]bool )
639
- for _ , r := range seriesSet .Results {
639
+ for _ , r := range set .Results {
640
640
if _ , ok := r .Group [tagKey ]; ok {
641
641
delete (r .Group , tagKey )
642
642
if _ , ok := seen [r .Group .String ()]; ok {
643
- return seriesSet , fmt .Errorf ("duplicate group would result from removing tag key: %v" , tagKey )
643
+ return set , fmt .Errorf ("duplicate group would result from removing tag key: %v" , tagKey )
644
644
}
645
645
seen [r .Group .String ()] = true
646
646
} else {
647
- return seriesSet , fmt .Errorf ("tag key %v not found in result" , tagKey )
647
+ return set , fmt .Errorf ("tag key %v not found in result" , tagKey )
648
648
}
649
649
}
650
- return seriesSet , nil
650
+ return set , nil
651
651
}
652
652
653
653
func LeftJoin (e * State , T miniprofiler.Timer , keysCSV , columnsCSV string , rowData ... * Results ) (* Results , error ) {
@@ -832,11 +832,18 @@ func reduce(e *State, T miniprofiler.Timer, series *Results, F func(Series, ...f
832
832
return match (f , series , args ... )
833
833
}
834
834
835
- func Abs (e * State , T miniprofiler.Timer , series * Results ) * Results {
836
- for _ , s := range series .Results {
837
- s .Value = Number (math .Abs (float64 (s .Value .Value ().(Number ))))
835
+ func Abs (e * State , T miniprofiler.Timer , set * Results ) * Results {
836
+ for _ , s := range set .Results {
837
+ switch s .Type () {
838
+ case models .TypeNumberSet :
839
+ s .Value = Number (math .Abs (float64 (s .Value .Value ().(Number ))))
840
+ case models .TypeSeriesSet :
841
+ for k , v := range s .Value .Value ().(Series ) {
842
+ s .Value .Value ().(Series )[k ] = math .Abs (v )
843
+ }
844
+ }
838
845
}
839
- return series
846
+ return set
840
847
}
841
848
842
849
func Diff (e * State , T miniprofiler.Timer , series * Results ) (r * Results , err error ) {
@@ -1152,14 +1159,14 @@ func percentile(dps Series, args ...float64) (a float64) {
1152
1159
return x [int (i )]
1153
1160
}
1154
1161
1155
- func Rename (e * State , T miniprofiler.Timer , series * Results , s string ) (* Results , error ) {
1162
+ func Rename (e * State , T miniprofiler.Timer , set * Results , s string ) (* Results , error ) {
1156
1163
for _ , section := range strings .Split (s , "," ) {
1157
1164
kv := strings .Split (section , "=" )
1158
1165
if len (kv ) != 2 {
1159
1166
return nil , fmt .Errorf ("error passing groups" )
1160
1167
}
1161
1168
oldKey , newKey := kv [0 ], kv [1 ]
1162
- for _ , res := range series .Results {
1169
+ for _ , res := range set .Results {
1163
1170
for tag , v := range res .Group {
1164
1171
if oldKey == tag {
1165
1172
if _ , ok := res .Group [newKey ]; ok {
@@ -1172,19 +1179,19 @@ func Rename(e *State, T miniprofiler.Timer, series *Results, s string) (*Results
1172
1179
}
1173
1180
}
1174
1181
}
1175
- return series , nil
1182
+ return set , nil
1176
1183
}
1177
1184
1178
- func AddTags (e * State , T miniprofiler.Timer , series * Results , s string ) (* Results , error ) {
1185
+ func AddTags (e * State , T miniprofiler.Timer , set * Results , s string ) (* Results , error ) {
1179
1186
if s == "" {
1180
- return series , nil
1187
+ return set , nil
1181
1188
}
1182
1189
tagSetToAdd , err := opentsdb .ParseTags (s )
1183
1190
if err != nil {
1184
1191
return nil , err
1185
1192
}
1186
1193
for tagKey , tagValue := range tagSetToAdd {
1187
- for _ , res := range series .Results {
1194
+ for _ , res := range set .Results {
1188
1195
if res .Group == nil {
1189
1196
res .Group = make (opentsdb.TagSet )
1190
1197
}
@@ -1194,7 +1201,7 @@ func AddTags(e *State, T miniprofiler.Timer, series *Results, s string) (*Result
1194
1201
res .Group [tagKey ] = tagValue
1195
1202
}
1196
1203
}
1197
- return series , nil
1204
+ return set , nil
1198
1205
}
1199
1206
1200
1207
func Ungroup (e * State , T miniprofiler.Timer , d * Results ) (* Results , error ) {
0 commit comments