From 393932068df01789d151155ea0561622edbb47ac Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Fri, 28 May 2021 12:34:04 +0300 Subject: [PATCH] Return results in a stable order --- pkg/timeseries/sort.go | 33 +++++++++++++++++++++++++++++ pkg/timeseries/timeseries.go | 27 ----------------------- src/datasource-zabbix/datasource.ts | 12 +++++++++++ 3 files changed, 45 insertions(+), 27 deletions(-) create mode 100644 pkg/timeseries/sort.go diff --git a/pkg/timeseries/sort.go b/pkg/timeseries/sort.go new file mode 100644 index 0000000..8c5150f --- /dev/null +++ b/pkg/timeseries/sort.go @@ -0,0 +1,33 @@ +package timeseries + +import ( + "sort" +) + +// SortBy sorts series by value calculated with provided aggFunc in given order +func SortBy(series []*TimeSeriesData, order string, aggFunc AggFunc) []*TimeSeriesData { + aggregatedSeries := make([]TimeSeries, len(series)) + for i, s := range series { + aggregatedSeries[i] = s.TS.GroupByRange(aggFunc) + } + + // Sort by aggregated value + sort.Slice(series, func(i, j int) bool { + if len(aggregatedSeries[i]) > 0 && len(aggregatedSeries[j]) > 0 { + return *aggregatedSeries[i][0].Value < *aggregatedSeries[j][0].Value + } else if len(aggregatedSeries[j]) > 0 { + return true + } + return false + }) + + if order == "desc" { + reverseSeries := make([]*TimeSeriesData, len(series)) + for i := 0; i < len(series); i++ { + reverseSeries[i] = series[len(series)-1-i] + } + series = reverseSeries + } + + return series +} diff --git a/pkg/timeseries/timeseries.go b/pkg/timeseries/timeseries.go index 633f945..44c637f 100644 --- a/pkg/timeseries/timeseries.go +++ b/pkg/timeseries/timeseries.go @@ -145,33 +145,6 @@ func Filter(series []*TimeSeriesData, n int, order string, aggFunc AggFunc) []*T return filteredSeries } -func SortBy(series []*TimeSeriesData, order string, aggFunc AggFunc) []*TimeSeriesData { - aggregatedSeries := make([]TimeSeries, len(series)) - for i, s := range series { - aggregatedSeries[i] = s.TS.GroupByRange(aggFunc) - } - - // Sort by aggregated value - sort.Slice(series, func(i, j int) bool { - if len(aggregatedSeries[i]) > 0 && len(aggregatedSeries[j]) > 0 { - return *aggregatedSeries[i][0].Value < *aggregatedSeries[j][0].Value - } else if len(aggregatedSeries[j]) > 0 { - return true - } - return false - }) - - if order == "desc" { - reverseSeries := make([]*TimeSeriesData, len(series)) - for i := 0; i < len(series); i++ { - reverseSeries[i] = series[len(series)-1-i] - } - series = reverseSeries - } - - return series -} - func AggregateBy(series []*TimeSeriesData, interval time.Duration, aggFunc AggFunc) *TimeSeriesData { aggregatedSeries := NewTimeSeries() diff --git a/src/datasource-zabbix/datasource.ts b/src/datasource-zabbix/datasource.ts index 51d0621..c05d1c7 100644 --- a/src/datasource-zabbix/datasource.ts +++ b/src/datasource-zabbix/datasource.ts @@ -250,6 +250,7 @@ export class ZabbixDatasource extends DataSourceApi { const resp = toDataQueryResponse(rsp); + this.sortByRefId(resp); this.applyFrontendFunctions(resp, request); return resp; }), @@ -369,6 +370,17 @@ export class ZabbixDatasource extends DataSourceApi { + if (a.refId < b.refId) { + return -1; + } else if (a.refId > b.refId) { + return 1; + } + return 0; + }); + } + applyFrontendFunctions(response: DataQueryResponse, request: DataQueryRequest) { for (let i = 0; i < response.data.length; i++) { const frame: DataFrame = response.data[i];