@ -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 {
var hasTimeCol = false
for _ , column := range row . Columns {
if column == "time" {
continue
hasTimeCol = tr ue
}
}
var timeArray [ ] time . Time
var valueArray [ ] * float64
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
}
var timeArray [ ] time . Time
var valueArray [ ] * float64
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 } )
// set a nice name on the value-field
valueField . SetConfig ( & data . FieldConfig { DisplayNameFromDS : name } )
frames = append ( frames , newDataFrame ( name , query . RawQuery , timeField , valueField ) )
frames = append ( frames , newDataFrame ( name , query . RawQuery , timeField , valueField ) )
}
}
}