InfluxDB: metricFindQuery migration to backend (#44546)
* Send metricFindQuery to backend * Added feature toggle * Changed flag name * metricFindQuery backend * Added test for metricFindQuery backend parse * Added test for show tag values * Test for metricFindQueries * Updated tests * Put back comment * Case insensitive in transformRows * Check length ov value pair * Sep tests * Updated valuePair index
This commit is contained in:
@@ -56,32 +56,59 @@ func parseJSON(buf io.ReadCloser) (Response, error) {
|
||||
func transformRows(rows []Row, query Query) data.Frames {
|
||||
frames := data.Frames{}
|
||||
for _, row := range rows {
|
||||
for columnIndex, column := range row.Columns {
|
||||
if column == "time" {
|
||||
continue
|
||||
}
|
||||
var hasTimeCol = false
|
||||
|
||||
var timeArray []time.Time
|
||||
var valueArray []*float64
|
||||
for _, column := range row.Columns {
|
||||
if column == "time" {
|
||||
hasTimeCol = true
|
||||
}
|
||||
}
|
||||
|
||||
if !hasTimeCol {
|
||||
var values []string
|
||||
|
||||
for _, valuePair := range row.Values {
|
||||
timestamp, timestampErr := parseTimestamp(valuePair[0])
|
||||
// we only add this row if the timestamp is valid
|
||||
if timestampErr == nil {
|
||||
value := parseValue(valuePair[columnIndex])
|
||||
timeArray = append(timeArray, timestamp)
|
||||
valueArray = append(valueArray, value)
|
||||
if strings.Contains(strings.ToLower(query.RawQuery), strings.ToLower("SHOW TAG VALUES")) {
|
||||
if len(valuePair) >= 2 {
|
||||
values = append(values, valuePair[1].(string))
|
||||
}
|
||||
} else {
|
||||
if len(valuePair) >= 1 {
|
||||
values = append(values, valuePair[0].(string))
|
||||
}
|
||||
}
|
||||
}
|
||||
name := formatFrameName(row, column, query)
|
||||
|
||||
timeField := data.NewField("time", nil, timeArray)
|
||||
valueField := data.NewField("value", row.Tags, valueArray)
|
||||
field := data.NewField("value", nil, values)
|
||||
frames = append(frames, data.NewFrame(row.Name, field))
|
||||
} else {
|
||||
for columnIndex, column := range row.Columns {
|
||||
if column == "time" {
|
||||
continue
|
||||
}
|
||||
|
||||
// set a nice name on the value-field
|
||||
valueField.SetConfig(&data.FieldConfig{DisplayNameFromDS: name})
|
||||
var timeArray []time.Time
|
||||
var valueArray []*float64
|
||||
|
||||
frames = append(frames, newDataFrame(name, query.RawQuery, timeField, valueField))
|
||||
for _, valuePair := range row.Values {
|
||||
timestamp, timestampErr := parseTimestamp(valuePair[0])
|
||||
// we only add this row if the timestamp is valid
|
||||
if timestampErr == nil {
|
||||
value := parseValue(valuePair[columnIndex])
|
||||
timeArray = append(timeArray, timestamp)
|
||||
valueArray = append(valueArray, value)
|
||||
}
|
||||
}
|
||||
name := formatFrameName(row, column, query)
|
||||
|
||||
timeField := data.NewField("time", nil, timeArray)
|
||||
valueField := data.NewField("value", row.Tags, valueArray)
|
||||
|
||||
// set a nice name on the value-field
|
||||
valueField.SetConfig(&data.FieldConfig{DisplayNameFromDS: name})
|
||||
|
||||
frames = append(frames, newDataFrame(name, query.RawQuery, timeField, valueField))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user