From d6085755c452a60686a5a6477f727beadbcc3c98 Mon Sep 17 00:00:00 2001 From: pdoan017 Date: Thu, 24 Aug 2017 15:38:36 -0400 Subject: [PATCH 1/2] Added series order according to query results Raw query results would return as expected. But when appending new series to pointsBySeries map, order of keys is random. So I've added a list to keep track of series order. Should implement FIFO rules. --- pkg/tsdb/mysql/mysql.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pkg/tsdb/mysql/mysql.go b/pkg/tsdb/mysql/mysql.go index 09ded090089..2676273bd5b 100644 --- a/pkg/tsdb/mysql/mysql.go +++ b/pkg/tsdb/mysql/mysql.go @@ -245,6 +245,7 @@ func (e MysqlExecutor) getTypedRowData(types []*sql.ColumnType, rows *core.Rows) func (e MysqlExecutor) TransformToTimeSeries(query *tsdb.Query, rows *core.Rows, result *tsdb.QueryResult) error { pointsBySeries := make(map[string]*tsdb.TimeSeries) + seriesByQueryOrder := list.New() columnNames, err := rows.Columns() if err != nil { @@ -282,11 +283,13 @@ func (e MysqlExecutor) TransformToTimeSeries(query *tsdb.Query, rows *core.Rows, series := &tsdb.TimeSeries{Name: rowData.metric} series.Points = append(series.Points, tsdb.TimePoint{rowData.value, rowData.time}) pointsBySeries[rowData.metric] = series + seriesByQueryOrder.PushBack(rowData.metric) } } - for _, value := range pointsBySeries { - result.Series = append(result.Series, value) + for elem := seriesByQueryOrder.Front(); elem != nil; elem = elem.Next() { + key := elem.Value.(string) + result.Series = append(result.Series, pointsBySeries[key]) } result.Meta.Set("rowCount", rowCount) From 3eea5d235daf1e21fa425e3b9d783190b57f86c1 Mon Sep 17 00:00:00 2001 From: pdoan017 Date: Thu, 24 Aug 2017 15:42:54 -0400 Subject: [PATCH 2/2] Added import for container/list --- pkg/tsdb/mysql/mysql.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/tsdb/mysql/mysql.go b/pkg/tsdb/mysql/mysql.go index 2676273bd5b..8b9e74241d5 100644 --- a/pkg/tsdb/mysql/mysql.go +++ b/pkg/tsdb/mysql/mysql.go @@ -1,6 +1,7 @@ package mysql import ( + "container/list" "context" "database/sql" "fmt"